[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [19826] trunk/blender/source/gameengine: BGE Python API

Campbell Barton ideasman42 at gmail.com
Tue Apr 21 01:17:52 CEST 2009


Revision: 19826
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=19826
Author:   campbellbarton
Date:     2009-04-21 01:17:52 +0200 (Tue, 21 Apr 2009)

Log Message:
-----------
BGE Python API
Separate getting a normal attribute and getting __dict__, was having to do too a check for __dict__ on each class (multiple times per getattro call from python) when its not used that often.

Modified Paths:
--------------
    trunk/blender/source/gameengine/Converter/BL_ActionActuator.cpp
    trunk/blender/source/gameengine/Converter/BL_ActionActuator.h
    trunk/blender/source/gameengine/Converter/BL_ShapeActionActuator.cpp
    trunk/blender/source/gameengine/Converter/BL_ShapeActionActuator.h
    trunk/blender/source/gameengine/Expressions/ListValue.cpp
    trunk/blender/source/gameengine/Expressions/ListValue.h
    trunk/blender/source/gameengine/Expressions/PyObjectPlus.cpp
    trunk/blender/source/gameengine/Expressions/PyObjectPlus.h
    trunk/blender/source/gameengine/Expressions/Value.cpp
    trunk/blender/source/gameengine/Expressions/Value.h
    trunk/blender/source/gameengine/GameLogic/SCA_2DFilterActuator.cpp
    trunk/blender/source/gameengine/GameLogic/SCA_2DFilterActuator.h
    trunk/blender/source/gameengine/GameLogic/SCA_ANDController.cpp
    trunk/blender/source/gameengine/GameLogic/SCA_ANDController.h
    trunk/blender/source/gameengine/GameLogic/SCA_ActuatorSensor.cpp
    trunk/blender/source/gameengine/GameLogic/SCA_ActuatorSensor.h
    trunk/blender/source/gameengine/GameLogic/SCA_AlwaysSensor.cpp
    trunk/blender/source/gameengine/GameLogic/SCA_AlwaysSensor.h
    trunk/blender/source/gameengine/GameLogic/SCA_DelaySensor.cpp
    trunk/blender/source/gameengine/GameLogic/SCA_DelaySensor.h
    trunk/blender/source/gameengine/GameLogic/SCA_ExpressionController.h
    trunk/blender/source/gameengine/GameLogic/SCA_ILogicBrick.cpp
    trunk/blender/source/gameengine/GameLogic/SCA_ILogicBrick.h
    trunk/blender/source/gameengine/GameLogic/SCA_IObject.cpp
    trunk/blender/source/gameengine/GameLogic/SCA_IObject.h
    trunk/blender/source/gameengine/GameLogic/SCA_ISensor.cpp
    trunk/blender/source/gameengine/GameLogic/SCA_ISensor.h
    trunk/blender/source/gameengine/GameLogic/SCA_JoystickSensor.cpp
    trunk/blender/source/gameengine/GameLogic/SCA_JoystickSensor.h
    trunk/blender/source/gameengine/GameLogic/SCA_KeyboardSensor.cpp
    trunk/blender/source/gameengine/GameLogic/SCA_KeyboardSensor.h
    trunk/blender/source/gameengine/GameLogic/SCA_MouseSensor.cpp
    trunk/blender/source/gameengine/GameLogic/SCA_MouseSensor.h
    trunk/blender/source/gameengine/GameLogic/SCA_NANDController.cpp
    trunk/blender/source/gameengine/GameLogic/SCA_NANDController.h
    trunk/blender/source/gameengine/GameLogic/SCA_NORController.cpp
    trunk/blender/source/gameengine/GameLogic/SCA_NORController.h
    trunk/blender/source/gameengine/GameLogic/SCA_ORController.cpp
    trunk/blender/source/gameengine/GameLogic/SCA_ORController.h
    trunk/blender/source/gameengine/GameLogic/SCA_PropertyActuator.cpp
    trunk/blender/source/gameengine/GameLogic/SCA_PropertyActuator.h
    trunk/blender/source/gameengine/GameLogic/SCA_PropertySensor.cpp
    trunk/blender/source/gameengine/GameLogic/SCA_PropertySensor.h
    trunk/blender/source/gameengine/GameLogic/SCA_RandomActuator.cpp
    trunk/blender/source/gameengine/GameLogic/SCA_RandomActuator.h
    trunk/blender/source/gameengine/GameLogic/SCA_RandomSensor.cpp
    trunk/blender/source/gameengine/GameLogic/SCA_RandomSensor.h
    trunk/blender/source/gameengine/GameLogic/SCA_XNORController.cpp
    trunk/blender/source/gameengine/GameLogic/SCA_XNORController.h
    trunk/blender/source/gameengine/GameLogic/SCA_XORController.cpp
    trunk/blender/source/gameengine/GameLogic/SCA_XORController.h
    trunk/blender/source/gameengine/Ketsji/BL_Shader.cpp
    trunk/blender/source/gameengine/Ketsji/BL_Shader.h
    trunk/blender/source/gameengine/Ketsji/KXNetwork/KX_NetworkMessageActuator.cpp
    trunk/blender/source/gameengine/Ketsji/KXNetwork/KX_NetworkMessageActuator.h
    trunk/blender/source/gameengine/Ketsji/KXNetwork/KX_NetworkMessageSensor.cpp
    trunk/blender/source/gameengine/Ketsji/KXNetwork/KX_NetworkMessageSensor.h
    trunk/blender/source/gameengine/Ketsji/KX_BlenderMaterial.cpp
    trunk/blender/source/gameengine/Ketsji/KX_BlenderMaterial.h
    trunk/blender/source/gameengine/Ketsji/KX_CDActuator.cpp
    trunk/blender/source/gameengine/Ketsji/KX_CDActuator.h
    trunk/blender/source/gameengine/Ketsji/KX_Camera.cpp
    trunk/blender/source/gameengine/Ketsji/KX_Camera.h
    trunk/blender/source/gameengine/Ketsji/KX_CameraActuator.cpp
    trunk/blender/source/gameengine/Ketsji/KX_CameraActuator.h
    trunk/blender/source/gameengine/Ketsji/KX_ConstraintActuator.cpp
    trunk/blender/source/gameengine/Ketsji/KX_ConstraintActuator.h
    trunk/blender/source/gameengine/Ketsji/KX_ConstraintWrapper.cpp
    trunk/blender/source/gameengine/Ketsji/KX_ConstraintWrapper.h
    trunk/blender/source/gameengine/Ketsji/KX_GameActuator.cpp
    trunk/blender/source/gameengine/Ketsji/KX_GameActuator.h
    trunk/blender/source/gameengine/Ketsji/KX_GameObject.cpp
    trunk/blender/source/gameengine/Ketsji/KX_GameObject.h
    trunk/blender/source/gameengine/Ketsji/KX_IpoActuator.cpp
    trunk/blender/source/gameengine/Ketsji/KX_IpoActuator.h
    trunk/blender/source/gameengine/Ketsji/KX_Light.cpp
    trunk/blender/source/gameengine/Ketsji/KX_Light.h
    trunk/blender/source/gameengine/Ketsji/KX_MeshProxy.cpp
    trunk/blender/source/gameengine/Ketsji/KX_MeshProxy.h
    trunk/blender/source/gameengine/Ketsji/KX_MouseFocusSensor.cpp
    trunk/blender/source/gameengine/Ketsji/KX_MouseFocusSensor.h
    trunk/blender/source/gameengine/Ketsji/KX_NearSensor.cpp
    trunk/blender/source/gameengine/Ketsji/KX_NearSensor.h
    trunk/blender/source/gameengine/Ketsji/KX_ObjectActuator.cpp
    trunk/blender/source/gameengine/Ketsji/KX_ObjectActuator.h
    trunk/blender/source/gameengine/Ketsji/KX_ParentActuator.cpp
    trunk/blender/source/gameengine/Ketsji/KX_ParentActuator.h
    trunk/blender/source/gameengine/Ketsji/KX_PhysicsObjectWrapper.cpp
    trunk/blender/source/gameengine/Ketsji/KX_PhysicsObjectWrapper.h
    trunk/blender/source/gameengine/Ketsji/KX_PolyProxy.cpp
    trunk/blender/source/gameengine/Ketsji/KX_PolyProxy.h
    trunk/blender/source/gameengine/Ketsji/KX_PolygonMaterial.cpp
    trunk/blender/source/gameengine/Ketsji/KX_PolygonMaterial.h
    trunk/blender/source/gameengine/Ketsji/KX_RadarSensor.cpp
    trunk/blender/source/gameengine/Ketsji/KX_RadarSensor.h
    trunk/blender/source/gameengine/Ketsji/KX_RaySensor.cpp
    trunk/blender/source/gameengine/Ketsji/KX_RaySensor.h
    trunk/blender/source/gameengine/Ketsji/KX_SCA_AddObjectActuator.cpp
    trunk/blender/source/gameengine/Ketsji/KX_SCA_AddObjectActuator.h
    trunk/blender/source/gameengine/Ketsji/KX_SCA_DynamicActuator.cpp
    trunk/blender/source/gameengine/Ketsji/KX_SCA_DynamicActuator.h
    trunk/blender/source/gameengine/Ketsji/KX_SCA_EndObjectActuator.cpp
    trunk/blender/source/gameengine/Ketsji/KX_SCA_EndObjectActuator.h
    trunk/blender/source/gameengine/Ketsji/KX_SCA_ReplaceMeshActuator.cpp
    trunk/blender/source/gameengine/Ketsji/KX_SCA_ReplaceMeshActuator.h
    trunk/blender/source/gameengine/Ketsji/KX_Scene.cpp
    trunk/blender/source/gameengine/Ketsji/KX_Scene.h
    trunk/blender/source/gameengine/Ketsji/KX_SceneActuator.cpp
    trunk/blender/source/gameengine/Ketsji/KX_SceneActuator.h
    trunk/blender/source/gameengine/Ketsji/KX_SoundActuator.cpp
    trunk/blender/source/gameengine/Ketsji/KX_SoundActuator.h
    trunk/blender/source/gameengine/Ketsji/KX_StateActuator.cpp
    trunk/blender/source/gameengine/Ketsji/KX_StateActuator.h
    trunk/blender/source/gameengine/Ketsji/KX_TouchSensor.cpp
    trunk/blender/source/gameengine/Ketsji/KX_TouchSensor.h
    trunk/blender/source/gameengine/Ketsji/KX_TrackToActuator.cpp
    trunk/blender/source/gameengine/Ketsji/KX_TrackToActuator.h
    trunk/blender/source/gameengine/Ketsji/KX_VehicleWrapper.cpp
    trunk/blender/source/gameengine/Ketsji/KX_VehicleWrapper.h
    trunk/blender/source/gameengine/Ketsji/KX_VertexProxy.cpp
    trunk/blender/source/gameengine/Ketsji/KX_VertexProxy.h
    trunk/blender/source/gameengine/Ketsji/KX_VisibilityActuator.cpp
    trunk/blender/source/gameengine/Ketsji/KX_VisibilityActuator.h

Modified: trunk/blender/source/gameengine/Converter/BL_ActionActuator.cpp
===================================================================
--- trunk/blender/source/gameengine/Converter/BL_ActionActuator.cpp	2009-04-20 21:20:33 UTC (rev 19825)
+++ trunk/blender/source/gameengine/Converter/BL_ActionActuator.cpp	2009-04-20 23:17:52 UTC (rev 19826)
@@ -1020,6 +1020,10 @@
 	py_getattro_up(SCA_IActuator);
 }
 
