[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [19871] trunk/blender/source/gameengine: BGE C++ API
Campbell Barton
ideasman42 at gmail.com
Wed Apr 22 16:42:01 CEST 2009
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. @@
More information about the Bf-blender-cvs
mailing list