[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [15643] branches/apricot/source/gameengine : svn merge -r15622:HEAD https://svn.blender.org/svnroot/bf-blender/trunk/ blender

Campbell Barton ideasman42 at gmail.com
Sat Jul 19 15:07:47 CEST 2008


Revision: 15643
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=15643
Author:   campbellbarton
Date:     2008-07-19 15:07:47 +0200 (Sat, 19 Jul 2008)

Log Message:
-----------
svn merge -r15622:HEAD https://svn.blender.org/svnroot/bf-blender/trunk/blender

Modified Paths:
--------------
    branches/apricot/source/gameengine/Converter/BL_DeformableGameObject.h
    branches/apricot/source/gameengine/Converter/KX_ConvertActuators.cpp
    branches/apricot/source/gameengine/GameLogic/SCA_ILogicBrick.cpp
    branches/apricot/source/gameengine/GameLogic/SCA_ILogicBrick.h
    branches/apricot/source/gameengine/GameLogic/SCA_IObject.cpp
    branches/apricot/source/gameengine/GameLogic/SCA_PropertyActuator.cpp
    branches/apricot/source/gameengine/GameLogic/SCA_PropertyActuator.h
    branches/apricot/source/gameengine/Ketsji/KX_BulletPhysicsController.cpp
    branches/apricot/source/gameengine/Ketsji/KX_BulletPhysicsController.h
    branches/apricot/source/gameengine/Ketsji/KX_CameraActuator.cpp
    branches/apricot/source/gameengine/Ketsji/KX_CameraActuator.h
    branches/apricot/source/gameengine/Ketsji/KX_GameObject.cpp
    branches/apricot/source/gameengine/Ketsji/KX_IPhysicsController.h
    branches/apricot/source/gameengine/Ketsji/KX_OdePhysicsController.cpp
    branches/apricot/source/gameengine/Ketsji/KX_OdePhysicsController.h
    branches/apricot/source/gameengine/Ketsji/KX_ParentActuator.cpp
    branches/apricot/source/gameengine/Ketsji/KX_ParentActuator.h
    branches/apricot/source/gameengine/Ketsji/KX_SCA_AddObjectActuator.cpp
    branches/apricot/source/gameengine/Ketsji/KX_SCA_AddObjectActuator.h
    branches/apricot/source/gameengine/Ketsji/KX_Scene.cpp
    branches/apricot/source/gameengine/Ketsji/KX_Scene.h
    branches/apricot/source/gameengine/Ketsji/KX_SceneActuator.cpp
    branches/apricot/source/gameengine/Ketsji/KX_SceneActuator.h
    branches/apricot/source/gameengine/Ketsji/KX_SumoPhysicsController.cpp
    branches/apricot/source/gameengine/Ketsji/KX_SumoPhysicsController.h
    branches/apricot/source/gameengine/Ketsji/KX_TrackToActuator.cpp
    branches/apricot/source/gameengine/Ketsji/KX_TrackToActuator.h
    branches/apricot/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.cpp
    branches/apricot/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.h
    branches/apricot/source/gameengine/SceneGraph/SG_IObject.cpp
    branches/apricot/source/gameengine/SceneGraph/SG_IObject.h
    branches/apricot/source/gameengine/SceneGraph/SG_Node.cpp
    branches/apricot/source/gameengine/SceneGraph/SG_Node.h

Modified: branches/apricot/source/gameengine/Converter/BL_DeformableGameObject.h
===================================================================
--- branches/apricot/source/gameengine/Converter/BL_DeformableGameObject.h	2008-07-19 13:04:55 UTC (rev 15642)
+++ branches/apricot/source/gameengine/Converter/BL_DeformableGameObject.h	2008-07-19 13:07:47 UTC (rev 15643)
@@ -60,6 +60,7 @@
 	{
 		if (m_pDeformer)
 			m_pDeformer->Relink (map);
+		KX_GameObject::Relink(map);
 	};
 	void ProcessReplica(KX_GameObject* replica);
 

Modified: branches/apricot/source/gameengine/Converter/KX_ConvertActuators.cpp
===================================================================
--- branches/apricot/source/gameengine/Converter/KX_ConvertActuators.cpp	2008-07-19 13:04:55 UTC (rev 15642)
+++ branches/apricot/source/gameengine/Converter/KX_ConvertActuators.cpp	2008-07-19 13:07:47 UTC (rev 15643)
@@ -503,7 +503,7 @@
 		case ACT_PROPERTY:
 			{
 				bPropertyActuator* propact = (bPropertyActuator*) bact->data;
-				CValue* destinationObj = NULL;
+				SCA_IObject* destinationObj = NULL;
 				
 				/*
 				here the destinationobject is searched. problem with multiple scenes: other scenes

Modified: branches/apricot/source/gameengine/GameLogic/SCA_ILogicBrick.cpp
===================================================================
--- branches/apricot/source/gameengine/GameLogic/SCA_ILogicBrick.cpp	2008-07-19 13:04:55 UTC (rev 15642)
+++ branches/apricot/source/gameengine/GameLogic/SCA_ILogicBrick.cpp	2008-07-19 13:07:47 UTC (rev 15643)
@@ -82,8 +82,11 @@
 	m_gameobj = parent;
 }
 
+void SCA_ILogicBrick::Relink(GEN_Map<GEN_HashedPtr, void*> *obj_map)
+{
+	// nothing to do
+}
 
-
 CValue* SCA_ILogicBrick::Calc(VALUE_OPERATOR op, CValue *val)
 {
 	CValue* temp = new CBoolValue(false,"");

Modified: branches/apricot/source/gameengine/GameLogic/SCA_ILogicBrick.h
===================================================================
--- branches/apricot/source/gameengine/GameLogic/SCA_ILogicBrick.h	2008-07-19 13:04:55 UTC (rev 15642)
+++ branches/apricot/source/gameengine/GameLogic/SCA_ILogicBrick.h	2008-07-19 13:07:47 UTC (rev 15643)
@@ -32,6 +32,8 @@
 #include "Value.h"
 #include "SCA_IObject.h"
 #include "BoolValue.h"
+#include "GEN_Map.h"
+#include "GEN_HashedPtr.h"
 
 class SCA_ILogicBrick : public CValue
 {
@@ -59,6 +61,7 @@
 
 	SCA_IObject*	GetParent();
 	virtual void	ReParent(SCA_IObject* parent);
+	virtual void	Relink(GEN_Map<GEN_HashedPtr, void*> *obj_map);
 
 	// act as a BoolValue (with value IsPositiveTrigger)
 	virtual CValue*	Calc(VALUE_OPERATOR op, CValue *val);

Modified: branches/apricot/source/gameengine/GameLogic/SCA_IObject.cpp
===================================================================
--- branches/apricot/source/gameengine/GameLogic/SCA_IObject.cpp	2008-07-19 13:04:55 UTC (rev 15642)
+++ branches/apricot/source/gameengine/GameLogic/SCA_IObject.cpp	2008-07-19 13:07:47 UTC (rev 15643)
@@ -306,7 +306,7 @@
 }
 #endif
 
-void SCA_IObject::Suspend(void)
+void SCA_IObject::Suspend()
 {
 	if ((!m_ignore_activity_culling) 
 		&& (!m_suspended))  {

Modified: branches/apricot/source/gameengine/GameLogic/SCA_PropertyActuator.cpp
===================================================================
--- branches/apricot/source/gameengine/GameLogic/SCA_PropertyActuator.cpp	2008-07-19 13:04:55 UTC (rev 15642)
+++ branches/apricot/source/gameengine/GameLogic/SCA_PropertyActuator.cpp	2008-07-19 13:07:47 UTC (rev 15643)
@@ -42,7 +42,7 @@
 /* Native functions                                                          */
 /* ------------------------------------------------------------------------- */
 
-SCA_PropertyActuator::SCA_PropertyActuator(SCA_IObject* gameobj,CValue* sourceObj,const STR_String& propname,const STR_String& expr,int acttype,PyTypeObject* T )
+SCA_PropertyActuator::SCA_PropertyActuator(SCA_IObject* gameobj,SCA_IObject* sourceObj,const STR_String& propname,const STR_String& expr,int acttype,PyTypeObject* T )
    :	SCA_IActuator(gameobj,T),
 	m_type(acttype),
 	m_propname(propname),
@@ -51,14 +51,14 @@
 {
 	// protect ourselves against someone else deleting the source object
 	// don't protect against ourselves: it would create a dead lock
-	if (m_sourceObj && m_sourceObj != GetParent())
-		m_sourceObj->AddRef();
+	if (m_sourceObj)
+		m_sourceObj->RegisterActuator(this);
 }
 
 SCA_PropertyActuator::~SCA_PropertyActuator()
 {
-	if (m_sourceObj && m_sourceObj != GetParent())
-		m_sourceObj->Release();
+	if (m_sourceObj)
+		m_sourceObj->UnregisterActuator(this);
 }
 
 bool SCA_PropertyActuator::Update()
@@ -185,12 +185,33 @@
 	// no need to check for self reference like in the constructor:
 	// the replica will always have a different parent
 	if (m_sourceObj)
-		m_sourceObj->AddRef();
+		m_sourceObj->RegisterActuator(this);
 	SCA_IActuator::ProcessReplica();
 }
 
+bool SCA_PropertyActuator::UnlinkObject(SCA_IObject* clientobj)
+{
+	if (clientobj == m_sourceObj)
+	{
+		// this object is being deleted, we cannot continue to track it.
+		m_sourceObj = NULL;
+		return true;
+	}
+	return false;
+}
 
+void SCA_PropertyActuator::Relink(GEN_Map<GEN_HashedPtr, void*> *obj_map)
+{
+	void **h_obj = (*obj_map)[m_sourceObj];
+	if (h_obj) {
+		if (m_sourceObj)
+			m_sourceObj->UnregisterActuator(this);
+		m_sourceObj = (SCA_IObject*)(*h_obj);
+		m_sourceObj->RegisterActuator(this);
+	}
+}
 
+
 /* ------------------------------------------------------------------------- */
 /* Python functions                                                          */
 /* ------------------------------------------------------------------------- */

Modified: branches/apricot/source/gameengine/GameLogic/SCA_PropertyActuator.h
===================================================================
--- branches/apricot/source/gameengine/GameLogic/SCA_PropertyActuator.h	2008-07-19 13:04:55 UTC (rev 15642)
+++ branches/apricot/source/gameengine/GameLogic/SCA_PropertyActuator.h	2008-07-19 13:07:47 UTC (rev 15643)
@@ -52,7 +52,7 @@
 	int			m_type;
 	STR_String	m_propname;
 	STR_String	m_exprtxt;
-	CValue*		m_sourceObj; // for copy property actuator
+	SCA_IObject* m_sourceObj; // for copy property actuator
 
 public:
 
@@ -60,7 +60,7 @@
 
 	SCA_PropertyActuator(
 		SCA_IObject* gameobj,
-		CValue* sourceObj,
+		SCA_IObject* sourceObj,
 		const STR_String& propname,
 		const STR_String& expr,
 		int acttype,
@@ -74,7 +74,9 @@
 	GetReplica(
 	);
 
-	void ProcessReplica();
+	virtual void ProcessReplica();
+	virtual bool UnlinkObject(SCA_IObject* clientobj);
+	virtual void Relink(GEN_Map<GEN_HashedPtr, void*> *obj_map);
 
 	virtual bool 
 	Update();

Modified: branches/apricot/source/gameengine/Ketsji/KX_BulletPhysicsController.cpp
===================================================================
--- branches/apricot/source/gameengine/Ketsji/KX_BulletPhysicsController.cpp	2008-07-19 13:04:55 UTC (rev 15642)
+++ branches/apricot/source/gameengine/Ketsji/KX_BulletPhysicsController.cpp	2008-07-19 13:07:47 UTC (rev 15643)
@@ -13,11 +13,13 @@
 #include "KX_ClientObjectInfo.h"
 
 #include "PHY_IPhysicsEnvironment.h"
+#include "CcdPhysicsEnvironment.h"
 
 
 KX_BulletPhysicsController::KX_BulletPhysicsController (const CcdConstructionInfo& ci, bool dyna)
 : KX_IPhysicsController(dyna,(PHY_IPhysicsController*)this),
-CcdPhysicsController(ci)
+CcdPhysicsController(ci),
+m_savedCollisionFlags(0)
 {
 
 }
@@ -161,14 +163,34 @@
 {
 }
 
-void	KX_BulletPhysicsController::SuspendDynamics()
+void	KX_BulletPhysicsController::SuspendDynamics(bool ghost)
 {
-	GetRigidBody()->setActivationState(DISABLE_SIMULATION);
+	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);
+		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);
+	}
+}
 