+PyObject* BL_ActionActuator::py_getattro_dict() {
+	py_getattro_dict_up(SCA_IActuator);
+}
+
 int BL_ActionActuator::py_setattro(PyObject *attr, PyObject* value) {
 	py_setattro_up(SCA_IActuator);
 }

Modified: trunk/blender/source/gameengine/Converter/BL_ActionActuator.h
===================================================================
--- trunk/blender/source/gameengine/Converter/BL_ActionActuator.h	2009-04-20 21:20:33 UTC (rev 19825)
+++ trunk/blender/source/gameengine/Converter/BL_ActionActuator.h	2009-04-20 23:17:52 UTC (rev 19826)
@@ -114,6 +114,7 @@
 	KX_PYMETHOD_DOC(BL_ActionActuator,setChannel);
 
 	virtual PyObject* py_getattro(PyObject* attr);
+	virtual PyObject*		py_getattro_dict();
 	virtual int py_setattro(PyObject* attr, PyObject* value);
 
 	static PyObject*	pyattr_get_action(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);

Modified: trunk/blender/source/gameengine/Converter/BL_ShapeActionActuator.cpp
===================================================================
--- trunk/blender/source/gameengine/Converter/BL_ShapeActionActuator.cpp	2009-04-20 21:20:33 UTC (rev 19825)
+++ trunk/blender/source/gameengine/Converter/BL_ShapeActionActuator.cpp	2009-04-20 23:17:52 UTC (rev 19826)
@@ -489,6 +489,10 @@
 	py_getattro_up(SCA_IActuator);
 }
 
