Revision: 19871
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=19871
Author:   campbellbarton
Date:     2009-04-22 16:42:00 +0200 (Wed, 22 Apr 2009)

Log Message:
-----------
BGE C++ API
PyObjectPlus::ProcessReplica() is now called when any of its subclasses are 
replicated.

This is important because PyObjectPlus::ProcessReplica() NULL's the 'm_proxy' 
python pointer I added recently.
Without this a replicated subclass of PyObjectPlus could have an invalid 
pointer (crashing the BGE).

This change also means CValue::AddDataToReplica() can be moved into 
CValue::ProcessReplica() since ProcessReplica is always called.

Modified Paths:
--------------
    trunk/blender/source/gameengine/Converter/BL_ActionActuator.cpp
    trunk/blender/source/gameengine/Converter/BL_ArmatureObject.cpp
    trunk/blender/source/gameengine/Converter/BL_DeformableGameObject.cpp
    trunk/blender/source/gameengine/Converter/BL_ModifierDeformer.cpp
    trunk/blender/source/gameengine/Converter/BL_ShapeActionActuator.cpp
    trunk/blender/source/gameengine/Converter/BL_SkinDeformer.cpp
    trunk/blender/source/gameengine/Expressions/BoolValue.cpp
    trunk/blender/source/gameengine/Expressions/EmptyValue.cpp
    trunk/blender/source/gameengine/Expressions/FloatValue.cpp
    trunk/blender/source/gameengine/Expressions/IntValue.cpp
    trunk/blender/source/gameengine/Expressions/ListValue.cpp
    trunk/blender/source/gameengine/Expressions/StringValue.cpp
    trunk/blender/source/gameengine/Expressions/Value.cpp
    trunk/blender/source/gameengine/Expressions/Value.h
    trunk/blender/source/gameengine/Expressions/VectorValue.cpp
    trunk/blender/source/gameengine/GameLogic/SCA_2DFilterActuator.cpp
    trunk/blender/source/gameengine/GameLogic/SCA_ANDController.cpp
    trunk/blender/source/gameengine/GameLogic/SCA_ActuatorSensor.cpp
    trunk/blender/source/gameengine/GameLogic/SCA_AlwaysSensor.cpp
    trunk/blender/source/gameengine/GameLogic/SCA_DelaySensor.cpp
    trunk/blender/source/gameengine/GameLogic/SCA_ExpressionController.cpp
    trunk/blender/source/gameengine/GameLogic/SCA_IActuator.cpp
    trunk/blender/source/gameengine/GameLogic/SCA_JoystickSensor.cpp
    trunk/blender/source/gameengine/GameLogic/SCA_KeyboardSensor.cpp
    trunk/blender/source/gameengine/GameLogic/SCA_MouseSensor.cpp
    trunk/blender/source/gameengine/GameLogic/SCA_NANDController.cpp
    trunk/blender/source/gameengine/GameLogic/SCA_NORController.cpp
    trunk/blender/source/gameengine/GameLogic/SCA_ORController.cpp
    trunk/blender/source/gameengine/GameLogic/SCA_PropertyActuator.cpp
    trunk/blender/source/gameengine/GameLogic/SCA_PropertySensor.cpp
    trunk/blender/source/gameengine/GameLogic/SCA_PythonController.cpp
    trunk/blender/source/gameengine/GameLogic/SCA_RandomActuator.cpp
    trunk/blender/source/gameengine/GameLogic/SCA_RandomSensor.cpp
    trunk/blender/source/gameengine/GameLogic/SCA_XNORController.cpp
    trunk/blender/source/gameengine/GameLogic/SCA_XORController.cpp
    
