diff --git a/DebugUtils/Source/DetourDebugDraw.cpp b/DebugUtils/Source/DetourDebugDraw.cpp index 3a117e6..f350564 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)) + if (mesh.getTileAndPolyByRef(ref, &tile, &poly) != DT_SUCCESS) return; dd->depthMask(false); diff --git a/Detour/Include/DetourNavMesh.h b/Detour/Include/DetourNavMesh.h index 573e77c..bdb11c9 100644 --- a/Detour/Include/DetourNavMesh.h +++ b/Detour/Include/DetourNavMesh.h @@ -66,6 +66,17 @@ enum dtPolyTypes DT_POLYTYPE_OFFMESH_CONNECTION = 1, // Off-mesh connections. }; +enum dtStatus +{ + 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. +}; + + // Structure describing the navigation polygon data. struct dtPoly { @@ -177,7 +188,7 @@ public: // Params: // params - (in) navmesh initialization params, see dtNavMeshParams. // Returns: True if succeed, else false. - bool init(const dtNavMeshParams* params); + dtStatus init(const dtNavMeshParams* params); // Initializes the nav mesh for single tile use. // Params: @@ -185,7 +196,7 @@ public: // dataSize - (in) Data size of the new tile mesh. // flags - (in) Tile flags, see dtTileFlags. // Returns: True if succeed, else false. - bool init(unsigned char* data, const int dataSize, const int flags); + dtStatus init(unsigned char* data, const int dataSize, const int flags); // Returns pointer to navmesh initialization params. const dtNavMeshParams* getParams() const; @@ -198,17 +209,16 @@ public: // dataSize - (in) Data size of the new tile mesh. // flags - (in) Tile flags, see dtTileFlags. // lastRef - (in,optional) Last tile ref, the tile will be restored so that - // the reference (as well as poly references) will be the same. - // Returns: Reference to the tile, 0 if failed. - dtTileRef addTile(unsigned char* data, int dataSize, int flags, dtTileRef lastRef = 0); + // the reference (as well as poly references) will be the same. Default: 0. + // result - (out,optional) tile ref if the tile was succesfully added. + dtStatus addTile(unsigned char* data, int dataSize, int flags, dtTileRef lastRef, dtTileRef* result); // Removes specified tile. // Params: // ref - (in) Reference to the tile to remove. // data - (out) Data associated with deleted tile. // dataSize - (out) Size of the data associated with deleted tile. - // Returns: True if remove suceed, else false. - bool removeTile(dtTileRef ref, unsigned char** data, int* dataSize); + dtStatus removeTile(dtTileRef ref, unsigned char** data, int* dataSize); // Calculates tile location based in input world position. // Params: @@ -249,8 +259,7 @@ public: // ref - (in) reference to a polygon. // tile - (out) pointer to the tile containing the polygon. // poly - (out) pointer to the polygon. - // Returns false if poly ref is not valid, true on success. - bool getTileAndPolyByRef(const dtPolyRef ref, const dtMeshTile** tile, const dtPoly** poly) const; + dtStatus getTileAndPolyByRef(const dtPolyRef ref, const dtMeshTile** tile, const dtPoly** poly) const; // Returns pointer to tile and polygon pointed by the polygon reference. // Note: this function does not check if 'ref' s valid, and is thus faster. Use only with valid refs! @@ -273,29 +282,29 @@ public: // startPos[3] - (out) start point of the link. // endPos[3] - (out) end point of the link. // Returns: true if link is found. - bool getOffMeshConnectionPolyEndPoints(dtPolyRef prevRef, dtPolyRef polyRef, float* startPos, float* endPos) const; + dtStatus getOffMeshConnectionPolyEndPoints(dtPolyRef prevRef, dtPolyRef polyRef, float* startPos, float* endPos) const; // Sets polygon flags. - void setPolyFlags(dtPolyRef ref, unsigned short flags); + dtStatus setPolyFlags(dtPolyRef ref, unsigned short flags); // Return polygon flags. - unsigned short getPolyFlags(dtPolyRef ref) const; + dtStatus getPolyFlags(dtPolyRef ref, unsigned short* resultFlags) const; // Set polygon type. - void setPolyArea(dtPolyRef ref, unsigned char area); + dtStatus setPolyArea(dtPolyRef ref, unsigned char area); // Return polygon area type. - unsigned char getPolyArea(dtPolyRef ref) const; + dtStatus getPolyArea(dtPolyRef ref, unsigned char* resultArea) const; // Returns number of bytes required to store tile state. int getTileStateSize(const dtMeshTile* tile) const; // Stores tile state to buffer. - bool storeTileState(const dtMeshTile* tile, unsigned char* data, const int maxDataSize) const; + dtStatus storeTileState(const dtMeshTile* tile, unsigned char* data, const int maxDataSize) const; // Restores tile state. - bool restoreTileState(dtMeshTile* tile, const unsigned char* data, const int maxDataSize); + dtStatus restoreTileState(dtMeshTile* tile, const unsigned char* data, const int maxDataSize); // Encodes a tile id. @@ -371,8 +380,8 @@ private: dtPolyRef findNearestPolyInTile(const dtMeshTile* tile, const float* center, const float* extents, float* nearestPt) const; // Returns closest point on polygon. - bool closestPointOnPolyInTile(const dtMeshTile* tile, unsigned int ip, - const float* pos, float* closest) const; + dtStatus 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 d66bf2f..1218434 100644 --- a/Detour/Include/DetourNavMeshQuery.h +++ b/Detour/Include/DetourNavMeshQuery.h @@ -96,13 +96,6 @@ public: inline void setExcludeFlags(const unsigned short flags) { m_excludeFlags = flags; } }; -enum dtQueryState -{ - DT_QUERY_FAILED = 0, // Path find failed. - DT_QUERY_RUNNING, // Path find running. - DT_QUERY_READY, // Path find results ready. -}; - class dtNavMeshQuery { public: @@ -114,17 +107,19 @@ public: // nav - (in) pointer to navigation mesh data. // maxNodes - (in) Maximum number of search nodes to use (max 65536). // Returns: True if succeed, else false. - bool init(const dtNavMesh* nav, const int maxNodes); + dtStatus init(const dtNavMesh* nav, const int maxNodes); // Finds the nearest navigation polygon around the center location. // Params: // center[3] - (in) The center of the search box. // extents[3] - (in) The extents of the search box. // filter - (in) path polygon filter. + // nearestRef - (out) Reference to the nearest polygon. // nearestPt[3] - (out, opt) The nearest point on found polygon, null if not needed. // Returns: Reference identifier for the polygon, or 0 if no polygons found. - dtPolyRef findNearestPoly(const float* center, const float* extents, - const dtQueryFilter* filter, float* nearestPt) const; + dtStatus findNearestPoly(const float* center, const float* extents, + const dtQueryFilter* filter, + dtPolyRef* nearestRef, float* nearestPt) const; // Returns polygons which overlap the query box. // Params: @@ -132,10 +127,11 @@ public: // extents[3] - (in) the extents of the search box. // filter - (in) path polygon filter. // polys - (out) array holding the search result. + // polyCount - (out) Number of polygons in search result array. // maxPolys - (in) The max number of polygons the polys array can hold. - // Returns: Number of polygons in search result array. - int queryPolygons(const float* center, const float* extents, const dtQueryFilter* filter, - dtPolyRef* polys, const int maxPolys) const; + dtStatus queryPolygons(const float* center, const float* extents, + const dtQueryFilter* filter, + dtPolyRef* polys, int* polyCount, const int maxPolys) const; // Finds path from start polygon to end polygon. // If target polygon canno be reached through the navigation graph, @@ -149,12 +145,12 @@ public: // endPos[3] - (in) Path end location. // filter - (in) path polygon filter. // path - (out) array holding the search result. - // maxPathSize - (in) The max number of polygons the path array can hold. Must be at least 1. - // Returns: Number of polygons in search result array. - int findPath(dtPolyRef startRef, dtPolyRef endRef, - const float* startPos, const float* endPos, - const dtQueryFilter* filter, - dtPolyRef* path, const int maxPathSize) const; + // pathCount - (out) Number of polygons in search result array. + // maxPath - (in) The max number of polygons the path array can hold. Must be at least 1. + dtStatus findPath(dtPolyRef startRef, dtPolyRef endRef, + const float* startPos, const float* endPos, + const dtQueryFilter* filter, + dtPolyRef* path, int* pathCount, const int maxPath) const; // Intializes sliced path find query. // Note 1: calling any other dtNavMeshQuery method before calling findPathEnd() @@ -167,22 +163,21 @@ public: // startPos[3] - (in) Path start location. // endPos[3] - (in) Path end location. // filter - (in) path polygon filter. - // Returns: Path query state. - dtQueryState initSlicedFindPath(dtPolyRef startRef, dtPolyRef endRef, - const float* startPos, const float* endPos, - const dtQueryFilter* filter); + dtStatus initSlicedFindPath(dtPolyRef startRef, dtPolyRef endRef, + const float* startPos, const float* endPos, + const dtQueryFilter* filter); // Updates sliced path find query. // Params: // maxIter - (in) max number of iterations to update. // Returns: Path query state. - dtQueryState updateSlicedFindPath(const int maxIter); + dtStatus updateSlicedFindPath(const int maxIter); // Finalizes sliced path find query. // path - (out) array holding the search result. - // maxPathSize - (in) The max number of polygons the path array can hold. - // Returns: Number of polygons in search result array. - int finalizeSlicedFindPath(dtPolyRef* path, const int maxPathSize); + // pathCount - (out) Number of polygons in search result array. + // maxPath - (in) The max number of polygons the path array can hold. + dtStatus finalizeSlicedFindPath(dtPolyRef* path, int* pathCount, const int maxPath); // Finds a straight path from start to end locations within the corridor // described by the path polygons. @@ -198,12 +193,12 @@ public: // straightPath - (out) Points describing the straight path. // straightPathFlags - (out, opt) Flags describing each point type, see dtStraightPathFlags. // straightPathRefs - (out, opt) References to polygons at point locations. - // maxStraightPathSize - (in) The max number of points the straight path array can hold. Must be at least 1. - // Returns: Number of points in the path. - int findStraightPath(const float* startPos, const float* endPos, - const dtPolyRef* path, const int pathSize, - float* straightPath, unsigned char* straightPathFlags, dtPolyRef* straightPathRefs, - const int maxStraightPathSize) const; + // straightPathCount - (out) Number of points in the path. + // maxStraightPath - (in) The max number of points the straight path array can hold. Must be at least 1. + dtStatus findStraightPath(const float* startPos, const float* endPos, + const dtPolyRef* path, const int pathSize, + float* straightPath, unsigned char* straightPathFlags, dtPolyRef* straightPathRefs, + int* straightPathCount, const int maxStraightPath) const; // Moves from startPos to endPos constrained to the navmesh. // If the endPos is reachable, the resultPos will be endPos, @@ -217,11 +212,11 @@ public: // filter - (in) path polygon filter. // resultPos[3] - (out) new position of the mover. // visited - (out) array of visited polygons. + // visitedCount - (out) Number of entries in the visited array. // maxVisitedSize - (in) max number of polygons in the visited array. - // Returns: Number of entries in the visited array. - int moveAlongSurface(dtPolyRef startRef, const float* startPos, const float* endPos, - const dtQueryFilter* filter, - float* resultPos, dtPolyRef* visited, const int maxVisitedSize) const; + dtStatus moveAlongSurface(dtPolyRef startRef, const float* startPos, const float* endPos, + const dtQueryFilter* filter, + float* resultPos, dtPolyRef* visited, int* visitedCount, const int maxVisitedSize) const; // Casts 'walkability' ray along the navmesh surface from startPos towards the endPos. // Params: @@ -231,23 +226,25 @@ public: // t - (out) hit parameter along the segment, FLT_MAX if no hit. // hitNormal[3] - (out) normal of the nearest hit. // filter - (in) path polygon filter. - // path - (out) visited path polygons. - // pathSize - (in) max number of polygons in the path array. - // Returns: Number of polygons visited or 0 if failed. - int raycast(dtPolyRef startRef, const float* startPos, const float* endPos, const dtQueryFilter* filter, - float& t, float* hitNormal, dtPolyRef* path, const int pathSize) const; + // path - (out,opt) visited path polygons. + // pathCount - (out,opt) Number of polygons visited. + // maxPath - (in) max number of polygons in the path array. + dtStatus raycast(dtPolyRef startRef, const float* startPos, const float* endPos, + const dtQueryFilter* filter, + float* t, float* hitNormal, dtPolyRef* path, int* pathCount, const int maxPath) const; // Returns distance to nearest wall from the specified location. // Params: - // centerRef - (in) ref to the polygon where the center lies. + // startRef - (in) ref to the polygon where the center lies. // centerPos[3] - (in) center if the query circle. // maxRadius - (in) max search radius. // filter - (in) path polygon filter. + // hitDist - (out) distance to nearest wall from the test location. // hitPos[3] - (out) location of the nearest hit. // hitNormal[3] - (out) normal of the nearest hit. - // Returns: Distance to nearest wall from the test location. - float findDistanceToWall(dtPolyRef centerRef, const float* centerPos, float maxRadius, - const dtQueryFilter* filter, float* hitPos, float* hitNormal) const; + dtStatus findDistanceToWall(dtPolyRef startRef, const float* centerPos, const float maxRadius, + const dtQueryFilter* filter, + float* hitDist, float* hitPos, float* hitNormal) const; // Finds polygons found along the navigation graph which touch the specified circle. // Params: @@ -258,12 +255,12 @@ public: // resultRef - (out, opt) refs to the polygons touched by the circle. // resultParent - (out, opt) parent of each result polygon. // resultCost - (out, opt) search cost at each result polygon. + // resultCount - (out, opt) Number of results. // maxResult - (int) maximum capacity of search results. - // Returns: Number of results. - int findPolysAroundCircle(dtPolyRef startRef, const float* centerPos, const float radius, - const dtQueryFilter* filter, - dtPolyRef* resultRef, dtPolyRef* resultParent, float* resultCost, - const int maxResult) const; + dtStatus findPolysAroundCircle(dtPolyRef startRef, const float* centerPos, const float radius, + const dtQueryFilter* filter, + dtPolyRef* resultRef, dtPolyRef* resultParent, float* resultCost, + int* resultCount, const int maxResult) const; // Finds polygons found along the navigation graph which touch the convex polygon shape. // Params: @@ -274,12 +271,12 @@ public: // resultRef - (out, opt) refs to the polygons touched by the circle. // resultParent - (out, opt) parent of each result polygon. // resultCost - (out, opt) search cost at each result polygon. + // resultCount - (out) number of results. // maxResult - (int) maximum capacity of search results. - // Returns: Number of results. - int findPolysAroundShape(dtPolyRef startRef, const float* verts, const int nverts, - const dtQueryFilter* filter, - dtPolyRef* resultRef, dtPolyRef* resultParent, float* resultCost, - const int maxResult) const; + dtStatus findPolysAroundShape(dtPolyRef startRef, const float* verts, const int nverts, + const dtQueryFilter* filter, + dtPolyRef* resultRef, dtPolyRef* resultParent, float* resultCost, + int* resultCount, const int maxResult) const; // Finds non-overlapping local neighbourhood around center location. // Note: The algorithm is optimized for small query radius and small number of polygons. @@ -290,21 +287,22 @@ public: // filter - (in) path polygon filter. // resultRef - (out) refs to the polygons touched by the circle. // resultParent - (out, opt) parent of each result polygon. + // resultCount - (out) number of results. // maxResult - (int) maximum capacity of search results. - // Returns: Number of results. - int findLocalNeighbourhood(dtPolyRef startRef, const float* centerPos, const float radius, - const dtQueryFilter* filter, - dtPolyRef* resultRef, dtPolyRef* resultParent, const int maxResult) const; + dtStatus findLocalNeighbourhood(dtPolyRef startRef, const float* centerPos, const float radius, + const dtQueryFilter* filter, + dtPolyRef* resultRef, dtPolyRef* resultParent, + int* resultCount, const int maxResult) const; // Returns wall segments of specified polygon. // Params: // ref - (in) ref to the polygon. // filter - (in) path polygon filter. // segments[6*maxSegments] - (out) wall segments (2 endpoints per segment). + // segmentCount - (out) number of wall segments. // maxSegments - (in) max number of segments that can be stored in 'segments'. - // Returns: Number of wall segments. - int getPolyWallSegments(dtPolyRef ref, const dtQueryFilter* filter, - float* segments, const int maxSegments); + dtStatus getPolyWallSegments(dtPolyRef ref, const dtQueryFilter* filter, + float* segments, int* segmentCount, const int maxSegments) const; // Returns closest point on navigation polygon. // Uses detail polygons to find the closest point to the navigation polygon surface. @@ -313,7 +311,7 @@ public: // pos[3] - (in) the point to check. // closest[3] - (out) closest point. // Returns: true if closest point found. - bool closestPointOnPoly(dtPolyRef ref, const float* pos, float* closest) const; + dtStatus closestPointOnPoly(dtPolyRef ref, const float* pos, float* closest) const; // Returns closest point on navigation polygon boundary. // Uses the navigation polygon boundary to snap the point to poly boundary @@ -323,7 +321,7 @@ public: // pos[3] - (in) the point to check. // closest[3] - (out) closest point. // Returns: true if closest point found. - bool closestPointOnPolyBoundary(dtPolyRef ref, const float* pos, float* closest) const; + dtStatus closestPointOnPolyBoundary(dtPolyRef ref, const float* pos, float* closest) const; // Returns start and end location of an off-mesh link polygon. // Params: @@ -332,7 +330,7 @@ public: // startPos[3] - (out) start point of the link. // endPos[3] - (out) end point of the link. // Returns: true if link is found. - bool getOffMeshConnectionPolyEndPoints(dtPolyRef prevRef, dtPolyRef polyRef, float* startPos, float* endPos) const; + dtStatus getOffMeshConnectionPolyEndPoints(dtPolyRef prevRef, dtPolyRef polyRef, float* startPos, float* endPos) const; // Returns height of the polygon at specified location. // Params: @@ -340,7 +338,7 @@ public: // pos[3] - (in) the point where to locate the height. // height - (out) height at the location. // Returns: true if over polygon. - bool getPolyHeight(dtPolyRef ref, const float* pos, float* height) const; + dtStatus getPolyHeight(dtPolyRef ref, const float* pos, float* height) const; // Returns true if poly reference ins in closed list. bool isInClosedList(dtPolyRef ref) const; @@ -359,26 +357,26 @@ private: dtPolyRef findNearestPolyInTile(const dtMeshTile* tile, const float* center, const float* extents, const dtQueryFilter* filter, float* nearestPt) const; // Returns closest point on polygon. - bool closestPointOnPolyInTile(const dtMeshTile* tile, const dtPoly* poly, const float* pos, float* closest) const; + dtStatus closestPointOnPolyInTile(const dtMeshTile* tile, const dtPoly* poly, const float* pos, float* closest) const; // Returns portal points between two polygons. - bool getPortalPoints(dtPolyRef from, dtPolyRef to, float* left, float* right, - unsigned char& fromType, unsigned char& toType) const; - bool getPortalPoints(dtPolyRef from, const dtPoly* fromPoly, const dtMeshTile* fromTile, - dtPolyRef to, const dtPoly* toPoly, const dtMeshTile* toTile, - float* left, float* right) const; + dtStatus getPortalPoints(dtPolyRef from, dtPolyRef to, float* left, float* right, + unsigned char& fromType, unsigned char& toType) const; + dtStatus getPortalPoints(dtPolyRef from, const dtPoly* fromPoly, const dtMeshTile* fromTile, + dtPolyRef to, const dtPoly* toPoly, const dtMeshTile* toTile, + float* left, float* right) const; // Returns edge mid point between two polygons. - bool getEdgeMidPoint(dtPolyRef from, dtPolyRef to, float* mid) const; - bool getEdgeMidPoint(dtPolyRef from, const dtPoly* fromPoly, const dtMeshTile* fromTile, - dtPolyRef to, const dtPoly* toPoly, const dtMeshTile* toTile, - float* mid) const; + dtStatus getEdgeMidPoint(dtPolyRef from, dtPolyRef to, float* mid) const; + dtStatus getEdgeMidPoint(dtPolyRef from, const dtPoly* fromPoly, const dtMeshTile* fromTile, + dtPolyRef to, const dtPoly* toPoly, const dtMeshTile* toTile, + float* mid) const; const dtNavMesh* m_nav; // Pointer to navmesh data. struct dtQueryData { - dtQueryState state; + dtStatus status; struct dtNode* lastBestNode; float lastBestNodeCost; dtPolyRef startRef, endRef; diff --git a/Detour/Source/DetourNavMesh.cpp b/Detour/Source/DetourNavMesh.cpp index 8b332b2..46e3755 100644 --- a/Detour/Source/DetourNavMesh.cpp +++ b/Detour/Source/DetourNavMesh.cpp @@ -174,7 +174,7 @@ dtNavMesh::~dtNavMesh() dtFree(m_tiles); } -bool dtNavMesh::init(const dtNavMeshParams* params) +dtStatus dtNavMesh::init(const dtNavMeshParams* params) { memcpy(&m_params, params, sizeof(dtNavMeshParams)); dtVcopy(m_orig, params->orig); @@ -189,10 +189,10 @@ bool dtNavMesh::init(const dtNavMeshParams* params) m_tiles = (dtMeshTile*)dtAlloc(sizeof(dtMeshTile)*m_maxTiles, DT_ALLOC_PERM); if (!m_tiles) - return false; + return DT_FAILURE; m_posLookup = (dtMeshTile**)dtAlloc(sizeof(dtMeshTile*)*m_tileLutSize, DT_ALLOC_PERM); if (!m_posLookup) - return false; + return DT_FAILURE; memset(m_tiles, 0, sizeof(dtMeshTile)*m_maxTiles); memset(m_posLookup, 0, sizeof(dtMeshTile*)*m_tileLutSize); m_nextFree = 0; @@ -208,19 +208,19 @@ bool 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 false; + return DT_FAILURE; - return true; + return DT_SUCCESS; } -bool dtNavMesh::init(unsigned char* data, const int dataSize, const int flags) +dtStatus dtNavMesh::init(unsigned char* data, const int dataSize, const int flags) { // Make sure the data is in right format. dtMeshHeader* header = (dtMeshHeader*)data; if (header->magic != DT_NAVMESH_MAGIC) - return false; + return DT_FAILURE; if (header->version != DT_NAVMESH_VERSION) - return false; + return DT_FAILURE; dtNavMeshParams params; dtVcopy(params.orig, header->bmin); @@ -228,10 +228,12 @@ bool dtNavMesh::init(unsigned char* data, const int dataSize, const int flags) params.tileHeight = header->bmax[2] - header->bmin[2]; params.maxTiles = 1; params.maxPolys = header->polyCount; - if (!init(¶ms)) - return false; + + dtStatus res = init(¶ms); + if (res != DT_SUCCESS) + return res; - return addTile(data, dataSize, flags) != 0; + return addTile(data, dataSize, flags, 0, 0); } const dtNavMeshParams* dtNavMesh::getParams() const @@ -553,8 +555,8 @@ void dtNavMesh::connectIntOffMeshLinks(dtMeshTile* tile) } } -bool dtNavMesh::closestPointOnPolyInTile(const dtMeshTile* tile, unsigned int ip, - const float* pos, float* closest) const +dtStatus dtNavMesh::closestPointOnPolyInTile(const dtMeshTile* tile, unsigned int ip, + const float* pos, float* closest) const { const dtPoly* poly = &tile->polys[ip]; @@ -582,7 +584,7 @@ bool dtNavMesh::closestPointOnPolyInTile(const dtMeshTile* tile, unsigned int ip } } - return true; + return DT_SUCCESS; } dtPolyRef dtNavMesh::findNearestPolyInTile(const dtMeshTile* tile, @@ -604,7 +606,7 @@ dtPolyRef dtNavMesh::findNearestPolyInTile(const dtMeshTile* tile, { dtPolyRef ref = polys[i]; float closestPtPoly[3]; - if (!closestPointOnPolyInTile(tile, decodePolyIdPoly(ref), center, closestPtPoly)) + if (closestPointOnPolyInTile(tile, decodePolyIdPoly(ref), center, closestPtPoly) != DT_SUCCESS) continue; float d = dtVdistSqr(center, closestPtPoly); if (d < nearestDistanceSqr) @@ -700,18 +702,19 @@ int dtNavMesh::queryPolygonsInTile(const dtMeshTile* tile, const float* qmin, co } } -dtTileRef dtNavMesh::addTile(unsigned char* data, int dataSize, int flags, dtTileRef lastRef) +dtStatus dtNavMesh::addTile(unsigned char* data, int dataSize, int flags, + dtTileRef lastRef, dtTileRef* result) { // Make sure the data is in right format. dtMeshHeader* header = (dtMeshHeader*)data; if (header->magic != DT_NAVMESH_MAGIC) - return 0; + return DT_FAILURE_DATA_MAGIC; if (header->version != DT_NAVMESH_VERSION) - return 0; + return DT_FAILURE_DATA_VERSION; // Make sure the location is free. if (getTileAt(header->x, header->y)) - return 0; + return DT_FAILURE; // Allocate a tile. dtMeshTile* tile = 0; @@ -726,12 +729,10 @@ dtTileRef dtNavMesh::addTile(unsigned char* data, int dataSize, int flags, dtTil } else { - // TODO: Better error reporting! - // Try to relocate the tile to specific index with same salt. int tileIndex = (int)decodePolyIdTile((dtPolyRef)lastRef); if (tileIndex >= m_maxTiles) - return 0; + return DT_FAILURE_OUT_OF_MEMORY; // Try to find the specific tile id from the free list. dtMeshTile* target = &m_tiles[tileIndex]; dtMeshTile* prev = 0; @@ -743,7 +744,7 @@ dtTileRef dtNavMesh::addTile(unsigned char* data, int dataSize, int flags, dtTil } // Could not find the correct location. if (tile != target) - return 0; + return DT_FAILURE_OUT_OF_MEMORY; // Remove from freelist if (!prev) m_nextFree = tile->next; @@ -756,7 +757,7 @@ dtTileRef dtNavMesh::addTile(unsigned char* data, int dataSize, int flags, dtTil // Make sure we could allocate a tile. if (!tile) - return 0; + return DT_FAILURE_OUT_OF_MEMORY; // Insert tile into the position lut. int h = computeTileHash(header->x, header->y, m_tileLutMask); @@ -812,7 +813,10 @@ dtTileRef dtNavMesh::addTile(unsigned char* data, int dataSize, int flags, dtTil } } - return getTileRef(tile); + if (result) + *result = getTileRef(tile); + + return DT_SUCCESS; } const dtMeshTile* dtNavMesh::getTileAt(int x, int y) const @@ -904,26 +908,16 @@ void dtNavMesh::calcTileLoc(const float* pos, int* tx, int* ty) const *ty = (int)floorf((pos[2]-m_orig[2]) / m_tileHeight); } -/*const dtPoly* dtNavMesh::getPolyByRef(dtPolyRef ref) const +dtStatus dtNavMesh::getTileAndPolyByRef(const dtPolyRef ref, const dtMeshTile** tile, const dtPoly** poly) const { unsigned int salt, it, ip; decodePolyId(ref, salt, it, ip); - if (it >= (unsigned int)m_maxTiles) return 0; - if (m_tiles[it].salt != salt || m_tiles[it].header == 0) return 0; - if (ip >= (unsigned int)m_tiles[it].header->polyCount) return 0; - return &m_tiles[it].polys[ip]; -}*/ - -bool dtNavMesh::getTileAndPolyByRef(const dtPolyRef ref, const dtMeshTile** tile, const dtPoly** poly) const -{ - unsigned int salt, it, ip; - decodePolyId(ref, salt, it, ip); - if (it >= (unsigned int)m_maxTiles) return false; - if (m_tiles[it].salt != salt || m_tiles[it].header == 0) return false; - if (ip >= (unsigned int)m_tiles[it].header->polyCount) return false; + 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; *tile = &m_tiles[it]; *poly = &m_tiles[it].polys[ip]; - return true; + return DT_SUCCESS; } void dtNavMesh::getTileAndPolyByRefUnsafe(const dtPolyRef ref, const dtMeshTile** tile, const dtPoly** poly) const @@ -944,17 +938,17 @@ bool dtNavMesh::isValidPolyRef(dtPolyRef ref) const return true; } -bool dtNavMesh::removeTile(dtTileRef ref, unsigned char** data, int* dataSize) +dtStatus dtNavMesh::removeTile(dtTileRef ref, unsigned char** data, int* dataSize) { if (!ref) - return false; + return DT_FAILURE; unsigned int tileIndex = decodePolyIdTile((dtPolyRef)ref); unsigned int tileSalt = decodePolyIdSalt((dtPolyRef)ref); if ((int)tileIndex >= m_maxTiles) - return false; + return DT_FAILURE; dtMeshTile* tile = &m_tiles[tileIndex]; if (tile->salt != tileSalt) - return false; + return DT_FAILURE; // Remove tile from hash lookup. int h = computeTileHash(tile->header->x,tile->header->y,m_tileLutMask); @@ -1020,7 +1014,7 @@ bool dtNavMesh::removeTile(dtTileRef ref, unsigned char** data, int* dataSize) tile->next = m_nextFree; m_nextFree = tile; - return true; + return DT_SUCCESS; } dtTileRef dtNavMesh::getTileRef(const dtMeshTile* tile) const @@ -1058,12 +1052,12 @@ int dtNavMesh::getTileStateSize(const dtMeshTile* tile) const return headerSize + polyStateSize; } -bool dtNavMesh::storeTileState(const dtMeshTile* tile, unsigned char* data, const int maxDataSize) const +dtStatus dtNavMesh::storeTileState(const dtMeshTile* tile, unsigned char* data, const int maxDataSize) const { // Make sure there is enough space to store the state. const int sizeReq = getTileStateSize(tile); if (maxDataSize < sizeReq) - return false; + return DT_FAILURE; dtTileState* tileState = (dtTileState*)data; data += dtAlign4(sizeof(dtTileState)); dtPolyState* polyStates = (dtPolyState*)data; data += dtAlign4(sizeof(dtPolyState) * tile->header->polyCount); @@ -1082,26 +1076,26 @@ bool dtNavMesh::storeTileState(const dtMeshTile* tile, unsigned char* data, cons s->area = p->getArea(); } - return true; + return DT_SUCCESS; } -bool dtNavMesh::restoreTileState(dtMeshTile* tile, const unsigned char* data, const int maxDataSize) +dtStatus dtNavMesh::restoreTileState(dtMeshTile* tile, const unsigned char* data, const int maxDataSize) { // Make sure there is enough space to store the state. const int sizeReq = getTileStateSize(tile); if (maxDataSize < sizeReq) - return false; + return DT_FAILURE; 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 false; + return DT_FAILURE_DATA_MAGIC; if (tileState->version != DT_NAVMESH_STATE_VERSION) - return false; + return DT_FAILURE_DATA_VERSION; if (tileState->ref != getTileRef(tile)) - return false; + return DT_FAILURE; // Restore per poly state. for (int i = 0; i < tile->header->polyCount; ++i) @@ -1112,25 +1106,25 @@ bool dtNavMesh::restoreTileState(dtMeshTile* tile, const unsigned char* data, co p->setArea(s->area); } - return true; + return DT_SUCCESS; } // Returns start and end location of an off-mesh link polygon. -bool dtNavMesh::getOffMeshConnectionPolyEndPoints(dtPolyRef prevRef, dtPolyRef polyRef, float* startPos, float* endPos) const +dtStatus dtNavMesh::getOffMeshConnectionPolyEndPoints(dtPolyRef prevRef, dtPolyRef polyRef, float* startPos, float* endPos) const { unsigned int salt, it, ip; // Get current polygon decodePolyId(polyRef, salt, it, ip); - if (it >= (unsigned int)m_maxTiles) return false; - if (m_tiles[it].salt != salt || m_tiles[it].header == 0) return false; + if (it >= (unsigned int)m_maxTiles) return DT_FAILURE; + if (m_tiles[it].salt != salt || m_tiles[it].header == 0) return DT_FAILURE; const dtMeshTile* tile = &m_tiles[it]; - if (ip >= (unsigned int)tile->header->polyCount) return false; + if (ip >= (unsigned int)tile->header->polyCount) return DT_FAILURE; const dtPoly* poly = &tile->polys[ip]; // Make sure that the current poly is indeed off-mesh link. if (poly->getType() != DT_POLYTYPE_OFFMESH_CONNECTION) - return false; + return DT_FAILURE; // Figure out which way to hand out the vertices. int idx0 = 0, idx1 = 1; @@ -1152,57 +1146,69 @@ bool dtNavMesh::getOffMeshConnectionPolyEndPoints(dtPolyRef prevRef, dtPolyRef p dtVcopy(startPos, &tile->verts[poly->verts[idx0]*3]); dtVcopy(endPos, &tile->verts[poly->verts[idx1]*3]); - return true; + return DT_SUCCESS; } -void dtNavMesh::setPolyFlags(dtPolyRef ref, unsigned short flags) +dtStatus dtNavMesh::setPolyFlags(dtPolyRef ref, unsigned short flags) { unsigned int salt, it, ip; decodePolyId(ref, salt, it, ip); - if (it >= (unsigned int)m_maxTiles) return; - if (m_tiles[it].salt != salt || m_tiles[it].header == 0) return; + if (it >= (unsigned int)m_maxTiles) return DT_FAILURE; + if (m_tiles[it].salt != salt || m_tiles[it].header == 0) return DT_FAILURE; dtMeshTile* tile = &m_tiles[it]; - if (ip >= (unsigned int)tile->header->polyCount) return; + if (ip >= (unsigned int)tile->header->polyCount) return DT_FAILURE; dtPoly* poly = &tile->polys[ip]; + // Change flags. poly->flags = flags; + + return DT_SUCCESS; } -unsigned short dtNavMesh::getPolyFlags(dtPolyRef ref) const +dtStatus dtNavMesh::getPolyFlags(dtPolyRef ref, unsigned short* resultFlags) const { unsigned int salt, it, ip; decodePolyId(ref, salt, it, ip); - if (it >= (unsigned int)m_maxTiles) return 0; - if (m_tiles[it].salt != salt || m_tiles[it].header == 0) return 0; + if (it >= (unsigned int)m_maxTiles) return DT_FAILURE; + if (m_tiles[it].salt != salt || m_tiles[it].header == 0) return DT_FAILURE; const dtMeshTile* tile = &m_tiles[it]; - if (ip >= (unsigned int)tile->header->polyCount) return 0; + if (ip >= (unsigned int)tile->header->polyCount) return DT_FAILURE; const dtPoly* poly = &tile->polys[ip]; - return poly->flags; + + *resultFlags = poly->flags; + + return DT_SUCCESS; } -void dtNavMesh::setPolyArea(dtPolyRef ref, unsigned char area) +dtStatus dtNavMesh::setPolyArea(dtPolyRef ref, unsigned char area) { unsigned int salt, it, ip; decodePolyId(ref, salt, it, ip); - if (it >= (unsigned int)m_maxTiles) return; - if (m_tiles[it].salt != salt || m_tiles[it].header == 0) return; + if (it >= (unsigned int)m_maxTiles) return DT_FAILURE; + if (m_tiles[it].salt != salt || m_tiles[it].header == 0) return DT_FAILURE; dtMeshTile* tile = &m_tiles[it]; - if (ip >= (unsigned int)tile->header->polyCount) return; + if (ip >= (unsigned int)tile->header->polyCount) return DT_FAILURE; dtPoly* poly = &tile->polys[ip]; + poly->setArea(area); + + return DT_SUCCESS; } -unsigned char dtNavMesh::getPolyArea(dtPolyRef ref) const +dtStatus dtNavMesh::getPolyArea(dtPolyRef ref, unsigned char* resultArea) const { unsigned int salt, it, ip; decodePolyId(ref, salt, it, ip); - if (it >= (unsigned int)m_maxTiles) return 0; - if (m_tiles[it].salt != salt || m_tiles[it].header == 0) return 0; + if (it >= (unsigned int)m_maxTiles) return DT_FAILURE; + if (m_tiles[it].salt != salt || m_tiles[it].header == 0) return DT_FAILURE; const dtMeshTile* tile = &m_tiles[it]; - if (ip >= (unsigned int)tile->header->polyCount) return 0; + if (ip >= (unsigned int)tile->header->polyCount) return DT_FAILURE; const dtPoly* poly = &tile->polys[ip]; - return poly->getArea(); + + *resultArea = poly->getArea(); + + return DT_SUCCESS; } diff --git a/Detour/Source/DetourNavMeshQuery.cpp b/Detour/Source/DetourNavMeshQuery.cpp index e8387e1..8a0d07c 100644 --- a/Detour/Source/DetourNavMeshQuery.cpp +++ b/Detour/Source/DetourNavMeshQuery.cpp @@ -107,7 +107,7 @@ dtNavMeshQuery::~dtNavMeshQuery() dtFree(m_openList); } -bool dtNavMeshQuery::init(const dtNavMesh* nav, const int maxNodes) +dtStatus dtNavMeshQuery::init(const dtNavMesh* nav, const int maxNodes) { m_nav = nav; @@ -121,7 +121,7 @@ bool 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 false; + return DT_FAILURE_OUT_OF_MEMORY; } else { @@ -132,7 +132,7 @@ bool dtNavMeshQuery::init(const dtNavMesh* nav, const int maxNodes) { m_tinyNodePool = new (dtAlloc(sizeof(dtNodePool), DT_ALLOC_PERM)) dtNodePool(64, 32); if (!m_tinyNodePool) - return false; + return DT_FAILURE_OUT_OF_MEMORY; } else { @@ -150,29 +150,32 @@ bool dtNavMeshQuery::init(const dtNavMesh* nav, const int maxNodes) } m_openList = new (dtAlloc(sizeof(dtNodeQueue), DT_ALLOC_PERM)) dtNodeQueue(maxNodes); if (!m_openList) - return false; + return DT_FAILURE_OUT_OF_MEMORY; } else { m_openList->clear(); } - return true; + return DT_SUCCESS; } ////////////////////////////////////////////////////////////////////////////////////////// -bool dtNavMeshQuery::closestPointOnPoly(dtPolyRef ref, const float* pos, float* closest) const +dtStatus dtNavMeshQuery::closestPointOnPoly(dtPolyRef ref, const float* pos, float* closest) const { dtAssert(m_nav); const dtMeshTile* tile = 0; const dtPoly* poly = 0; - if (!m_nav->getTileAndPolyByRef(ref, &tile, &poly)) - return false; - if (!tile) return false; - return closestPointOnPolyInTile(tile, poly, pos, closest); + 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; + return DT_SUCCESS; } -bool dtNavMeshQuery::closestPointOnPolyInTile(const dtMeshTile* tile, const dtPoly* poly, const float* pos, float* closest) const +dtStatus 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]; @@ -251,17 +254,17 @@ bool dtNavMeshQuery::closestPointOnPolyInTile(const dtMeshTile* tile, const dtPo } } - return true; + return DT_SUCCESS; } -bool dtNavMeshQuery::closestPointOnPolyBoundary(dtPolyRef ref, const float* pos, float* closest) const +dtStatus dtNavMeshQuery::closestPointOnPolyBoundary(dtPolyRef ref, const float* pos, float* closest) const { dtAssert(m_nav); const dtMeshTile* tile = 0; const dtPoly* poly = 0; - if (!m_nav->getTileAndPolyByRef(ref, &tile, &poly)) - return false; + if (m_nav->getTileAndPolyByRef(ref, &tile, &poly) != DT_SUCCESS) + return DT_FAILURE; // Collect vertices. float verts[DT_VERTS_PER_POLYGON*3]; @@ -298,18 +301,18 @@ bool dtNavMeshQuery::closestPointOnPolyBoundary(dtPolyRef ref, const float* pos, dtVlerp(closest, va, vb, edget[imin]); } - return true; + return DT_SUCCESS; } -bool dtNavMeshQuery::getPolyHeight(dtPolyRef ref, const float* pos, float* height) const +dtStatus dtNavMeshQuery::getPolyHeight(dtPolyRef ref, const float* pos, float* height) const { dtAssert(m_nav); const dtMeshTile* tile = 0; const dtPoly* poly = 0; - if (!m_nav->getTileAndPolyByRef(ref, &tile, &poly)) - return false; + if (m_nav->getTileAndPolyByRef(ref, &tile, &poly) != DT_SUCCESS) + return DT_FAILURE; if (poly->getType() == DT_POLYTYPE_OFFMESH_CONNECTION) { @@ -320,7 +323,7 @@ bool dtNavMeshQuery::getPolyHeight(dtPolyRef ref, const float* pos, float* heigh const float u = d0 / (d0+d1); if (height) *height = v0[1] + (v1[1] - v0[1]) * u; - return true; + return DT_SUCCESS; } else { @@ -342,22 +345,27 @@ bool dtNavMeshQuery::getPolyHeight(dtPolyRef ref, const float* pos, float* heigh { if (height) *height = h; - return true; + return DT_SUCCESS; } } } - return false; + return DT_FAILURE; } -dtPolyRef dtNavMeshQuery::findNearestPoly(const float* center, const float* extents, - const dtQueryFilter* filter, float* nearestPt) const +dtStatus dtNavMeshQuery::findNearestPoly(const float* center, const float* extents, + const dtQueryFilter* filter, + dtPolyRef* nearestRef, float* nearestPt) const { dtAssert(m_nav); + *nearestRef = 0; + // Get nearby polygons from proximity grid. dtPolyRef polys[128]; - int polyCount = queryPolygons(center, extents, filter, polys, 128); + int polyCount = 0; + if (queryPolygons(center, extents, filter, polys, &polyCount, 128) != DT_SUCCESS) + return DT_FAILURE; // Find nearest polygon amongst the nearby polygons. dtPolyRef nearest = 0; @@ -366,7 +374,7 @@ dtPolyRef dtNavMeshQuery::findNearestPoly(const float* center, const float* exte { dtPolyRef ref = polys[i]; float closestPtPoly[3]; - if (!closestPointOnPoly(ref, center, closestPtPoly)) + if (closestPointOnPoly(ref, center, closestPtPoly) != DT_SUCCESS) continue; float d = dtVdistSqr(center, closestPtPoly); if (d < nearestDistanceSqr) @@ -378,7 +386,10 @@ dtPolyRef dtNavMeshQuery::findNearestPoly(const float* center, const float* exte } } - return nearest; + if (nearestRef) + *nearestRef = nearest; + + return DT_SUCCESS; } dtPolyRef dtNavMeshQuery::findNearestPolyInTile(const dtMeshTile* tile, const float* center, const float* extents, @@ -402,7 +413,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)) + if (closestPointOnPolyInTile(tile, poly, center, closestPtPoly) != DT_SUCCESS) continue; float d = dtVdistSqr(center, closestPtPoly); @@ -510,8 +521,9 @@ int dtNavMeshQuery::queryPolygonsInTile(const dtMeshTile* tile, const float* qmi } } -int dtNavMeshQuery::queryPolygons(const float* center, const float* extents, const dtQueryFilter* filter, - dtPolyRef* polys, const int maxPolys) const +dtStatus dtNavMeshQuery::queryPolygons(const float* center, const float* extents, + const dtQueryFilter* filter, + dtPolyRef* polys, int* polyCount, const int maxPolys) const { dtAssert(m_nav); @@ -532,36 +544,44 @@ int dtNavMeshQuery::queryPolygons(const float* center, const float* extents, con const dtMeshTile* tile = m_nav->getTileAt(x,y); if (!tile) continue; n += queryPolygonsInTile(tile, bmin, bmax, filter, polys+n, maxPolys-n); - if (n >= maxPolys) return n; + if (n >= maxPolys) + { + *polyCount = n; + return DT_SUCCESS; + } } } + *polyCount = n; - return n; + return DT_SUCCESS; } -int dtNavMeshQuery::findPath(dtPolyRef startRef, dtPolyRef endRef, - const float* startPos, const float* endPos, - const dtQueryFilter* filter, - dtPolyRef* path, const int maxPathSize) const +dtStatus dtNavMeshQuery::findPath(dtPolyRef startRef, dtPolyRef endRef, + const float* startPos, const float* endPos, + const dtQueryFilter* filter, + dtPolyRef* path, int* pathCount, const int maxPath) const { dtAssert(m_nav); dtAssert(m_nodePool); dtAssert(m_openList); - if (!startRef || !endRef) - return 0; + *pathCount = 0; - if (!maxPathSize) - return 0; + if (!startRef || !endRef) + return DT_FAILURE; + + if (!maxPath) + return DT_FAILURE; // Validate input if (!m_nav->isValidPolyRef(startRef) || !m_nav->isValidPolyRef(endRef)) - return 0; + return DT_FAILURE; if (startRef == endRef) { path[0] = startRef; - return 1; + *pathCount = 1; + return DT_SUCCESS; } m_nodePool->clear(); @@ -726,14 +746,16 @@ int dtNavMeshQuery::findPath(dtPolyRef startRef, dtPolyRef endRef, path[n++] = node->id; node = m_nodePool->getNodeAtIdx(node->pidx); } - while (node && n < maxPathSize); + while (node && n < maxPath); - return n; + *pathCount = n; + + return DT_SUCCESS; } -dtQueryState dtNavMeshQuery::initSlicedFindPath(dtPolyRef startRef, dtPolyRef endRef, - const float* startPos, const float* endPos, - const dtQueryFilter* filter) +dtStatus dtNavMeshQuery::initSlicedFindPath(dtPolyRef startRef, dtPolyRef endRef, + const float* startPos, const float* endPos, + const dtQueryFilter* filter) { dtAssert(m_nav); dtAssert(m_nodePool); @@ -741,7 +763,7 @@ dtQueryState dtNavMeshQuery::initSlicedFindPath(dtPolyRef startRef, dtPolyRef en // Init path state. memset(&m_query, 0, sizeof(dtQueryData)); - m_query.state = DT_QUERY_FAILED; + m_query.status = DT_FAILURE; m_query.startRef = startRef; m_query.endRef = endRef; dtVcopy(m_query.startPos, startPos); @@ -749,16 +771,16 @@ dtQueryState dtNavMeshQuery::initSlicedFindPath(dtPolyRef startRef, dtPolyRef en m_query.filter = filter; if (!startRef || !endRef) - return DT_QUERY_FAILED; + return DT_FAILURE; // Validate input if (!m_nav->isValidPolyRef(startRef) || !m_nav->isValidPolyRef(endRef)) - return DT_QUERY_FAILED; + return DT_FAILURE; if (startRef == endRef) { - m_query.state = DT_QUERY_READY; - return DT_QUERY_READY; + m_query.status = DT_SUCCESS; + return DT_SUCCESS; } m_nodePool->clear(); @@ -773,23 +795,23 @@ dtQueryState dtNavMeshQuery::initSlicedFindPath(dtPolyRef startRef, dtPolyRef en startNode->flags = DT_NODE_OPEN; m_openList->push(startNode); - m_query.state = DT_QUERY_RUNNING; + m_query.status = DT_IN_PROGRESS; m_query.lastBestNode = startNode; m_query.lastBestNodeCost = startNode->total; - return m_query.state; + return m_query.status; } -dtQueryState dtNavMeshQuery::updateSlicedFindPath(const int maxIter) +dtStatus dtNavMeshQuery::updateSlicedFindPath(const int maxIter) { - if (m_query.state != DT_QUERY_RUNNING) - return m_query.state; + if (m_query.status!= DT_IN_PROGRESS) + return m_query.status; // Make sure the request is still valid. if (!m_nav->isValidPolyRef(m_query.startRef) || !m_nav->isValidPolyRef(m_query.endRef)) { - m_query.state = DT_QUERY_FAILED; - return DT_QUERY_FAILED; + m_query.status = DT_FAILURE; + return DT_FAILURE; } int iter = 0; @@ -806,8 +828,8 @@ dtQueryState dtNavMeshQuery::updateSlicedFindPath(const int maxIter) if (bestNode->id == m_query.endRef) { m_query.lastBestNode = bestNode; - m_query.state = DT_QUERY_READY; - return m_query.state; + m_query.status = DT_SUCCESS; + return m_query.status; } // Get current poly and tile. @@ -815,11 +837,11 @@ dtQueryState 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)) + if (m_nav->getTileAndPolyByRef(bestRef, &bestTile, &bestPoly) != DT_SUCCESS) { // The polygon has disappeared during the sliced query, fail. - m_query.state = DT_QUERY_FAILED; - return m_query.state; + m_query.status = DT_FAILURE; + return m_query.status; } // Get parent poly and tile. @@ -830,11 +852,11 @@ dtQueryState dtNavMeshQuery::updateSlicedFindPath(const int maxIter) parentRef = m_nodePool->getNodeAtIdx(bestNode->pidx)->id; if (parentRef) { - if (!m_nav->getTileAndPolyByRef(parentRef, &parentTile, &parentPoly)) + if (m_nav->getTileAndPolyByRef(parentRef, &parentTile, &parentPoly) != DT_SUCCESS) { // The polygon has disappeared during the sliced query, fail. - m_query.state = DT_QUERY_FAILED; - return m_query.state; + m_query.status = DT_FAILURE; + return m_query.status; } } @@ -937,20 +959,22 @@ dtQueryState dtNavMeshQuery::updateSlicedFindPath(const int maxIter) // Exhausted all nodes, but could not find path. if (m_openList->empty()) - m_query.state = DT_QUERY_READY; + m_query.status = DT_SUCCESS; - return m_query.state; + return m_query.status; } -int dtNavMeshQuery::finalizeSlicedFindPath(dtPolyRef* path, const int maxPathSize) +dtStatus dtNavMeshQuery::finalizeSlicedFindPath(dtPolyRef* path, int* pathCount, const int maxPath) { - if (m_query.state != DT_QUERY_READY) + *pathCount = 0; + + if (m_query.status != DT_SUCCESS) { // Reset query. memset(&m_query, 0, sizeof(dtQueryData)); - return 0; + return DT_FAILURE; } - + int n = 0; if (m_query.startRef == m_query.endRef) @@ -980,50 +1004,56 @@ int dtNavMeshQuery::finalizeSlicedFindPath(dtPolyRef* path, const int maxPathSiz path[n++] = node->id; node = m_nodePool->getNodeAtIdx(node->pidx); } - while (node && n < maxPathSize); + while (node && n < maxPath); } // Reset query. memset(&m_query, 0, sizeof(dtQueryData)); - return n; + *pathCount = n; + + return DT_SUCCESS; } - -int dtNavMeshQuery::findStraightPath(const float* startPos, const float* endPos, - const dtPolyRef* path, const int pathSize, - float* straightPath, unsigned char* straightPathFlags, dtPolyRef* straightPathRefs, - const int maxStraightPathSize) const +dtStatus dtNavMeshQuery::findStraightPath(const float* startPos, const float* endPos, + const dtPolyRef* path, const int pathSize, + float* straightPath, unsigned char* straightPathFlags, dtPolyRef* straightPathRefs, + int* straightPathCount, const int maxStraightPath) const { dtAssert(m_nav); - if (!maxStraightPathSize) - return 0; + *straightPathCount = 0; + + if (!maxStraightPath) + return DT_FAILURE; if (!path[0]) - return 0; + return DT_FAILURE; - int straightPathSize = 0; + int n = 0; // TODO: Should this be callers responsibility? float closestStartPos[3]; - if (!closestPointOnPolyBoundary(path[0], startPos, closestStartPos)) - return 0; + if (closestPointOnPolyBoundary(path[0], startPos, closestStartPos) != DT_SUCCESS) + return DT_FAILURE; // Add start point. - dtVcopy(&straightPath[straightPathSize*3], closestStartPos); + dtVcopy(&straightPath[n*3], closestStartPos); if (straightPathFlags) - straightPathFlags[straightPathSize] = DT_STRAIGHTPATH_START; + straightPathFlags[n] = DT_STRAIGHTPATH_START; if (straightPathRefs) - straightPathRefs[straightPathSize] = path[0]; - straightPathSize++; - if (straightPathSize >= maxStraightPathSize) - return straightPathSize; + straightPathRefs[n] = path[0]; + n++; + if (n >= maxStraightPath) + { + *straightPathCount = n; + return DT_SUCCESS; + } float closestEndPos[3]; - if (!closestPointOnPolyBoundary(path[pathSize-1], endPos, closestEndPos)) - return 0; + if (closestPointOnPolyBoundary(path[pathSize-1], endPos, closestEndPos) != DT_SUCCESS) + return DT_FAILURE; if (pathSize > 1) { @@ -1049,19 +1079,19 @@ int dtNavMeshQuery::findStraightPath(const float* startPos, const float* endPos, if (i+1 < pathSize) { // Next portal. - if (!getPortalPoints(path[i], path[i+1], left, right, fromType, toType)) + if (getPortalPoints(path[i], path[i+1], left, right, fromType, toType) != DT_SUCCESS) { - if (!closestPointOnPolyBoundary(path[i], endPos, closestEndPos)) - return 0; + if (closestPointOnPolyBoundary(path[i], endPos, closestEndPos) != DT_SUCCESS) + return DT_FAILURE; - dtVcopy(&straightPath[straightPathSize*3], closestEndPos); + dtVcopy(&straightPath[n*3], closestEndPos); if (straightPathFlags) - straightPathFlags[straightPathSize] = 0; + straightPathFlags[n] = 0; if (straightPathRefs) - straightPathRefs[straightPathSize] = path[i]; - straightPathSize++; + straightPathRefs[n] = path[i]; + n++; - return straightPathSize; + return DT_SUCCESS; } // If starting really close the portal, advance. @@ -1103,26 +1133,29 @@ int dtNavMeshQuery::findStraightPath(const float* startPos, const float* endPos, flags = DT_STRAIGHTPATH_OFFMESH_CONNECTION; dtPolyRef ref = leftPolyRef; - if (!dtVequal(&straightPath[(straightPathSize-1)*3], portalApex)) + if (!dtVequal(&straightPath[(n-1)*3], portalApex)) { // Append new vertex. - dtVcopy(&straightPath[straightPathSize*3], portalApex); + dtVcopy(&straightPath[n*3], portalApex); if (straightPathFlags) - straightPathFlags[straightPathSize] = flags; + straightPathFlags[n] = flags; if (straightPathRefs) - straightPathRefs[straightPathSize] = ref; - straightPathSize++; + straightPathRefs[n] = ref; + n++; // If reached end of path or there is no space to append more vertices, return. - if (flags == DT_STRAIGHTPATH_END || straightPathSize >= maxStraightPathSize) - return straightPathSize; + if (flags == DT_STRAIGHTPATH_END || n >= maxStraightPath) + { + *straightPathCount = n; + return DT_SUCCESS; + } } else { // The vertices are equal, update flags and poly. if (straightPathFlags) - straightPathFlags[straightPathSize-1] = flags; + straightPathFlags[n-1] = flags; if (straightPathRefs) - straightPathRefs[straightPathSize-1] = ref; + straightPathRefs[n-1] = ref; } dtVcopy(portalLeft, portalApex); @@ -1159,26 +1192,29 @@ int dtNavMeshQuery::findStraightPath(const float* startPos, const float* endPos, flags = DT_STRAIGHTPATH_OFFMESH_CONNECTION; dtPolyRef ref = rightPolyRef; - if (!dtVequal(&straightPath[(straightPathSize-1)*3], portalApex)) + if (!dtVequal(&straightPath[(n-1)*3], portalApex)) { // Append new vertex. - dtVcopy(&straightPath[straightPathSize*3], portalApex); + dtVcopy(&straightPath[n*3], portalApex); if (straightPathFlags) - straightPathFlags[straightPathSize] = flags; + straightPathFlags[n] = flags; if (straightPathRefs) - straightPathRefs[straightPathSize] = ref; - straightPathSize++; + straightPathRefs[n] = ref; + n++; // If reached end of path or there is no space to append more vertices, return. - if (flags == DT_STRAIGHTPATH_END || straightPathSize >= maxStraightPathSize) - return straightPathSize; + if (flags == DT_STRAIGHTPATH_END || n >= maxStraightPath) + { + *straightPathCount = n; + return DT_SUCCESS; + } } else { // The vertices are equal, update flags and poly. if (straightPathFlags) - straightPathFlags[straightPathSize-1] = flags; + straightPathFlags[n-1] = flags; if (straightPathRefs) - straightPathRefs[straightPathSize-1] = ref; + straightPathRefs[n-1] = ref; } dtVcopy(portalLeft, portalApex); @@ -1196,33 +1232,36 @@ int dtNavMeshQuery::findStraightPath(const float* startPos, const float* endPos, } // If the point already exists, remove it and add reappend the actual end location. - if (straightPathSize && dtVequal(&straightPath[(straightPathSize-1)*3], closestEndPos)) - straightPathSize--; + if (n > 0 && dtVequal(&straightPath[(n-1)*3], closestEndPos)) + n--; // Add end point. - if (straightPathSize < maxStraightPathSize) + if (n < maxStraightPath) { - dtVcopy(&straightPath[straightPathSize*3], closestEndPos); + dtVcopy(&straightPath[n*3], closestEndPos); if (straightPathFlags) - straightPathFlags[straightPathSize] = DT_STRAIGHTPATH_END; + straightPathFlags[n] = DT_STRAIGHTPATH_END; if (straightPathRefs) - straightPathRefs[straightPathSize] = 0; - straightPathSize++; + straightPathRefs[n] = 0; + n++; } - return straightPathSize; + *straightPathCount = n; + return DT_SUCCESS; } -int dtNavMeshQuery::moveAlongSurface(dtPolyRef startRef, const float* startPos, const float* endPos, - const dtQueryFilter* filter, - float* resultPos, dtPolyRef* visited, const int maxVisitedSize) const +dtStatus dtNavMeshQuery::moveAlongSurface(dtPolyRef startRef, const float* startPos, const float* endPos, + const dtQueryFilter* filter, + float* resultPos, dtPolyRef* visited, int* visitedCount, const int maxVisitedSize) const { dtAssert(m_nav); dtAssert(m_tinyNodePool); + *visitedCount = 0; + // Validate input - if (!startRef) return 0; - if (!m_nav->isValidPolyRef(startRef)) return 0; + if (!startRef) return DT_FAILURE; + if (!m_nav->isValidPolyRef(startRef)) return DT_FAILURE; static const int MAX_STACK = 48; dtNode* stack[MAX_STACK]; @@ -1394,34 +1433,36 @@ int dtNavMeshQuery::moveAlongSurface(dtPolyRef startRef, const float* startPos, dtVcopy(resultPos, bestPos); - return n; + *visitedCount = n; + + return DT_SUCCESS; } -bool dtNavMeshQuery::getPortalPoints(dtPolyRef from, dtPolyRef to, float* left, float* right, - unsigned char& fromType, unsigned char& toType) const +dtStatus dtNavMeshQuery::getPortalPoints(dtPolyRef from, dtPolyRef to, float* left, float* right, + unsigned char& fromType, unsigned char& toType) const { dtAssert(m_nav); const dtMeshTile* fromTile = 0; const dtPoly* fromPoly = 0; - if (!m_nav->getTileAndPolyByRef(from, &fromTile, &fromPoly)) - return false; + if (m_nav->getTileAndPolyByRef(from, &fromTile, &fromPoly) != DT_SUCCESS) + return DT_FAILURE; fromType = fromPoly->getType(); const dtMeshTile* toTile = 0; const dtPoly* toPoly = 0; - if (!m_nav->getTileAndPolyByRef(to, &toTile, &toPoly)) - return false; + if (m_nav->getTileAndPolyByRef(to, &toTile, &toPoly) != DT_SUCCESS) + return DT_FAILURE; toType = toPoly->getType(); return getPortalPoints(from, fromPoly, fromTile, to, toPoly, toTile, left, right); } // Returns portal points between two polygons. -bool dtNavMeshQuery::getPortalPoints(dtPolyRef from, const dtPoly* fromPoly, const dtMeshTile* fromTile, - dtPolyRef to, const dtPoly* toPoly, const dtMeshTile* toTile, - float* left, float* right) const +dtStatus dtNavMeshQuery::getPortalPoints(dtPolyRef from, const dtPoly* fromPoly, const dtMeshTile* fromTile, + dtPolyRef to, const dtPoly* toPoly, const dtMeshTile* toTile, + float* left, float* right) const { // Find the link that points to the 'to' polygon. const dtLink* link = 0; @@ -1434,7 +1475,7 @@ bool dtNavMeshQuery::getPortalPoints(dtPolyRef from, const dtPoly* fromPoly, con } } if (!link) - return false; + return DT_FAILURE; // Handle off-mesh connections. if (fromPoly->getType() == DT_POLYTYPE_OFFMESH_CONNECTION) @@ -1447,10 +1488,10 @@ bool dtNavMeshQuery::getPortalPoints(dtPolyRef from, const dtPoly* fromPoly, con const int v = fromTile->links[i].edge; dtVcopy(left, &fromTile->verts[fromPoly->verts[v]*3]); dtVcopy(right, &fromTile->verts[fromPoly->verts[v]*3]); - return true; + return DT_SUCCESS; } } - return false; + return DT_FAILURE; } if (toPoly->getType() == DT_POLYTYPE_OFFMESH_CONNECTION) @@ -1462,10 +1503,10 @@ bool dtNavMeshQuery::getPortalPoints(dtPolyRef from, const dtPoly* fromPoly, con const int v = toTile->links[i].edge; dtVcopy(left, &toTile->verts[toPoly->verts[v]*3]); dtVcopy(right, &toTile->verts[toPoly->verts[v]*3]); - return true; + return DT_SUCCESS; } } - return false; + return DT_FAILURE; } // Find portal vertices. @@ -1489,46 +1530,49 @@ bool dtNavMeshQuery::getPortalPoints(dtPolyRef from, const dtPoly* fromPoly, con } } - return true; + return DT_SUCCESS; } // Returns edge mid point between two polygons. -bool dtNavMeshQuery::getEdgeMidPoint(dtPolyRef from, dtPolyRef to, float* mid) const +dtStatus dtNavMeshQuery::getEdgeMidPoint(dtPolyRef from, dtPolyRef to, float* mid) const { float left[3], right[3]; unsigned char fromType, toType; - if (!getPortalPoints(from, to, left,right, fromType, toType)) return false; + if (!getPortalPoints(from, to, left,right, fromType, toType)) return DT_FAILURE; mid[0] = (left[0]+right[0])*0.5f; mid[1] = (left[1]+right[1])*0.5f; mid[2] = (left[2]+right[2])*0.5f; - return true; + return DT_SUCCESS; } -bool dtNavMeshQuery::getEdgeMidPoint(dtPolyRef from, const dtPoly* fromPoly, const dtMeshTile* fromTile, - dtPolyRef to, const dtPoly* toPoly, const dtMeshTile* toTile, - float* mid) const +dtStatus dtNavMeshQuery::getEdgeMidPoint(dtPolyRef from, const dtPoly* fromPoly, const dtMeshTile* fromTile, + dtPolyRef to, const dtPoly* toPoly, const dtMeshTile* toTile, + float* mid) const { float left[3], right[3]; - if (!getPortalPoints(from, fromPoly, fromTile, to, toPoly, toTile, left, right)) - return false; + if (getPortalPoints(from, fromPoly, fromTile, to, toPoly, toTile, left, right) != DT_SUCCESS) + return DT_FAILURE; mid[0] = (left[0]+right[0])*0.5f; mid[1] = (left[1]+right[1])*0.5f; mid[2] = (left[2]+right[2])*0.5f; - return true; + return DT_SUCCESS; } -int dtNavMeshQuery::raycast(dtPolyRef centerRef, const float* startPos, const float* endPos, const dtQueryFilter* filter, - float& t, float* hitNormal, dtPolyRef* path, const int pathSize) const +dtStatus dtNavMeshQuery::raycast(dtPolyRef startRef, const float* startPos, const float* endPos, + const dtQueryFilter* filter, + float* t, float* hitNormal, dtPolyRef* path, int* pathCount, const int maxPath) const { dtAssert(m_nav); - t = 0; + *t = 0; + if (pathCount) + *pathCount = 0; // Validate input - if (!centerRef || !m_nav->isValidPolyRef(centerRef)) - return 0; + if (!startRef || !m_nav->isValidPolyRef(startRef)) + return DT_FAILURE; - dtPolyRef curRef = centerRef; + dtPolyRef curRef = startRef; float verts[DT_VERTS_PER_POLYGON*3]; int n = 0; @@ -1558,21 +1602,25 @@ int dtNavMeshQuery::raycast(dtPolyRef centerRef, const float* startPos, const fl if (!dtIntersectSegmentPoly2D(startPos, endPos, verts, nv, tmin, tmax, segMin, segMax)) { // Could not hit the polygon, keep the old t and report hit. - return n; + if (pathCount) + *pathCount = n; + return DT_SUCCESS; } // Keep track of furthest t so far. - if (tmax > t) - t = tmax; + if (tmax > *t) + *t = tmax; // Store visited polygons. - if (n < pathSize) + if (n < maxPath) path[n++] = curRef; // Ray end is completely inside the polygon. if (segMax == -1) { - t = FLT_MAX; - return n; + *t = FLT_MAX; + if (pathCount) + *pathCount = n; + return DT_SUCCESS; } // Follow neighbours. @@ -1672,38 +1720,45 @@ int dtNavMeshQuery::raycast(dtPolyRef centerRef, const float* startPos, const fl hitNormal[2] = -dx; dtVnormalize(hitNormal); - return n; + if (pathCount) + *pathCount = n; + return DT_SUCCESS; } // No hit, advance to neighbour polygon. curRef = nextRef; } - return n; + if (pathCount) + *pathCount = n; + + return DT_SUCCESS; } -int dtNavMeshQuery::findPolysAroundCircle(dtPolyRef centerRef, const float* centerPos, const float radius, - const dtQueryFilter* filter, - dtPolyRef* resultRef, dtPolyRef* resultParent, float* resultCost, - const int maxResult) const +dtStatus dtNavMeshQuery::findPolysAroundCircle(dtPolyRef startRef, const float* centerPos, const float radius, + const dtQueryFilter* filter, + dtPolyRef* resultRef, dtPolyRef* resultParent, float* resultCost, + int* resultCount, const int maxResult) const { dtAssert(m_nav); dtAssert(m_nodePool); dtAssert(m_openList); + *resultCount = 0; + // Validate input - if (!centerRef) return 0; - if (!m_nav->isValidPolyRef(centerRef)) return 0; + if (!startRef) return DT_FAILURE; + if (!m_nav->isValidPolyRef(startRef)) return DT_FAILURE; m_nodePool->clear(); m_openList->clear(); - dtNode* startNode = m_nodePool->getNode(centerRef); + dtNode* startNode = m_nodePool->getNode(startRef); dtVcopy(startNode->pos, centerPos); startNode->pidx = 0; startNode->cost = 0; startNode->total = 0; - startNode->id = centerRef; + startNode->id = startRef; startNode->flags = DT_NODE_OPEN; m_openList->push(startNode); @@ -1815,21 +1870,25 @@ int dtNavMeshQuery::findPolysAroundCircle(dtPolyRef centerRef, const float* cent } } - return n; + *resultCount = n; + + return DT_SUCCESS; } -int dtNavMeshQuery::findPolysAroundShape(dtPolyRef centerRef, const float* verts, const int nverts, - const dtQueryFilter* filter, - dtPolyRef* resultRef, dtPolyRef* resultParent, float* resultCost, - const int maxResult) const +dtStatus dtNavMeshQuery::findPolysAroundShape(dtPolyRef startRef, const float* verts, const int nverts, + const dtQueryFilter* filter, + dtPolyRef* resultRef, dtPolyRef* resultParent, float* resultCost, + int* resultCount, const int maxResult) const { dtAssert(m_nav); dtAssert(m_nodePool); dtAssert(m_openList); + *resultCount = 0; + // Validate input - if (!centerRef) return 0; - if (!m_nav->isValidPolyRef(centerRef)) return 0; + if (!startRef) return DT_FAILURE; + if (!m_nav->isValidPolyRef(startRef)) return DT_FAILURE; m_nodePool->clear(); m_openList->clear(); @@ -1839,12 +1898,12 @@ int dtNavMeshQuery::findPolysAroundShape(dtPolyRef centerRef, const float* verts dtVadd(centerPos,centerPos,&verts[i*3]); dtVscale(centerPos,centerPos,1.0f/nverts); - dtNode* startNode = m_nodePool->getNode(centerRef); + dtNode* startNode = m_nodePool->getNode(startRef); dtVcopy(startNode->pos, centerPos); startNode->pidx = 0; startNode->cost = 0; startNode->total = 0; - startNode->id = centerRef; + startNode->id = startRef; startNode->flags = DT_NODE_OPEN; m_openList->push(startNode); @@ -1956,20 +2015,24 @@ int dtNavMeshQuery::findPolysAroundShape(dtPolyRef centerRef, const float* verts } } - return n; + *resultCount = n; + + return DT_SUCCESS; } - -int dtNavMeshQuery::findLocalNeighbourhood(dtPolyRef centerRef, const float* centerPos, const float radius, - const dtQueryFilter* filter, - dtPolyRef* resultRef, dtPolyRef* resultParent, const int maxResult) const +dtStatus dtNavMeshQuery::findLocalNeighbourhood(dtPolyRef startRef, const float* centerPos, const float radius, + const dtQueryFilter* filter, + dtPolyRef* resultRef, dtPolyRef* resultParent, + int* resultCount, const int maxResult) const { dtAssert(m_nav); dtAssert(m_tinyNodePool); + + *resultCount = 0; // Validate input - if (!centerRef) return 0; - if (!m_nav->isValidPolyRef(centerRef)) return 0; + if (!startRef) return DT_FAILURE; + if (!m_nav->isValidPolyRef(startRef)) return DT_FAILURE; static const int MAX_STACK = 48; dtNode* stack[MAX_STACK]; @@ -1977,9 +2040,9 @@ int dtNavMeshQuery::findLocalNeighbourhood(dtPolyRef centerRef, const float* cen m_tinyNodePool->clear(); - dtNode* startNode = m_tinyNodePool->getNode(centerRef); + dtNode* startNode = m_tinyNodePool->getNode(startRef); startNode->pidx = 0; - startNode->id = centerRef; + startNode->id = startRef; startNode->flags = DT_NODE_CLOSED; stack[nstack++] = startNode; @@ -2070,16 +2133,16 @@ int dtNavMeshQuery::findLocalNeighbourhood(dtPolyRef centerRef, const float* cen dtPolyRef pastRef = resultRef[j]; // Connected polys do not overlap. - bool areConnected = false; + bool connected = false; for (unsigned int k = curPoly->firstLink; k != DT_NULL_LINK; k = curTile->links[k].next) { if (curTile->links[k].ref == pastRef) { - areConnected = true; + connected = true; break; } } - if (areConnected) + if (connected) continue; // Potentially overlapping. @@ -2117,7 +2180,9 @@ int dtNavMeshQuery::findLocalNeighbourhood(dtPolyRef centerRef, const float* cen } } - return n; + *resultCount = n; + + return DT_SUCCESS; } @@ -2147,15 +2212,17 @@ static void insertInterval(dtSegInterval* ints, int& nints, const int maxInts, nints++; } -int dtNavMeshQuery::getPolyWallSegments(dtPolyRef ref, const dtQueryFilter* filter, - float* segments, const int maxSegments) +dtStatus dtNavMeshQuery::getPolyWallSegments(dtPolyRef ref, const dtQueryFilter* filter, + float* segments, int* segmentCount, const int maxSegments) const { dtAssert(m_nav); + *segmentCount = 0; + const dtMeshTile* tile = 0; const dtPoly* poly = 0; - if (!m_nav->getTileAndPolyByRef(ref, &tile, &poly)) - return 0; + if (m_nav->getTileAndPolyByRef(ref, &tile, &poly) != DT_SUCCESS) + return DT_FAILURE; int n = 0; static const int MAX_INTERVAL = 16; @@ -2234,29 +2301,32 @@ int dtNavMeshQuery::getPolyWallSegments(dtPolyRef ref, const dtQueryFilter* filt } } - return n; + *segmentCount = n; + + return DT_SUCCESS; } -float dtNavMeshQuery::findDistanceToWall(dtPolyRef centerRef, const float* centerPos, float maxRadius, const dtQueryFilter* filter, - float* hitPos, float* hitNormal) const +dtStatus dtNavMeshQuery::findDistanceToWall(dtPolyRef startRef, const float* centerPos, const float maxRadius, + const dtQueryFilter* filter, + float* hitDist, float* hitPos, float* hitNormal) const { dtAssert(m_nav); dtAssert(m_nodePool); dtAssert(m_openList); // Validate input - if (!centerRef) return 0; - if (!m_nav->isValidPolyRef(centerRef)) return 0; + if (!startRef) return DT_FAILURE; + if (!m_nav->isValidPolyRef(startRef)) return DT_FAILURE; m_nodePool->clear(); m_openList->clear(); - dtNode* startNode = m_nodePool->getNode(centerRef); + dtNode* startNode = m_nodePool->getNode(startRef); dtVcopy(startNode->pos, centerPos); startNode->pidx = 0; startNode->cost = 0; startNode->total = 0; - startNode->id = centerRef; + startNode->id = startRef; startNode->flags = DT_NODE_OPEN; m_openList->push(startNode); @@ -2408,7 +2478,9 @@ float dtNavMeshQuery::findDistanceToWall(dtPolyRef centerRef, const float* cente dtVsub(hitNormal, centerPos, hitPos); dtVnormalize(hitNormal); - return sqrtf(radiusSqr); + *hitDist = sqrtf(radiusSqr); + + return DT_SUCCESS; } 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 8487f13..590f4fd 100644 --- a/RecastDemo/Build/Xcode/Recast.xcodeproj/memon.pbxuser +++ b/RecastDemo/Build/Xcode/Recast.xcodeproj/memon.pbxuser @@ -20,11 +20,11 @@ 6B42164711806B2F006C347B /* DetourDebugDraw.cpp:362 */, 6B10014C11AD1C1E0098A59A /* RecastMesh.cpp:1324 */, 6BA687AC1222F7AC00730711 /* Sample_Debug.cpp:137 */, - 6BD403421224642500995864 /* NavMeshTesterTool.cpp:541 */, + 6BD403421224642500995864 /* NavMeshTesterTool.cpp:543 */, 6B920A121225B1C900D5B5AD /* DetourHashLookup.cpp:78 */, 6B920A141225B1CF00D5B5AD /* DetourHashLookup.cpp:131 */, - 6BD66851124350F50021A7A4 /* NavMeshTesterTool.cpp:480 */, - 6B8D55CD127AAA360077C699 /* CrowdManager.cpp:1161 */, + 6BD66851124350F50021A7A4 /* NavMeshTesterTool.cpp:482 */, + 6B8D55CD127AAA360077C699 /* CrowdManager.cpp:1169 */, ); codeSenseManager = 6B8632AA0F78115100E2684A /* Code sense */; executables = ( @@ -127,12 +127,11 @@ PBXFindDataSource_LocationID, ); }; - PBXPerProjectTemplateStateSaveDate = 310023841; - PBXWorkspaceStateSaveDate = 310023841; + PBXPerProjectTemplateStateSaveDate = 310039373; + PBXWorkspaceStateSaveDate = 310039373; }; perUserProjectItems = { 6B1633101268326F0083FC15 = 6B1633101268326F0083FC15 /* PBXTextBookmark */; - 6B1633111268326F0083FC15 = 6B1633111268326F0083FC15 /* PBXTextBookmark */; 6B1633121268326F0083FC15 = 6B1633121268326F0083FC15 /* PBXTextBookmark */; 6B1633141268326F0083FC15 = 6B1633141268326F0083FC15 /* PBXTextBookmark */; 6B163317126832D20083FC15 = 6B163317126832D20083FC15 /* PBXTextBookmark */; @@ -152,77 +151,72 @@ 6B84778B122D279700ADF63D = 6B84778B122D279700ADF63D /* PBXTextBookmark */; 6B8477BB122D297200ADF63D = 6B8477BB122D297200ADF63D /* PBXTextBookmark */; 6B8477E1122D2B9100ADF63D = 6B8477E1122D2B9100ADF63D /* PBXTextBookmark */; - 6B8477FC122D2E2A00ADF63D = 6B8477FC122D2E2A00ADF63D /* PBXTextBookmark */; 6B8477FE122D2E2A00ADF63D = 6B8477FE122D2E2A00ADF63D /* PBXTextBookmark */; 6B8477FF122D2E2A00ADF63D = 6B8477FF122D2E2A00ADF63D /* PBXTextBookmark */; - 6B8D5565127A98FB0077C699 /* PBXTextBookmark */ = 6B8D5565127A98FB0077C699 /* PBXTextBookmark */; - 6B8D5566127A98FB0077C699 /* PBXTextBookmark */ = 6B8D5566127A98FB0077C699 /* PBXTextBookmark */; - 6B8D5567127A98FB0077C699 /* PBXTextBookmark */ = 6B8D5567127A98FB0077C699 /* PBXTextBookmark */; - 6B8D5568127A98FB0077C699 /* PBXTextBookmark */ = 6B8D5568127A98FB0077C699 /* PBXTextBookmark */; - 6B8D556C127A99950077C699 /* PBXTextBookmark */ = 6B8D556C127A99950077C699 /* PBXTextBookmark */; - 6B8D556D127A9DFE0077C699 /* PBXTextBookmark */ = 6B8D556D127A9DFE0077C699 /* PBXTextBookmark */; - 6B8D556E127A9DFE0077C699 /* PBXTextBookmark */ = 6B8D556E127A9DFE0077C699 /* PBXTextBookmark */; - 6B8D556F127A9DFE0077C699 /* PBXTextBookmark */ = 6B8D556F127A9DFE0077C699 /* PBXTextBookmark */; - 6B8D5570127A9E980077C699 /* PBXTextBookmark */ = 6B8D5570127A9E980077C699 /* PBXTextBookmark */; - 6B8D5573127AA1640077C699 /* PBXTextBookmark */ = 6B8D5573127AA1640077C699 /* PBXTextBookmark */; - 6B8D5574127AA1640077C699 /* PBXTextBookmark */ = 6B8D5574127AA1640077C699 /* PBXTextBookmark */; - 6B8D5575127AA1640077C699 /* PBXTextBookmark */ = 6B8D5575127AA1640077C699 /* PBXTextBookmark */; - 6B8D5580127AA2270077C699 /* PBXTextBookmark */ = 6B8D5580127AA2270077C699 /* PBXTextBookmark */; - 6B8D5581127AA2270077C699 /* PBXTextBookmark */ = 6B8D5581127AA2270077C699 /* PBXTextBookmark */; - 6B8D5582127AA2270077C699 /* PBXTextBookmark */ = 6B8D5582127AA2270077C699 /* PBXTextBookmark */; - 6B8D5583127AA2270077C699 /* PBXTextBookmark */ = 6B8D5583127AA2270077C699 /* PBXTextBookmark */; - 6B8D5584127AA2270077C699 /* PBXTextBookmark */ = 6B8D5584127AA2270077C699 /* PBXTextBookmark */; - 6B8D559E127AA3E70077C699 /* PBXTextBookmark */ = 6B8D559E127AA3E70077C699 /* PBXTextBookmark */; - 6B8D559F127AA3E70077C699 /* PBXTextBookmark */ = 6B8D559F127AA3E70077C699 /* PBXTextBookmark */; - 6B8D55A0127AA3E70077C699 /* PBXTextBookmark */ = 6B8D55A0127AA3E70077C699 /* PBXTextBookmark */; - 6B8D55A1127AA3E70077C699 /* PBXTextBookmark */ = 6B8D55A1127AA3E70077C699 /* PBXTextBookmark */; - 6B8D55A2127AA3E70077C699 /* PBXTextBookmark */ = 6B8D55A2127AA3E70077C699 /* PBXTextBookmark */; - 6B8D55A4127AA3F60077C699 /* PBXTextBookmark */ = 6B8D55A4127AA3F60077C699 /* PBXTextBookmark */; - 6B8D55A5127AA3FD0077C699 /* PBXTextBookmark */ = 6B8D55A5127AA3FD0077C699 /* PBXTextBookmark */; - 6B8D55A8127AA4250077C699 /* PBXTextBookmark */ = 6B8D55A8127AA4250077C699 /* PBXTextBookmark */; - 6B8D55AC127AA4AA0077C699 /* PBXTextBookmark */ = 6B8D55AC127AA4AA0077C699 /* PBXTextBookmark */; - 6B8D55AE127AA4C00077C699 /* PBXTextBookmark */ = 6B8D55AE127AA4C00077C699 /* PBXTextBookmark */; - 6B8D55AF127AA4DC0077C699 /* PBXTextBookmark */ = 6B8D55AF127AA4DC0077C699 /* PBXTextBookmark */; - 6B8D55B0127AA4DF0077C699 /* PBXTextBookmark */ = 6B8D55B0127AA4DF0077C699 /* PBXTextBookmark */; - 6B8D55B3127AA4EF0077C699 /* PBXTextBookmark */ = 6B8D55B3127AA4EF0077C699 /* PBXTextBookmark */; - 6B8D55B4127AA4EF0077C699 /* PBXTextBookmark */ = 6B8D55B4127AA4EF0077C699 /* PBXTextBookmark */; - 6B8D55B5127AA5E60077C699 /* PBXTextBookmark */ = 6B8D55B5127AA5E60077C699 /* PBXTextBookmark */; - 6B8D55B6127AA5E60077C699 /* PBXTextBookmark */ = 6B8D55B6127AA5E60077C699 /* PBXTextBookmark */; - 6B8D55B7127AA5E60077C699 /* PBXTextBookmark */ = 6B8D55B7127AA5E60077C699 /* PBXTextBookmark */; - 6B8D55BA127AA6080077C699 /* PBXTextBookmark */ = 6B8D55BA127AA6080077C699 /* PBXTextBookmark */; - 6B8D55C0127AA6A90077C699 /* PBXTextBookmark */ = 6B8D55C0127AA6A90077C699 /* PBXTextBookmark */; - 6B8D55C4127AA6B70077C699 /* PBXTextBookmark */ = 6B8D55C4127AA6B70077C699 /* PBXTextBookmark */; - 6B8D55C5127AA7060077C699 /* PBXTextBookmark */ = 6B8D55C5127AA7060077C699 /* PBXTextBookmark */; - 6B8D55C6127AA7D50077C699 /* PBXTextBookmark */ = 6B8D55C6127AA7D50077C699 /* PBXTextBookmark */; - 6B8D55C7127AA7D50077C699 /* PBXTextBookmark */ = 6B8D55C7127AA7D50077C699 /* PBXTextBookmark */; - 6B8D55C8127AA7D80077C699 /* PBXTextBookmark */ = 6B8D55C8127AA7D80077C699 /* PBXTextBookmark */; - 6B8D55C9127AA85F0077C699 /* PBXTextBookmark */ = 6B8D55C9127AA85F0077C699 /* PBXTextBookmark */; - 6B8D55CA127AA9BD0077C699 /* PBXTextBookmark */ = 6B8D55CA127AA9BD0077C699 /* PBXTextBookmark */; - 6B8D55CB127AA9BD0077C699 /* PBXTextBookmark */ = 6B8D55CB127AA9BD0077C699 /* PBXTextBookmark */; - 6B8D55CC127AA9BD0077C699 /* PBXTextBookmark */ = 6B8D55CC127AA9BD0077C699 /* PBXTextBookmark */; - 6B8D55D1127AAA680077C699 /* PBXTextBookmark */ = 6B8D55D1127AAA680077C699 /* PBXTextBookmark */; - 6B8D55D2127AAA680077C699 /* PBXTextBookmark */ = 6B8D55D2127AAA680077C699 /* PBXTextBookmark */; - 6B8D55D5127AAA6C0077C699 /* PBXTextBookmark */ = 6B8D55D5127AAA6C0077C699 /* PBXTextBookmark */; - 6B8D55D7127AAAB70077C699 /* PBXTextBookmark */ = 6B8D55D7127AAAB70077C699 /* PBXTextBookmark */; - 6B8D55D8127AAB1F0077C699 /* PBXTextBookmark */ = 6B8D55D8127AAB1F0077C699 /* PBXTextBookmark */; - 6B8D55D9127AABD80077C699 /* PBXTextBookmark */ = 6B8D55D9127AABD80077C699 /* PBXTextBookmark */; - 6B8D55DA127AABD80077C699 /* PBXTextBookmark */ = 6B8D55DA127AABD80077C699 /* PBXTextBookmark */; - 6B8D55DB127AABD80077C699 /* PBXTextBookmark */ = 6B8D55DB127AABD80077C699 /* PBXTextBookmark */; - 6B8D55DC127AABEF0077C699 /* PBXTextBookmark */ = 6B8D55DC127AABEF0077C699 /* PBXTextBookmark */; - 6B8D55E1127AAD060077C699 /* PBXTextBookmark */ = 6B8D55E1127AAD060077C699 /* PBXTextBookmark */; - 6B8D55E3127AAE590077C699 /* PBXTextBookmark */ = 6B8D55E3127AAE590077C699 /* PBXTextBookmark */; - 6B8D55EA127AAE680077C699 /* PBXTextBookmark */ = 6B8D55EA127AAE680077C699 /* PBXTextBookmark */; - 6B8D55F2127ABAD40077C699 /* PBXTextBookmark */ = 6B8D55F2127ABAD40077C699 /* PBXTextBookmark */; - 6B8D55F3127ABAD40077C699 /* PBXTextBookmark */ = 6B8D55F3127ABAD40077C699 /* PBXTextBookmark */; - 6B8D55F4127ABAD40077C699 /* PBXTextBookmark */ = 6B8D55F4127ABAD40077C699 /* PBXTextBookmark */; - 6B8D55F5127ABAD40077C699 /* PBXTextBookmark */ = 6B8D55F5127ABAD40077C699 /* PBXTextBookmark */; - 6B8D55F6127ABAD40077C699 /* PBXTextBookmark */ = 6B8D55F6127ABAD40077C699 /* PBXTextBookmark */; - 6B8D55F9127ABB6B0077C699 /* PBXTextBookmark */ = 6B8D55F9127ABB6B0077C699 /* PBXTextBookmark */; - 6B8D55FD127ABBCB0077C699 /* PBXTextBookmark */ = 6B8D55FD127ABBCB0077C699 /* PBXTextBookmark */; - 6B8D55FE127ABBCB0077C699 /* PBXTextBookmark */ = 6B8D55FE127ABBCB0077C699 /* PBXTextBookmark */; - 6B8D5603127ABBD80077C699 /* PBXTextBookmark */ = 6B8D5603127ABBD80077C699 /* PBXTextBookmark */; - 6B8D5604127ABBD80077C699 /* XCBuildMessageTextBookmark */ = 6B8D5604127ABBD80077C699 /* XCBuildMessageTextBookmark */; - 6B8D5605127ABBD80077C699 /* PBXTextBookmark */ = 6B8D5605127ABBD80077C699 /* PBXTextBookmark */; + 6B8D5565127A98FB0077C699 = 6B8D5565127A98FB0077C699 /* PBXTextBookmark */; + 6B8D559F127AA3E70077C699 = 6B8D559F127AA3E70077C699 /* PBXTextBookmark */; + 6B8D55A0127AA3E70077C699 = 6B8D55A0127AA3E70077C699 /* PBXTextBookmark */; + 6B8D55B5127AA5E60077C699 = 6B8D55B5127AA5E60077C699 /* PBXTextBookmark */; + 6B8D55F2127ABAD40077C699 = 6B8D55F2127ABAD40077C699 /* PBXTextBookmark */; + 6B8D55F3127ABAD40077C699 = 6B8D55F3127ABAD40077C699 /* PBXTextBookmark */; + 6B8D5603127ABBD80077C699 = 6B8D5603127ABBD80077C699 /* PBXTextBookmark */; + 6B8D5609127ACF8D0077C699 = 6B8D5609127ACF8D0077C699 /* PBXTextBookmark */; + 6B8D560A127ACF8D0077C699 = 6B8D560A127ACF8D0077C699 /* PBXTextBookmark */; + 6B8D560B127ACF8D0077C699 = 6B8D560B127ACF8D0077C699 /* PBXTextBookmark */; + 6B8D560C127ACF8D0077C699 = 6B8D560C127ACF8D0077C699 /* PBXTextBookmark */; + 6B8D560E127ACF8D0077C699 = 6B8D560E127ACF8D0077C699 /* PBXTextBookmark */; + 6B8D5610127ACF8D0077C699 = 6B8D5610127ACF8D0077C699 /* PBXTextBookmark */; + 6B8D5621127AD44A0077C699 /* PBXTextBookmark */ = 6B8D5621127AD44A0077C699 /* PBXTextBookmark */; + 6B8D5622127AD44A0077C699 /* PBXTextBookmark */ = 6B8D5622127AD44A0077C699 /* PBXTextBookmark */; + 6B8D5623127AD44A0077C699 /* PBXTextBookmark */ = 6B8D5623127AD44A0077C699 /* PBXTextBookmark */; + 6B8D5624127AD44A0077C699 /* PBXTextBookmark */ = 6B8D5624127AD44A0077C699 /* PBXTextBookmark */; + 6B8D5636127AD6CA0077C699 /* PBXTextBookmark */ = 6B8D5636127AD6CA0077C699 /* PBXTextBookmark */; + 6B8D5637127AD6CA0077C699 /* PBXTextBookmark */ = 6B8D5637127AD6CA0077C699 /* PBXTextBookmark */; + 6B8D5638127AD6CA0077C699 /* PBXTextBookmark */ = 6B8D5638127AD6CA0077C699 /* PBXTextBookmark */; + 6B8D5639127AD6CA0077C699 /* PBXTextBookmark */ = 6B8D5639127AD6CA0077C699 /* PBXTextBookmark */; + 6B8D5640127AD6EC0077C699 /* PBXTextBookmark */ = 6B8D5640127AD6EC0077C699 /* PBXTextBookmark */; + 6B8D5641127AD6EC0077C699 /* PBXTextBookmark */ = 6B8D5641127AD6EC0077C699 /* PBXTextBookmark */; + 6B8D5649127AD7800077C699 /* PBXTextBookmark */ = 6B8D5649127AD7800077C699 /* PBXTextBookmark */; + 6B8D564A127AD7800077C699 /* PBXTextBookmark */ = 6B8D564A127AD7800077C699 /* PBXTextBookmark */; + 6B8D564B127AD7800077C699 /* PBXTextBookmark */ = 6B8D564B127AD7800077C699 /* PBXTextBookmark */; + 6B8D5654127AD9590077C699 /* PBXTextBookmark */ = 6B8D5654127AD9590077C699 /* PBXTextBookmark */; + 6B8D5655127AD9590077C699 /* PBXTextBookmark */ = 6B8D5655127AD9590077C699 /* PBXTextBookmark */; + 6B8D5656127AD9590077C699 /* PBXTextBookmark */ = 6B8D5656127AD9590077C699 /* PBXTextBookmark */; + 6B8D565F127ADB0D0077C699 /* PBXTextBookmark */ = 6B8D565F127ADB0D0077C699 /* PBXTextBookmark */; + 6B8D5660127ADB0D0077C699 /* PBXTextBookmark */ = 6B8D5660127ADB0D0077C699 /* PBXTextBookmark */; + 6B8D5661127ADB0D0077C699 /* PBXTextBookmark */ = 6B8D5661127ADB0D0077C699 /* PBXTextBookmark */; + 6B8D5662127ADB0D0077C699 /* PBXTextBookmark */ = 6B8D5662127ADB0D0077C699 /* PBXTextBookmark */; + 6B8D5663127ADB0D0077C699 /* PBXTextBookmark */ = 6B8D5663127ADB0D0077C699 /* PBXTextBookmark */; + 6B8D5664127ADB0D0077C699 /* PBXTextBookmark */ = 6B8D5664127ADB0D0077C699 /* PBXTextBookmark */; + 6B8D5665127ADB0D0077C699 /* PBXTextBookmark */ = 6B8D5665127ADB0D0077C699 /* PBXTextBookmark */; + 6B8D5666127ADB0D0077C699 /* PBXTextBookmark */ = 6B8D5666127ADB0D0077C699 /* PBXTextBookmark */; + 6B8D5667127ADB0D0077C699 /* PBXTextBookmark */ = 6B8D5667127ADB0D0077C699 /* PBXTextBookmark */; + 6B8D5668127ADB0D0077C699 /* PBXTextBookmark */ = 6B8D5668127ADB0D0077C699 /* PBXTextBookmark */; + 6B8D566D127ADB7D0077C699 /* PBXTextBookmark */ = 6B8D566D127ADB7D0077C699 /* PBXTextBookmark */; + 6B8D566E127ADB7D0077C699 /* PBXTextBookmark */ = 6B8D566E127ADB7D0077C699 /* PBXTextBookmark */; + 6B8D566F127ADB7D0077C699 /* PBXTextBookmark */ = 6B8D566F127ADB7D0077C699 /* PBXTextBookmark */; + 6B8D5670127ADB7D0077C699 /* PBXTextBookmark */ = 6B8D5670127ADB7D0077C699 /* PBXTextBookmark */; + 6B8D5671127ADB7D0077C699 /* PBXTextBookmark */ = 6B8D5671127ADB7D0077C699 /* PBXTextBookmark */; + 6B8D5672127ADBB00077C699 /* PBXTextBookmark */ = 6B8D5672127ADBB00077C699 /* PBXTextBookmark */; + 6B8D5673127ADBB00077C699 /* PBXTextBookmark */ = 6B8D5673127ADBB00077C699 /* PBXTextBookmark */; + 6B8D5674127ADBB00077C699 /* PBXTextBookmark */ = 6B8D5674127ADBB00077C699 /* PBXTextBookmark */; + 6B8D56C7127AEC100077C699 /* PBXTextBookmark */ = 6B8D56C7127AEC100077C699 /* PBXTextBookmark */; + 6B8D56C8127AEC100077C699 /* PBXTextBookmark */ = 6B8D56C8127AEC100077C699 /* PBXTextBookmark */; + 6B8D56C9127AEC100077C699 /* PBXTextBookmark */ = 6B8D56C9127AEC100077C699 /* PBXTextBookmark */; + 6B8D56CA127AEC100077C699 /* PBXTextBookmark */ = 6B8D56CA127AEC100077C699 /* PBXTextBookmark */; + 6B8D56CB127AEC100077C699 /* PBXTextBookmark */ = 6B8D56CB127AEC100077C699 /* PBXTextBookmark */; + 6B8D56CC127AEC100077C699 /* PBXTextBookmark */ = 6B8D56CC127AEC100077C699 /* PBXTextBookmark */; + 6B8D56CD127AEC100077C699 /* PBXTextBookmark */ = 6B8D56CD127AEC100077C699 /* PBXTextBookmark */; + 6B8D56CE127AEC100077C699 /* PBXTextBookmark */ = 6B8D56CE127AEC100077C699 /* PBXTextBookmark */; + 6B8D56CF127AEC100077C699 /* PBXTextBookmark */ = 6B8D56CF127AEC100077C699 /* PBXTextBookmark */; + 6B8D56D0127AEC100077C699 /* PBXTextBookmark */ = 6B8D56D0127AEC100077C699 /* PBXTextBookmark */; + 6B8D56D1127AEC100077C699 /* PBXTextBookmark */ = 6B8D56D1127AEC100077C699 /* PBXTextBookmark */; + 6B8D56D2127AEC100077C699 /* PBXTextBookmark */ = 6B8D56D2127AEC100077C699 /* PBXTextBookmark */; + 6B8D56D3127AEC100077C699 /* XCBuildMessageTextBookmark */ = 6B8D56D3127AEC100077C699 /* XCBuildMessageTextBookmark */; + 6B8D56D4127AEC100077C699 /* PBXTextBookmark */ = 6B8D56D4127AEC100077C699 /* PBXTextBookmark */; + 6B8D56D8127AEC580077C699 /* PBXTextBookmark */ = 6B8D56D8127AEC580077C699 /* PBXTextBookmark */; + 6B8D56D9127AEC580077C699 /* PBXTextBookmark */ = 6B8D56D9127AEC580077C699 /* PBXTextBookmark */; + 6B8D56DA127AEC580077C699 /* PBXTextBookmark */ = 6B8D56DA127AEC580077C699 /* PBXTextBookmark */; 6B920A521225C0AC00D5B5AD = 6B920A521225C0AC00D5B5AD /* PBXTextBookmark */; 6B920A6D1225C5DD00D5B5AD = 6B920A6D1225C5DD00D5B5AD /* PBXTextBookmark */; 6B98462E11E6141900FA177B = 6B98462E11E6141900FA177B /* PBXTextBookmark */; @@ -239,7 +233,6 @@ 6BA8CF511255D44700272A3B = 6BA8CF511255D44700272A3B /* PBXTextBookmark */; 6BA8CF5B1255D49B00272A3B = 6BA8CF5B1255D49B00272A3B /* PBXTextBookmark */; 6BA8CF951255D97400272A3B = 6BA8CF951255D97400272A3B /* PBXTextBookmark */; - 6BA8CFA81255DC6500272A3B = 6BA8CFA81255DC6500272A3B /* PBXTextBookmark */; 6BA8CFBE1255DE0500272A3B = 6BA8CFBE1255DE0500272A3B /* PBXTextBookmark */; 6BAF4321121AF998008CFCDF = 6BAF4321121AF998008CFCDF /* PBXTextBookmark */; 6BAF4421121C25E3008CFCDF = 6BAF4421121C25E3008CFCDF /* PBXTextBookmark */; @@ -249,24 +242,17 @@ 6BB2EE241261C92300E350F8 = 6BB2EE241261C92300E350F8 /* PBXTextBookmark */; 6BB2EE261261C92300E350F8 = 6BB2EE261261C92300E350F8 /* PBXTextBookmark */; 6BB2EE271261C92300E350F8 = 6BB2EE271261C92300E350F8 /* PBXTextBookmark */; - 6BB2EE351261CEB800E350F8 = 6BB2EE351261CEB800E350F8 /* PBXTextBookmark */; 6BB2EE361261CEB800E350F8 = 6BB2EE361261CEB800E350F8 /* PBXTextBookmark */; 6BB2EE3F1261D02000E350F8 = 6BB2EE3F1261D02000E350F8 /* PBXTextBookmark */; 6BB2EE661261D48100E350F8 = 6BB2EE661261D48100E350F8 /* PBXTextBookmark */; 6BB2EE691261D48100E350F8 = 6BB2EE691261D48100E350F8 /* PBXTextBookmark */; - 6BB2EE731261DA0400E350F8 = 6BB2EE731261DA0400E350F8 /* PBXTextBookmark */; - 6BB9C228126F4A9100B97C1C = 6BB9C228126F4A9100B97C1C /* PBXTextBookmark */; 6BB9C229126F4A9100B97C1C = 6BB9C229126F4A9100B97C1C /* PBXTextBookmark */; - 6BB9C22C126F4A9100B97C1C = 6BB9C22C126F4A9100B97C1C /* PBXTextBookmark */; 6BB9C253126F555F00B97C1C = 6BB9C253126F555F00B97C1C /* PBXTextBookmark */; 6BB9C2A2126F623D00B97C1C = 6BB9C2A2126F623D00B97C1C /* PBXTextBookmark */; 6BB9C2AA126F62C000B97C1C = 6BB9C2AA126F62C000B97C1C /* PBXTextBookmark */; - 6BB9C2AB126F62C000B97C1C = 6BB9C2AB126F62C000B97C1C /* PBXTextBookmark */; 6BB9C2B5127449CE00B97C1C = 6BB9C2B5127449CE00B97C1C /* PBXTextBookmark */; 6BB9C2BD127449CE00B97C1C = 6BB9C2BD127449CE00B97C1C /* PBXTextBookmark */; 6BB9C372127A0E5600B97C1C = 6BB9C372127A0E5600B97C1C /* PBXTextBookmark */; - 6BB9C373127A0E5600B97C1C = 6BB9C373127A0E5600B97C1C /* PBXTextBookmark */; - 6BB9C37B127A0FB400B97C1C = 6BB9C37B127A0FB400B97C1C /* PBXTextBookmark */; 6BBB0361124E242E00533229 = 6BBB0361124E242E00533229 /* PBXTextBookmark */; 6BBB0363124E242E00533229 = 6BBB0363124E242E00533229 /* PBXTextBookmark */; 6BBB4C34115B7A3D00CF791D = 6BBB4C34115B7A3D00CF791D /* PBXTextBookmark */; @@ -299,7 +285,7 @@ }; 32CA4F630368D1EE00C91783 /* Recast_Prefix.pch */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {933, 481}}"; + sepNavIntBoundsRect = "{{0, 0}, {931, 641}}"; sepNavSelRange = "{143, 0}"; sepNavVisRange = "{0, 143}"; sepNavWindowFrame = "{{38, 57}, {1011, 695}}"; @@ -325,44 +311,44 @@ }; 6B1185F41006895B0018F96F /* DetourNode.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {931, 1885}}"; + sepNavIntBoundsRect = "{{0, 0}, {931, 1820}}"; sepNavSelRange = "{1066, 9}"; - sepNavVisRange = "{249, 1208}"; + sepNavVisRange = "{0, 1792}"; }; }; 6B1185F61006896B0018F96F /* DetourNode.h */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {931, 1807}}"; + sepNavIntBoundsRect = "{{0, 0}, {931, 1794}}"; sepNavSelRange = "{1470, 0}"; - sepNavVisRange = "{1012, 886}"; + sepNavVisRange = "{924, 1088}"; }; }; 6B1185FC10068B040018F96F /* DetourCommon.h */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {931, 3588}}"; + sepNavIntBoundsRect = "{{0, 0}, {931, 3406}}"; sepNavSelRange = "{4673, 0}"; - sepNavVisRange = "{4324, 765}"; + sepNavVisRange = "{4016, 1105}"; }; }; 6B1185FD10068B150018F96F /* DetourCommon.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {933, 4004}}"; + sepNavIntBoundsRect = "{{0, 0}, {931, 4095}}"; sepNavSelRange = "{7172, 0}"; - sepNavVisRange = "{6676, 739}"; + sepNavVisRange = "{6461, 1315}"; }; }; 6B137C6C0F7FCBBB00459200 /* imgui.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {931, 8593}}"; + sepNavIntBoundsRect = "{{0, 0}, {931, 8567}}"; sepNavSelRange = "{3831, 0}"; - sepNavVisRange = "{2959, 1383}"; + sepNavVisRange = "{2893, 1467}"; }; }; 6B137C6D0F7FCBBB00459200 /* MeshLoaderObj.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {933, 3312}}"; + sepNavIntBoundsRect = "{{0, 0}, {931, 2912}}"; sepNavSelRange = "{4217, 0}"; - sepNavVisRange = "{3888, 550}"; + sepNavVisRange = "{3666, 1197}"; }; }; 6B137C6E0F7FCBBB00459200 /* SDLMain.m */ = { @@ -374,16 +360,16 @@ }; 6B137C7A0F7FCBE400459200 /* imgui.h */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {933, 1680}}"; + sepNavIntBoundsRect = "{{0, 0}, {931, 1417}}"; sepNavSelRange = "{2208, 20}"; - sepNavVisRange = "{1528, 1048}"; + sepNavVisRange = "{1506, 1270}"; }; }; 6B137C7B0F7FCBE400459200 /* MeshLoaderObj.h */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {826, 832}}"; + sepNavIntBoundsRect = "{{0, 0}, {931, 676}}"; sepNavSelRange = "{1045, 0}"; - sepNavVisRange = "{596, 975}"; + sepNavVisRange = "{0, 1662}"; }; }; 6B137C7C0F7FCBE400459200 /* SDLMain.h */ = { @@ -395,55 +381,55 @@ }; 6B137C7E0F7FCBFE00459200 /* Recast.h */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {931, 9555}}"; + sepNavIntBoundsRect = "{{0, 0}, {931, 9659}}"; sepNavSelRange = "{12869, 0}"; - sepNavVisRange = "{12440, 883}"; + sepNavVisRange = "{12166, 1292}"; sepNavWindowFrame = "{{15, 51}, {1214, 722}}"; }; }; 6B137C820F7FCC1100459200 /* Recast.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {931, 5460}}"; + sepNavIntBoundsRect = "{{0, 0}, {931, 5447}}"; sepNavSelRange = "{5691, 0}"; - sepNavVisRange = "{5327, 700}"; + sepNavVisRange = "{4981, 1352}"; }; }; 6B137C830F7FCC1100459200 /* RecastContour.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {931, 9945}}"; + sepNavIntBoundsRect = "{{0, 0}, {931, 9932}}"; sepNavSelRange = "{20095, 0}"; - sepNavVisRange = "{19389, 1374}"; + sepNavVisRange = "{19310, 1476}"; sepNavWindowFrame = "{{38, 30}, {1214, 722}}"; }; }; 6B137C850F7FCC1100459200 /* RecastFilter.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {933, 2880}}"; - sepNavSelRange = "{4706, 1}"; - sepNavVisRange = "{4401, 648}"; + sepNavIntBoundsRect = "{{0, 0}, {931, 2340}}"; + sepNavSelRange = "{4691, 1}"; + sepNavVisRange = "{3983, 1178}"; sepNavWindowFrame = "{{15, 78}, {1011, 695}}"; }; }; 6B137C870F7FCC1100459200 /* RecastMesh.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {1069, 17199}}"; + sepNavIntBoundsRect = "{{0, 0}, {1069, 17121}}"; sepNavSelRange = "{30602, 0}"; - sepNavVisRange = "{30236, 965}"; + sepNavVisRange = "{29923, 1482}"; }; }; 6B137C880F7FCC1100459200 /* RecastRasterization.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {933, 5216}}"; - sepNavSelRange = "{9542, 0}"; - sepNavVisRange = "{9167, 699}"; + sepNavIntBoundsRect = "{{0, 0}, {931, 4290}}"; + sepNavSelRange = "{9517, 0}"; + sepNavVisRange = "{8432, 1409}"; sepNavWindowFrame = "{{15, 51}, {1214, 722}}"; }; }; 6B137C890F7FCC1100459200 /* RecastRegion.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {931, 16380}}"; + sepNavIntBoundsRect = "{{0, 0}, {931, 16081}}"; sepNavSelRange = "{25263, 0}"; - sepNavVisRange = "{24701, 1143}"; + sepNavVisRange = "{24581, 1610}"; }; }; 6B1633101268326F0083FC15 /* PBXTextBookmark */ = { @@ -451,21 +437,11 @@ fRef = 6B8DE88710B69E3E00DF20FB /* DetourNavMesh.cpp */; name = "DetourNavMesh.cpp: 668"; rLen = 0; - rLoc = 18415; + rLoc = 18513; rType = 0; vrLen = 1034; vrLoc = 17469; }; - 6B1633111268326F0083FC15 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6BAF40DA12196A3D008CFCDF /* DetourNavMeshQuery.cpp */; - name = "DetourNavMeshQuery.cpp: 214"; - rLen = 0; - rLoc = 6120; - rType = 0; - vrLen = 690; - vrLoc = 18991; - }; 6B1633121268326F0083FC15 /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = 6B1185FC10068B040018F96F /* DetourCommon.h */; @@ -521,7 +497,7 @@ fRef = 6B2AEC520FFB8958005BE9CC /* Sample_TileMesh.cpp */; name = "Sample_TileMesh.cpp: 958"; rLen = 0; - rLoc = 26529; + rLoc = 26618; rType = 0; vrLen = 958; vrLoc = 26138; @@ -618,39 +594,39 @@ }; 6B25B6100FFA62AD004F1BC4 /* Sample.h */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {931, 1976}}"; + sepNavIntBoundsRect = "{{0, 0}, {931, 1820}}"; sepNavSelRange = "{2579, 0}"; - sepNavVisRange = "{2271, 551}"; + sepNavVisRange = "{1824, 1149}"; }; }; 6B25B6140FFA62BE004F1BC4 /* Sample.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {931, 2600}}"; + sepNavIntBoundsRect = "{{0, 0}, {931, 2613}}"; sepNavSelRange = "{1438, 0}"; - sepNavVisRange = "{987, 785}"; + sepNavVisRange = "{950, 826}"; }; }; 6B25B6180FFA62BE004F1BC4 /* main.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {1217, 12103}}"; - sepNavSelRange = "{21426, 0}"; - sepNavVisRange = "{2024, 437}"; + sepNavIntBoundsRect = "{{0, 0}, {931, 11921}}"; + sepNavSelRange = "{2461, 0}"; + sepNavVisRange = "{1520, 1280}"; sepNavWindowFrame = "{{15, 51}, {1214, 722}}"; }; }; 6B2AEC510FFB8946005BE9CC /* Sample_TileMesh.h */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {933, 1728}}"; + sepNavIntBoundsRect = "{{0, 0}, {931, 1404}}"; sepNavSelRange = "{2493, 0}"; - sepNavVisRange = "{1998, 900}"; + sepNavVisRange = "{1770, 1128}"; sepNavWindowFrame = "{{15, 78}, {1011, 695}}"; }; }; 6B2AEC520FFB8958005BE9CC /* Sample_TileMesh.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {931, 15340}}"; - sepNavSelRange = "{26529, 0}"; - sepNavVisRange = "{26138, 958}"; + sepNavIntBoundsRect = "{{0, 0}, {1223, 15886}}"; + sepNavSelRange = "{19430, 0}"; + sepNavVisRange = "{19043, 640}"; sepNavWindowFrame = "{{38, 30}, {1214, 722}}"; }; }; @@ -658,14 +634,14 @@ uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {931, 715}}"; sepNavSelRange = "{1384, 0}"; - sepNavVisRange = "{249, 1504}"; + sepNavVisRange = "{207, 1546}"; }; }; 6B324C65111C5D9A00EBD2FD /* ConvexVolumeTool.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {933, 3614}}"; + sepNavIntBoundsRect = "{{0, 0}, {931, 3471}}"; sepNavSelRange = "{5809, 0}"; - sepNavVisRange = "{5564, 704}"; + sepNavVisRange = "{5428, 1197}"; }; }; 6B42164711806B2F006C347B /* DetourDebugDraw.cpp:362 */ = { @@ -688,59 +664,59 @@ }; 6B555DAE100B211D00247EA3 /* imguiRenderGL.h */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {933, 569}}"; + sepNavIntBoundsRect = "{{0, 0}, {931, 641}}"; sepNavSelRange = "{923, 0}"; sepNavVisRange = "{0, 1106}"; }; }; 6B555DB0100B212E00247EA3 /* imguiRenderGL.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {931, 6279}}"; + sepNavIntBoundsRect = "{{0, 0}, {931, 5967}}"; sepNavSelRange = "{10776, 0}"; - sepNavVisRange = "{9786, 1355}"; + sepNavVisRange = "{9660, 1512}"; }; }; 6B555DF6100B273500247EA3 /* stb_truetype.h */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {933, 28896}}"; + sepNavIntBoundsRect = "{{0, 0}, {931, 23270}}"; sepNavSelRange = "{27273, 0}"; - sepNavVisRange = "{26646, 1094}"; + sepNavVisRange = "{26315, 1706}"; }; }; 6B624169103434880002E346 /* RecastMeshDetail.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {1219, 16120}}"; - sepNavSelRange = "{12054, 0}"; - sepNavVisRange = "{11824, 373}"; + sepNavIntBoundsRect = "{{0, 0}, {931, 15808}}"; + sepNavSelRange = "{29028, 0}"; + sepNavVisRange = "{28456, 1353}"; sepNavWindowFrame = "{{61, 36}, {1011, 695}}"; }; }; 6B8036AC113BAABE005ED67B /* Sample_Debug.h */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {933, 944}}"; + sepNavIntBoundsRect = "{{0, 0}, {931, 741}}"; sepNavSelRange = "{1048, 0}"; - sepNavVisRange = "{446, 875}"; + sepNavVisRange = "{0, 1703}"; }; }; 6B8036AD113BAABE005ED67B /* Sample_Debug.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {1219, 6320}}"; - sepNavSelRange = "{1554, 0}"; - sepNavVisRange = "{2195, 292}"; + sepNavIntBoundsRect = "{{0, 0}, {931, 4745}}"; + sepNavSelRange = "{3296, 15}"; + sepNavVisRange = "{2962, 716}"; }; }; 6B847774122D220D00ADF63D /* ValueHistory.h */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {933, 816}}"; + sepNavIntBoundsRect = "{{0, 0}, {931, 663}}"; sepNavSelRange = "{587, 0}"; - sepNavVisRange = "{331, 686}"; + sepNavVisRange = "{23, 994}"; }; }; 6B847776122D221C00ADF63D /* ValueHistory.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {933, 1872}}"; + sepNavIntBoundsRect = "{{0, 0}, {957, 1560}}"; sepNavSelRange = "{2028, 0}"; - sepNavVisRange = "{1694, 1019}"; + sepNavVisRange = "{1337, 1555}"; }; }; 6B847779122D223D00ADF63D /* PBXTextBookmark */ = { @@ -783,16 +759,6 @@ vrLen = 143; vrLoc = 0; }; - 6B8477FC122D2E2A00ADF63D /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6B137C6C0F7FCBBB00459200 /* imgui.cpp */; - name = "imgui.cpp: 89"; - rLen = 17; - rLoc = 2774; - rType = 0; - vrLen = 918; - vrLoc = 2075; - }; 6B8477FE122D2E2A00ADF63D /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = 6B847776122D221C00ADF63D /* ValueHistory.cpp */; @@ -864,181 +830,11 @@ fRef = 6BB7FC0A10EBB6AA006DA0A6 /* NavMeshTesterTool.cpp */; name = "NavMeshTesterTool.cpp: 181"; rLen = 0; - rLoc = 4835; + rLoc = 4199; rType = 0; vrLen = 1204; vrLoc = 4449; }; - 6B8D5566127A98FB0077C699 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6BD667D8123D27EC0021A7A4 /* CrowdManager.h */; - name = "CrowdManager.h: 145"; - rLen = 100; - rLoc = 3554; - rType = 0; - vrLen = 1341; - vrLoc = 3019; - }; - 6B8D5567127A98FB0077C699 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6BD667D9123D28100021A7A4 /* CrowdManager.cpp */; - name = "CrowdManager.cpp: 889"; - rLen = 0; - rLoc = 22256; - rType = 0; - vrLen = 919; - vrLoc = 19913; - }; - 6B8D5568127A98FB0077C699 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6BD667D9123D28100021A7A4 /* CrowdManager.cpp */; - name = "CrowdManager.cpp: 1127"; - rLen = 0; - rLoc = 28473; - rType = 0; - vrLen = 1451; - vrLoc = 22449; - }; - 6B8D556C127A99950077C699 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6BD667D9123D28100021A7A4 /* CrowdManager.cpp */; - name = "CrowdManager.cpp: 1113"; - rLen = 0; - rLoc = 28254; - rType = 0; - vrLen = 1285; - vrLoc = 24831; - }; - 6B8D556D127A9DFE0077C699 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6BD667D8123D27EC0021A7A4 /* CrowdManager.h */; - name = "CrowdManager.h: 145"; - rLen = 0; - rLoc = 3578; - rType = 0; - vrLen = 1260; - vrLoc = 2903; - }; - 6B8D556E127A9DFE0077C699 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6BD667D9123D28100021A7A4 /* CrowdManager.cpp */; - name = "CrowdManager.cpp: 1025"; - rLen = 18; - rLoc = 24471; - rType = 0; - vrLen = 1222; - vrLoc = 22454; - }; - 6B8D556F127A9DFE0077C699 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6BD667D9123D28100021A7A4 /* CrowdManager.cpp */; - name = "CrowdManager.cpp: 1036"; - rLen = 0; - rLoc = 25059; - rType = 0; - vrLen = 1285; - vrLoc = 22462; - }; - 6B8D5570127A9E980077C699 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6BD667D9123D28100021A7A4 /* CrowdManager.cpp */; - name = "CrowdManager.cpp: 530"; - rLen = 0; - rLoc = 13396; - rType = 0; - vrLen = 1330; - vrLoc = 11969; - }; - 6B8D5573127AA1640077C699 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6BD667D8123D27EC0021A7A4 /* CrowdManager.h */; - name = "CrowdManager.h: 128"; - rLen = 0; - rLoc = 3018; - rType = 0; - vrLen = 1290; - vrLoc = 2449; - }; - 6B8D5574127AA1640077C699 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6BD667D9123D28100021A7A4 /* CrowdManager.cpp */; - name = "CrowdManager.cpp: 941"; - rLen = 0; - rLoc = 21722; - rType = 0; - vrLen = 890; - vrLoc = 21445; - }; - 6B8D5575127AA1640077C699 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6BD667D9123D28100021A7A4 /* CrowdManager.cpp */; - name = "CrowdManager.cpp: 941"; - rLen = 0; - rLoc = 21722; - rType = 0; - vrLen = 890; - vrLoc = 21445; - }; - 6B8D5580127AA2270077C699 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6BD667D8123D27EC0021A7A4 /* CrowdManager.h */; - name = "CrowdManager.h: 309"; - rLen = 0; - rLoc = 7313; - rType = 0; - vrLen = 1540; - vrLoc = 6316; - }; - 6B8D5581127AA2270077C699 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6BD667D9123D28100021A7A4 /* CrowdManager.cpp */; - name = "CrowdManager.cpp: 949"; - rLen = 0; - rLoc = 21929; - rType = 0; - vrLen = 1024; - vrLoc = 20592; - }; - 6B8D5582127AA2270077C699 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6BAF3C571211663A008CFCDF /* CrowdTool.h */; - name = "CrowdTool.h: 65"; - rLen = 0; - rLoc = 1737; - rType = 0; - vrLen = 819; - vrLoc = 1128; - }; - 6B8D5583127AA2270077C699 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6BAF3C581211663A008CFCDF /* CrowdTool.cpp */; - name = "CrowdTool.cpp: 145"; - rLen = 0; - rLoc = 3702; - rType = 0; - vrLen = 889; - vrLoc = 3056; - }; - 6B8D5584127AA2270077C699 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6BAF3C581211663A008CFCDF /* CrowdTool.cpp */; - name = "CrowdTool.cpp: 269"; - rLen = 0; - rLoc = 7253; - rType = 0; - vrLen = 1289; - vrLoc = 6303; - }; - 6B8D559E127AA3E70077C699 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6BAF3C581211663A008CFCDF /* CrowdTool.cpp */; - name = "CrowdTool.cpp: 269"; - rLen = 0; - rLoc = 7253; - rType = 0; - vrLen = 1289; - vrLoc = 6303; - }; 6B8D559F127AA3E70077C699 /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = 6B137C6C0F7FCBBB00459200 /* imgui.cpp */; @@ -1059,254 +855,17 @@ vrLen = 1355; vrLoc = 9786; }; - 6B8D55A1127AA3E70077C699 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6BD667D9123D28100021A7A4 /* CrowdManager.cpp */; - name = "CrowdManager.cpp: 961"; - rLen = 16; - rLoc = 22144; - rType = 0; - vrLen = 1203; - vrLoc = 23732; - }; - 6B8D55A2127AA3E70077C699 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6BD667D9123D28100021A7A4 /* CrowdManager.cpp */; - name = "CrowdManager.cpp: 1073"; - rLen = 0; - rLoc = 24453; - rType = 0; - vrLen = 1203; - vrLoc = 23732; - }; - 6B8D55A4127AA3F60077C699 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6BD667D9123D28100021A7A4 /* CrowdManager.cpp */; - name = "CrowdManager.cpp: 1073"; - rLen = 0; - rLoc = 24453; - rType = 0; - vrLen = 994; - vrLoc = 18685; - }; - 6B8D55A5127AA3FD0077C699 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6BD667D9123D28100021A7A4 /* CrowdManager.cpp */; - name = "CrowdManager.cpp: 1073"; - rLen = 0; - rLoc = 24453; - rType = 0; - vrLen = 883; - vrLoc = 9763; - }; - 6B8D55A8127AA4250077C699 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6BD667D9123D28100021A7A4 /* CrowdManager.cpp */; - name = "CrowdManager.cpp: 567"; - rLen = 0; - rLoc = 13396; - rType = 0; - vrLen = 1375; - vrLoc = 12695; - }; - 6B8D55AC127AA4AA0077C699 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6BD667D9123D28100021A7A4 /* CrowdManager.cpp */; - name = "CrowdManager.cpp: 591"; - rLen = 0; - rLoc = 13634; - rType = 0; - vrLen = 1279; - vrLoc = 12814; - }; - 6B8D55AE127AA4C00077C699 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6BD667D9123D28100021A7A4 /* CrowdManager.cpp */; - name = "CrowdManager.cpp: 570"; - rLen = 0; - rLoc = 13634; - rType = 0; - vrLen = 1279; - vrLoc = 12814; - }; - 6B8D55AF127AA4DC0077C699 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6BD667D9123D28100021A7A4 /* CrowdManager.cpp */; - name = "CrowdManager.cpp: 570"; - rLen = 0; - rLoc = 13634; - rType = 0; - vrLen = 595; - vrLoc = 13213; - }; - 6B8D55B0127AA4DF0077C699 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6BD667D9123D28100021A7A4 /* CrowdManager.cpp */; - name = "CrowdManager.cpp: 571"; - rLen = 0; - rLoc = 13634; - rType = 0; - vrLen = 1279; - vrLoc = 12814; - }; - 6B8D55B3127AA4EF0077C699 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6BD667D9123D28100021A7A4 /* CrowdManager.cpp */; - name = "CrowdManager.cpp: 574"; - rLen = 0; - rLoc = 13634; - rType = 0; - vrLen = 1279; - vrLoc = 12814; - }; - 6B8D55B4127AA4EF0077C699 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6BD667D9123D28100021A7A4 /* CrowdManager.cpp */; - name = "CrowdManager.cpp: 568"; - rLen = 0; - rLoc = 13412; - rType = 0; - vrLen = 1279; - vrLoc = 12814; - }; 6B8D55B5127AA5E60077C699 /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = 6BAF40DA12196A3D008CFCDF /* DetourNavMeshQuery.cpp */; name = "DetourNavMeshQuery.cpp: 1282"; rLen = 0; - rLoc = 34877; + rLoc = 35371; rType = 0; vrLen = 1444; vrLoc = 34213; }; - 6B8D55B6127AA5E60077C699 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6BD667D9123D28100021A7A4 /* CrowdManager.cpp */; - rLen = 0; - rLoc = 1075; - rType = 1; - }; - 6B8D55B7127AA5E60077C699 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6BD667D9123D28100021A7A4 /* CrowdManager.cpp */; - name = "CrowdManager.cpp: 562"; - rLen = 0; - rLoc = 13259; - rType = 0; - vrLen = 1366; - vrLoc = 12626; - }; - 6B8D55BA127AA6080077C699 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6BD667D9123D28100021A7A4 /* CrowdManager.cpp */; - name = "CrowdManager.cpp: 562"; - rLen = 0; - rLoc = 13259; - rType = 0; - vrLen = 1467; - vrLoc = 12067; - }; - 6B8D55C0127AA6A90077C699 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6BD667D9123D28100021A7A4 /* CrowdManager.cpp */; - name = "CrowdManager.cpp: 563"; - rLen = 0; - rLoc = 13259; - rType = 0; - vrLen = 1433; - vrLoc = 12236; - }; - 6B8D55C4127AA6B70077C699 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6BD667D9123D28100021A7A4 /* CrowdManager.cpp */; - name = "CrowdManager.cpp: 563"; - rLen = 0; - rLoc = 13259; - rType = 0; - vrLen = 1433; - vrLoc = 12236; - }; - 6B8D55C5127AA7060077C699 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6BD667D9123D28100021A7A4 /* CrowdManager.cpp */; - name = "CrowdManager.cpp: 563"; - rLen = 0; - rLoc = 13259; - rType = 0; - vrLen = 1382; - vrLoc = 12236; - }; - 6B8D55C6127AA7D50077C699 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6BD667D9123D28100021A7A4 /* CrowdManager.cpp */; - name = "CrowdManager.cpp: 379"; - rLen = 0; - rLoc = 8791; - rType = 0; - vrLen = 430; - vrLoc = 8490; - }; - 6B8D55C7127AA7D50077C699 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6BD667D9123D28100021A7A4 /* CrowdManager.cpp */; - name = "CrowdManager.cpp: 577"; - rLen = 0; - rLoc = 13634; - rType = 0; - vrLen = 480; - vrLoc = 8574; - }; - 6B8D55C8127AA7D80077C699 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6BD667D9123D28100021A7A4 /* CrowdManager.cpp */; - name = "CrowdManager.cpp: 380"; - rLen = 0; - rLoc = 8825; - rType = 0; - vrLen = 1065; - vrLoc = 8137; - }; - 6B8D55C9127AA85F0077C699 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6BD667D9123D28100021A7A4 /* CrowdManager.cpp */; - name = "CrowdManager.cpp: 573"; - rLen = 0; - rLoc = 13632; - rType = 0; - vrLen = 1261; - vrLoc = 12964; - }; - 6B8D55CA127AA9BD0077C699 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6BD667D8123D27EC0021A7A4 /* CrowdManager.h */; - name = "CrowdManager.h: 287"; - rLen = 0; - rLoc = 6539; - rType = 0; - vrLen = 1556; - vrLoc = 6271; - }; - 6B8D55CB127AA9BD0077C699 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6BD667D9123D28100021A7A4 /* CrowdManager.cpp */; - name = "CrowdManager.cpp: 1087"; - rLen = 13; - rLoc = 24909; - rType = 0; - vrLen = 1490; - vrLoc = 24173; - }; - 6B8D55CC127AA9BD0077C699 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6BD667D9123D28100021A7A4 /* CrowdManager.cpp */; - name = "CrowdManager.cpp: 1087"; - rLen = 0; - rLoc = 24852; - rType = 0; - vrLen = 1433; - vrLoc = 24173; - }; - 6B8D55CD127AAA360077C699 /* CrowdManager.cpp:1161 */ = { + 6B8D55CD127AAA360077C699 /* CrowdManager.cpp:1169 */ = { isa = PBXFileBreakpoint; actions = ( ); @@ -1318,138 +877,18 @@ functionName = "CrowdManager::updateMoveRequest(const float dt, dtNavMeshQuery* navquery, const dtQueryFilter* filter)"; hitCount = 1; ignoreCount = 0; - lineNumber = 1161; + lineNumber = 1169; location = Recast; modificationTime = 310029010.458691; originalNumberOfMultipleMatches = 1; state = 1; }; - 6B8D55D1127AAA680077C699 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6BD667D9123D28100021A7A4 /* CrowdManager.cpp */; - name = "CrowdManager.cpp: 1162"; - rLen = 0; - rLoc = 26998; - rType = 0; - vrLen = 1465; - vrLoc = 24256; - }; - 6B8D55D2127AAA680077C699 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6BD667D9123D28100021A7A4 /* CrowdManager.cpp */; - name = "CrowdManager.cpp: 215"; - rLen = 0; - rLoc = 5258; - rType = 0; - vrLen = 894; - vrLoc = 4777; - }; - 6B8D55D5127AAA6C0077C699 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6BD667D9123D28100021A7A4 /* CrowdManager.cpp */; - name = "CrowdManager.cpp: 215"; - rLen = 0; - rLoc = 5258; - rType = 0; - vrLen = 886; - vrLoc = 4785; - }; - 6B8D55D7127AAAB70077C699 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6BD667D9123D28100021A7A4 /* CrowdManager.cpp */; - name = "CrowdManager.cpp: 1082"; - rLen = 0; - rLoc = 24638; - rType = 0; - vrLen = 1252; - vrLoc = 23946; - }; - 6B8D55D8127AAB1F0077C699 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6BD667D9123D28100021A7A4 /* CrowdManager.cpp */; - name = "CrowdManager.cpp: 1205"; - rLen = 0; - rLoc = 28373; - rType = 0; - vrLen = 1380; - vrLoc = 24133; - }; - 6B8D55D9127AABD80077C699 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6BD667D8123D27EC0021A7A4 /* CrowdManager.h */; - name = "CrowdManager.h: 278"; - rLen = 0; - rLoc = 6314; - rType = 0; - vrLen = 1472; - vrLoc = 6095; - }; - 6B8D55DA127AABD80077C699 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6BD667D9123D28100021A7A4 /* CrowdManager.cpp */; - name = "CrowdManager.cpp: 1085"; - rLen = 0; - rLoc = 24805; - rType = 0; - vrLen = 1558; - vrLoc = 24133; - }; - 6B8D55DB127AABD80077C699 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6BD667D9123D28100021A7A4 /* CrowdManager.cpp */; - name = "CrowdManager.cpp: 1078"; - rLen = 0; - rLoc = 24566; - rType = 0; - vrLen = 1558; - vrLoc = 24133; - }; - 6B8D55DC127AABEF0077C699 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6BD667D9123D28100021A7A4 /* CrowdManager.cpp */; - name = "CrowdManager.cpp: 1088"; - rLen = 0; - rLoc = 24975; - rType = 0; - vrLen = 1558; - vrLoc = 24133; - }; - 6B8D55E1127AAD060077C699 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6BD667D9123D28100021A7A4 /* CrowdManager.cpp */; - name = "CrowdManager.cpp: 212"; - rLen = 0; - rLoc = 5176; - rType = 0; - vrLen = 865; - vrLoc = 4733; - }; - 6B8D55E3127AAE590077C699 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6BD667D9123D28100021A7A4 /* CrowdManager.cpp */; - name = "CrowdManager.cpp: 528"; - rLen = 0; - rLoc = 12165; - rType = 0; - vrLen = 1114; - vrLoc = 11501; - }; - 6B8D55EA127AAE680077C699 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6BD667D9123D28100021A7A4 /* CrowdManager.cpp */; - name = "CrowdManager.cpp: 516"; - rLen = 0; - rLoc = 11810; - rType = 0; - vrLen = 1151; - vrLoc = 11524; - }; 6B8D55F2127ABAD40077C699 /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = 6BD667D9123D28100021A7A4 /* CrowdManager.cpp */; name = "CrowdManager.cpp: 521"; rLen = 0; - rLoc = 11932; + rLoc = 11943; rType = 0; vrLen = 1220; vrLoc = 11524; @@ -1464,66 +903,6 @@ vrLen = 1731; vrLoc = 6316; }; - 6B8D55F4127ABAD40077C699 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6BAF3C571211663A008CFCDF /* CrowdTool.h */; - name = "CrowdTool.h: 64"; - rLen = 20; - rLoc = 1715; - rType = 0; - vrLen = 968; - vrLoc = 1262; - }; - 6B8D55F5127ABAD40077C699 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6BAF3C581211663A008CFCDF /* CrowdTool.cpp */; - name = "CrowdTool.cpp: 265"; - rLen = 0; - rLoc = 7253; - rType = 0; - vrLen = 1392; - vrLoc = 6205; - }; - 6B8D55F6127ABAD40077C699 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6BAF3C581211663A008CFCDF /* CrowdTool.cpp */; - name = "CrowdTool.cpp: 163"; - rLen = 0; - rLoc = 4127; - rType = 0; - vrLen = 1133; - vrLoc = 3309; - }; - 6B8D55F9127ABB6B0077C699 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6BAF3C581211663A008CFCDF /* CrowdTool.cpp */; - name = "CrowdTool.cpp: 160"; - rLen = 0; - rLoc = 4071; - rType = 0; - vrLen = 1174; - vrLoc = 3436; - }; - 6B8D55FD127ABBCB0077C699 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6BAF3C581211663A008CFCDF /* CrowdTool.cpp */; - name = "CrowdTool.cpp: 262"; - rLen = 0; - rLoc = 6757; - rType = 0; - vrLen = 1078; - vrLoc = 6483; - }; - 6B8D55FE127ABBCB0077C699 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6BAF3C571211663A008CFCDF /* CrowdTool.h */; - name = "CrowdTool.h: 1"; - rLen = 0; - rLoc = 0; - rType = 0; - vrLen = 1476; - vrLoc = 0; - }; 6B8D5603127ABBD80077C699 /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = 6BAF3C571211663A008CFCDF /* CrowdTool.h */; @@ -1534,24 +913,596 @@ vrLen = 1186; vrLoc = 0; }; - 6B8D5604127ABBD80077C699 /* XCBuildMessageTextBookmark */ = { + 6B8D5609127ACF8D0077C699 /* PBXTextBookmark */ = { isa = PBXTextBookmark; - comments = "'TOOLMODE_ADJUST_TARGET' was not declared in this scope"; fRef = 6BAF3C581211663A008CFCDF /* CrowdTool.cpp */; - fallbackIsa = XCBuildMessageTextBookmark; + name = "CrowdTool.cpp: 183"; + rLen = 0; + rLoc = 4685; + rType = 0; + vrLen = 955; + vrLoc = 4538; + }; + 6B8D560A127ACF8D0077C699 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88B10B69E4C00DF20FB /* DetourNavMesh.h */; + name = "DetourNavMesh.h: 308"; + rLen = 0; + rLoc = 12505; + rType = 0; + vrLen = 1670; + vrLoc = 11452; + }; + 6B8D560B127ACF8D0077C699 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF40D912196A25008CFCDF /* DetourNavMeshQuery.h */; + name = "DetourNavMeshQuery.h: 112"; + rLen = 12139; + rLoc = 4625; + rType = 0; + vrLen = 2295; + vrLoc = 15188; + }; + 6B8D560C127ACF8D0077C699 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8D560D127ACF8D0077C699 /* DetourNavMesh.h */; + name = "DetourNavMesh.h: 171"; + rLen = 0; + rLoc = 6839; + rType = 0; + vrLen = 1854; + vrLoc = 5556; + }; + 6B8D560D127ACF8D0077C699 /* DetourNavMesh.h */ = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = DetourNavMesh.h; + path = /Users/memon/Code/tmp/DetourNavMesh.h; + sourceTree = ""; + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {931, 5252}}"; + sepNavSelRange = "{2478, 0}"; + sepNavVisRange = "{1977, 1252}"; + }; + }; + 6B8D560E127ACF8D0077C699 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8D560F127ACF8D0077C699 /* DetourNavMeshQuery.h */; + rLen = 0; + rLoc = 18985; + rType = 0; + }; + 6B8D560F127ACF8D0077C699 /* DetourNavMeshQuery.h */ = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = DetourNavMeshQuery.h; + path = /Users/memon/Code/tmp/DetourNavMeshQuery.h; + sourceTree = ""; + }; + 6B8D5610127ACF8D0077C699 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8D5611127ACF8D0077C699 /* DetourNavMeshQuery.h */; + name = "DetourNavMeshQuery.h: 93"; + rLen = 0; + rLoc = 4349; + rType = 0; + vrLen = 2034; + vrLoc = 3914; + }; + 6B8D5611127ACF8D0077C699 /* DetourNavMeshQuery.h */ = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = DetourNavMeshQuery.h; + path = /Users/memon/Code/tmp/DetourNavMeshQuery.h; + sourceTree = ""; + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {931, 5252}}"; + sepNavSelRange = "{4349, 0}"; + sepNavVisRange = "{3751, 2237}"; + }; + }; + 6B8D5621127AD44A0077C699 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8D5611127ACF8D0077C699 /* DetourNavMeshQuery.h */; + name = "DetourNavMeshQuery.h: 93"; + rLen = 0; + rLoc = 4349; + rType = 0; + vrLen = 2287; + vrLoc = 3751; + }; + 6B8D5622127AD44A0077C699 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF40D912196A25008CFCDF /* DetourNavMeshQuery.h */; + name = "DetourNavMeshQuery.h: 99"; + rLen = 0; + rLoc = 4553; + rType = 0; + vrLen = 2143; + vrLoc = 3380; + }; + 6B8D5623127AD44A0077C699 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88B10B69E4C00DF20FB /* DetourNavMesh.h */; + name = "DetourNavMesh.h: 308"; + rLen = 0; + rLoc = 12505; + rType = 0; + vrLen = 1671; + vrLoc = 11451; + }; + 6B8D5624127AD44A0077C699 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88B10B69E4C00DF20FB /* DetourNavMesh.h */; + name = "DetourNavMesh.h: 73"; + rLen = 0; + rLoc = 2697; + rType = 0; + vrLen = 1769; + vrLoc = 1761; + }; + 6B8D5636127AD6CA0077C699 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8D560D127ACF8D0077C699 /* DetourNavMesh.h */; + name = "DetourNavMesh.h: 71"; + rLen = 0; + rLoc = 2478; + rType = 0; + vrLen = 1252; + vrLoc = 1977; + }; + 6B8D5637127AD6CA0077C699 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88710B69E3E00DF20FB /* DetourNavMesh.cpp */; + name = "DetourNavMesh.cpp: 177"; + rLen = 8; + rLoc = 4287; + rType = 0; + vrLen = 934; + vrLoc = 4242; + }; + 6B8D5638127AD6CA0077C699 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88B10B69E4C00DF20FB /* DetourNavMesh.h */; rLen = 1; - rLoc = 144; + rLoc = 68; rType = 1; }; - 6B8D5605127ABBD80077C699 /* PBXTextBookmark */ = { + 6B8D5639127AD6CA0077C699 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88B10B69E4C00DF20FB /* DetourNavMesh.h */; + name = "DetourNavMesh.h: 71"; + rLen = 0; + rLoc = 2489; + rType = 0; + vrLen = 1164; + vrLoc = 1977; + }; + 6B8D5640127AD6EC0077C699 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88B10B69E4C00DF20FB /* DetourNavMesh.h */; + name = "DetourNavMesh.h: 285"; + rLen = 0; + rLoc = 11541; + rType = 0; + vrLen = 1460; + vrLoc = 9639; + }; + 6B8D5641127AD6EC0077C699 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88B10B69E4C00DF20FB /* DetourNavMesh.h */; + name = "DetourNavMesh.h: 285"; + rLen = 0; + rLoc = 11541; + rType = 0; + vrLen = 1460; + vrLoc = 9639; + }; + 6B8D5649127AD7800077C699 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88B10B69E4C00DF20FB /* DetourNavMesh.h */; + name = "DetourNavMesh.h: 71"; + rLen = 0; + rLoc = 2489; + rType = 0; + vrLen = 1185; + vrLoc = 1850; + }; + 6B8D564A127AD7800077C699 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88710B69E3E00DF20FB /* DetourNavMesh.cpp */; + name = "DetourNavMesh.cpp: 917"; + rLen = 0; + rLoc = 24845; + rType = 0; + vrLen = 1078; + vrLoc = 24130; + }; + 6B8D564B127AD7800077C699 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88710B69E3E00DF20FB /* DetourNavMesh.cpp */; + name = "DetourNavMesh.cpp: 718"; + rLen = 0; + rLoc = 19586; + rType = 0; + vrLen = 744; + vrLoc = 18987; + }; + 6B8D5654127AD9590077C699 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88B10B69E4C00DF20FB /* DetourNavMesh.h */; + name = "DetourNavMesh.h: 72"; + rLen = 0; + rLoc = 2545; + rType = 0; + vrLen = 993; + vrLoc = 1850; + }; + 6B8D5655127AD9590077C699 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88710B69E3E00DF20FB /* DetourNavMesh.cpp */; + name = "DetourNavMesh.cpp: 1094"; + rLen = 0; + rLoc = 29662; + rType = 0; + vrLen = 1152; + vrLoc = 28844; + }; + 6B8D5656127AD9590077C699 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88710B69E3E00DF20FB /* DetourNavMesh.cpp */; + name = "DetourNavMesh.cpp: 1214"; + rLen = 0; + rLoc = 33113; + rType = 0; + vrLen = 990; + vrLoc = 32105; + }; + 6B8D565F127ADB0D0077C699 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BA1E88E10C7BFD3008007F6 /* Sample_SoloMeshSimple.h */; + name = "Sample_SoloMeshSimple.h: 34"; + rLen = 20; + rLoc = 1232; + rType = 0; + vrLen = 715; + vrLoc = 923; + }; + 6B8D5660127ADB0D0077C699 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B98463211E6144400FA177B /* Sample_SoloMeshTiled.cpp */; + name = "Sample_SoloMeshTiled.cpp: 1104"; + rLen = 6; + rLoc = 33468; + rType = 0; + vrLen = 740; + vrLoc = 33053; + }; + 6B8D5661127ADB0D0077C699 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BA1E88810C7BFC9008007F6 /* Sample_SoloMeshSimple.cpp */; + name = "Sample_SoloMeshSimple.cpp: 642"; + rLen = 6; + rLoc = 19996; + rType = 0; + vrLen = 728; + vrLoc = 19576; + }; + 6B8D5662127ADB0D0077C699 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B2AEC520FFB8958005BE9CC /* Sample_TileMesh.cpp */; + name = "Sample_TileMesh.cpp: 710"; + rLen = 0; + rLoc = 19209; + rType = 0; + vrLen = 764; + vrLoc = 18866; + }; + 6B8D5663127ADB0D0077C699 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB7FC0A10EBB6AA006DA0A6 /* NavMeshTesterTool.cpp */; + name = "NavMeshTesterTool.cpp: 852"; + rLen = 0; + rLoc = 23968; + rType = 0; + vrLen = 817; + vrLoc = 23408; + }; + 6B8D5664127ADB0D0077C699 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF40DA12196A3D008CFCDF /* DetourNavMeshQuery.cpp */; + name = "DetourNavMeshQuery.cpp: 2157"; + rLen = 0; + rLoc = 59708; + rType = 0; + vrLen = 779; + vrLoc = 58115; + }; + 6B8D5665127ADB0D0077C699 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88B10B69E4C00DF20FB /* DetourNavMesh.h */; + name = "DetourNavMesh.h: 262"; + rLen = 19; + rLoc = 10243; + rType = 0; + vrLen = 1454; + vrLoc = 9785; + }; + 6B8D5666127ADB0D0077C699 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88710B69E3E00DF20FB /* DetourNavMesh.cpp */; + name = "DetourNavMesh.cpp: 911"; + rLen = 19; + rLoc = 24568; + rType = 0; + vrLen = 827; + vrLoc = 24082; + }; + 6B8D5667127ADB0D0077C699 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB93C7B10CFE1D500F74F2B /* DetourDebugDraw.cpp */; + rLen = 19; + rLoc = 11849; + rType = 0; + }; + 6B8D5668127ADB0D0077C699 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB93C7B10CFE1D500F74F2B /* DetourDebugDraw.cpp */; + name = "DetourDebugDraw.cpp: 424"; + rLen = 0; + rLoc = 11844; + rType = 0; + vrLen = 814; + vrLoc = 11386; + }; + 6B8D566D127ADB7D0077C699 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB93C7B10CFE1D500F74F2B /* DetourDebugDraw.cpp */; + name = "DetourDebugDraw.cpp: 411"; + rLen = 0; + rLoc = 11542; + rType = 0; + vrLen = 814; + vrLoc = 11386; + }; + 6B8D566E127ADB7D0077C699 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB7FC0A10EBB6AA006DA0A6 /* NavMeshTesterTool.cpp */; + name = "NavMeshTesterTool.cpp: 636"; + rLen = 0; + rLoc = 4199; + rType = 0; + vrLen = 895; + vrLoc = 17266; + }; + 6B8D566F127ADB7D0077C699 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B9846EE11E718F800FA177B /* DetourAlloc.cpp */; + name = "DetourAlloc.cpp: 49"; + rLen = 0; + rLoc = 1491; + rType = 0; + vrLen = 488; + vrLoc = 1021; + }; + 6B8D5670127ADB7D0077C699 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88B10B69E4C00DF20FB /* DetourNavMesh.h */; + name = "DetourNavMesh.h: 285"; + rLen = 33; + rLoc = 11379; + rType = 0; + vrLen = 1083; + vrLoc = 11026; + }; + 6B8D5671127ADB7D0077C699 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88B10B69E4C00DF20FB /* DetourNavMesh.h */; + name = "DetourNavMesh.h: 246"; + rLen = 0; + rLoc = 9713; + rType = 0; + vrLen = 1112; + vrLoc = 8614; + }; + 6B8D5672127ADBB00077C699 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88B10B69E4C00DF20FB /* DetourNavMesh.h */; + name = "DetourNavMesh.h: 203"; + rLen = 0; + rLoc = 7852; + rType = 0; + vrLen = 1222; + vrLoc = 7198; + }; + 6B8D5673127ADBB00077C699 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF40D912196A25008CFCDF /* DetourNavMeshQuery.h */; + name = "DetourNavMeshQuery.h: 99"; + rLen = 0; + rLoc = 4553; + rType = 0; + vrLen = 933; + vrLoc = 4074; + }; + 6B8D5674127ADBB00077C699 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF40D912196A25008CFCDF /* DetourNavMeshQuery.h */; + name = "DetourNavMeshQuery.h: 110"; + rLen = 0; + rLoc = 4845; + rType = 0; + vrLen = 2129; + vrLoc = 4074; + }; + 6B8D56C7127AEC100077C699 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BA1E88810C7BFC9008007F6 /* Sample_SoloMeshSimple.cpp */; + name = "Sample_SoloMeshSimple.cpp: 649"; + rLen = 0; + rLoc = 20222; + rType = 0; + vrLen = 737; + vrLoc = 19576; + }; + 6B8D56C8127AEC100077C699 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B98463211E6144400FA177B /* Sample_SoloMeshTiled.cpp */; + name = "Sample_SoloMeshTiled.cpp: 1089"; + rLen = 0; + rLoc = 33013; + rType = 0; + vrLen = 769; + vrLoc = 32691; + }; + 6B8D56C9127AEC100077C699 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B2AEC520FFB8958005BE9CC /* Sample_TileMesh.cpp */; + name = "Sample_TileMesh.cpp: 719"; + rLen = 0; + rLoc = 19430; + rType = 0; + vrLen = 640; + vrLoc = 19043; + }; + 6B8D56CA127AEC100077C699 /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = 6BAF3C581211663A008CFCDF /* CrowdTool.cpp */; - name = "CrowdTool.cpp: 145"; + name = "CrowdTool.cpp: 257"; rLen = 0; - rLoc = 3702; + rLoc = 6739; rType = 0; - vrLen = 721; - vrLoc = 3306; + vrLen = 868; + vrLoc = 6285; + }; + 6B8D56CB127AEC100077C699 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8036AD113BAABE005ED67B /* Sample_Debug.cpp */; + name = "Sample_Debug.cpp: 130"; + rLen = 15; + rLoc = 3296; + rType = 0; + vrLen = 716; + vrLoc = 2962; + }; + 6B8D56CC127AEC100077C699 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88B10B69E4C00DF20FB /* DetourNavMesh.h */; + name = "DetourNavMesh.h: 384"; + rLen = 0; + rLoc = 15099; + rType = 0; + vrLen = 1370; + vrLoc = 14287; + }; + 6B8D56CD127AEC100077C699 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88710B69E3E00DF20FB /* DetourNavMesh.cpp */; + name = "DetourNavMesh.cpp: 587"; + rLen = 0; + rLoc = 15922; + rType = 0; + vrLen = 783; + vrLoc = 15121; + }; + 6B8D56CE127AEC100077C699 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF40DA12196A3D008CFCDF /* DetourNavMeshQuery.cpp */; + name = "DetourNavMeshQuery.cpp: 1084"; + rLen = 18; + rLoc = 29185; + rType = 0; + vrLen = 736; + vrLoc = 28778; + }; + 6B8D56CF127AEC100077C699 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF40D912196A25008CFCDF /* DetourNavMeshQuery.h */; + name = "DetourNavMeshQuery.h: 337"; + rLen = 0; + rLoc = 16550; + rType = 0; + vrLen = 1215; + vrLoc = 15770; + }; + 6B8D56D0127AEC100077C699 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB7FC0910EBB6AA006DA0A6 /* NavMeshTesterTool.h */; + name = "NavMeshTesterTool.h: 35"; + rLen = 0; + rLoc = 1207; + rType = 0; + vrLen = 539; + vrLoc = 980; + }; + 6B8D56D1127AEC100077C699 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB7FC0A10EBB6AA006DA0A6 /* NavMeshTesterTool.cpp */; + name = "NavMeshTesterTool.cpp: 749"; + rLen = 0; + rLoc = 20634; + rType = 0; + vrLen = 892; + vrLoc = 20067; + }; + 6B8D56D2127AEC100077C699 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BF7C13F1111953A002B3F46 /* TestCase.cpp */; + name = "TestCase.cpp: 206"; + rLen = 0; + rLoc = 4694; + rType = 0; + vrLen = 905; + vrLoc = 4411; + }; + 6B8D56D3127AEC100077C699 /* XCBuildMessageTextBookmark */ = { + isa = PBXTextBookmark; + comments = "No matching function for call to 'dtNavMeshQuery::raycast(unsigned int&, float [3], float [3], const dtQueryFilter*&, float&, float [3], dtPolyRef [32], int*, const int&)'"; + fRef = 6BD667D9123D28100021A7A4 /* CrowdManager.cpp */; + fallbackIsa = XCBuildMessageTextBookmark; + rLen = 1; + rLoc = 534; + rType = 1; + }; + 6B8D56D4127AEC100077C699 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BD667D9123D28100021A7A4 /* CrowdManager.cpp */; + name = "CrowdManager.cpp: 529"; + rLen = 0; + rLoc = 12192; + rType = 0; + vrLen = 710; + vrLoc = 12070; + }; + 6B8D56D8127AEC580077C699 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BD667D9123D28100021A7A4 /* CrowdManager.cpp */; + name = "CrowdManager.cpp: 529"; + rLen = 0; + rLoc = 12192; + rType = 0; + vrLen = 710; + vrLoc = 12070; + }; + 6B8D56D9127AEC580077C699 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB7FC0A10EBB6AA006DA0A6 /* NavMeshTesterTool.cpp */; + name = "NavMeshTesterTool.cpp: 749"; + rLen = 0; + rLoc = 20634; + rType = 0; + vrLen = 709; + vrLoc = 20250; + }; + 6B8D56DA127AEC580077C699 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB7FC0A10EBB6AA006DA0A6 /* NavMeshTesterTool.cpp */; + name = "NavMeshTesterTool.cpp: 238"; + rLen = 0; + rLoc = 6218; + rType = 0; + vrLen = 609; + vrLoc = 5741; }; 6B8DE6F010A88F0500DF20FB /* PBXBookmarkGroup */ = { isa = PBXBookmarkGroup; @@ -1562,31 +1513,31 @@ }; 6B8DE88710B69E3E00DF20FB /* DetourNavMesh.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {931, 15743}}"; - sepNavSelRange = "{18415, 0}"; - sepNavVisRange = "{17469, 1034}"; + sepNavIntBoundsRect = "{{0, 0}, {931, 15925}}"; + sepNavSelRange = "{15922, 0}"; + sepNavVisRange = "{15121, 783}"; sepNavWindowFrame = "{{15, 51}, {1214, 722}}"; }; }; 6B8DE88810B69E3E00DF20FB /* DetourNavMeshBuilder.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {933, 9191}}"; + sepNavIntBoundsRect = "{{0, 0}, {931, 9217}}"; sepNavSelRange = "{20163, 0}"; - sepNavVisRange = "{19724, 645}"; + sepNavVisRange = "{19284, 1209}"; }; }; 6B8DE88B10B69E4C00DF20FB /* DetourNavMesh.h */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {931, 5278}}"; - sepNavSelRange = "{14566, 0}"; - sepNavVisRange = "{13725, 2039}"; + sepNavIntBoundsRect = "{{0, 0}, {931, 5369}}"; + sepNavSelRange = "{15099, 0}"; + sepNavVisRange = "{14287, 1370}"; }; }; 6B8DE88C10B69E4C00DF20FB /* DetourNavMeshBuilder.h */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {933, 1001}}"; + sepNavIntBoundsRect = "{{0, 0}, {931, 1001}}"; sepNavSelRange = "{1676, 12}"; - sepNavVisRange = "{1321, 2392}"; + sepNavVisRange = "{1148, 2565}"; }; }; 6B8DE89210B6A4B900DF20FB /* PBXTextBookmark */ = { @@ -1594,7 +1545,7 @@ fRef = 6B8DE88B10B69E4C00DF20FB /* DetourNavMesh.h */; name = detail; rLen = 0; - rLoc = 13120; + rLoc = 13381; rType = 0; vrLen = 1182; vrLoc = 9676; @@ -1666,38 +1617,38 @@ }; 6B98463111E6144400FA177B /* Sample_SoloMeshTiled.h */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {933, 1586}}"; + sepNavIntBoundsRect = "{{0, 0}, {931, 1664}}"; sepNavSelRange = "{2060, 25}"; - sepNavVisRange = "{1753, 663}"; + sepNavVisRange = "{1459, 1116}"; }; }; 6B98463211E6144400FA177B /* Sample_SoloMeshTiled.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {992, 14391}}"; - sepNavSelRange = "{23991, 959}"; - sepNavVisRange = "{24082, 1174}"; + sepNavIntBoundsRect = "{{0, 0}, {931, 14729}}"; + sepNavSelRange = "{33013, 0}"; + sepNavVisRange = "{32691, 769}"; sepNavWindowFrame = "{{38, 30}, {1214, 722}}"; }; }; 6B9846ED11E718F800FA177B /* DetourAlloc.h */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {933, 481}}"; + sepNavIntBoundsRect = "{{0, 0}, {931, 641}}"; sepNavSelRange = "{1286, 0}"; sepNavVisRange = "{0, 1361}"; }; }; 6B9846EE11E718F800FA177B /* DetourAlloc.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {826, 816}}"; + sepNavIntBoundsRect = "{{0, 0}, {931, 663}}"; sepNavSelRange = "{1491, 0}"; - sepNavVisRange = "{970, 539}"; + sepNavVisRange = "{1021, 488}"; }; }; 6B98470511E733B600FA177B /* RecastAlloc.h */ = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {931, 910}}"; sepNavSelRange = "{1797, 71}"; - sepNavVisRange = "{969, 1378}"; + sepNavVisRange = "{968, 1379}"; }; }; 6B98473011E737D800FA177B /* PBXTextBookmark */ = { @@ -1712,37 +1663,37 @@ }; 6B9847B711E7519A00FA177B /* RecastAlloc.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {933, 1088}}"; + sepNavIntBoundsRect = "{{0, 0}, {931, 884}}"; sepNavSelRange = "{1524, 0}"; - sepNavVisRange = "{1107, 746}"; + sepNavVisRange = "{920, 948}"; }; }; 6B9EFF02122819E200535FF1 /* DetourObstacleAvoidance.h */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {931, 1846}}"; + sepNavIntBoundsRect = "{{0, 0}, {931, 1872}}"; sepNavSelRange = "{3711, 22}"; - sepNavVisRange = "{3162, 1535}"; + sepNavVisRange = "{2866, 1894}"; }; }; 6B9EFF0812281C3E00535FF1 /* DetourObstacleAvoidance.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {931, 6968}}"; + sepNavIntBoundsRect = "{{0, 0}, {931, 6695}}"; sepNavSelRange = "{11554, 0}"; - sepNavVisRange = "{10959, 1291}"; + sepNavVisRange = "{10955, 1306}"; }; }; 6BA1E88810C7BFC9008007F6 /* Sample_SoloMeshSimple.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {931, 8684}}"; - sepNavSelRange = "{11552, 0}"; - sepNavVisRange = "{10928, 1315}"; + sepNavIntBoundsRect = "{{0, 0}, {931, 8723}}"; + sepNavSelRange = "{20222, 0}"; + sepNavVisRange = "{19576, 737}"; }; }; 6BA1E88E10C7BFD3008007F6 /* Sample_SoloMeshSimple.h */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {933, 1296}}"; + sepNavIntBoundsRect = "{{0, 0}, {931, 1053}}"; sepNavSelRange = "{1232, 20}"; - sepNavVisRange = "{1111, 694}"; + sepNavVisRange = "{923, 715}"; }; }; 6BA6876E1222F02E00730711 /* PBXTextBookmark */ = { @@ -1761,6 +1712,11 @@ name = entries; path = /Users/memon/Code/recastnavigation/Recast/Include/.svn/entries; sourceTree = ""; + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {931, 1612}}"; + sepNavSelRange = "{432, 32}"; + sepNavVisRange = "{270, 238}"; + }; }; 6BA687881222F4DB00730711 /* PBXTextBookmark */ = { isa = PBXTextBookmark; @@ -1826,6 +1782,11 @@ name = ProximityGrid.h; path = /Users/memon/Oldies/Code/AutoNavGen/Backup_09_03_06/ProximityGrid.h; sourceTree = ""; + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {931, 1547}}"; + sepNavSelRange = "{3027, 0}"; + sepNavVisRange = "{2097, 1216}"; + }; }; 6BA8CECD1255C1A400272A3B /* PBXTextBookmark */ = { isa = PBXTextBookmark; @@ -1843,6 +1804,11 @@ name = ProximityGrid.cpp; path = /Users/memon/Oldies/Code/AutoNavGen/Backup_09_03_06/ProximityGrid.cpp; sourceTree = ""; + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {931, 1898}}"; + sepNavSelRange = "{1101, 92}"; + sepNavVisRange = "{0, 1415}"; + }; }; 6BA8CEEF1255C4B700272A3B /* PBXTextBookmark */ = { isa = PBXTextBookmark; @@ -1904,16 +1870,6 @@ vrLen = 855; vrLoc = 1456; }; - 6BA8CFA81255DC6500272A3B /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6BAF3C571211663A008CFCDF /* CrowdTool.h */; - name = "CrowdTool.h: 36"; - rLen = 11; - rLoc = 1249; - rType = 0; - vrLen = 630; - vrLoc = 920; - }; 6BA8CFBE1255DE0500272A3B /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = 6BB93C7B10CFE1D500F74F2B /* DetourDebugDraw.cpp */; @@ -1926,38 +1882,38 @@ }; 6BAF3C571211663A008CFCDF /* CrowdTool.h */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {931, 1014}}"; + sepNavIntBoundsRect = "{{0, 0}, {931, 1053}}"; sepNavSelRange = "{1011, 0}"; - sepNavVisRange = "{0, 1186}"; + sepNavVisRange = "{0, 1516}"; }; }; 6BAF3C581211663A008CFCDF /* CrowdTool.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {931, 8567}}"; - sepNavSelRange = "{3702, 0}"; - sepNavVisRange = "{3306, 721}"; + sepNavIntBoundsRect = "{{0, 0}, {931, 8346}}"; + sepNavSelRange = "{6739, 0}"; + sepNavVisRange = "{6285, 868}"; sepNavWindowFrame = "{{15, 51}, {1214, 722}}"; }; }; 6BAF40D912196A25008CFCDF /* DetourNavMeshQuery.h */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {931, 5083}}"; - sepNavSelRange = "{14684, 0}"; - sepNavVisRange = "{13703, 2034}"; + sepNavIntBoundsRect = "{{0, 0}, {931, 5200}}"; + sepNavSelRange = "{16550, 0}"; + sepNavVisRange = "{15770, 1215}"; }; }; 6BAF40DA12196A3D008CFCDF /* DetourNavMeshQuery.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {931, 31681}}"; - sepNavSelRange = "{34877, 0}"; - sepNavVisRange = "{34213, 1444}"; + sepNavIntBoundsRect = "{{0, 0}, {931, 32500}}"; + sepNavSelRange = "{29185, 18}"; + sepNavVisRange = "{28778, 736}"; }; }; 6BAF427A121ADCC2008CFCDF /* DetourAssert.h */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {933, 544}}"; + sepNavIntBoundsRect = "{{0, 0}, {931, 641}}"; sepNavSelRange = "{1209, 56}"; - sepNavVisRange = "{0, 1351}"; + sepNavVisRange = "{0, 1368}"; }; }; 6BAF4321121AF998008CFCDF /* PBXTextBookmark */ = { @@ -1965,7 +1921,7 @@ fRef = 6BB7FC0910EBB6AA006DA0A6 /* NavMeshTesterTool.h */; name = "NavMeshTesterTool.h: 35"; rLen = 0; - rLoc = 1220; + rLoc = 1216; rType = 0; vrLen = 445; vrLoc = 980; @@ -1984,14 +1940,14 @@ uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {931, 1196}}"; sepNavSelRange = "{2197, 11}"; - sepNavVisRange = "{1702, 1224}"; + sepNavVisRange = "{1496, 1431}"; }; }; 6BAF4441121C3D26008CFCDF /* SampleInterfaces.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {1219, 3068}}"; - sepNavSelRange = "{1206, 0}"; - sepNavVisRange = "{900, 388}"; + sepNavIntBoundsRect = "{{0, 0}, {931, 2977}}"; + sepNavSelRange = "{1116, 0}"; + sepNavVisRange = "{637, 1139}"; }; }; 6BAF4525121D1723008CFCDF /* PBXTextBookmark */ = { @@ -2006,7 +1962,7 @@ }; 6BAF4561121D173A008CFCDF /* RecastAssert.h */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {933, 563}}"; + sepNavIntBoundsRect = "{{0, 0}, {931, 641}}"; sepNavSelRange = "{1133, 149}"; sepNavVisRange = "{0, 1368}"; }; @@ -2027,6 +1983,11 @@ name = mach_time.h; path = /Developer/SDKs/MacOSX10.5.sdk/usr/include/mach/mach_time.h; sourceTree = ""; + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {931, 741}}"; + sepNavSelRange = "{1648, 0}"; + sepNavVisRange = "{270, 1592}"; + }; }; 6BB2EDF91261C75400E350F8 /* PBXTextBookmark */ = { isa = PBXTextBookmark; @@ -2044,6 +2005,11 @@ name = math.h; path = /Developer/SDKs/MacOSX10.5.sdk/usr/include/architecture/i386/math.h; sourceTree = ""; + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {964, 7943}}"; + sepNavSelRange = "{21537, 0}"; + sepNavVisRange = "{20535, 1881}"; + }; }; 6BB2EE241261C92300E350F8 /* PBXTextBookmark */ = { isa = PBXTextBookmark; @@ -2075,16 +2041,6 @@ vrLen = 700; vrLoc = 5327; }; - 6BB2EE351261CEB800E350F8 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6B555DB0100B212E00247EA3 /* imguiRenderGL.cpp */; - name = "imguiRenderGL.cpp: 22"; - rLen = 0; - rLoc = 1003; - rType = 0; - vrLen = 1275; - vrLoc = 842; - }; 6BB2EE361261CEB800E350F8 /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = 6B98470511E733B600FA177B /* RecastAlloc.h */; @@ -2125,42 +2081,32 @@ vrLen = 1315; vrLoc = 10928; }; - 6BB2EE731261DA0400E350F8 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6BAF40D912196A25008CFCDF /* DetourNavMeshQuery.h */; - name = "DetourNavMeshQuery.h: 305"; - rLen = 0; - rLoc = 14684; - rType = 0; - vrLen = 2034; - vrLoc = 13703; - }; 6BB788160FC0472B003C24DB /* ChunkyTriMesh.cpp */ = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {931, 4056}}"; sepNavSelRange = "{6788, 0}"; - sepNavVisRange = "{6004, 937}"; + sepNavVisRange = "{5982, 1027}"; }; }; 6BB788180FC04753003C24DB /* ChunkyTriMesh.h */ = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {931, 689}}"; sepNavSelRange = "{1575, 26}"; - sepNavVisRange = "{133, 1115}"; + sepNavVisRange = "{0, 1866}"; }; }; 6BB7FC0910EBB6AA006DA0A6 /* NavMeshTesterTool.h */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {933, 1648}}"; - sepNavSelRange = "{1220, 0}"; - sepNavVisRange = "{980, 445}"; + sepNavIntBoundsRect = "{{0, 0}, {931, 1313}}"; + sepNavSelRange = "{1207, 0}"; + sepNavVisRange = "{980, 539}"; }; }; 6BB7FC0A10EBB6AA006DA0A6 /* NavMeshTesterTool.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {931, 15977}}"; - sepNavSelRange = "{4835, 0}"; - sepNavVisRange = "{4449, 1204}"; + sepNavIntBoundsRect = "{{0, 0}, {931, 15990}}"; + sepNavSelRange = "{6218, 0}"; + sepNavVisRange = "{5741, 609}"; sepNavWindowFrame = "{{38, 30}, {1214, 722}}"; }; }; @@ -2168,49 +2114,49 @@ uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {931, 1196}}"; sepNavSelRange = "{3499, 0}"; - sepNavVisRange = "{1777, 1748}"; + sepNavVisRange = "{1410, 2115}"; }; }; 6BB7FDA410F36F0E006DA0A6 /* InputGeom.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {1217, 6630}}"; - sepNavSelRange = "{8552, 0}"; - sepNavVisRange = "{8294, 468}"; + sepNavIntBoundsRect = "{{0, 0}, {931, 6487}}"; + sepNavSelRange = "{8238, 0}"; + sepNavVisRange = "{7631, 1136}"; }; }; 6BB93C7710CFE1D500F74F2B /* DebugDraw.h */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {931, 2652}}"; + sepNavIntBoundsRect = "{{0, 0}, {931, 2678}}"; sepNavSelRange = "{965, 0}"; - sepNavVisRange = "{672, 634}"; + sepNavVisRange = "{0, 1707}"; }; }; 6BB93C7810CFE1D500F74F2B /* DetourDebugDraw.h */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {957, 494}}"; + sepNavIntBoundsRect = "{{0, 0}, {957, 641}}"; sepNavSelRange = "{1096, 0}"; - sepNavVisRange = "{923, 797}"; + sepNavVisRange = "{0, 1748}"; }; }; 6BB93C7910CFE1D500F74F2B /* RecastDebugDraw.h */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {1181, 624}}"; + sepNavIntBoundsRect = "{{0, 0}, {1181, 641}}"; sepNavSelRange = "{1402, 30}"; - sepNavVisRange = "{207, 2149}"; + sepNavVisRange = "{0, 2356}"; }; }; 6BB93C7A10CFE1D500F74F2B /* DebugDraw.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {931, 6721}}"; + sepNavIntBoundsRect = "{{0, 0}, {931, 6773}}"; sepNavSelRange = "{5629, 0}"; - sepNavVisRange = "{5148, 1323}"; + sepNavVisRange = "{5006, 1645}"; }; }; 6BB93C7B10CFE1D500F74F2B /* DetourDebugDraw.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {950, 5720}}"; - sepNavSelRange = "{7249, 0}"; - sepNavVisRange = "{6814, 964}"; + sepNavIntBoundsRect = "{{0, 0}, {931, 6110}}"; + sepNavSelRange = "{11542, 0}"; + sepNavVisRange = "{11386, 814}"; sepNavWindowFrame = "{{61, 9}, {1214, 722}}"; }; }; @@ -2218,34 +2164,24 @@ uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {931, 8632}}"; sepNavSelRange = "{2030, 0}"; - sepNavVisRange = "{1689, 650}"; + sepNavVisRange = "{1319, 1315}"; }; }; 6BB93CF410CFEC4500F74F2B /* RecastDump.h */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {933, 704}}"; + sepNavIntBoundsRect = "{{0, 0}, {931, 641}}"; sepNavSelRange = "{1619, 0}"; - sepNavVisRange = "{924, 809}"; + sepNavVisRange = "{0, 1728}"; sepNavWindowFrame = "{{38, 15}, {1174, 737}}"; }; }; 6BB93CF510CFEC4500F74F2B /* RecastDump.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {933, 5941}}"; + sepNavIntBoundsRect = "{{0, 0}, {931, 5902}}"; sepNavSelRange = "{3140, 0}"; - sepNavVisRange = "{2714, 711}"; + sepNavVisRange = "{2368, 1168}"; }; }; - 6BB9C228126F4A9100B97C1C /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6B8DE88B10B69E4C00DF20FB /* DetourNavMesh.h */; - name = "DetourNavMesh.h: 370"; - rLen = 0; - rLoc = 14566; - rType = 0; - vrLen = 2039; - vrLoc = 13725; - }; 6BB9C229126F4A9100B97C1C /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = 6B25B6180FFA62BE004F1BC4 /* main.cpp */; @@ -2256,16 +2192,6 @@ vrLen = 1213; vrLoc = 1585; }; - 6BB9C22C126F4A9100B97C1C /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6BAF3C581211663A008CFCDF /* CrowdTool.cpp */; - name = "CrowdTool.cpp: 338"; - rLen = 0; - rLoc = 9201; - rType = 0; - vrLen = 1412; - vrLoc = 8537; - }; 6BB9C253126F555F00B97C1C /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = 6B9EFF02122819E200535FF1 /* DetourObstacleAvoidance.h */; @@ -2296,16 +2222,6 @@ vrLen = 1291; vrLoc = 10959; }; - 6BB9C2AB126F62C000B97C1C /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6BD667D9123D28100021A7A4 /* CrowdManager.cpp */; - name = "CrowdManager.cpp: 1119"; - rLen = 0; - rLoc = 29909; - rType = 0; - vrLen = 1591; - vrLoc = 25758; - }; 6BB9C2B5127449CE00B97C1C /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = 6BB9C2B6127449CE00B97C1C /* Detour.mk */; @@ -2322,6 +2238,11 @@ name = Detour.mk; path = /Users/memon/Code/recastnavigation/RecastDemo/Build/GNUMake/Detour.mk; sourceTree = ""; + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {931, 641}}"; + sepNavSelRange = "{0, 0}"; + sepNavVisRange = "{0, 394}"; + }; }; 6BB9C2BD127449CE00B97C1C /* PBXTextBookmark */ = { isa = PBXTextBookmark; @@ -2339,6 +2260,11 @@ name = Recast.mk; path = /Users/memon/Code/recastnavigation/RecastDemo/Build/GNUMake/Recast.mk; sourceTree = ""; + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {931, 641}}"; + sepNavSelRange = "{0, 0}"; + sepNavVisRange = "{0, 271}"; + }; }; 6BB9C372127A0E5600B97C1C /* PBXTextBookmark */ = { isa = PBXTextBookmark; @@ -2350,26 +2276,6 @@ vrLen = 1338; vrLoc = 61; }; - 6BB9C373127A0E5600B97C1C /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6BB7FC0A10EBB6AA006DA0A6 /* NavMeshTesterTool.cpp */; - name = "NavMeshTesterTool.cpp: 1120"; - rLen = 0; - rLoc = 32256; - rType = 0; - vrLen = 1478; - vrLoc = 31713; - }; - 6BB9C37B127A0FB400B97C1C /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 6BB7FC0A10EBB6AA006DA0A6 /* NavMeshTesterTool.cpp */; - name = "NavMeshTesterTool.cpp: 175"; - rLen = 0; - rLoc = 4725; - rType = 0; - vrLen = 1204; - vrLoc = 4449; - }; 6BBB0361124E242E00533229 /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = 6BBB0362124E242E00533229 /* Matrix4.h */; @@ -2386,6 +2292,11 @@ name = Matrix4.h; path = "/Users/memon/Oldies/Public/Drop Box/sx/ZenBound_iPhone/Matrix4.h"; sourceTree = ""; + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {931, 6864}}"; + sepNavSelRange = "{279, 0}"; + sepNavVisRange = "{3028, 1352}"; + }; }; 6BBB0363124E242E00533229 /* PBXTextBookmark */ = { isa = PBXTextBookmark; @@ -2403,6 +2314,11 @@ name = GameModel.cpp; path = "/Users/memon/Oldies/Public/Drop Box/sx/ZenBound_iPhone/GameModel.cpp"; sourceTree = ""; + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {931, 43160}}"; + sepNavSelRange = "{80242, 2}"; + sepNavVisRange = "{79608, 1319}"; + }; }; 6BBB4C34115B7A3D00CF791D /* PBXTextBookmark */ = { isa = PBXTextBookmark; @@ -2420,6 +2336,11 @@ name = string.h; path = /Developer/SDKs/MacOSX10.5.sdk/usr/include/string.h; sourceTree = ""; + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {931, 1924}}"; + sepNavSelRange = "{3369, 44}"; + sepNavVisRange = "{2329, 1674}"; + }; }; 6BBB4C4C115B7BAD00CF791D /* Sample_TileMesh.cpp:279 */ = { isa = PBXFileBreakpoint; @@ -2435,36 +2356,36 @@ ignoreCount = 0; lineNumber = 279; location = Recast; - modificationTime = 310028983.496423; + modificationTime = 310028983.4964229; originalNumberOfMultipleMatches = 1; - state = 1; + state = 0; }; 6BCF32341104CD05009445BF /* OffMeshConnectionTool.h */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {933, 650}}"; + sepNavIntBoundsRect = "{{0, 0}, {931, 650}}"; sepNavSelRange = "{1186, 27}"; - sepNavVisRange = "{711, 996}"; + sepNavVisRange = "{0, 1707}"; }; }; 6BCF32351104CD05009445BF /* OffMeshConnectionTool.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {931, 2184}}"; + sepNavIntBoundsRect = "{{0, 0}, {931, 2158}}"; sepNavSelRange = "{1807, 0}"; - sepNavVisRange = "{1456, 855}"; + sepNavVisRange = "{1408, 936}"; }; }; 6BD401FF1224278800995864 /* PerfTimer.h */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {933, 533}}"; + sepNavIntBoundsRect = "{{0, 0}, {931, 641}}"; sepNavSelRange = "{0, 923}"; sepNavVisRange = "{0, 1176}"; }; }; 6BD402001224279400995864 /* PerfTimer.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {933, 928}}"; + sepNavIntBoundsRect = "{{0, 0}, {931, 741}}"; sepNavSelRange = "{967, 0}"; - sepNavVisRange = "{0, 1174}"; + sepNavVisRange = "{0, 1430}"; }; }; 6BD402111224336600995864 /* PBXTextBookmark */ = { @@ -2504,7 +2425,7 @@ rLen = 0; rLoc = 9517; rType = 0; - vrLen = 699; + vrLen = 674; vrLoc = 9167; }; 6BD402811224393000995864 /* PBXTextBookmark */ = { @@ -2514,7 +2435,7 @@ rLen = 0; rLoc = 1619; rType = 0; - vrLen = 809; + vrLen = 804; vrLoc = 924; }; 6BD4028C1224399300995864 /* PBXTextBookmark */ = { @@ -2537,7 +2458,7 @@ vrLen = 1084; vrLoc = 64; }; - 6BD403421224642500995864 /* NavMeshTesterTool.cpp:541 */ = { + 6BD403421224642500995864 /* NavMeshTesterTool.cpp:543 */ = { isa = PBXFileBreakpoint; actions = ( ); @@ -2549,7 +2470,7 @@ functionName = "NavMeshTesterTool::recalc()"; hitCount = 0; ignoreCount = 0; - lineNumber = 541; + lineNumber = 543; location = Recast; modificationTime = 310028983.563242; originalNumberOfMultipleMatches = 1; @@ -2565,16 +2486,16 @@ }; 6BD667D8123D27EC0021A7A4 /* CrowdManager.h */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {931, 4225}}"; + sepNavIntBoundsRect = "{{0, 0}, {931, 4173}}"; sepNavSelRange = "{7186, 0}"; - sepNavVisRange = "{6316, 1731}"; + sepNavVisRange = "{6277, 1770}"; }; }; 6BD667D9123D28100021A7A4 /* CrowdManager.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {931, 19084}}"; - sepNavSelRange = "{11932, 0}"; - sepNavVisRange = "{11524, 1220}"; + sepNavIntBoundsRect = "{{0, 0}, {931, 19032}}"; + sepNavSelRange = "{12192, 0}"; + sepNavVisRange = "{12070, 710}"; sepNavWindowFrame = "{{15, 134}, {1120, 639}}"; }; }; @@ -2588,7 +2509,7 @@ vrLen = 739; vrLoc = 6676; }; - 6BD66851124350F50021A7A4 /* NavMeshTesterTool.cpp:480 */ = { + 6BD66851124350F50021A7A4 /* NavMeshTesterTool.cpp:482 */ = { isa = PBXFileBreakpoint; actions = ( ); @@ -2600,7 +2521,7 @@ functionName = "NavMeshTesterTool::handleUpdate(const float /*dt*/)"; hitCount = 0; ignoreCount = 0; - lineNumber = 480; + lineNumber = 482; location = Recast; modificationTime = 310028983.582127; originalNumberOfMultipleMatches = 1; @@ -2688,30 +2609,30 @@ }; 6BF5F23911747606000502A6 /* Filelist.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {909, 1600}}"; + sepNavIntBoundsRect = "{{0, 0}, {931, 1222}}"; sepNavSelRange = "{1296, 0}"; - sepNavVisRange = "{1035, 620}"; + sepNavVisRange = "{920, 888}"; }; }; 6BF5F23C11747614000502A6 /* Filelist.h */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {909, 576}}"; + sepNavIntBoundsRect = "{{0, 0}, {931, 641}}"; sepNavSelRange = "{922, 0}"; - sepNavVisRange = "{64, 1116}"; + sepNavVisRange = "{0, 1180}"; }; }; 6BF5F23E1174763B000502A6 /* SlideShow.h */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {909, 864}}"; + sepNavIntBoundsRect = "{{0, 0}, {931, 702}}"; sepNavSelRange = "{1292, 0}"; - sepNavVisRange = "{920, 527}"; + sepNavVisRange = "{64, 1406}"; }; }; 6BF5F23F1174763B000502A6 /* SlideShow.cpp */ = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {931, 2054}}"; sepNavSelRange = "{1126, 0}"; - sepNavVisRange = "{61, 1338}"; + sepNavVisRange = "{3, 1396}"; }; }; 6BF5F27311747CFA000502A6 /* PBXTextBookmark */ = { @@ -2726,9 +2647,9 @@ }; 6BF5F2C511747E9F000502A6 /* stb_image.h */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {971, 62304}}"; + sepNavIntBoundsRect = "{{0, 0}, {931, 50882}}"; sepNavSelRange = "{108151, 0}"; - sepNavVisRange = "{107791, 689}"; + sepNavVisRange = "{107349, 1210}"; }; }; 6BF5F2E411748884000502A6 /* PBXTextBookmark */ = { @@ -2777,26 +2698,31 @@ name = SDL_keysym.h; path = /Library/Frameworks/SDL.framework/Versions/A/Headers/SDL_keysym.h; sourceTree = ""; + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {931, 4056}}"; + sepNavSelRange = "{1666, 11}"; + sepNavVisRange = "{913, 1171}"; + }; }; 6BF7C13E11119520002B3F46 /* TestCase.h */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {933, 1264}}"; + sepNavIntBoundsRect = "{{0, 0}, {931, 1027}}"; sepNavSelRange = "{1776, 0}"; - sepNavVisRange = "{1372, 592}"; + sepNavVisRange = "{1047, 917}"; }; }; 6BF7C13F1111953A002B3F46 /* TestCase.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {933, 5680}}"; - sepNavSelRange = "{895, 0}"; - sepNavVisRange = "{64, 1084}"; + sepNavIntBoundsRect = "{{0, 0}, {931, 4485}}"; + sepNavSelRange = "{4694, 0}"; + sepNavVisRange = "{4411, 905}"; }; }; 6BF7C4531115C277002B3F46 /* RecastArea.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {933, 5135}}"; + sepNavIntBoundsRect = "{{0, 0}, {931, 5174}}"; sepNavSelRange = "{986, 0}"; - sepNavVisRange = "{133, 1294}"; + sepNavVisRange = "{0, 1674}"; }; }; 8D1107260486CEB800E47090 /* Recast */ = { diff --git a/RecastDemo/Build/Xcode/Recast.xcodeproj/memon.perspectivev3 b/RecastDemo/Build/Xcode/Recast.xcodeproj/memon.perspectivev3 index 314d417..c1ff7ea 100644 --- a/RecastDemo/Build/Xcode/Recast.xcodeproj/memon.perspectivev3 +++ b/RecastDemo/Build/Xcode/Recast.xcodeproj/memon.perspectivev3 @@ -284,14 +284,14 @@ PBXSmartGroupTreeModuleOutlineStateSelectionKey - 52 + 59 51 1 0 PBXSmartGroupTreeModuleOutlineStateVisibleRectKey - {{0, 824}, {264, 660}} + {{0, 590}, {264, 660}} PBXTopSmartGroupGIDs @@ -326,7 +326,7 @@ PBXProjectModuleGUID 6B8632A30F78115100E2684A PBXProjectModuleLabel - CrowdTool.cpp + NavMeshTesterTool.cpp PBXSplitModuleInNavigatorKey Split0 @@ -334,105 +334,29 @@ PBXProjectModuleGUID 6B8632A40F78115100E2684A PBXProjectModuleLabel - CrowdTool.cpp + NavMeshTesterTool.cpp _historyCapacity 0 bookmark - 6B8D5605127ABBD80077C699 + 6B8D56DA127AEC580077C699 history - 6BBB4C34115B7A3D00CF791D - 6BF5F27311747CFA000502A6 - 6BF5F2E411748884000502A6 - 6BF5F2E511748884000502A6 - 6BF5F2E611748884000502A6 - 6BF5F2E711748884000502A6 - 6B98462E11E6141900FA177B - 6B98473011E737D800FA177B - 6BAF4321121AF998008CFCDF - 6BAF4421121C25E3008CFCDF - 6BAF4525121D1723008CFCDF - 6BAF46D3121D8FF1008CFCDF - 6B1C8E08121EB4FF0048697F - 6BA6876E1222F02E00730711 - 6BA687881222F4DB00730711 - 6BA687CA1222FA9300730711 - 6BD402111224336600995864 - 6BD402121224336600995864 - 6BD402611224387200995864 - 6BD402621224387200995864 - 6BD402811224393000995864 - 6BD4028C1224399300995864 - 6BD4029B12243A8000995864 - 6B920A521225C0AC00D5B5AD - 6B920A6D1225C5DD00D5B5AD - 6BA7F8EC1227002300C8C47A - 6B847779122D223D00ADF63D - 6B84778B122D279700ADF63D - 6B8477BB122D297200ADF63D - 6B8477E1122D2B9100ADF63D - 6B8477FE122D2E2A00ADF63D - 6B8477FF122D2E2A00ADF63D - 6BD6681812434B790021A7A4 - 6BD66855124350F80021A7A4 - 6BD668A3124361EB0021A7A4 - 6BD66930124374D60021A7A4 - 6BD66937124376780021A7A4 - 6BD66938124376780021A7A4 - 6BD669501243778E0021A7A4 - 6BD669511243778E0021A7A4 - 6BD6695C124377D40021A7A4 - 6BBB0361124E242E00533229 - 6BBB0363124E242E00533229 - 6BA8CECB1255C1A400272A3B - 6BA8CECD1255C1A400272A3B - 6BA8CEEF1255C4B700272A3B - 6BA8CF4A1255D44700272A3B - 6BA8CF4D1255D44700272A3B - 6BA8CF511255D44700272A3B - 6BA8CF5B1255D49B00272A3B - 6BA8CF951255D97400272A3B - 6BA8CFBE1255DE0500272A3B - 6BB2EDF91261C75400E350F8 - 6BB2EE241261C92300E350F8 - 6BB2EE261261C92300E350F8 - 6BB2EE271261C92300E350F8 - 6BB2EE361261CEB800E350F8 - 6BB2EE3F1261D02000E350F8 - 6BB2EE661261D48100E350F8 - 6BB2EE691261D48100E350F8 - 6BB2EE731261DA0400E350F8 - 6B1633101268326F0083FC15 - 6B1633121268326F0083FC15 - 6B1633141268326F0083FC15 - 6B163317126832D20083FC15 - 6B16357012687A5D0083FC15 - 6B16358E12687D740083FC15 - 6B16359012687D740083FC15 - 6B16359112687D740083FC15 - 6B1635B9126884520083FC15 - 6B1635BB126884520083FC15 - 6B1635C8126885AD0083FC15 - 6B1635D3126887C80083FC15 - 6B1635D4126887C80083FC15 - 6B1635E812688D1B0083FC15 - 6B16360A126891A40083FC15 - 6BB9C228126F4A9100B97C1C - 6BB9C229126F4A9100B97C1C - 6BB9C253126F555F00B97C1C - 6BB9C2A2126F623D00B97C1C - 6BB9C2AA126F62C000B97C1C - 6BB9C2B5127449CE00B97C1C - 6BB9C2BD127449CE00B97C1C - 6BB9C372127A0E5600B97C1C - 6B8D5565127A98FB0077C699 - 6B8D559F127AA3E70077C699 - 6B8D55A0127AA3E70077C699 - 6B8D55B5127AA5E60077C699 - 6B8D55F2127ABAD40077C699 - 6B8D55F3127ABAD40077C699 - 6B8D5603127ABBD80077C699 - 6B8D5604127ABBD80077C699 + 6B8D565F127ADB0D0077C699 + 6B8D566D127ADB7D0077C699 + 6B8D566F127ADB7D0077C699 + 6B8D56C7127AEC100077C699 + 6B8D56C8127AEC100077C699 + 6B8D56C9127AEC100077C699 + 6B8D56CA127AEC100077C699 + 6B8D56CB127AEC100077C699 + 6B8D56CC127AEC100077C699 + 6B8D56CD127AEC100077C699 + 6B8D56CE127AEC100077C699 + 6B8D56CF127AEC100077C699 + 6B8D56D0127AEC100077C699 + 6B8D56D2127AEC100077C699 + 6B8D56D8127AEC580077C699 + 6B8D56D9127AEC580077C699 SplitCount @@ -446,18 +370,18 @@ GeometryConfiguration Frame - {{0, 0}, {992, 471}} + {{0, 0}, {992, 434}} RubberWindowFrame 0 59 1278 719 0 0 1280 778 Module PBXNavigatorGroup Proportion - 471pt + 434pt Proportion - 202pt + 239pt Tabs @@ -487,7 +411,7 @@ GeometryConfiguration Frame - {{0, 0}, {614, 336}} + {{10, 27}, {992, 212}} Module PBXProjectFindModule @@ -525,7 +449,7 @@ GeometryConfiguration Frame - {{10, 27}, {992, 175}} + {{10, 27}, {992, 212}} RubberWindowFrame 0 59 1278 719 0 0 1280 778 @@ -555,11 +479,11 @@ TableOfContents - 6B8D5569127A98FB0077C699 + 6B8D5625127AD44A0077C699 1CA23ED40692098700951B8B - 6B8D556A127A98FB0077C699 + 6B8D5626127AD44A0077C699 6B8632A30F78115100E2684A - 6B8D556B127A98FB0077C699 + 6B8D5627127AD44A0077C699 1CA23EDF0692099D00951B8B 1CA23EE00692099D00951B8B 1CA23EE10692099D00951B8B @@ -707,14 +631,14 @@ TableOfContents - 6B8D5585127AA2270077C699 + 6B8D563A127AD6CA0077C699 1CCC7628064C1048000F2A68 1CCC7629064C1048000F2A68 - 6B8D5586127AA2270077C699 - 6B8D5587127AA2270077C699 - 6B8D5588127AA2270077C699 - 6B8D5589127AA2270077C699 - 6B8D558A127AA2270077C699 + 6B8D563B127AD6CA0077C699 + 6B8D563C127AD6CA0077C699 + 6B8D563D127AD6CA0077C699 + 6B8D563E127AD6CA0077C699 + 6B8D563F127AD6CA0077C699 ToolbarConfigUserDefaultsMinorVersion 2 @@ -746,9 +670,9 @@ 5 WindowOrderList - 6B8D5606127ABBD80077C699 - 6B8D558C127AA2270077C699 - 6B8D558D127AA2270077C699 + 6B8D56D5127AEC100077C699 + 6B8D56D6127AEC100077C699 + 6B8D56D7127AEC100077C699 /Users/memon/Code/recastnavigation/RecastDemo/Build/Xcode/Recast.xcodeproj WindowString diff --git a/RecastDemo/Include/NavMeshTesterTool.h b/RecastDemo/Include/NavMeshTesterTool.h index a394bb4..4051685 100644 --- a/RecastDemo/Include/NavMeshTesterTool.h +++ b/RecastDemo/Include/NavMeshTesterTool.h @@ -32,7 +32,7 @@ class NavMeshTesterTool : public SampleTool dtQueryFilter m_filter; - dtQueryState m_pathFindState; + dtStatus m_pathFindStatus; enum ToolMode { diff --git a/RecastDemo/Source/CrowdManager.cpp b/RecastDemo/Source/CrowdManager.cpp index dce306f..9fac489 100644 --- a/RecastDemo/Source/CrowdManager.cpp +++ b/RecastDemo/Source/CrowdManager.cpp @@ -216,8 +216,8 @@ void PathQueue::update(dtNavMeshQuery* navquery) PathQuery& q = m_queue[i]; if (q.ref == PATHQ_INVALID) continue; - q.npath = navquery->findPath(q.startRef, q.endRef, q.startPos, q.endPos, - q.filter, q.path, PQ_MAX_PATH); + navquery->findPath(q.startRef, q.endRef, q.startPos, q.endPos, + q.filter, q.path, &q.npath, PQ_MAX_PATH); q.ready = true; break; } @@ -474,8 +474,9 @@ int PathCorridor::findCorners(float* cornerVerts, unsigned char* cornerFlags, static const float MIN_TARGET_DIST = 0.01f; - int ncorners = navquery->findStraightPath(m_pos, m_target, m_path, m_npath, - cornerVerts, cornerFlags, cornerPolys, maxCorners); + int ncorners = 0; + navquery->findStraightPath(m_pos, m_target, m_path, m_npath, + cornerVerts, cornerFlags, cornerPolys, &ncorners, maxCorners); // Prune points in the beginning of the path which are too close. while (ncorners) @@ -530,7 +531,8 @@ void PathCorridor::optimizePath(const float* next, const float pathOptimizationR static const int MAX_RES = 32; dtPolyRef res[MAX_RES]; float t, norm[3]; - const int nres = navquery->raycast(m_path[0], m_pos, goal, filter, t, norm, res, MAX_RES); + int nres = 0; + navquery->raycast(m_path[0], m_pos, goal, filter, &t, norm, res, &nres, MAX_RES); if (nres > 1 && t > 0.99f) { m_npath = mergeCorridor(m_path, m_npath, m_maxPath, res, nres); @@ -546,8 +548,9 @@ void PathCorridor::movePosition(const float* npos, dtNavMeshQuery* navquery, con float result[3]; static const int MAX_VISITED = 16; dtPolyRef visited[MAX_VISITED]; - int nvisited = navquery->moveAlongSurface(m_path[0], m_pos, npos, filter, - result, visited, MAX_VISITED); + int nvisited = 0; + navquery->moveAlongSurface(m_path[0], m_pos, npos, filter, + result, visited, &nvisited, MAX_VISITED); m_npath = fixupCorridor(m_path, m_npath, m_maxPath, visited, nvisited); // Adjust the position to stay on top of the navmesh. @@ -566,8 +569,9 @@ void PathCorridor::moveTargetPosition(const float* npos, dtNavMeshQuery* navquer float result[3]; static const int MAX_VISITED = 16; dtPolyRef visited[MAX_VISITED]; - int nvisited = navquery->moveAlongSurface(m_path[m_npath-1], m_target, npos, filter, - result, visited, MAX_VISITED); + int nvisited = 0; + navquery->moveAlongSurface(m_path[m_npath-1], m_target, npos, filter, + result, visited, &nvisited, MAX_VISITED); m_npath = fixupCorridorEnd(m_path, m_npath, m_maxPath, visited, nvisited); // TODO: should we do that? @@ -741,15 +745,17 @@ void LocalBoundary::update(dtPolyRef ref, const float* pos, const float collisio // First query non-overlapping polygons. dtPolyRef locals[MAX_LOCAL_POLYS]; - const int nlocals = navquery->findLocalNeighbourhood(ref, pos, collisionQueryRange, - filter, locals, 0, MAX_LOCAL_POLYS); + int nlocals = 0; + navquery->findLocalNeighbourhood(ref, pos, collisionQueryRange, + filter, locals, 0, &nlocals, MAX_LOCAL_POLYS); // Secondly, store all polygon edges. m_nsegs = 0; float segs[MAX_SEGS_PER_POLY*6]; + int nsegs = 0; for (int j = 0; j < nlocals; ++j) { - const int nsegs = navquery->getPolyWallSegments(locals[j], filter, segs, MAX_SEGS_PER_POLY); + navquery->getPolyWallSegments(locals[j], filter, segs, &nsegs, MAX_SEGS_PER_POLY); for (int k = 0; k < nsegs; ++k) { const float* s = &segs[k*6]; @@ -855,7 +861,8 @@ int CrowdManager::addAgent(const float* pos, const float radius, const float hei // Find nearest position on navmesh and place the agent there. float nearest[3]; - dtPolyRef ref = navquery->findNearestPoly(pos, m_ext, &m_filter, nearest); + dtPolyRef ref; + navquery->findNearestPoly(pos, m_ext, &m_filter, &ref, nearest); if (!ref) { // Could not find a location on navmesh. @@ -1082,8 +1089,9 @@ void CrowdManager::updateMoveRequest(const float dt, dtNavMeshQuery* navquery, c float result[3]; static const int MAX_VISITED = 16; dtPolyRef visited[MAX_VISITED]; - int nvisited = navquery->moveAlongSurface(req->temp[req->ntemp-1], req->pos, req->apos, filter, - result, visited, MAX_VISITED); + int nvisited = 0; + navquery->moveAlongSurface(req->temp[req->ntemp-1], req->pos, req->apos, filter, + result, visited, &nvisited, MAX_VISITED); req->ntemp = fixupCorridorEnd(req->temp, req->ntemp, MAX_TEMP_PATH, visited, nvisited); dtVcopy(req->pos, result); @@ -1191,7 +1199,7 @@ void CrowdManager::updateMoveRequest(const float dt, dtNavMeshQuery* navquery, c { // Partial path, constrain target position inside the last polygon. float nearest[3]; - if (navquery->closestPointOnPoly(res[nres-1], targetPos, nearest)) + if (navquery->closestPointOnPoly(res[nres-1], targetPos, nearest) == DT_SUCCESS) dtVcopy(targetPos, nearest); else valid = false; diff --git a/RecastDemo/Source/CrowdTool.cpp b/RecastDemo/Source/CrowdTool.cpp index 28eeccf..fb990a2 100644 --- a/RecastDemo/Source/CrowdTool.cpp +++ b/RecastDemo/Source/CrowdTool.cpp @@ -253,7 +253,8 @@ void CrowdTool::handleClick(const float* s, const float* p, bool shift) dtNavMeshQuery* navquery = m_sample->getNavMeshQuery(); const dtQueryFilter* filter = m_crowd.getFilter(); const float* ext = m_crowd.getQueryExtents(); - m_targetRef = navquery->findNearestPoly(p, ext, filter, m_targetPos); + + navquery->findNearestPoly(p, ext, filter, &m_targetRef, m_targetPos); if (shift) { diff --git a/RecastDemo/Source/NavMeshTesterTool.cpp b/RecastDemo/Source/NavMeshTesterTool.cpp index 11fdb8a..5056293 100644 --- a/RecastDemo/Source/NavMeshTesterTool.cpp +++ b/RecastDemo/Source/NavMeshTesterTool.cpp @@ -104,8 +104,9 @@ static bool getSteerTarget(dtNavMeshQuery* navQuery, const float* startPos, cons float steerPath[MAX_STEER_POINTS*3]; unsigned char steerPathFlags[MAX_STEER_POINTS]; dtPolyRef steerPathPolys[MAX_STEER_POINTS]; - int nsteerPath = navQuery->findStraightPath(startPos, endPos, path, pathSize, - steerPath, steerPathFlags, steerPathPolys, MAX_STEER_POINTS); + int nsteerPath = 0; + navQuery->findStraightPath(startPos, endPos, path, pathSize, + steerPath, steerPathFlags, steerPathPolys, &nsteerPath, MAX_STEER_POINTS); if (!nsteerPath) return false; @@ -144,7 +145,7 @@ NavMeshTesterTool::NavMeshTesterTool() : m_sample(0), m_navMesh(0), m_navQuery(0), - m_pathFindState(DT_QUERY_FAILED), + m_pathFindStatus(DT_FAILURE), m_toolMode(TOOLMODE_PATHFIND_FOLLOW), m_startRef(0), m_endRef(0), @@ -234,7 +235,7 @@ void NavMeshTesterTool::handleMenu() m_toolMode = TOOLMODE_FIND_POLYS_IN_CIRCLE; recalc(); } - if (imguiCheck("Find Polys in Poly", m_toolMode == TOOLMODE_FIND_POLYS_IN_SHAPE)) + if (imguiCheck("Find Polys in Shape", m_toolMode == TOOLMODE_FIND_POLYS_IN_SHAPE)) { m_toolMode = TOOLMODE_FIND_POLYS_IN_SHAPE; recalc(); @@ -333,7 +334,7 @@ void NavMeshTesterTool::handleStep() if (m_pathIterNum == 0) { - m_npolys = m_navQuery->findPath(m_startRef, m_endRef, m_spos, m_epos, &m_filter, m_polys, MAX_POLYS); + m_navQuery->findPath(m_startRef, m_endRef, m_spos, m_epos, &m_filter, m_polys, &m_npolys, MAX_POLYS); m_nsmoothPath = 0; m_pathIterPolyCount = m_npolys; @@ -397,8 +398,9 @@ void NavMeshTesterTool::handleStep() // Move float result[3]; dtPolyRef visited[16]; - int nvisited = m_navQuery->moveAlongSurface(m_pathIterPolys[0], m_iterPos, moveTgt, &m_filter, - result, visited, 16); + int nvisited = 0; + m_navQuery->moveAlongSurface(m_pathIterPolys[0], m_iterPos, moveTgt, &m_filter, + result, visited, &nvisited, 16); m_pathIterPolyCount = fixupCorridor(m_pathIterPolys, m_pathIterPolyCount, MAX_POLYS, visited, nvisited); float h = 0; m_navQuery->getPolyHeight(m_pathIterPolys[0], result, &h); @@ -436,7 +438,7 @@ void NavMeshTesterTool::handleStep() m_pathIterPolyCount -= npos; // Handle the connection. - if (m_navMesh->getOffMeshConnectionPolyEndPoints(prevRef, polyRef, startPos, endPos)) + if (m_navMesh->getOffMeshConnectionPolyEndPoints(prevRef, polyRef, startPos, endPos) == DT_SUCCESS) { if (m_nsmoothPath < MAX_SMOOTH) { @@ -470,14 +472,14 @@ void NavMeshTesterTool::handleUpdate(const float /*dt*/) { if (m_toolMode == TOOLMODE_PATHFIND_SLICED) { - if (m_pathFindState == DT_QUERY_RUNNING) + if (m_pathFindStatus == DT_IN_PROGRESS) { - m_pathFindState = m_navQuery->updateSlicedFindPath(1); + m_pathFindStatus = m_navQuery->updateSlicedFindPath(1); } - if (m_pathFindState == DT_QUERY_READY) + if (m_pathFindStatus == DT_SUCCESS) { - m_npolys = m_navQuery->finalizeSlicedFindPath(m_polys, MAX_POLYS); + m_navQuery->finalizeSlicedFindPath(m_polys, &m_npolys, MAX_POLYS); m_nstraightPath = 0; if (m_npolys) { @@ -487,12 +489,12 @@ void NavMeshTesterTool::handleUpdate(const float /*dt*/) if (m_polys[m_npolys-1] != m_endRef) m_navQuery->closestPointOnPoly(m_polys[m_npolys-1], m_epos, epos); - m_nstraightPath = m_navQuery->findStraightPath(m_spos, epos, m_polys, m_npolys, - m_straightPath, m_straightPathFlags, - m_straightPathPolys, MAX_POLYS); + m_navQuery->findStraightPath(m_spos, epos, m_polys, m_npolys, + m_straightPath, m_straightPathFlags, + m_straightPathPolys, &m_nstraightPath, MAX_POLYS); } - m_pathFindState = DT_QUERY_FAILED; + m_pathFindStatus = DT_FAILURE; } } } @@ -516,16 +518,16 @@ void NavMeshTesterTool::recalc() return; if (m_sposSet) - m_startRef = m_navQuery->findNearestPoly(m_spos, m_polyPickExt, &m_filter, 0); + m_navQuery->findNearestPoly(m_spos, m_polyPickExt, &m_filter, &m_startRef, 0); else m_startRef = 0; if (m_eposSet) - m_endRef = m_navQuery->findNearestPoly(m_epos, m_polyPickExt, &m_filter, 0); + m_navQuery->findNearestPoly(m_epos, m_polyPickExt, &m_filter, &m_endRef, 0); else m_endRef = 0; - m_pathFindState = DT_QUERY_FAILED; + m_pathFindStatus = DT_FAILURE; if (m_toolMode == TOOLMODE_PATHFIND_FOLLOW) { @@ -538,7 +540,7 @@ void NavMeshTesterTool::recalc() m_filter.getIncludeFlags(), m_filter.getExcludeFlags()); #endif - m_npolys = m_navQuery->findPath(m_startRef, m_endRef, m_spos, m_epos, &m_filter, m_polys, MAX_POLYS); + m_navQuery->findPath(m_startRef, m_endRef, m_spos, m_epos, &m_filter, m_polys, &m_npolys, MAX_POLYS); m_nsmoothPath = 0; @@ -592,9 +594,9 @@ void NavMeshTesterTool::recalc() // Move float result[3]; dtPolyRef visited[16]; - - int nvisited = m_navQuery->moveAlongSurface(polys[0], iterPos, moveTgt, &m_filter, - result, visited, 16); + int nvisited = 0; + m_navQuery->moveAlongSurface(polys[0], iterPos, moveTgt, &m_filter, + result, visited, &nvisited, 16); npolys = fixupCorridor(polys, npolys, MAX_POLYS, visited, nvisited); float h = 0; @@ -633,7 +635,7 @@ void NavMeshTesterTool::recalc() npolys -= npos; // Handle the connection. - if (m_navMesh->getOffMeshConnectionPolyEndPoints(prevRef, polyRef, startPos, endPos)) + if (m_navMesh->getOffMeshConnectionPolyEndPoints(prevRef, polyRef, startPos, endPos) == DT_SUCCESS) { if (m_nsmoothPath < MAX_SMOOTH) { @@ -679,7 +681,7 @@ void NavMeshTesterTool::recalc() m_spos[0],m_spos[1],m_spos[2], m_epos[0],m_epos[1],m_epos[2], m_filter.getIncludeFlags(), m_filter.getExcludeFlags()); #endif - m_npolys = m_navQuery->findPath(m_startRef, m_endRef, m_spos, m_epos, &m_filter, m_polys, MAX_POLYS); + m_navQuery->findPath(m_startRef, m_endRef, m_spos, m_epos, &m_filter, m_polys, &m_npolys, MAX_POLYS); m_nstraightPath = 0; if (m_npolys) { @@ -689,9 +691,9 @@ void NavMeshTesterTool::recalc() if (m_polys[m_npolys-1] != m_endRef) m_navQuery->closestPointOnPoly(m_polys[m_npolys-1], m_epos, epos); - m_nstraightPath = m_navQuery->findStraightPath(m_spos, epos, m_polys, m_npolys, - m_straightPath, m_straightPathFlags, - m_straightPathPolys, MAX_POLYS); + m_navQuery->findStraightPath(m_spos, epos, m_polys, m_npolys, + m_straightPath, m_straightPathFlags, + m_straightPathPolys, &m_nstraightPath, MAX_POLYS); } } else @@ -712,7 +714,7 @@ void NavMeshTesterTool::recalc() m_npolys = 0; m_nstraightPath = 0; - m_pathFindState = m_navQuery->initSlicedFindPath(m_startRef, m_endRef, m_spos, m_epos, &m_filter); + m_pathFindStatus = m_navQuery->initSlicedFindPath(m_startRef, m_endRef, m_spos, m_epos, &m_filter); } else { @@ -736,7 +738,7 @@ void NavMeshTesterTool::recalc() m_straightPath[0] = m_spos[0]; m_straightPath[1] = m_spos[1]; m_straightPath[2] = m_spos[2]; - m_npolys = m_navQuery->raycast(m_startRef, m_spos, m_epos, &m_filter, t, m_hitNormal, m_polys, MAX_POLYS); + m_navQuery->raycast(m_startRef, m_spos, m_epos, &m_filter, &t, m_hitNormal, m_polys, &m_npolys, MAX_POLYS); if (t > 1) { // No hit @@ -770,7 +772,8 @@ void NavMeshTesterTool::recalc() m_spos[0],m_spos[1],m_spos[2], 100.0f, m_filter.getIncludeFlags(), m_filter.getExcludeFlags()); #endif - m_distanceToWall = m_navQuery->findDistanceToWall(m_startRef, m_spos, 100.0f, &m_filter, m_hitPos, m_hitNormal); + m_distanceToWall = 0.0f; + m_navQuery->findDistanceToWall(m_startRef, m_spos, 100.0f, &m_filter, &m_distanceToWall, m_hitPos, m_hitNormal); } } else if (m_toolMode == TOOLMODE_FIND_POLYS_IN_CIRCLE) @@ -785,8 +788,8 @@ void NavMeshTesterTool::recalc() m_spos[0],m_spos[1],m_spos[2], dist, m_filter.getIncludeFlags(), m_filter.getExcludeFlags()); #endif - m_npolys = m_navQuery->findPolysAroundCircle(m_startRef, m_spos, dist, &m_filter, - m_polys, m_parent, 0, MAX_POLYS); + m_navQuery->findPolysAroundCircle(m_startRef, m_spos, dist, &m_filter, + m_polys, m_parent, 0, &m_npolys, MAX_POLYS); } } @@ -822,8 +825,8 @@ void NavMeshTesterTool::recalc() m_queryPoly[9],m_queryPoly[10],m_queryPoly[11], m_filter.getIncludeFlags(), m_filter.getExcludeFlags()); #endif - m_npolys = m_navQuery->findPolysAroundShape(m_startRef, m_queryPoly, 4, &m_filter, - m_polys, m_parent, 0, MAX_POLYS); + m_navQuery->findPolysAroundShape(m_startRef, m_queryPoly, 4, &m_filter, + m_polys, m_parent, 0, &m_npolys, MAX_POLYS); } } else if (m_toolMode == TOOLMODE_FIND_LOCAL_NEIGHBOURHOOD) @@ -835,8 +838,8 @@ void NavMeshTesterTool::recalc() m_spos[0],m_spos[1],m_spos[2], m_neighbourhoodRadius, m_filter.getIncludeFlags(), m_filter.getExcludeFlags()); #endif - m_npolys = m_navQuery->findLocalNeighbourhood(m_startRef, m_spos, m_neighbourhoodRadius, &m_filter, - m_polys, m_parent, MAX_POLYS); + m_navQuery->findLocalNeighbourhood(m_startRef, m_spos, m_neighbourhoodRadius, &m_filter, + m_polys, m_parent, &m_npolys, MAX_POLYS); } } } @@ -849,7 +852,7 @@ static void getPolyCenter(dtNavMesh* navMesh, dtPolyRef ref, float* center) const dtMeshTile* tile = 0; const dtPoly* poly = 0; - if (!navMesh->getTileAndPolyByRef(ref, &tile, &poly)) + if (navMesh->getTileAndPolyByRef(ref, &tile, &poly) != DT_SUCCESS) return; for (int i = 0; i < (int)poly->vertCount; ++i) @@ -1120,7 +1123,8 @@ void NavMeshTesterTool::handleRender() static const int MAX_SEGS = DT_VERTS_PER_POLYGON*2; float segs[MAX_SEGS*6]; - const int nsegs = m_navQuery->getPolyWallSegments(m_polys[i], &m_filter, segs, MAX_SEGS); + int nsegs = 0; + m_navQuery->getPolyWallSegments(m_polys[i], &m_filter, segs, &nsegs, MAX_SEGS); dd.begin(DU_DRAW_LINES, 2.0f); for (int j = 0; j < nsegs; ++j) { diff --git a/RecastDemo/Source/Sample_SoloMeshSimple.cpp b/RecastDemo/Source/Sample_SoloMeshSimple.cpp index cbc8624..c284392 100644 --- a/RecastDemo/Source/Sample_SoloMeshSimple.cpp +++ b/RecastDemo/Source/Sample_SoloMeshSimple.cpp @@ -639,14 +639,14 @@ bool Sample_SoloMeshSimple::handleBuild() return false; } - if (!m_navMesh->init(navData, navDataSize, DT_TILE_FREE_DATA)) + if (m_navMesh->init(navData, navDataSize, DT_TILE_FREE_DATA) != DT_SUCCESS) { dtFree(navData); m_ctx->log(RC_LOG_ERROR, "Could not init Detour navmesh"); return false; } - if (!m_navQuery->init(m_navMesh, 2048)) + if (m_navQuery->init(m_navMesh, 2048) != DT_SUCCESS) { 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 0b992b6..755798e 100644 --- a/RecastDemo/Source/Sample_SoloMeshTiled.cpp +++ b/RecastDemo/Source/Sample_SoloMeshTiled.cpp @@ -1079,14 +1079,14 @@ bool Sample_SoloMeshTiled::handleBuild() return false; } - if (!m_navMesh->init(navData, navDataSize, DT_TILE_FREE_DATA)) + if (m_navMesh->init(navData, navDataSize, DT_TILE_FREE_DATA) != DT_SUCCESS) { dtFree(navData); m_ctx->log(RC_LOG_ERROR, "Could not init Detour navmesh"); return false; } - if (!m_navQuery->init(m_navMesh, 2048)) + if (m_navQuery->init(m_navMesh, 2048) != DT_SUCCESS) { 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 627786f..3a21e3e 100644 --- a/RecastDemo/Source/Sample_TileMesh.cpp +++ b/RecastDemo/Source/Sample_TileMesh.cpp @@ -295,7 +295,7 @@ dtNavMesh* Sample_TileMesh::loadAll(const char* path) dtNavMesh* mesh = dtAllocNavMesh(); - if (!mesh || !mesh->init(&header.params)) + if (!mesh || mesh->init(&header.params) != DT_SUCCESS) { fclose(fp); return 0; @@ -314,7 +314,7 @@ dtNavMesh* Sample_TileMesh::loadAll(const char* path) memset(data, 0, tileHeader.dataSize); fread(data, tileHeader.dataSize, 1, fp); - mesh->addTile(data, tileHeader.dataSize, DT_TILE_FREE_DATA, tileHeader.tileRef); + mesh->addTile(data, tileHeader.dataSize, DT_TILE_FREE_DATA, tileHeader.tileRef, 0); } fclose(fp); @@ -710,13 +710,13 @@ bool Sample_TileMesh::handleBuild() params.tileHeight = m_tileSize*m_cellSize; params.maxTiles = m_maxTiles; params.maxPolys = m_maxPolysPerTile; - if (!m_navMesh->init(¶ms)) + if (m_navMesh->init(¶ms) != DT_SUCCESS) { m_ctx->log(RC_LOG_ERROR, "buildTiledNavigation: Could not init navmesh."); return false; } - if (!m_navQuery->init(m_navMesh, 2048)) + if (m_navQuery->init(m_navMesh, 2048) != DT_SUCCESS) { m_ctx->log(RC_LOG_ERROR, "buildTiledNavigation: Could not init Detour navmesh query"); return false; @@ -764,7 +764,7 @@ 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)) + if (m_navMesh->addTile(data,dataSize,DT_TILE_FREE_DATA,0,0) != DT_SUCCESS) dtFree(data); } @@ -844,7 +844,7 @@ 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,true)) + if (m_navMesh->addTile(data,dataSize,DT_TILE_FREE_DATA,0,0) != DT_SUCCESS) dtFree(data); } } diff --git a/RecastDemo/Source/TestCase.cpp b/RecastDemo/Source/TestCase.cpp index 79c3d8a..95293f5 100644 --- a/RecastDemo/Source/TestCase.cpp +++ b/RecastDemo/Source/TestCase.cpp @@ -186,8 +186,9 @@ void TestCase::doTests(dtNavMesh* navmesh, dtNavMeshQuery* navquery) // Find start points TimeVal findNearestPolyStart = getPerfTime(); - dtPolyRef startRef = navquery->findNearestPoly(iter->spos, polyPickExt, &filter, 0); - dtPolyRef endRef = navquery->findNearestPoly(iter->epos, polyPickExt, &filter, 0); + dtPolyRef startRef, endRef; + navquery->findNearestPoly(iter->spos, polyPickExt, &filter, &startRef, 0); + navquery->findNearestPoly(iter->epos, polyPickExt, &filter, &endRef, 0); TimeVal findNearestPolyEnd = getPerfTime(); iter->findNearestPolyTime += getPerfDeltaTimeUsec(findNearestPolyStart, findNearestPolyEnd); @@ -198,7 +199,7 @@ void TestCase::doTests(dtNavMesh* navmesh, dtNavMeshQuery* navquery) // Find path TimeVal findPathStart = getPerfTime(); - iter->npolys = navquery->findPath(startRef, endRef, iter->spos, iter->epos, &filter, polys, MAX_POLYS); + navquery->findPath(startRef, endRef, iter->spos, iter->epos, &filter, polys, &iter->npolys, MAX_POLYS); TimeVal findPathEnd = getPerfTime(); iter->findPathTime += getPerfDeltaTimeUsec(findPathStart, findPathEnd); @@ -208,8 +209,8 @@ void TestCase::doTests(dtNavMesh* navmesh, dtNavMeshQuery* navquery) { TimeVal findStraightPathStart = getPerfTime(); - iter->nstraight = navquery->findStraightPath(iter->spos, iter->epos, polys, iter->npolys, - straight, 0, 0, MAX_POLYS); + navquery->findStraightPath(iter->spos, iter->epos, polys, iter->npolys, + straight, 0, 0, &iter->nstraight, MAX_POLYS); TimeVal findStraightPathEnd = getPerfTime(); iter->findStraightPathTime += getPerfDeltaTimeUsec(findStraightPathStart, findStraightPathEnd); }