+PyObject* BL_ShapeActionActuator::py_getattro_dict() {
+	py_getattro_dict_up(SCA_IActuator);
+}
+
 int BL_ShapeActionActuator::py_setattro(PyObject *attr, PyObject* value) {
 	py_setattro_up(SCA_IActuator);
 }

Modified: trunk/blender/source/gameengine/Converter/BL_ShapeActionActuator.h
===================================================================
--- trunk/blender/source/gameengine/Converter/BL_ShapeActionActuator.h	2009-04-20 21:20:33 UTC (rev 19825)
+++ trunk/blender/source/gameengine/Converter/BL_ShapeActionActuator.h	2009-04-20 23:17:52 UTC (rev 19826)
@@ -107,6 +107,7 @@
 	KX_PYMETHOD_DOC_VARARGS(BL_ShapeActionActuator,SetType);
 
 	virtual PyObject* py_getattro(PyObject* attr);
+	virtual PyObject*		py_getattro_dict();
 	virtual int py_setattro(PyObject* attr, PyObject* value);
 
 	static PyObject*	pyattr_get_action(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);

Modified: trunk/blender/source/gameengine/Expressions/ListValue.cpp
===================================================================
--- trunk/blender/source/gameengine/Expressions/ListValue.cpp	2009-04-20 21:20:33 UTC (rev 19825)
+++ trunk/blender/source/gameengine/Expressions/ListValue.cpp	2009-04-20 23:17:52 UTC (rev 19826)
@@ -273,7 +273,11 @@
 	py_getattro_up(CValue);
 }
 