-}
 void	KX_BulletPhysicsController::RestoreDynamics()
 {
-	GetRigidBody()->forceActivationState(ACTIVE_TAG);
+	btRigidBody *body = GetRigidBody();
+	if (body->getActivationState() == DISABLE_SIMULATION)
+	{
+		GetRigidBody()->forceActivationState(ACTIVE_TAG);
+		GetPhysicsEnvironment()->updateCcdPhysicsController(this, 
+			m_savedCollisionFlags,
+			m_savedCollisionFilterGroup,
+			m_savedCollisionFilterMask);
+	}
 }
 
 SG_Controller*	KX_BulletPhysicsController::GetReplica(class SG_Node* destnode)

Modified: branches/apricot/source/gameengine/Ketsji/KX_BulletPhysicsController.h
===================================================================
--- branches/apricot/source/gameengine/Ketsji/KX_BulletPhysicsController.h	2008-07-19 13:04:55 UTC (rev 15642)
+++ branches/apricot/source/gameengine/Ketsji/KX_BulletPhysicsController.h	2008-07-19 13:07:47 UTC (rev 15643)
@@ -7,7 +7,10 @@
 
 class KX_BulletPhysicsController : public KX_IPhysicsController ,public CcdPhysicsController
 {
-
+private:
+	int m_savedCollisionFlags;
+	short int m_savedCollisionFilterGroup;
+	short int m_savedCollisionFilterMask;
 public:
 
 	KX_BulletPhysicsController (const CcdConstructionInfo& ci, bool dyna);
@@ -39,7 +42,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: branches/apricot/source/gameengine/Ketsji/KX_CameraActuator.cpp
===================================================================
--- branches/apricot/source/gameengine/Ketsji/KX_CameraActuator.cpp	2008-07-19 13:04:55 UTC (rev 15642)
+++ branches/apricot/source/gameengine/Ketsji/KX_CameraActuator.cpp	2008-07-19 13:07:47 UTC (rev 15643)
@@ -49,7 +49,7 @@
 
 KX_CameraActuator::KX_CameraActuator(
 	SCA_IObject* gameobj, 
-	CValue *obj,
+	SCA_IObject *obj,
 	MT_Scalar hght,
 	MT_Scalar minhght,
 	MT_Scalar maxhght,
@@ -63,11 +63,14 @@
 	m_maxHeight (maxhght),
 	m_x (xytog)
 {
+	if (m_ob)
+		m_ob->RegisterActuator(this);
 }
 
 KX_CameraActuator::~KX_CameraActuator()
 {

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list