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-28 01:01:00 +0400
committerNick Samarin <nicks1987@bigmir.net>2010-07-28 01:01:00 +0400
commitaf1ca0cfc17f9663908f23cafb322aa6e2b10782 (patch)
treeb406567a28fbcf8362de7719c32a7d9453c362be /source/gameengine/Ketsji/KX_NavMeshObject.cpp
parentc6ea23c77c441e49ba171b6d58f1601971d3f222 (diff)
- added operators for manual assigning navigation polygon idx to mesh faces in edit mode
- modified conversion process to take into account changes caused by mesh editing Note: conversion to dtStatNavMesh in KX_NavMeshObject hasn't worked correctly yet
Diffstat (limited to 'source/gameengine/Ketsji/KX_NavMeshObject.cpp')
-rw-r--r--source/gameengine/Ketsji/KX_NavMeshObject.cpp22
1 files changed, 11 insertions, 11 deletions
diff --git a/source/gameengine/Ketsji/KX_NavMeshObject.cpp b/source/gameengine/Ketsji/KX_NavMeshObject.cpp
index 19e045a2745..3d4dcb928a6 100644
--- a/source/gameengine/Ketsji/KX_NavMeshObject.cpp
+++ b/source/gameengine/Ketsji/KX_NavMeshObject.cpp
@@ -120,16 +120,11 @@ void KX_NavMeshObject::ProcessReplica()
}
-bool KX_NavMeshObject::BuildVertIndArrays(RAS_MeshObject* meshobj, float *&vertices, int& nverts,
+bool KX_NavMeshObject::BuildVertIndArrays(float *&vertices, int& nverts,
unsigned short* &polys, int& npolys, unsigned short *&dmeshes,
float *&dvertices, int &ndvertsuniq, unsigned short *&dtris,
int& ndtris, int &vertsPerPoly)
{
- if (!meshobj)
- {
- return false;
- }
-
DerivedMesh* dm = mesh_create_derived_no_virtual(KX_GetActiveScene()->GetBlenderScene(), GetBlenderObject(),
NULL, CD_MASK_MESH);
int* recastData = (int*) dm->getFaceDataArray(dm, CD_PROP_INT);
@@ -163,7 +158,7 @@ bool KX_NavMeshObject::BuildVertIndArrays(RAS_MeshObject* meshobj, float *&verti
//assumption: detailed mesh triangles are sorted by polygon idx
- npolys = recastData[numfaces-1] + 1;
+ npolys = recastData[numfaces-1]/* + 1*/; //stored indices start from 1
dmeshes = new unsigned short[npolys*4];
memset(dmeshes, 0, npolys*4*sizeof(unsigned short));
@@ -177,6 +172,7 @@ bool KX_NavMeshObject::BuildVertIndArrays(RAS_MeshObject* meshobj, float *&verti
if (curpolyidx!=prevpolyidx+1)
{
//error - wrong order of detailed mesh faces
+ printf("Converting navmesh: Error! Wrong order of detailed mesh faces\n");
return false;
}
dmesh = dmesh==NULL ? dmeshes : dmesh+4;
@@ -386,6 +382,7 @@ bool KX_NavMeshObject::BuildVertIndArrays(RAS_MeshObject* meshobj, float *&verti
else
{
//create from RAS_MeshObject (detailed mesh is fake)
+ RAS_MeshObject* meshobj = GetMesh(0);
vertsPerPoly = 3;
nverts = meshobj->m_sharedvertex_map.size();
if (nverts >= 0xffff)
@@ -452,20 +449,23 @@ bool KX_NavMeshObject::BuildNavMesh()
m_navMesh = NULL;
}
-
if (GetMeshCount()==0)
+ {
+ printf("Can't find mesh for navmesh object: %s \n", m_name);
return false;
-
- RAS_MeshObject* meshobj = GetMesh(0);
+ }
float *vertices = NULL, *dvertices = NULL;
unsigned short *polys = NULL, *dtris = NULL, *dmeshes = NULL;
int nverts = 0, npolys = 0, ndvertsuniq = 0, ndtris = 0;
int vertsPerPoly = 0;
- if (!BuildVertIndArrays(meshobj, vertices, nverts, polys, npolys,
+ if (!BuildVertIndArrays(vertices, nverts, polys, npolys,
dmeshes, dvertices, ndvertsuniq, dtris, ndtris, vertsPerPoly )
|| vertsPerPoly<3)
+ {
+ printf("Can't build navigation mesh data for object:%s \n", m_name);
return false;
+ }
MT_Point3 pos;
for (int i=0; i<nverts; i++)