[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