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

This commit is contained in:
Mitchell Stokes
2013-11-29 14:31:19 -08:00
parent 72272d2e4f
commit eba07b77da
2 changed files with 11 additions and 2 deletions

View File

@@ -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;
}

View File

@@ -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();