From e8d129cc76bf4f1d47085232dc729aaeba0e4d3a Mon Sep 17 00:00:00 2001 From: Nick Samarin Date: Wed, 21 Jul 2010 09:16:27 +0000 Subject: [PATCH] - 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 --- source/blender/makesrna/intern/rna_actuator.c | 13 +++++++++++++ source/gameengine/Ketsji/KX_NavMeshObject.cpp | 14 +++----------- source/gameengine/Ketsji/KX_NavMeshObject.h | 2 +- source/gameengine/Ketsji/KX_PythonInit.cpp | 13 +++++++++++++ source/gameengine/Ketsji/KX_PythonInitTypes.cpp | 2 ++ source/gameengine/Ketsji/KX_SteeringActuator.cpp | 10 ++++++++-- 6 files changed, 40 insertions(+), 14 deletions(-) diff --git a/source/blender/makesrna/intern/rna_actuator.c b/source/blender/makesrna/intern/rna_actuator.c index fdd017873e7..99d85ec557c 100644 --- a/source/blender/makesrna/intern/rna_actuator.c +++ b/source/blender/makesrna/intern/rna_actuator.c @@ -441,6 +441,18 @@ static void rna_Actuator_Armature_update(Main *bmain, Scene *scene, PointerRNA * 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 @@ static void rna_def_steering_actuator(BlenderRNA *brna) 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); } diff --git a/source/gameengine/Ketsji/KX_NavMeshObject.cpp b/source/gameengine/Ketsji/KX_NavMeshObject.cpp index 617d556785a..19e045a2745 100644 --- a/source/gameengine/Ketsji/KX_NavMeshObject.cpp +++ b/source/gameengine/Ketsji/KX_NavMeshObject.cpp @@ -856,18 +856,10 @@ KX_PYMETHODDEF_DOC(KX_NavMeshObject, draw, "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 && argm_navmesh != NULL) actuator->m_navmesh->UnregisterActuator(actuator); - actuator->m_navmesh = dynamic_cast(gameobj); + actuator->m_navmesh = static_cast(gameobj); if (actuator->m_navmesh) actuator->m_navmesh->RegisterActuator(actuator);