trunk/blender/source/gameengine/Ketsji/KXNetwork/KX_NetworkMessageActuator.cpp
    trunk/blender/source/gameengine/Ketsji/KXNetwork/KX_NetworkMessageSensor.cpp
    trunk/blender/source/gameengine/Ketsji/KX_CDActuator.cpp
    trunk/blender/source/gameengine/Ketsji/KX_Camera.cpp
    trunk/blender/source/gameengine/Ketsji/KX_CameraActuator.cpp
    trunk/blender/source/gameengine/Ketsji/KX_ConstraintActuator.h
    trunk/blender/source/gameengine/Ketsji/KX_GameActuator.cpp
    trunk/blender/source/gameengine/Ketsji/KX_GameObject.cpp
    trunk/blender/source/gameengine/Ketsji/KX_IpoActuator.h
    trunk/blender/source/gameengine/Ketsji/KX_Light.cpp
    trunk/blender/source/gameengine/Ketsji/KX_MouseFocusSensor.h
    trunk/blender/source/gameengine/Ketsji/KX_NearSensor.cpp
    trunk/blender/source/gameengine/Ketsji/KX_ObjectActuator.cpp
    trunk/blender/source/gameengine/Ketsji/KX_ParentActuator.cpp
    trunk/blender/source/gameengine/Ketsji/KX_RadarSensor.cpp
    trunk/blender/source/gameengine/Ketsji/KX_RaySensor.cpp
    trunk/blender/source/gameengine/Ketsji/KX_SCA_AddObjectActuator.cpp
    trunk/blender/source/gameengine/Ketsji/KX_SCA_DynamicActuator.cpp
    trunk/blender/source/gameengine/Ketsji/KX_SCA_EndObjectActuator.cpp
    trunk/blender/source/gameengine/Ketsji/KX_SCA_ReplaceMeshActuator.cpp
    trunk/blender/source/gameengine/Ketsji/KX_SceneActuator.cpp
    trunk/blender/source/gameengine/Ketsji/KX_SoundActuator.cpp
    trunk/blender/source/gameengine/Ketsji/KX_StateActuator.cpp
    trunk/blender/source/gameengine/Ketsji/KX_TouchSensor.cpp
    trunk/blender/source/gameengine/Ketsji/KX_TrackToActuator.h
    trunk/blender/source/gameengine/Ketsji/KX_VisibilityActuator.cpp

Modified: trunk/blender/source/gameengine/Converter/BL_ActionActuator.cpp
===================================================================
--- trunk/blender/source/gameengine/Converter/BL_ActionActuator.cpp     
2009-04-22 12:16:41 UTC (rev 19870)
+++ trunk/blender/source/gameengine/Converter/BL_ActionActuator.cpp     
2009-04-22 14:42:00 UTC (rev 19871)
@@ -66,9 +66,9 @@
                game_free_pose(m_blendpose);
 }
 
