[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [30570] branches/soc-2010-nicks/source: - added custom get function for navmesh property of steering actuator to accept only objects with NavMesh physics type

Nick Samarin nicks1987 at bigmir.net
Wed Jul 21 11:16:28 CEST 2010


Revision: 30570
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=30570
Author:   nicks
Date:     2010-07-21 11:16:27 +0200 (Wed, 21 Jul 2010)

Log Message:
-----------
- added custom get function for navmesh property of steering actuator to accept only objects with NavMesh physics type
- fixed the access to KX_SteeringActuator attributes from scripts
- added enum members for KX_SteeringActuator and KX_NavMeshObject to GameLogic dictionary

Modified Paths:
--------------
    branches/soc-2010-nicks/source/blender/makesrna/intern/rna_actuator.c
    branches/soc-2010-nicks/source/gameengine/Ketsji/KX_NavMeshObject.cpp
    branches/soc-2010-nicks/source/gameengine/Ketsji/KX_NavMeshObject.h
    branches/soc-2010-nicks/source/gameengine/Ketsji/KX_PythonInit.cpp
    branches/soc-2010-nicks/source/gameengine/Ketsji/KX_PythonInitTypes.cpp
    branches/soc-2010-nicks/source/gameengine/Ketsji/KX_SteeringActuator.cpp

Modified: branches/soc-2010-nicks/source/blender/makesrna/intern/rna_actuator.c
===================================================================
--- branches/soc-2010-nicks/source/blender/makesrna/intern/rna_actuator.c	2010-07-21 08:23:57 UTC (rev 30569)
+++ branches/soc-2010-nicks/source/blender/makesrna/intern/rna_actuator.c	2010-07-21 09:16:27 UTC (rev 30570)
@@ -441,6 +441,18 @@
 	constraint[0] = 0;
 }
 
+static void rna_SteeringActuator_navmesh_set(PointerRNA *ptr, PointerRNA value)
+{
+	bActuator *act = (bActuator*)ptr->data;
+	bSteeringActuator *sa = (bSteeringActuator*) act->data;
+
+	Object* obj = value.data;
+	if (obj && obj->body_type==OB_BODY_TYPE_NAVMESH)
+		sa->navmesh = obj;
+	else
+		sa->navmesh = NULL;
+}
+
 /* note: the following set functions exists only to avoid id refcounting */
 static void rna_Actuator_editobject_mesh_set(PointerRNA *ptr, PointerRNA value)
 {
@@ -1942,6 +1954,7 @@
 	RNA_def_property_pointer_sdna(prop, NULL, "navmesh");
 	RNA_def_property_flag(prop, PROP_EDITABLE);
 	RNA_def_property_ui_text(prop, "NavMesh Object", "Navigation mesh");
+	RNA_def_property_pointer_funcs(prop, NULL, "rna_SteeringActuator_navmesh_set", NULL);
 	RNA_def_property_update(prop, NC_LOGIC, NULL);
 }
 

Modified: branches/soc-2010-nicks/source/gameengine/Ketsji/KX_NavMeshObject.cpp
===================================================================
--- branches/soc-2010-nicks/source/gameengine/Ketsji/KX_NavMeshObject.cpp	2010-07-21 08:23:57 UTC (rev 30569)
+++ branches/soc-2010-nicks/source/gameengine/Ketsji/KX_NavMeshObject.cpp	2010-07-21 09:16:27 UTC (rev 30570)
@@ -856,18 +856,10 @@
 				   "draw(mode): navigation mesh debug drawing\n"
 				   "mode: WALLS, POLYS, TRIS\n")
 {
-	char* mode;
+	int arg;
 	NavMeshRenderMode renderMode = RM_TRIS;
-	if (PyArg_ParseTuple(args,"s:rebuild",&mode))
-	{
-		STR_String mode_str(mode);
-		if (mode_str.IsEqualNoCase("WALLS"))
-			renderMode = RM_WALLS;
-		else if (mode_str.IsEqualNoCase("POLYS"))
-			renderMode = RM_POLYS;
-		else if (mode_str.IsEqualNoCase("TRIS"))
-			renderMode = RM_TRIS;
-	}
+	if (PyArg_ParseTuple(args,"i:rebuild",&arg) && arg>=0 && arg<RM_MAX)
+		renderMode = (NavMeshRenderMode)arg;
 	DrawNavMesh(renderMode);
 	Py_RETURN_NONE;
 }

Modified: branches/soc-2010-nicks/source/gameengine/Ketsji/KX_NavMeshObject.h
===================================================================
--- branches/soc-2010-nicks/source/gameengine/Ketsji/KX_NavMeshObject.h	2010-07-21 08:23:57 UTC (rev 30569)
+++ branches/soc-2010-nicks/source/gameengine/Ketsji/KX_NavMeshObject.h	2010-07-21 09:16:27 UTC (rev 30570)
@@ -61,7 +61,7 @@
 	int FindPath(const MT_Point3& from, const MT_Point3& to, float* path, int maxPathLen);
 	float Raycast(const MT_Point3& from, const MT_Point3& to);
 
-	enum NavMeshRenderMode {RM_WALLS, RM_POLYS, RM_TRIS};
+	enum NavMeshRenderMode {RM_WALLS, RM_POLYS, RM_TRIS, RM_MAX};
 	void DrawNavMesh(NavMeshRenderMode mode);
 	void DrawPath(const float *path, int pathLen, const MT_Vector3& color);
 

