[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [15623] trunk/blender/source/gameengine: BGE bug fix (good for 2.47): SetParent actuator did not work on dynamic objects.
Benoit Bolsee
benoit.bolsee at online.be
Fri Jul 18 16:40:28 CEST 2008
Revision: 15623
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=15623
Author: ben2610
Date: 2008-07-18 16:40:24 +0200 (Fri, 18 Jul 2008)
Log Message:
-----------
BGE bug fix (good for 2.47): SetParent actuator did not work on dynamic objects. Dynamics will now be disabled automatically and the object will be set ghost for the duration of the parenting; this is to avoid static interaction with the parent object. The dynamic state is restored when the parenting is removed with RemoveParent actuator. This fix also applies to setParent() and removeParent() python functions.
Modified Paths:
--------------
trunk/blender/source/gameengine/GameLogic/SCA_IObject.cpp
trunk/blender/source/gameengine/Ketsji/KX_BulletPhysicsController.cpp
trunk/blender/source/gameengine/Ketsji/KX_BulletPhysicsController.h
trunk/blender/source/gameengine/Ketsji/KX_GameObject.cpp
trunk/blender/source/gameengine/Ketsji/KX_IPhysicsController.h
trunk/blender/source/gameengine/Ketsji/KX_OdePhysicsController.cpp
trunk/blender/source/gameengine/Ketsji/KX_OdePhysicsController.h
trunk/blender/source/gameengine/Ketsji/KX_SumoPhysicsController.cpp
trunk/blender/source/gameengine/Ketsji/KX_SumoPhysicsController.h
Modified: trunk/blender/source/gameengine/GameLogic/SCA_IObject.cpp
===================================================================
--- trunk/blender/source/gameengine/GameLogic/SCA_IObject.cpp 2008-07-18 13:06:49 UTC (rev 15622)
+++ trunk/blender/source/gameengine/GameLogic/SCA_IObject.cpp 2008-07-18 14:40:24 UTC (rev 15623)
@@ -306,7 +306,7 @@
}
#endif
-void SCA_IObject::Suspend(void)
+void SCA_IObject::Suspend()
{
if ((!m_ignore_activity_culling)
&& (!m_suspended)) {
Modified: trunk/blender/source/gameengine/Ketsji/KX_BulletPhysicsController.cpp
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_BulletPhysicsController.cpp 2008-07-18 13:06:49 UTC (rev 15622)
+++ trunk/blender/source/gameengine/Ketsji/KX_BulletPhysicsController.cpp 2008-07-18 14:40:24 UTC (rev 15623)
@@ -17,7 +17,8 @@
KX_BulletPhysicsController::KX_BulletPhysicsController (const CcdConstructionInfo& ci, bool dyna)
: KX_IPhysicsController(dyna,(PHY_IPhysicsController*)this),
-CcdPhysicsController(ci)
+CcdPhysicsController(ci),
+m_savedCollisionFlags(0)
{
}
@@ -161,14 +162,26 @@
{
}
-void KX_BulletPhysicsController::SuspendDynamics()
+void KX_BulletPhysicsController::SuspendDynamics(bool ghost)
{
- GetRigidBody()->setActivationState(DISABLE_SIMULATION);
+ btRigidBody *body = GetRigidBody();
+ if (body->getActivationState() != DISABLE_SIMULATION)
+ {
+ m_savedCollisionFlags = body->getCollisionFlags();
+ body->setActivationState(DISABLE_SIMULATION);
+ body->setCollisionFlags((btCollisionObject::CF_STATIC_OBJECT)|
+ ((ghost)?btCollisionObject::CF_NO_CONTACT_RESPONSE:0));
+ }
+}
-}
void KX_BulletPhysicsController::RestoreDynamics()
{
- GetRigidBody()->forceActivationState(ACTIVE_TAG);
+ btRigidBody *body = GetRigidBody();
+ if (body->getActivationState() == DISABLE_SIMULATION)
+ {
+ GetRigidBody()->forceActivationState(ACTIVE_TAG);
+ body->setCollisionFlags(m_savedCollisionFlags);
+ }
}
SG_Controller* KX_BulletPhysicsController::GetReplica(class SG_Node* destnode)
Modified: trunk/blender/source/gameengine/Ketsji/KX_BulletPhysicsController.h
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_BulletPhysicsController.h 2008-07-18 13:06:49 UTC (rev 15622)
+++ trunk/blender/source/gameengine/Ketsji/KX_BulletPhysicsController.h 2008-07-18 14:40:24 UTC (rev 15623)
@@ -7,7 +7,8 @@
class KX_BulletPhysicsController : public KX_IPhysicsController ,public CcdPhysicsController
{
-
+private:
+ int m_savedCollisionFlags;
public:
KX_BulletPhysicsController (const CcdConstructionInfo& ci, bool dyna);
@@ -39,7 +40,7 @@
virtual void resolveCombinedVelocities(float linvelX,float linvelY,float linvelZ,float angVelX,float angVelY,float angVelZ);
- virtual void SuspendDynamics();
+ virtual void SuspendDynamics(bool ghost);
virtual void RestoreDynamics();
virtual SG_Controller* GetReplica(class SG_Node* destnode);
Modified: trunk/blender/source/gameengine/Ketsji/KX_GameObject.cpp
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_GameObject.cpp 2008-07-18 13:06:49 UTC (rev 15622)
+++ trunk/blender/source/gameengine/Ketsji/KX_GameObject.cpp 2008-07-18 14:40:24 UTC (rev 15623)
@@ -238,6 +238,10 @@
if (rootlist->RemoveValue(this))
// the object was in parent list, decrement ref count as it's now removed
Release();
+ if (m_pPhysicsController1)
+ {
+ m_pPhysicsController1->SuspendDynamics(true);
+ }
}
}
@@ -258,6 +262,10 @@
if (!rootlist->SearchValue(this))
// object was not in root list, add it now and increment ref count
rootlist->Add(AddRef());
+ if (m_pPhysicsController1)
+ {
+ m_pPhysicsController1->RestoreDynamics();
+ }
}
}
@@ -832,7 +840,7 @@
}
}
-void KX_GameObject::Suspend(void)
+void KX_GameObject::Suspend()
{
if ((!m_ignore_activity_culling)
&& (!m_suspended)) {
Modified: trunk/blender/source/gameengine/Ketsji/KX_IPhysicsController.h
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_IPhysicsController.h 2008-07-18 13:06:49 UTC (rev 15622)
+++ trunk/blender/source/gameengine/Ketsji/KX_IPhysicsController.h 2008-07-18 14:40:24 UTC (rev 15623)
@@ -78,7 +78,7 @@
virtual MT_Vector3 getReactionForce()=0;
virtual void setRigidBody(bool rigid)=0;
- virtual void SuspendDynamics()=0;
+ virtual void SuspendDynamics(bool ghost=false)=0;
virtual void RestoreDynamics()=0;
virtual SG_Controller* GetReplica(class SG_Node* destnode)=0;
Modified: trunk/blender/source/gameengine/Ketsji/KX_OdePhysicsController.cpp
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_OdePhysicsController.cpp 2008-07-18 13:06:49 UTC (rev 15622)
+++ trunk/blender/source/gameengine/Ketsji/KX_OdePhysicsController.cpp 2008-07-18 14:40:24 UTC (rev 15623)
@@ -177,7 +177,7 @@
}
-void KX_OdePhysicsController::SuspendDynamics()
+void KX_OdePhysicsController::SuspendDynamics(bool)
{
ODEPhysicsController::SuspendDynamics();
}
Modified: trunk/blender/source/gameengine/Ketsji/KX_OdePhysicsController.h
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_OdePhysicsController.h 2008-07-18 13:06:49 UTC (rev 15622)
+++ trunk/blender/source/gameengine/Ketsji/KX_OdePhysicsController.h 2008-07-18 14:40:24 UTC (rev 15623)
@@ -74,7 +74,7 @@
virtual MT_Vector3 getReactionForce();
virtual void setRigidBody(bool rigid);
- virtual void SuspendDynamics();
+ virtual void SuspendDynamics(bool);
virtual void RestoreDynamics();
Modified: trunk/blender/source/gameengine/Ketsji/KX_SumoPhysicsController.cpp
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_SumoPhysicsController.cpp 2008-07-18 13:06:49 UTC (rev 15622)
+++ trunk/blender/source/gameengine/Ketsji/KX_SumoPhysicsController.cpp 2008-07-18 14:40:24 UTC (rev 15623)
@@ -101,7 +101,7 @@
}
-void KX_SumoPhysicsController::SuspendDynamics()
+void KX_SumoPhysicsController::SuspendDynamics(bool)
{
SumoPhysicsController::SuspendDynamics();
}
Modified: trunk/blender/source/gameengine/Ketsji/KX_SumoPhysicsController.h
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_SumoPhysicsController.h 2008-07-18 13:06:49 UTC (rev 15622)
+++ trunk/blender/source/gameengine/Ketsji/KX_SumoPhysicsController.h 2008-07-18 14:40:24 UTC (rev 15623)
@@ -76,7 +76,7 @@
void resolveCombinedVelocities(float linvelX,float linvelY,float linvelZ,float angVelX,float angVelY,float angVelZ);
- void SuspendDynamics();
+ void SuspendDynamics(bool);
void RestoreDynamics();
virtual void getOrientation(MT_Quaternion& orn);
virtual void setOrientation(const MT_Quaternion& orn);
More information about the Bf-blender-cvs
mailing list