+PyObject* CListValue::py_getattro_dict() {
+	py_getattro_dict_up(CValue);
+}
 
+
 //////////////////////////////////////////////////////////////////////
 // Construction/Destruction
 //////////////////////////////////////////////////////////////////////

Modified: trunk/blender/source/gameengine/Expressions/ListValue.h
===================================================================
--- trunk/blender/source/gameengine/Expressions/ListValue.h	2009-04-20 21:20:33 UTC (rev 19825)
+++ trunk/blender/source/gameengine/Expressions/ListValue.h	2009-04-20 23:17:52 UTC (rev 19826)
@@ -60,6 +60,7 @@
 	bool CheckEqual(CValue* first,CValue* second);
 
 	virtual PyObject* py_getattro(PyObject* attr);
+	virtual PyObject* py_getattro_dict();
 	virtual PyObject* py_repr(void) {
 		PyObject *py_proxy= this->GetProxy();
 		PyObject *py_list= PySequence_List(py_proxy);

Modified: trunk/blender/source/gameengine/Expressions/PyObjectPlus.cpp
===================================================================
--- trunk/blender/source/gameengine/Expressions/PyObjectPlus.cpp	2009-04-20 21:20:33 UTC (rev 19825)
+++ trunk/blender/source/gameengine/Expressions/PyObjectPlus.cpp	2009-04-20 23:17:52 UTC (rev 19826)
@@ -143,7 +143,13 @@
 		PyErr_SetString(PyExc_RuntimeError, BGE_PROXY_ERROR_MSG);
 		return NULL;
 	}
