Browse Source

fix relative problem with transform on traverser root

David Rose 19 years ago
parent
commit
a55b7e0950

+ 3 - 2
panda/src/collide/collisionLevelState.cxx

@@ -56,7 +56,7 @@ reserve(int num_colliders) {
 //               in the current level state.
 ////////////////////////////////////////////////////////////////////
 void CollisionLevelState::
-prepare_collider(const ColliderDef &def) {
+prepare_collider(const ColliderDef &def, const NodePath &root) {
   int index = (int)_colliders.size();
   nassertv(index < get_max_colliders());
   _colliders.push_back(def);
@@ -88,7 +88,8 @@ prepare_collider(const ColliderDef &def) {
     }
     */
 
-    gbv->xform(def._node_path.get_net_transform()->get_mat());
+    CPT(TransformState) rel_transform = def._node_path.get_transform(root);
+    gbv->xform(rel_transform->get_mat());
     _local_bounds.push_back(gbv);
   }
   

+ 1 - 1
panda/src/collide/collisionLevelState.h

@@ -56,7 +56,7 @@ public:
 
   void clear();
   void reserve(int num_colliders);
-  void prepare_collider(const ColliderDef &def);
+  void prepare_collider(const ColliderDef &def, const NodePath &root);
 
   INLINE static int get_max_colliders();
 

+ 1 - 1
panda/src/collide/collisionTraverser.cxx

@@ -504,7 +504,7 @@ prepare_colliders(CollisionTraverser::LevelStates &level_states,
       for (int s = 0; s < num_solids; ++s) {
         CollisionSolid *collider = cnode->get_solid(s);
         def._collider = collider;
-        level_state.prepare_collider(def);
+        level_state.prepare_collider(def, root);
 
         if (level_state.get_num_colliders() == max_colliders) {
           // That's the limit.  Save off this level state and make a