Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMitchell Stokes <mogurijin@gmail.com>2013-11-30 02:31:19 +0400
committerMitchell Stokes <mogurijin@gmail.com>2013-11-30 02:32:56 +0400
commiteba07b77da43425cf539e8a13f9e0a2ad0ffa405 (patch)
tree0909fc3beda8dca9a201becff43beb13595c9109
parent72272d2e4f4676c5c67483f1005251253edef15f (diff)
Fix T37566: KX_GameObject.resumeDynamics() was not properly restoring collision groups and masks.
-rw-r--r--source/gameengine/Physics/Bullet/CcdPhysicsController.cpp10
-rw-r--r--source/gameengine/Physics/Bullet/CcdPhysicsController.h3
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();