[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [20012] trunk/blender/source/gameengine/ Ketsji: BGE bug #18091: Hitbox of object X doesn' t move along when object X is parented to object Y.

Benoit Bolsee benoit.bolsee at online.be
Thu Apr 30 21:00:17 CEST 2009


Revision: 20012
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=20012
Author:   ben2610
Date:     2009-04-30 21:00:17 +0200 (Thu, 30 Apr 2009)

Log Message:
-----------
BGE bug #18091: Hitbox of object X doesn't move along when object X is parented to object Y.

Modified Paths:
--------------
    trunk/blender/source/gameengine/Ketsji/KX_BulletPhysicsController.cpp
    trunk/blender/source/gameengine/Ketsji/KX_BulletPhysicsController.h

Modified: trunk/blender/source/gameengine/Ketsji/KX_BulletPhysicsController.cpp
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_BulletPhysicsController.cpp	2009-04-30 17:27:30 UTC (rev 20011)
+++ trunk/blender/source/gameengine/Ketsji/KX_BulletPhysicsController.cpp	2009-04-30 19:00:17 UTC (rev 20012)
@@ -21,9 +21,13 @@
 : KX_IPhysicsController(dyna,compound,(PHY_IPhysicsController*)this),
 CcdPhysicsController(ci),
 m_savedCollisionFlags(0),
+m_savedCollisionFilterGroup(0),
+m_savedCollisionFilterMask(0),
+m_savedMass(0.0),
+m_savedDyna(false),
+m_suspended(false),
 m_bulletChildShape(NULL)
 {
-
 }
 	
 KX_BulletPhysicsController::~KX_BulletPhysicsController ()
@@ -337,8 +341,7 @@
 void KX_BulletPhysicsController::SetMass(MT_Scalar newmass)
 {
 	btRigidBody *body = GetRigidBody();
-	if (body && body->getActivationState() != DISABLE_SIMULATION && 
-		newmass>MT_EPSILON && GetMass()>MT_EPSILON)
+	if (body && !m_suspended && newmass>MT_EPSILON && GetMass()>MT_EPSILON)
 	{
 		btVector3 grav = body->getGravity();
 		btVector3 accel = grav / GetMass();
@@ -356,7 +359,7 @@
 void	KX_BulletPhysicsController::SuspendDynamics(bool ghost)
 {
 	btRigidBody *body = GetRigidBody();
-	if (body && body->getActivationState() != DISABLE_SIMULATION)
+	if (body && !m_suspended)
 	{
 		btBroadphaseProxy* handle = body->getBroadphaseHandle();
 		m_savedCollisionFlags = body->getCollisionFlags();
@@ -364,8 +367,7 @@
 		m_savedDyna = m_bDyna;
 		m_savedCollisionFilterGroup = handle->m_collisionFilterGroup;
 		m_savedCollisionFilterMask = handle->m_collisionFilterMask;
-		m_savedActivationState = body->getActivationState();
-		body->forceActivationState(DISABLE_SIMULATION);
+		m_suspended = true;
 		GetPhysicsEnvironment()->updateCcdPhysicsController(this, 
 			0.0,
 			btCollisionObject::CF_STATIC_OBJECT|((ghost)?btCollisionObject::CF_NO_CONTACT_RESPONSE:(m_savedCollisionFlags&btCollisionObject::CF_NO_CONTACT_RESPONSE)),
@@ -378,15 +380,16 @@
 void	KX_BulletPhysicsController::RestoreDynamics()
 {
 	btRigidBody *body = GetRigidBody();
-	if (body && body->getActivationState() == DISABLE_SIMULATION)
+	if (body && m_suspended)
 	{
 		GetPhysicsEnvironment()->updateCcdPhysicsController(this, 
 			m_savedMass,
 			m_savedCollisionFlags,
 			m_savedCollisionFilterGroup,
 			m_savedCollisionFilterMask);
-		body->forceActivationState(m_savedActivationState);
+		body->activate();
 		m_bDyna = m_savedDyna;
+		m_suspended = false;
 	}
 }
 

Modified: trunk/blender/source/gameengine/Ketsji/KX_BulletPhysicsController.h
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_BulletPhysicsController.h	2009-04-30 17:27:30 UTC (rev 20011)
+++ trunk/blender/source/gameengine/Ketsji/KX_BulletPhysicsController.h	2009-04-30 19:00:17 UTC (rev 20012)
@@ -14,6 +14,7 @@
 	short int m_savedCollisionFilterMask;
 	MT_Scalar m_savedMass;
 	bool m_savedDyna;
+	bool m_suspended;
 	btCollisionShape* m_bulletChildShape;
 
 public:





More information about the Bf-blender-cvs mailing list