diff options
author | Nick Samarin <nicks1987@bigmir.net> | 2010-07-15 22:41:29 +0400 |
---|---|---|
committer | Nick Samarin <nicks1987@bigmir.net> | 2010-07-15 22:41:29 +0400 |
commit | 0fbca1dc19afaa034377d5aeed10fa8c25e2a102 (patch) | |
tree | 0cdfcd270bba96ae536f4b91c56da7e73c2d56d7 /source/gameengine/Ketsji/KX_NavMeshObject.cpp | |
parent | 219e9022b9a2718abbe9bbd61514fcc1b8fa9b73 (diff) |
- added options to enable visualization for obstacle simulation and steering actuator
- added python attributes for parameters of steering actuator
Diffstat (limited to 'source/gameengine/Ketsji/KX_NavMeshObject.cpp')
-rw-r--r-- | source/gameengine/Ketsji/KX_NavMeshObject.cpp | 48 |
1 files changed, 37 insertions, 11 deletions
diff --git a/source/gameengine/Ketsji/KX_NavMeshObject.cpp b/source/gameengine/Ketsji/KX_NavMeshObject.cpp index b4e2c753832..63d84d0c028 100644 --- a/source/gameengine/Ketsji/KX_NavMeshObject.cpp +++ b/source/gameengine/Ketsji/KX_NavMeshObject.cpp @@ -446,6 +446,13 @@ bool KX_NavMeshObject::BuildVertIndArrays(RAS_MeshObject* meshobj, float *&verti bool KX_NavMeshObject::BuildNavMesh() { + if (m_navMesh) + { + delete m_navMesh; + m_navMesh = NULL; + } + + if (GetMeshCount()==0) return false; @@ -628,25 +635,23 @@ dtStatNavMesh* KX_NavMeshObject::GetNavMesh() return m_navMesh; } -void KX_NavMeshObject::DrawNavMesh() +void KX_NavMeshObject::DrawNavMesh(NavMeshRenderMode renderMode) { if (!m_navMesh) return; MT_Vector3 color(0.f, 0.f, 0.f); - enum RenderMode {POLYS ,DETAILED_TRIS, WALLS}; - static const RenderMode renderMode = DETAILED_TRIS;// DETAILED_TRIS POLYS switch (renderMode) { - case POLYS : - case WALLS : + case RM_POLYS : + case RM_WALLS : for (int pi=0; pi<m_navMesh->getPolyCount(); pi++) { const dtStatPoly* poly = m_navMesh->getPoly(pi); for (int i = 0, j = (int)poly->nv-1; i < (int)poly->nv; j = i++) { - if (poly->n[j] && renderMode==WALLS) + if (poly->n[j] && renderMode==RM_WALLS) continue; const float* vif = m_navMesh->getVertex(poly->v[i]); const float* vjf = m_navMesh->getVertex(poly->v[j]); @@ -658,7 +663,7 @@ void KX_NavMeshObject::DrawNavMesh() } } break; - case DETAILED_TRIS : + case RM_TRIS : for (int i = 0; i < m_navMesh->getPolyDetailCount(); ++i) { const dtStatPoly* p = m_navMesh->getPoly(i); @@ -800,7 +805,7 @@ PyTypeObject KX_NavMeshObject::Type = { Methods, 0, 0, - &CValue::Type, + &KX_GameObject::Type, 0,0,0,0,0,0, py_base_new }; @@ -814,6 +819,7 @@ PyMethodDef KX_NavMeshObject::Methods[] = { KX_PYMETHODTABLE(KX_NavMeshObject, findPath), KX_PYMETHODTABLE(KX_NavMeshObject, raycast), KX_PYMETHODTABLE(KX_NavMeshObject, draw), + KX_PYMETHODTABLE(KX_NavMeshObject, rebuild), {NULL,NULL} //Sentinel }; @@ -854,10 +860,30 @@ KX_PYMETHODDEF_DOC(KX_NavMeshObject, raycast, return PyFloat_FromDouble(hit); } -KX_PYMETHODDEF_DOC_NOARGS(KX_NavMeshObject, draw, - "draw(): navigation mesh debug drawing\n") +KX_PYMETHODDEF_DOC(KX_NavMeshObject, draw, + "draw(mode): navigation mesh debug drawing\n" + "mode: WALLS, POLYS, TRIS\n") { - DrawNavMesh(); + char* mode; + 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; + } + DrawNavMesh(renderMode); + Py_RETURN_NONE; +} + +KX_PYMETHODDEF_DOC_NOARGS(KX_NavMeshObject, rebuild, + "rebuild(): rebuild navigation mesh\n") +{ + BuildNavMesh(); Py_RETURN_NONE; } |