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-06-19 03:48:52 +0400
committerNick Samarin <nicks1987@bigmir.net>2010-06-19 03:48:52 +0400
commitc92d0dfdf6b6a03726612f426e1f0e506a899f42 (patch)
tree8780c579fc9d763f1079267427906de32a785419 /source/gameengine/Ketsji/KX_NavMeshObject.cpp
parent700c32e73833205830b062a13270e4a45668cad0 (diff)
Added:
- obstacle culling for correct simulation in 3d - flag for steering actuator termination on reaching target - path recalculation period - advance by waypoints (for path following)
Diffstat (limited to 'source/gameengine/Ketsji/KX_NavMeshObject.cpp')
-rw-r--r--source/gameengine/Ketsji/KX_NavMeshObject.cpp63
1 files changed, 42 insertions, 21 deletions
diff --git a/source/gameengine/Ketsji/KX_NavMeshObject.cpp b/source/gameengine/Ketsji/KX_NavMeshObject.cpp
index 6c2301b6d8c..2c423558768 100644
--- a/source/gameengine/Ketsji/KX_NavMeshObject.cpp
+++ b/source/gameengine/Ketsji/KX_NavMeshObject.cpp
@@ -333,32 +333,53 @@ void KX_NavMeshObject::DrawNavMesh()
if (!m_navMesh)
return;
MT_Vector3 color(0.f, 0.f, 0.f);
-
- for (int i = 0; i < m_navMesh->getPolyDetailCount(); ++i)
+
+ enum RenderMode {DETAILED_TRIS, WALLS};
+ static const RenderMode renderMode = DETAILED_TRIS;
+ switch (renderMode)
{
- const dtStatPoly* p = m_navMesh->getPoly(i);
- const dtStatPolyDetail* pd = m_navMesh->getPolyDetail(i);
-
- for (int j = 0; j < pd->ntris; ++j)
+ case WALLS :
+ for (int pi=0; pi<m_navMesh->getPolyCount(); pi++)
{
- const unsigned char* t = m_navMesh->getDetailTri(pd->tbase+j);
- MT_Vector3 tri[3];
- for (int k = 0; k < 3; ++k)
- {
- const float* v;
- if (t[k] < p->nv)
- v = m_navMesh->getVertex(p->v[t[k]]);
- else
- v = m_navMesh->getDetailVertex(pd->vbase+(t[k]-p->nv));
- float pos[3];
- vcopy(pos, v);
- flipAxes(pos);
- tri[k].setValue(pos);
+ 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]) continue;
+ const float* vj = m_navMesh->getVertex(poly->v[j]);
+ const float* vi = m_navMesh->getVertex(poly->v[i]);
+ KX_RasterizerDrawDebugLine(MT_Vector3(vj[0], vj[2], vj[1]), MT_Vector3(vi[0], vi[2], vi[1]), color);
}
+ }
+ break;
+ case DETAILED_TRIS :
+ for (int i = 0; i < m_navMesh->getPolyDetailCount(); ++i)
+ {
+ const dtStatPoly* p = m_navMesh->getPoly(i);
+ const dtStatPolyDetail* pd = m_navMesh->getPolyDetail(i);
- for (int k=0; k<3; k++)
- KX_RasterizerDrawDebugLine(tri[k], tri[(k+1)%3], color);
+ for (int j = 0; j < pd->ntris; ++j)
+ {
+ const unsigned char* t = m_navMesh->getDetailTri(pd->tbase+j);
+ MT_Vector3 tri[3];
+ for (int k = 0; k < 3; ++k)
+ {
+ const float* v;
+ if (t[k] < p->nv)
+ v = m_navMesh->getVertex(p->v[t[k]]);
+ else
+ v = m_navMesh->getDetailVertex(pd->vbase+(t[k]-p->nv));
+ float pos[3];
+ vcopy(pos, v);
+ flipAxes(pos);
+ tri[k].setValue(pos);
+ }
+
+ for (int k=0; k<3; k++)
+ KX_RasterizerDrawDebugLine(tri[k], tri[(k+1)%3], color);
+ }
}
+ break;
}
}