From 359f15b11ce56ac015dad73fcdc99a5fb4157120 Mon Sep 17 00:00:00 2001 From: Mikko Mononen Date: Tue, 2 Mar 2010 09:24:24 +0000 Subject: [PATCH] Moved pointers from dtMeshHeader to dtMeshTile, allows mixing build/use 32/64 bit builds. Bumbed Detour version number. --- DebugUtils/Source/DetourDebugDraw.cpp | 92 ++-- Detour/Include/DetourNavMesh.h | 33 +- Detour/Source/DetourNavMesh.cpp | 428 ++++++++--------- .../Bin/Recast.app/Contents/MacOS/Recast | Bin 669360 -> 669352 bytes .../Xcode/Recast.xcodeproj/memon.pbxuser | 443 ++++++++++++++++-- .../Recast.xcodeproj/memon.perspectivev3 | 50 +- RecastDemo/Source/Sample_SoloMeshTiled.cpp | 4 +- RecastDemo/Source/main.cpp | 6 +- 8 files changed, 708 insertions(+), 348 deletions(-) diff --git a/DebugUtils/Source/DetourDebugDraw.cpp b/DebugUtils/Source/DetourDebugDraw.cpp index 9212bb2..1342ed3 100755 --- a/DebugUtils/Source/DetourDebugDraw.cpp +++ b/DebugUtils/Source/DetourDebugDraw.cpp @@ -37,7 +37,7 @@ static float distancePtLine2d(const float* pt, const float* p, const float* q) return dx*dx + dz*dz; } -static void drawPolyBoundaries(duDebugDraw* dd, const dtMeshHeader* header, +static void drawPolyBoundaries(duDebugDraw* dd, const dtMeshTile* tile, const unsigned int col, const float linew, bool inner) { @@ -45,13 +45,13 @@ static void drawPolyBoundaries(duDebugDraw* dd, const dtMeshHeader* header, dd->begin(DU_DRAW_LINES, linew); - for (int i = 0; i < header->polyCount; ++i) + for (int i = 0; i < tile->header->polyCount; ++i) { - const dtPoly* p = &header->polys[i]; + const dtPoly* p = &tile->polys[i]; if (p->type == DT_POLYTYPE_OFFMESH_CONNECTION) continue; - const dtPolyDetail* pd = &header->detailMeshes[i]; + const dtPolyDetail* pd = &tile->detailMeshes[i]; for (int j = 0, nj = (int)p->vertCount; j < nj; ++j) { @@ -62,9 +62,9 @@ static void drawPolyBoundaries(duDebugDraw* dd, const dtMeshHeader* header, if (p->neis[j] & DT_EXT_LINK) { bool con = false; - for (unsigned int k = p->firstLink; k != DT_NULL_LINK; k = header->links[k].next) + for (unsigned int k = p->firstLink; k != DT_NULL_LINK; k = tile->links[k].next) { - if (header->links[k].edge == j) + if (tile->links[k].edge == j) { con = true; break; @@ -83,21 +83,21 @@ static void drawPolyBoundaries(duDebugDraw* dd, const dtMeshHeader* header, if (p->neis[j] != 0) continue; } - const float* v0 = &header->verts[p->verts[j]*3]; - const float* v1 = &header->verts[p->verts[(j+1) % nj]*3]; + const float* v0 = &tile->verts[p->verts[j]*3]; + const float* v1 = &tile->verts[p->verts[(j+1) % nj]*3]; // Draw detail mesh edges which align with the actual poly edge. // This is really slow. for (int k = 0; k < pd->triCount; ++k) { - const unsigned char* t = &header->detailTris[(pd->triBase+k)*4]; + const unsigned char* t = &tile->detailTris[(pd->triBase+k)*4]; const float* tv[3]; for (int m = 0; m < 3; ++m) { if (t[m] < p->vertCount) - tv[m] = &header->verts[p->verts[t[m]]*3]; + tv[m] = &tile->verts[p->verts[t[m]]*3]; else - tv[m] = &header->detailVerts[(pd->vertBase+(t[m]-p->vertCount))*3]; + tv[m] = &tile->detailVerts[(pd->vertBase+(t[m]-p->vertCount))*3]; } for (int m = 0, n = 2; m < 3; n=m++) { @@ -117,19 +117,18 @@ static void drawPolyBoundaries(duDebugDraw* dd, const dtMeshHeader* header, static void drawMeshTile(duDebugDraw* dd, const dtNavMesh* mesh, const dtMeshTile* tile, unsigned char flags) { - const dtMeshHeader* header = tile->header; dtPolyRef base = mesh->getTileId(tile); dd->depthMask(false); dd->begin(DU_DRAW_TRIS); - for (int i = 0; i < header->polyCount; ++i) + for (int i = 0; i < tile->header->polyCount; ++i) { - const dtPoly* p = &header->polys[i]; + const dtPoly* p = &tile->polys[i]; if (p->type == DT_POLYTYPE_OFFMESH_CONNECTION) // Skip off-mesh links. continue; - const dtPolyDetail* pd = &header->detailMeshes[i]; + const dtPolyDetail* pd = &tile->detailMeshes[i]; unsigned int col; if ((flags & DU_DRAWNAVMESH_CLOSEDLIST) && mesh->isInClosedList(base | (dtPolyRef)i)) @@ -144,30 +143,30 @@ static void drawMeshTile(duDebugDraw* dd, const dtNavMesh* mesh, const dtMeshTil for (int j = 0; j < pd->triCount; ++j) { - const unsigned char* t = &header->detailTris[(pd->triBase+j)*4]; + const unsigned char* t = &tile->detailTris[(pd->triBase+j)*4]; for (int k = 0; k < 3; ++k) { if (t[k] < p->vertCount) - dd->vertex(&header->verts[p->verts[t[k]]*3], col); + dd->vertex(&tile->verts[p->verts[t[k]]*3], col); else - dd->vertex(&header->detailVerts[(pd->vertBase+t[k]-p->vertCount)*3], col); + dd->vertex(&tile->detailVerts[(pd->vertBase+t[k]-p->vertCount)*3], col); } } } dd->end(); // Draw inter poly boundaries - drawPolyBoundaries(dd, header, duRGBA(0,48,64,32), 1.5f, true); + drawPolyBoundaries(dd, tile, duRGBA(0,48,64,32), 1.5f, true); // Draw outer poly boundaries - drawPolyBoundaries(dd, header, duRGBA(0,48,64,220), 2.5f, false); + drawPolyBoundaries(dd, tile, duRGBA(0,48,64,220), 2.5f, false); if (flags & DU_DRAWNAVMESH_OFFMESHCONS) { dd->begin(DU_DRAW_LINES, 2.0f); - for (int i = 0; i < header->polyCount; ++i) + for (int i = 0; i < tile->header->polyCount; ++i) { - const dtPoly* p = &header->polys[i]; + const dtPoly* p = &tile->polys[i]; if (p->type != DT_POLYTYPE_OFFMESH_CONNECTION) // Skip regular polys. continue; @@ -177,18 +176,18 @@ static void drawMeshTile(duDebugDraw* dd, const dtNavMesh* mesh, const dtMeshTil else col = duDarkenColor(duIntToCol(p->area, 220)); - const dtOffMeshConnection* con = &header->offMeshCons[i - header->offMeshBase]; - const float* va = &header->verts[p->verts[0]*3]; - const float* vb = &header->verts[p->verts[1]*3]; + const dtOffMeshConnection* con = &tile->offMeshCons[i - tile->header->offMeshBase]; + const float* va = &tile->verts[p->verts[0]*3]; + const float* vb = &tile->verts[p->verts[1]*3]; // Check to see if start and end end-points have links. bool startSet = false; bool endSet = false; - for (unsigned int k = p->firstLink; k != DT_NULL_LINK; k = header->links[k].next) + for (unsigned int k = p->firstLink; k != DT_NULL_LINK; k = tile->links[k].next) { - if (header->links[k].edge == 0) + if (tile->links[k].edge == 0) startSet = true; - if (header->links[k].edge == 1) + if (tile->links[k].edge == 1) endSet = true; } @@ -223,9 +222,9 @@ static void drawMeshTile(duDebugDraw* dd, const dtNavMesh* mesh, const dtMeshTil const unsigned int vcol = duRGBA(0,0,0,196); dd->begin(DU_DRAW_POINTS, 3.0f); - for (int i = 0; i < header->vertCount; ++i) + for (int i = 0; i < tile->header->vertCount; ++i) { - const float* v = &header->verts[i*3]; + const float* v = &tile->verts[i*3]; dd->vertex(v[0], v[1], v[2], vcol); } dd->end(); @@ -330,22 +329,20 @@ void duDebugDrawNavMesh(duDebugDraw* dd, const dtNavMesh* mesh, unsigned char fl static void drawMeshTileBVTree(duDebugDraw* dd, const dtNavMesh* mesh, const dtMeshTile* tile) { - const dtMeshHeader* header = tile->header; - // Draw BV nodes. - const float cs = 1.0f / header->bvQuantFactor; + const float cs = 1.0f / tile->header->bvQuantFactor; dd->begin(DU_DRAW_LINES, 1.0f); - for (int i = 0; i < header->bvNodeCount; ++i) + for (int i = 0; i < tile->header->bvNodeCount; ++i) { - const dtBVNode* n = &header->bvTree[i]; + const dtBVNode* n = &tile->bvTree[i]; if (n->i < 0) // Leaf indices are positive. continue; - duAppendBoxWire(dd, header->bmin[0] + n->bmin[0]*cs, - header->bmin[1] + n->bmin[1]*cs, - header->bmin[2] + n->bmin[2]*cs, - header->bmin[0] + n->bmax[0]*cs, - header->bmin[1] + n->bmax[1]*cs, - header->bmin[2] + n->bmax[2]*cs, + duAppendBoxWire(dd, tile->header->bmin[0] + n->bmin[0]*cs, + tile->header->bmin[1] + n->bmin[1]*cs, + tile->header->bmin[2] + n->bmin[2]*cs, + tile->header->bmin[0] + n->bmax[0]*cs, + tile->header->bmin[1] + n->bmax[1]*cs, + tile->header->bmin[2] + n->bmax[2]*cs, duRGBA(255,255,255,128)); } dd->end(); @@ -450,8 +447,7 @@ void duDebugDrawNavMeshPoly(duDebugDraw* dd, const dtNavMesh* mesh, dtPolyRef re const dtMeshTile* tile = mesh->getTileByRef(ref, &ip); if (!tile) return; - const dtMeshHeader* header = tile->header; - const dtPoly* p = &header->polys[ip]; + const dtPoly* p = &tile->polys[ip]; dd->depthMask(false); @@ -459,7 +455,7 @@ void duDebugDrawNavMeshPoly(duDebugDraw* dd, const dtNavMesh* mesh, dtPolyRef re if (p->type == DT_POLYTYPE_OFFMESH_CONNECTION) { - dtOffMeshConnection* con = &header->offMeshCons[ip - header->offMeshBase]; + dtOffMeshConnection* con = &tile->offMeshCons[ip - tile->header->offMeshBase]; dd->begin(DU_DRAW_LINES, 2.0f); @@ -472,18 +468,18 @@ void duDebugDrawNavMeshPoly(duDebugDraw* dd, const dtNavMesh* mesh, dtPolyRef re } else { - const dtPolyDetail* pd = &header->detailMeshes[ip]; + const dtPolyDetail* pd = &tile->detailMeshes[ip]; dd->begin(DU_DRAW_TRIS); for (int i = 0; i < pd->triCount; ++i) { - const unsigned char* t = &header->detailTris[(pd->triBase+i)*4]; + const unsigned char* t = &tile->detailTris[(pd->triBase+i)*4]; for (int j = 0; j < 3; ++j) { if (t[j] < p->vertCount) - dd->vertex(&header->verts[p->verts[t[j]]*3], c); + dd->vertex(&tile->verts[p->verts[t[j]]*3], c); else - dd->vertex(&header->detailVerts[(pd->vertBase+t[j]-p->vertCount)*3], c); + dd->vertex(&tile->detailVerts[(pd->vertBase+t[j]-p->vertCount)*3], c); } } dd->end(); diff --git a/Detour/Include/DetourNavMesh.h b/Detour/Include/DetourNavMesh.h index 2f650ab..8dd638c 100644 --- a/Detour/Include/DetourNavMesh.h +++ b/Detour/Include/DetourNavMesh.h @@ -26,7 +26,7 @@ typedef unsigned int dtPolyRef; static const int DT_VERTS_PER_POLYGON = 6; static const int DT_NAVMESH_MAGIC = 'D'<<24 | 'N'<<16 | 'A'<<8 | 'V'; //'DNAV'; -static const int DT_NAVMESH_VERSION = 2; +static const int DT_NAVMESH_VERSION = 3; static const unsigned short DT_EXT_LINK = 0x8000; static const unsigned int DT_NULL_LINK = 0xffffffff; @@ -106,7 +106,6 @@ struct dtMeshHeader { int magic; // Magic number, used to identify the data. int version; // Data version number. - int polyCount; // Number of polygons in the tile. int vertCount; // Number of vertices in the tile. int maxLinkCount; // Number of allocated links. @@ -116,12 +115,20 @@ struct dtMeshHeader int bvNodeCount; // Number of BVtree nodes. int offMeshConCount; // Number of Off-Mesh links. int offMeshBase; // Index to first polygon which is Off-Mesh link. - unsigned int linksFreeList; // Index to next free link. float walkableHeight; // Height of the agent. float walkableRadius; // Radius of the agent float walkableClimb; // Max climb height of the agent. float bmin[3], bmax[3]; // Bounding box of the tile. float bvQuantFactor; // BVtree quantization factor (world to bvnode coords) +}; + +struct dtMeshTile +{ + unsigned int salt; // Counter describing modifications to the tile. + int x,y; // Grid location of the tile. + + unsigned int linksFreeList; // Index to next free link. + dtMeshHeader* header; // Pointer to tile header. dtPoly* polys; // Pointer to the polygons (will be updated when tile is added). float* verts; // Pointer to the vertices (will be updated when tile added). dtLink* links; // Pointer to the links (will be updated when tile added). @@ -130,13 +137,7 @@ struct dtMeshHeader unsigned char* detailTris; // Pointer to detail triangles (will be updated when tile added). dtBVNode* bvTree; // Pointer to BVtree nodes (will be updated when tile added). dtOffMeshConnection* offMeshCons; // Pointer to Off-Mesh links. (will be updated when tile added). -}; - -struct dtMeshTile -{ - unsigned int salt; // Counter describing modifications to the tile. - int x,y; // Grid location of the tile. - dtMeshHeader* header; // Pointer to tile header. + unsigned char* data; // Pointer to tile data. int dataSize; // Size of the tile data. bool ownsData; // Flag indicating of the navmesh should release the data. @@ -383,13 +384,13 @@ public: void setPolyFlags(dtPolyRef ref, unsigned short flags); // Return polygon flags. - unsigned short getPolyFlags(dtPolyRef ref); + unsigned short getPolyFlags(dtPolyRef ref) const; // Set polygon type. void setPolyArea(dtPolyRef ref, unsigned char area); // Return polygon type. - unsigned char getPolyArea(dtPolyRef ref); + unsigned char getPolyArea(dtPolyRef ref) const; // Returns pointer to a polygon based on ref. const dtPoly* getPolyByRef(dtPolyRef ref) const; @@ -463,14 +464,14 @@ private: // Returns portal points between two polygons. bool getPortalPoints(dtPolyRef from, dtPolyRef to, float* left, float* right, unsigned char& fromType, unsigned char& toType) const; - bool getPortalPoints(dtPolyRef from, const dtPoly* fromPoly, const dtMeshHeader* fromHeader, - dtPolyRef to, const dtPoly* toPoly, const dtMeshHeader* toHeader, + bool getPortalPoints(dtPolyRef from, const dtPoly* fromPoly, const dtMeshTile* fromTile, + dtPolyRef to, const dtPoly* toPoly, const dtMeshTile* toTile, float* left, float* right) const; // Returns edge mid point between two polygons. bool getEdgeMidPoint(dtPolyRef from, dtPolyRef to, float* mid) const; - bool getEdgeMidPoint(dtPolyRef from, const dtPoly* fromPoly, const dtMeshHeader* fromHeader, - dtPolyRef to, const dtPoly* toPoly, const dtMeshHeader* toHeader, + bool getEdgeMidPoint(dtPolyRef from, const dtPoly* fromPoly, const dtMeshTile* fromTile, + dtPolyRef to, const dtPoly* toPoly, const dtMeshTile* toTile, float* mid) const; float m_orig[3]; // Origin of the tile (0,0) diff --git a/Detour/Source/DetourNavMesh.cpp b/Detour/Source/DetourNavMesh.cpp index feca328..117f7a3 100644 --- a/Detour/Source/DetourNavMesh.cpp +++ b/Detour/Source/DetourNavMesh.cpp @@ -76,17 +76,17 @@ inline int computeTileHash(int x, int y, const int mask) inline unsigned int allocLink(dtMeshTile* tile) { - if (tile->header->linksFreeList == DT_NULL_LINK) + if (tile->linksFreeList == DT_NULL_LINK) return DT_NULL_LINK; - unsigned int link = tile->header->linksFreeList; - tile->header->linksFreeList = tile->header->links[link].next; + unsigned int link = tile->linksFreeList; + tile->linksFreeList = tile->links[link].next; return link; } inline void freeLink(dtMeshTile* tile, unsigned int link) { - tile->header->links[link].next = tile->header->linksFreeList; - tile->header->linksFreeList = link; + tile->links[link].next = tile->linksFreeList; + tile->linksFreeList = link; } @@ -213,10 +213,9 @@ int dtNavMesh::findConnectingPolys(const float* va, const float* vb, dtPolyRef* con, float* conarea, int maxcon) { if (!tile) return 0; - dtMeshHeader* h = tile->header; float amin[2], amax[2]; - calcRect(va,vb, amin,amax, side, 0.01f, h->walkableClimb); + calcRect(va,vb, amin,amax, side, 0.01f, tile->header->walkableClimb); // Remove links pointing to 'side' and compact the links array. float bmin[2], bmax[2]; @@ -225,18 +224,18 @@ int dtNavMesh::findConnectingPolys(const float* va, const float* vb, dtPolyRef base = getTileId(tile); - for (int i = 0; i < h->polyCount; ++i) + for (int i = 0; i < tile->header->polyCount; ++i) { - dtPoly* poly = &h->polys[i]; + dtPoly* poly = &tile->polys[i]; const int nv = poly->vertCount; for (int j = 0; j < nv; ++j) { // Skip edges which do not point to the right side. if (poly->neis[j] != m) continue; // Check if the segments touch. - const float* vc = &h->verts[poly->verts[j]*3]; - const float* vd = &h->verts[poly->verts[(j+1) % nv]*3]; - calcRect(vc,vd, bmin,bmax, side, 0.01f, h->walkableClimb); + const float* vc = &tile->verts[poly->verts[j]*3]; + const float* vd = &tile->verts[poly->verts[(j+1) % nv]*3]; + calcRect(vc,vd, bmin,bmax, side, 0.01f, tile->header->walkableClimb); if (!overlapRects(amin,amax, bmin,bmax)) continue; // Add return value. if (n < maxcon) @@ -255,23 +254,22 @@ int dtNavMesh::findConnectingPolys(const float* va, const float* vb, void dtNavMesh::unconnectExtLinks(dtMeshTile* tile, int side) { if (!tile) return; - dtMeshHeader* header = tile->header; - for (int i = 0; i < header->polyCount; ++i) + for (int i = 0; i < tile->header->polyCount; ++i) { - dtPoly* poly = &header->polys[i]; + dtPoly* poly = &tile->polys[i]; unsigned int j = poly->firstLink; unsigned int pj = DT_NULL_LINK; while (j != DT_NULL_LINK) { - if (header->links[j].side == side) + if (tile->links[j].side == side) { // Revove link. - unsigned int nj = header->links[j].next; + unsigned int nj = tile->links[j].next; if (pj == DT_NULL_LINK) poly->firstLink = nj; else - header->links[pj].next = nj; + tile->links[pj].next = nj; freeLink(tile, j); j = nj; } @@ -279,7 +277,7 @@ void dtNavMesh::unconnectExtLinks(dtMeshTile* tile, int side) { // Advance pj = j; - j = header->links[j].next; + j = tile->links[j].next; } } } @@ -288,12 +286,11 @@ void dtNavMesh::unconnectExtLinks(dtMeshTile* tile, int side) void dtNavMesh::connectExtLinks(dtMeshTile* tile, dtMeshTile* target, int side) { if (!tile) return; - dtMeshHeader* header = tile->header; // Connect border links. - for (int i = 0; i < header->polyCount; ++i) + for (int i = 0; i < tile->header->polyCount; ++i) { - dtPoly* poly = &header->polys[i]; + dtPoly* poly = &tile->polys[i]; // Create new links. unsigned short m = DT_EXT_LINK | (unsigned short)side; @@ -304,8 +301,8 @@ void dtNavMesh::connectExtLinks(dtMeshTile* tile, dtMeshTile* target, int side) if (poly->neis[j] != m) continue; // Create new links - const float* va = &header->verts[poly->verts[j]*3]; - const float* vb = &header->verts[poly->verts[(j+1) % nv]*3]; + const float* va = &tile->verts[poly->verts[j]*3]; + const float* vb = &tile->verts[poly->verts[(j+1) % nv]*3]; dtPolyRef nei[4]; float neia[4*2]; int nnei = findConnectingPolys(va,vb, target, opposite(side), nei,neia,4); @@ -314,7 +311,7 @@ void dtNavMesh::connectExtLinks(dtMeshTile* tile, dtMeshTile* target, int side) unsigned int idx = allocLink(tile); if (idx != DT_NULL_LINK) { - dtLink* link = &header->links[idx]; + dtLink* link = &tile->links[idx]; link->ref = nei[k]; link->edge = (unsigned char)j; link->side = (unsigned char)side; @@ -346,23 +343,21 @@ void dtNavMesh::connectExtLinks(dtMeshTile* tile, dtMeshTile* target, int side) void dtNavMesh::connectExtOffMeshLinks(dtMeshTile* tile, dtMeshTile* target, int side) { if (!tile) return; - dtMeshHeader* header = tile->header; // Connect off-mesh links. // We are interested on links which land from target tile to this tile. - dtMeshHeader* targetHeader = target->header; const unsigned char oppositeSide = (unsigned char)opposite(side); dtQueryFilter defaultFilter; - for (int i = 0; i < targetHeader->offMeshConCount; ++i) + for (int i = 0; i < target->header->offMeshConCount; ++i) { - dtOffMeshConnection* targetCon = &targetHeader->offMeshCons[i]; + dtOffMeshConnection* targetCon = &target->offMeshCons[i]; if (targetCon->side != oppositeSide) continue; - dtPoly* targetPoly = &targetHeader->polys[targetCon->poly]; + dtPoly* targetPoly = &target->polys[targetCon->poly]; - const float ext[3] = { targetCon->rad, targetHeader->walkableClimb, targetCon->rad }; + const float ext[3] = { targetCon->rad, target->header->walkableClimb, targetCon->rad }; // Find polygon to connect to. const float* p = &targetCon->pos[3]; @@ -373,14 +368,14 @@ void dtNavMesh::connectExtOffMeshLinks(dtMeshTile* tile, dtMeshTile* target, int if (sqr(nearestPt[0]-p[0])+sqr(nearestPt[2]-p[2]) > sqr(targetCon->rad)) continue; // Make sure the location is on current mesh. - float* v = &targetHeader->verts[targetPoly->verts[1]*3]; + float* v = &target->verts[targetPoly->verts[1]*3]; vcopy(v, nearestPt); // Link off-mesh connection to target poly. unsigned int idx = allocLink(target); if (idx != DT_NULL_LINK) { - dtLink* link = &targetHeader->links[idx]; + dtLink* link = &target->links[idx]; link->ref = ref; link->edge = (unsigned char)1; link->side = oppositeSide; @@ -397,8 +392,8 @@ void dtNavMesh::connectExtOffMeshLinks(dtMeshTile* tile, dtMeshTile* target, int if (idx != DT_NULL_LINK) { unsigned short landPolyIdx = decodePolyIdPoly(ref); - dtPoly* landPoly = &header->polys[landPolyIdx]; - dtLink* link = &header->links[idx]; + dtPoly* landPoly = &tile->polys[landPolyIdx]; + dtLink* link = &tile->links[idx]; link->ref = getTileId(target) | (unsigned int)(targetCon->poly); link->edge = 0; link->side = side; @@ -415,13 +410,12 @@ void dtNavMesh::connectExtOffMeshLinks(dtMeshTile* tile, dtMeshTile* target, int void dtNavMesh::connectIntLinks(dtMeshTile* tile) { if (!tile) return; - dtMeshHeader* header = tile->header; dtPolyRef base = getTileId(tile); - for (int i = 0; i < header->polyCount; ++i) + for (int i = 0; i < tile->header->polyCount; ++i) { - dtPoly* poly = &header->polys[i]; + dtPoly* poly = &tile->polys[i]; poly->firstLink = DT_NULL_LINK; if (poly->type == DT_POLYTYPE_OFFMESH_CONNECTION) @@ -437,7 +431,7 @@ void dtNavMesh::connectIntLinks(dtMeshTile* tile) unsigned int idx = allocLink(tile); if (idx != DT_NULL_LINK) { - dtLink* link = &header->links[idx]; + dtLink* link = &tile->links[idx]; link->ref = base | (unsigned int)(poly->neis[j]-1); link->edge = (unsigned char)j; link->side = 0xff; @@ -453,18 +447,17 @@ void dtNavMesh::connectIntLinks(dtMeshTile* tile) void dtNavMesh::connectIntOffMeshLinks(dtMeshTile* tile) { if (!tile) return; - dtMeshHeader* header = tile->header; dtPolyRef base = getTileId(tile); // Find Off-mesh connection end points. - for (int i = 0; i < header->offMeshConCount; ++i) + for (int i = 0; i < tile->header->offMeshConCount; ++i) { - dtOffMeshConnection* con = &header->offMeshCons[i]; - dtPoly* poly = &header->polys[con->poly]; + dtOffMeshConnection* con = &tile->offMeshCons[i]; + dtPoly* poly = &tile->polys[con->poly]; dtQueryFilter defaultFilter; - const float ext[3] = { con->rad, header->walkableClimb, con->rad }; + const float ext[3] = { con->rad, tile->header->walkableClimb, con->rad }; for (int j = 0; j < 2; ++j) { @@ -481,14 +474,14 @@ void dtNavMesh::connectIntOffMeshLinks(dtMeshTile* tile) if (sqr(nearestPt[0]-p[0])+sqr(nearestPt[2]-p[2]) > sqr(con->rad)) continue; // Make sure the location is on current mesh. - float* v = &header->verts[poly->verts[j]*3]; + float* v = &tile->verts[poly->verts[j]*3]; vcopy(v, nearestPt); // Link off-mesh connection to target poly. unsigned int idx = allocLink(tile); if (idx != DT_NULL_LINK) { - dtLink* link = &header->links[idx]; + dtLink* link = &tile->links[idx]; link->ref = ref; link->edge = (unsigned char)j; link->side = 0xff; @@ -507,8 +500,8 @@ void dtNavMesh::connectIntOffMeshLinks(dtMeshTile* tile) if (idx != DT_NULL_LINK) { unsigned short landPolyIdx = decodePolyIdPoly(ref); - dtPoly* landPoly = &header->polys[landPolyIdx]; - dtLink* link = &header->links[idx]; + dtPoly* landPoly = &tile->polys[landPolyIdx]; + dtLink* link = &tile->links[idx]; link->ref = base | (unsigned int)(con->poly); link->edge = 0; link->side = 0xff; @@ -560,20 +553,20 @@ bool dtNavMesh::addTileAt(int x, int y, unsigned char* data, int dataSize, bool const int offMeshLinksSize = align4(sizeof(dtOffMeshConnection)*header->offMeshConCount); unsigned char* d = data + headerSize; - header->verts = (float*)d; d += vertsSize; - header->polys = (dtPoly*)d; d += polysSize; - header->links = (dtLink*)d; d += linksSize; - header->detailMeshes = (dtPolyDetail*)d; d += detailMeshesSize; - header->detailVerts = (float*)d; d += detailVertsSize; - header->detailTris = (unsigned char*)d; d += detailTrisSize; - header->bvTree = (dtBVNode*)d; d += bvtreeSize; - header->offMeshCons = (dtOffMeshConnection*)d; d += offMeshLinksSize; + tile->verts = (float*)d; d += vertsSize; + tile->polys = (dtPoly*)d; d += polysSize; + tile->links = (dtLink*)d; d += linksSize; + tile->detailMeshes = (dtPolyDetail*)d; d += detailMeshesSize; + tile->detailVerts = (float*)d; d += detailVertsSize; + tile->detailTris = (unsigned char*)d; d += detailTrisSize; + tile->bvTree = (dtBVNode*)d; d += bvtreeSize; + tile->offMeshCons = (dtOffMeshConnection*)d; d += offMeshLinksSize; // Build links freelist - header->linksFreeList = 0; - header->links[header->maxLinkCount-1].next = DT_NULL_LINK; + tile->linksFreeList = 0; + tile->links[header->maxLinkCount-1].next = DT_NULL_LINK; for (int i = 0; i < header->maxLinkCount-1; ++i) - header->links[i].next = i+1; + tile->links[i].next = i+1; // Init tile. tile->header = header; @@ -705,6 +698,16 @@ bool dtNavMesh::removeTileAt(int x, int y, unsigned char** data, int* dataSize) if (dataSize) *dataSize = tile->dataSize; } tile->header = 0; + tile->linksFreeList = 0; + tile->polys = 0; + tile->verts = 0; + tile->links = 0; + tile->detailMeshes = 0; + tile->detailVerts = 0; + tile->detailTris = 0; + tile->bvTree = 0; + tile->offMeshCons = 0; + tile->x = tile->y = 0; tile->salt++; @@ -737,22 +740,21 @@ bool dtNavMesh::closestPointOnPoly(dtPolyRef ref, const float* pos, float* close bool dtNavMesh::closestPointOnPolyInTile(const dtMeshTile* tile, unsigned int ip, const float* pos, float* closest) const { - const dtMeshHeader* header = tile->header; - const dtPoly* poly = &header->polys[ip]; + const dtPoly* poly = &tile->polys[ip]; float closestDistSqr = FLT_MAX; - const dtPolyDetail* pd = &header->detailMeshes[ip]; + const dtPolyDetail* pd = &tile->detailMeshes[ip]; for (int j = 0; j < pd->triCount; ++j) { - const unsigned char* t = &header->detailTris[(pd->triBase+j)*4]; + const unsigned char* t = &tile->detailTris[(pd->triBase+j)*4]; const float* v[3]; for (int k = 0; k < 3; ++k) { if (t[k] < poly->vertCount) - v[k] = &header->verts[poly->verts[t[k]]*3]; + v[k] = &tile->verts[poly->verts[t[k]]*3]; else - v[k] = &header->detailVerts[(pd->vertBase+(t[k]-poly->vertCount))*3]; + v[k] = &tile->detailVerts[(pd->vertBase+(t[k]-poly->vertCount))*3]; } float pt[3]; closestPtPointTriangle(pt, pos, v[0], v[1], v[2]); @@ -773,10 +775,10 @@ bool dtNavMesh::closestPointOnPolyBoundary(dtPolyRef ref, const float* pos, floa decodePolyId(ref, salt, it, ip); if (it >= (unsigned int)m_maxTiles) return false; if (m_tiles[it].salt != salt || m_tiles[it].header == 0) return false; - const dtMeshHeader* header = m_tiles[it].header; + const dtMeshTile* tile = &m_tiles[it]; - if (ip >= (unsigned int)header->polyCount) return false; - const dtPoly* poly = &header->polys[ip]; + if (ip >= (unsigned int)tile->header->polyCount) return false; + const dtPoly* poly = &tile->polys[ip]; // Collect vertices. float verts[DT_VERTS_PER_POLYGON*3]; @@ -785,7 +787,7 @@ bool dtNavMesh::closestPointOnPolyBoundary(dtPolyRef ref, const float* pos, floa int nv = 0; for (int i = 0; i < (int)poly->vertCount; ++i) { - vcopy(&verts[nv*3], &header->verts[poly->verts[i]*3]); + vcopy(&verts[nv*3], &tile->verts[poly->verts[i]*3]); nv++; } @@ -825,9 +827,9 @@ bool dtNavMesh::getOffMeshConnectionPolyEndPoints(dtPolyRef prevRef, dtPolyRef p decodePolyId(polyRef, salt, it, ip); if (it >= (unsigned int)m_maxTiles) return false; if (m_tiles[it].salt != salt || m_tiles[it].header == 0) return false; - const dtMeshHeader* header = m_tiles[it].header; - if (ip >= (unsigned int)header->polyCount) return false; - const dtPoly* poly = &header->polys[ip]; + const dtMeshTile* tile = &m_tiles[it]; + if (ip >= (unsigned int)tile->header->polyCount) return false; + const dtPoly* poly = &tile->polys[ip]; // Make sure that the current poly is indeed off-mesh link. if (poly->type != DT_POLYTYPE_OFFMESH_CONNECTION) @@ -837,11 +839,11 @@ bool dtNavMesh::getOffMeshConnectionPolyEndPoints(dtPolyRef prevRef, dtPolyRef p int idx0 = 0, idx1 = 1; // Find link that points to first vertex. - for (unsigned int i = poly->firstLink; i != DT_NULL_LINK; i = header->links[i].next) + for (unsigned int i = poly->firstLink; i != DT_NULL_LINK; i = tile->links[i].next) { - if (header->links[i].edge == 0) + if (tile->links[i].edge == 0) { - if (header->links[i].ref != prevRef) + if (tile->links[i].ref != prevRef) { idx0 = 1; idx1 = 0; @@ -850,8 +852,8 @@ bool dtNavMesh::getOffMeshConnectionPolyEndPoints(dtPolyRef prevRef, dtPolyRef p } } - vcopy(startPos, &header->verts[poly->verts[idx0]*3]); - vcopy(endPos, &header->verts[poly->verts[idx1]*3]); + vcopy(startPos, &tile->verts[poly->verts[idx0]*3]); + vcopy(endPos, &tile->verts[poly->verts[idx1]*3]); return true; } @@ -863,15 +865,15 @@ bool dtNavMesh::getPolyHeight(dtPolyRef ref, const float* pos, float* height) co decodePolyId(ref, salt, it, ip); if (it >= (unsigned int)m_maxTiles) return false; if (m_tiles[it].salt != salt || m_tiles[it].header == 0) return false; - const dtMeshHeader* header = m_tiles[it].header; + const dtMeshTile* tile = &m_tiles[it]; - if (ip >= (unsigned int)header->polyCount) return false; - const dtPoly* poly = &header->polys[ip]; + if (ip >= (unsigned int)tile->header->polyCount) return false; + const dtPoly* poly = &tile->polys[ip]; if (poly->type == DT_POLYTYPE_OFFMESH_CONNECTION) { - const float* v0 = &header->verts[poly->verts[0]*3]; - const float* v1 = &header->verts[poly->verts[1]*3]; + const float* v0 = &tile->verts[poly->verts[0]*3]; + const float* v1 = &tile->verts[poly->verts[1]*3]; const float d0 = vdist(pos, v0); const float d1 = vdist(pos, v1); const float u = d0 / (d0+d1); @@ -881,17 +883,17 @@ bool dtNavMesh::getPolyHeight(dtPolyRef ref, const float* pos, float* height) co } else { - const dtPolyDetail* pd = &header->detailMeshes[ip]; + const dtPolyDetail* pd = &tile->detailMeshes[ip]; for (int j = 0; j < pd->triCount; ++j) { - const unsigned char* t = &header->detailTris[(pd->triBase+j)*4]; + const unsigned char* t = &tile->detailTris[(pd->triBase+j)*4]; const float* v[3]; for (int k = 0; k < 3; ++k) { if (t[k] < poly->vertCount) - v[k] = &header->verts[poly->verts[t[k]]*3]; + v[k] = &tile->verts[poly->verts[t[k]]*3]; else - v[k] = &header->detailVerts[(pd->vertBase+(t[k]-poly->vertCount))*3]; + v[k] = &tile->detailVerts[(pd->vertBase+(t[k]-poly->vertCount))*3]; } float h; if (closestHeightPointTriangle(pos, v[0], v[1], v[2], h)) @@ -984,28 +986,30 @@ int dtNavMesh::queryPolygonsInTile(dtMeshTile* tile, const float* qmin, const fl dtQueryFilter* filter, dtPolyRef* polys, const int maxPolys) { - const dtMeshHeader* header = tile->header; - if (header->bvTree) + if (tile->bvTree) { - const dtBVNode* node = &header->bvTree[0]; - const dtBVNode* end = &header->bvTree[header->bvNodeCount]; - + const dtBVNode* node = &tile->bvTree[0]; + const dtBVNode* end = &tile->bvTree[tile->header->bvNodeCount]; + const float* tbmin = tile->header->bmin; + const float* tbmax = tile->header->bmax; + const float qfac = tile->header->bvQuantFactor; + // Calculate quantized box unsigned short bmin[3], bmax[3]; // Clamp query box to world box. - float minx = clamp(qmin[0], header->bmin[0], header->bmax[0]) - header->bmin[0]; - float miny = clamp(qmin[1], header->bmin[1], header->bmax[1]) - header->bmin[1]; - float minz = clamp(qmin[2], header->bmin[2], header->bmax[2]) - header->bmin[2]; - float maxx = clamp(qmax[0], header->bmin[0], header->bmax[0]) - header->bmin[0]; - float maxy = clamp(qmax[1], header->bmin[1], header->bmax[1]) - header->bmin[1]; - float maxz = clamp(qmax[2], header->bmin[2], header->bmax[2]) - header->bmin[2]; + float minx = clamp(qmin[0], tbmin[0], tbmax[0]) - tbmin[0]; + float miny = clamp(qmin[1], tbmin[1], tbmax[1]) - tbmin[1]; + float minz = clamp(qmin[2], tbmin[2], tbmax[2]) - tbmin[2]; + float maxx = clamp(qmax[0], tbmin[0], tbmax[0]) - tbmin[0]; + float maxy = clamp(qmax[1], tbmin[1], tbmax[1]) - tbmin[1]; + float maxz = clamp(qmax[2], tbmin[2], tbmax[2]) - tbmin[2]; // Quantize - bmin[0] = (unsigned short)(header->bvQuantFactor * minx) & 0xfffe; - bmin[1] = (unsigned short)(header->bvQuantFactor * miny) & 0xfffe; - bmin[2] = (unsigned short)(header->bvQuantFactor * minz) & 0xfffe; - bmax[0] = (unsigned short)(header->bvQuantFactor * maxx + 1) | 1; - bmax[1] = (unsigned short)(header->bvQuantFactor * maxy + 1) | 1; - bmax[2] = (unsigned short)(header->bvQuantFactor * maxz + 1) | 1; + bmin[0] = (unsigned short)(qfac * minx) & 0xfffe; + bmin[1] = (unsigned short)(qfac * miny) & 0xfffe; + bmin[2] = (unsigned short)(qfac * minz) & 0xfffe; + bmax[0] = (unsigned short)(qfac * maxx + 1) | 1; + bmax[1] = (unsigned short)(qfac * maxy + 1) | 1; + bmax[2] = (unsigned short)(qfac * maxz + 1) | 1; // Traverse tree dtPolyRef base = getTileId(tile); @@ -1017,7 +1021,7 @@ int dtNavMesh::queryPolygonsInTile(dtMeshTile* tile, const float* qmin, const fl if (isLeafNode && overlap) { - if (passFilter(filter, header->polys[node->i].flags)) + if (passFilter(filter, tile->polys[node->i].flags)) { if (n < maxPolys) polys[n++] = base | (dtPolyRef)node->i; @@ -1038,19 +1042,18 @@ int dtNavMesh::queryPolygonsInTile(dtMeshTile* tile, const float* qmin, const fl else { float bmin[3], bmax[3]; - const dtMeshHeader* header = tile->header; int n = 0; dtPolyRef base = getTileId(tile); - for (int i = 0; i < header->polyCount; ++i) + for (int i = 0; i < tile->header->polyCount; ++i) { // Calc polygon bounds. - dtPoly* p = &header->polys[i]; - const float* v = &header->verts[p->verts[0]*3]; + dtPoly* p = &tile->polys[i]; + const float* v = &tile->verts[p->verts[0]*3]; vcopy(bmin, v); vcopy(bmax, v); for (int j = 1; j < p->vertCount; ++j) { - v = &header->verts[p->verts[j]*3]; + v = &tile->verts[p->verts[j]*3]; vmin(bmin, v); vmax(bmax, v); } @@ -1157,12 +1160,12 @@ int dtNavMesh::findPath(dtPolyRef startRef, dtPolyRef endRef, const dtPolyRef bestRef = bestNode->id; it = decodePolyIdTile(bestRef); ip = decodePolyIdPoly(bestRef); - const dtMeshHeader* bestHeader = m_tiles[it].header; - const dtPoly* bestPoly = &bestHeader->polys[ip]; + const dtMeshTile* bestTile = &m_tiles[it]; + const dtPoly* bestPoly = &bestTile->polys[ip]; // Get parent poly and tile. dtPolyRef parentRef = 0; - const dtMeshHeader* parentHeader = 0; + const dtMeshTile* parentTile = 0; const dtPoly* parentPoly = 0; if (bestNode->pidx) parentRef = m_nodePool->getNodeAtIdx(bestNode->pidx)->id; @@ -1170,20 +1173,20 @@ int dtNavMesh::findPath(dtPolyRef startRef, dtPolyRef endRef, { it = decodePolyIdTile(parentRef); ip = decodePolyIdPoly(parentRef); - parentHeader = m_tiles[it].header; - parentPoly = &parentHeader->polys[ip]; + parentTile = &m_tiles[it]; + parentPoly = &parentTile->polys[ip]; - getEdgeMidPoint(parentRef, parentPoly, parentHeader, - bestRef, bestPoly, bestHeader, previousEdgeMidPoint); + getEdgeMidPoint(parentRef, parentPoly, parentTile, + bestRef, bestPoly, bestTile, previousEdgeMidPoint); } else { vcopy(previousEdgeMidPoint, startPos); } - for (unsigned int i = bestPoly->firstLink; i != DT_NULL_LINK; i = bestHeader->links[i].next) + for (unsigned int i = bestPoly->firstLink; i != DT_NULL_LINK; i = bestTile->links[i].next) { - dtPolyRef neighbourRef = bestHeader->links[i].ref; + dtPolyRef neighbourRef = bestTile->links[i].ref; // Skip invalid ids and do not expand back to where we came from. if (!neighbourRef || neighbourRef == bestRef) @@ -1193,8 +1196,8 @@ int dtNavMesh::findPath(dtPolyRef startRef, dtPolyRef endRef, // The API input has been cheked already, skip checking internal data. it = decodePolyIdTile(neighbourRef); ip = decodePolyIdPoly(neighbourRef); - const dtMeshHeader* neighbourHeader = m_tiles[it].header; - const dtPoly* neighbourPoly = &neighbourHeader->polys[ip]; + const dtMeshTile* neighbourTile = &m_tiles[it]; + const dtPoly* neighbourPoly = &neighbourTile->polys[ip]; if (!passFilter(filter, neighbourPoly->flags)) continue; @@ -1206,8 +1209,8 @@ int dtNavMesh::findPath(dtPolyRef startRef, dtPolyRef endRef, // Calculate cost. float edgeMidPoint[3]; - getEdgeMidPoint(bestRef, bestPoly, bestHeader, - neighbourRef, neighbourPoly, neighbourHeader, edgeMidPoint); + getEdgeMidPoint(bestRef, bestPoly, bestTile, + neighbourRef, neighbourPoly, neighbourTile, edgeMidPoint); // Special case for last node. float h = 0; @@ -1542,8 +1545,8 @@ int dtNavMesh::moveAlongPathCorridor(const float* startPos, const float* endPos, if (it >= (unsigned int)m_maxTiles) return n; if (m_tiles[it].salt != salt || m_tiles[it].header == 0) return n; if (ip >= (unsigned int)m_tiles[it].header->polyCount) return n; - const dtMeshHeader* header = m_tiles[it].header; - const dtPoly* poly = &header->polys[ip]; + const dtMeshTile* tile = &m_tiles[it]; + const dtPoly* poly = &tile->polys[ip]; // In case of Off-Mesh link, just snap to the end location and advance over it. if (poly->type == DT_POLYTYPE_OFFMESH_CONNECTION) @@ -1563,7 +1566,7 @@ int dtNavMesh::moveAlongPathCorridor(const float* startPos, const float* endPos, int nv = 0; for (int i = 0; i < (int)poly->vertCount; ++i) { - vcopy(&verts[nv*3], &header->verts[poly->verts[i]*3]); + vcopy(&verts[nv*3], &tile->verts[poly->verts[i]*3]); nv++; } @@ -1594,6 +1597,7 @@ int dtNavMesh::moveAlongPathCorridor(const float* startPos, const float* endPos, // Check to see if the point is on the portal edge to the next polygon. if (n+1 >= pathSize) return n; + // TODO: optimize float left[3], right[3]; unsigned char fromType, toType; if (!getPortalPoints(path[n], path[n+1], left, right, fromType, toType)) @@ -1617,36 +1621,36 @@ bool dtNavMesh::getPortalPoints(dtPolyRef from, dtPolyRef to, float* left, float decodePolyId(from, salt, it, ip); if (it >= (unsigned int)m_maxTiles) return false; if (m_tiles[it].salt != salt || m_tiles[it].header == 0) return false; - if (ip >= (unsigned int)m_tiles[it].header->polyCount) return false; - const dtMeshHeader* fromHeader = m_tiles[it].header; - const dtPoly* fromPoly = &fromHeader->polys[ip]; + const dtMeshTile* fromTile = &m_tiles[it]; + if (ip >= (unsigned int)fromTile->header->polyCount) return false; + const dtPoly* fromPoly = &fromTile->polys[ip]; fromType = fromPoly->type; decodePolyId(to, salt, it, ip); if (it >= (unsigned int)m_maxTiles) return false; if (m_tiles[it].salt != salt || m_tiles[it].header == 0) return false; - if (ip >= (unsigned int)m_tiles[it].header->polyCount) return false; - const dtMeshHeader* toHeader = m_tiles[it].header; - const dtPoly* toPoly = &toHeader->polys[ip]; + const dtMeshTile* toTile = &m_tiles[it]; + if (ip >= (unsigned int)toTile->header->polyCount) return false; + const dtPoly* toPoly = &toTile->polys[ip]; toType = toPoly->type; - return getPortalPoints(from, fromPoly, fromHeader, - to, toPoly, toHeader, + return getPortalPoints(from, fromPoly, fromTile, + to, toPoly, toTile, left, right); } // Returns portal points between two polygons. -bool dtNavMesh::getPortalPoints(dtPolyRef from, const dtPoly* fromPoly, const dtMeshHeader* fromHeader, - dtPolyRef to, const dtPoly* toPoly, const dtMeshHeader* toHeader, +bool dtNavMesh::getPortalPoints(dtPolyRef from, const dtPoly* fromPoly, const dtMeshTile* fromTile, + dtPolyRef to, const dtPoly* toPoly, const dtMeshTile* toTile, float* left, float* right) const { // Find the link that points to the 'to' polygon. const dtLink* link = 0; - for (unsigned int i = fromPoly->firstLink; i != DT_NULL_LINK; i = fromHeader->links[i].next) + for (unsigned int i = fromPoly->firstLink; i != DT_NULL_LINK; i = fromTile->links[i].next) { - if (fromHeader->links[i].ref == to) + if (fromTile->links[i].ref == to) { - link = &fromHeader->links[i]; + link = &fromTile->links[i]; break; } } @@ -1657,13 +1661,13 @@ bool dtNavMesh::getPortalPoints(dtPolyRef from, const dtPoly* fromPoly, const dt if (fromPoly->type == DT_POLYTYPE_OFFMESH_CONNECTION) { // Find link that points to first vertex. - for (unsigned int i = fromPoly->firstLink; i != DT_NULL_LINK; i = fromHeader->links[i].next) + for (unsigned int i = fromPoly->firstLink; i != DT_NULL_LINK; i = fromTile->links[i].next) { - if (fromHeader->links[i].ref == to) + if (fromTile->links[i].ref == to) { - const int v = fromHeader->links[i].edge; - vcopy(left, &fromHeader->verts[fromPoly->verts[v]*3]); - vcopy(right, &fromHeader->verts[fromPoly->verts[v]*3]); + const int v = fromTile->links[i].edge; + vcopy(left, &fromTile->verts[fromPoly->verts[v]*3]); + vcopy(right, &fromTile->verts[fromPoly->verts[v]*3]); return true; } } @@ -1672,13 +1676,13 @@ bool dtNavMesh::getPortalPoints(dtPolyRef from, const dtPoly* fromPoly, const dt if (toPoly->type == DT_POLYTYPE_OFFMESH_CONNECTION) { - for (unsigned int i = toPoly->firstLink; i != DT_NULL_LINK; i = toHeader->links[i].next) + for (unsigned int i = toPoly->firstLink; i != DT_NULL_LINK; i = toTile->links[i].next) { - if (toHeader->links[i].ref == from) + if (toTile->links[i].ref == from) { - const int v = toHeader->links[i].edge; - vcopy(left, &toHeader->verts[toPoly->verts[v]*3]); - vcopy(right, &toHeader->verts[toPoly->verts[v]*3]); + const int v = toTile->links[i].edge; + vcopy(left, &toTile->verts[toPoly->verts[v]*3]); + vcopy(right, &toTile->verts[toPoly->verts[v]*3]); return true; } } @@ -1688,8 +1692,8 @@ bool dtNavMesh::getPortalPoints(dtPolyRef from, const dtPoly* fromPoly, const dt // Find portal vertices. const int v0 = fromPoly->verts[link->edge]; const int v1 = fromPoly->verts[(link->edge+1) % (int)fromPoly->vertCount]; - vcopy(left, &fromHeader->verts[v0*3]); - vcopy(right, &fromHeader->verts[v1*3]); + vcopy(left, &fromTile->verts[v0*3]); + vcopy(right, &fromTile->verts[v1*3]); // If the link is at tile boundary, clamp the vertices to // the link width. @@ -1735,12 +1739,12 @@ bool dtNavMesh::getEdgeMidPoint(dtPolyRef from, dtPolyRef to, float* mid) const return true; } -bool dtNavMesh::getEdgeMidPoint(dtPolyRef from, const dtPoly* fromPoly, const dtMeshHeader* fromHeader, - dtPolyRef to, const dtPoly* toPoly, const dtMeshHeader* toHeader, +bool dtNavMesh::getEdgeMidPoint(dtPolyRef from, const dtPoly* fromPoly, const dtMeshTile* fromTile, + dtPolyRef to, const dtPoly* toPoly, const dtMeshTile* toTile, float* mid) const { float left[3], right[3]; - if (!getPortalPoints(from, fromPoly, fromHeader, to, toPoly, toHeader, left, right)) + if (!getPortalPoints(from, fromPoly, fromTile, to, toPoly, toTile, left, right)) return false; mid[0] = (left[0]+right[0])*0.5f; mid[1] = (left[1]+right[1])*0.5f; @@ -1754,22 +1758,22 @@ void dtNavMesh::setPolyFlags(dtPolyRef ref, unsigned short flags) decodePolyId(ref, salt, it, ip); if (it >= (unsigned int)m_maxTiles) return; if (m_tiles[it].salt != salt || m_tiles[it].header == 0) return; - if (ip >= (unsigned int)m_tiles[it].header->polyCount) return; - dtMeshHeader* header = m_tiles[it].header; - dtPoly* poly = &header->polys[ip]; + dtMeshTile* tile = &m_tiles[it]; + if (ip >= (unsigned int)tile->header->polyCount) return; + dtPoly* poly = &tile->polys[ip]; // Change flags. poly->flags = flags; } -unsigned short dtNavMesh::getPolyFlags(dtPolyRef ref) +unsigned short dtNavMesh::getPolyFlags(dtPolyRef ref) const { unsigned int salt, it, ip; decodePolyId(ref, salt, it, ip); if (it >= (unsigned int)m_maxTiles) return 0; if (m_tiles[it].salt != salt || m_tiles[it].header == 0) return 0; - if (ip >= (unsigned int)m_tiles[it].header->polyCount) return 0; - const dtMeshHeader* header = m_tiles[it].header; - const dtPoly* poly = &header->polys[ip]; + const dtMeshTile* tile = &m_tiles[it]; + if (ip >= (unsigned int)tile->header->polyCount) return 0; + const dtPoly* poly = &tile->polys[ip]; return poly->flags; } @@ -1779,21 +1783,21 @@ void dtNavMesh::setPolyArea(dtPolyRef ref, unsigned char area) decodePolyId(ref, salt, it, ip); if (it >= (unsigned int)m_maxTiles) return; if (m_tiles[it].salt != salt || m_tiles[it].header == 0) return; - if (ip >= (unsigned int)m_tiles[it].header->polyCount) return; - dtMeshHeader* header = m_tiles[it].header; - dtPoly* poly = &header->polys[ip]; + dtMeshTile* tile = &m_tiles[it]; + if (ip >= (unsigned int)tile->header->polyCount) return; + dtPoly* poly = &tile->polys[ip]; poly->area = area; } -unsigned char dtNavMesh::getPolyArea(dtPolyRef ref) +unsigned char dtNavMesh::getPolyArea(dtPolyRef ref) const { unsigned int salt, it, ip; decodePolyId(ref, salt, it, ip); if (it >= (unsigned int)m_maxTiles) return 0; if (m_tiles[it].salt != salt || m_tiles[it].header == 0) return 0; - if (ip >= (unsigned int)m_tiles[it].header->polyCount) return 0; - const dtMeshHeader* header = m_tiles[it].header; - const dtPoly* poly = &header->polys[ip]; + const dtMeshTile* tile = &m_tiles[it]; + if (ip >= (unsigned int)tile->header->polyCount) return 0; + const dtPoly* poly = &tile->polys[ip]; return poly->area; } @@ -1820,14 +1824,14 @@ int dtNavMesh::raycast(dtPolyRef centerRef, const float* startPos, const float* // The API input has been cheked already, skip checking internal data. unsigned int it = decodePolyIdTile(curRef); unsigned int ip = decodePolyIdPoly(curRef); - const dtMeshHeader* header = m_tiles[it].header; - const dtPoly* poly = &header->polys[ip]; + const dtMeshTile* tile = &m_tiles[it]; + const dtPoly* poly = &tile->polys[ip]; // Collect vertices. int nv = 0; for (int i = 0; i < (int)poly->vertCount; ++i) { - vcopy(&verts[nv*3], &header->verts[poly->verts[i]*3]); + vcopy(&verts[nv*3], &tile->verts[poly->verts[i]*3]); nv++; } @@ -1848,9 +1852,9 @@ int dtNavMesh::raycast(dtPolyRef centerRef, const float* startPos, const float* // Follow neighbours. dtPolyRef nextRef = 0; - for (unsigned int i = poly->firstLink; i != DT_NULL_LINK; i = header->links[i].next) + for (unsigned int i = poly->firstLink; i != DT_NULL_LINK; i = tile->links[i].next) { - const dtLink* link = &header->links[i]; + const dtLink* link = &tile->links[i]; if ((int)link->edge == segMax) { // If the link is internal, just return the ref. @@ -1863,8 +1867,8 @@ int dtNavMesh::raycast(dtPolyRef centerRef, const float* startPos, const float* // If the link is at tile boundary, const int v0 = poly->verts[link->edge]; const int v1 = poly->verts[(link->edge+1) % poly->vertCount]; - const float* left = &header->verts[v0*3]; - const float* right = &header->verts[v1*3]; + const float* left = &tile->verts[v0*3]; + const float* right = &tile->verts[v1*3]; // Check that the intersection lies inside the link portal. if (link->side == 0 || link->side == 4) @@ -1974,12 +1978,12 @@ int dtNavMesh::findPolysAround(dtPolyRef centerRef, const float* centerPos, floa const dtPolyRef bestRef = bestNode->id; it = decodePolyIdTile(bestRef); ip = decodePolyIdPoly(bestRef); - const dtMeshHeader* bestHeader = m_tiles[it].header; - const dtPoly* bestPoly = &bestHeader->polys[ip]; + const dtMeshTile* bestTile = &m_tiles[it]; + const dtPoly* bestPoly = &bestTile->polys[ip]; // Get parent poly and tile. dtPolyRef parentRef = 0; - const dtMeshHeader* parentHeader = 0; + const dtMeshTile* parentTile = 0; const dtPoly* parentPoly = 0; if (bestNode->pidx) parentRef = m_nodePool->getNodeAtIdx(bestNode->pidx)->id; @@ -1987,28 +1991,28 @@ int dtNavMesh::findPolysAround(dtPolyRef centerRef, const float* centerPos, floa { it = decodePolyIdTile(parentRef); ip = decodePolyIdPoly(parentRef); - parentHeader = m_tiles[it].header; - parentPoly = &parentHeader->polys[ip]; + parentTile = &m_tiles[it]; + parentPoly = &parentTile->polys[ip]; - getEdgeMidPoint(parentRef, parentPoly, parentHeader, - bestRef, bestPoly, bestHeader, previousEdgeMidPoint); + getEdgeMidPoint(parentRef, parentPoly, parentTile, + bestRef, bestPoly, bestTile, previousEdgeMidPoint); } else { vcopy(previousEdgeMidPoint, centerPos); } - for (unsigned int i = bestPoly->firstLink; i != DT_NULL_LINK; i = bestHeader->links[i].next) + for (unsigned int i = bestPoly->firstLink; i != DT_NULL_LINK; i = bestTile->links[i].next) { - const dtLink* link = &bestHeader->links[i]; + const dtLink* link = &bestTile->links[i]; dtPolyRef neighbourRef = link->ref; // Skip invalid neighbours and do not follow back to parent. if (!neighbourRef || neighbourRef == parentRef) continue; // Calc distance to the edge. - const float* va = &bestHeader->verts[bestPoly->verts[link->edge]*3]; - const float* vb = &bestHeader->verts[bestPoly->verts[(link->edge+1) % bestPoly->vertCount]*3]; + const float* va = &bestTile->verts[bestPoly->verts[link->edge]*3]; + const float* vb = &bestTile->verts[bestPoly->verts[(link->edge+1) % bestPoly->vertCount]*3]; float tseg; float distSqr = distancePtSegSqr2D(centerPos, va, vb, tseg); @@ -2019,8 +2023,8 @@ int dtNavMesh::findPolysAround(dtPolyRef centerRef, const float* centerPos, floa // Expand to neighbour it = decodePolyIdTile(neighbourRef); ip = decodePolyIdPoly(neighbourRef); - const dtMeshHeader* neighbourHeader = m_tiles[it].header; - const dtPoly* neighbourPoly = &neighbourHeader->polys[ip]; + const dtMeshTile* neighbourTile = &m_tiles[it]; + const dtPoly* neighbourPoly = &neighbourTile->polys[ip]; if (!passFilter(filter, neighbourPoly->flags)) continue; @@ -2031,8 +2035,8 @@ int dtNavMesh::findPolysAround(dtPolyRef centerRef, const float* centerPos, floa // Cost float edgeMidPoint[3]; - getEdgeMidPoint(bestRef, bestPoly, bestHeader, - neighbourRef, neighbourPoly, neighbourHeader, edgeMidPoint); + getEdgeMidPoint(bestRef, bestPoly, bestTile, + neighbourRef, neighbourPoly, neighbourTile, edgeMidPoint); newNode.total = bestNode->total + vdist(previousEdgeMidPoint, edgeMidPoint); @@ -2106,12 +2110,12 @@ float dtNavMesh::findDistanceToWall(dtPolyRef centerRef, const float* centerPos, const dtPolyRef bestRef = bestNode->id; it = decodePolyIdTile(bestRef); ip = decodePolyIdPoly(bestRef); - const dtMeshHeader* bestHeader = m_tiles[it].header; - const dtPoly* bestPoly = &bestHeader->polys[ip]; + const dtMeshTile* bestTile = &m_tiles[it]; + const dtPoly* bestPoly = &bestTile->polys[ip]; // Get parent poly and tile. dtPolyRef parentRef = 0; - const dtMeshHeader* parentHeader = 0; + const dtMeshTile* parentTile = 0; const dtPoly* parentPoly = 0; if (bestNode->pidx) parentRef = m_nodePool->getNodeAtIdx(bestNode->pidx)->id; @@ -2119,11 +2123,11 @@ float dtNavMesh::findDistanceToWall(dtPolyRef centerRef, const float* centerPos, { it = decodePolyIdTile(parentRef); ip = decodePolyIdPoly(parentRef); - parentHeader = m_tiles[it].header; - parentPoly = &parentHeader->polys[ip]; + parentTile = &m_tiles[it]; + parentPoly = &parentTile->polys[ip]; - getEdgeMidPoint(parentRef, parentPoly, parentHeader, - bestRef, bestPoly, bestHeader, previousEdgeMidPoint); + getEdgeMidPoint(parentRef, parentPoly, parentTile, + bestRef, bestPoly, bestTile, previousEdgeMidPoint); } else { @@ -2138,9 +2142,9 @@ float dtNavMesh::findDistanceToWall(dtPolyRef centerRef, const float* centerPos, { // Tile border. bool solid = true; - for (unsigned int k = bestPoly->firstLink; k != DT_NULL_LINK; k = bestHeader->links[k].next) + for (unsigned int k = bestPoly->firstLink; k != DT_NULL_LINK; k = bestTile->links[k].next) { - const dtLink* link = &bestHeader->links[k]; + const dtLink* link = &bestTile->links[k]; if (link->edge == j) { if (link->ref != 0 && passFilter(filter, getPolyFlags(link->ref))) @@ -2150,15 +2154,15 @@ float dtNavMesh::findDistanceToWall(dtPolyRef centerRef, const float* centerPos, } if (!solid) continue; } - else if (bestPoly->neis[j] && passFilter(filter, bestHeader->polys[bestPoly->neis[j]].flags)) + else if (bestPoly->neis[j] && passFilter(filter, bestTile->polys[bestPoly->neis[j]].flags)) { // Internal edge continue; } // Calc distance to the edge. - const float* vj = &bestHeader->verts[bestPoly->verts[j]*3]; - const float* vi = &bestHeader->verts[bestPoly->verts[i]*3]; + const float* vj = &bestTile->verts[bestPoly->verts[j]*3]; + const float* vi = &bestTile->verts[bestPoly->verts[i]*3]; float tseg; float distSqr = distancePtSegSqr2D(centerPos, vj, vi, tseg); @@ -2174,17 +2178,17 @@ float dtNavMesh::findDistanceToWall(dtPolyRef centerRef, const float* centerPos, hitPos[2] = vj[2] + (vi[2] - vj[2])*tseg; } - for (unsigned int i = bestPoly->firstLink; i != DT_NULL_LINK; i = bestHeader->links[i].next) + for (unsigned int i = bestPoly->firstLink; i != DT_NULL_LINK; i = bestTile->links[i].next) { - const dtLink* link = &bestHeader->links[i]; + const dtLink* link = &bestTile->links[i]; dtPolyRef neighbourRef = link->ref; // Skip invalid neighbours and do not follow back to parent. if (!neighbourRef || neighbourRef == parentRef) continue; // Calc distance to the edge. - const float* va = &bestHeader->verts[bestPoly->verts[link->edge]*3]; - const float* vb = &bestHeader->verts[bestPoly->verts[(link->edge+1) % bestPoly->vertCount]*3]; + const float* va = &bestTile->verts[bestPoly->verts[link->edge]*3]; + const float* vb = &bestTile->verts[bestPoly->verts[(link->edge+1) % bestPoly->vertCount]*3]; float tseg; float distSqr = distancePtSegSqr2D(centerPos, va, vb, tseg); @@ -2195,8 +2199,8 @@ float dtNavMesh::findDistanceToWall(dtPolyRef centerRef, const float* centerPos, // Expand to neighbour. it = decodePolyIdTile(neighbourRef); ip = decodePolyIdPoly(neighbourRef); - const dtMeshHeader* neighbourHeader = m_tiles[it].header; - const dtPoly* neighbourPoly = &neighbourHeader->polys[ip]; + const dtMeshTile* neighbourTile = &m_tiles[it]; + const dtPoly* neighbourPoly = &neighbourTile->polys[ip]; if (!passFilter(filter, neighbourPoly->flags)) continue; @@ -2207,8 +2211,8 @@ float dtNavMesh::findDistanceToWall(dtPolyRef centerRef, const float* centerPos, // Cost float edgeMidPoint[3]; - getEdgeMidPoint(bestRef, bestPoly, bestHeader, - neighbourRef, neighbourPoly, neighbourHeader, edgeMidPoint); + getEdgeMidPoint(bestRef, bestPoly, bestTile, + neighbourRef, neighbourPoly, neighbourTile, edgeMidPoint); newNode.total = bestNode->total + vdist(previousEdgeMidPoint, edgeMidPoint); @@ -2250,7 +2254,7 @@ const dtPoly* dtNavMesh::getPolyByRef(dtPolyRef ref) const if (it >= (unsigned int)m_maxTiles) return 0; if (m_tiles[it].salt != salt || m_tiles[it].header == 0) return 0; if (ip >= (unsigned int)m_tiles[it].header->polyCount) return 0; - return &m_tiles[it].header->polys[ip]; + return &m_tiles[it].polys[ip]; } const float* dtNavMesh::getPolyVertsByRef(dtPolyRef ref) const @@ -2260,7 +2264,7 @@ const float* dtNavMesh::getPolyVertsByRef(dtPolyRef ref) const if (it >= (unsigned int)m_maxTiles) return 0; if (m_tiles[it].salt != salt || m_tiles[it].header == 0) return 0; if (ip >= (unsigned int)m_tiles[it].header->polyCount) return 0; - return m_tiles[it].header->verts; + return m_tiles[it].verts; } const dtLink* dtNavMesh::getPolyLinksByRef(dtPolyRef ref) const @@ -2270,7 +2274,7 @@ const dtLink* dtNavMesh::getPolyLinksByRef(dtPolyRef ref) const if (it >= (unsigned int)m_maxTiles) return 0; if (m_tiles[it].salt != salt || m_tiles[it].header == 0) return 0; if (ip >= (unsigned int)m_tiles[it].header->polyCount) return 0; - return m_tiles[it].header->links; + return m_tiles[it].links; } bool dtNavMesh::isInClosedList(dtPolyRef ref) const diff --git a/RecastDemo/Bin/Recast.app/Contents/MacOS/Recast b/RecastDemo/Bin/Recast.app/Contents/MacOS/Recast index b5f3ccfd1b905e42a92fbcfb0960f74a22867169..f89f3ae7850e3b8dbba84b035e9dc393e6434ba5 100755 GIT binary patch delta 128982 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 O(APP<4be^?^?v}vEe0k4 delta 128525 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

^%{kHCFmj~UP7XUC?jB=56V^Y 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%0D!-7X*Dwl> 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 - 39 - 35 + 13 + 12 1 0 PBXSmartGroupTreeModuleOutlineStateVisibleRectKey - {{0, 370}, {358, 643}} + {{0, 99}, {358, 643}} PBXTopSmartGroupGIDs @@ -323,7 +323,7 @@ PBXProjectModuleGUID 6B8632A30F78115100E2684A PBXProjectModuleLabel - Sample_SoloMeshSimple.cpp + DetourNavMesh.h PBXSplitModuleInNavigatorKey Split0 @@ -331,11 +331,11 @@ PBXProjectModuleGUID 6B8632A40F78115100E2684A PBXProjectModuleLabel - Sample_SoloMeshSimple.cpp + DetourNavMesh.h _historyCapacity 0 bookmark - 6B8036F1113BB180005ED67B + 6B80373A113D1079005ED67B history 6B8DE70D10B01BBF00DF20FB @@ -361,7 +361,6 @@ 6B324E3B11255BA700EBD2FD 6B324E7011256D1000EBD2FD 6B324E7111256D1000EBD2FD - 6B324E7311256D1000EBD2FD 6B324F1311257F9A00EBD2FD 6B324F1E1125818400EBD2FD 6B324F1F1125818400EBD2FD @@ -372,11 +371,8 @@ 6B324FCD1125A7BB00EBD2FD 6BE90FDE112A770600F5C17A 6BE90FDF112A770600F5C17A - 6BE91032112A7D9600F5C17A 6BE91033112A7D9600F5C17A 6BE91085112A898E00F5C17A - 6BE91087112A898E00F5C17A - 6BE91095112A8AC800F5C17A 6BE910BA112A91D900F5C17A 6BE910BB112A91D900F5C17A 6BE910C2112A92A300F5C17A @@ -385,22 +381,26 @@ 6BE910F11130617300F5C17A 6BE910F21130617300F5C17A 6BE910F31130617300F5C17A - 6BE911011130618A00F5C17A 6BE9113A11379F5000F5C17A 6BE9113C11379F5000F5C17A 6B803699113BAA82005ED67B 6B80369C113BAA82005ED67B - 6B8036B8113BAF47005ED67B - 6B8036B9113BAF47005ED67B - 6B8036BA113BAF47005ED67B 6B8036BB113BAF47005ED67B 6B8036BC113BAF47005ED67B 6B8036BE113BAF47005ED67B - 6B8036CF113BAF79005ED67B 6B8036D0113BAF79005ED67B 6B8036EA113BB055005ED67B 6B8036EE113BB180005ED67B - 6B8036EF113BB180005ED67B + 6B8036F6113BB746005ED67B + 6B8036F7113BB746005ED67B + 6B8036F8113BB746005ED67B + 6B8036F9113BB746005ED67B + 6B8036FA113BB746005ED67B + 6B803728113D1079005ED67B + 6B803729113D1079005ED67B + 6B80372A113D1079005ED67B + 6B80372B113D1079005ED67B + 6B80372C113D1079005ED67B prevStack @@ -476,6 +476,24 @@ 6B8036D4113BAF79005ED67B 6B8036D5113BAF79005ED67B 6B8036F0113BB180005ED67B + 6B8036FC113BB746005ED67B + 6B8036FD113BB746005ED67B + 6B8036FE113BB746005ED67B + 6B8036FF113BB746005ED67B + 6B803700113BB746005ED67B + 6B80372D113D1079005ED67B + 6B80372E113D1079005ED67B + 6B80372F113D1079005ED67B + 6B803730113D1079005ED67B + 6B803731113D1079005ED67B + 6B803732113D1079005ED67B + 6B803733113D1079005ED67B + 6B803734113D1079005ED67B + 6B803735113D1079005ED67B + 6B803736113D1079005ED67B + 6B803737113D1079005ED67B + 6B803738113D1079005ED67B + 6B803739113D1079005ED67B SplitCount diff --git a/RecastDemo/Source/Sample_SoloMeshTiled.cpp b/RecastDemo/Source/Sample_SoloMeshTiled.cpp index 7bf1671..881d561 100644 --- a/RecastDemo/Source/Sample_SoloMeshTiled.cpp +++ b/RecastDemo/Source/Sample_SoloMeshTiled.cpp @@ -797,8 +797,8 @@ bool Sample_SoloMeshTiled::handleBuild() tbmin[1] = tileCfg.bmin[2]; tbmax[0] = tileCfg.bmax[0]; tbmax[1] = tileCfg.bmax[2]; - int cid[256];// TODO: Make grow when returning too many items. - const int ncid = rcGetChunksInRect(chunkyMesh, tbmin, tbmax, cid, 256); + int cid[512];// TODO: Make grow when returning too many items. + const int ncid = rcGetChunksInRect(chunkyMesh, tbmin, tbmax, cid, 512); if (!ncid) continue; diff --git a/RecastDemo/Source/main.cpp b/RecastDemo/Source/main.cpp index ecb99c1..712a973 100644 --- a/RecastDemo/Source/main.cpp +++ b/RecastDemo/Source/main.cpp @@ -299,7 +299,7 @@ int main(int argc, char *argv[]) bmin = sample->getBoundsMin(); bmax = sample->getBoundsMax(); } - else + else if (geom) { bmin = geom->getMeshBoundsMin(); bmax = geom->getMeshBoundsMax(); @@ -694,7 +694,7 @@ int main(int argc, char *argv[]) bmin = sample->getBoundsMin(); bmax = sample->getBoundsMax(); } - else + else if (geom) { bmin = geom->getMeshBoundsMin(); bmax = geom->getMeshBoundsMax(); @@ -811,7 +811,7 @@ int main(int argc, char *argv[]) bmin = sample->getBoundsMin(); bmax = sample->getBoundsMax(); } - else + else if (geom) { bmin = geom->getMeshBoundsMin(); bmax = geom->getMeshBoundsMax();