-void BL_ActionActuator::ProcessReplica(){
-//     bPose *oldpose = m_pose;
-//     bPose *oldbpose = m_blendpose;
+void BL_ActionActuator::ProcessReplica()
+{
+       SCA_IActuator::ProcessReplica();
        
        m_pose = NULL;
        m_blendpose = NULL;
@@ -84,9 +84,6 @@
 CValue* BL_ActionActuator::GetReplica() {
        BL_ActionActuator* replica = new 
BL_ActionActuator(*this);//m_float,GetName());
        replica->ProcessReplica();
-       
-       // this will copy properties and so on...
-       CValue::AddDataToReplica(replica);
        return replica;
 }
 

Modified: trunk/blender/source/gameengine/Converter/BL_ArmatureObject.cpp
===================================================================
--- trunk/blender/source/gameengine/Converter/BL_ArmatureObject.cpp     
2009-04-22 12:16:41 UTC (rev 19870)
+++ trunk/blender/source/gameengine/Converter/BL_ArmatureObject.cpp     
2009-04-22 14:42:00 UTC (rev 19871)
@@ -70,10 +70,6 @@
 CValue* BL_ArmatureObject::GetReplica()
 {
        BL_ArmatureObject* replica = new BL_ArmatureObject(*this);
-       
-       // this will copy properties and so on...
-       CValue::AddDataToReplica(replica);
-
        replica->ProcessReplica();
        return replica;
 }

Modified: trunk/blender/source/gameengine/Converter/BL_DeformableGameObject.cpp
===================================================================
--- trunk/blender/source/gameengine/Converter/BL_DeformableGameObject.cpp       
2009-04-22 12:16:41 UTC (rev 19870)
+++ trunk/blender/source/gameengine/Converter/BL_DeformableGameObject.cpp       
2009-04-22 14:42:00 UTC (rev 19871)
@@ -53,10 +53,6 @@
 {
 
        BL_DeformableGameObject* replica = new 
BL_DeformableGameObject(*this);//m_float,GetName());
-       
-       // this will copy properties and so on...
-       CValue::AddDataToReplica(replica);
-
        replica->ProcessReplica();
        return replica;
 }

Modified: trunk/blender/source/gameengine/Converter/BL_ModifierDeformer.cpp
===================================================================
--- trunk/blender/source/gameengine/Converter/BL_ModifierDeformer.cpp   
2009-04-22 12:16:41 UTC (rev 19870)
+++ trunk/blender/source/gameengine/Converter/BL_ModifierDeformer.cpp   
2009-04-22 14:42:00 UTC (rev 19871)
@@ -87,6 +87,7 @@
 
 void BL_ModifierDeformer::ProcessReplica()
 {
+       /* Note! - This is not inherited from PyObjectPlus */
        BL_ShapeDeformer::ProcessReplica();
        m_dm = NULL;
        m_lastModifierUpdate = -1;

Modified: trunk/blender/source/gameengine/Converter/BL_ShapeActionActuator.cpp
===================================================================
--- trunk/blender/source/gameengine/Converter/BL_ShapeActionActuator.cpp        
2009-04-22 12:16:41 UTC (rev 19870)
+++ trunk/blender/source/gameengine/Converter/BL_ShapeActionActuator.cpp        
2009-04-22 14:42:00 UTC (rev 19871)
@@ -61,6 +61,7 @@
 
 void BL_ShapeActionActuator::ProcessReplica()
 {
+       SCA_IActuator::ProcessReplica();
        m_localtime=m_startframe;
        m_lastUpdate=-1;
 }
@@ -74,9 +75,6 @@
 {
        BL_ShapeActionActuator* replica = new 
BL_ShapeActionActuator(*this);//m_float,GetName());
        replica->ProcessReplica();
-       
-       // this will copy properties and so on...
-       CValue::AddDataToReplica(replica);
        return replica;
 }
 

Modified: trunk/blender/source/gameengine/Converter/BL_SkinDeformer.cpp
===================================================================
--- trunk/blender/source/gameengine/Converter/BL_SkinDeformer.cpp       
2009-04-22 12:16:41 UTC (rev 19870)
+++ trunk/blender/source/gameengine/Converter/BL_SkinDeformer.cpp       
2009-04-22 14:42:00 UTC (rev 19871)
@@ -156,6 +156,8 @@
        BL_SkinDeformer *result;
 
        result = new BL_SkinDeformer(*this);
+       /* Not inherited from PyObjectPlus so this isnt needed */
+       /* Just call a dummy function below, will be optimized out */
        result->ProcessReplica();
        return result;
 }

Modified: trunk/blender/source/gameengine/Expressions/BoolValue.cpp
===================================================================
--- trunk/blender/source/gameengine/Expressions/BoolValue.cpp   2009-04-22 
12:16:41 UTC (rev 19870)
+++ trunk/blender/source/gameengine/Expressions/BoolValue.cpp   2009-04-22 
14:42:00 UTC (rev 19871)
@@ -201,7 +201,7 @@
 CValue* CBoolValue::GetReplica()
 {
        CBoolValue* replica = new CBoolValue(*this);
-       CValue::AddDataToReplica(replica);
+       replica->ProcessReplica();
        
        return replica;
 }

Modified: trunk/blender/source/gameengine/Expressions/EmptyValue.cpp
===================================================================
--- trunk/blender/source/gameengine/Expressions/EmptyValue.cpp  2009-04-22 
12:16:41 UTC (rev 19870)
+++ trunk/blender/source/gameengine/Expressions/EmptyValue.cpp  2009-04-22 
14:42:00 UTC (rev 19871)
@@ -121,7 +121,7 @@
 CValue* CEmptyValue::GetReplica()
 { 
        CEmptyValue* replica = new CEmptyValue(*this);
-       CValue::AddDataToReplica(replica);
+       replica->ProcessReplica();
        return replica;
 }
 

Modified: trunk/blender/source/gameengine/Expressions/FloatValue.cpp
===================================================================
--- trunk/blender/source/gameengine/Expressions/FloatValue.cpp  2009-04-22 
12:16:41 UTC (rev 19870)
+++ trunk/blender/source/gameengine/Expressions/FloatValue.cpp  2009-04-22 
14:42:00 UTC (rev 19871)
@@ -307,8 +307,8 @@
 CValue* CFloatValue::GetReplica()
 { 
        CFloatValue* replica = new CFloatValue(*this);
-       replica->m_pstrRep = NULL;
-       CValue::AddDataToReplica(replica);
+       replica->m_pstrRep = NULL; /* should be in 
CFloatValue::ProcessReplica() but its not defined, no matter */
+       replica->ProcessReplica();
 
        return replica;
 }

Modified: trunk/blender/source/gameengine/Expressions/IntValue.cpp
===================================================================
--- trunk/blender/source/gameengine/Expressions/IntValue.cpp    2009-04-22 
12:16:41 UTC (rev 19870)
+++ trunk/blender/source/gameengine/Expressions/IntValue.cpp    2009-04-22 
14:42:00 UTC (rev 19871)
@@ -311,7 +311,7 @@
 
 CValue* CIntValue::GetReplica() { 
        CIntValue* replica = new CIntValue(*this);
-       CValue::AddDataToReplica(replica);
+       replica->ProcessReplica();
        replica->m_pstrRep = NULL;
        
        return replica;

Modified: trunk/blender/source/gameengine/Expressions/ListValue.cpp
===================================================================
--- trunk/blender/source/gameengine/Expressions/ListValue.cpp   2009-04-22 
12:16:41 UTC (rev 19870)
+++ trunk/blender/source/gameengine/Expressions/ListValue.cpp   2009-04-22 
14:42:00 UTC (rev 19871)
@@ -324,7 +324,7 @@
 CValue* CListValue::GetReplica() { 
        CListValue* replica = new CListValue(*this);
 
-       CValue::AddDataToReplica(replica);
+       replica->ProcessReplica();
 
        replica->m_bReleaseContents=true; // for copy, complete array is copied 
for now...
        // copy all values

Modified: trunk/blender/source/gameengine/Expressions/StringValue.cpp
===================================================================
--- trunk/blender/source/gameengine/Expressions/StringValue.cpp 2009-04-22 
12:16:41 UTC (rev 19870)
+++ trunk/blender/source/gameengine/Expressions/StringValue.cpp 2009-04-22 
14:42:00 UTC (rev 19871)
@@ -133,7 +133,7 @@
 CValue* CStringValue::GetReplica()
 { 
        CStringValue* replica = new CStringValue(*this);
-       CValue::AddDataToReplica(replica);
+       replica->ProcessReplica();
        return replica;
 };
 

Modified: trunk/blender/source/gameengine/Expressions/Value.cpp
===================================================================
--- trunk/blender/source/gameengine/Expressions/Value.cpp       2009-04-22 
12:16:41 UTC (rev 19870)
+++ trunk/blender/source/gameengine/Expressions/Value.cpp       2009-04-22 
14:42:00 UTC (rev 19871)
@@ -439,27 +439,6 @@
 }
 
 
-
-
-
-void CValue::CloneProperties(CValue *replica)
-{
-       
-       if (m_pNamedPropertyArray)
-       {
-               replica->m_pNamedPropertyArray=NULL;
-               std::map<STR_String,CValue*>::iterator it;
-               for (it= m_pNamedPropertyArray->begin(); (it != 
m_pNamedPropertyArray->end()); it++)
-               {
-                       CValue *val = (*it).second->GetReplica();
-                       replica->SetProperty((*it).first,val);
-                       val->Release();
-               }
-       }
-
-       
-}
-
 double*                CValue::GetVector3(bool bGetTransformedVec)
 {
        assertd(false); // don;t get vector from me
@@ -534,23 +513,34 @@
 
 
 
-void CValue::AddDataToReplica(CValue *replica)
+void CValue::ProcessReplica() /* was AddDataToReplica in 2.48 */
 {
-       replica->m_refcount = 1;
-
+       m_refcount = 1;
+       
 #ifdef _DEBUG
        //gRefCountValue++;
 #endif
-       replica->m_ValFlags.RefCountDisabled = false;
+       PyObjectPlus::ProcessReplica();
 
-       replica->ReplicaSetName(GetName());
+       m_ValFlags.RefCountDisabled = false;
 
-       //copy all props
-       CloneProperties(replica);
+       ReplicaSetName(GetName());
+
+       /* copy all props */
+       if (m_pNamedPropertyArray)
+       {
+               std::map<STR_String,CValue*> *pOldArray = m_pNamedPropertyArray;
+               m_pNamedPropertyArray=NULL;
+               std::map<STR_String,CValue*>::iterator it;
+               for (it= pOldArray->begin(); (it != pOldArray->end()); it++)
+               {
+                       CValue *val = (*it).second->GetReplica();
+                       SetProperty((*it).first,val);
+                       val->Release();
+               }
+       }
 }
 
-
-
 CValue*        CValue::FindIdentifier(const STR_String& identifiername)
 {
 

Modified: trunk/blender/source/gameengine/Expressions/Value.h
===================================================================
--- trunk/blender/source/gameengine/Expressions/Value.h 2009-04-22 12:16:41 UTC 
(rev 19870)
+++ trunk/blender/source/gameengine/Expressions/Value.h 2009-04-22 14:42:00 UTC 
(rev 19871)
@@ -281,7 +281,6 @@
        virtual CValue*         GetProperty(int inIndex);                       
                                        // Get property number <inIndex>
        virtual int                     GetPropertyCount();                     
                                                        // Get the amount of 
properties assiocated with this value
 
-       virtual void            CloneProperties(CValue* replica);
        virtual CValue*         FindIdentifier(const STR_String& 
identifiername);
        /** Set the wireframe color of this value depending on the CSG
         * operator type <op>
@@ -300,6 +299,7 @@
         * @attention this particular function should never be called. Why not 
abstract? */
        virtual void            SetValue(CValue* newval);
        virtual CValue*         GetReplica() =0;
+       virtual void                    ProcessReplica();
        //virtual CValue*               Copy() = 0;
        
        
@@ -328,10 +328,10 @@
 
        virtual void            SetCustomFlag2(bool bCustomFlag)                
                                { m_ValFlags.CustomFlag2 = bCustomFlag;};
        virtual bool            IsCustomFlag2()                                 
                                                { return 
m_ValFlags.CustomFlag2;};
-                                                                               
                                                                                
+

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