diff options
author | Mitchell Stokes <mogurijin@gmail.com> | 2013-11-30 02:31:19 +0400 |
---|---|---|
committer | Mitchell Stokes <mogurijin@gmail.com> | 2013-11-30 02:32:56 +0400 |
commit | eba07b77da43425cf539e8a13f9e0a2ad0ffa405 (patch) | |
tree | 0909fc3beda8dca9a201becff43beb13595c9109 /source/gameengine | |
parent | 72272d2e4f4676c5c67483f1005251253edef15f (diff) |
Fix T37566: KX_GameObject.resumeDynamics() was not properly restoring collision groups and masks.
Diffstat (limited to 'source/gameengine')
-rw-r--r-- | source/gameengine/Physics/Bullet/CcdPhysicsController.cpp | 10 | ||||
-rw-r--r-- | source/gameengine/Physics/Bullet/CcdPhysicsController.h | 3 |
2 files changed, 11 insertions, 2 deletions
diff --git a/source/gameengine/Physics/Bullet/CcdPhysicsController.cpp b/source/gameengine/Physics/Bullet/CcdPhysicsController.cpp index 6ce52b60426..6be6400e011 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 194a47ae2df..0d6d40861c5 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(); |