diff options
author | Benoit Bolsee <benoit.bolsee@online.be> | 2008-07-19 14:27:52 +0400 |
---|---|---|
committer | Benoit Bolsee <benoit.bolsee@online.be> | 2008-07-19 14:27:52 +0400 |
commit | 7e990de294910cb528227cdb004414558b951890 (patch) | |
tree | d3818b5cb9a99fbeed9244e213f608bfa2d61762 /source/gameengine/Ketsji/KX_BulletPhysicsController.cpp | |
parent | 9ed079bf5cbe8a5a371190a8dedec970bcbd3ac2 (diff) |
BGE bug fix (good for 2.47): remove static-static collision messages on the console since previous SetParent fix. The physical object is set to static+ghost while the object is parented. This behavior will be made optional in a future release. The DisableDynamics actuator will also make the object static except that the ghost/non-ghost flag is preserved.
Diffstat (limited to 'source/gameengine/Ketsji/KX_BulletPhysicsController.cpp')
-rw-r--r-- | source/gameengine/Ketsji/KX_BulletPhysicsController.cpp | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/source/gameengine/Ketsji/KX_BulletPhysicsController.cpp b/source/gameengine/Ketsji/KX_BulletPhysicsController.cpp index dba11efef72..e25deaf05a9 100644 --- a/source/gameengine/Ketsji/KX_BulletPhysicsController.cpp +++ b/source/gameengine/Ketsji/KX_BulletPhysicsController.cpp @@ -13,6 +13,7 @@ #include "KX_ClientObjectInfo.h" #include "PHY_IPhysicsEnvironment.h" +#include "CcdPhysicsEnvironment.h" KX_BulletPhysicsController::KX_BulletPhysicsController (const CcdConstructionInfo& ci, bool dyna) @@ -167,10 +168,15 @@ void KX_BulletPhysicsController::SuspendDynamics(bool ghost) btRigidBody *body = GetRigidBody(); if (body->getActivationState() != DISABLE_SIMULATION) { + btBroadphaseProxy* handle = body->getBroadphaseHandle(); m_savedCollisionFlags = body->getCollisionFlags(); + m_savedCollisionFilterGroup = handle->m_collisionFilterGroup; + m_savedCollisionFilterMask = handle->m_collisionFilterMask; body->setActivationState(DISABLE_SIMULATION); - body->setCollisionFlags((btCollisionObject::CF_STATIC_OBJECT)| - ((ghost)?btCollisionObject::CF_NO_CONTACT_RESPONSE:0)); + GetPhysicsEnvironment()->updateCcdPhysicsController(this, + btCollisionObject::CF_STATIC_OBJECT|((ghost)?btCollisionObject::CF_NO_CONTACT_RESPONSE:(m_savedCollisionFlags&btCollisionObject::CF_NO_CONTACT_RESPONSE)), + btBroadphaseProxy::StaticFilter, + btBroadphaseProxy::AllFilter ^ btBroadphaseProxy::StaticFilter); } } @@ -180,7 +186,10 @@ void KX_BulletPhysicsController::RestoreDynamics() if (body->getActivationState() == DISABLE_SIMULATION) { GetRigidBody()->forceActivationState(ACTIVE_TAG); - body->setCollisionFlags(m_savedCollisionFlags); + GetPhysicsEnvironment()->updateCcdPhysicsController(this, + m_savedCollisionFlags, + m_savedCollisionFilterGroup, + m_savedCollisionFilterMask); } } |