mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-02 18:03:56 -04:00
fix pgraph collisions
This commit is contained in:
parent
24e4e65342
commit
fe30a13f72
@ -130,7 +130,7 @@ end_group() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
// Function: qpCollisionHandlerPhysical::add_collider
|
// Function: qpCollisionHandlerPhysical::add_collider_drive
|
||||||
// Access: Public
|
// Access: Public
|
||||||
// Description: Adds a new collider to the list with a qpDriveInterface
|
// Description: Adds a new collider to the list with a qpDriveInterface
|
||||||
// pointer that needs to be told about the collider's
|
// pointer that needs to be told about the collider's
|
||||||
@ -138,12 +138,12 @@ end_group() {
|
|||||||
// new qpDriveInterface pointer.
|
// new qpDriveInterface pointer.
|
||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
void qpCollisionHandlerPhysical::
|
void qpCollisionHandlerPhysical::
|
||||||
add_collider(qpCollisionNode *node, qpDriveInterface *drive_interface) {
|
add_collider_drive(qpCollisionNode *node, qpDriveInterface *drive_interface) {
|
||||||
_colliders[node].set_drive_interface(drive_interface);
|
_colliders[node].set_drive_interface(drive_interface);
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
// Function: qpCollisionHandlerPhysical::add_collider
|
// Function: qpCollisionHandlerPhysical::add_collider_node
|
||||||
// Access: Public
|
// Access: Public
|
||||||
// Description: Adds a new collider to the list with a PandaNode
|
// Description: Adds a new collider to the list with a PandaNode
|
||||||
// pointer that will be updated with the collider's
|
// pointer that will be updated with the collider's
|
||||||
@ -151,7 +151,7 @@ add_collider(qpCollisionNode *node, qpDriveInterface *drive_interface) {
|
|||||||
// new PandaNode pointer.
|
// new PandaNode pointer.
|
||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
void qpCollisionHandlerPhysical::
|
void qpCollisionHandlerPhysical::
|
||||||
add_collider(qpCollisionNode *node, PandaNode *target) {
|
add_collider_node(qpCollisionNode *node, PandaNode *target) {
|
||||||
_colliders[node].set_node(target);
|
_colliders[node].set_node(target);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -45,8 +45,8 @@ public:
|
|||||||
virtual bool end_group();
|
virtual bool end_group();
|
||||||
|
|
||||||
PUBLISHED:
|
PUBLISHED:
|
||||||
void add_collider(qpCollisionNode *node, qpDriveInterface *drive_interface);
|
void add_collider_drive(qpCollisionNode *node, qpDriveInterface *drive_interface);
|
||||||
void add_collider(qpCollisionNode *node, PandaNode *target);
|
void add_collider_node(qpCollisionNode *node, PandaNode *target);
|
||||||
bool remove_collider(qpCollisionNode *node);
|
bool remove_collider(qpCollisionNode *node);
|
||||||
bool has_collider(qpCollisionNode *node) const;
|
bool has_collider(qpCollisionNode *node) const;
|
||||||
void clear_colliders();
|
void clear_colliders();
|
||||||
|
@ -236,7 +236,7 @@ traverse(const qpNodePath &root) {
|
|||||||
(*hi).first->begin_group();
|
(*hi).first->begin_group();
|
||||||
}
|
}
|
||||||
|
|
||||||
// r_traverse(root.node(), level_state);
|
r_traverse(root.node(), level_state);
|
||||||
|
|
||||||
hi = _handlers.begin();
|
hi = _handlers.begin();
|
||||||
while (hi != _handlers.end()) {
|
while (hi != _handlers.end()) {
|
||||||
|
@ -15,6 +15,7 @@
|
|||||||
computedVerticesMaker.I computedVerticesMaker.h \
|
computedVerticesMaker.I computedVerticesMaker.h \
|
||||||
computedVerticesMakerEntity.I computedVerticesMakerEntity.h \
|
computedVerticesMakerEntity.I computedVerticesMakerEntity.h \
|
||||||
config_egg2pg.h \
|
config_egg2pg.h \
|
||||||
|
deferredNodeProperty.h \
|
||||||
eggBinner.h \
|
eggBinner.h \
|
||||||
eggLoaderBase.h \
|
eggLoaderBase.h \
|
||||||
qpeggLoader.h \
|
qpeggLoader.h \
|
||||||
@ -26,6 +27,7 @@
|
|||||||
qpcharacterMaker.cxx \
|
qpcharacterMaker.cxx \
|
||||||
computedVerticesMaker.cxx \
|
computedVerticesMaker.cxx \
|
||||||
config_egg2pg.cxx \
|
config_egg2pg.cxx \
|
||||||
|
deferredNodeProperty.cxx \
|
||||||
eggBinner.cxx \
|
eggBinner.cxx \
|
||||||
qpeggLoader.cxx \
|
qpeggLoader.cxx \
|
||||||
qpload_egg_file.cxx
|
qpload_egg_file.cxx
|
||||||
|
95
panda/src/egg2pg/deferredNodeProperty.cxx
Normal file
95
panda/src/egg2pg/deferredNodeProperty.cxx
Normal file
@ -0,0 +1,95 @@
|
|||||||
|
// Filename: deferredNodeProperty.cxx
|
||||||
|
// Created by: drose (20Mar02)
|
||||||
|
//
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// PANDA 3D SOFTWARE
|
||||||
|
// Copyright (c) 2001, Disney Enterprises, Inc. All rights reserved
|
||||||
|
//
|
||||||
|
// All use of this software is subject to the terms of the Panda 3d
|
||||||
|
// Software license. You should have received a copy of this license
|
||||||
|
// along with this source code; you will also find a current copy of
|
||||||
|
// the license at http://www.panda3d.org/license.txt .
|
||||||
|
//
|
||||||
|
// To contact the maintainers of this program write to
|
||||||
|
// panda3d@yahoogroups.com .
|
||||||
|
//
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#include "deferredNodeProperty.h"
|
||||||
|
|
||||||
|
#include "qpcollisionNode.h"
|
||||||
|
#include "pandaNode.h"
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
// Function: DeferredNodeProperty::Constructor
|
||||||
|
// Access: Public
|
||||||
|
// Description:
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
DeferredNodeProperty::
|
||||||
|
DeferredNodeProperty() {
|
||||||
|
_flags = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
// Function: DeferredNodeProperty::Copy Constructor
|
||||||
|
// Access: Public
|
||||||
|
// Description:
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
DeferredNodeProperty::
|
||||||
|
DeferredNodeProperty(const DeferredNodeProperty ©) :
|
||||||
|
_flags(copy._flags),
|
||||||
|
_from_collide_mask(copy._from_collide_mask),
|
||||||
|
_into_collide_mask(copy._into_collide_mask)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
// Function: DeferredNodeProperty::Copy Assignment
|
||||||
|
// Access: Public
|
||||||
|
// Description:
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
void DeferredNodeProperty::
|
||||||
|
operator = (const DeferredNodeProperty ©) {
|
||||||
|
_flags = copy._flags;
|
||||||
|
_from_collide_mask = copy._from_collide_mask;
|
||||||
|
_into_collide_mask = copy._into_collide_mask;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
// Function: DeferredNodeProperty::compose
|
||||||
|
// Access: Public
|
||||||
|
// Description: Composes this state with the next one encountered on
|
||||||
|
// a lower node during the apply traversal.
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
void DeferredNodeProperty::
|
||||||
|
compose(const DeferredNodeProperty &other) {
|
||||||
|
_flags |= other._flags;
|
||||||
|
|
||||||
|
if ((other._flags & F_has_from_collide_mask) != 0) {
|
||||||
|
_from_collide_mask = other._from_collide_mask;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((other._flags & F_has_into_collide_mask) != 0) {
|
||||||
|
_into_collide_mask = other._into_collide_mask;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
// Function: DeferredNodeProperty::apply_to_node
|
||||||
|
// Access: Public
|
||||||
|
// Description: Applies whatever state is appropriate to the node.
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
void DeferredNodeProperty::
|
||||||
|
apply_to_node(PandaNode *node) {
|
||||||
|
if (node->is_of_type(qpCollisionNode::get_class_type())) {
|
||||||
|
qpCollisionNode *cnode = DCAST(qpCollisionNode, node);
|
||||||
|
if ((_flags & F_has_from_collide_mask) != 0) {
|
||||||
|
cnode->set_from_collide_mask(_from_collide_mask);
|
||||||
|
}
|
||||||
|
if ((_flags & F_has_into_collide_mask) != 0) {
|
||||||
|
cnode->set_into_collide_mask(_into_collide_mask);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
66
panda/src/egg2pg/deferredNodeProperty.h
Normal file
66
panda/src/egg2pg/deferredNodeProperty.h
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
// Filename: deferredNodeProperty.h
|
||||||
|
// Created by: drose (20Mar02)
|
||||||
|
//
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// PANDA 3D SOFTWARE
|
||||||
|
// Copyright (c) 2001, Disney Enterprises, Inc. All rights reserved
|
||||||
|
//
|
||||||
|
// All use of this software is subject to the terms of the Panda 3d
|
||||||
|
// Software license. You should have received a copy of this license
|
||||||
|
// along with this source code; you will also find a current copy of
|
||||||
|
// the license at http://www.panda3d.org/license.txt .
|
||||||
|
//
|
||||||
|
// To contact the maintainers of this program write to
|
||||||
|
// panda3d@yahoogroups.com .
|
||||||
|
//
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#ifndef DEFERREDNODEPROPERTY_H
|
||||||
|
#define DEFERREDNODEPROPERTY_H
|
||||||
|
|
||||||
|
#include "pandabase.h"
|
||||||
|
|
||||||
|
#include "collideMask.h"
|
||||||
|
#include "pmap.h"
|
||||||
|
|
||||||
|
class PandaNode;
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////
|
||||||
|
// Class : DeferredNodeProperty
|
||||||
|
// Description : This class keeps track of all the state we must make
|
||||||
|
// note of during the graph traversal, but cannot apply
|
||||||
|
// immediately. An instance of this class may be
|
||||||
|
// assigned to nodes as they are created, and then later,
|
||||||
|
// after the geometry has been created, the graph will
|
||||||
|
// be traversed again and the state will be applied.
|
||||||
|
//
|
||||||
|
// This class is only local to this package; it is not
|
||||||
|
// exported.
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
class DeferredNodeProperty {
|
||||||
|
public:
|
||||||
|
DeferredNodeProperty();
|
||||||
|
DeferredNodeProperty(const DeferredNodeProperty ©);
|
||||||
|
void operator = (const DeferredNodeProperty ©);
|
||||||
|
|
||||||
|
void compose(const DeferredNodeProperty &other);
|
||||||
|
|
||||||
|
void apply_to_node(PandaNode *node);
|
||||||
|
|
||||||
|
|
||||||
|
public:
|
||||||
|
enum Flags {
|
||||||
|
F_has_from_collide_mask = 0x0001,
|
||||||
|
F_has_into_collide_mask = 0x0002,
|
||||||
|
};
|
||||||
|
|
||||||
|
int _flags;
|
||||||
|
CollideMask _from_collide_mask;
|
||||||
|
CollideMask _into_collide_mask;
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef pmap<PandaNode *, DeferredNodeProperty> DeferredNodes;
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
@ -2,3 +2,4 @@
|
|||||||
#include "characterMaker.cxx"
|
#include "characterMaker.cxx"
|
||||||
#include "qpcharacterMaker.cxx"
|
#include "qpcharacterMaker.cxx"
|
||||||
#include "computedVerticesMaker.cxx"
|
#include "computedVerticesMaker.cxx"
|
||||||
|
#include "config_egg2pg.cxx"
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
#include "config_egg2pg.cxx"
|
#include "deferredNodeProperty.cxx"
|
||||||
#include "eggBinner.cxx"
|
#include "eggBinner.cxx"
|
||||||
#include "qpeggLoader.cxx"
|
#include "qpeggLoader.cxx"
|
||||||
#include "qpload_egg_file.cxx"
|
#include "qpload_egg_file.cxx"
|
||||||
|
@ -125,7 +125,7 @@ qpEggLoader(const EggData &data) :
|
|||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
void qpEggLoader::
|
void qpEggLoader::
|
||||||
build_graph() {
|
build_graph() {
|
||||||
// _deferred_arcs.clear();
|
_deferred_nodes.clear();
|
||||||
|
|
||||||
// First, bin up the LOD nodes.
|
// First, bin up the LOD nodes.
|
||||||
EggBinner binner;
|
EggBinner binner;
|
||||||
@ -141,7 +141,7 @@ build_graph() {
|
|||||||
|
|
||||||
reparent_decals();
|
reparent_decals();
|
||||||
|
|
||||||
// apply_deferred_arcs(_root);
|
apply_deferred_nodes(_root, DeferredNodeProperty());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -1453,31 +1453,29 @@ create_group_arc(EggGroup *egg_group, PandaNode *parent, PandaNode *node) {
|
|||||||
_decals.insert(node);
|
_decals.insert(node);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
// If the group specified some property that should propagate down
|
// If the group specified some property that should propagate down
|
||||||
// to the leaves, we have to remember this arc and apply the
|
// to the leaves, we have to remember this node and apply the
|
||||||
// property later, after we've created the actual geometry.
|
// property later, after we've created the actual geometry.
|
||||||
DeferredArcProperty def;
|
DeferredNodeProperty def;
|
||||||
if (egg_group->has_collide_mask()) {
|
if (egg_group->has_collide_mask()) {
|
||||||
def._from_collide_mask = egg_group->get_collide_mask();
|
def._from_collide_mask = egg_group->get_collide_mask();
|
||||||
def._into_collide_mask = egg_group->get_collide_mask();
|
def._into_collide_mask = egg_group->get_collide_mask();
|
||||||
def._flags |=
|
def._flags |=
|
||||||
DeferredArcProperty::F_has_from_collide_mask |
|
DeferredNodeProperty::F_has_from_collide_mask |
|
||||||
DeferredArcProperty::F_has_into_collide_mask;
|
DeferredNodeProperty::F_has_into_collide_mask;
|
||||||
}
|
}
|
||||||
if (egg_group->has_from_collide_mask()) {
|
if (egg_group->has_from_collide_mask()) {
|
||||||
def._from_collide_mask = egg_group->get_from_collide_mask();
|
def._from_collide_mask = egg_group->get_from_collide_mask();
|
||||||
def._flags |= DeferredArcProperty::F_has_from_collide_mask;
|
def._flags |= DeferredNodeProperty::F_has_from_collide_mask;
|
||||||
}
|
}
|
||||||
if (egg_group->has_into_collide_mask()) {
|
if (egg_group->has_into_collide_mask()) {
|
||||||
def._into_collide_mask = egg_group->get_into_collide_mask();
|
def._into_collide_mask = egg_group->get_into_collide_mask();
|
||||||
def._flags |= DeferredArcProperty::F_has_into_collide_mask;
|
def._flags |= DeferredNodeProperty::F_has_into_collide_mask;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (def._flags != 0) {
|
if (def._flags != 0) {
|
||||||
_deferred_arcs[arc] = def;
|
_deferred_nodes[node] = def;
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
|
|
||||||
return node;
|
return node;
|
||||||
}
|
}
|
||||||
@ -1884,19 +1882,31 @@ create_collision_polygons(qpCollisionNode *cnode, EggPolygon *egg_poly,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
// Function: qpEggLoader::apply_deferred_arcs
|
// Function: qpEggLoader::apply_deferred_nodes
|
||||||
// Access: Private
|
// Access: Private
|
||||||
// Description: Walks back over the tree and applies the
|
// Description: Walks back over the tree and applies the
|
||||||
// DeferredArcProperties that were saved up along the
|
// DeferredNodeProperties that were saved up along the
|
||||||
// way.
|
// way.
|
||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
void qpEggLoader::
|
void qpEggLoader::
|
||||||
apply_deferred_arcs(Node *root) {
|
apply_deferred_nodes(PandaNode *node, const DeferredNodeProperty &prop) {
|
||||||
DeferredArcTraverser trav(_deferred_arcs);
|
DeferredNodeProperty next_prop(prop);
|
||||||
|
|
||||||
df_traverse(root, trav, NullAttribWrapper(), DeferredArcProperty(),
|
// Do we have a DeferredNodeProperty associated with this node?
|
||||||
PandaNode::get_class_type());
|
DeferredNodes::const_iterator dni;
|
||||||
|
dni = _deferred_nodes.find(node);
|
||||||
|
|
||||||
|
if (dni != _deferred_nodes.end()) {
|
||||||
|
const DeferredNodeProperty &def = (*dni).second;
|
||||||
|
next_prop.compose(def);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Now apply the accumulated state to the node.
|
||||||
|
next_prop.apply_to_node(node);
|
||||||
|
|
||||||
|
int num_children = node->get_num_children();
|
||||||
|
for (int i = 0; i < num_children; i++) {
|
||||||
|
apply_deferred_nodes(node->get_child(i), next_prop);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
|
@ -21,6 +21,8 @@
|
|||||||
|
|
||||||
#include "pandabase.h"
|
#include "pandabase.h"
|
||||||
|
|
||||||
|
#include "eggLoaderBase.h"
|
||||||
|
#include "deferredNodeProperty.h"
|
||||||
#include "eggData.h"
|
#include "eggData.h"
|
||||||
#include "eggTexture.h"
|
#include "eggTexture.h"
|
||||||
#include "pt_EggTexture.h"
|
#include "pt_EggTexture.h"
|
||||||
@ -35,8 +37,6 @@
|
|||||||
#include "indirectCompareTo.h"
|
#include "indirectCompareTo.h"
|
||||||
#include "textureAttrib.h"
|
#include "textureAttrib.h"
|
||||||
|
|
||||||
#include "eggLoaderBase.h"
|
|
||||||
|
|
||||||
class EggNode;
|
class EggNode;
|
||||||
class EggBin;
|
class EggBin;
|
||||||
class EggTable;
|
class EggTable;
|
||||||
@ -121,10 +121,7 @@ private:
|
|||||||
EggGroup *parent_group,
|
EggGroup *parent_group,
|
||||||
EggGroup::CollideFlags flags);
|
EggGroup::CollideFlags flags);
|
||||||
|
|
||||||
/*
|
void apply_deferred_nodes(PandaNode *node, const DeferredNodeProperty &prop);
|
||||||
void apply_deferred_arcs(PandaNode *root);
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
Builder _builder;
|
Builder _builder;
|
||||||
|
|
||||||
@ -138,9 +135,7 @@ private:
|
|||||||
typedef pset<PandaNode *> Decals;
|
typedef pset<PandaNode *> Decals;
|
||||||
Decals _decals;
|
Decals _decals;
|
||||||
|
|
||||||
/*
|
DeferredNodes _deferred_nodes;
|
||||||
DeferredArcs _deferred_arcs;
|
|
||||||
*/
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
PT(PandaNode) _root;
|
PT(PandaNode) _root;
|
||||||
|
@ -28,6 +28,7 @@
|
|||||||
INLINE WorkingNodePath::
|
INLINE WorkingNodePath::
|
||||||
WorkingNodePath(const qpNodePath &start) {
|
WorkingNodePath(const qpNodePath &start) {
|
||||||
nassertv(!start.is_empty());
|
nassertv(!start.is_empty());
|
||||||
|
_next = (WorkingNodePath *)NULL;
|
||||||
_start = start._head;
|
_start = start._head;
|
||||||
_node = start.node();
|
_node = start.node();
|
||||||
}
|
}
|
||||||
@ -43,6 +44,7 @@ WorkingNodePath(const qpNodePath &start) {
|
|||||||
INLINE WorkingNodePath::
|
INLINE WorkingNodePath::
|
||||||
WorkingNodePath(const WorkingNodePath &parent, PandaNode *child) {
|
WorkingNodePath(const WorkingNodePath &parent, PandaNode *child) {
|
||||||
_next = &parent;
|
_next = &parent;
|
||||||
|
_start = (qpNodePathComponent *)NULL;
|
||||||
_node = child;
|
_node = child;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -498,29 +498,3 @@ INLINE bool qpDriveInterface::
|
|||||||
get_force_mouse() const {
|
get_force_mouse() const {
|
||||||
return _force_mouse;
|
return _force_mouse;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////
|
|
||||||
// Function: qpDriveInterface::set_mat
|
|
||||||
// Access: Published
|
|
||||||
// Description: Stores the indicated transform in the qpDriveInterface.
|
|
||||||
// This is a transform in global space, regardless of
|
|
||||||
// the rel_to node.
|
|
||||||
////////////////////////////////////////////////////////////////////
|
|
||||||
INLINE void qpDriveInterface::
|
|
||||||
set_mat(const LMatrix4f &mat) {
|
|
||||||
_mat = mat;
|
|
||||||
reextract();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////
|
|
||||||
// Function: qpDriveInterface::get_mat
|
|
||||||
// Access: Published
|
|
||||||
// Description: Fills mat with the net transformation applied by the
|
|
||||||
// current state.
|
|
||||||
////////////////////////////////////////////////////////////////////
|
|
||||||
INLINE const LMatrix4f &qpDriveInterface::
|
|
||||||
get_mat() const {
|
|
||||||
return _mat;
|
|
||||||
}
|
|
||||||
|
@ -202,6 +202,31 @@ set_force_roll(float force_roll) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
// Function: qpDriveInterface::set_mat
|
||||||
|
// Access: Published
|
||||||
|
// Description: Stores the indicated transform in the qpDriveInterface.
|
||||||
|
// This is a transform in global space, regardless of
|
||||||
|
// the rel_to node.
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
void qpDriveInterface::
|
||||||
|
set_mat(const LMatrix4f &mat) {
|
||||||
|
_mat = mat;
|
||||||
|
reextract();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
// Function: qpDriveInterface::get_mat
|
||||||
|
// Access: Published
|
||||||
|
// Description: Returns the net transformation applied by the
|
||||||
|
// current state.
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
const LMatrix4f &qpDriveInterface::
|
||||||
|
get_mat() const {
|
||||||
|
return _mat;
|
||||||
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
// Function: qpDriveInterface::force_dgraph
|
// Function: qpDriveInterface::force_dgraph
|
||||||
// Access: Public
|
// Access: Public
|
||||||
|
Loading…
x
Reference in New Issue
Block a user