Modified: branches/soc-2010-nicks/source/gameengine/Ketsji/KX_PythonInit.cpp
===================================================================
--- branches/soc-2010-nicks/source/gameengine/Ketsji/KX_PythonInit.cpp	2010-07-21 08:23:57 UTC (rev 30569)
+++ branches/soc-2010-nicks/source/gameengine/Ketsji/KX_PythonInit.cpp	2010-07-21 09:16:27 UTC (rev 30570)
@@ -69,6 +69,8 @@
 #include "KX_GameActuator.h"
 #include "KX_ParentActuator.h"
 #include "KX_SCA_DynamicActuator.h"
+#include "KX_SteeringActuator.h"
+#include "KX_NavMeshObject.h"
 
 #include "SCA_IInputDevice.h"
 #include "SCA_PropertySensor.h"
@@ -1586,6 +1588,17 @@
 	KX_MACRO_addTypesToDict(d, ROT_MODE_ZXY, ROT_MODE_ZXY);
 	KX_MACRO_addTypesToDict(d, ROT_MODE_ZYX, ROT_MODE_ZYX);
 
+	/* Steering actuator */
+	KX_MACRO_addTypesToDict(d, KX_STEERING_SEEK, KX_SteeringActuator::KX_STEERING_SEEK);
+	KX_MACRO_addTypesToDict(d, KX_STEERING_FLEE, KX_SteeringActuator::KX_STEERING_FLEE);
+	KX_MACRO_addTypesToDict(d, KX_STEERING_PATHFOLLOWING, KX_SteeringActuator::KX_STEERING_PATHFOLLOWING);
+
+	/* KX_NavMeshObject render mode */
+	KX_MACRO_addTypesToDict(d, RM_WALLS, KX_NavMeshObject::RM_WALLS);
+	KX_MACRO_addTypesToDict(d, RM_POLYS, KX_NavMeshObject::RM_POLYS);
+	KX_MACRO_addTypesToDict(d, RM_TRIS, KX_NavMeshObject::RM_TRIS);
+	
+
 	// Check for errors
 	if (PyErr_Occurred())
     {

Modified: branches/soc-2010-nicks/source/gameengine/Ketsji/KX_PythonInitTypes.cpp
===================================================================
--- branches/soc-2010-nicks/source/gameengine/Ketsji/KX_PythonInitTypes.cpp	2010-07-21 08:23:57 UTC (rev 30569)
+++ branches/soc-2010-nicks/source/gameengine/Ketsji/KX_PythonInitTypes.cpp	2010-07-21 09:16:27 UTC (rev 30570)
@@ -62,6 +62,7 @@
 #include "KX_SCA_ReplaceMeshActuator.h"
 #include "KX_SceneActuator.h"
 #include "KX_StateActuator.h"
+#include "KX_SteeringActuator.h"
 #include "KX_TrackToActuator.h"
 #include "KX_VehicleWrapper.h"
 #include "KX_VertexProxy.h"
@@ -215,6 +216,7 @@
 		PyType_Ready_Attr(dict, KX_SceneActuator, init_getset);
 		PyType_Ready_Attr(dict, KX_SoundActuator, init_getset);
 		PyType_Ready_Attr(dict, KX_StateActuator, init_getset);
+		PyType_Ready_Attr(dict, KX_SteeringActuator, init_getset);
 		PyType_Ready_Attr(dict, KX_TouchSensor, init_getset);
 		PyType_Ready_Attr(dict, KX_TrackToActuator, init_getset);
 		PyType_Ready_Attr(dict, KX_VehicleWrapper, init_getset);

Modified: branches/soc-2010-nicks/source/gameengine/Ketsji/KX_SteeringActuator.cpp
===================================================================
--- branches/soc-2010-nicks/source/gameengine/Ketsji/KX_SteeringActuator.cpp	2010-07-21 08:23:57 UTC (rev 30569)
+++ branches/soc-2010-nicks/source/gameengine/Ketsji/KX_SteeringActuator.cpp	2010-07-21 09:16:27 UTC (rev 30570)
@@ -318,7 +318,7 @@
 };
 
 PyAttributeDef KX_SteeringActuator::Attributes[] = {
-	KX_PYATTRIBUTE_INT_RW("bevaiour", KX_STEERING_NODEF+1, KX_STEERING_MAX-1, true, KX_SteeringActuator, m_mode),
+	KX_PYATTRIBUTE_INT_RW("behaviour", KX_STEERING_NODEF+1, KX_STEERING_MAX-1, true, KX_SteeringActuator, m_mode),
 	KX_PYATTRIBUTE_RW_FUNCTION("target", KX_SteeringActuator, pyattr_get_target, pyattr_set_target),
 	KX_PYATTRIBUTE_RW_FUNCTION("navmesh", KX_SteeringActuator, pyattr_get_navmesh, pyattr_set_navmesh),
 	KX_PYATTRIBUTE_FLOAT_RW("distance", 0.0f, 1000.0f, KX_SteeringActuator, m_distance),
@@ -376,10 +376,16 @@
 	if (!ConvertPythonToGameObject(value, &gameobj, true, "actuator.object = value: KX_SteeringActuator"))
 		return PY_SET_ATTR_FAIL; // ConvertPythonToGameObject sets the error
 
+	if (!PyObject_TypeCheck(value, &KX_NavMeshObject::Type))
+	{
+		PyErr_Format(PyExc_TypeError, "KX_NavMeshObject is expected");
+		return PY_SET_ATTR_FAIL;
+	}
+
 	if (actuator->m_navmesh != NULL)
 		actuator->m_navmesh->UnregisterActuator(actuator);	
 
-	actuator->m_navmesh = dynamic_cast<KX_NavMeshObject*>(gameobj);
+	actuator->m_navmesh = static_cast<KX_NavMeshObject*>(gameobj);
 
 	if (actuator->m_navmesh)
 		actuator->m_navmesh->RegisterActuator(actuator);





More information about the Bf-blender-cvs mailing list