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. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to