diff --git a/DebugUtils/Source/DetourDebugDraw.cpp b/DebugUtils/Source/DetourDebugDraw.cpp index 20a8bbb..02b9102 100755 --- a/DebugUtils/Source/DetourDebugDraw.cpp +++ b/DebugUtils/Source/DetourDebugDraw.cpp @@ -421,7 +421,7 @@ void duDebugDrawNavMeshPoly(duDebugDraw* dd, const dtNavMesh& mesh, dtPolyRef re const dtMeshTile* tile = 0; const dtPoly* poly = 0; - if (mesh.getTileAndPolyByRef(ref, &tile, &poly) != DT_SUCCESS) + if (dtStatusFailed(mesh.getTileAndPolyByRef(ref, &tile, &poly))) return; dd->depthMask(false); diff --git a/Detour/Include/DetourNavMesh.h b/Detour/Include/DetourNavMesh.h index dfb6e4a..474da2b 100644 --- a/Detour/Include/DetourNavMesh.h +++ b/Detour/Include/DetourNavMesh.h @@ -66,15 +66,48 @@ enum dtPolyTypes DT_POLYTYPE_OFFMESH_CONNECTION = 1, // Off-mesh connections. }; -enum dtStatus + +typedef unsigned int dtStatus; + +// High level status. +static const unsigned int DT_FAILURE = 1 << 31; // Operation failed. +static const unsigned int DT_SUCCESS = 1 << 30; // Operation succeed. +static const unsigned int DT_IN_PROGRESS = 1 << 29; // Operation still in progress. + +// Detail information for status. +static const unsigned int DT_STATUS_DETAIL_MASK = 0x0ffffff; +static const unsigned int DT_WRONG_MAGIC = 1 << 0; // Input data is not recognized. +static const unsigned int DT_WRONG_VERSION = 1 << 1; // Input data is in wrong version. +static const unsigned int DT_OUT_OF_MEMORY = 1 << 2; // Operation ran out of memory. +static const unsigned int DT_INVALID_PARAM = 1 << 3; // An input parameter was invalid. +static const unsigned int DT_BUFFER_TOO_SMALL = 1 << 4; // Result buffer for the query was too small to store all results. +static const unsigned int DT_OUT_OF_NODES = 1 << 5; // Query ran out of nodes during search. +static const unsigned int DT_PARTIAL_RESULT = 1 << 6; // Query did not reach the end location, returning best guess. + + +// Returns true of status is success. +inline bool dtStatusSucceed(dtStatus status) { - DT_FAILURE = 0, // Operation failed. - DT_FAILURE_DATA_MAGIC, - DT_FAILURE_DATA_VERSION, - DT_FAILURE_OUT_OF_MEMORY, - DT_SUCCESS, // Operation succeed. - DT_IN_PROGRESS, // Operation still in progress. -}; + return (status & DT_SUCCESS) != 0; +} + +// Returns true of status is failure. +inline bool dtStatusFailed(dtStatus status) +{ + return (status & DT_FAILURE) != 0; +} + +// Returns true of status is in progress. +inline bool dtStatusInProgress(dtStatus status) +{ + return (status & DT_IN_PROGRESS) != 0; +} + +// Returns true if specific detail is set. +inline bool dtStatusDetail(dtStatus status, unsigned int detail) +{ + return (status & detail) != 0; +} // Structure describing the navigation polygon data. @@ -384,8 +417,8 @@ private: dtPolyRef findNearestPolyInTile(const dtMeshTile* tile, const float* center, const float* extents, float* nearestPt) const; // Returns closest point on polygon. - dtStatus closestPointOnPolyInTile(const dtMeshTile* tile, unsigned int ip, - const float* pos, float* closest) const; + void closestPointOnPolyInTile(const dtMeshTile* tile, unsigned int ip, + const float* pos, float* closest) const; dtNavMeshParams m_params; // Current initialization params. TODO: do not store this info twice. float m_orig[3]; // Origin of the tile (0,0) diff --git a/Detour/Include/DetourNavMeshQuery.h b/Detour/Include/DetourNavMeshQuery.h index 818a444..105e493 100644 --- a/Detour/Include/DetourNavMeshQuery.h +++ b/Detour/Include/DetourNavMeshQuery.h @@ -365,7 +365,7 @@ private: dtPolyRef findNearestPolyInTile(const dtMeshTile* tile, const float* center, const float* extents, const dtQueryFilter* filter, float* nearestPt) const; // Returns closest point on polygon. - dtStatus closestPointOnPolyInTile(const dtMeshTile* tile, const dtPoly* poly, const float* pos, float* closest) const; + void closestPointOnPolyInTile(const dtMeshTile* tile, const dtPoly* poly, const float* pos, float* closest) const; // Returns portal points between two polygons. dtStatus getPortalPoints(dtPolyRef from, dtPolyRef to, float* left, float* right, diff --git a/Detour/Source/DetourNavMesh.cpp b/Detour/Source/DetourNavMesh.cpp index eaeff12..e806eae 100644 --- a/Detour/Source/DetourNavMesh.cpp +++ b/Detour/Source/DetourNavMesh.cpp @@ -189,10 +189,10 @@ dtStatus dtNavMesh::init(const dtNavMeshParams* params) m_tiles = (dtMeshTile*)dtAlloc(sizeof(dtMeshTile)*m_maxTiles, DT_ALLOC_PERM); if (!m_tiles) - return DT_FAILURE_OUT_OF_MEMORY; + return DT_FAILURE | DT_OUT_OF_MEMORY; m_posLookup = (dtMeshTile**)dtAlloc(sizeof(dtMeshTile*)*m_tileLutSize, DT_ALLOC_PERM); if (!m_posLookup) - return DT_FAILURE_OUT_OF_MEMORY; + return DT_FAILURE | DT_OUT_OF_MEMORY; memset(m_tiles, 0, sizeof(dtMeshTile)*m_maxTiles); memset(m_posLookup, 0, sizeof(dtMeshTile*)*m_tileLutSize); m_nextFree = 0; @@ -208,7 +208,7 @@ dtStatus dtNavMesh::init(const dtNavMeshParams* params) m_polyBits = dtIlog2(dtNextPow2((unsigned int)params->maxPolys)); m_saltBits = 32 - m_tileBits - m_polyBits; if (m_saltBits < 10) - return DT_FAILURE; + return DT_FAILURE | DT_INVALID_PARAM; return DT_SUCCESS; } @@ -218,9 +218,9 @@ dtStatus dtNavMesh::init(unsigned char* data, const int dataSize, const int flag // Make sure the data is in right format. dtMeshHeader* header = (dtMeshHeader*)data; if (header->magic != DT_NAVMESH_MAGIC) - return DT_FAILURE_DATA_MAGIC; + return DT_FAILURE | DT_WRONG_MAGIC; if (header->version != DT_NAVMESH_VERSION) - return DT_FAILURE_DATA_VERSION; + return DT_FAILURE | DT_WRONG_VERSION; dtNavMeshParams params; dtVcopy(params.orig, header->bmin); @@ -229,9 +229,9 @@ dtStatus dtNavMesh::init(unsigned char* data, const int dataSize, const int flag params.maxTiles = 1; params.maxPolys = header->polyCount; - dtStatus res = init(¶ms); - if (res != DT_SUCCESS) - return res; + dtStatus status = init(¶ms); + if (dtStatusFailed(status)) + return status; return addTile(data, dataSize, flags, 0, 0); } @@ -555,8 +555,8 @@ void dtNavMesh::connectIntOffMeshLinks(dtMeshTile* tile) } } -dtStatus dtNavMesh::closestPointOnPolyInTile(const dtMeshTile* tile, unsigned int ip, - const float* pos, float* closest) const +void dtNavMesh::closestPointOnPolyInTile(const dtMeshTile* tile, unsigned int ip, + const float* pos, float* closest) const { const dtPoly* poly = &tile->polys[ip]; @@ -583,8 +583,6 @@ dtStatus dtNavMesh::closestPointOnPolyInTile(const dtMeshTile* tile, unsigned in closestDistSqr = d; } } - - return DT_SUCCESS; } dtPolyRef dtNavMesh::findNearestPolyInTile(const dtMeshTile* tile, @@ -606,8 +604,7 @@ dtPolyRef dtNavMesh::findNearestPolyInTile(const dtMeshTile* tile, { dtPolyRef ref = polys[i]; float closestPtPoly[3]; - if (closestPointOnPolyInTile(tile, decodePolyIdPoly(ref), center, closestPtPoly) != DT_SUCCESS) - continue; + closestPointOnPolyInTile(tile, decodePolyIdPoly(ref), center, closestPtPoly); float d = dtVdistSqr(center, closestPtPoly); if (d < nearestDistanceSqr) { @@ -708,9 +705,9 @@ dtStatus dtNavMesh::addTile(unsigned char* data, int dataSize, int flags, // Make sure the data is in right format. dtMeshHeader* header = (dtMeshHeader*)data; if (header->magic != DT_NAVMESH_MAGIC) - return DT_FAILURE_DATA_MAGIC; + return DT_FAILURE | DT_WRONG_MAGIC; if (header->version != DT_NAVMESH_VERSION) - return DT_FAILURE_DATA_VERSION; + return DT_FAILURE | DT_WRONG_VERSION; // Make sure the location is free. if (getTileAt(header->x, header->y)) @@ -732,7 +729,7 @@ dtStatus dtNavMesh::addTile(unsigned char* data, int dataSize, int flags, // Try to relocate the tile to specific index with same salt. int tileIndex = (int)decodePolyIdTile((dtPolyRef)lastRef); if (tileIndex >= m_maxTiles) - return DT_FAILURE_OUT_OF_MEMORY; + return DT_FAILURE | DT_OUT_OF_MEMORY; // Try to find the specific tile id from the free list. dtMeshTile* target = &m_tiles[tileIndex]; dtMeshTile* prev = 0; @@ -744,7 +741,7 @@ dtStatus dtNavMesh::addTile(unsigned char* data, int dataSize, int flags, } // Could not find the correct location. if (tile != target) - return DT_FAILURE_OUT_OF_MEMORY; + return DT_FAILURE | DT_OUT_OF_MEMORY; // Remove from freelist if (!prev) m_nextFree = tile->next; @@ -757,7 +754,7 @@ dtStatus dtNavMesh::addTile(unsigned char* data, int dataSize, int flags, // Make sure we could allocate a tile. if (!tile) - return DT_FAILURE_OUT_OF_MEMORY; + return DT_FAILURE | DT_OUT_OF_MEMORY; // Insert tile into the position lut. int h = computeTileHash(header->x, header->y, m_tileLutMask); @@ -910,11 +907,12 @@ void dtNavMesh::calcTileLoc(const float* pos, int* tx, int* ty) const dtStatus dtNavMesh::getTileAndPolyByRef(const dtPolyRef ref, const dtMeshTile** tile, const dtPoly** poly) const { + if (!ref) return DT_FAILURE; unsigned int salt, it, ip; decodePolyId(ref, salt, it, ip); - if (it >= (unsigned int)m_maxTiles) return DT_FAILURE; - if (m_tiles[it].salt != salt || m_tiles[it].header == 0) return DT_FAILURE; - if (ip >= (unsigned int)m_tiles[it].header->polyCount) return DT_FAILURE; + if (it >= (unsigned int)m_maxTiles) return DT_FAILURE | DT_INVALID_PARAM; + if (m_tiles[it].salt != salt || m_tiles[it].header == 0) return DT_FAILURE | DT_INVALID_PARAM; + if (ip >= (unsigned int)m_tiles[it].header->polyCount) return DT_FAILURE | DT_INVALID_PARAM; *tile = &m_tiles[it]; *poly = &m_tiles[it].polys[ip]; return DT_SUCCESS; @@ -930,6 +928,7 @@ void dtNavMesh::getTileAndPolyByRefUnsafe(const dtPolyRef ref, const dtMeshTile* bool dtNavMesh::isValidPolyRef(dtPolyRef ref) const { + if (!ref) return false; unsigned int salt, it, ip; decodePolyId(ref, salt, it, ip); if (it >= (unsigned int)m_maxTiles) return false; @@ -941,14 +940,14 @@ bool dtNavMesh::isValidPolyRef(dtPolyRef ref) const dtStatus dtNavMesh::removeTile(dtTileRef ref, unsigned char** data, int* dataSize) { if (!ref) - return DT_FAILURE; + return DT_FAILURE | DT_INVALID_PARAM; unsigned int tileIndex = decodePolyIdTile((dtPolyRef)ref); unsigned int tileSalt = decodePolyIdSalt((dtPolyRef)ref); if ((int)tileIndex >= m_maxTiles) - return DT_FAILURE; + return DT_FAILURE | DT_INVALID_PARAM; dtMeshTile* tile = &m_tiles[tileIndex]; if (tile->salt != tileSalt) - return DT_FAILURE; + return DT_FAILURE | DT_INVALID_PARAM; // Remove tile from hash lookup. int h = computeTileHash(tile->header->x,tile->header->y,m_tileLutMask); @@ -1057,7 +1056,7 @@ dtStatus dtNavMesh::storeTileState(const dtMeshTile* tile, unsigned char* data, // Make sure there is enough space to store the state. const int sizeReq = getTileStateSize(tile); if (maxDataSize < sizeReq) - return DT_FAILURE; + return DT_FAILURE | DT_BUFFER_TOO_SMALL; dtTileState* tileState = (dtTileState*)data; data += dtAlign4(sizeof(dtTileState)); dtPolyState* polyStates = (dtPolyState*)data; data += dtAlign4(sizeof(dtPolyState) * tile->header->polyCount); @@ -1084,18 +1083,18 @@ dtStatus dtNavMesh::restoreTileState(dtMeshTile* tile, const unsigned char* data // Make sure there is enough space to store the state. const int sizeReq = getTileStateSize(tile); if (maxDataSize < sizeReq) - return DT_FAILURE; + return DT_FAILURE | DT_INVALID_PARAM; const dtTileState* tileState = (const dtTileState*)data; data += dtAlign4(sizeof(dtTileState)); const dtPolyState* polyStates = (const dtPolyState*)data; data += dtAlign4(sizeof(dtPolyState) * tile->header->polyCount); // Check that the restore is possible. if (tileState->magic != DT_NAVMESH_STATE_MAGIC) - return DT_FAILURE_DATA_MAGIC; + return DT_FAILURE | DT_WRONG_MAGIC; if (tileState->version != DT_NAVMESH_STATE_VERSION) - return DT_FAILURE_DATA_VERSION; + return DT_FAILURE | DT_WRONG_VERSION; if (tileState->ref != getTileRef(tile)) - return DT_FAILURE; + return DT_FAILURE | DT_INVALID_PARAM; // Restore per poly state. for (int i = 0; i < tile->header->polyCount; ++i) @@ -1114,12 +1113,15 @@ dtStatus dtNavMesh::getOffMeshConnectionPolyEndPoints(dtPolyRef prevRef, dtPolyR { unsigned int salt, it, ip; + if (!polyRef) + return DT_FAILURE; + // Get current polygon decodePolyId(polyRef, salt, it, ip); - if (it >= (unsigned int)m_maxTiles) return DT_FAILURE; - if (m_tiles[it].salt != salt || m_tiles[it].header == 0) return DT_FAILURE; + if (it >= (unsigned int)m_maxTiles) return DT_FAILURE | DT_INVALID_PARAM; + if (m_tiles[it].salt != salt || m_tiles[it].header == 0) return DT_FAILURE | DT_INVALID_PARAM; const dtMeshTile* tile = &m_tiles[it]; - if (ip >= (unsigned int)tile->header->polyCount) return DT_FAILURE; + if (ip >= (unsigned int)tile->header->polyCount) return DT_FAILURE | DT_INVALID_PARAM; const dtPoly* poly = &tile->polys[ip]; // Make sure that the current poly is indeed off-mesh link. @@ -1154,6 +1156,9 @@ const dtOffMeshConnection* dtNavMesh::getOffMeshConnectionByRef(dtPolyRef ref) c { unsigned int salt, it, ip; + if (!ref) + return 0; + // Get current polygon decodePolyId(ref, salt, it, ip); if (it >= (unsigned int)m_maxTiles) return 0; @@ -1174,12 +1179,13 @@ const dtOffMeshConnection* dtNavMesh::getOffMeshConnectionByRef(dtPolyRef ref) c dtStatus dtNavMesh::setPolyFlags(dtPolyRef ref, unsigned short flags) { + if (!ref) return DT_FAILURE; unsigned int salt, it, ip; decodePolyId(ref, salt, it, ip); - if (it >= (unsigned int)m_maxTiles) return DT_FAILURE; - if (m_tiles[it].salt != salt || m_tiles[it].header == 0) return DT_FAILURE; + if (it >= (unsigned int)m_maxTiles) return DT_FAILURE | DT_INVALID_PARAM; + if (m_tiles[it].salt != salt || m_tiles[it].header == 0) return DT_FAILURE | DT_INVALID_PARAM; dtMeshTile* tile = &m_tiles[it]; - if (ip >= (unsigned int)tile->header->polyCount) return DT_FAILURE; + if (ip >= (unsigned int)tile->header->polyCount) return DT_FAILURE | DT_INVALID_PARAM; dtPoly* poly = &tile->polys[ip]; // Change flags. @@ -1190,12 +1196,13 @@ dtStatus dtNavMesh::setPolyFlags(dtPolyRef ref, unsigned short flags) dtStatus dtNavMesh::getPolyFlags(dtPolyRef ref, unsigned short* resultFlags) const { + if (!ref) return DT_FAILURE; unsigned int salt, it, ip; decodePolyId(ref, salt, it, ip); - if (it >= (unsigned int)m_maxTiles) return DT_FAILURE; - if (m_tiles[it].salt != salt || m_tiles[it].header == 0) return DT_FAILURE; + if (it >= (unsigned int)m_maxTiles) return DT_FAILURE | DT_INVALID_PARAM; + if (m_tiles[it].salt != salt || m_tiles[it].header == 0) return DT_FAILURE | DT_INVALID_PARAM; const dtMeshTile* tile = &m_tiles[it]; - if (ip >= (unsigned int)tile->header->polyCount) return DT_FAILURE; + if (ip >= (unsigned int)tile->header->polyCount) return DT_FAILURE | DT_INVALID_PARAM; const dtPoly* poly = &tile->polys[ip]; *resultFlags = poly->flags; @@ -1205,12 +1212,13 @@ dtStatus dtNavMesh::getPolyFlags(dtPolyRef ref, unsigned short* resultFlags) con dtStatus dtNavMesh::setPolyArea(dtPolyRef ref, unsigned char area) { + if (!ref) return DT_FAILURE; unsigned int salt, it, ip; decodePolyId(ref, salt, it, ip); - if (it >= (unsigned int)m_maxTiles) return DT_FAILURE; - if (m_tiles[it].salt != salt || m_tiles[it].header == 0) return DT_FAILURE; + if (it >= (unsigned int)m_maxTiles) return DT_FAILURE | DT_INVALID_PARAM; + if (m_tiles[it].salt != salt || m_tiles[it].header == 0) return DT_FAILURE | DT_INVALID_PARAM; dtMeshTile* tile = &m_tiles[it]; - if (ip >= (unsigned int)tile->header->polyCount) return DT_FAILURE; + if (ip >= (unsigned int)tile->header->polyCount) return DT_FAILURE | DT_INVALID_PARAM; dtPoly* poly = &tile->polys[ip]; poly->setArea(area); @@ -1220,12 +1228,13 @@ dtStatus dtNavMesh::setPolyArea(dtPolyRef ref, unsigned char area) dtStatus dtNavMesh::getPolyArea(dtPolyRef ref, unsigned char* resultArea) const { + if (!ref) return DT_FAILURE; unsigned int salt, it, ip; decodePolyId(ref, salt, it, ip); - if (it >= (unsigned int)m_maxTiles) return DT_FAILURE; - if (m_tiles[it].salt != salt || m_tiles[it].header == 0) return DT_FAILURE; + if (it >= (unsigned int)m_maxTiles) return DT_FAILURE | DT_INVALID_PARAM; + if (m_tiles[it].salt != salt || m_tiles[it].header == 0) return DT_FAILURE | DT_INVALID_PARAM; const dtMeshTile* tile = &m_tiles[it]; - if (ip >= (unsigned int)tile->header->polyCount) return DT_FAILURE; + if (ip >= (unsigned int)tile->header->polyCount) return DT_FAILURE | DT_INVALID_PARAM; const dtPoly* poly = &tile->polys[ip]; *resultArea = poly->getArea(); diff --git a/Detour/Source/DetourNavMeshQuery.cpp b/Detour/Source/DetourNavMeshQuery.cpp index 44aafe2..2a2ebfd 100644 --- a/Detour/Source/DetourNavMeshQuery.cpp +++ b/Detour/Source/DetourNavMeshQuery.cpp @@ -121,7 +121,7 @@ dtStatus dtNavMeshQuery::init(const dtNavMesh* nav, const int maxNodes) } m_nodePool = new (dtAlloc(sizeof(dtNodePool), DT_ALLOC_PERM)) dtNodePool(maxNodes, dtNextPow2(maxNodes/4)); if (!m_nodePool) - return DT_FAILURE_OUT_OF_MEMORY; + return DT_FAILURE | DT_OUT_OF_MEMORY; } else { @@ -132,7 +132,7 @@ dtStatus dtNavMeshQuery::init(const dtNavMesh* nav, const int maxNodes) { m_tinyNodePool = new (dtAlloc(sizeof(dtNodePool), DT_ALLOC_PERM)) dtNodePool(64, 32); if (!m_tinyNodePool) - return DT_FAILURE_OUT_OF_MEMORY; + return DT_FAILURE | DT_OUT_OF_MEMORY; } else { @@ -150,7 +150,7 @@ dtStatus dtNavMeshQuery::init(const dtNavMesh* nav, const int maxNodes) } m_openList = new (dtAlloc(sizeof(dtNodeQueue), DT_ALLOC_PERM)) dtNodeQueue(maxNodes); if (!m_openList) - return DT_FAILURE_OUT_OF_MEMORY; + return DT_FAILURE | DT_OUT_OF_MEMORY; } else { @@ -166,16 +166,18 @@ dtStatus dtNavMeshQuery::closestPointOnPoly(dtPolyRef ref, const float* pos, flo dtAssert(m_nav); const dtMeshTile* tile = 0; const dtPoly* poly = 0; - if (m_nav->getTileAndPolyByRef(ref, &tile, &poly) != DT_SUCCESS) - return DT_FAILURE; - if (!tile) return DT_FAILURE; - if (closestPointOnPolyInTile(tile, poly, pos, closest) != DT_SUCCESS) - return DT_FAILURE; + if (dtStatusFailed(m_nav->getTileAndPolyByRef(ref, &tile, &poly))) + return DT_FAILURE | DT_INVALID_PARAM; + if (!tile) + return DT_FAILURE | DT_INVALID_PARAM; + + closestPointOnPolyInTile(tile, poly, pos, closest); + return DT_SUCCESS; } -dtStatus dtNavMeshQuery::closestPointOnPolyInTile(const dtMeshTile* tile, const dtPoly* poly, - const float* pos, float* closest) const +void dtNavMeshQuery::closestPointOnPolyInTile(const dtMeshTile* tile, const dtPoly* poly, + const float* pos, float* closest) const { const unsigned int ip = (unsigned int)(poly - tile->polys); const dtPolyDetail* pd = &tile->detailMeshes[ip]; @@ -253,8 +255,6 @@ dtStatus dtNavMeshQuery::closestPointOnPolyInTile(const dtMeshTile* tile, const closestDistSqr = d; } } - - return DT_SUCCESS; } dtStatus dtNavMeshQuery::closestPointOnPolyBoundary(dtPolyRef ref, const float* pos, float* closest) const @@ -263,8 +263,8 @@ dtStatus dtNavMeshQuery::closestPointOnPolyBoundary(dtPolyRef ref, const float* const dtMeshTile* tile = 0; const dtPoly* poly = 0; - if (m_nav->getTileAndPolyByRef(ref, &tile, &poly) != DT_SUCCESS) - return DT_FAILURE; + if (dtStatusFailed(m_nav->getTileAndPolyByRef(ref, &tile, &poly))) + return DT_FAILURE | DT_INVALID_PARAM; // Collect vertices. float verts[DT_VERTS_PER_POLYGON*3]; @@ -311,8 +311,8 @@ dtStatus dtNavMeshQuery::getPolyHeight(dtPolyRef ref, const float* pos, float* h const dtMeshTile* tile = 0; const dtPoly* poly = 0; - if (m_nav->getTileAndPolyByRef(ref, &tile, &poly) != DT_SUCCESS) - return DT_FAILURE; + if (dtStatusFailed(m_nav->getTileAndPolyByRef(ref, &tile, &poly))) + return DT_FAILURE | DT_INVALID_PARAM; if (poly->getType() == DT_POLYTYPE_OFFMESH_CONNECTION) { @@ -350,7 +350,7 @@ dtStatus dtNavMeshQuery::getPolyHeight(dtPolyRef ref, const float* pos, float* h } } - return DT_FAILURE; + return DT_FAILURE | DT_INVALID_PARAM; } dtStatus dtNavMeshQuery::findNearestPoly(const float* center, const float* extents, @@ -364,8 +364,8 @@ dtStatus dtNavMeshQuery::findNearestPoly(const float* center, const float* exten // Get nearby polygons from proximity grid. dtPolyRef polys[128]; int polyCount = 0; - if (queryPolygons(center, extents, filter, polys, &polyCount, 128) != DT_SUCCESS) - return DT_FAILURE; + if (dtStatusFailed(queryPolygons(center, extents, filter, polys, &polyCount, 128))) + return DT_FAILURE | DT_INVALID_PARAM; // Find nearest polygon amongst the nearby polygons. dtPolyRef nearest = 0; @@ -374,8 +374,7 @@ dtStatus dtNavMeshQuery::findNearestPoly(const float* center, const float* exten { dtPolyRef ref = polys[i]; float closestPtPoly[3]; - if (closestPointOnPoly(ref, center, closestPtPoly) != DT_SUCCESS) - continue; + closestPointOnPoly(ref, center, closestPtPoly); float d = dtVdistSqr(center, closestPtPoly); if (d < nearestDistanceSqr) { @@ -413,8 +412,7 @@ dtPolyRef dtNavMeshQuery::findNearestPolyInTile(const dtMeshTile* tile, const fl dtPolyRef ref = polys[i]; const dtPoly* poly = &tile->polys[m_nav->decodePolyIdPoly(ref)]; float closestPtPoly[3]; - if (closestPointOnPolyInTile(tile, poly, center, closestPtPoly) != DT_SUCCESS) - continue; + closestPointOnPolyInTile(tile, poly, center, closestPtPoly); float d = dtVdistSqr(center, closestPtPoly); if (d < nearestDistanceSqr) @@ -547,7 +545,7 @@ dtStatus dtNavMeshQuery::queryPolygons(const float* center, const float* extents if (n >= maxPolys) { *polyCount = n; - return DT_SUCCESS; + return DT_SUCCESS | DT_BUFFER_TOO_SMALL; } } } @@ -568,14 +566,14 @@ dtStatus dtNavMeshQuery::findPath(dtPolyRef startRef, dtPolyRef endRef, *pathCount = 0; if (!startRef || !endRef) - return DT_FAILURE; + return DT_FAILURE | DT_INVALID_PARAM; if (!maxPath) - return DT_FAILURE; + return DT_FAILURE | DT_INVALID_PARAM; // Validate input if (!m_nav->isValidPolyRef(startRef) || !m_nav->isValidPolyRef(endRef)) - return DT_FAILURE; + return DT_FAILURE | DT_INVALID_PARAM; if (startRef == endRef) { @@ -599,6 +597,8 @@ dtStatus dtNavMeshQuery::findPath(dtPolyRef startRef, dtPolyRef endRef, dtNode* lastBestNode = startNode; float lastBestNodeCost = startNode->total; + dtStatus status = DT_SUCCESS; + while (!m_openList->empty()) { // Remove node from open list and put it in closed list. @@ -648,7 +648,10 @@ dtStatus dtNavMeshQuery::findPath(dtPolyRef startRef, dtPolyRef endRef, dtNode* neighbourNode = m_nodePool->getNode(neighbourRef); if (!neighbourNode) + { + status |= DT_OUT_OF_NODES; continue; + } // If the node is visited the first time, calculate node position. if (neighbourNode->flags == 0) @@ -726,6 +729,9 @@ dtStatus dtNavMeshQuery::findPath(dtPolyRef startRef, dtPolyRef endRef, } } + if (lastBestNode->id != endRef) + status |= DT_PARTIAL_RESULT; + // Reverse the path. dtNode* prev = 0; dtNode* node = lastBestNode; @@ -744,13 +750,18 @@ dtStatus dtNavMeshQuery::findPath(dtPolyRef startRef, dtPolyRef endRef, do { path[n++] = node->id; + if (n >= maxPath) + { + status |= DT_BUFFER_TOO_SMALL; + break; + } node = m_nodePool->getNodeAtIdx(node->pidx); } - while (node && n < maxPath); + while (node); *pathCount = n; - return DT_SUCCESS; + return status; } dtStatus dtNavMeshQuery::initSlicedFindPath(dtPolyRef startRef, dtPolyRef endRef, @@ -771,11 +782,11 @@ dtStatus dtNavMeshQuery::initSlicedFindPath(dtPolyRef startRef, dtPolyRef endRef m_query.filter = filter; if (!startRef || !endRef) - return DT_FAILURE; + return DT_FAILURE | DT_INVALID_PARAM; // Validate input if (!m_nav->isValidPolyRef(startRef) || !m_nav->isValidPolyRef(endRef)) - return DT_FAILURE; + return DT_FAILURE | DT_INVALID_PARAM; if (startRef == endRef) { @@ -804,7 +815,7 @@ dtStatus dtNavMeshQuery::initSlicedFindPath(dtPolyRef startRef, dtPolyRef endRef dtStatus dtNavMeshQuery::updateSlicedFindPath(const int maxIter) { - if (m_query.status!= DT_IN_PROGRESS) + if (!dtStatusInProgress(m_query.status)) return m_query.status; // Make sure the request is still valid. @@ -828,7 +839,8 @@ dtStatus dtNavMeshQuery::updateSlicedFindPath(const int maxIter) if (bestNode->id == m_query.endRef) { m_query.lastBestNode = bestNode; - m_query.status = DT_SUCCESS; + const dtStatus details = m_query.status & DT_STATUS_DETAIL_MASK; + m_query.status = DT_SUCCESS | details; return m_query.status; } @@ -837,7 +849,7 @@ dtStatus dtNavMeshQuery::updateSlicedFindPath(const int maxIter) const dtPolyRef bestRef = bestNode->id; const dtMeshTile* bestTile = 0; const dtPoly* bestPoly = 0; - if (m_nav->getTileAndPolyByRef(bestRef, &bestTile, &bestPoly) != DT_SUCCESS) + if (dtStatusFailed(m_nav->getTileAndPolyByRef(bestRef, &bestTile, &bestPoly))) { // The polygon has disappeared during the sliced query, fail. m_query.status = DT_FAILURE; @@ -852,7 +864,7 @@ dtStatus dtNavMeshQuery::updateSlicedFindPath(const int maxIter) parentRef = m_nodePool->getNodeAtIdx(bestNode->pidx)->id; if (parentRef) { - if (m_nav->getTileAndPolyByRef(parentRef, &parentTile, &parentPoly) != DT_SUCCESS) + if (dtStatusFailed(m_nav->getTileAndPolyByRef(parentRef, &parentTile, &parentPoly))) { // The polygon has disappeared during the sliced query, fail. m_query.status = DT_FAILURE; @@ -879,7 +891,10 @@ dtStatus dtNavMeshQuery::updateSlicedFindPath(const int maxIter) dtNode* neighbourNode = m_nodePool->getNode(neighbourRef); if (!neighbourNode) + { + m_query.status |= DT_OUT_OF_NODES; continue; + } // If the node is visited the first time, calculate node position. if (neighbourNode->flags == 0) @@ -959,7 +974,10 @@ dtStatus dtNavMeshQuery::updateSlicedFindPath(const int maxIter) // Exhausted all nodes, but could not find path. if (m_openList->empty()) - m_query.status = DT_SUCCESS; + { + const dtStatus details = m_query.status & DT_STATUS_DETAIL_MASK; + m_query.status = DT_SUCCESS | details; + } return m_query.status; } @@ -968,7 +986,7 @@ dtStatus dtNavMeshQuery::finalizeSlicedFindPath(dtPolyRef* path, int* pathCount, { *pathCount = 0; - if (m_query.status != DT_SUCCESS) + if (dtStatusFailed(m_query.status)) { // Reset query. memset(&m_query, 0, sizeof(dtQueryData)); @@ -986,6 +1004,10 @@ dtStatus dtNavMeshQuery::finalizeSlicedFindPath(dtPolyRef* path, int* pathCount, { // Reverse the path. dtAssert(m_query.lastBestNode); + + if (m_query.lastBestNode->id != m_query.endRef) + m_query.status |= DT_PARTIAL_RESULT; + dtNode* prev = 0; dtNode* node = m_query.lastBestNode; do @@ -1002,17 +1024,24 @@ dtStatus dtNavMeshQuery::finalizeSlicedFindPath(dtPolyRef* path, int* pathCount, do { path[n++] = node->id; + if (n >= maxPath) + { + m_query.status |= DT_BUFFER_TOO_SMALL; + break; + } node = m_nodePool->getNodeAtIdx(node->pidx); } - while (node && n < maxPath); + while (node); } + const dtStatus details = m_query.status & DT_STATUS_DETAIL_MASK; + // Reset query. memset(&m_query, 0, sizeof(dtQueryData)); *pathCount = n; - return DT_SUCCESS; + return DT_SUCCESS | details; } dtStatus dtNavMeshQuery::finalizeSlicedFindPathPartial(const dtPolyRef* existing, const int existingSize, @@ -1025,7 +1054,7 @@ dtStatus dtNavMeshQuery::finalizeSlicedFindPathPartial(const dtPolyRef* existing return DT_FAILURE; } - if (m_query.status != DT_SUCCESS && m_query.status != DT_IN_PROGRESS) + if (dtStatusFailed(m_query.status)) { // Reset query. memset(&m_query, 0, sizeof(dtQueryData)); @@ -1071,17 +1100,24 @@ dtStatus dtNavMeshQuery::finalizeSlicedFindPathPartial(const dtPolyRef* existing do { path[n++] = node->id; + if (n >= maxPath) + { + m_query.status |= DT_BUFFER_TOO_SMALL; + break; + } node = m_nodePool->getNodeAtIdx(node->pidx); } - while (node && n < maxPath); + while (node); } + const dtStatus details = m_query.status & DT_STATUS_DETAIL_MASK; + // Reset query. memset(&m_query, 0, sizeof(dtQueryData)); *pathCount = n; - return DT_SUCCESS; + return DT_SUCCESS | details; } @@ -1095,17 +1131,17 @@ dtStatus dtNavMeshQuery::findStraightPath(const float* startPos, const float* en *straightPathCount = 0; if (!maxStraightPath) - return DT_FAILURE; + return DT_FAILURE | DT_INVALID_PARAM; if (!path[0]) - return DT_FAILURE; + return DT_FAILURE | DT_INVALID_PARAM; int n = 0; // TODO: Should this be callers responsibility? float closestStartPos[3]; - if (closestPointOnPolyBoundary(path[0], startPos, closestStartPos) != DT_SUCCESS) - return DT_FAILURE; + if (dtStatusFailed(closestPointOnPolyBoundary(path[0], startPos, closestStartPos))) + return DT_FAILURE | DT_INVALID_PARAM; // Add start point. dtVcopy(&straightPath[n*3], closestStartPos); @@ -1117,12 +1153,12 @@ dtStatus dtNavMeshQuery::findStraightPath(const float* startPos, const float* en if (n >= maxStraightPath) { *straightPathCount = n; - return DT_SUCCESS; + return DT_SUCCESS | DT_BUFFER_TOO_SMALL; } float closestEndPos[3]; - if (closestPointOnPolyBoundary(path[pathSize-1], endPos, closestEndPos) != DT_SUCCESS) - return DT_FAILURE; + if (dtStatusFailed(closestPointOnPolyBoundary(path[pathSize-1], endPos, closestEndPos))) + return DT_FAILURE | DT_INVALID_PARAM; if (pathSize > 1) { @@ -1148,10 +1184,10 @@ dtStatus dtNavMeshQuery::findStraightPath(const float* startPos, const float* en if (i+1 < pathSize) { // Next portal. - if (getPortalPoints(path[i], path[i+1], left, right, fromType, toType) != DT_SUCCESS) + if (dtStatusFailed(getPortalPoints(path[i], path[i+1], left, right, fromType, toType))) { - if (closestPointOnPolyBoundary(path[i], endPos, closestEndPos) != DT_SUCCESS) - return DT_FAILURE; + if (dtStatusFailed(closestPointOnPolyBoundary(path[i], endPos, closestEndPos))) + return DT_FAILURE | DT_INVALID_PARAM; dtVcopy(&straightPath[n*3], closestEndPos); if (straightPathFlags) @@ -1215,7 +1251,7 @@ dtStatus dtNavMeshQuery::findStraightPath(const float* startPos, const float* en if (flags == DT_STRAIGHTPATH_END || n >= maxStraightPath) { *straightPathCount = n; - return DT_SUCCESS; + return DT_SUCCESS | ((n >= maxStraightPath) ? DT_BUFFER_TOO_SMALL : 0); } } else @@ -1274,7 +1310,7 @@ dtStatus dtNavMeshQuery::findStraightPath(const float* startPos, const float* en if (flags == DT_STRAIGHTPATH_END || n >= maxStraightPath) { *straightPathCount = n; - return DT_SUCCESS; + return DT_SUCCESS | ((n >= maxStraightPath) ? DT_BUFFER_TOO_SMALL : 0); } } else @@ -1316,7 +1352,8 @@ dtStatus dtNavMeshQuery::findStraightPath(const float* startPos, const float* en } *straightPathCount = n; - return DT_SUCCESS; + + return DT_SUCCESS | ((n >= maxStraightPath) ? DT_BUFFER_TOO_SMALL : 0); } dtStatus dtNavMeshQuery::moveAlongSurface(dtPolyRef startRef, const float* startPos, const float* endPos, @@ -1329,8 +1366,12 @@ dtStatus dtNavMeshQuery::moveAlongSurface(dtPolyRef startRef, const float* start *visitedCount = 0; // Validate input - if (!startRef) return DT_FAILURE; - if (!m_nav->isValidPolyRef(startRef)) return DT_FAILURE; + if (!startRef) + return DT_FAILURE | DT_INVALID_PARAM; + if (!m_nav->isValidPolyRef(startRef)) + return DT_FAILURE | DT_INVALID_PARAM; + + dtStatus status = DT_SUCCESS; static const int MAX_STACK = 48; dtNode* stack[MAX_STACK]; @@ -1495,16 +1536,21 @@ dtStatus dtNavMeshQuery::moveAlongSurface(dtPolyRef startRef, const float* start do { visited[n++] = node->id; + if (n >= maxVisitedSize) + { + status |= DT_BUFFER_TOO_SMALL; + break; + } node = m_tinyNodePool->getNodeAtIdx(node->pidx); } - while (node && n < maxVisitedSize); + while (node); } dtVcopy(resultPos, bestPos); *visitedCount = n; - return DT_SUCCESS; + return status; } @@ -1515,14 +1561,14 @@ dtStatus dtNavMeshQuery::getPortalPoints(dtPolyRef from, dtPolyRef to, float* le const dtMeshTile* fromTile = 0; const dtPoly* fromPoly = 0; - if (m_nav->getTileAndPolyByRef(from, &fromTile, &fromPoly) != DT_SUCCESS) - return DT_FAILURE; + if (dtStatusFailed(m_nav->getTileAndPolyByRef(from, &fromTile, &fromPoly))) + return DT_FAILURE | DT_INVALID_PARAM; fromType = fromPoly->getType(); const dtMeshTile* toTile = 0; const dtPoly* toPoly = 0; - if (m_nav->getTileAndPolyByRef(to, &toTile, &toPoly) != DT_SUCCESS) - return DT_FAILURE; + if (dtStatusFailed(m_nav->getTileAndPolyByRef(to, &toTile, &toPoly))) + return DT_FAILURE | DT_INVALID_PARAM; toType = toPoly->getType(); return getPortalPoints(from, fromPoly, fromTile, to, toPoly, toTile, left, right); @@ -1544,7 +1590,7 @@ dtStatus dtNavMeshQuery::getPortalPoints(dtPolyRef from, const dtPoly* fromPoly, } } if (!link) - return DT_FAILURE; + return DT_FAILURE | DT_INVALID_PARAM; // Handle off-mesh connections. if (fromPoly->getType() == DT_POLYTYPE_OFFMESH_CONNECTION) @@ -1560,7 +1606,7 @@ dtStatus dtNavMeshQuery::getPortalPoints(dtPolyRef from, const dtPoly* fromPoly, return DT_SUCCESS; } } - return DT_FAILURE; + return DT_FAILURE | DT_INVALID_PARAM; } if (toPoly->getType() == DT_POLYTYPE_OFFMESH_CONNECTION) @@ -1575,7 +1621,7 @@ dtStatus dtNavMeshQuery::getPortalPoints(dtPolyRef from, const dtPoly* fromPoly, return DT_SUCCESS; } } - return DT_FAILURE; + return DT_FAILURE | DT_INVALID_PARAM; } // Find portal vertices. @@ -1607,7 +1653,8 @@ dtStatus dtNavMeshQuery::getEdgeMidPoint(dtPolyRef from, dtPolyRef to, float* mi { float left[3], right[3]; unsigned char fromType, toType; - if (!getPortalPoints(from, to, left,right, fromType, toType)) return DT_FAILURE; + if (dtStatusFailed(getPortalPoints(from, to, left,right, fromType, toType))) + return DT_FAILURE | DT_INVALID_PARAM; mid[0] = (left[0]+right[0])*0.5f; mid[1] = (left[1]+right[1])*0.5f; mid[2] = (left[2]+right[2])*0.5f; @@ -1619,8 +1666,8 @@ dtStatus dtNavMeshQuery::getEdgeMidPoint(dtPolyRef from, const dtPoly* fromPoly, float* mid) const { float left[3], right[3]; - if (getPortalPoints(from, fromPoly, fromTile, to, toPoly, toTile, left, right) != DT_SUCCESS) - return DT_FAILURE; + if (dtStatusFailed(getPortalPoints(from, fromPoly, fromTile, to, toPoly, toTile, left, right))) + return DT_FAILURE | DT_INVALID_PARAM; mid[0] = (left[0]+right[0])*0.5f; mid[1] = (left[1]+right[1])*0.5f; mid[2] = (left[2]+right[2])*0.5f; @@ -1639,7 +1686,7 @@ dtStatus dtNavMeshQuery::raycast(dtPolyRef startRef, const float* startPos, cons // Validate input if (!startRef || !m_nav->isValidPolyRef(startRef)) - return DT_FAILURE; + return DT_FAILURE | DT_INVALID_PARAM; dtPolyRef curRef = startRef; float verts[DT_VERTS_PER_POLYGON*3]; @@ -1649,6 +1696,8 @@ dtStatus dtNavMeshQuery::raycast(dtPolyRef startRef, const float* startPos, cons hitNormal[1] = 0; hitNormal[2] = 0; + dtStatus status = DT_SUCCESS; + while (curRef) { // Cast ray against current polygon. @@ -1673,7 +1722,7 @@ dtStatus dtNavMeshQuery::raycast(dtPolyRef startRef, const float* startPos, cons // Could not hit the polygon, keep the old t and report hit. if (pathCount) *pathCount = n; - return DT_SUCCESS; + return status; } // Keep track of furthest t so far. if (tmax > *t) @@ -1682,6 +1731,8 @@ dtStatus dtNavMeshQuery::raycast(dtPolyRef startRef, const float* startPos, cons // Store visited polygons. if (n < maxPath) path[n++] = curRef; + else + status |= DT_BUFFER_TOO_SMALL; // Ray end is completely inside the polygon. if (segMax == -1) @@ -1689,7 +1740,7 @@ dtStatus dtNavMeshQuery::raycast(dtPolyRef startRef, const float* startPos, cons *t = FLT_MAX; if (pathCount) *pathCount = n; - return DT_SUCCESS; + return status; } // Follow neighbours. @@ -1791,7 +1842,7 @@ dtStatus dtNavMeshQuery::raycast(dtPolyRef startRef, const float* startPos, cons if (pathCount) *pathCount = n; - return DT_SUCCESS; + return status; } // No hit, advance to neighbour polygon. @@ -1801,7 +1852,7 @@ dtStatus dtNavMeshQuery::raycast(dtPolyRef startRef, const float* startPos, cons if (pathCount) *pathCount = n; - return DT_SUCCESS; + return status; } dtStatus dtNavMeshQuery::findPolysAroundCircle(dtPolyRef startRef, const float* centerPos, const float radius, @@ -1816,8 +1867,8 @@ dtStatus dtNavMeshQuery::findPolysAroundCircle(dtPolyRef startRef, const float* *resultCount = 0; // Validate input - if (!startRef) return DT_FAILURE; - if (!m_nav->isValidPolyRef(startRef)) return DT_FAILURE; + if (!startRef || !m_nav->isValidPolyRef(startRef)) + return DT_FAILURE | DT_INVALID_PARAM; m_nodePool->clear(); m_openList->clear(); @@ -1831,6 +1882,8 @@ dtStatus dtNavMeshQuery::findPolysAroundCircle(dtPolyRef startRef, const float* startNode->flags = DT_NODE_OPEN; m_openList->push(startNode); + dtStatus status = DT_SUCCESS; + int n = 0; if (n < maxResult) { @@ -1842,6 +1895,10 @@ dtStatus dtNavMeshQuery::findPolysAroundCircle(dtPolyRef startRef, const float* resultCost[n] = 0; ++n; } + else + { + status |= DT_BUFFER_TOO_SMALL; + } const float radiusSqr = dtSqr(radius); @@ -1897,7 +1954,10 @@ dtStatus dtNavMeshQuery::findPolysAroundCircle(dtPolyRef startRef, const float* dtNode* neighbourNode = m_nodePool->getNode(neighbourRef); if (!neighbourNode) + { + status |= DT_OUT_OF_NODES; continue; + } if (neighbourNode->flags & DT_NODE_CLOSED) continue; @@ -1933,6 +1993,10 @@ dtStatus dtNavMeshQuery::findPolysAroundCircle(dtPolyRef startRef, const float* resultCost[n] = neighbourNode->total; ++n; } + else + { + status |= DT_BUFFER_TOO_SMALL; + } neighbourNode->flags = DT_NODE_OPEN; m_openList->push(neighbourNode); } @@ -1941,7 +2005,7 @@ dtStatus dtNavMeshQuery::findPolysAroundCircle(dtPolyRef startRef, const float* *resultCount = n; - return DT_SUCCESS; + return status; } dtStatus dtNavMeshQuery::findPolysAroundShape(dtPolyRef startRef, const float* verts, const int nverts, @@ -1956,8 +2020,8 @@ dtStatus dtNavMeshQuery::findPolysAroundShape(dtPolyRef startRef, const float* v *resultCount = 0; // Validate input - if (!startRef) return DT_FAILURE; - if (!m_nav->isValidPolyRef(startRef)) return DT_FAILURE; + if (!startRef || !m_nav->isValidPolyRef(startRef)) + return DT_FAILURE | DT_INVALID_PARAM; m_nodePool->clear(); m_openList->clear(); @@ -1976,6 +2040,8 @@ dtStatus dtNavMeshQuery::findPolysAroundShape(dtPolyRef startRef, const float* v startNode->flags = DT_NODE_OPEN; m_openList->push(startNode); + dtStatus status = DT_SUCCESS; + int n = 0; if (n < maxResult) { @@ -1987,6 +2053,10 @@ dtStatus dtNavMeshQuery::findPolysAroundShape(dtPolyRef startRef, const float* v resultCost[n] = 0; ++n; } + else + { + status |= DT_BUFFER_TOO_SMALL; + } while (!m_openList->empty()) { @@ -2042,7 +2112,10 @@ dtStatus dtNavMeshQuery::findPolysAroundShape(dtPolyRef startRef, const float* v dtNode* neighbourNode = m_nodePool->getNode(neighbourRef); if (!neighbourNode) + { + status |= DT_OUT_OF_NODES; continue; + } if (neighbourNode->flags & DT_NODE_CLOSED) continue; @@ -2078,6 +2151,10 @@ dtStatus dtNavMeshQuery::findPolysAroundShape(dtPolyRef startRef, const float* v resultCost[n] = neighbourNode->total; ++n; } + else + { + status |= DT_BUFFER_TOO_SMALL; + } neighbourNode->flags = DT_NODE_OPEN; m_openList->push(neighbourNode); } @@ -2086,7 +2163,7 @@ dtStatus dtNavMeshQuery::findPolysAroundShape(dtPolyRef startRef, const float* v *resultCount = n; - return DT_SUCCESS; + return status; } dtStatus dtNavMeshQuery::findLocalNeighbourhood(dtPolyRef startRef, const float* centerPos, const float radius, @@ -2100,8 +2177,8 @@ dtStatus dtNavMeshQuery::findLocalNeighbourhood(dtPolyRef startRef, const float* *resultCount = 0; // Validate input - if (!startRef) return DT_FAILURE; - if (!m_nav->isValidPolyRef(startRef)) return DT_FAILURE; + if (!startRef || !m_nav->isValidPolyRef(startRef)) + return DT_FAILURE | DT_INVALID_PARAM; static const int MAX_STACK = 48; dtNode* stack[MAX_STACK]; @@ -2120,6 +2197,8 @@ dtStatus dtNavMeshQuery::findLocalNeighbourhood(dtPolyRef startRef, const float* float pa[DT_VERTS_PER_POLYGON*3]; float pb[DT_VERTS_PER_POLYGON*3]; + dtStatus status = DT_SUCCESS; + int n = 0; if (n < maxResult) { @@ -2128,6 +2207,10 @@ dtStatus dtNavMeshQuery::findLocalNeighbourhood(dtPolyRef startRef, const float* resultParent[n] = 0; ++n; } + else + { + status |= DT_BUFFER_TOO_SMALL; + } while (nstack) { @@ -2241,6 +2324,10 @@ dtStatus dtNavMeshQuery::findLocalNeighbourhood(dtPolyRef startRef, const float* resultParent[n] = curRef; ++n; } + else + { + status |= DT_BUFFER_TOO_SMALL; + } if (nstack < MAX_STACK) { @@ -2251,7 +2338,7 @@ dtStatus dtNavMeshQuery::findLocalNeighbourhood(dtPolyRef startRef, const float* *resultCount = n; - return DT_SUCCESS; + return status; } @@ -2290,14 +2377,16 @@ dtStatus dtNavMeshQuery::getPolyWallSegments(dtPolyRef ref, const dtQueryFilter* const dtMeshTile* tile = 0; const dtPoly* poly = 0; - if (m_nav->getTileAndPolyByRef(ref, &tile, &poly) != DT_SUCCESS) - return DT_FAILURE; + if (dtStatusFailed(m_nav->getTileAndPolyByRef(ref, &tile, &poly))) + return DT_FAILURE | DT_INVALID_PARAM; int n = 0; static const int MAX_INTERVAL = 16; dtSegInterval ints[MAX_INTERVAL]; int nints; + dtStatus status = DT_SUCCESS; + for (int i = 0, j = (int)poly->vertCount-1; i < (int)poly->vertCount; j = i++) { // Skip non-solid edges. @@ -2354,6 +2443,10 @@ dtStatus dtNavMeshQuery::getPolyWallSegments(dtPolyRef ref, const dtQueryFilter* dtVcopy(seg+0, vj); dtVcopy(seg+3, vi); } + else + { + status |= DT_BUFFER_TOO_SMALL; + } } else { @@ -2366,13 +2459,17 @@ dtStatus dtNavMeshQuery::getPolyWallSegments(dtPolyRef ref, const dtQueryFilter* dtVlerp(seg+0, vj,vi, tmin); dtVlerp(seg+3, vj,vi, tmax); } + else + { + status |= DT_BUFFER_TOO_SMALL; + } } } } *segmentCount = n; - return DT_SUCCESS; + return status; } dtStatus dtNavMeshQuery::findDistanceToWall(dtPolyRef startRef, const float* centerPos, const float maxRadius, @@ -2384,8 +2481,8 @@ dtStatus dtNavMeshQuery::findDistanceToWall(dtPolyRef startRef, const float* cen dtAssert(m_openList); // Validate input - if (!startRef) return DT_FAILURE; - if (!m_nav->isValidPolyRef(startRef)) return DT_FAILURE; + if (!startRef || !m_nav->isValidPolyRef(startRef)) + return DT_FAILURE | DT_INVALID_PARAM; m_nodePool->clear(); m_openList->clear(); @@ -2401,6 +2498,8 @@ dtStatus dtNavMeshQuery::findDistanceToWall(dtPolyRef startRef, const float* cen float radiusSqr = dtSqr(maxRadius); + dtStatus status = DT_SUCCESS; + while (!m_openList->empty()) { dtNode* bestNode = m_openList->pop(); @@ -2508,7 +2607,10 @@ dtStatus dtNavMeshQuery::findDistanceToWall(dtPolyRef startRef, const float* cen dtNode* neighbourNode = m_nodePool->getNode(neighbourRef); if (!neighbourNode) + { + status |= DT_OUT_OF_NODES; continue; + } if (neighbourNode->flags & DT_NODE_CLOSED) continue; @@ -2549,7 +2651,7 @@ dtStatus dtNavMeshQuery::findDistanceToWall(dtPolyRef startRef, const float* cen *hitDist = sqrtf(radiusSqr); - return DT_SUCCESS; + return status; } bool dtNavMeshQuery::isInClosedList(dtPolyRef ref) const diff --git a/RecastDemo/Build/Xcode/Recast.xcodeproj/memon.pbxuser b/RecastDemo/Build/Xcode/Recast.xcodeproj/memon.pbxuser index 2a23fec..aa6de24 100644 --- a/RecastDemo/Build/Xcode/Recast.xcodeproj/memon.pbxuser +++ b/RecastDemo/Build/Xcode/Recast.xcodeproj/memon.pbxuser @@ -23,13 +23,15 @@ 6BD403421224642500995864 /* NavMeshTesterTool.cpp:547 */, 6B920A121225B1C900D5B5AD /* DetourHashLookup.cpp:78 */, 6B920A141225B1CF00D5B5AD /* DetourHashLookup.cpp:131 */, - 6BD66851124350F50021A7A4 /* NavMeshTesterTool.cpp:486 */, 6B8D55CD127AAA360077C699 /* CrowdManager.cpp:1197 */, - 6B74B5EA128312A900262888 /* main.cpp:211 */, 6B74B60C128312E600262888 /* CrowdTool.cpp:296 */, 6B74B72E1286B1B000262888 /* CrowdManager.cpp:1313 */, 6B6BEC911299636E0077F7A4 /* RecastRegion.cpp:1244 */, 6B6BEC94129963DA0077F7A4 /* RecastRegion.cpp:307 */, + 6B6BEDD2129FD0580077F7A4 /* NavMeshTesterTool.cpp:722 */, + 6B6BEDD6129FD07E0077F7A4 /* DetourNavMeshQuery.cpp:818 */, + 6B6BEDE2129FD0BA0077F7A4 /* NavMeshTesterTool.cpp:482 */, + 6B6BEDE4129FD0BF0077F7A4 /* NavMeshTesterTool.cpp:486 */, ); codeSenseManager = 6B8632AA0F78115100E2684A /* Code sense */; executables = ( @@ -135,75 +137,75 @@ PBXFindDataSource_LocationID, ); }; - PBXPerProjectTemplateStateSaveDate = 312039686; - PBXWorkspaceStateSaveDate = 312039686; + PBXPerProjectTemplateStateSaveDate = 312457071; + PBXWorkspaceStateSaveDate = 312457071; }; perUserProjectItems = { 6B4DE62F12807542001CFDF4 = 6B4DE62F12807542001CFDF4 /* PBXTextBookmark */; 6B4DE649128079E0001CFDF4 = 6B4DE649128079E0001CFDF4 /* PBXTextBookmark */; 6B4DE64A128079E0001CFDF4 = 6B4DE64A128079E0001CFDF4 /* PBXTextBookmark */; - 6B6BE67D12914E050077F7A4 = 6B6BE67D12914E050077F7A4 /* PBXTextBookmark */; - 6B6BE685129152770077F7A4 = 6B6BE685129152770077F7A4 /* PBXTextBookmark */; 6B6BE686129152770077F7A4 = 6B6BE686129152770077F7A4 /* PBXTextBookmark */; 6B6BE687129152770077F7A4 = 6B6BE687129152770077F7A4 /* PBXTextBookmark */; 6B6BE689129152770077F7A4 = 6B6BE689129152770077F7A4 /* PBXTextBookmark */; 6B6BE68B129152770077F7A4 = 6B6BE68B129152770077F7A4 /* PBXTextBookmark */; 6B6BE68C129152770077F7A4 = 6B6BE68C129152770077F7A4 /* PBXTextBookmark */; - 6B6BE68D129152770077F7A4 = 6B6BE68D129152770077F7A4 /* PBXTextBookmark */; - 6B6BE68E129152770077F7A4 = 6B6BE68E129152770077F7A4 /* PBXTextBookmark */; - 6B6BE68F129152770077F7A4 = 6B6BE68F129152770077F7A4 /* PBXTextBookmark */; - 6B6BEC19129959080077F7A4 /* PBXTextBookmark */ = 6B6BEC19129959080077F7A4 /* PBXTextBookmark */; - 6B6BEC2F12995D2A0077F7A4 /* PBXTextBookmark */ = 6B6BEC2F12995D2A0077F7A4 /* PBXTextBookmark */; - 6B6BEC3012995D2A0077F7A4 /* PBXTextBookmark */ = 6B6BEC3012995D2A0077F7A4 /* PBXTextBookmark */; - 6B6BEC3112995D2A0077F7A4 /* PBXTextBookmark */ = 6B6BEC3112995D2A0077F7A4 /* PBXTextBookmark */; - 6B6BEC3212995D2A0077F7A4 /* PBXTextBookmark */ = 6B6BEC3212995D2A0077F7A4 /* PBXTextBookmark */; - 6B6BEC3C12995D440077F7A4 /* PBXTextBookmark */ = 6B6BEC3C12995D440077F7A4 /* PBXTextBookmark */; - 6B6BEC3D12995D480077F7A4 /* PBXTextBookmark */ = 6B6BEC3D12995D480077F7A4 /* PBXTextBookmark */; - 6B6BEC3E12995D4B0077F7A4 /* PBXTextBookmark */ = 6B6BEC3E12995D4B0077F7A4 /* PBXTextBookmark */; - 6B6BEC4112995D690077F7A4 /* PBXTextBookmark */ = 6B6BEC4112995D690077F7A4 /* PBXTextBookmark */; - 6B6BEC4212995D690077F7A4 /* PBXTextBookmark */ = 6B6BEC4212995D690077F7A4 /* PBXTextBookmark */; - 6B6BEC4312995D690077F7A4 /* PBXTextBookmark */ = 6B6BEC4312995D690077F7A4 /* PBXTextBookmark */; - 6B6BEC4612995DEA0077F7A4 /* PBXTextBookmark */ = 6B6BEC4612995DEA0077F7A4 /* PBXTextBookmark */; - 6B6BEC4712995DEA0077F7A4 /* PBXTextBookmark */ = 6B6BEC4712995DEA0077F7A4 /* PBXTextBookmark */; - 6B6BEC4812995DEA0077F7A4 /* PBXTextBookmark */ = 6B6BEC4812995DEA0077F7A4 /* PBXTextBookmark */; - 6B6BEC4912995DEA0077F7A4 /* PBXTextBookmark */ = 6B6BEC4912995DEA0077F7A4 /* PBXTextBookmark */; - 6B6BEC4A12995DEA0077F7A4 /* PBXTextBookmark */ = 6B6BEC4A12995DEA0077F7A4 /* PBXTextBookmark */; - 6B6BEC4D12995E080077F7A4 /* PBXTextBookmark */ = 6B6BEC4D12995E080077F7A4 /* PBXTextBookmark */; - 6B6BEC4E12995E080077F7A4 /* PBXTextBookmark */ = 6B6BEC4E12995E080077F7A4 /* PBXTextBookmark */; - 6B6BEC4F12995E080077F7A4 /* PBXTextBookmark */ = 6B6BEC4F12995E080077F7A4 /* PBXTextBookmark */; - 6B6BEC6012995F3B0077F7A4 /* PBXTextBookmark */ = 6B6BEC6012995F3B0077F7A4 /* PBXTextBookmark */; - 6B6BEC651299600A0077F7A4 /* PBXTextBookmark */ = 6B6BEC651299600A0077F7A4 /* PBXTextBookmark */; - 6B6BEC67129960A70077F7A4 /* PBXTextBookmark */ = 6B6BEC67129960A70077F7A4 /* PBXTextBookmark */; - 6B6BEC68129960A70077F7A4 /* PBXTextBookmark */ = 6B6BEC68129960A70077F7A4 /* PBXTextBookmark */; - 6B6BEC6B129960D00077F7A4 /* PBXTextBookmark */ = 6B6BEC6B129960D00077F7A4 /* PBXTextBookmark */; - 6B6BEC6F129961A20077F7A4 /* PBXTextBookmark */ = 6B6BEC6F129961A20077F7A4 /* PBXTextBookmark */; - 6B6BEC70129961A20077F7A4 /* PBXTextBookmark */ = 6B6BEC70129961A20077F7A4 /* PBXTextBookmark */; - 6B6BEC71129961A20077F7A4 /* PBXTextBookmark */ = 6B6BEC71129961A20077F7A4 /* PBXTextBookmark */; - 6B6BEC75129961C80077F7A4 /* PBXTextBookmark */ = 6B6BEC75129961C80077F7A4 /* PBXTextBookmark */; - 6B6BEC76129961C80077F7A4 /* PBXTextBookmark */ = 6B6BEC76129961C80077F7A4 /* PBXTextBookmark */; - 6B6BEC77129961C80077F7A4 /* PBXTextBookmark */ = 6B6BEC77129961C80077F7A4 /* PBXTextBookmark */; - 6B6BEC79129961F00077F7A4 /* PBXTextBookmark */ = 6B6BEC79129961F00077F7A4 /* PBXTextBookmark */; - 6B6BEC7E129962F50077F7A4 /* PBXTextBookmark */ = 6B6BEC7E129962F50077F7A4 /* PBXTextBookmark */; - 6B6BEC7F129962F50077F7A4 /* PBXTextBookmark */ = 6B6BEC7F129962F50077F7A4 /* PBXTextBookmark */; - 6B6BEC80129962F50077F7A4 /* PBXTextBookmark */ = 6B6BEC80129962F50077F7A4 /* PBXTextBookmark */; - 6B6BEC82129963000077F7A4 /* PBXTextBookmark */ = 6B6BEC82129963000077F7A4 /* PBXTextBookmark */; - 6B6BEC851299630A0077F7A4 /* PBXTextBookmark */ = 6B6BEC851299630A0077F7A4 /* PBXTextBookmark */; - 6B6BEC86129963180077F7A4 /* PBXTextBookmark */ = 6B6BEC86129963180077F7A4 /* PBXTextBookmark */; - 6B6BEC8D129963480077F7A4 /* PBXTextBookmark */ = 6B6BEC8D129963480077F7A4 /* PBXTextBookmark */; - 6B6BEC8F129963550077F7A4 /* PBXTextBookmark */ = 6B6BEC8F129963550077F7A4 /* PBXTextBookmark */; - 6B6BEC90129963610077F7A4 /* PBXTextBookmark */ = 6B6BEC90129963610077F7A4 /* PBXTextBookmark */; - 6B6BEC931299636F0077F7A4 /* PBXTextBookmark */ = 6B6BEC931299636F0077F7A4 /* PBXTextBookmark */; - 6B6BEC9B1299642F0077F7A4 /* PBXTextBookmark */ = 6B6BEC9B1299642F0077F7A4 /* PBXTextBookmark */; - 6B6BEC9D1299644A0077F7A4 /* PBXTextBookmark */ = 6B6BEC9D1299644A0077F7A4 /* PBXTextBookmark */; - 6B6BEC9E1299644A0077F7A4 /* PBXTextBookmark */ = 6B6BEC9E1299644A0077F7A4 /* PBXTextBookmark */; - 6B6BECA51299680A0077F7A4 /* PBXTextBookmark */ = 6B6BECA51299680A0077F7A4 /* PBXTextBookmark */; - 6B6BECA61299680A0077F7A4 /* PBXTextBookmark */ = 6B6BECA61299680A0077F7A4 /* PBXTextBookmark */; - 6B6BECA71299680A0077F7A4 /* PBXTextBookmark */ = 6B6BECA71299680A0077F7A4 /* PBXTextBookmark */; - 6B6BECAA129968B20077F7A4 /* PBXTextBookmark */ = 6B6BECAA129968B20077F7A4 /* PBXTextBookmark */; - 6B6BECAF129968E50077F7A4 /* PBXTextBookmark */ = 6B6BECAF129968E50077F7A4 /* PBXTextBookmark */; + 6B6BEC3012995D2A0077F7A4 = 6B6BEC3012995D2A0077F7A4 /* PBXTextBookmark */; + 6B6BEC4712995DEA0077F7A4 = 6B6BEC4712995DEA0077F7A4 /* PBXTextBookmark */; + 6B6BEC4812995DEA0077F7A4 = 6B6BEC4812995DEA0077F7A4 /* PBXTextBookmark */; + 6B6BEC75129961C80077F7A4 = 6B6BEC75129961C80077F7A4 /* PBXTextBookmark */; + 6B6BEC7E129962F50077F7A4 = 6B6BEC7E129962F50077F7A4 /* PBXTextBookmark */; + 6B6BECA51299680A0077F7A4 = 6B6BECA51299680A0077F7A4 /* PBXTextBookmark */; + 6B6BECB5129970130077F7A4 = 6B6BECB5129970130077F7A4 /* PBXTextBookmark */; + 6B6BECB6129970130077F7A4 = 6B6BECB6129970130077F7A4 /* PBXTextBookmark */; + 6B6BECB7129970130077F7A4 = 6B6BECB7129970130077F7A4 /* PBXTextBookmark */; + 6B6BECB8129970130077F7A4 = 6B6BECB8129970130077F7A4 /* PBXTextBookmark */; + 6B6BECB9129970130077F7A4 = 6B6BECB9129970130077F7A4 /* PBXTextBookmark */; + 6B6BECC2129FA4F20077F7A4 = 6B6BECC2129FA4F20077F7A4 /* PBXTextBookmark */; + 6B6BECC3129FA4F20077F7A4 = 6B6BECC3129FA4F20077F7A4 /* PBXTextBookmark */; + 6B6BED8C129FB8670077F7A4 /* PBXTextBookmark */ = 6B6BED8C129FB8670077F7A4 /* PBXTextBookmark */; + 6B6BED8D129FB8670077F7A4 /* PBXTextBookmark */ = 6B6BED8D129FB8670077F7A4 /* PBXTextBookmark */; + 6B6BED8E129FB8670077F7A4 /* PBXTextBookmark */ = 6B6BED8E129FB8670077F7A4 /* PBXTextBookmark */; + 6B6BED92129FB8840077F7A4 /* PBXTextBookmark */ = 6B6BED92129FB8840077F7A4 /* PBXTextBookmark */; + 6B6BED93129FC9550077F7A4 /* PBXTextBookmark */ = 6B6BED93129FC9550077F7A4 /* PBXTextBookmark */; + 6B6BED94129FC9550077F7A4 /* PBXTextBookmark */ = 6B6BED94129FC9550077F7A4 /* PBXTextBookmark */; + 6B6BED95129FC9550077F7A4 /* PBXTextBookmark */ = 6B6BED95129FC9550077F7A4 /* PBXTextBookmark */; + 6B6BED96129FC9550077F7A4 /* PBXTextBookmark */ = 6B6BED96129FC9550077F7A4 /* PBXTextBookmark */; + 6B6BED97129FC9550077F7A4 /* PBXTextBookmark */ = 6B6BED97129FC9550077F7A4 /* PBXTextBookmark */; + 6B6BEDB0129FCDB20077F7A4 /* PBXTextBookmark */ = 6B6BEDB0129FCDB20077F7A4 /* PBXTextBookmark */; + 6B6BEDB1129FCDB20077F7A4 /* PBXTextBookmark */ = 6B6BEDB1129FCDB20077F7A4 /* PBXTextBookmark */; + 6B6BEDB2129FCDB20077F7A4 /* PBXTextBookmark */ = 6B6BEDB2129FCDB20077F7A4 /* PBXTextBookmark */; + 6B6BEDB3129FCDB20077F7A4 /* PBXTextBookmark */ = 6B6BEDB3129FCDB20077F7A4 /* PBXTextBookmark */; + 6B6BEDB4129FCDB20077F7A4 /* PBXTextBookmark */ = 6B6BEDB4129FCDB20077F7A4 /* PBXTextBookmark */; + 6B6BEDB5129FCDB20077F7A4 /* PBXTextBookmark */ = 6B6BEDB5129FCDB20077F7A4 /* PBXTextBookmark */; + 6B6BEDB6129FCDB20077F7A4 /* PBXTextBookmark */ = 6B6BEDB6129FCDB20077F7A4 /* PBXTextBookmark */; + 6B6BEDB7129FCDB20077F7A4 /* PBXTextBookmark */ = 6B6BEDB7129FCDB20077F7A4 /* PBXTextBookmark */; + 6B6BEDB8129FCDB20077F7A4 /* PBXTextBookmark */ = 6B6BEDB8129FCDB20077F7A4 /* PBXTextBookmark */; + 6B6BEDBF129FCE930077F7A4 /* PBXTextBookmark */ = 6B6BEDBF129FCE930077F7A4 /* PBXTextBookmark */; + 6B6BEDC0129FCE930077F7A4 /* PBXTextBookmark */ = 6B6BEDC0129FCE930077F7A4 /* PBXTextBookmark */; + 6B6BEDC1129FCE930077F7A4 /* PBXTextBookmark */ = 6B6BEDC1129FCE930077F7A4 /* PBXTextBookmark */; + 6B6BEDC4129FCF980077F7A4 /* PBXTextBookmark */ = 6B6BEDC4129FCF980077F7A4 /* PBXTextBookmark */; + 6B6BEDC5129FCF980077F7A4 /* PBXTextBookmark */ = 6B6BEDC5129FCF980077F7A4 /* PBXTextBookmark */; + 6B6BEDC6129FCF980077F7A4 /* PBXTextBookmark */ = 6B6BEDC6129FCF980077F7A4 /* PBXTextBookmark */; + 6B6BEDC7129FCF980077F7A4 /* PBXTextBookmark */ = 6B6BEDC7129FCF980077F7A4 /* PBXTextBookmark */; + 6B6BEDC8129FCF980077F7A4 /* PBXTextBookmark */ = 6B6BEDC8129FCF980077F7A4 /* PBXTextBookmark */; + 6B6BEDCD129FD0400077F7A4 /* PBXTextBookmark */ = 6B6BEDCD129FD0400077F7A4 /* PBXTextBookmark */; + 6B6BEDCE129FD0400077F7A4 /* PBXTextBookmark */ = 6B6BEDCE129FD0400077F7A4 /* PBXTextBookmark */; + 6B6BEDD4129FD05B0077F7A4 /* PBXTextBookmark */ = 6B6BEDD4129FD05B0077F7A4 /* PBXTextBookmark */; + 6B6BEDD5129FD05B0077F7A4 /* PBXTextBookmark */ = 6B6BEDD5129FD05B0077F7A4 /* PBXTextBookmark */; + 6B6BEDD8129FD0830077F7A4 /* PBXTextBookmark */ = 6B6BEDD8129FD0830077F7A4 /* PBXTextBookmark */; + 6B6BEDD9129FD0830077F7A4 /* PBXTextBookmark */ = 6B6BEDD9129FD0830077F7A4 /* PBXTextBookmark */; + 6B6BEDDA129FD0830077F7A4 /* PBXTextBookmark */ = 6B6BEDDA129FD0830077F7A4 /* PBXTextBookmark */; + 6B6BEDDB129FD0A10077F7A4 /* PBXTextBookmark */ = 6B6BEDDB129FD0A10077F7A4 /* PBXTextBookmark */; + 6B6BEDDC129FD0A10077F7A4 /* PBXTextBookmark */ = 6B6BEDDC129FD0A10077F7A4 /* PBXTextBookmark */; + 6B6BEDDD129FD0A10077F7A4 /* PBXTextBookmark */ = 6B6BEDDD129FD0A10077F7A4 /* PBXTextBookmark */; + 6B6BEDE6129FD0C30077F7A4 /* PBXTextBookmark */ = 6B6BEDE6129FD0C30077F7A4 /* PBXTextBookmark */; + 6B6BEDE7129FD0C30077F7A4 /* PBXTextBookmark */ = 6B6BEDE7129FD0C30077F7A4 /* PBXTextBookmark */; + 6B6BEDE8129FD0C30077F7A4 /* PBXTextBookmark */ = 6B6BEDE8129FD0C30077F7A4 /* PBXTextBookmark */; + 6B6BEDEB129FD0F60077F7A4 /* PBXTextBookmark */ = 6B6BEDEB129FD0F60077F7A4 /* PBXTextBookmark */; + 6B6BEDEC129FD0F60077F7A4 /* PBXTextBookmark */ = 6B6BEDEC129FD0F60077F7A4 /* PBXTextBookmark */; + 6B6BEDED129FD0F60077F7A4 /* PBXTextBookmark */ = 6B6BEDED129FD0F60077F7A4 /* PBXTextBookmark */; 6B74B5F3128312AC00262888 = 6B74B5F3128312AC00262888 /* PBXTextBookmark */; 6B74B5F4128312AC00262888 = 6B74B5F4128312AC00262888 /* PBXTextBookmark */; - 6B74B60F128312E900262888 = 6B74B60F128312E900262888 /* PBXTextBookmark */; 6B74B626128314A500262888 = 6B74B626128314A500262888 /* PBXTextBookmark */; 6B74B627128314A500262888 = 6B74B627128314A500262888 /* PBXTextBookmark */; 6B74B628128314A500262888 = 6B74B628128314A500262888 /* PBXTextBookmark */; @@ -211,17 +213,13 @@ 6B74B62B128314A500262888 = 6B74B62B128314A500262888 /* PBXTextBookmark */; 6B74B6D81286ABC000262888 = 6B74B6D81286ABC000262888 /* PBXTextBookmark */; 6B74B7061286AEBD00262888 = 6B74B7061286AEBD00262888 /* PBXTextBookmark */; - 6B74B7071286AEBD00262888 = 6B74B7071286AEBD00262888 /* PBXTextBookmark */; 6B74B7601286BB6900262888 = 6B74B7601286BB6900262888 /* PBXTextBookmark */; 6B74B7611286BB6900262888 = 6B74B7611286BB6900262888 /* PBXTextBookmark */; 6B74B76B1286F56B00262888 = 6B74B76B1286F56B00262888 /* PBXTextBookmark */; - 6B74B76F1286F56B00262888 = 6B74B76F1286F56B00262888 /* PBXTextBookmark */; 6B74B7771286F61200262888 = 6B74B7771286F61200262888 /* PBXTextBookmark */; 6B74B7801286F72D00262888 = 6B74B7801286F72D00262888 /* PBXTextBookmark */; 6B74B7811286F72D00262888 = 6B74B7811286F72D00262888 /* PBXTextBookmark */; 6B74B7821286F72D00262888 = 6B74B7821286F72D00262888 /* PBXTextBookmark */; - 6B74B7831286F72D00262888 = 6B74B7831286F72D00262888 /* PBXTextBookmark */; - 6B74B7841286F72D00262888 = 6B74B7841286F72D00262888 /* PBXTextBookmark */; 6B74B7901286F77500262888 = 6B74B7901286F77500262888 /* PBXTextBookmark */; 6B74B7991286F7CD00262888 = 6B74B7991286F7CD00262888 /* PBXTextBookmark */; 6B74B7AD1286F93000262888 = 6B74B7AD1286F93000262888 /* PBXTextBookmark */; @@ -260,7 +258,7 @@ ignoreCount = 0; lineNumber = 1324; location = Recast; - modificationTime = 312042536.286122; + modificationTime = 312463596.073982; originalNumberOfMultipleMatches = 1; state = 1; }; @@ -336,9 +334,9 @@ }; 6B137C7E0F7FCBFE00459200 /* Recast.h */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {931, 9659}}"; - sepNavSelRange = "{12869, 0}"; - sepNavVisRange = "{12166, 1292}"; + sepNavIntBoundsRect = "{{0, 0}, {853, 8983}}"; + sepNavSelRange = "{9462, 0}"; + sepNavVisRange = "{9109, 1531}"; sepNavWindowFrame = "{{15, 51}, {1214, 722}}"; }; }; @@ -382,9 +380,9 @@ }; 6B137C890F7FCC1100459200 /* RecastRegion.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {853, 16198}}"; - sepNavSelRange = "{31211, 0}"; - sepNavVisRange = "{30801, 795}"; + sepNavIntBoundsRect = "{{0, 0}, {1139, 16458}}"; + sepNavSelRange = "{8520, 0}"; + sepNavVisRange = "{8425, 450}"; }; }; 6B25B6100FFA62AD004F1BC4 /* Sample.h */ = { @@ -403,9 +401,9 @@ }; 6B25B6180FFA62BE004F1BC4 /* main.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {853, 12103}}"; - sepNavSelRange = "{5423, 0}"; - sepNavVisRange = "{4987, 831}"; + sepNavIntBoundsRect = "{{0, 0}, {853, 11999}}"; + sepNavSelRange = "{5160, 0}"; + sepNavVisRange = "{4897, 625}"; sepNavWindowFrame = "{{15, 51}, {1214, 722}}"; }; }; @@ -419,9 +417,9 @@ }; 6B2AEC520FFB8958005BE9CC /* Sample_TileMesh.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {936, 15600}}"; - sepNavSelRange = "{29050, 0}"; - sepNavVisRange = "{28341, 1224}"; + sepNavIntBoundsRect = "{{0, 0}, {894, 15860}}"; + sepNavSelRange = "{22924, 0}"; + sepNavVisRange = "{22448, 843}"; sepNavWindowFrame = "{{38, 30}, {1214, 722}}"; }; }; @@ -453,7 +451,7 @@ ignoreCount = 0; lineNumber = 362; location = Recast; - modificationTime = 312042354.75943; + modificationTime = 312463420.817002; originalNumberOfMultipleMatches = 1; state = 1; }; @@ -516,26 +514,6 @@ sepNavWindowFrame = "{{61, 36}, {1011, 695}}"; }; }; - 6B6BE67D12914E050077F7A4 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6BB93C7710CFE1D500F74F2B /* DebugDraw.h */; - name = "DebugDraw.h: 69"; - rLen = 0; - rLoc = 2265; - rType = 0; - vrLen = 1174; - vrLoc = 2003; - }; - 6B6BE685129152770077F7A4 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6B8DE88B10B69E4C00DF20FB /* DetourNavMesh.h */; - name = "DetourNavMesh.h: 81"; - rLen = 0; - rLoc = 2770; - rType = 0; - vrLen = 1409; - vrLoc = 2458; - }; 6B6BE686129152770077F7A4 /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = 6B624169103434880002E346 /* RecastMeshDetail.cpp */; @@ -600,56 +578,6 @@ vrLen = 778; vrLoc = 3342; }; - 6B6BE68D129152770077F7A4 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6BAF40D912196A25008CFCDF /* DetourNavMeshQuery.h */; - name = "DetourNavMeshQuery.h: 208"; - rLen = 16; - rLoc = 9856; - rType = 0; - vrLen = 2392; - vrLoc = 8190; - }; - 6B6BE68E129152770077F7A4 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6BAF40DA12196A3D008CFCDF /* DetourNavMeshQuery.cpp */; - name = "DetourNavMeshQuery.cpp: 1668"; - rLen = 0; - rLoc = 44244; - rType = 0; - vrLen = 896; - vrLoc = 43826; - }; - 6B6BE68F129152770077F7A4 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6BAF40DA12196A3D008CFCDF /* DetourNavMeshQuery.cpp */; - name = "DetourNavMeshQuery.cpp: 1180"; - rLen = 0; - rLoc = 31097; - rType = 0; - vrLen = 896; - vrLoc = 30758; - }; - 6B6BEC19129959080077F7A4 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6BAF40DA12196A3D008CFCDF /* DetourNavMeshQuery.cpp */; - name = "DetourNavMeshQuery.cpp: 1180"; - rLen = 0; - rLoc = 31097; - rType = 0; - vrLen = 964; - vrLoc = 30752; - }; - 6B6BEC2F12995D2A0077F7A4 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6BAF40DA12196A3D008CFCDF /* DetourNavMeshQuery.cpp */; - name = "DetourNavMeshQuery.cpp: 1178"; - rLen = 0; - rLoc = 31089; - rType = 0; - vrLen = 964; - vrLoc = 30752; - }; 6B6BEC3012995D2A0077F7A4 /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = 6B25B6180FFA62BE004F1BC4 /* main.cpp */; @@ -660,96 +588,6 @@ vrLen = 831; vrLoc = 4987; }; - 6B6BEC3112995D2A0077F7A4 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6B137C890F7FCC1100459200 /* RecastRegion.cpp */; - name = "RecastRegion.cpp: 340"; - rLen = 13; - rLoc = 8908; - rType = 0; - vrLen = 1411; - vrLoc = 28936; - }; - 6B6BEC3212995D2A0077F7A4 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6B137C890F7FCC1100459200 /* RecastRegion.cpp */; - name = "RecastRegion.cpp: 1219"; - rLen = 0; - rLoc = 29971; - rType = 0; - vrLen = 1229; - vrLoc = 29232; - }; - 6B6BEC3C12995D440077F7A4 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6B137C890F7FCC1100459200 /* RecastRegion.cpp */; - name = "RecastRegion.cpp: 1219"; - rLen = 0; - rLoc = 29971; - rType = 0; - vrLen = 1229; - vrLoc = 29232; - }; - 6B6BEC3D12995D480077F7A4 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6B137C890F7FCC1100459200 /* RecastRegion.cpp */; - name = "RecastRegion.cpp: 1219"; - rLen = 0; - rLoc = 29971; - rType = 0; - vrLen = 676; - vrLoc = 29628; - }; - 6B6BEC3E12995D4B0077F7A4 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6B137C890F7FCC1100459200 /* RecastRegion.cpp */; - name = "RecastRegion.cpp: 1211"; - rLen = 0; - rLoc = 29568; - rType = 0; - vrLen = 1229; - vrLoc = 29232; - }; - 6B6BEC4112995D690077F7A4 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6B137C890F7FCC1100459200 /* RecastRegion.cpp */; - name = "RecastRegion.cpp: 1211"; - rLen = 0; - rLoc = 29568; - rType = 0; - vrLen = 1229; - vrLoc = 29232; - }; - 6B6BEC4212995D690077F7A4 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6B98463211E6144400FA177B /* Sample_SoloMeshTiled.cpp */; - name = "Sample_SoloMeshTiled.cpp: 1055"; - rLen = 0; - rLoc = 31906; - rType = 0; - vrLen = 1319; - vrLoc = 10556; - }; - 6B6BEC4312995D690077F7A4 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6B98463211E6144400FA177B /* Sample_SoloMeshTiled.cpp */; - name = "Sample_SoloMeshTiled.cpp: 1055"; - rLen = 0; - rLoc = 31906; - rType = 0; - vrLen = 1319; - vrLoc = 10556; - }; - 6B6BEC4612995DEA0077F7A4 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6B98463211E6144400FA177B /* Sample_SoloMeshTiled.cpp */; - name = "Sample_SoloMeshTiled.cpp: 1055"; - rLen = 0; - rLoc = 31906; - rType = 0; - vrLen = 1430; - vrLoc = 10128; - }; 6B6BEC4712995DEA0077F7A4 /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = 6BB93C7710CFE1D500F74F2B /* DebugDraw.h */; @@ -770,133 +608,6 @@ vrLen = 947; vrLoc = 4059; }; - 6B6BEC4912995DEA0077F7A4 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6B2AEC520FFB8958005BE9CC /* Sample_TileMesh.cpp */; - rLen = 0; - rLoc = 554; - rType = 1; - }; - 6B6BEC4A12995DEA0077F7A4 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6B2AEC520FFB8958005BE9CC /* Sample_TileMesh.cpp */; - name = "Sample_TileMesh.cpp: 555"; - rLen = 0; - rLoc = 14806; - rType = 0; - vrLen = 1423; - vrLoc = 14014; - }; - 6B6BEC4D12995E080077F7A4 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6B2AEC520FFB8958005BE9CC /* Sample_TileMesh.cpp */; - name = "Sample_TileMesh.cpp: 555"; - rLen = 0; - rLoc = 14806; - rType = 0; - vrLen = 1423; - vrLoc = 14014; - }; - 6B6BEC4E12995E080077F7A4 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6B137C890F7FCC1100459200 /* RecastRegion.cpp */; - name = "RecastRegion.cpp: 1210"; - rLen = 0; - rLoc = 29540; - rType = 0; - vrLen = 1221; - vrLoc = 29366; - }; - 6B6BEC4F12995E080077F7A4 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6B137C890F7FCC1100459200 /* RecastRegion.cpp */; - name = "RecastRegion.cpp: 1210"; - rLen = 0; - rLoc = 29540; - rType = 0; - vrLen = 1221; - vrLoc = 29366; - }; - 6B6BEC6012995F3B0077F7A4 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6B137C890F7FCC1100459200 /* RecastRegion.cpp */; - name = "RecastRegion.cpp: 1214"; - rLen = 0; - rLoc = 29540; - rType = 0; - vrLen = 925; - vrLoc = 29250; - }; - 6B6BEC651299600A0077F7A4 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6B137C890F7FCC1100459200 /* RecastRegion.cpp */; - name = "RecastRegion.cpp: 1214"; - rLen = 0; - rLoc = 29540; - rType = 0; - vrLen = 1148; - vrLoc = 29535; - }; - 6B6BEC67129960A70077F7A4 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6B137C890F7FCC1100459200 /* RecastRegion.cpp */; - name = "RecastRegion.cpp: 376"; - rLen = 0; - rLoc = 9857; - rType = 0; - vrLen = 751; - vrLoc = 9691; - }; - 6B6BEC68129960A70077F7A4 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6B137C890F7FCC1100459200 /* RecastRegion.cpp */; - name = "RecastRegion.cpp: 363"; - rLen = 0; - rLoc = 9536; - rType = 0; - vrLen = 226; - vrLoc = 10796; - }; - 6B6BEC6B129960D00077F7A4 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6B137C890F7FCC1100459200 /* RecastRegion.cpp */; - name = "RecastRegion.cpp: 322"; - rLen = 0; - rLoc = 8730; - rType = 0; - vrLen = 623; - vrLoc = 8207; - }; - 6B6BEC6F129961A20077F7A4 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6B137C890F7FCC1100459200 /* RecastRegion.cpp */; - name = "RecastRegion.cpp: 1252"; - rLen = 0; - rLoc = 30818; - rType = 0; - vrLen = 862; - vrLoc = 30348; - }; - 6B6BEC70129961A20077F7A4 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6B98463211E6144400FA177B /* Sample_SoloMeshTiled.cpp */; - name = "Sample_SoloMeshTiled.cpp: 1055"; - rLen = 0; - rLoc = 31906; - rType = 0; - vrLen = 1489; - vrLoc = 10113; - }; - 6B6BEC71129961A20077F7A4 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6B98463211E6144400FA177B /* Sample_SoloMeshTiled.cpp */; - name = "Sample_SoloMeshTiled.cpp: 872"; - rLen = 0; - rLoc = 26670; - rType = 0; - vrLen = 1264; - vrLoc = 26177; - }; 6B6BEC75129961C80077F7A4 /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = 6B98463211E6144400FA177B /* Sample_SoloMeshTiled.cpp */; @@ -907,126 +618,16 @@ vrLen = 1352; vrLoc = 26182; }; - 6B6BEC76129961C80077F7A4 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6B2AEC520FFB8958005BE9CC /* Sample_TileMesh.cpp */; - name = "Sample_TileMesh.cpp: 555"; - rLen = 0; - rLoc = 14806; - rType = 0; - vrLen = 1458; - vrLoc = 14011; - }; - 6B6BEC77129961C80077F7A4 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6B2AEC520FFB8958005BE9CC /* Sample_TileMesh.cpp */; - name = "Sample_TileMesh.cpp: 1035"; - rLen = 0; - rLoc = 29141; - rType = 0; - vrLen = 1072; - vrLoc = 28684; - }; - 6B6BEC79129961F00077F7A4 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6B2AEC520FFB8958005BE9CC /* Sample_TileMesh.cpp */; - name = "Sample_TileMesh.cpp: 1035"; - rLen = 0; - rLoc = 29141; - rType = 0; - vrLen = 1064; - vrLoc = 28684; - }; 6B6BEC7E129962F50077F7A4 /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = 6B2AEC520FFB8958005BE9CC /* Sample_TileMesh.cpp */; name = "Sample_TileMesh.cpp: 1033"; rLen = 0; - rLoc = 29050; + rLoc = 29237; rType = 0; vrLen = 1224; vrLoc = 28341; }; - 6B6BEC7F129962F50077F7A4 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6B137C890F7FCC1100459200 /* RecastRegion.cpp */; - name = "RecastRegion.cpp: 1252"; - rLen = 0; - rLoc = 30818; - rType = 0; - vrLen = 862; - vrLoc = 30348; - }; - 6B6BEC80129962F50077F7A4 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6B137C890F7FCC1100459200 /* RecastRegion.cpp */; - name = "RecastRegion.cpp: 1252"; - rLen = 0; - rLoc = 30724; - rType = 0; - vrLen = 1005; - vrLoc = 30033; - }; - 6B6BEC82129963000077F7A4 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6B137C890F7FCC1100459200 /* RecastRegion.cpp */; - name = "RecastRegion.cpp: 1235"; - rLen = 0; - rLoc = 30295; - rType = 0; - vrLen = 1005; - vrLoc = 30033; - }; - 6B6BEC851299630A0077F7A4 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6B137C890F7FCC1100459200 /* RecastRegion.cpp */; - name = "RecastRegion.cpp: 1235"; - rLen = 0; - rLoc = 30295; - rType = 0; - vrLen = 1005; - vrLoc = 30033; - }; - 6B6BEC86129963180077F7A4 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6B137C890F7FCC1100459200 /* RecastRegion.cpp */; - name = "RecastRegion.cpp: 1235"; - rLen = 0; - rLoc = 30295; - rType = 0; - vrLen = 492; - vrLoc = 30033; - }; - 6B6BEC8D129963480077F7A4 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6B137C890F7FCC1100459200 /* RecastRegion.cpp */; - name = "RecastRegion.cpp: 1247"; - rLen = 0; - rLoc = 30724; - rType = 0; - vrLen = 892; - vrLoc = 30304; - }; - 6B6BEC8F129963550077F7A4 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6B137C890F7FCC1100459200 /* RecastRegion.cpp */; - name = "RecastRegion.cpp: 1256"; - rLen = 0; - rLoc = 30884; - rType = 0; - vrLen = 892; - vrLoc = 30304; - }; - 6B6BEC90129963610077F7A4 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6B137C890F7FCC1100459200 /* RecastRegion.cpp */; - name = "RecastRegion.cpp: 1256"; - rLen = 0; - rLoc = 30884; - rType = 0; - vrLen = 892; - vrLoc = 30304; - }; 6B6BEC911299636E0077F7A4 /* RecastRegion.cpp:1244 */ = { isa = PBXFileBreakpoint; actions = ( @@ -1037,24 +638,14 @@ delayBeforeContinue = 0; fileReference = 6B137C890F7FCC1100459200 /* RecastRegion.cpp */; functionName = "rcBuildRegions(rcContext* ctx, rcCompactHeightfield& chf, const int borderSize, const int minRegionArea, const int mergeRegionArea)"; - hitCount = 1; + hitCount = 0; ignoreCount = 0; lineNumber = 1244; location = Recast; - modificationTime = 312042371.393623; + modificationTime = 312463420.758797; originalNumberOfMultipleMatches = 1; state = 1; }; - 6B6BEC931299636F0077F7A4 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6B137C890F7FCC1100459200 /* RecastRegion.cpp */; - name = "RecastRegion.cpp: 1256"; - rLen = 0; - rLoc = 30884; - rType = 0; - vrLen = 889; - vrLoc = 30304; - }; 6B6BEC94129963DA0077F7A4 /* RecastRegion.cpp:307 */ = { isa = PBXFileBreakpoint; actions = ( @@ -1065,44 +656,14 @@ delayBeforeContinue = 0; fileReference = 6B137C890F7FCC1100459200 /* RecastRegion.cpp */; functionName = "floodRegion(int x, int y, int i, unsigned short level, unsigned short r, rcCompactHeightfield& chf, unsigned short* srcReg, unsigned short* srcDist, rcIntArray& stack)"; - hitCount = 1; + hitCount = 0; ignoreCount = 0; lineNumber = 307; location = Recast; - modificationTime = 312042460.561444; + modificationTime = 312463420.766739; originalNumberOfMultipleMatches = 1; state = 1; }; - 6B6BEC9B1299642F0077F7A4 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6B137C890F7FCC1100459200 /* RecastRegion.cpp */; - name = "RecastRegion.cpp: 1255"; - rLen = 0; - rLoc = 30884; - rType = 0; - vrLen = 938; - vrLoc = 30309; - }; - 6B6BEC9D1299644A0077F7A4 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6B137C890F7FCC1100459200 /* RecastRegion.cpp */; - name = "RecastRegion.cpp: 305"; - rLen = 0; - rLoc = 8305; - rType = 0; - vrLen = 354; - vrLoc = 7986; - }; - 6B6BEC9E1299644A0077F7A4 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6B137C890F7FCC1100459200 /* RecastRegion.cpp */; - name = "RecastRegion.cpp: 319"; - rLen = 0; - rLoc = 8520; - rType = 0; - vrLen = 489; - vrLoc = 8360; - }; 6B6BECA51299680A0077F7A4 /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = 6BF7C4531115C277002B3F46 /* RecastArea.cpp */; @@ -1113,37 +674,7 @@ vrLen = 793; vrLoc = 10308; }; - 6B6BECA61299680A0077F7A4 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6B137C890F7FCC1100459200 /* RecastRegion.cpp */; - name = "RecastRegion.cpp: 319"; - rLen = 0; - rLoc = 8520; - rType = 0; - vrLen = 708; - vrLoc = 8174; - }; - 6B6BECA71299680A0077F7A4 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6B137C890F7FCC1100459200 /* RecastRegion.cpp */; - name = "RecastRegion.cpp: 1272"; - rLen = 0; - rLoc = 31381; - rType = 0; - vrLen = 941; - vrLoc = 30628; - }; - 6B6BECAA129968B20077F7A4 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6B137C890F7FCC1100459200 /* RecastRegion.cpp */; - name = "RecastRegion.cpp: 1254"; - rLen = 0; - rLoc = 30979; - rType = 0; - vrLen = 872; - vrLoc = 30724; - }; - 6B6BECAF129968E50077F7A4 /* PBXTextBookmark */ = { + 6B6BECB5129970130077F7A4 /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = 6B137C890F7FCC1100459200 /* RecastRegion.cpp */; name = "RecastRegion.cpp: 1262"; @@ -1153,7 +684,341 @@ vrLen = 795; vrLoc = 30801; }; - 6B74B5EA128312A900262888 /* main.cpp:211 */ = { + 6B6BECB6129970130077F7A4 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C7E0F7FCBFE00459200 /* Recast.h */; + name = "Recast.h: 254"; + rLen = 0; + rLoc = 9462; + rType = 0; + vrLen = 1531; + vrLoc = 9109; + }; + 6B6BECB7129970130077F7A4 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88B10B69E4C00DF20FB /* DetourNavMesh.h */; + name = "DetourNavMesh.h: 73"; + rLen = 0; + rLoc = 3562; + rType = 0; + vrLen = 1472; + vrLoc = 2394; + }; + 6B6BECB8129970130077F7A4 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88710B69E3E00DF20FB /* DetourNavMesh.cpp */; + name = "DetourNavMesh.cpp: 232"; + rLen = 0; + rLoc = 6115; + rType = 0; + vrLen = 1167; + vrLoc = 4398; + }; + 6B6BECB9129970130077F7A4 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF40D912196A25008CFCDF /* DetourNavMeshQuery.h */; + name = "DetourNavMeshQuery.h: 203"; + rLen = 0; + rLoc = 9351; + rType = 0; + vrLen = 1953; + vrLoc = 7848; + }; + 6B6BECC2129FA4F20077F7A4 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF40DA12196A3D008CFCDF /* DetourNavMeshQuery.cpp */; + name = "DetourNavMeshQuery.cpp: 2561"; + rLen = 0; + rLoc = 70699; + rType = 0; + vrLen = 909; + vrLoc = 29546; + }; + 6B6BECC3129FA4F20077F7A4 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF40DA12196A3D008CFCDF /* DetourNavMeshQuery.cpp */; + name = "DetourNavMeshQuery.cpp: 1138"; + rLen = 0; + rLoc = 31126; + rType = 0; + vrLen = 876; + vrLoc = 29579; + }; + 6B6BED8C129FB8670077F7A4 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF40DA12196A3D008CFCDF /* DetourNavMeshQuery.cpp */; + name = "DetourNavMeshQuery.cpp: 1126"; + rLen = 0; + rLoc = 30805; + rType = 0; + vrLen = 992; + vrLoc = 29546; + }; + 6B6BED8D129FB8670077F7A4 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88B10B69E4C00DF20FB /* DetourNavMesh.h */; + name = "DetourNavMesh.h: 73"; + rLen = 0; + rLoc = 3562; + rType = 0; + vrLen = 1531; + vrLoc = 2336; + }; + 6B6BED8E129FB8670077F7A4 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88B10B69E4C00DF20FB /* DetourNavMesh.h */; + name = "DetourNavMesh.h: 91"; + rLen = 0; + rLoc = 3562; + rType = 0; + vrLen = 1057; + vrLoc = 2463; + }; + 6B6BED92129FB8840077F7A4 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88B10B69E4C00DF20FB /* DetourNavMesh.h */; + name = "DetourNavMesh.h: 79"; + rLen = 0; + rLoc = 3187; + rType = 0; + vrLen = 897; + vrLoc = 2462; + }; + 6B6BED93129FC9550077F7A4 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88710B69E3E00DF20FB /* DetourNavMesh.cpp */; + name = "DetourNavMesh.cpp: 913"; + rLen = 0; + rLoc = 24754; + rType = 0; + vrLen = 785; + vrLoc = 26140; + }; + 6B6BED94129FC9550077F7A4 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF40D912196A25008CFCDF /* DetourNavMeshQuery.h */; + name = "DetourNavMeshQuery.h: 112"; + rLen = 0; + rLoc = 4934; + rType = 0; + vrLen = 1573; + vrLoc = 4574; + }; + 6B6BED95129FC9550077F7A4 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88B10B69E4C00DF20FB /* DetourNavMesh.h */; + name = "DetourNavMesh.h: 78"; + rLen = 21; + rLoc = 2806; + rType = 0; + vrLen = 1458; + vrLoc = 2273; + }; + 6B6BED96129FC9550077F7A4 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF40DA12196A3D008CFCDF /* DetourNavMeshQuery.cpp */; + name = "DetourNavMeshQuery.cpp: 843"; + rLen = 0; + rLoc = 22666; + rType = 0; + vrLen = 1205; + vrLoc = 22292; + }; + 6B6BED97129FC9550077F7A4 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF40DA12196A3D008CFCDF /* DetourNavMeshQuery.cpp */; + name = "DetourNavMeshQuery.cpp: 2495"; + rLen = 0; + rLoc = 65801; + rType = 0; + vrLen = 1110; + vrLoc = 65812; + }; + 6B6BEDB0129FCDB20077F7A4 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF40DA12196A3D008CFCDF /* DetourNavMeshQuery.cpp */; + name = "DetourNavMeshQuery.cpp: 1011"; + rLen = 0; + rLoc = 27646; + rType = 0; + vrLen = 439; + vrLoc = 27312; + }; + 6B6BEDB1129FCDB20077F7A4 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88B10B69E4C00DF20FB /* DetourNavMesh.h */; + name = "DetourNavMesh.h: 417"; + rLen = 21; + rLoc = 16429; + rType = 0; + vrLen = 1388; + vrLoc = 15695; + }; + 6B6BEDB2129FCDB20077F7A4 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88710B69E3E00DF20FB /* DetourNavMesh.cpp */; + name = "DetourNavMesh.cpp: 406"; + rLen = 0; + rLoc = 10886; + rType = 0; + vrLen = 1031; + vrLoc = 10309; + }; + 6B6BEDB3129FCDB20077F7A4 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB93C7B10CFE1D500F74F2B /* DetourDebugDraw.cpp */; + name = "DetourDebugDraw.cpp: 424"; + rLen = 0; + rLoc = 11902; + rType = 0; + vrLen = 800; + vrLoc = 11400; + }; + 6B6BEDB4129FCDB20077F7A4 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B98463211E6144400FA177B /* Sample_SoloMeshTiled.cpp */; + name = "Sample_SoloMeshTiled.cpp: 1096"; + rLen = 0; + rLoc = 33219; + rType = 0; + vrLen = 608; + vrLoc = 32746; + }; + 6B6BEDB5129FCDB20077F7A4 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BA1E88810C7BFC9008007F6 /* Sample_SoloMeshSimple.cpp */; + name = "Sample_SoloMeshSimple.cpp: 653"; + rLen = 0; + rLoc = 20319; + rType = 0; + vrLen = 626; + vrLoc = 19857; + }; + 6B6BEDB6129FCDB20077F7A4 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B2AEC520FFB8958005BE9CC /* Sample_TileMesh.cpp */; + name = "Sample_TileMesh.cpp: 860"; + rLen = 0; + rLoc = 22924; + rType = 0; + vrLen = 843; + vrLoc = 22448; + }; + 6B6BEDB7129FCDB20077F7A4 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB7FC0A10EBB6AA006DA0A6 /* NavMeshTesterTool.cpp */; + rLen = 0; + rLoc = 24168; + rType = 0; + }; + 6B6BEDB8129FCDB20077F7A4 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB7FC0A10EBB6AA006DA0A6 /* NavMeshTesterTool.cpp */; + name = "NavMeshTesterTool.cpp: 855"; + rLen = 0; + rLoc = 24017; + rType = 0; + vrLen = 566; + vrLoc = 23815; + }; + 6B6BEDBF129FCE930077F7A4 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB7FC0A10EBB6AA006DA0A6 /* NavMeshTesterTool.cpp */; + name = "NavMeshTesterTool.cpp: 858"; + rLen = 0; + rLoc = 24073; + rType = 0; + vrLen = 800; + vrLoc = 23815; + }; + 6B6BEDC0129FCE930077F7A4 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88710B69E3E00DF20FB /* DetourNavMesh.cpp */; + name = "DetourNavMesh.cpp: 406"; + rLen = 0; + rLoc = 10886; + rType = 0; + vrLen = 1334; + vrLoc = 10133; + }; + 6B6BEDC1129FCE930077F7A4 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88710B69E3E00DF20FB /* DetourNavMesh.cpp */; + name = "DetourNavMesh.cpp: 232"; + rLen = 0; + rLoc = 6115; + rType = 0; + vrLen = 1139; + vrLoc = 5510; + }; + 6B6BEDC4129FCF980077F7A4 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88710B69E3E00DF20FB /* DetourNavMesh.cpp */; + name = "DetourNavMesh.cpp: 237"; + rLen = 0; + rLoc = 6210; + rType = 0; + vrLen = 1061; + vrLoc = 5151; + }; + 6B6BEDC5129FCF980077F7A4 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88B10B69E4C00DF20FB /* DetourNavMesh.h */; + name = "DetourNavMesh.h: 95"; + rLen = 0; + rLoc = 3712; + rType = 0; + vrLen = 1440; + vrLoc = 2462; + }; + 6B6BEDC6129FCF980077F7A4 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BA1E88810C7BFC9008007F6 /* Sample_SoloMeshSimple.cpp */; + name = "Sample_SoloMeshSimple.cpp: 643"; + rLen = 0; + rLoc = 20061; + rType = 0; + vrLen = 573; + vrLoc = 19677; + }; + 6B6BEDC7129FCF980077F7A4 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB7FC0A10EBB6AA006DA0A6 /* NavMeshTesterTool.cpp */; + rLen = 0; + rLoc = 17738; + rType = 0; + }; + 6B6BEDC8129FCF980077F7A4 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB7FC0A10EBB6AA006DA0A6 /* NavMeshTesterTool.cpp */; + name = "NavMeshTesterTool.cpp: 648"; + rLen = 0; + rLoc = 17877; + rType = 0; + vrLen = 836; + vrLoc = 17461; + }; + 6B6BEDCD129FD0400077F7A4 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB7FC0A10EBB6AA006DA0A6 /* NavMeshTesterTool.cpp */; + name = "NavMeshTesterTool.cpp: 482"; + rLen = 16; + rLoc = 12845; + rType = 0; + vrLen = 762; + vrLoc = 12550; + }; + 6B6BEDCE129FD0400077F7A4 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB7FC0A10EBB6AA006DA0A6 /* NavMeshTesterTool.cpp */; + name = "NavMeshTesterTool.cpp: 482"; + rLen = 0; + rLoc = 12862; + rType = 0; + vrLen = 762; + vrLoc = 12550; + }; + 6B6BEDD2129FD0580077F7A4 /* NavMeshTesterTool.cpp:722 */ = { isa = PBXFileBreakpoint; actions = ( ); @@ -1161,16 +1026,207 @@ continueAfterActions = 0; countType = 0; delayBeforeContinue = 0; - fileReference = 6B25B6180FFA62BE004F1BC4 /* main.cpp */; - functionName = "main(int /*argc*/, char** /*argv*/)"; - hitCount = 0; + fileReference = 6BB7FC0A10EBB6AA006DA0A6 /* NavMeshTesterTool.cpp */; + functionName = "NavMeshTesterTool::recalc()"; + hitCount = 3; ignoreCount = 0; - lineNumber = 211; + lineNumber = 722; location = Recast; - modificationTime = 312042355.03191; + modificationTime = 312463578.547393; originalNumberOfMultipleMatches = 1; state = 1; }; + 6B6BEDD4129FD05B0077F7A4 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB7FC0A10EBB6AA006DA0A6 /* NavMeshTesterTool.cpp */; + name = "NavMeshTesterTool.cpp: 478"; + rLen = 24; + rLoc = 12765; + rType = 0; + vrLen = 639; + vrLoc = 19452; + }; + 6B6BEDD5129FD05B0077F7A4 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB7FC0A10EBB6AA006DA0A6 /* NavMeshTesterTool.cpp */; + name = "NavMeshTesterTool.cpp: 720"; + rLen = 0; + rLoc = 19875; + rType = 0; + vrLen = 639; + vrLoc = 19452; + }; + 6B6BEDD6129FD07E0077F7A4 /* DetourNavMeshQuery.cpp:818 */ = { + isa = PBXFileBreakpoint; + actions = ( + ); + breakpointStyle = 0; + continueAfterActions = 0; + countType = 0; + delayBeforeContinue = 0; + fileReference = 6BAF40DA12196A3D008CFCDF /* DetourNavMeshQuery.cpp */; + functionName = "dtNavMeshQuery::updateSlicedFindPath(const int maxIter)"; + hitCount = 0; + ignoreCount = 0; + lineNumber = 818; + location = Recast; + modificationTime = 312463486.272693; + originalNumberOfMultipleMatches = 1; + state = 1; + }; + 6B6BEDD8129FD0830077F7A4 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB7FC0A10EBB6AA006DA0A6 /* NavMeshTesterTool.cpp */; + name = "NavMeshTesterTool.cpp: 720"; + rLen = 0; + rLoc = 19875; + rType = 0; + vrLen = 720; + vrLoc = 19508; + }; + 6B6BEDD9129FD0830077F7A4 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF40DA12196A3D008CFCDF /* DetourNavMeshQuery.cpp */; + name = "DetourNavMeshQuery.cpp: 771"; + rLen = 0; + rLoc = 20784; + rType = 0; + vrLen = 692; + vrLoc = 21748; + }; + 6B6BEDDA129FD0830077F7A4 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF40DA12196A3D008CFCDF /* DetourNavMeshQuery.cpp */; + name = "DetourNavMeshQuery.cpp: 771"; + rLen = 0; + rLoc = 20784; + rType = 0; + vrLen = 692; + vrLoc = 21748; + }; + 6B6BEDDB129FD0A10077F7A4 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF40DA12196A3D008CFCDF /* DetourNavMeshQuery.cpp */; + name = "DetourNavMeshQuery.cpp: 771"; + rLen = 0; + rLoc = 20784; + rType = 0; + vrLen = 692; + vrLoc = 21748; + }; + 6B6BEDDC129FD0A10077F7A4 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B25B6180FFA62BE004F1BC4 /* main.cpp */; + rLen = 0; + rLoc = 210; + rType = 1; + }; + 6B6BEDDD129FD0A10077F7A4 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B25B6180FFA62BE004F1BC4 /* main.cpp */; + name = "main.cpp: 211"; + rLen = 0; + rLoc = 5160; + rType = 0; + vrLen = 633; + vrLoc = 4897; + }; + 6B6BEDE2129FD0BA0077F7A4 /* NavMeshTesterTool.cpp:482 */ = { + isa = PBXFileBreakpoint; + actions = ( + ); + breakpointStyle = 0; + continueAfterActions = 0; + countType = 0; + delayBeforeContinue = 0; + fileReference = 6BB7FC0A10EBB6AA006DA0A6 /* NavMeshTesterTool.cpp */; + functionName = "NavMeshTesterTool::handleUpdate(const float /*dt*/)"; + hitCount = 0; + ignoreCount = 0; + lineNumber = 482; + location = Recast; + modificationTime = 312463546.226455; + originalNumberOfMultipleMatches = 1; + state = 1; + }; + 6B6BEDE4129FD0BF0077F7A4 /* NavMeshTesterTool.cpp:486 */ = { + isa = PBXFileBreakpoint; + actions = ( + ); + breakpointStyle = 0; + continueAfterActions = 0; + countType = 0; + delayBeforeContinue = 0; + fileReference = 6BB7FC0A10EBB6AA006DA0A6 /* NavMeshTesterTool.cpp */; + functionName = "NavMeshTesterTool::handleUpdate(const float /*dt*/)"; + hitCount = 0; + ignoreCount = 0; + lineNumber = 486; + location = Recast; + modificationTime = 312463551.566745; + originalNumberOfMultipleMatches = 1; + state = 1; + }; + 6B6BEDE6129FD0C30077F7A4 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B25B6180FFA62BE004F1BC4 /* main.cpp */; + name = "main.cpp: 211"; + rLen = 0; + rLoc = 5160; + rType = 0; + vrLen = 625; + vrLoc = 4897; + }; + 6B6BEDE7129FD0C30077F7A4 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB7FC0A10EBB6AA006DA0A6 /* NavMeshTesterTool.cpp */; + name = "NavMeshTesterTool.cpp: 484"; + rLen = 0; + rLoc = 12921; + rType = 0; + vrLen = 831; + vrLoc = 12746; + }; + 6B6BEDE8129FD0C30077F7A4 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB7FC0A10EBB6AA006DA0A6 /* NavMeshTesterTool.cpp */; + name = "NavMeshTesterTool.cpp: 484"; + rLen = 0; + rLoc = 12921; + rType = 0; + vrLen = 831; + vrLoc = 12746; + }; + 6B6BEDEB129FD0F60077F7A4 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB7FC0A10EBB6AA006DA0A6 /* NavMeshTesterTool.cpp */; + name = "NavMeshTesterTool.cpp: 481"; + rLen = 0; + rLoc = 12841; + rType = 0; + vrLen = 720; + vrLoc = 19508; + }; + 6B6BEDEC129FD0F60077F7A4 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88B10B69E4C00DF20FB /* DetourNavMesh.h */; + name = "DetourNavMesh.h: 95"; + rLen = 0; + rLoc = 3712; + rType = 0; + vrLen = 1155; + vrLoc = 2746; + }; + 6B6BEDED129FD0F60077F7A4 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88B10B69E4C00DF20FB /* DetourNavMesh.h */; + name = "DetourNavMesh.h: 95"; + rLen = 0; + rLoc = 3729; + rType = 0; + vrLen = 648; + vrLoc = 3404; + }; 6B74B5F3128312AC00262888 /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = 6B8036AD113BAABE005ED67B /* Sample_Debug.cpp */; @@ -1205,20 +1261,10 @@ ignoreCount = 0; lineNumber = 296; location = Recast; - modificationTime = 312042355.052158; + modificationTime = 312463420.690158; originalNumberOfMultipleMatches = 1; state = 1; }; - 6B74B60F128312E900262888 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6B25B6180FFA62BE004F1BC4 /* main.cpp */; - name = "main.cpp: 183"; - rLen = 0; - rLoc = 4517; - rType = 0; - vrLen = 637; - vrLoc = 4260; - }; 6B74B626128314A500262888 /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = 6B324C64111C5D9A00EBD2FD /* ConvexVolumeTool.h */; @@ -1289,16 +1335,6 @@ vrLen = 956; vrLoc = 1526; }; - 6B74B7071286AEBD00262888 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6BB93C7A10CFE1D500F74F2B /* DebugDraw.cpp */; - name = "DebugDraw.cpp: 321"; - rLen = 0; - rLoc = 8933; - rType = 0; - vrLen = 932; - vrLoc = 8604; - }; 6B74B72E1286B1B000262888 /* CrowdManager.cpp:1313 */ = { isa = PBXFileBreakpoint; actions = ( @@ -1313,7 +1349,7 @@ ignoreCount = 0; lineNumber = 1313; location = Recast; - modificationTime = 312042355.124587; + modificationTime = 312463420.744539; originalNumberOfMultipleMatches = 1; state = 1; }; @@ -1347,16 +1383,6 @@ vrLen = 621; vrLoc = 30539; }; - 6B74B76F1286F56B00262888 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6B8DE88710B69E3E00DF20FB /* DetourNavMesh.cpp */; - name = "DetourNavMesh.cpp: 1169"; - rLen = 0; - rLoc = 31834; - rType = 0; - vrLen = 625; - vrLoc = 23739; - }; 6B74B7771286F61200262888 /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = 6B8DE88C10B69E4C00DF20FB /* DetourNavMeshBuilder.h */; @@ -1397,26 +1423,6 @@ vrLen = 893; vrLoc = 1971; }; - 6B74B7831286F72D00262888 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6B2AEC520FFB8958005BE9CC /* Sample_TileMesh.cpp */; - name = "Sample_TileMesh.cpp: 1156"; - rLen = 62; - rLoc = 32666; - rType = 0; - vrLen = 1382; - vrLoc = 31865; - }; - 6B74B7841286F72D00262888 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6B98463211E6144400FA177B /* Sample_SoloMeshTiled.cpp */; - name = "Sample_SoloMeshTiled.cpp: 1062"; - rLen = 0; - rLoc = 32283; - rType = 0; - vrLen = 1365; - vrLoc = 31388; - }; 6B74B7901286F77500262888 /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = 6B8DE88810B69E3E00DF20FB /* DetourNavMeshBuilder.cpp */; @@ -1575,7 +1581,7 @@ ignoreCount = 0; lineNumber = 1197; location = Recast; - modificationTime = 312042355.013579; + modificationTime = 312463420.644555; originalNumberOfMultipleMatches = 1; state = 1; }; @@ -1618,9 +1624,9 @@ }; 6B8DE88710B69E3E00DF20FB /* DetourNavMesh.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {915, 16172}}"; - sepNavSelRange = "{31834, 0}"; - sepNavVisRange = "{23739, 625}"; + sepNavIntBoundsRect = "{{0, 0}, {853, 16146}}"; + sepNavSelRange = "{6210, 0}"; + sepNavVisRange = "{5151, 1061}"; sepNavWindowFrame = "{{15, 51}, {1214, 722}}"; }; }; @@ -1633,9 +1639,9 @@ }; 6B8DE88B10B69E4C00DF20FB /* DetourNavMesh.h */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {866, 5408}}"; - sepNavSelRange = "{2770, 0}"; - sepNavVisRange = "{2458, 1409}"; + sepNavIntBoundsRect = "{{0, 0}, {866, 5902}}"; + sepNavSelRange = "{3729, 0}"; + sepNavVisRange = "{3404, 648}"; }; }; 6B8DE88C10B69E4C00DF20FB /* DetourNavMeshBuilder.h */ = { @@ -1650,7 +1656,7 @@ fRef = 6B8DE88B10B69E4C00DF20FB /* DetourNavMesh.h */; name = detail; rLen = 0; - rLoc = 13611; + rLoc = 14959; rType = 0; vrLen = 1182; vrLoc = 9676; @@ -1669,7 +1675,7 @@ ignoreCount = 0; lineNumber = 78; location = Recast; - modificationTime = 312042350.053281; + modificationTime = 312463411.59927; originalNumberOfMultipleMatches = 0; state = 2; }; @@ -1686,7 +1692,7 @@ hitCount = 0; ignoreCount = 0; lineNumber = 131; - modificationTime = 312042536.28699; + modificationTime = 312463596.064153; originalNumberOfMultipleMatches = 1; state = 1; }; @@ -1699,9 +1705,9 @@ }; 6B98463211E6144400FA177B /* Sample_SoloMeshTiled.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {1013, 14417}}"; - sepNavSelRange = "{26670, 0}"; - sepNavVisRange = "{26182, 1352}"; + sepNavIntBoundsRect = "{{0, 0}, {853, 14781}}"; + sepNavSelRange = "{33219, 0}"; + sepNavVisRange = "{32746, 608}"; sepNavWindowFrame = "{{38, 30}, {1214, 722}}"; }; }; @@ -1749,9 +1755,9 @@ }; 6BA1E88810C7BFC9008007F6 /* Sample_SoloMeshSimple.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {1139, 8593}}"; - sepNavSelRange = "{20711, 0}"; - sepNavVisRange = "{20290, 461}"; + sepNavIntBoundsRect = "{{0, 0}, {853, 8658}}"; + sepNavSelRange = "{20061, 0}"; + sepNavVisRange = "{19677, 573}"; }; }; 6BA1E88E10C7BFD3008007F6 /* Sample_SoloMeshSimple.h */ = { @@ -1775,7 +1781,7 @@ ignoreCount = 0; lineNumber = 137; location = Recast; - modificationTime = 312042354.785557; + modificationTime = 312463420.832202; originalNumberOfMultipleMatches = 1; state = 1; }; @@ -1796,16 +1802,16 @@ }; 6BAF40D912196A25008CFCDF /* DetourNavMeshQuery.h */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {873, 5278}}"; - sepNavSelRange = "{9856, 16}"; - sepNavVisRange = "{8190, 2392}"; + sepNavIntBoundsRect = "{{0, 0}, {873, 5226}}"; + sepNavSelRange = "{4934, 0}"; + sepNavVisRange = "{4574, 1573}"; }; }; 6BAF40DA12196A3D008CFCDF /* DetourNavMeshQuery.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {853, 33111}}"; - sepNavSelRange = "{31089, 0}"; - sepNavVisRange = "{30752, 964}"; + sepNavIntBoundsRect = "{{0, 0}, {853, 34398}}"; + sepNavSelRange = "{20784, 0}"; + sepNavVisRange = "{21748, 692}"; }; }; 6BAF427A121ADCC2008CFCDF /* DetourAssert.h */ = { @@ -1859,9 +1865,9 @@ }; 6BB7FC0A10EBB6AA006DA0A6 /* NavMeshTesterTool.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {931, 15951}}"; - sepNavSelRange = "{8413, 0}"; - sepNavVisRange = "{8249, 624}"; + sepNavIntBoundsRect = "{{0, 0}, {853, 16133}}"; + sepNavSelRange = "{12841, 0}"; + sepNavVisRange = "{19508, 720}"; sepNavWindowFrame = "{{38, 30}, {1214, 722}}"; }; }; @@ -1909,9 +1915,9 @@ }; 6BB93C7B10CFE1D500F74F2B /* DetourDebugDraw.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {950, 5902}}"; - sepNavSelRange = "{4852, 0}"; - sepNavVisRange = "{4283, 1195}"; + sepNavIntBoundsRect = "{{0, 0}, {853, 6097}}"; + sepNavSelRange = "{11902, 0}"; + sepNavVisRange = "{11400, 800}"; sepNavWindowFrame = "{{61, 9}, {1214, 722}}"; }; }; @@ -1951,7 +1957,7 @@ ignoreCount = 0; lineNumber = 281; location = Recast; - modificationTime = 312042354.73736; + modificationTime = 312463420.441296; originalNumberOfMultipleMatches = 1; state = 1; }; @@ -1997,7 +2003,7 @@ ignoreCount = 0; lineNumber = 547; location = Recast; - modificationTime = 312042354.843051; + modificationTime = 312463420.531742; originalNumberOfMultipleMatches = 1; state = 1; }; @@ -2024,24 +2030,6 @@ sepNavWindowFrame = "{{15, 134}, {1120, 639}}"; }; }; - 6BD66851124350F50021A7A4 /* NavMeshTesterTool.cpp:486 */ = { - isa = PBXFileBreakpoint; - actions = ( - ); - breakpointStyle = 0; - continueAfterActions = 0; - countType = 0; - delayBeforeContinue = 0; - fileReference = 6BB7FC0A10EBB6AA006DA0A6 /* NavMeshTesterTool.cpp */; - functionName = "NavMeshTesterTool::handleUpdate(const float /*dt*/)"; - hitCount = 0; - ignoreCount = 0; - lineNumber = 486; - location = Recast; - modificationTime = 312042354.932704; - originalNumberOfMultipleMatches = 1; - state = 1; - }; 6BF5F23911747606000502A6 /* Filelist.cpp */ = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {931, 1222}}"; diff --git a/RecastDemo/Build/Xcode/Recast.xcodeproj/memon.perspectivev3 b/RecastDemo/Build/Xcode/Recast.xcodeproj/memon.perspectivev3 index ca447a1..d22a9b6 100644 --- a/RecastDemo/Build/Xcode/Recast.xcodeproj/memon.perspectivev3 +++ b/RecastDemo/Build/Xcode/Recast.xcodeproj/memon.perspectivev3 @@ -284,14 +284,14 @@ PBXSmartGroupTreeModuleOutlineStateSelectionKey - 34 - 27 + 15 + 11 1 0 PBXSmartGroupTreeModuleOutlineStateVisibleRectKey - {{0, 394}, {264, 622}} + {{0, 0}, {264, 622}} PBXTopSmartGroupGIDs @@ -326,7 +326,7 @@ PBXProjectModuleGUID 6B8632A30F78115100E2684A PBXProjectModuleLabel - RecastRegion.cpp + DetourNavMesh.h PBXSplitModuleInNavigatorKey Split0 @@ -334,11 +334,11 @@ PBXProjectModuleGUID 6B8632A40F78115100E2684A PBXProjectModuleLabel - RecastRegion.cpp + DetourNavMesh.h _historyCapacity 0 bookmark - 6B6BECAF129968E50077F7A4 + 6B6BEDED129FD0F60077F7A4 history 6B8D565F127ADB0D0077C699 @@ -353,39 +353,40 @@ 6B74B627128314A500262888 6B74B628128314A500262888 6B74B62A128314A500262888 - 6B74B62B128314A500262888 6B74B6D81286ABC000262888 6B74B7061286AEBD00262888 6B74B7601286BB6900262888 6B74B7611286BB6900262888 6B74B76B1286F56B00262888 - 6B74B76F1286F56B00262888 6B74B7771286F61200262888 6B74B7801286F72D00262888 6B74B7811286F72D00262888 6B74B7821286F72D00262888 6B74B7901286F77500262888 - 6B74B7991286F7CD00262888 6B74B7AD1286F93000262888 6B74B7B21286F99100262888 6B74B7C01286FA5200262888 6B74B7C51286FAB500262888 - 6B74B7CD128D1BE600262888 - 6B6BE685129152770077F7A4 6B6BE686129152770077F7A4 6B6BE687129152770077F7A4 6B6BE689129152770077F7A4 6B6BE68B129152770077F7A4 6B6BE68C129152770077F7A4 - 6B6BE68D129152770077F7A4 - 6B6BEC2F12995D2A0077F7A4 - 6B6BEC3012995D2A0077F7A4 6B6BEC4712995DEA0077F7A4 6B6BEC4812995DEA0077F7A4 - 6B6BEC75129961C80077F7A4 - 6B6BEC7E129962F50077F7A4 6B6BECA51299680A0077F7A4 - 6B6BECA61299680A0077F7A4 + 6B6BECB5129970130077F7A4 + 6B6BECB6129970130077F7A4 + 6B6BED94129FC9550077F7A4 + 6B6BEDB3129FCDB20077F7A4 + 6B6BEDB4129FCDB20077F7A4 + 6B6BEDB6129FCDB20077F7A4 + 6B6BEDC4129FCF980077F7A4 + 6B6BEDC6129FCF980077F7A4 + 6B6BEDDB129FD0A10077F7A4 + 6B6BEDE6129FD0C30077F7A4 + 6B6BEDEB129FD0F60077F7A4 + 6B6BEDEC129FD0F60077F7A4 SplitCount @@ -399,18 +400,18 @@ GeometryConfiguration Frame - {{0, 0}, {914, 533}} + {{0, 0}, {914, 443}} RubberWindowFrame 47 97 1200 681 0 0 1280 778 Module PBXNavigatorGroup Proportion - 533pt + 443pt Proportion - 102pt + 192pt Tabs @@ -424,9 +425,7 @@ GeometryConfiguration Frame - {{10, 27}, {914, 75}} - RubberWindowFrame - 47 97 1200 681 0 0 1280 778 + {{10, 27}, {914, 78}} Module XCDetailModule @@ -442,7 +441,9 @@ GeometryConfiguration Frame - {{10, 27}, {914, 66}} + {{10, 27}, {914, 165}} + RubberWindowFrame + 47 97 1200 681 0 0 1280 778 Module PBXProjectFindModule @@ -508,11 +509,11 @@ TableOfContents - 6B6BEC1A129959080077F7A4 + 6B6BED8F129FB8670077F7A4 1CA23ED40692098700951B8B - 6B6BEC1B129959080077F7A4 + 6B6BED90129FB8670077F7A4 6B8632A30F78115100E2684A - 6B6BEC1C129959080077F7A4 + 6B6BED91129FB8670077F7A4 1CA23EDF0692099D00951B8B 1CA23EE00692099D00951B8B 1CA23EE10692099D00951B8B @@ -660,14 +661,14 @@ TableOfContents - 6B6BEC3312995D2A0077F7A4 + 6B6BEDB9129FCDB20077F7A4 1CCC7628064C1048000F2A68 1CCC7629064C1048000F2A68 - 6B6BEC3412995D2A0077F7A4 - 6B6BEC3512995D2A0077F7A4 - 6B6BEC3612995D2A0077F7A4 - 6B6BEC3712995D2A0077F7A4 - 6B6BEC3812995D2A0077F7A4 + 6B6BEDBA129FCDB20077F7A4 + 6B6BEDBB129FCDB20077F7A4 + 6B6BEDBC129FCDB20077F7A4 + 6B6BEDBD129FCDB20077F7A4 + 6B6BEDBE129FCDB20077F7A4 ToolbarConfigUserDefaultsMinorVersion 2 @@ -699,9 +700,9 @@ 5 WindowOrderList - 6B6BECB0129968E50077F7A4 - 6B6BEC3B12995D2A0077F7A4 - 6B6BEC3A12995D2A0077F7A4 + 6B6BEDEE129FD0F60077F7A4 + 6B6BEDD0129FD0400077F7A4 + 6B6BEDD1129FD0400077F7A4 /Users/memon/Code/recastnavigation/RecastDemo/Build/Xcode/Recast.xcodeproj WindowString diff --git a/RecastDemo/Source/NavMeshTesterTool.cpp b/RecastDemo/Source/NavMeshTesterTool.cpp index 38b06e4..95bfac6 100644 --- a/RecastDemo/Source/NavMeshTesterTool.cpp +++ b/RecastDemo/Source/NavMeshTesterTool.cpp @@ -442,7 +442,8 @@ void NavMeshTesterTool::handleToggle() m_pathIterPolyCount -= npos; // Handle the connection. - if (m_navMesh->getOffMeshConnectionPolyEndPoints(prevRef, polyRef, startPos, endPos) == DT_SUCCESS) + dtStatus status = m_navMesh->getOffMeshConnectionPolyEndPoints(prevRef, polyRef, startPos, endPos); + if (dtStatusSucceed(status)) { if (m_nsmoothPath < MAX_SMOOTH) { @@ -476,12 +477,11 @@ void NavMeshTesterTool::handleUpdate(const float /*dt*/) { if (m_toolMode == TOOLMODE_PATHFIND_SLICED) { - if (m_pathFindStatus == DT_IN_PROGRESS) + if (dtStatusInProgress(m_pathFindStatus)) { m_pathFindStatus = m_navQuery->updateSlicedFindPath(1); } - - if (m_pathFindStatus == DT_SUCCESS) + if (dtStatusSucceed(m_pathFindStatus)) { m_navQuery->finalizeSlicedFindPath(m_polys, &m_npolys, MAX_POLYS); m_nstraightPath = 0; @@ -498,7 +498,7 @@ void NavMeshTesterTool::handleUpdate(const float /*dt*/) m_straightPathPolys, &m_nstraightPath, MAX_POLYS); } - m_pathFindStatus = DT_FAILURE; + m_pathFindStatus = DT_FAILURE; } } } @@ -639,7 +639,8 @@ void NavMeshTesterTool::recalc() npolys -= npos; // Handle the connection. - if (m_navMesh->getOffMeshConnectionPolyEndPoints(prevRef, polyRef, startPos, endPos) == DT_SUCCESS) + dtStatus status = m_navMesh->getOffMeshConnectionPolyEndPoints(prevRef, polyRef, startPos, endPos); + if (dtStatusSucceed(status)) { if (m_nsmoothPath < MAX_SMOOTH) { @@ -856,7 +857,8 @@ static void getPolyCenter(dtNavMesh* navMesh, dtPolyRef ref, float* center) const dtMeshTile* tile = 0; const dtPoly* poly = 0; - if (navMesh->getTileAndPolyByRef(ref, &tile, &poly) != DT_SUCCESS) + dtStatus status = navMesh->getTileAndPolyByRef(ref, &tile, &poly); + if (dtStatusFailed(status)) return; for (int i = 0; i < (int)poly->vertCount; ++i) diff --git a/RecastDemo/Source/Sample_SoloMeshSimple.cpp b/RecastDemo/Source/Sample_SoloMeshSimple.cpp index f704351..45c8659 100644 --- a/RecastDemo/Source/Sample_SoloMeshSimple.cpp +++ b/RecastDemo/Source/Sample_SoloMeshSimple.cpp @@ -640,14 +640,18 @@ bool Sample_SoloMeshSimple::handleBuild() return false; } - if (m_navMesh->init(navData, navDataSize, DT_TILE_FREE_DATA) != DT_SUCCESS) + dtStatus status; + + status = m_navMesh->init(navData, navDataSize, DT_TILE_FREE_DATA); + if (dtStatusFailed(status)) { dtFree(navData); m_ctx->log(RC_LOG_ERROR, "Could not init Detour navmesh"); return false; } - if (m_navQuery->init(m_navMesh, 2048) != DT_SUCCESS) + status = m_navQuery->init(m_navMesh, 2048); + if (dtStatusFailed(status)) { m_ctx->log(RC_LOG_ERROR, "Could not init Detour navmesh query"); return false; diff --git a/RecastDemo/Source/Sample_SoloMeshTiled.cpp b/RecastDemo/Source/Sample_SoloMeshTiled.cpp index a6bf423..20b1f1f 100644 --- a/RecastDemo/Source/Sample_SoloMeshTiled.cpp +++ b/RecastDemo/Source/Sample_SoloMeshTiled.cpp @@ -1082,14 +1082,18 @@ bool Sample_SoloMeshTiled::handleBuild() return false; } - if (m_navMesh->init(navData, navDataSize, DT_TILE_FREE_DATA) != DT_SUCCESS) + dtStatus status; + + status = m_navMesh->init(navData, navDataSize, DT_TILE_FREE_DATA); + if (dtStatusFailed(status)) { dtFree(navData); m_ctx->log(RC_LOG_ERROR, "Could not init Detour navmesh"); return false; } - if (m_navQuery->init(m_navMesh, 2048) != DT_SUCCESS) + status = m_navQuery->init(m_navMesh, 2048); + if (dtStatusFailed(status)) { m_ctx->log(RC_LOG_ERROR, "Could not init Detour navmesh query"); return false; diff --git a/RecastDemo/Source/Sample_TileMesh.cpp b/RecastDemo/Source/Sample_TileMesh.cpp index e0fe3b2..58444e3 100644 --- a/RecastDemo/Source/Sample_TileMesh.cpp +++ b/RecastDemo/Source/Sample_TileMesh.cpp @@ -296,8 +296,13 @@ dtNavMesh* Sample_TileMesh::loadAll(const char* path) } dtNavMesh* mesh = dtAllocNavMesh(); - - if (!mesh || mesh->init(&header.params) != DT_SUCCESS) + if (!mesh) + { + fclose(fp); + return 0; + } + dtStatus status = mesh->init(&header.params); + if (dtStatusFailed(status)) { fclose(fp); return 0; @@ -712,13 +717,18 @@ bool Sample_TileMesh::handleBuild() params.tileHeight = m_tileSize*m_cellSize; params.maxTiles = m_maxTiles; params.maxPolys = m_maxPolysPerTile; - if (m_navMesh->init(¶ms) != DT_SUCCESS) + + dtStatus status; + + status = m_navMesh->init(¶ms); + if (dtStatusFailed(status)) { m_ctx->log(RC_LOG_ERROR, "buildTiledNavigation: Could not init navmesh."); return false; } - if (m_navQuery->init(m_navMesh, 2048) != DT_SUCCESS) + status = m_navQuery->init(m_navMesh, 2048); + if (dtStatusFailed(status)) { m_ctx->log(RC_LOG_ERROR, "buildTiledNavigation: Could not init Detour navmesh query"); return false; @@ -766,7 +776,8 @@ void Sample_TileMesh::buildTile(const float* pos) m_navMesh->removeTile(m_navMesh->getTileRefAt(tx,ty),0,0); // Let the navmesh own the data. - if (m_navMesh->addTile(data,dataSize,DT_TILE_FREE_DATA,0,0) != DT_SUCCESS) + dtStatus status = m_navMesh->addTile(data,dataSize,DT_TILE_FREE_DATA,0,0); + if (dtStatusFailed(status)) dtFree(data); } @@ -846,7 +857,8 @@ void Sample_TileMesh::buildAllTiles() // Remove any previous data (navmesh owns and deletes the data). m_navMesh->removeTile(m_navMesh->getTileRefAt(x,y),0,0); // Let the navmesh own the data. - if (m_navMesh->addTile(data,dataSize,DT_TILE_FREE_DATA,0,0) != DT_SUCCESS) + dtStatus status = m_navMesh->addTile(data,dataSize,DT_TILE_FREE_DATA,0,0); + if (dtStatusFailed(status)) dtFree(data); } }