[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [15420] trunk/blender/source: non user visible changes and small optimizations to the game engine pyapi as well as fixing some bugs .

Campbell Barton ideasman42 at gmail.com
Fri Jul 4 02:07:10 CEST 2008


Revision: 15420
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=15420
Author:   campbellbarton
Date:     2008-07-04 02:05:50 +0200 (Fri, 04 Jul 2008)

Log Message:
-----------
non user visible changes and small optimizations to the game engine pyapi as well as fixing some bugs.
* 2 returning errors without exception set another return None instead of NULL.
* a missing check for parent relation
* BPY matrix length was incorrect in matrix.c, this change could break some scripts, however when a script expects a list of lists for a matrix, the len() function is incorrect and will give an error. This was the only thing stopping apricot game logic running in trunk.

Also added a function for GameObjects  -  getAxisVect(vec), multiplies the vector be the objects worldspace rotation matrix. Very useful if you want to know what the forward direction is for an object and dont want to use Blender.Mathutils which is tedious and not available in BlenderPlayer yet.

Modified Paths:
--------------
    trunk/blender/source/blender/python/api2_2x/matrix.c
    trunk/blender/source/gameengine/Expressions/PyObjectPlus.h
    trunk/blender/source/gameengine/GameLogic/SCA_PythonController.cpp
    trunk/blender/source/gameengine/GameLogic/SCA_PythonController.h
    trunk/blender/source/gameengine/Ketsji/KX_GameObject.cpp
    trunk/blender/source/gameengine/Ketsji/KX_GameObject.h
    trunk/blender/source/gameengine/PyDoc/KX_GameObject.py

Modified: trunk/blender/source/blender/python/api2_2x/matrix.c
===================================================================
--- trunk/blender/source/blender/python/api2_2x/matrix.c	2008-07-03 20:16:24 UTC (rev 15419)
+++ trunk/blender/source/blender/python/api2_2x/matrix.c	2008-07-04 00:05:50 UTC (rev 15420)
@@ -483,7 +483,7 @@
   sequence length*/
 static int Matrix_len(MatrixObject * self)
 {
-	return (self->colSize * self->rowSize);
+	return (self->rowSize);
 }
 /*----------------------------object[]---------------------------
   sequence accessor (get)

Modified: trunk/blender/source/gameengine/Expressions/PyObjectPlus.h
===================================================================
--- trunk/blender/source/gameengine/Expressions/PyObjectPlus.h	2008-07-03 20:16:24 UTC (rev 15419)
+++ trunk/blender/source/gameengine/Expressions/PyObjectPlus.h	2008-07-04 00:05:50 UTC (rev 15420)
@@ -99,6 +99,18 @@
 		return ((class_name*) self)->Py##method_name(self, args, kwds);		\
 	}; \
 
+#define KX_PYMETHOD_NOARGS(class_name, method_name)			\
+	PyObject* Py##method_name(PyObject* self); \
+	static PyObject* sPy##method_name( PyObject* self) { \
+		return ((class_name*) self)->Py##method_name(self);		\
+	}; \
+	
+#define KX_PYMETHOD_O(class_name, method_name)			\
+	PyObject* Py##method_name(PyObject* self, PyObject* value); \
+	static PyObject* sPy##method_name( PyObject* self, PyObject* value) { \
+		return ((class_name*) self)->Py##method_name(self, value);		\
+	}; \
+
 #define KX_PYMETHOD_DOC(class_name, method_name)			\
 	PyObject* Py##method_name(PyObject* self, PyObject* args, PyObject* kwds); \
 	static PyObject* sPy##method_name( PyObject* self, PyObject* args, PyObject* kwds) { \
@@ -106,6 +118,21 @@
 	}; \
     static char method_name##_doc[]; \
 
+#define KX_PYMETHOD_DOC_O(class_name, method_name)			\
+	PyObject* Py##method_name(PyObject* self, PyObject* value); \
+	static PyObject* sPy##method_name( PyObject* self, PyObject* value) { \
+		return ((class_name*) self)->Py##method_name(self, value);		\
+	}; \
+    static char method_name##_doc[]; \
+
+#define KX_PYMETHOD_DOC_NOARGS(class_name, method_name)			\
+	PyObject* Py##method_name(PyObject* self); \
+	static PyObject* sPy##method_name( PyObject* self) { \
+		return ((class_name*) self)->Py##method_name(self);		\
+	}; \
+    static char method_name##_doc[]; \
+
+
 /* The line above should remain empty */
 /**
  * Method table macro (with doc)

Modified: trunk/blender/source/gameengine/GameLogic/SCA_PythonController.cpp
===================================================================
--- trunk/blender/source/gameengine/GameLogic/SCA_PythonController.cpp	2008-07-03 20:16:24 UTC (rev 15419)
+++ trunk/blender/source/gameengine/GameLogic/SCA_PythonController.cpp	2008-07-04 00:05:50 UTC (rev 15420)
@@ -144,9 +144,7 @@
 #endif
 
 
-PyObject* SCA_PythonController::sPyGetCurrentController(PyObject* self, 
-											 PyObject* args, 
-											 PyObject* kwds)
+PyObject* SCA_PythonController::sPyGetCurrentController(PyObject* self)
 {
 	m_sCurrentController->AddRef();
 	return m_sCurrentController;
@@ -159,8 +157,7 @@
 PyObject* SCA_PythonController::sPyAddActiveActuator(
 	  
 		PyObject* self, 
-		PyObject* args, 
-		PyObject* kwds)
+		PyObject* args)
 {
 	
 	PyObject* ob1;
@@ -187,8 +184,7 @@
 		m_sCurrentLogicManager->AddActiveActuator((SCA_IActuator*)act,boolval);
 		boolval->Release();
 	}
-	Py_INCREF(Py_None);
-	return Py_None;
+	Py_RETURN_NONE;
 }
 
 
@@ -222,17 +218,13 @@
 	NULL
 };
 PyMethodDef SCA_PythonController::Methods[] = {
-	{"getActuators", (PyCFunction) SCA_PythonController::sPyGetActuators, 
-		METH_VARARGS, SCA_PythonController::GetActuators_doc},
-	{"getActuator", (PyCFunction) SCA_PythonController::sPyGetActuator, 
-	METH_VARARGS, SCA_PythonController::GetActuator_doc},
-	{"getSensors", (PyCFunction) SCA_PythonController::sPyGetSensors, 
-	METH_VARARGS, SCA_PythonController::GetSensors_doc},
-	{"getSensor", (PyCFunction) SCA_PythonController::sPyGetSensor, 
-	METH_VARARGS, SCA_PythonController::GetSensor_doc},
-	{"getScript", (PyCFunction) SCA_PythonController::sPyGetScript, METH_VARARGS},
-	{"setScript", (PyCFunction) SCA_PythonController::sPySetScript, METH_VARARGS},
-	{"getState", (PyCFunction) SCA_PythonController::sPyGetState, METH_VARARGS},
+	{"getActuators", (PyCFunction) SCA_PythonController::sPyGetActuators, METH_NOARGS, SCA_PythonController::GetActuators_doc},
+	{"getActuator", (PyCFunction) SCA_PythonController::sPyGetActuator, METH_O, SCA_PythonController::GetActuator_doc},
+	{"getSensors", (PyCFunction) SCA_PythonController::sPyGetSensors, METH_NOARGS, SCA_PythonController::GetSensors_doc},
+	{"getSensor", (PyCFunction) SCA_PythonController::sPyGetSensor, METH_O, SCA_PythonController::GetSensor_doc},
+	{"getScript", (PyCFunction) SCA_PythonController::sPyGetScript, METH_NOARGS},
+	{"setScript", (PyCFunction) SCA_PythonController::sPySetScript, METH_O},
+	{"getState", (PyCFunction) SCA_PythonController::sPyGetState, METH_NOARGS},
 	{NULL,NULL} //Sentinel
 };
 
@@ -330,14 +322,12 @@
 
 
 
-PyObject* SCA_PythonController::PyGetActuators(PyObject* self, 
-								   PyObject* args, 
-								   PyObject* kwds)
+PyObject* SCA_PythonController::PyGetActuators(PyObject* self)
 {
 	PyObject* resultlist = PyList_New(m_linkedactuators.size());
 	for (unsigned int index=0;index<m_linkedactuators.size();index++)
 	{
-		PyList_SetItem(resultlist,index,m_linkedactuators[index]->AddRef());
+		PyList_SET_ITEM(resultlist,index,m_linkedactuators[index]->AddRef());
 	}
 
 	return resultlist;
@@ -346,14 +336,12 @@
 char SCA_PythonController::GetSensor_doc[] = 
 "GetSensor (char sensorname) return linked sensor that is named [sensorname]\n";
 PyObject*
-SCA_PythonController::PyGetSensor(PyObject* self, 
-								 PyObject* args, 
-								 PyObject* kwds)
+SCA_PythonController::PyGetSensor(PyObject* self, PyObject* value)
 {
 
-	char *scriptArg;
-
-	if (!PyArg_ParseTuple(args, "s", &scriptArg)) {
+	char *scriptArg = PyString_AsString(value);
+	if (scriptArg==NULL) {
+		PyErr_SetString(PyExc_TypeError, "expected a string (sensor name)");
 		return NULL;
 	}
 	
@@ -376,14 +364,12 @@
 char SCA_PythonController::GetActuator_doc[] = 
 "GetActuator (char sensorname) return linked actuator that is named [actuatorname]\n";
 PyObject*
-SCA_PythonController::PyGetActuator(PyObject* self, 
-								 PyObject* args, 
-								 PyObject* kwds)
+SCA_PythonController::PyGetActuator(PyObject* self, PyObject* value)
 {
 
-	char *scriptArg;
-
-	if (!PyArg_ParseTuple(args, "s", &scriptArg)) {
+	char *scriptArg = PyString_AsString(value);
+	if (scriptArg==NULL) {
+		PyErr_SetString(PyExc_TypeError, "expected a string (actuator name)");
 		return NULL;
 	}
 	
@@ -404,34 +390,29 @@
 
 char SCA_PythonController::GetSensors_doc[]   = "getSensors returns a list of all attached sensors";
 PyObject*
-SCA_PythonController::PyGetSensors(PyObject* self, 
-								 PyObject* args, 
-								 PyObject* kwds)
+SCA_PythonController::PyGetSensors(PyObject* self)
 {
 	PyObject* resultlist = PyList_New(m_linkedsensors.size());
 	for (unsigned int index=0;index<m_linkedsensors.size();index++)
 	{
-		PyList_SetItem(resultlist,index,m_linkedsensors[index]->AddRef());
+		PyList_SET_ITEM(resultlist,index,m_linkedsensors[index]->AddRef());
 	}
 	
 	return resultlist;
 }
 
 /* 1. getScript */
-PyObject* SCA_PythonController::PyGetScript(PyObject* self, 
-										   PyObject* args, 
-										   PyObject* kwds)
+PyObject* SCA_PythonController::PyGetScript(PyObject* self)
 {
 	return PyString_FromString(m_scriptText);
 }
 
 /* 2. setScript */
-PyObject* SCA_PythonController::PySetScript(PyObject* self, 
-										   PyObject* args, 
-										   PyObject* kwds)
+PyObject* SCA_PythonController::PySetScript(PyObject* self, PyObject* value)
 {
-	char *scriptArg;
-	if (!PyArg_ParseTuple(args, "s", &scriptArg)) {
+	char *scriptArg = PyString_AsString(value);
+	if (scriptArg==NULL) {
+		PyErr_SetString(PyExc_TypeError, "expected a string (script name)");
 		return NULL;
 	}
 	
@@ -440,13 +421,11 @@
 
 	this->SetScriptText(scriptArg);
 	
-	Py_Return;
+	Py_RETURN_NONE;
 }
 
 /* 1. getScript */
-PyObject* SCA_PythonController::PyGetState(PyObject* self, 
-										   PyObject* args, 
-										   PyObject* kwds)
+PyObject* SCA_PythonController::PyGetState(PyObject* self)
 {
 	return PyInt_FromLong(m_statemask);
 }

Modified: trunk/blender/source/gameengine/GameLogic/SCA_PythonController.h
===================================================================
--- trunk/blender/source/gameengine/GameLogic/SCA_PythonController.h	2008-07-03 20:16:24 UTC (rev 15419)
+++ trunk/blender/source/gameengine/GameLogic/SCA_PythonController.h	2008-07-04 00:05:50 UTC (rev 15420)
@@ -66,22 +66,19 @@
 	void	SetDictionary(PyObject*	pythondictionary);
 
 	static char* sPyGetCurrentController__doc__;
-	static PyObject* sPyGetCurrentController(PyObject* self, 
-											 PyObject* args, 
-											 PyObject* kwds);
+	static PyObject* sPyGetCurrentController(PyObject* self);
 	static char* sPyAddActiveActuator__doc__;
 	static PyObject* sPyAddActiveActuator(PyObject* self, 
-										  PyObject* args, 
-										  PyObject* kwds);
+										  PyObject* args);
 	virtual PyObject* _getattr(const STR_String& attr);
 
-	KX_PYMETHOD_DOC(SCA_PythonController,GetSensors);
-	KX_PYMETHOD_DOC(SCA_PythonController,GetSensor);
-	KX_PYMETHOD_DOC(SCA_PythonController,GetActuator);
-	KX_PYMETHOD_DOC(SCA_PythonController,GetActuators);
-	KX_PYMETHOD(SCA_PythonController,SetScript);
-	KX_PYMETHOD(SCA_PythonController,GetScript);
-	KX_PYMETHOD(SCA_PythonController,GetState);
+	KX_PYMETHOD_DOC_NOARGS(SCA_PythonController,GetSensors);
+	KX_PYMETHOD_DOC_NOARGS(SCA_PythonController,GetActuators);
+	KX_PYMETHOD_DOC_O(SCA_PythonController,GetSensor);
+	KX_PYMETHOD_DOC_O(SCA_PythonController,GetActuator);
+	KX_PYMETHOD_O(SCA_PythonController,SetScript);
+	KX_PYMETHOD_NOARGS(SCA_PythonController,GetScript);
+	KX_PYMETHOD_NOARGS(SCA_PythonController,GetState);
 	
 
 };

Modified: trunk/blender/source/gameengine/Ketsji/KX_GameObject.cpp
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_GameObject.cpp	2008-07-03 20:16:24 UTC (rev 15419)
+++ trunk/blender/source/gameengine/Ketsji/KX_GameObject.cpp	2008-07-04 00:05:50 UTC (rev 15420)
@@ -648,7 +648,6 @@
 {
 	MT_Vector3 velocity(0.0,0.0,0.0), locvel;
 	MT_Matrix3x3 ori;
-	int i, j; 
 	if (m_pPhysicsController1)
 	{

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list