[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [19483] trunk/blender/source/gameengine: BGE API cleanup: DynamicActuator, ReplaceMeshActuator, TrackToActuator.

Benoit Bolsee benoit.bolsee at online.be
Tue Mar 31 23:03:15 CEST 2009


Revision: 19483
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=19483
Author:   ben2610
Date:     2009-03-31 23:03:15 +0200 (Tue, 31 Mar 2009)

Log Message:
-----------
BGE API cleanup: DynamicActuator, ReplaceMeshActuator, TrackToActuator.

Modified Paths:
--------------
    trunk/blender/source/gameengine/Ketsji/KX_PythonInit.cpp
    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_ReplaceMeshActuator.cpp
    trunk/blender/source/gameengine/Ketsji/KX_SCA_ReplaceMeshActuator.h
    trunk/blender/source/gameengine/Ketsji/KX_TrackToActuator.cpp
    trunk/blender/source/gameengine/Ketsji/KX_TrackToActuator.h
    trunk/blender/source/gameengine/PyDoc/GameLogic.py
    trunk/blender/source/gameengine/PyDoc/KX_SCA_ReplaceMeshActuator.py
    trunk/blender/source/gameengine/PyDoc/KX_TrackToActuator.py

Added Paths:
-----------
    trunk/blender/source/gameengine/PyDoc/KX_SCA_DynamicActuator.py

Modified: trunk/blender/source/gameengine/Ketsji/KX_PythonInit.cpp
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_PythonInit.cpp	2009-03-31 19:39:17 UTC (rev 19482)
+++ trunk/blender/source/gameengine/Ketsji/KX_PythonInit.cpp	2009-03-31 21:03:15 UTC (rev 19483)
@@ -49,6 +49,7 @@
 #include "KX_KetsjiEngine.h"
 #include "KX_RadarSensor.h"
 #include "KX_RaySensor.h"
+#include "KX_SCA_DynamicActuator.h"
 
 #include "SCA_IInputDevice.h"
 #include "SCA_PropertySensor.h"
@@ -1079,6 +1080,13 @@
 	KX_MACRO_addTypesToDict(d, KX_RAY_AXIS_NEG_Y, KX_RaySensor::KX_RAY_AXIS_NEG_X);
 	KX_MACRO_addTypesToDict(d, KX_RAY_AXIS_NEG_Z, KX_RaySensor::KX_RAY_AXIS_NEG_Z);
 
+	/* Dynamic actuator */
+	KX_MACRO_addTypesToDict(d, KX_DYN_RESTORE_DYNAMICS, KX_SCA_DynamicActuator::KX_DYN_RESTORE_DYNAMICS);
+	KX_MACRO_addTypesToDict(d, KX_DYN_DISABLE_DYNAMICS, KX_SCA_DynamicActuator::KX_DYN_DISABLE_DYNAMICS);
+	KX_MACRO_addTypesToDict(d, KX_DYN_ENABLE_RIGID_BODY, KX_SCA_DynamicActuator::KX_DYN_ENABLE_RIGID_BODY);
+	KX_MACRO_addTypesToDict(d, KX_DYN_DISABLE_RIGID_BODY, KX_SCA_DynamicActuator::KX_DYN_DISABLE_RIGID_BODY);
+	KX_MACRO_addTypesToDict(d, KX_DYN_SET_MASS, KX_SCA_DynamicActuator::KX_DYN_SET_MASS);
+
 	// Check for errors
 	if (PyErr_Occurred())
     {

Modified: trunk/blender/source/gameengine/Ketsji/KX_SCA_DynamicActuator.cpp
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_SCA_DynamicActuator.cpp	2009-03-31 19:39:17 UTC (rev 19482)
+++ trunk/blender/source/gameengine/Ketsji/KX_SCA_DynamicActuator.cpp	2009-03-31 21:03:15 UTC (rev 19483)
@@ -36,6 +36,7 @@
 // Please look here for revision history.
 
 #include "KX_SCA_DynamicActuator.h"
+#include "blendef.h"
 
 #ifdef HAVE_CONFIG_H
 #include <config.h>
@@ -80,21 +81,34 @@
 
 
 PyMethodDef KX_SCA_DynamicActuator::Methods[] = {
+	// ---> deprecated
 	KX_PYMETHODTABLE(KX_SCA_DynamicActuator, setOperation),
    	KX_PYMETHODTABLE(KX_SCA_DynamicActuator, getOperation),
 	{NULL,NULL} //Sentinel
 };
 
 PyAttributeDef KX_SCA_DynamicActuator::Attributes[] = {
+	KX_PYATTRIBUTE_SHORT_RW("operation",0,4,false,KX_SCA_DynamicActuator,m_dyn_operation),
+	KX_PYATTRIBUTE_FLOAT_RW("mass",0.0,MAXFLOAT,KX_SCA_DynamicActuator,m_setmass),
 	{ NULL }	//Sentinel
 };
 
 
 PyObject* KX_SCA_DynamicActuator::_getattr(const char *attr)
 {
-  _getattr_up(SCA_IActuator);
+	PyObject* object = _getattr_self(Attributes, this, attr);
+	if (object != NULL)
+		return object;
+	_getattr_up(SCA_IActuator);
 }
 
+int KX_SCA_DynamicActuator::_setattr(const char *attr, PyObject* value)
+{
+	int ret = _setattr_self(Attributes, this, attr, value);
+	if (ret >= 0)
+		return ret;
+	return SCA_IActuator::_setattr(attr, value);
+}
 
 
 /* 1. setOperation */
@@ -107,6 +121,7 @@
 "\t                3 = disable rigid body\n"
 "Change the dynamic status of the parent object.\n")
 {
+	ShowDeprecationWarning("setOperation()", "the operation property");
 	int dyn_operation;
 	
 	if (!PyArg_ParseTuple(args, "i", &dyn_operation))
@@ -126,6 +141,7 @@
 "Returns the operation type of this actuator.\n"
 )
 {
+	ShowDeprecationWarning("getOperation()", "the operation property");
 	return PyInt_FromLong((long)m_dyn_operation);
 }
 

Modified: trunk/blender/source/gameengine/Ketsji/KX_SCA_DynamicActuator.h
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_SCA_DynamicActuator.h	2009-03-31 19:39:17 UTC (rev 19482)
+++ trunk/blender/source/gameengine/Ketsji/KX_SCA_DynamicActuator.h	2009-03-31 21:03:15 UTC (rev 19483)
@@ -64,7 +64,18 @@
 	virtual bool 
 	Update();
 
+	//Python Interface
+	enum DynamicOperation {
+		KX_DYN_RESTORE_DYNAMICS = 0,
+		KX_DYN_DISABLE_DYNAMICS,
+		KX_DYN_ENABLE_RIGID_BODY,
+		KX_DYN_DISABLE_RIGID_BODY,
+		KX_DYN_SET_MASS,
+	};
+
+
 	virtual PyObject* _getattr(const char *attr);
+	virtual int _setattr(const char *attr, PyObject *value);
 
 	/* 1. setOperation */
 	KX_PYMETHOD_DOC(KX_SCA_DynamicActuator,setOperation);

Modified: trunk/blender/source/gameengine/Ketsji/KX_SCA_ReplaceMeshActuator.cpp
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_SCA_ReplaceMeshActuator.cpp	2009-03-31 19:39:17 UTC (rev 19482)
+++ trunk/blender/source/gameengine/Ketsji/KX_SCA_ReplaceMeshActuator.cpp	2009-03-31 21:03:15 UTC (rev 19483)
@@ -82,24 +82,63 @@
 
 
 PyMethodDef KX_SCA_ReplaceMeshActuator::Methods[] = {
+	KX_PYMETHODTABLE(KX_SCA_ReplaceMeshActuator, instantReplaceMesh),
+	// Deprecated ----->
 	{"setMesh", (PyCFunction) KX_SCA_ReplaceMeshActuator::sPySetMesh, METH_O, (PY_METHODCHAR)SetMesh_doc},
-	
-	KX_PYMETHODTABLE(KX_SCA_ReplaceMeshActuator, instantReplaceMesh),
    	KX_PYMETHODTABLE(KX_SCA_ReplaceMeshActuator, getMesh),
 	{NULL,NULL} //Sentinel
 };
 
 PyAttributeDef KX_SCA_ReplaceMeshActuator::Attributes[] = {
+	KX_PYATTRIBUTE_RW_FUNCTION("mesh", KX_SCA_ReplaceMeshActuator, pyattr_get_mesh, pyattr_set_mesh),
 	{ NULL }	//Sentinel
 };
 
 PyObject* KX_SCA_ReplaceMeshActuator::_getattr(const char *attr)
 {
-  _getattr_up(SCA_IActuator);
+	PyObject* object = _getattr_self(Attributes, this, attr);
+	if (object != NULL)
+		return object;
+	_getattr_up(SCA_IActuator);
 }
 
+int KX_SCA_ReplaceMeshActuator::_setattr(const char *attr, PyObject* value) 
+{
+	int ret = _setattr_self(Attributes, this, attr, value);
+	if (ret >= 0)
+		return ret;
+	return SCA_IActuator::_setattr(attr, value);
+}
 
+PyObject* KX_SCA_ReplaceMeshActuator::pyattr_get_mesh(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef)
+{
+	KX_SCA_ReplaceMeshActuator* actuator = static_cast<KX_SCA_ReplaceMeshActuator*>(self);
+	if (!actuator->m_mesh)
+		Py_RETURN_NONE;
+	return PyString_FromString(const_cast<char *>(actuator->m_mesh->GetName().ReadPtr()));
+}
 
+int KX_SCA_ReplaceMeshActuator::pyattr_set_mesh(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value)
+{
+	KX_SCA_ReplaceMeshActuator* actuator = static_cast<KX_SCA_ReplaceMeshActuator*>(self);
+	if (value == Py_None) {
+		actuator->m_mesh = NULL;
+	} else {
+		char* meshname = PyString_AsString(value);
+		if (!meshname) {
+			PyErr_SetString(PyExc_ValueError, "Expected the name of a mesh or None");
+			return 1;
+		}
+		void* mesh = SCA_ILogicBrick::m_sCurrentLogicManager->GetMeshByName(STR_String(meshname));
+		if (mesh==NULL) {
+			PyErr_SetString(PyExc_ValueError, "The mesh name given does not exist");
+			return 1;
+		}
+		actuator->m_mesh= (class RAS_MeshObject*)mesh;
+	}
+	return 0;
+}
+
 /* 1. setMesh */
 const char KX_SCA_ReplaceMeshActuator::SetMesh_doc[] = 
 	"setMesh(name)\n"
@@ -108,6 +147,7 @@
 
 PyObject* KX_SCA_ReplaceMeshActuator::PySetMesh(PyObject* self, PyObject* value)
 {
+	ShowDeprecationWarning("setMesh()", "the mesh property");
 	if (value == Py_None) {
 		m_mesh = NULL;
 	} else {
@@ -133,6 +173,7 @@
 "Returns the name of the mesh to be substituted.\n"
 )
 {
+	ShowDeprecationWarning("getMesh()", "the mesh property");
 	if (!m_mesh)
 		Py_RETURN_NONE;
 

Modified: trunk/blender/source/gameengine/Ketsji/KX_SCA_ReplaceMeshActuator.h
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_SCA_ReplaceMeshActuator.h	2009-03-31 19:39:17 UTC (rev 19482)
+++ trunk/blender/source/gameengine/Ketsji/KX_SCA_ReplaceMeshActuator.h	2009-03-31 21:03:15 UTC (rev 19483)
@@ -69,9 +69,14 @@
 	virtual bool 
 	Update();
 
-	virtual PyObject* _getattr(const char *attr);
 	void	InstantReplaceMesh();
 
+	virtual PyObject* _getattr(const char *attr);
+	virtual int _setattr(const char *attr, PyObject* value);
+
+	static PyObject* pyattr_get_mesh(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef);
+	static int pyattr_set_mesh(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
+
 	/* 1. setMesh */
 	KX_PYMETHOD_DOC_O(KX_SCA_ReplaceMeshActuator,SetMesh);
 	KX_PYMETHOD_DOC(KX_SCA_ReplaceMeshActuator,getMesh);

Modified: trunk/blender/source/gameengine/Ketsji/KX_TrackToActuator.cpp
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_TrackToActuator.cpp	2009-03-31 19:39:17 UTC (rev 19482)
+++ trunk/blender/source/gameengine/Ketsji/KX_TrackToActuator.cpp	2009-03-31 21:03:15 UTC (rev 19483)
@@ -402,7 +402,7 @@
 			// set the models tranformation properties
 			curobj->NodeSetLocalOrientation(mat);
 			curobj->NodeSetLocalPosition(localpos);
-			curobj->UpdateTransform();
+			//curobj->UpdateTransform();
 		}
 		else
 		{
@@ -456,12 +456,11 @@
 
 
 PyMethodDef KX_TrackToActuator::Methods[] = {
+	// ---> deprecated
 	{"setTime", (PyCFunction) KX_TrackToActuator::sPySetTime, METH_VARARGS, (PY_METHODCHAR)SetTime_doc},
 	{"getTime", (PyCFunction) KX_TrackToActuator::sPyGetTime, METH_VARARGS, (PY_METHODCHAR)GetTime_doc},
 	{"setUse3D", (PyCFunction) KX_TrackToActuator::sPySetUse3D, METH_VARARGS, (PY_METHODCHAR)SetUse3D_doc},
 	{"getUse3D", (PyCFunction) KX_TrackToActuator::sPyGetUse3D, METH_VARARGS, (PY_METHODCHAR)GetUse3D_doc},
-	
-	// ---> deprecated
 	{"setObject", (PyCFunction) KX_TrackToActuator::sPySetObject, METH_O, (PY_METHODCHAR)SetObject_doc},
 	{"getObject", (PyCFunction) KX_TrackToActuator::sPyGetObject, METH_VARARGS, (PY_METHODCHAR)GetObject_doc},
 	
@@ -469,39 +468,55 @@
 };
 
 PyAttributeDef KX_TrackToActuator::Attributes[] = {
+	KX_PYATTRIBUTE_INT_RW("time",0,1000,true,KX_TrackToActuator,m_time),
+	KX_PYATTRIBUTE_BOOL_RW("user3D",KX_TrackToActuator,m_allow3D),
+	KX_PYATTRIBUTE_RW_FUNCTION("object", KX_TrackToActuator, pyattr_get_object, pyattr_set_object),
+
 	{ NULL }	//Sentinel
 };
 
-
-PyObject* KX_TrackToActuator::_getattr(const char *attr)
+PyObject* KX_TrackToActuator::pyattr_get_object(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef)
 {
-	if (!strcmp(attr, "object")) {
-		if (!m_object)		Py_RETURN_NONE;
-		else				return m_object->AddRef();
-	}
-	
-	_getattr_up(SCA_IActuator);
+	KX_TrackToActuator* actuator = static_cast<KX_TrackToActuator*>(self);
+	if (!actuator->m_object)	
+		Py_RETURN_NONE;
+	else
+		return actuator->m_object->AddRef();
 }
 
-int KX_TrackToActuator::_setattr(const char *attr, PyObject* value)
+int KX_TrackToActuator::pyattr_set_object(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value)
 {
-	if (!strcmp(attr, "object")) {
-		KX_GameObject *gameobj;
+	KX_TrackToActuator* actuator = static_cast<KX_TrackToActuator*>(self);
+	KX_GameObject *gameobj;
 		

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list