[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