-	return self_plus->py_getattro(attr); 
+	
+	PyObject *ret= self_plus->py_getattro(attr);
+	
+	if(ret==NULL && (strcmp(PyString_AsString(attr), "__dict__")==0))
+		ret= self_plus->py_getattro_dict();
+	
+	return ret;
 }
 
 /* This should be the entry in Type since it takes the C++ class from PyObjectPlus_Proxy */
@@ -177,9 +183,6 @@
 {
 	PyObject *descr = PyDict_GetItem(Type.tp_dict, attr); \
 	if (descr == NULL) {
-		if (strcmp(PyString_AsString(attr), "__dict__")==0) {
-			return py_getattr_dict(NULL, Type.tp_dict); /* no Attributes yet */
-		}
 		PyErr_Format(PyExc_AttributeError, "attribute \"%s\" not found", PyString_AsString(attr));
 		return NULL;
 	} else {
@@ -196,6 +199,10 @@
 	}
 }
 
+PyObject* PyObjectPlus::py_getattro_dict() {
+	return py_getattr_dict(NULL, Type.tp_dict);
+}
+
 int PyObjectPlus::py_delattro(PyObject* attr)
 {
 	PyErr_SetString(PyExc_AttributeError, "attribute cant be deleted");

Modified: trunk/blender/source/gameengine/Expressions/PyObjectPlus.h
===================================================================
--- trunk/blender/source/gameengine/Expressions/PyObjectPlus.h	2009-04-20 21:20:33 UTC (rev 19825)
+++ trunk/blender/source/gameengine/Expressions/PyObjectPlus.h	2009-04-20 23:17:52 UTC (rev 19826)
@@ -130,16 +130,12 @@
 		} \
 	} else { \
 		PyErr_Clear(); \
-		PyObject *rvalue= Parent::py_getattro(attr); \
-		 \
-		if (strcmp(PyString_AsString(attr), "__dict__")==0) { \
-			return py_getattr_dict(rvalue, Type.tp_dict); \
-		} \
-		 \
-		return rvalue; \
+		return Parent::py_getattro(attr); \
 	} \
 	return NULL;
 
+#define py_getattro_dict_up(Parent) \
+	return py_getattr_dict(Parent::py_getattro_dict(), Type.tp_dict);
 
 /*
  * nonzero values are an error for setattr
@@ -434,6 +430,7 @@
 	/* These are all virtual python methods that are defined in each class
 	 * Our own fake subclassing calls these on each class, then calls the parent */
 	virtual PyObject*		py_getattro(PyObject *attr);
+	virtual PyObject*		py_getattro_dict();
 	virtual int			py_delattro(PyObject *attr);
 	virtual int			py_setattro(PyObject *attr, PyObject *value);
 	virtual PyObject*		py_repr(void);

Modified: trunk/blender/source/gameengine/Expressions/Value.cpp
===================================================================
--- trunk/blender/source/gameengine/Expressions/Value.cpp	2009-04-20 21:20:33 UTC (rev 19825)
+++ trunk/blender/source/gameengine/Expressions/Value.cpp	2009-04-20 23:17:52 UTC (rev 19826)
@@ -612,6 +612,10 @@
 	py_getattro_up(PyObjectPlus);
 }
 
