[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [19144] trunk/blender/source/gameengine: BGE API cleanup: apply patch from Moguri: Near, Radar, Touch sensor updated.

Benoit Bolsee benoit.bolsee at online.be
Sat Feb 28 22:00:34 CET 2009


Revision: 19144
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=19144
Author:   ben2610
Date:     2009-02-28 22:00:27 +0100 (Sat, 28 Feb 2009)

Log Message:
-----------
BGE API cleanup: apply patch from Moguri: Near, Radar, Touch sensor updated.

Modified Paths:
--------------
    trunk/blender/source/gameengine/Ketsji/KX_NearSensor.cpp
    trunk/blender/source/gameengine/Ketsji/KX_NearSensor.h
    trunk/blender/source/gameengine/Ketsji/KX_PythonInit.cpp
    trunk/blender/source/gameengine/Ketsji/KX_RadarSensor.cpp
    trunk/blender/source/gameengine/Ketsji/KX_RadarSensor.h
    trunk/blender/source/gameengine/Ketsji/KX_TouchSensor.cpp
    trunk/blender/source/gameengine/Ketsji/KX_TouchSensor.h
    trunk/blender/source/gameengine/PyDoc/GameLogic.py
    trunk/blender/source/gameengine/PyDoc/KX_NearSensor.py
    trunk/blender/source/gameengine/PyDoc/KX_RadarSensor.py
    trunk/blender/source/gameengine/PyDoc/KX_Scene.py
    trunk/blender/source/gameengine/PyDoc/KX_TouchSensor.py

Modified: trunk/blender/source/gameengine/Ketsji/KX_NearSensor.cpp
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_NearSensor.cpp	2009-02-28 15:28:18 UTC (rev 19143)
+++ trunk/blender/source/gameengine/Ketsji/KX_NearSensor.cpp	2009-02-28 21:00:27 UTC (rev 19144)
@@ -42,8 +42,8 @@
 #endif
 KX_NearSensor::KX_NearSensor(SCA_EventManager* eventmgr,
 							 KX_GameObject* gameobj,
-							 double margin,
-							 double resetmargin,
+							 float margin,
+							 float resetmargin,
 							 bool bFindMaterial,
 							 const STR_String& touchedpropname,
 							 class KX_Scene* scene,
@@ -276,8 +276,16 @@
 }
 
 
+/* ------------------------------------------------------------------------- */
+/* Python Functions															 */
+/* ------------------------------------------------------------------------- */
 
-// python embedding
+//No methods
+
+/* ------------------------------------------------------------------------- */
+/* Python Integration Hooks                                                  */
+/* ------------------------------------------------------------------------- */
+
 PyTypeObject KX_NearSensor::Type = {
 	PyObject_HEAD_INIT(&PyType_Type)
 	0,
@@ -311,20 +319,31 @@
 
 
 PyMethodDef KX_NearSensor::Methods[] = {
-	{"setProperty", (PyCFunction) KX_NearSensor::sPySetProperty,      METH_O, (PY_METHODCHAR)SetProperty_doc},
-	{"getProperty", (PyCFunction) KX_NearSensor::sPyGetProperty,      METH_NOARGS, (PY_METHODCHAR)GetProperty_doc},
-	{"getHitObject",(PyCFunction) KX_NearSensor::sPyGetHitObject,     METH_NOARGS, (PY_METHODCHAR)GetHitObject_doc},
-	{"getHitObjectList", (PyCFunction) KX_NearSensor::sPyGetHitObjectList, METH_NOARGS, (PY_METHODCHAR)GetHitObjectList_doc},
+	//No methods
 	{NULL,NULL} //Sentinel
 };
 
 PyAttributeDef KX_NearSensor::Attributes[] = {
-	{ NULL }	//Sentinel
+	KX_PYATTRIBUTE_FLOAT_RW_CHECK("distance", 0, 100, KX_NearSensor, m_Margin, CheckResetDistance),
+	KX_PYATTRIBUTE_FLOAT_RW_CHECK("resetDistance", 0, 100, KX_NearSensor, m_ResetMargin, CheckResetDistance),
+	{NULL} //Sentinel
 };
 
-PyObject*
-KX_NearSensor::_getattr(const char *attr)
+
+PyObject* KX_NearSensor::_getattr(const char *attr)
 {
-  _getattr_up(KX_TouchSensor);
+	PyObject* object = _getattr_self(Attributes, this, attr);
+	if (object != NULL)
+		return object;
+
+	_getattr_up(KX_TouchSensor);
 }
 
+int KX_NearSensor::_setattr(const char *attr, PyObject* value)
+{
+	int ret = _setattr_self(Attributes, this, attr, value);
+	if (ret >= 0)
+		return ret;
+
+	return KX_TouchSensor::_setattr(attr, value);
+}

Modified: trunk/blender/source/gameengine/Ketsji/KX_NearSensor.h
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_NearSensor.h	2009-02-28 15:28:18 UTC (rev 19143)
+++ trunk/blender/source/gameengine/Ketsji/KX_NearSensor.h	2009-02-28 21:00:27 UTC (rev 19144)
@@ -42,15 +42,15 @@
 {
 	Py_Header;
 protected:
-	double	m_Margin;
-	double  m_ResetMargin;
+	float	m_Margin;
+	float  m_ResetMargin;
 	KX_Scene*	m_scene;
 	KX_ClientObjectInfo*	m_client_info;
 public:
 	KX_NearSensor(class SCA_EventManager* eventmgr,
 			class KX_GameObject* gameobj,
-			double margin,
-			double resetmargin,
+			float margin,
+			float resetmargin,
 			bool bFindMaterial,
 			const STR_String& touchedpropname,
 			class KX_Scene* scene,
@@ -78,9 +78,26 @@
 	virtual bool	BroadPhaseFilterCollision(void*obj1,void*obj2);
 	virtual void RegisterSumo(KX_TouchEventManager *touchman);
 	virtual void UnregisterSumo(KX_TouchEventManager* touchman);
-	
+
+	/* --------------------------------------------------------------------- */
+	/* Python interface ---------------------------------------------------- */
+	/* --------------------------------------------------------------------- */
 	virtual PyObject* _getattr(const char *attr);
+	virtual int _setattr(const char *attr, PyObject* value);
 
+	//No methods
+
+	//This method is used to make sure the distance does not exceed the reset distance
+	static int CheckResetDistance(void *self, const PyAttributeDef*)
+	{
+		KX_NearSensor* sensor = reinterpret_cast<KX_NearSensor*>(self);
+
+		if (sensor->m_Margin > sensor->m_ResetMargin)
+			sensor->m_ResetMargin = sensor->m_Margin;
+
+		return 0;
+	}
+
 };
 
 #endif //KX_NEARSENSOR_H

Modified: trunk/blender/source/gameengine/Ketsji/KX_PythonInit.cpp
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_PythonInit.cpp	2009-02-28 15:28:18 UTC (rev 19143)
+++ trunk/blender/source/gameengine/Ketsji/KX_PythonInit.cpp	2009-02-28 21:00:27 UTC (rev 19144)
@@ -47,6 +47,7 @@
 #include "KX_PyConstraintBinding.h"
 
 #include "KX_KetsjiEngine.h"
+#include "KX_RadarSensor.h"
 
 #include "SCA_IInputDevice.h"
 #include "SCA_PropertySensor.h"
@@ -1060,6 +1061,14 @@
 	KX_MACRO_addTypesToDict(d, KX_STATE29, (1<<28));
 	KX_MACRO_addTypesToDict(d, KX_STATE30, (1<<29));
 
+	/* Radar Sensor */
+	KX_MACRO_addTypesToDict(d, KX_RADAR_AXIS_POS_X, KX_RadarSensor::KX_RADAR_AXIS_POS_X);
+	KX_MACRO_addTypesToDict(d, KX_RADAR_AXIS_POS_Y, KX_RadarSensor::KX_RADAR_AXIS_POS_Y);
+	KX_MACRO_addTypesToDict(d, KX_RADAR_AXIS_POS_Z, KX_RadarSensor::KX_RADAR_AXIS_POS_Z);
+	KX_MACRO_addTypesToDict(d, KX_RADAR_AXIS_NEG_X, KX_RadarSensor::KX_RADAR_AXIS_NEG_Y);
+	KX_MACRO_addTypesToDict(d, KX_RADAR_AXIS_NEG_Y, KX_RadarSensor::KX_RADAR_AXIS_NEG_X);
+	KX_MACRO_addTypesToDict(d, KX_RADAR_AXIS_NEG_Z, KX_RadarSensor::KX_RADAR_AXIS_NEG_Z);
+
 	// Check for errors
 	if (PyErr_Occurred())
     {

Modified: trunk/blender/source/gameengine/Ketsji/KX_RadarSensor.cpp
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_RadarSensor.cpp	2009-02-28 15:28:18 UTC (rev 19143)
+++ trunk/blender/source/gameengine/Ketsji/KX_RadarSensor.cpp	2009-02-28 21:00:27 UTC (rev 19144)
@@ -171,10 +171,20 @@
 		{
 		}
 	}
-	m_cone_origin = trans.getOrigin();
-	m_cone_target = trans(MT_Point3(0, -m_coneheight/2.0 ,0));
+	
+	//Using a temp variable to translate MT_Point3 to float[3].
+	//float[3] works better for the Python interface.
+	MT_Point3 temp = trans.getOrigin();
+	m_cone_origin[0] = temp[0];
+	m_cone_origin[1] = temp[1];
+	m_cone_origin[2] = temp[2];
 
+	temp = trans(MT_Point3(0, -m_coneheight/2.0 ,0));
+	m_cone_target[0] = temp[0];
+	m_cone_target[1] = temp[1];
+	m_cone_target[2] = temp[2];
 
+
 	if (m_physCtrl)
 	{
 		MT_Quaternion orn = trans.getRotation();
@@ -187,10 +197,58 @@
 }
 
 /* ------------------------------------------------------------------------- */
-/* Python functions                                                          */
+/* Python Functions															 */
 /* ------------------------------------------------------------------------- */
 
-/* Integration hooks ------------------------------------------------------- */
+//Deprecated ----->
+/* getConeOrigin */
+const char KX_RadarSensor::GetConeOrigin_doc[] = 
+"getConeOrigin()\n"
+"\tReturns the origin of the cone with which to test. The origin\n"
+"\tis in the middle of the cone.";
+PyObject* KX_RadarSensor::PyGetConeOrigin(PyObject* self) {
+	ShowDeprecationWarning("getConeOrigin()", "the coneOrigin property");
+
+	PyObject *retVal = PyList_New(3);
+	
+	PyList_SetItem(retVal, 0, PyFloat_FromDouble(m_cone_origin[0]));
+	PyList_SetItem(retVal, 1, PyFloat_FromDouble(m_cone_origin[1]));
+	PyList_SetItem(retVal, 2, PyFloat_FromDouble(m_cone_origin[2]));
+	
+	return retVal;
+}
+
+/* getConeOrigin */
+const char KX_RadarSensor::GetConeTarget_doc[] = 
+"getConeTarget()\n"
+"\tReturns the center of the bottom face of the cone with which to test.\n";
+PyObject* KX_RadarSensor::PyGetConeTarget(PyObject* self) {
+	ShowDeprecationWarning("getConeTarget()", "the coneTarget property");
+
+	PyObject *retVal = PyList_New(3);
+	
+	PyList_SetItem(retVal, 0, PyFloat_FromDouble(m_cone_target[0]));
+	PyList_SetItem(retVal, 1, PyFloat_FromDouble(m_cone_target[1]));
+	PyList_SetItem(retVal, 2, PyFloat_FromDouble(m_cone_target[2]));
+	
+	return retVal;
+}
+
+/* getConeHeight */
+const char KX_RadarSensor::GetConeHeight_doc[] = 
+"getConeHeight()\n"
+"\tReturns the height of the cone with which to test.\n";
+PyObject* KX_RadarSensor::PyGetConeHeight(PyObject* self) {
+											  
+	ShowDeprecationWarning("getConeHeight()", "the distance property");
+
+	return PyFloat_FromDouble(m_coneheight);
+}
+//<----- Deprecated
+
+/* ------------------------------------------------------------------------- */
+/* Python Integration Hooks                                                  */
+/* ------------------------------------------------------------------------- */
 PyTypeObject KX_RadarSensor::Type = {
 	PyObject_HEAD_INIT(&PyType_Type)
 	0,
@@ -221,46 +279,39 @@
 };
 
 PyMethodDef KX_RadarSensor::Methods[] = {
+	//Deprecated ----->
 	{"getConeOrigin", (PyCFunction) KX_RadarSensor::sPyGetConeOrigin, 
-	 METH_NOARGS, (PY_METHODCHAR)GetConeOrigin_doc},
+	 METH_VARARGS, (PY_METHODCHAR)GetConeOrigin_doc},
 	{"getConeTarget", (PyCFunction) KX_RadarSensor::sPyGetConeTarget, 
-	 METH_NOARGS, (PY_METHODCHAR)GetConeTarget_doc},
+	 METH_VARARGS, (PY_METHODCHAR)GetConeTarget_doc},
 	{"getConeHeight", (PyCFunction) KX_RadarSensor::sPyGetConeHeight, 
-	 METH_NOARGS, (PY_METHODCHAR)GetConeHeight_doc},
-	{NULL,NULL,NULL,NULL} //Sentinel
+	 METH_VARARGS, (PY_METHODCHAR)GetConeHeight_doc},
+	 //<-----
+	{NULL} //Sentinel
 };
 
 PyAttributeDef KX_RadarSensor::Attributes[] = {
-	{ NULL }	//Sentinel
+	KX_PYATTRIBUTE_FLOAT_ARRAY_RO("coneOrigin", KX_RadarSensor, m_cone_origin, 3),
+	KX_PYATTRIBUTE_FLOAT_ARRAY_RO("coneTarget", KX_RadarSensor, m_cone_target, 3),
+	KX_PYATTRIBUTE_FLOAT_RW("angle", 0, 360, KX_RadarSensor, m_coneradius),
+	KX_PYATTRIBUTE_INT_RW("axis", 0, 5, true, KX_RadarSensor, m_axis),
+	{NULL} //Sentinel
 };
 
-PyObject* KX_RadarSensor::_getattr(const char *attr) {
-	_getattr_up(KX_TouchSensor);
-}
+PyObject* KX_RadarSensor::_getattr(const char *attr)
+{
+	PyObject* object = _getattr_self(Attributes, this, attr);
+	if (object != NULL)
+		return object;
 
-/* getConeOrigin */
-const char KX_RadarSensor::GetConeOrigin_doc[] = 
-"getConeOrigin()\n"
-"\tReturns the origin of the cone with which to test. The origin\n"
-"\tis in the middle of the cone.";
-PyObject* KX_RadarSensor::PyGetConeOrigin(PyObject* self) {
-	return PyObjectFrom(m_cone_origin);
+	_getattr_up(KX_NearSensor);
 }
 
-/* getConeOrigin */
-const char KX_RadarSensor::GetConeTarget_doc[] = 

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list