Commit: eba07b77da43425cf539e8a13f9e0a2ad0ffa405
Author: Mitchell Stokes
Date:   Fri Nov 29 14:31:19 2013 -0800
http://developer.blender.org/rBeba07b77da43425cf539e8a13f9e0a2ad0ffa405

Fix T37566: KX_GameObject.resumeDynamics() was not properly restoring collision 
groups and masks.

===================================================================

M       source/gameengine/Physics/Bullet/CcdPhysicsController.cpp
M       source/gameengine/Physics/Bullet/CcdPhysicsController.h

===================================================================

diff --git a/source/gameengine/Physics/Bullet/CcdPhysicsController.cpp 
b/source/gameengine/Physics/Bullet/CcdPhysicsController.cpp
index 6ce52b6..6be6400 100644
--- a/source/gameengine/Physics/Bullet/CcdPhysicsController.cpp
+++ b/source/gameengine/Physics/Bullet/CcdPhysicsController.cpp
@@ -145,6 +145,8 @@ CcdPhysicsController::CcdPhysicsController (const 
CcdConstructionInfo& ci)
        m_bulletMotionState = 0;
        m_characterController = 0;
        m_savedCollisionFlags = 0;
+       m_savedCollisionFilterGroup = 0;
+       m_savedCollisionFilterMask = 0;
        m_savedMass = 0.0;
        m_suspended = false;
        
@@ -1057,8 +1059,12 @@ void     CcdPhysicsController::SuspendDynamics(bool 
ghost)
        btRigidBody *body = GetRigidBody();
        if (body && !m_suspended && !GetConstructionInfo().m_bSensor)
        {
+               btBroadphaseProxy* handle = body->getBroadphaseHandle();
+
                m_savedCollisionFlags = body->getCollisionFlags();
                m_savedMass = GetMass();
+               m_savedCollisionFilterGroup = handle->m_collisionFilterGroup;
+               m_savedCollisionFilterMask = handle->m_collisionFilterMask;
                m_suspended = true;
                GetPhysicsEnvironment()->UpdateCcdPhysicsController(this,
                        0.0,
@@ -1078,8 +1084,8 @@ void      CcdPhysicsController::RestoreDynamics()
                GetPhysicsEnvironment()->UpdateCcdPhysicsController(this,
                        m_savedMass,
                        m_savedCollisionFlags,
-                       GetConstructionInfo().m_collisionFilterGroup,
-                       GetConstructionInfo().m_collisionFilterMask);
+                       m_savedCollisionFilterGroup,
+                       m_savedCollisionFilterMask);
                body->activate();
                m_suspended = false;
        }
diff --git a/source/gameengine/Physics/Bullet/CcdPhysicsController.h 
b/source/gameengine/Physics/Bullet/CcdPhysicsController.h
index 194a47a..0d6d408 100644
--- a/source/gameengine/Physics/Bullet/CcdPhysicsController.h
+++ b/source/gameengine/Physics/Bullet/CcdPhysicsController.h
@@ -478,9 +478,12 @@ protected:
        CcdPhysicsController* m_parentCtrl;
 
        int m_savedCollisionFlags;
+       short m_savedCollisionFilterGroup;
+       short m_savedCollisionFilterMask;
        MT_Scalar m_savedMass;
        bool m_suspended;
 
+
        void GetWorldOrientation(btMatrix3x3& mat);
 
        void CreateRigidbody();

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to