[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