+PyObject* CValue::py_getattro_dict() {
+	py_getattro_dict_up(PyObjectPlus);
+}
+
 CValue* CValue::ConvertPythonToValue(PyObject* pyobj)
 {
 

Modified: trunk/blender/source/gameengine/Expressions/Value.h
===================================================================
--- trunk/blender/source/gameengine/Expressions/Value.h	2009-04-20 21:20:33 UTC (rev 19825)
+++ trunk/blender/source/gameengine/Expressions/Value.h	2009-04-20 23:17:52 UTC (rev 19826)
@@ -225,6 +225,7 @@
 
 
 	virtual PyObject*			py_getattro(PyObject *attr);
+	virtual PyObject*			py_getattro_dict();
 	virtual PyObject*	ConvertValueToPython() {
 		return NULL;
 	}

Modified: trunk/blender/source/gameengine/GameLogic/SCA_2DFilterActuator.cpp
===================================================================
--- trunk/blender/source/gameengine/GameLogic/SCA_2DFilterActuator.cpp	2009-04-20 21:20:33 UTC (rev 19825)
+++ trunk/blender/source/gameengine/GameLogic/SCA_2DFilterActuator.cpp	2009-04-20 23:17:52 UTC (rev 19826)
@@ -157,6 +157,10 @@
     py_getattro_up(SCA_IActuator);
 }
 
+PyObject* SCA_2DFilterActuator::py_getattro_dict() {
+	py_getattro_dict_up(SCA_IActuator);
+}
+
 int SCA_2DFilterActuator::py_setattro(PyObject *attr, PyObject* value) 
 {
 	py_setattro_up(SCA_IActuator);

Modified: trunk/blender/source/gameengine/GameLogic/SCA_2DFilterActuator.h
===================================================================
--- trunk/blender/source/gameengine/GameLogic/SCA_2DFilterActuator.h	2009-04-20 21:20:33 UTC (rev 19825)
+++ trunk/blender/source/gameengine/GameLogic/SCA_2DFilterActuator.h	2009-04-20 23:17:52 UTC (rev 19826)
@@ -71,6 +71,7 @@
 	/* --------------------------------------------------------------------- */
 
     virtual PyObject* py_getattro(PyObject *attr);
+	virtual PyObject* py_getattro_dict();
 	virtual int py_setattro(PyObject *attr, PyObject* value);
 
 };

Modified: trunk/blender/source/gameengine/GameLogic/SCA_ANDController.cpp
===================================================================
--- trunk/blender/source/gameengine/GameLogic/SCA_ANDController.cpp	2009-04-20 21:20:33 UTC (rev 19825)
+++ trunk/blender/source/gameengine/GameLogic/SCA_ANDController.cpp	2009-04-20 23:17:52 UTC (rev 19826)
@@ -145,4 +145,8 @@
 	py_getattro_up(SCA_IController);
 }
 
+PyObject* SCA_ANDController::py_getattro_dict() {
+	py_getattro_dict_up(SCA_IController);
+}
+
 /* eof */

Modified: trunk/blender/source/gameengine/GameLogic/SCA_ANDController.h
===================================================================
--- trunk/blender/source/gameengine/GameLogic/SCA_ANDController.h	2009-04-20 21:20:33 UTC (rev 19825)
+++ trunk/blender/source/gameengine/GameLogic/SCA_ANDController.h	2009-04-20 23:17:52 UTC (rev 19826)
@@ -49,6 +49,7 @@
 	/* --------------------------------------------------------------------- */
 
 	virtual PyObject* py_getattro(PyObject *attr);
+	virtual PyObject* py_getattro_dict();
 
 };
 

Modified: trunk/blender/source/gameengine/GameLogic/SCA_ActuatorSensor.cpp
===================================================================
--- trunk/blender/source/gameengine/GameLogic/SCA_ActuatorSensor.cpp	2009-04-20 21:20:33 UTC (rev 19825)
+++ trunk/blender/source/gameengine/GameLogic/SCA_ActuatorSensor.cpp	2009-04-20 23:17:52 UTC (rev 19826)
@@ -165,6 +165,10 @@
 	py_getattro_up(SCA_ISensor);
 }
 
+PyObject* SCA_ActuatorSensor::py_getattro_dict() {
+	py_getattro_dict_up(SCA_ISensor);
+}
+
 int SCA_ActuatorSensor::py_setattro(PyObject *attr, PyObject *value) {
 	py_setattro_up(SCA_ISensor);
 }

Modified: trunk/blender/source/gameengine/GameLogic/SCA_ActuatorSensor.h
===================================================================

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list