Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Samarin <nicks1987@bigmir.net>2010-07-15 22:41:29 +0400
committerNick Samarin <nicks1987@bigmir.net>2010-07-15 22:41:29 +0400
commit0fbca1dc19afaa034377d5aeed10fa8c25e2a102 (patch)
tree0cdfcd270bba96ae536f4b91c56da7e73c2d56d7 /source/gameengine/Ketsji/KX_NavMeshObject.cpp
parent219e9022b9a2718abbe9bbd61514fcc1b8fa9b73 (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.cpp48
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;
}