diff --git a/Detour/Include/DetourNavMesh.h b/Detour/Include/DetourNavMesh.h index 1ad948f..310bf64 100644 --- a/Detour/Include/DetourNavMesh.h +++ b/Detour/Include/DetourNavMesh.h @@ -379,6 +379,15 @@ public: // area - (in) area ID (0-63). float getAreaCost(const int area) const; + // Sets polygon flags. + void setPolyFlags(dtPolyRef ref, unsigned short flags); + + // Return polygon flags. + unsigned short getPolyFlags(dtPolyRef ref); + + // Return polygon type. + unsigned char getPolyType(dtPolyRef ref); + // Returns pointer to a polygon based on ref. const dtPoly* getPolyByRef(dtPolyRef ref) const; @@ -447,20 +456,20 @@ private: dtQueryFilter* filter, float* nearestPt); // Returns closest point on polygon. bool closestPointOnPolyInTile(const dtMeshTile* tile, unsigned int ip, const float* pos, float* closest) const; - - unsigned short getPolyFlags(dtPolyRef ref); - unsigned char getPolyType(dtPolyRef ref); - float getCost(dtPolyRef prev, dtPolyRef from, dtPolyRef to) const; - float getFirstCost(const float* pos, dtPolyRef from, dtPolyRef to) const; - float getLastCost(dtPolyRef from, dtPolyRef to, const float* pos) const; - float getHeuristic(const float* from, const float* to) 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 dtMeshHeader* fromHeader, + dtPolyRef to, const dtPoly* toPoly, const dtMeshHeader* toHeader, + float* left, float* right) const; + // Returns edge mid point between two polygons. bool getEdgeMidPoint(dtPolyRef from, dtPolyRef to, float* mid) const; - + bool getEdgeMidPoint(dtPolyRef from, const dtPoly* fromPoly, const dtMeshHeader* fromHeader, + dtPolyRef to, const dtPoly* toPoly, const dtMeshHeader* toHeader, + float* mid) const; + float m_orig[3]; // Origin of the tile (0,0) float m_tileWidth, m_tileHeight; // Dimensions of each tile. int m_maxTiles; // Max number of tiles. diff --git a/Detour/Source/DetourNavMesh.cpp b/Detour/Source/DetourNavMesh.cpp index 0162faf..3d237ac 100644 --- a/Detour/Source/DetourNavMesh.cpp +++ b/Detour/Source/DetourNavMesh.cpp @@ -116,6 +116,9 @@ dtNavMesh::dtNavMesh() : m_orig[0] = 0; m_orig[1] = 0; m_orig[2] = 0; + + for (int i = 0; i < DT_MAX_AREAS; ++i) + m_areaCost[i] = 1.0f; } dtNavMesh::~dtNavMesh() @@ -905,13 +908,13 @@ bool dtNavMesh::getPolyHeight(dtPolyRef ref, const float* pos, float* height) co void dtNavMesh::setAreaCost(const int area, float cost) { - if (area >= 0 && area > DT_MAX_AREAS) + if (area >= 0 && area < DT_MAX_AREAS) m_areaCost[area] = cost; } float dtNavMesh::getAreaCost(const int area) const { - if (area >= 0 && area > DT_MAX_AREAS) + if (area >= 0 && area < DT_MAX_AREAS) return m_areaCost[area]; return -1; } @@ -1130,6 +1133,9 @@ int dtNavMesh::findPath(dtPolyRef startRef, dtPolyRef endRef, dtNode* lastBestNode = startNode; float lastBestNodeCost = startNode->total; + + unsigned int it, ip; + while (!m_openList->empty()) { dtNode* bestNode = m_openList->pop(); @@ -1140,79 +1146,115 @@ int dtNavMesh::findPath(dtPolyRef startRef, dtPolyRef endRef, break; } - // Get poly and tile. - unsigned int salt, it, ip; - decodePolyId(bestNode->id, salt, it, ip); + float previousEdgeMidPoint[3]; + + // Get current poly and tile. // The API input has been cheked already, skip checking internal data. - const dtMeshHeader* header = m_tiles[it].header; - const dtPoly* poly = &header->polys[ip]; - - for (unsigned int i = poly->firstLink; i != DT_NULL_LINK; i = header->links[i].next) + const dtPolyRef bestRef = bestNode->id; + it = decodePolyIdTile(bestRef); + ip = decodePolyIdPoly(bestRef); + const dtMeshHeader* bestHeader = m_tiles[it].header; + const dtPoly* bestPoly = &bestHeader->polys[ip]; + + // Get parent poly and tile. + dtPolyRef parentRef = 0; + const dtMeshHeader* parentHeader = 0; + const dtPoly* parentPoly = 0; + if (bestNode->pidx) + parentRef = m_nodePool->getNodeAtIdx(bestNode->pidx)->id; + if (parentRef) { - dtPolyRef neighbour = header->links[i].ref; - if (neighbour) + it = decodePolyIdTile(parentRef); + ip = decodePolyIdPoly(parentRef); + parentHeader = m_tiles[it].header; + parentPoly = &parentHeader->polys[ip]; + + getEdgeMidPoint(parentRef, parentPoly, parentHeader, + bestRef, bestPoly, bestHeader, previousEdgeMidPoint); + } + else + { + vcopy(previousEdgeMidPoint, startPos); + } + + for (unsigned int i = bestPoly->firstLink; i != DT_NULL_LINK; i = bestHeader->links[i].next) + { + dtPolyRef neighbourRef = bestHeader->links[i].ref; + // Skip invalid ids and do not expand back to parent node. + if (!neighbourRef || parentRef == neighbourRef) + continue; + + // Get neighbour poly and tile. + // The API input has been cheked already, skip checking internal data. + it = decodePolyIdTile(neighbourRef); + ip = decodePolyIdPoly(neighbourRef); + const dtMeshHeader* neighbourHeader = m_tiles[it].header; + const dtPoly* neighbourPoly = &neighbourHeader->polys[ip]; + + if (!passFilter(filter, neighbourPoly->flags)) + continue; + + dtNode newNode; + newNode.pidx = m_nodePool->getNodeIdx(bestNode); + newNode.id = neighbourRef; + + // Calculate cost. + float edgeMidPoint[3]; + + getEdgeMidPoint(bestRef, bestPoly, bestHeader, + neighbourRef, neighbourPoly, neighbourHeader, edgeMidPoint); + + // Special case for last node. + float h = 0; + if (neighbourRef == endRef) { - // Skip parent node. - if (bestNode->pidx && m_nodePool->getNodeAtIdx(bestNode->pidx)->id == neighbour) - continue; - - // TODO: Avoid digging the polygon (done in getEdgeMidPoint too). - if (!passFilter(filter, getPolyFlags(neighbour))) - continue; - - dtNode* parent = bestNode; - dtNode newNode; - newNode.pidx = m_nodePool->getNodeIdx(parent); - newNode.id = neighbour; - - // Calculate cost. - float p0[3], p1[3]; - if (!parent->pidx) - vcopy(p0, startPos); - else - getEdgeMidPoint(m_nodePool->getNodeAtIdx(parent->pidx)->id, parent->id, p0); - - getEdgeMidPoint(parent->id, newNode.id, p1); - - newNode.cost = parent->cost + vdist(p0,p1); - // Special case for last node. - if (newNode.id == endRef) - newNode.cost += vdist(p1, endPos); - + // Cost + newNode.cost = bestNode->cost + + vdist(previousEdgeMidPoint,edgeMidPoint) * m_areaCost[bestPoly->area] + + vdist(edgeMidPoint, endPos) * m_areaCost[neighbourPoly->area]; // Heuristic - const float h = vdist(p1,endPos)*H_SCALE; - newNode.total = newNode.cost + h; + h = 0; + } + else + { + // Cost + newNode.cost = bestNode->cost + + vdist(previousEdgeMidPoint,edgeMidPoint) * m_areaCost[bestPoly->area]; + // Heuristic + h = vdist(edgeMidPoint,endPos)*H_SCALE; + } + newNode.total = newNode.cost + h; + + dtNode* actualNode = m_nodePool->getNode(newNode.id); + if (!actualNode) + continue; + + if (!((actualNode->flags & DT_NODE_OPEN) && newNode.total > actualNode->total) && + !((actualNode->flags & DT_NODE_CLOSED) && newNode.total > actualNode->total)) + { + actualNode->flags &= ~DT_NODE_CLOSED; + actualNode->pidx = newNode.pidx; + actualNode->cost = newNode.cost; + actualNode->total = newNode.total; - dtNode* actualNode = m_nodePool->getNode(newNode.id); - if (!actualNode) - continue; - - if (!((actualNode->flags & DT_NODE_OPEN) && newNode.total > actualNode->total) && - !((actualNode->flags & DT_NODE_CLOSED) && newNode.total > actualNode->total)) + if (h < lastBestNodeCost) { - actualNode->flags &= ~DT_NODE_CLOSED; - actualNode->pidx = newNode.pidx; - actualNode->cost = newNode.cost; - actualNode->total = newNode.total; - - if (h < lastBestNodeCost) - { - lastBestNodeCost = h; - lastBestNode = actualNode; - } - - if (actualNode->flags & DT_NODE_OPEN) - { - m_openList->modify(actualNode); - } - else - { - actualNode->flags |= DT_NODE_OPEN; - m_openList->push(actualNode); - } + lastBestNodeCost = h; + lastBestNode = actualNode; + } + + if (actualNode->flags & DT_NODE_OPEN) + { + m_openList->modify(actualNode); + } + else + { + actualNode->flags |= DT_NODE_OPEN; + m_openList->push(actualNode); } } } + bestNode->flags |= DT_NODE_CLOSED; } @@ -1550,7 +1592,6 @@ int dtNavMesh::moveAlongPathCorridor(const float* startPos, const float* endPos, return n; } -// Returns portal points between two polygons. bool dtNavMesh::getPortalPoints(dtPolyRef from, dtPolyRef to, float* left, float* right, unsigned char& fromType, unsigned char& toType) const { @@ -1563,87 +1604,105 @@ bool dtNavMesh::getPortalPoints(dtPolyRef from, dtPolyRef to, float* left, float const dtPoly* fromPoly = &fromHeader->polys[ip]; fromType = fromPoly->type; + decodePolyId(to, salt, it, ip); + if (it >= (unsigned int)m_maxTiles) return false; + if (m_tiles[it].salt != salt || m_tiles[it].header == 0) return false; + if (ip >= (unsigned int)m_tiles[it].header->polyCount) return false; + const dtMeshHeader* toHeader = m_tiles[it].header; + const dtPoly* toPoly = &toHeader->polys[ip]; + toType = toPoly->type; + + return getPortalPoints(from, fromPoly, fromHeader, + to, toPoly, toHeader, + left, right); +} + +// Returns portal points between two polygons. +bool dtNavMesh::getPortalPoints(dtPolyRef from, const dtPoly* fromPoly, const dtMeshHeader* fromHeader, + dtPolyRef to, const dtPoly* toPoly, const dtMeshHeader* toHeader, + float* left, float* right) const +{ + // Find the link that points to the 'to' polygon. + const dtLink* link = 0; for (unsigned int i = fromPoly->firstLink; i != DT_NULL_LINK; i = fromHeader->links[i].next) { - const dtLink* link = &fromHeader->links[i]; - if (link->ref != to) - continue; - - decodePolyId(to, salt, it, ip); - if (it >= (unsigned int)m_maxTiles) return false; - if (m_tiles[it].salt != salt || m_tiles[it].header == 0) return false; - if (ip >= (unsigned int)m_tiles[it].header->polyCount) return false; - const dtMeshHeader* toHeader = m_tiles[it].header; - const dtPoly* toPoly = &toHeader->polys[ip]; - toType = toPoly->type; - - if (fromPoly->type == DT_POLYTYPE_OFFMESH_CONNECTION) + if (fromHeader->links[i].ref == to) { - // Find link that points to first vertex. - for (unsigned int i = fromPoly->firstLink; i != DT_NULL_LINK; i = fromHeader->links[i].next) - { - if (fromHeader->links[i].ref == to) - { - const int v = fromHeader->links[i].edge; - vcopy(left, &fromHeader->verts[fromPoly->verts[v]*3]); - vcopy(right, &fromHeader->verts[fromPoly->verts[v]*3]); - return true; - } - } - return false; + link = &fromHeader->links[i]; + break; } - - if (toPoly->type == DT_POLYTYPE_OFFMESH_CONNECTION) - { - for (unsigned int i = toPoly->firstLink; i != DT_NULL_LINK; i = toHeader->links[i].next) - { - if (toHeader->links[i].ref == from) - { - const int v = toHeader->links[i].edge; - vcopy(left, &toHeader->verts[toPoly->verts[v]*3]); - vcopy(right, &toHeader->verts[toPoly->verts[v]*3]); - return true; - } - } - return false; - } - - // Find portal vertices. - const int v0 = fromPoly->verts[link->edge]; - const int v1 = fromPoly->verts[(link->edge+1) % (int)fromPoly->vertCount]; - vcopy(left, &fromHeader->verts[v0*3]); - vcopy(right, &fromHeader->verts[v1*3]); - // If the link is at tile boundary, clamp the vertices to - // the link width. - if (link->side == 0 || link->side == 4) - { - // Unpack portal limits. - const float smin = min(left[2],right[2]); - const float smax = max(left[2],right[2]); - const float s = (smax-smin) / 255.0f; - const float lmin = smin + link->bmin*s; - const float lmax = smin + link->bmax*s; - left[2] = max(left[2],lmin); - left[2] = min(left[2],lmax); - right[2] = max(right[2],lmin); - right[2] = min(right[2],lmax); - } - else if (link->side == 2 || link->side == 6) - { - // Unpack portal limits. - const float smin = min(left[0],right[0]); - const float smax = max(left[0],right[0]); - const float s = (smax-smin) / 255.0f; - const float lmin = smin + link->bmin*s; - const float lmax = smin + link->bmax*s; - left[0] = max(left[0],lmin); - left[0] = min(left[0],lmax); - right[0] = max(right[0],lmin); - right[0] = min(right[0],lmax); - } - return true; } - return false; + if (!link) + return false; + + // Handle off-mesh connections. + if (fromPoly->type == DT_POLYTYPE_OFFMESH_CONNECTION) + { + // Find link that points to first vertex. + for (unsigned int i = fromPoly->firstLink; i != DT_NULL_LINK; i = fromHeader->links[i].next) + { + if (fromHeader->links[i].ref == to) + { + const int v = fromHeader->links[i].edge; + vcopy(left, &fromHeader->verts[fromPoly->verts[v]*3]); + vcopy(right, &fromHeader->verts[fromPoly->verts[v]*3]); + return true; + } + } + return false; + } + + if (toPoly->type == DT_POLYTYPE_OFFMESH_CONNECTION) + { + for (unsigned int i = toPoly->firstLink; i != DT_NULL_LINK; i = toHeader->links[i].next) + { + if (toHeader->links[i].ref == from) + { + const int v = toHeader->links[i].edge; + vcopy(left, &toHeader->verts[toPoly->verts[v]*3]); + vcopy(right, &toHeader->verts[toPoly->verts[v]*3]); + return true; + } + } + return false; + } + + // Find portal vertices. + const int v0 = fromPoly->verts[link->edge]; + const int v1 = fromPoly->verts[(link->edge+1) % (int)fromPoly->vertCount]; + vcopy(left, &fromHeader->verts[v0*3]); + vcopy(right, &fromHeader->verts[v1*3]); + + // If the link is at tile boundary, clamp the vertices to + // the link width. + if (link->side == 0 || link->side == 4) + { + // Unpack portal limits. + const float smin = min(left[2],right[2]); + const float smax = max(left[2],right[2]); + const float s = (smax-smin) / 255.0f; + const float lmin = smin + link->bmin*s; + const float lmax = smin + link->bmax*s; + left[2] = max(left[2],lmin); + left[2] = min(left[2],lmax); + right[2] = max(right[2],lmin); + right[2] = min(right[2],lmax); + } + else if (link->side == 2 || link->side == 6) + { + // Unpack portal limits. + const float smin = min(left[0],right[0]); + const float smax = max(left[0],right[0]); + const float s = (smax-smin) / 255.0f; + const float lmin = smin + link->bmin*s; + const float lmax = smin + link->bmax*s; + left[0] = max(left[0],lmin); + left[0] = min(left[0],lmax); + right[0] = max(right[0],lmin); + right[0] = min(right[0],lmax); + } + + return true; } // Returns edge mid point between two polygons. @@ -1658,6 +1717,32 @@ bool dtNavMesh::getEdgeMidPoint(dtPolyRef from, dtPolyRef to, float* mid) const return true; } +bool dtNavMesh::getEdgeMidPoint(dtPolyRef from, const dtPoly* fromPoly, const dtMeshHeader* fromHeader, + dtPolyRef to, const dtPoly* toPoly, const dtMeshHeader* toHeader, + float* mid) const +{ + float left[3], right[3]; + if (!getPortalPoints(from, fromPoly, fromHeader, to, toPoly, toHeader, left, right)) + return false; + 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; +} + +void 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 (ip >= (unsigned int)m_tiles[it].header->polyCount) return; + dtMeshHeader* header = m_tiles[it].header; + dtPoly* poly = &header->polys[ip]; + // Change flags. + poly->flags = flags; +} + unsigned short dtNavMesh::getPolyFlags(dtPolyRef ref) { unsigned int salt, it, ip; @@ -1845,85 +1930,111 @@ int dtNavMesh::findPolysAround(dtPolyRef centerRef, const float* centerPos, floa } const float radiusSqr = sqr(radius); + + unsigned int it, ip; while (!m_openList->empty()) { dtNode* bestNode = m_openList->pop(); + float previousEdgeMidPoint[3]; + // Get poly and tile. // The API input has been cheked already, skip checking internal data. - unsigned int it = decodePolyIdTile(bestNode->id); - unsigned int ip = decodePolyIdPoly(bestNode->id); - const dtMeshHeader* header = m_tiles[it].header; - const dtPoly* poly = &header->polys[ip]; - - for (unsigned int i = poly->firstLink; i != DT_NULL_LINK; i = header->links[i].next) + const dtPolyRef bestRef = bestNode->id; + it = decodePolyIdTile(bestRef); + ip = decodePolyIdPoly(bestRef); + const dtMeshHeader* bestHeader = m_tiles[it].header; + const dtPoly* bestPoly = &bestHeader->polys[ip]; + + // Get parent poly and tile. + dtPolyRef parentRef = 0; + const dtMeshHeader* parentHeader = 0; + const dtPoly* parentPoly = 0; + if (bestNode->pidx) + parentRef = m_nodePool->getNodeAtIdx(bestNode->pidx)->id; + if (parentRef) { - const dtLink* link = &header->links[i]; - dtPolyRef neighbour = link->ref; - if (neighbour) + it = decodePolyIdTile(parentRef); + ip = decodePolyIdPoly(parentRef); + parentHeader = m_tiles[it].header; + parentPoly = &parentHeader->polys[ip]; + + getEdgeMidPoint(parentRef, parentPoly, parentHeader, + bestRef, bestPoly, bestHeader, previousEdgeMidPoint); + } + else + { + vcopy(previousEdgeMidPoint, centerPos); + } + + for (unsigned int i = bestPoly->firstLink; i != DT_NULL_LINK; i = bestHeader->links[i].next) + { + const dtLink* link = &bestHeader->links[i]; + dtPolyRef neighbourRef = link->ref; + // Skip invalid neighbours and do not follow back to parent. + if (!neighbourRef || neighbourRef == parentRef) + continue; + + // Calc distance to the edge. + const float* va = &bestHeader->verts[bestPoly->verts[link->edge]*3]; + const float* vb = &bestHeader->verts[bestPoly->verts[(link->edge+1) % bestPoly->vertCount]*3]; + float tseg; + float distSqr = distancePtSegSqr2D(centerPos, va, vb, tseg); + + // If the circle is not touching the next polygon, skip it. + if (distSqr > radiusSqr) + continue; + + // Expand to neighbour + it = decodePolyIdTile(neighbourRef); + ip = decodePolyIdPoly(neighbourRef); + const dtMeshHeader* neighbourHeader = m_tiles[it].header; + const dtPoly* neighbourPoly = &neighbourHeader->polys[ip]; + + if (!passFilter(filter, neighbourPoly->flags)) + continue; + + dtNode newNode; + newNode.pidx = m_nodePool->getNodeIdx(bestNode); + newNode.id = neighbourRef; + + // Cost + float edgeMidPoint[3]; + getEdgeMidPoint(bestRef, bestPoly, bestHeader, + neighbourRef, neighbourPoly, neighbourHeader, edgeMidPoint); + + newNode.total = bestNode->total + vdist(previousEdgeMidPoint, edgeMidPoint); + + dtNode* actualNode = m_nodePool->getNode(newNode.id); + if (!actualNode) + continue; + + if (!((actualNode->flags & DT_NODE_OPEN) && newNode.total > actualNode->total) && + !((actualNode->flags & DT_NODE_CLOSED) && newNode.total > actualNode->total)) { - // Skip parent node. - if (bestNode->pidx && m_nodePool->getNodeAtIdx(bestNode->pidx)->id == neighbour) - continue; + actualNode->flags &= ~DT_NODE_CLOSED; + actualNode->pidx = newNode.pidx; + actualNode->total = newNode.total; - // Calc distance to the edge. - const float* va = &header->verts[poly->verts[link->edge]*3]; - const float* vb = &header->verts[poly->verts[(link->edge+1) % poly->vertCount]*3]; - float tseg; - float distSqr = distancePtSegSqr2D(centerPos, va, vb, tseg); - - // If the circle is not touching the next polygon, skip it. - if (distSqr > radiusSqr) - continue; - - if (!passFilter(filter, getPolyFlags(neighbour))) - continue; - - dtNode* parent = bestNode; - dtNode newNode; - newNode.pidx = m_nodePool->getNodeIdx(parent); - newNode.id = neighbour; - - // Cost - float p0[3], p1[3]; - if (!parent->pidx) - vcopy(p0, centerPos); - else - getEdgeMidPoint(m_nodePool->getNodeAtIdx(parent->pidx)->id, parent->id, p0); - getEdgeMidPoint(parent->id, newNode.id, p1); - newNode.total = parent->total + vdist(p0,p1); - - dtNode* actualNode = m_nodePool->getNode(newNode.id); - if (!actualNode) - continue; - - if (!((actualNode->flags & DT_NODE_OPEN) && newNode.total > actualNode->total) && - !((actualNode->flags & DT_NODE_CLOSED) && newNode.total > actualNode->total)) + if (actualNode->flags & DT_NODE_OPEN) { - actualNode->flags &= ~DT_NODE_CLOSED; - actualNode->pidx = newNode.pidx; - actualNode->total = newNode.total; - - if (actualNode->flags & DT_NODE_OPEN) + m_openList->modify(actualNode); + } + else + { + if (n < maxResult) { - m_openList->modify(actualNode); - } - else - { - if (n < maxResult) - { - if (resultRef) - resultRef[n] = actualNode->id; - if (resultParent) - resultParent[n] = m_nodePool->getNodeAtIdx(actualNode->pidx)->id; - if (resultCost) - resultCost[n] = actualNode->total; - ++n; - } - actualNode->flags = DT_NODE_OPEN; - m_openList->push(actualNode); + if (resultRef) + resultRef[n] = actualNode->id; + if (resultParent) + resultParent[n] = m_nodePool->getNodeAtIdx(actualNode->pidx)->id; + if (resultCost) + resultCost[n] = actualNode->total; + ++n; } + actualNode->flags = DT_NODE_OPEN; + m_openList->push(actualNode); } } } @@ -1952,45 +2063,72 @@ float dtNavMesh::findDistanceToWall(dtPolyRef centerRef, const float* centerPos, float radiusSqr = sqr(maxRadius); + unsigned int it, ip; + while (!m_openList->empty()) { dtNode* bestNode = m_openList->pop(); + float previousEdgeMidPoint[3]; + // Get poly and tile. // The API input has been cheked already, skip checking internal data. - unsigned int it = decodePolyIdTile(bestNode->id); - unsigned int ip = decodePolyIdPoly(bestNode->id); - const dtMeshHeader* header = m_tiles[it].header; - const dtPoly* poly = &header->polys[ip]; + const dtPolyRef bestRef = bestNode->id; + it = decodePolyIdTile(bestRef); + ip = decodePolyIdPoly(bestRef); + const dtMeshHeader* bestHeader = m_tiles[it].header; + const dtPoly* bestPoly = &bestHeader->polys[ip]; + + // Get parent poly and tile. + dtPolyRef parentRef = 0; + const dtMeshHeader* parentHeader = 0; + const dtPoly* parentPoly = 0; + if (bestNode->pidx) + parentRef = m_nodePool->getNodeAtIdx(bestNode->pidx)->id; + if (parentRef) + { + it = decodePolyIdTile(parentRef); + ip = decodePolyIdPoly(parentRef); + parentHeader = m_tiles[it].header; + parentPoly = &parentHeader->polys[ip]; + + getEdgeMidPoint(parentRef, parentPoly, parentHeader, + bestRef, bestPoly, bestHeader, previousEdgeMidPoint); + } + else + { + vcopy(previousEdgeMidPoint, centerPos); + } // Hit test walls. - for (int i = 0, j = (int)poly->vertCount-1; i < (int)poly->vertCount; j = i++) + for (int i = 0, j = (int)bestPoly->vertCount-1; i < (int)bestPoly->vertCount; j = i++) { // Skip non-solid edges. - if (poly->neis[j] & DT_EXT_LINK) + if (bestPoly->neis[j] & DT_EXT_LINK) { // Tile border. bool solid = true; - for (unsigned int k = poly->firstLink; k != DT_NULL_LINK; k = header->links[k].next) + for (unsigned int k = bestPoly->firstLink; k != DT_NULL_LINK; k = bestHeader->links[k].next) { - const dtLink* link = &header->links[k]; - if (link->edge == j && link->ref != 0 && passFilter(filter, getPolyFlags(link->ref))) + const dtLink* link = &bestHeader->links[k]; + if (link->edge == j) { - solid = false; + if (link->ref != 0 && passFilter(filter, getPolyFlags(link->ref))) + solid = false; break; } } if (!solid) continue; } - else if (poly->neis[j] && passFilter(filter, header->polys[poly->neis[j]].flags)) + else if (bestPoly->neis[j] && passFilter(filter, bestHeader->polys[bestPoly->neis[j]].flags)) { // Internal edge continue; } // Calc distance to the edge. - const float* vj = &header->verts[poly->verts[j]*3]; - const float* vi = &header->verts[poly->verts[i]*3]; + const float* vj = &bestHeader->verts[bestPoly->verts[j]*3]; + const float* vi = &bestHeader->verts[bestPoly->verts[i]*3]; float tseg; float distSqr = distancePtSegSqr2D(centerPos, vj, vi, tseg); @@ -2006,62 +2144,63 @@ float dtNavMesh::findDistanceToWall(dtPolyRef centerRef, const float* centerPos, hitPos[2] = vj[2] + (vi[2] - vj[2])*tseg; } - for (unsigned int i = poly->firstLink; i != DT_NULL_LINK; i = header->links[i].next) + for (unsigned int i = bestPoly->firstLink; i != DT_NULL_LINK; i = bestHeader->links[i].next) { - const dtLink* link = &header->links[i]; - dtPolyRef neighbour = link->ref; - if (neighbour) - { - // Skip parent node. - if (bestNode->pidx && m_nodePool->getNodeAtIdx(bestNode->pidx)->id == neighbour) - continue; - - // Calc distance to the edge. - const float* va = &header->verts[poly->verts[link->edge]*3]; - const float* vb = &header->verts[poly->verts[(link->edge+1) % poly->vertCount]*3]; - float tseg; - float distSqr = distancePtSegSqr2D(centerPos, va, vb, tseg); - - // If the circle is not touching the next polygon, skip it. - if (distSqr > radiusSqr) - continue; - - if (!passFilter(filter, getPolyFlags(neighbour))) - continue; - - dtNode* parent = bestNode; - dtNode newNode; - newNode.pidx = m_nodePool->getNodeIdx(parent); - newNode.id = neighbour; + const dtLink* link = &bestHeader->links[i]; + dtPolyRef neighbourRef = link->ref; + // Skip invalid neighbours and do not follow back to parent. + if (!neighbourRef || neighbourRef == parentRef) + continue; + + // Calc distance to the edge. + const float* va = &bestHeader->verts[bestPoly->verts[link->edge]*3]; + const float* vb = &bestHeader->verts[bestPoly->verts[(link->edge+1) % bestPoly->vertCount]*3]; + float tseg; + float distSqr = distancePtSegSqr2D(centerPos, va, vb, tseg); + + // If the circle is not touching the next polygon, skip it. + if (distSqr > radiusSqr) + continue; + + // Expand to neighbour. + it = decodePolyIdTile(neighbourRef); + ip = decodePolyIdPoly(neighbourRef); + const dtMeshHeader* neighbourHeader = m_tiles[it].header; + const dtPoly* neighbourPoly = &neighbourHeader->polys[ip]; + + if (!passFilter(filter, neighbourPoly->flags)) + continue; + + dtNode newNode; + newNode.pidx = m_nodePool->getNodeIdx(bestNode); + newNode.id = neighbourRef; + + // Cost + float edgeMidPoint[3]; + getEdgeMidPoint(bestRef, bestPoly, bestHeader, + neighbourRef, neighbourPoly, neighbourHeader, edgeMidPoint); - float p0[3], p1[3]; - if (!parent->pidx) - vcopy(p0, centerPos); - else - getEdgeMidPoint(m_nodePool->getNodeAtIdx(parent->pidx)->id, parent->id, p0); - getEdgeMidPoint(parent->id, newNode.id, p1); - newNode.total = parent->total + vdist(p0,p1); + newNode.total = bestNode->total + vdist(previousEdgeMidPoint, edgeMidPoint); + + dtNode* actualNode = m_nodePool->getNode(newNode.id); + if (!actualNode) + continue; + + if (!((actualNode->flags & DT_NODE_OPEN) && newNode.total > actualNode->total) && + !((actualNode->flags & DT_NODE_CLOSED) && newNode.total > actualNode->total)) + { + actualNode->flags &= ~DT_NODE_CLOSED; + actualNode->pidx = newNode.pidx; + actualNode->total = newNode.total; - dtNode* actualNode = m_nodePool->getNode(newNode.id); - if (!actualNode) - continue; - - if (!((actualNode->flags & DT_NODE_OPEN) && newNode.total > actualNode->total) && - !((actualNode->flags & DT_NODE_CLOSED) && newNode.total > actualNode->total)) + if (actualNode->flags & DT_NODE_OPEN) { - actualNode->flags &= ~DT_NODE_CLOSED; - actualNode->pidx = newNode.pidx; - actualNode->total = newNode.total; - - if (actualNode->flags & DT_NODE_OPEN) - { - m_openList->modify(actualNode); - } - else - { - actualNode->flags = DT_NODE_OPEN; - m_openList->push(actualNode); - } + m_openList->modify(actualNode); + } + else + { + actualNode->flags = DT_NODE_OPEN; + m_openList->push(actualNode); } } } diff --git a/RecastDemo/Bin/Recast.app/Contents/MacOS/Recast b/RecastDemo/Bin/Recast.app/Contents/MacOS/Recast index f8e43cc..94a15a4 100755 Binary files a/RecastDemo/Bin/Recast.app/Contents/MacOS/Recast and b/RecastDemo/Bin/Recast.app/Contents/MacOS/Recast differ diff --git a/RecastDemo/Build/Xcode/Recast.xcodeproj/memon.pbxuser b/RecastDemo/Build/Xcode/Recast.xcodeproj/memon.pbxuser index 2eacd78..2923eb0 100644 --- a/RecastDemo/Build/Xcode/Recast.xcodeproj/memon.pbxuser +++ b/RecastDemo/Build/Xcode/Recast.xcodeproj/memon.pbxuser @@ -9,16 +9,18 @@ }; }; 29B97313FDCFA39411CA2CEA /* Project object */ = { - activeBuildConfigurationName = Debug; + activeBuildConfigurationName = Release; activeExecutable = 6B8632970F78114600E2684A /* Recast */; activeTarget = 8D1107260486CEB800E47090 /* Recast */; addToTargets = ( 8D1107260486CEB800E47090 /* Recast */, ); breakpoints = ( - 6B84BDF5110DF38D007D997B /* DetourNavMesh.cpp:251 */, + 6B84BDF5110DF38D007D997B /* DetourNavMesh.cpp:254 */, 6B84BE1D110DF6C6007D997B /* Sample_TileMesh.cpp:478 */, 6B324BE6111C511800EBD2FD /* BoxVolumeTool.cpp:27 */, + 6B324DF11125530F00EBD2FD /* DetourNavMesh.cpp:1212 */, + 6B324DF81125533B00EBD2FD /* NavMeshTesterTool.cpp:297 */, ); codeSenseManager = 6B8632AA0F78115100E2684A /* Code sense */; executables = ( @@ -584,6 +586,200 @@ 6B324D0B111C7C1700EBD2FD /* PBXTextBookmark */ = 6B324D0B111C7C1700EBD2FD /* PBXTextBookmark */; 6B324D0C111C7C1700EBD2FD /* PBXTextBookmark */ = 6B324D0C111C7C1700EBD2FD /* PBXTextBookmark */; 6B324D0D111C7C1700EBD2FD /* PBXTextBookmark */ = 6B324D0D111C7C1700EBD2FD /* PBXTextBookmark */; + 6B324D0F1121C78000EBD2FD /* PBXTextBookmark */ = 6B324D0F1121C78000EBD2FD /* PBXTextBookmark */; + 6B324D101121C78000EBD2FD /* PBXTextBookmark */ = 6B324D101121C78000EBD2FD /* PBXTextBookmark */; + 6B324D111121C78000EBD2FD /* PBXTextBookmark */ = 6B324D111121C78000EBD2FD /* PBXTextBookmark */; + 6B324D121121C78000EBD2FD /* PBXTextBookmark */ = 6B324D121121C78000EBD2FD /* PBXTextBookmark */; + 6B324D131121C78000EBD2FD /* PBXTextBookmark */ = 6B324D131121C78000EBD2FD /* PBXTextBookmark */; + 6B324D141121C78000EBD2FD /* PBXTextBookmark */ = 6B324D141121C78000EBD2FD /* PBXTextBookmark */; + 6B324D151121C78000EBD2FD /* PBXTextBookmark */ = 6B324D151121C78000EBD2FD /* PBXTextBookmark */; + 6B324D161121C78000EBD2FD /* PBXTextBookmark */ = 6B324D161121C78000EBD2FD /* PBXTextBookmark */; + 6B324D191121CC6800EBD2FD /* PBXTextBookmark */ = 6B324D191121CC6800EBD2FD /* PBXTextBookmark */; + 6B324D1B1121CC8100EBD2FD /* PBXTextBookmark */ = 6B324D1B1121CC8100EBD2FD /* PBXTextBookmark */; + 6B324D1C1121CCCE00EBD2FD /* PBXTextBookmark */ = 6B324D1C1121CCCE00EBD2FD /* PBXTextBookmark */; + 6B324D1D1121CCD200EBD2FD /* PBXTextBookmark */ = 6B324D1D1121CCD200EBD2FD /* PBXTextBookmark */; + 6B324D1E1121CCD400EBD2FD /* PBXTextBookmark */ = 6B324D1E1121CCD400EBD2FD /* PBXTextBookmark */; + 6B324D1F1121CCD400EBD2FD /* PBXTextBookmark */ = 6B324D1F1121CCD400EBD2FD /* PBXTextBookmark */; + 6B324D211121CD0C00EBD2FD /* PBXTextBookmark */ = 6B324D211121CD0C00EBD2FD /* PBXTextBookmark */; + 6B324D221121CD0C00EBD2FD /* PBXTextBookmark */ = 6B324D221121CD0C00EBD2FD /* PBXTextBookmark */; + 6B324D231121CD0C00EBD2FD /* PBXTextBookmark */ = 6B324D231121CD0C00EBD2FD /* PBXTextBookmark */; + 6B324D241121CD0C00EBD2FD /* PBXTextBookmark */ = 6B324D241121CD0C00EBD2FD /* PBXTextBookmark */; + 6B324D261121CD2000EBD2FD /* PBXTextBookmark */ = 6B324D261121CD2000EBD2FD /* PBXTextBookmark */; + 6B324D271121CD2000EBD2FD /* PBXTextBookmark */ = 6B324D271121CD2000EBD2FD /* PBXTextBookmark */; + 6B324D281121CD2000EBD2FD /* PBXTextBookmark */ = 6B324D281121CD2000EBD2FD /* PBXTextBookmark */; + 6B324D291121CD2000EBD2FD /* PBXTextBookmark */ = 6B324D291121CD2000EBD2FD /* PBXTextBookmark */; + 6B324D2B1121CD2900EBD2FD /* PBXTextBookmark */ = 6B324D2B1121CD2900EBD2FD /* PBXTextBookmark */; + 6B324D2C1121CD3200EBD2FD /* PBXTextBookmark */ = 6B324D2C1121CD3200EBD2FD /* PBXTextBookmark */; + 6B324D2D1121CD3600EBD2FD /* PBXTextBookmark */ = 6B324D2D1121CD3600EBD2FD /* PBXTextBookmark */; + 6B324D2E1121CD9300EBD2FD /* PBXTextBookmark */ = 6B324D2E1121CD9300EBD2FD /* PBXTextBookmark */; + 6B324D2F1121CD9300EBD2FD /* PBXTextBookmark */ = 6B324D2F1121CD9300EBD2FD /* PBXTextBookmark */; + 6B324D301121CDAF00EBD2FD /* PBXTextBookmark */ = 6B324D301121CDAF00EBD2FD /* PBXTextBookmark */; + 6B324D311121CDAF00EBD2FD /* PBXTextBookmark */ = 6B324D311121CDAF00EBD2FD /* PBXTextBookmark */; + 6B324D321121CDAF00EBD2FD /* PBXTextBookmark */ = 6B324D321121CDAF00EBD2FD /* PBXTextBookmark */; + 6B324D331121CDAF00EBD2FD /* PBXTextBookmark */ = 6B324D331121CDAF00EBD2FD /* PBXTextBookmark */; + 6B324D361121CFCF00EBD2FD /* PBXTextBookmark */ = 6B324D361121CFCF00EBD2FD /* PBXTextBookmark */; + 6B324D371121CFCF00EBD2FD /* PBXTextBookmark */ = 6B324D371121CFCF00EBD2FD /* PBXTextBookmark */; + 6B324D381121CFCF00EBD2FD /* PBXTextBookmark */ = 6B324D381121CFCF00EBD2FD /* PBXTextBookmark */; + 6B324D391121CFCF00EBD2FD /* PBXTextBookmark */ = 6B324D391121CFCF00EBD2FD /* PBXTextBookmark */; + 6B324D3A1121CFCF00EBD2FD /* PBXTextBookmark */ = 6B324D3A1121CFCF00EBD2FD /* PBXTextBookmark */; + 6B324D3B1121CFCF00EBD2FD /* PBXTextBookmark */ = 6B324D3B1121CFCF00EBD2FD /* PBXTextBookmark */; + 6B324D3C1121CFCF00EBD2FD /* PBXTextBookmark */ = 6B324D3C1121CFCF00EBD2FD /* PBXTextBookmark */; + 6B324D3D1121CFCF00EBD2FD /* PBXTextBookmark */ = 6B324D3D1121CFCF00EBD2FD /* PBXTextBookmark */; + 6B324D3E1121CFD900EBD2FD /* PBXTextBookmark */ = 6B324D3E1121CFD900EBD2FD /* PBXTextBookmark */; + 6B324D3F1121CFE300EBD2FD /* PBXTextBookmark */ = 6B324D3F1121CFE300EBD2FD /* PBXTextBookmark */; + 6B324D401121CFE300EBD2FD /* PBXTextBookmark */ = 6B324D401121CFE300EBD2FD /* PBXTextBookmark */; + 6B324D421121CFFD00EBD2FD /* PBXTextBookmark */ = 6B324D421121CFFD00EBD2FD /* PBXTextBookmark */; + 6B324D431121CFFD00EBD2FD /* PBXTextBookmark */ = 6B324D431121CFFD00EBD2FD /* PBXTextBookmark */; + 6B324D441121CFFD00EBD2FD /* PBXTextBookmark */ = 6B324D441121CFFD00EBD2FD /* PBXTextBookmark */; + 6B324D451121CFFD00EBD2FD /* PBXTextBookmark */ = 6B324D451121CFFD00EBD2FD /* PBXTextBookmark */; + 6B324D461121D00800EBD2FD /* PBXTextBookmark */ = 6B324D461121D00800EBD2FD /* PBXTextBookmark */; + 6B324D471121D00D00EBD2FD /* PBXTextBookmark */ = 6B324D471121D00D00EBD2FD /* PBXTextBookmark */; + 6B324D491121D04800EBD2FD /* PBXTextBookmark */ = 6B324D491121D04800EBD2FD /* PBXTextBookmark */; + 6B324D4A1121D0AB00EBD2FD /* PBXTextBookmark */ = 6B324D4A1121D0AB00EBD2FD /* PBXTextBookmark */; + 6B324D4B1121D0AB00EBD2FD /* PBXTextBookmark */ = 6B324D4B1121D0AB00EBD2FD /* PBXTextBookmark */; + 6B324D4C1121D0AE00EBD2FD /* PBXTextBookmark */ = 6B324D4C1121D0AE00EBD2FD /* PBXTextBookmark */; + 6B324D4D1121D13500EBD2FD /* PBXTextBookmark */ = 6B324D4D1121D13500EBD2FD /* PBXTextBookmark */; + 6B324D4F1121D61A00EBD2FD /* PBXTextBookmark */ = 6B324D4F1121D61A00EBD2FD /* PBXTextBookmark */; + 6B324D501121D61A00EBD2FD /* PBXTextBookmark */ = 6B324D501121D61A00EBD2FD /* PBXTextBookmark */; + 6B324D511121D61A00EBD2FD /* PBXTextBookmark */ = 6B324D511121D61A00EBD2FD /* PBXTextBookmark */; + 6B324D521121D61A00EBD2FD /* PBXTextBookmark */ = 6B324D521121D61A00EBD2FD /* PBXTextBookmark */; + 6B324D531121D61A00EBD2FD /* PBXTextBookmark */ = 6B324D531121D61A00EBD2FD /* PBXTextBookmark */; + 6B324D541121D61A00EBD2FD /* PBXTextBookmark */ = 6B324D541121D61A00EBD2FD /* PBXTextBookmark */; + 6B324D551121D61A00EBD2FD /* PBXTextBookmark */ = 6B324D551121D61A00EBD2FD /* PBXTextBookmark */; + 6B324D561121D61A00EBD2FD /* PBXTextBookmark */ = 6B324D561121D61A00EBD2FD /* PBXTextBookmark */; + 6B324D581121D6A600EBD2FD /* PBXTextBookmark */ = 6B324D581121D6A600EBD2FD /* PBXTextBookmark */; + 6B324D591121D70600EBD2FD /* PBXTextBookmark */ = 6B324D591121D70600EBD2FD /* PBXTextBookmark */; + 6B324D5A1121D70600EBD2FD /* PBXTextBookmark */ = 6B324D5A1121D70600EBD2FD /* PBXTextBookmark */; + 6B324D5C1121D71800EBD2FD /* PBXTextBookmark */ = 6B324D5C1121D71800EBD2FD /* PBXTextBookmark */; + 6B324D5D1121D71800EBD2FD /* PBXTextBookmark */ = 6B324D5D1121D71800EBD2FD /* PBXTextBookmark */; + 6B324D5E1121D71800EBD2FD /* PBXTextBookmark */ = 6B324D5E1121D71800EBD2FD /* PBXTextBookmark */; + 6B324D5F1121D71800EBD2FD /* PBXTextBookmark */ = 6B324D5F1121D71800EBD2FD /* PBXTextBookmark */; + 6B324D601121D71A00EBD2FD /* PBXTextBookmark */ = 6B324D601121D71A00EBD2FD /* PBXTextBookmark */; + 6B324D611121D72100EBD2FD /* PBXTextBookmark */ = 6B324D611121D72100EBD2FD /* PBXTextBookmark */; + 6B324D621121D72100EBD2FD /* PBXTextBookmark */ = 6B324D621121D72100EBD2FD /* PBXTextBookmark */; + 6B324D631121DE7A00EBD2FD /* PBXTextBookmark */ = 6B324D631121DE7A00EBD2FD /* PBXTextBookmark */; + 6B324D641121DE7A00EBD2FD /* PBXTextBookmark */ = 6B324D641121DE7A00EBD2FD /* PBXTextBookmark */; + 6B324D651121DE7A00EBD2FD /* PBXTextBookmark */ = 6B324D651121DE7A00EBD2FD /* PBXTextBookmark */; + 6B324D661121DE7A00EBD2FD /* PBXTextBookmark */ = 6B324D661121DE7A00EBD2FD /* PBXTextBookmark */; + 6B324D671121DE7A00EBD2FD /* PBXTextBookmark */ = 6B324D671121DE7A00EBD2FD /* PBXTextBookmark */; + 6B324D681121DE7A00EBD2FD /* PBXTextBookmark */ = 6B324D681121DE7A00EBD2FD /* PBXTextBookmark */; + 6B324D691121DE7A00EBD2FD /* PBXTextBookmark */ = 6B324D691121DE7A00EBD2FD /* PBXTextBookmark */; + 6B324D6A1121DE7A00EBD2FD /* PBXTextBookmark */ = 6B324D6A1121DE7A00EBD2FD /* PBXTextBookmark */; + 6B324D6B1121DE7A00EBD2FD /* PBXTextBookmark */ = 6B324D6B1121DE7A00EBD2FD /* PBXTextBookmark */; + 6B324D6C1121DE7A00EBD2FD /* PBXTextBookmark */ = 6B324D6C1121DE7A00EBD2FD /* PBXTextBookmark */; + 6B324D6D1121DE7A00EBD2FD /* PBXTextBookmark */ = 6B324D6D1121DE7A00EBD2FD /* PBXTextBookmark */; + 6B324D6E1121DE7A00EBD2FD /* PBXTextBookmark */ = 6B324D6E1121DE7A00EBD2FD /* PBXTextBookmark */; + 6B324D6F1121DE7A00EBD2FD /* PBXTextBookmark */ = 6B324D6F1121DE7A00EBD2FD /* PBXTextBookmark */; + 6B324D701121DE7A00EBD2FD /* PBXTextBookmark */ = 6B324D701121DE7A00EBD2FD /* PBXTextBookmark */; + 6B324D711121DE7A00EBD2FD /* PBXTextBookmark */ = 6B324D711121DE7A00EBD2FD /* PBXTextBookmark */; + 6B324D721121DE7A00EBD2FD /* PBXTextBookmark */ = 6B324D721121DE7A00EBD2FD /* PBXTextBookmark */; + 6B324D731121DE7A00EBD2FD /* PBXTextBookmark */ = 6B324D731121DE7A00EBD2FD /* PBXTextBookmark */; + 6B324D741121DE7A00EBD2FD /* PBXTextBookmark */ = 6B324D741121DE7A00EBD2FD /* PBXTextBookmark */; + 6B324D751121DE7A00EBD2FD /* PBXTextBookmark */ = 6B324D751121DE7A00EBD2FD /* PBXTextBookmark */; + 6B324D761121DE7A00EBD2FD /* PBXTextBookmark */ = 6B324D761121DE7A00EBD2FD /* PBXTextBookmark */; + 6B324D771121DE7A00EBD2FD /* PBXTextBookmark */ = 6B324D771121DE7A00EBD2FD /* PBXTextBookmark */; + 6B324D781121DE7A00EBD2FD /* PBXTextBookmark */ = 6B324D781121DE7A00EBD2FD /* PBXTextBookmark */; + 6B324D791121DE7A00EBD2FD /* PBXTextBookmark */ = 6B324D791121DE7A00EBD2FD /* PBXTextBookmark */; + 6B324D7A1121DE7A00EBD2FD /* PBXTextBookmark */ = 6B324D7A1121DE7A00EBD2FD /* PBXTextBookmark */; + 6B324D7B1121DE7A00EBD2FD /* PBXTextBookmark */ = 6B324D7B1121DE7A00EBD2FD /* PBXTextBookmark */; + 6B324D7C1121DE7A00EBD2FD /* PBXTextBookmark */ = 6B324D7C1121DE7A00EBD2FD /* PBXTextBookmark */; + 6B324D7D1121DE7A00EBD2FD /* PBXTextBookmark */ = 6B324D7D1121DE7A00EBD2FD /* PBXTextBookmark */; + 6B324D7E1121DE7A00EBD2FD /* PBXTextBookmark */ = 6B324D7E1121DE7A00EBD2FD /* PBXTextBookmark */; + 6B324D7F1121DE7A00EBD2FD /* PBXTextBookmark */ = 6B324D7F1121DE7A00EBD2FD /* PBXTextBookmark */; + 6B324D801121DE7A00EBD2FD /* PBXTextBookmark */ = 6B324D801121DE7A00EBD2FD /* PBXTextBookmark */; + 6B324D8111253B8E00EBD2FD /* PBXTextBookmark */ = 6B324D8111253B8E00EBD2FD /* PBXTextBookmark */; + 6B324D8211253B8E00EBD2FD /* PBXTextBookmark */ = 6B324D8211253B8E00EBD2FD /* PBXTextBookmark */; + 6B324D8311253B8E00EBD2FD /* PBXTextBookmark */ = 6B324D8311253B8E00EBD2FD /* PBXTextBookmark */; + 6B324D8411253B8E00EBD2FD /* PBXTextBookmark */ = 6B324D8411253B8E00EBD2FD /* PBXTextBookmark */; + 6B324D8511253B8E00EBD2FD /* PBXTextBookmark */ = 6B324D8511253B8E00EBD2FD /* PBXTextBookmark */; + 6B324D8611253BD300EBD2FD /* PBXTextBookmark */ = 6B324D8611253BD300EBD2FD /* PBXTextBookmark */; + 6B324D8711253FD300EBD2FD /* PBXTextBookmark */ = 6B324D8711253FD300EBD2FD /* PBXTextBookmark */; + 6B324D92112542DA00EBD2FD /* PBXTextBookmark */ = 6B324D92112542DA00EBD2FD /* PBXTextBookmark */; + 6B324D93112542DA00EBD2FD /* PBXTextBookmark */ = 6B324D93112542DA00EBD2FD /* PBXTextBookmark */; + 6B324D94112542DA00EBD2FD /* PBXTextBookmark */ = 6B324D94112542DA00EBD2FD /* PBXTextBookmark */; + 6B324D95112542DA00EBD2FD /* PBXTextBookmark */ = 6B324D95112542DA00EBD2FD /* PBXTextBookmark */; + 6B324D96112542DA00EBD2FD /* PBXTextBookmark */ = 6B324D96112542DA00EBD2FD /* PBXTextBookmark */; + 6B324D97112542DA00EBD2FD /* PBXTextBookmark */ = 6B324D97112542DA00EBD2FD /* PBXTextBookmark */; + 6B324D98112542DA00EBD2FD /* PBXTextBookmark */ = 6B324D98112542DA00EBD2FD /* PBXTextBookmark */; + 6B324DAD112548EF00EBD2FD /* PBXTextBookmark */ = 6B324DAD112548EF00EBD2FD /* PBXTextBookmark */; + 6B324DAE112548EF00EBD2FD /* PBXTextBookmark */ = 6B324DAE112548EF00EBD2FD /* PBXTextBookmark */; + 6B324DB11125492F00EBD2FD /* PBXTextBookmark */ = 6B324DB11125492F00EBD2FD /* PBXTextBookmark */; + 6B324DB21125492F00EBD2FD /* PBXTextBookmark */ = 6B324DB21125492F00EBD2FD /* PBXTextBookmark */; + 6B324DB31125492F00EBD2FD /* PBXTextBookmark */ = 6B324DB31125492F00EBD2FD /* PBXTextBookmark */; + 6B324DB41125492F00EBD2FD /* PBXTextBookmark */ = 6B324DB41125492F00EBD2FD /* PBXTextBookmark */; + 6B324DB51125494100EBD2FD /* PBXTextBookmark */ = 6B324DB51125494100EBD2FD /* PBXTextBookmark */; + 6B324DB91125495F00EBD2FD /* PBXTextBookmark */ = 6B324DB91125495F00EBD2FD /* PBXTextBookmark */; + 6B324DBD112549C000EBD2FD /* PBXTextBookmark */ = 6B324DBD112549C000EBD2FD /* PBXTextBookmark */; + 6B324DBF11254A8400EBD2FD /* PBXTextBookmark */ = 6B324DBF11254A8400EBD2FD /* PBXTextBookmark */; + 6B324DC211254B0C00EBD2FD /* PBXTextBookmark */ = 6B324DC211254B0C00EBD2FD /* PBXTextBookmark */; + 6B324DC311254B0C00EBD2FD /* PBXTextBookmark */ = 6B324DC311254B0C00EBD2FD /* PBXTextBookmark */; + 6B324DC411254B0C00EBD2FD /* PBXTextBookmark */ = 6B324DC411254B0C00EBD2FD /* PBXTextBookmark */; + 6B324DC511254B0C00EBD2FD /* PBXTextBookmark */ = 6B324DC511254B0C00EBD2FD /* PBXTextBookmark */; + 6B324DC611254B0C00EBD2FD /* PBXTextBookmark */ = 6B324DC611254B0C00EBD2FD /* PBXTextBookmark */; + 6B324DC911254B2E00EBD2FD /* PBXTextBookmark */ = 6B324DC911254B2E00EBD2FD /* PBXTextBookmark */; + 6B324DCA11254B2E00EBD2FD /* PBXTextBookmark */ = 6B324DCA11254B2E00EBD2FD /* PBXTextBookmark */; + 6B324DCB11254B2E00EBD2FD /* PBXTextBookmark */ = 6B324DCB11254B2E00EBD2FD /* PBXTextBookmark */; + 6B324DCD11254E0400EBD2FD /* PBXTextBookmark */ = 6B324DCD11254E0400EBD2FD /* PBXTextBookmark */; + 6B324DCE11254E0400EBD2FD /* PBXTextBookmark */ = 6B324DCE11254E0400EBD2FD /* PBXTextBookmark */; + 6B324DCF11254E0400EBD2FD /* PBXTextBookmark */ = 6B324DCF11254E0400EBD2FD /* PBXTextBookmark */; + 6B324DD011254E0400EBD2FD /* PBXTextBookmark */ = 6B324DD011254E0400EBD2FD /* PBXTextBookmark */; + 6B324DD111254E0400EBD2FD /* PBXTextBookmark */ = 6B324DD111254E0400EBD2FD /* PBXTextBookmark */; + 6B324DD311254EE300EBD2FD /* PBXTextBookmark */ = 6B324DD311254EE300EBD2FD /* PBXTextBookmark */; + 6B324DD81125503700EBD2FD /* PBXTextBookmark */ = 6B324DD81125503700EBD2FD /* PBXTextBookmark */; + 6B324DDE112550BF00EBD2FD /* PBXTextBookmark */ = 6B324DDE112550BF00EBD2FD /* PBXTextBookmark */; + 6B324DE21125511B00EBD2FD /* PBXTextBookmark */ = 6B324DE21125511B00EBD2FD /* PBXTextBookmark */; + 6B324DE31125511B00EBD2FD /* PBXTextBookmark */ = 6B324DE31125511B00EBD2FD /* PBXTextBookmark */; + 6B324DE41125511B00EBD2FD /* PBXTextBookmark */ = 6B324DE41125511B00EBD2FD /* PBXTextBookmark */; + 6B324DE51125511B00EBD2FD /* PBXTextBookmark */ = 6B324DE51125511B00EBD2FD /* PBXTextBookmark */; + 6B324DE61125511B00EBD2FD /* PBXTextBookmark */ = 6B324DE61125511B00EBD2FD /* PBXTextBookmark */; + 6B324DE8112552C200EBD2FD /* PBXTextBookmark */ = 6B324DE8112552C200EBD2FD /* PBXTextBookmark */; + 6B324DE9112552C200EBD2FD /* PBXTextBookmark */ = 6B324DE9112552C200EBD2FD /* PBXTextBookmark */; + 6B324DEA112552C200EBD2FD /* PBXTextBookmark */ = 6B324DEA112552C200EBD2FD /* PBXTextBookmark */; + 6B324DEB112552C200EBD2FD /* PBXTextBookmark */ = 6B324DEB112552C200EBD2FD /* PBXTextBookmark */; + 6B324DEC112552C200EBD2FD /* PBXTextBookmark */ = 6B324DEC112552C200EBD2FD /* PBXTextBookmark */; + 6B324DED112552C200EBD2FD /* PBXTextBookmark */ = 6B324DED112552C200EBD2FD /* PBXTextBookmark */; + 6B324DEF112552DE00EBD2FD /* PBXTextBookmark */ = 6B324DEF112552DE00EBD2FD /* PBXTextBookmark */; + 6B324DF21125531100EBD2FD /* PBXTextBookmark */ = 6B324DF21125531100EBD2FD /* PBXTextBookmark */; + 6B324DF31125531100EBD2FD /* PBXTextBookmark */ = 6B324DF31125531100EBD2FD /* PBXTextBookmark */; + 6B324DF41125531100EBD2FD /* PBXTextBookmark */ = 6B324DF41125531100EBD2FD /* PBXTextBookmark */; + 6B324DF51125531100EBD2FD /* PBXTextBookmark */ = 6B324DF51125531100EBD2FD /* PBXTextBookmark */; + 6B324DF91125534000EBD2FD /* PBXTextBookmark */ = 6B324DF91125534000EBD2FD /* PBXTextBookmark */; + 6B324DFA1125534000EBD2FD /* PBXTextBookmark */ = 6B324DFA1125534000EBD2FD /* PBXTextBookmark */; + 6B324DFB1125534000EBD2FD /* PBXTextBookmark */ = 6B324DFB1125534000EBD2FD /* PBXTextBookmark */; + 6B324DFC1125534000EBD2FD /* PBXTextBookmark */ = 6B324DFC1125534000EBD2FD /* PBXTextBookmark */; + 6B324DFF1125535800EBD2FD /* PBXTextBookmark */ = 6B324DFF1125535800EBD2FD /* PBXTextBookmark */; + 6B324E001125535800EBD2FD /* PBXTextBookmark */ = 6B324E001125535800EBD2FD /* PBXTextBookmark */; + 6B324E011125535800EBD2FD /* PBXTextBookmark */ = 6B324E011125535800EBD2FD /* PBXTextBookmark */; + 6B324E021125535800EBD2FD /* PBXTextBookmark */ = 6B324E021125535800EBD2FD /* PBXTextBookmark */; + 6B324E031125535800EBD2FD /* PBXTextBookmark */ = 6B324E031125535800EBD2FD /* PBXTextBookmark */; + 6B324E041125535800EBD2FD /* PBXTextBookmark */ = 6B324E041125535800EBD2FD /* PBXTextBookmark */; + 6B324E061125554800EBD2FD /* PBXTextBookmark */ = 6B324E061125554800EBD2FD /* PBXTextBookmark */; + 6B324E071125554800EBD2FD /* PBXTextBookmark */ = 6B324E071125554800EBD2FD /* PBXTextBookmark */; + 6B324E081125554800EBD2FD /* PBXTextBookmark */ = 6B324E081125554800EBD2FD /* PBXTextBookmark */; + 6B324E091125554800EBD2FD /* PBXTextBookmark */ = 6B324E091125554800EBD2FD /* PBXTextBookmark */; + 6B324E0A1125554800EBD2FD /* PBXTextBookmark */ = 6B324E0A1125554800EBD2FD /* PBXTextBookmark */; + 6B324E0B1125554800EBD2FD /* PBXTextBookmark */ = 6B324E0B1125554800EBD2FD /* PBXTextBookmark */; + 6B324E0C1125554800EBD2FD /* PBXTextBookmark */ = 6B324E0C1125554800EBD2FD /* PBXTextBookmark */; + 6B324E0D1125554800EBD2FD /* PBXTextBookmark */ = 6B324E0D1125554800EBD2FD /* PBXTextBookmark */; + 6B324E0E1125554800EBD2FD /* PBXTextBookmark */ = 6B324E0E1125554800EBD2FD /* PBXTextBookmark */; + 6B324E0F1125554800EBD2FD /* PBXTextBookmark */ = 6B324E0F1125554800EBD2FD /* PBXTextBookmark */; + 6B324E101125554800EBD2FD /* PBXTextBookmark */ = 6B324E101125554800EBD2FD /* PBXTextBookmark */; + 6B324E111125554800EBD2FD /* PBXTextBookmark */ = 6B324E111125554800EBD2FD /* PBXTextBookmark */; + 6B324E121125559400EBD2FD /* PBXTextBookmark */ = 6B324E121125559400EBD2FD /* PBXTextBookmark */; + 6B324E13112555CF00EBD2FD /* PBXTextBookmark */ = 6B324E13112555CF00EBD2FD /* PBXTextBookmark */; + 6B324E14112555CF00EBD2FD /* PBXTextBookmark */ = 6B324E14112555CF00EBD2FD /* PBXTextBookmark */; + 6B324E15112555CF00EBD2FD /* PBXTextBookmark */ = 6B324E15112555CF00EBD2FD /* PBXTextBookmark */; + 6B324E17112555F200EBD2FD /* PBXTextBookmark */ = 6B324E17112555F200EBD2FD /* PBXTextBookmark */; + 6B324E181125566A00EBD2FD /* PBXTextBookmark */ = 6B324E181125566A00EBD2FD /* PBXTextBookmark */; + 6B324E191125566A00EBD2FD /* PBXTextBookmark */ = 6B324E191125566A00EBD2FD /* PBXTextBookmark */; + 6B324E1A1125566A00EBD2FD /* PBXTextBookmark */ = 6B324E1A1125566A00EBD2FD /* PBXTextBookmark */; + 6B324E1B1125566A00EBD2FD /* PBXTextBookmark */ = 6B324E1B1125566A00EBD2FD /* PBXTextBookmark */; + 6B324E1C1125566A00EBD2FD /* PBXTextBookmark */ = 6B324E1C1125566A00EBD2FD /* PBXTextBookmark */; + 6B324E1D1125566A00EBD2FD /* PBXTextBookmark */ = 6B324E1D1125566A00EBD2FD /* PBXTextBookmark */; + 6B324E201125568100EBD2FD /* PBXTextBookmark */ = 6B324E201125568100EBD2FD /* PBXTextBookmark */; + 6B324E211125568100EBD2FD /* PBXTextBookmark */ = 6B324E211125568100EBD2FD /* PBXTextBookmark */; + 6B324E221125568100EBD2FD /* PBXTextBookmark */ = 6B324E221125568100EBD2FD /* PBXTextBookmark */; + 6B324E231125568100EBD2FD /* PBXTextBookmark */ = 6B324E231125568100EBD2FD /* PBXTextBookmark */; 6B69739F10FFCA4500984788 = 6B69739F10FFCA4500984788 /* PBXTextBookmark */; 6B6973A210FFCA4500984788 = 6B6973A210FFCA4500984788 /* PBXTextBookmark */; 6B8DE70D10B01BBF00DF20FB = 6B8DE70D10B01BBF00DF20FB /* PBXTextBookmark */; @@ -995,9 +1191,9 @@ }; 6B137C7E0F7FCBFE00459200 /* Recast.h */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {815, 9184}}"; - sepNavSelRange = "{18922, 0}"; - sepNavVisRange = "{18110, 1493}"; + sepNavIntBoundsRect = "{{0, 0}, {815, 9920}}"; + sepNavSelRange = "{3596, 0}"; + sepNavVisRange = "{2909, 969}"; }; }; 6B137C800F7FCBFE00459200 /* RecastLog.h */ = { @@ -1009,17 +1205,17 @@ }; 6B137C810F7FCBFE00459200 /* RecastTimer.h */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {915, 561}}"; - sepNavSelRange = "{1000, 0}"; + sepNavIntBoundsRect = "{{0, 0}, {815, 513}}"; + sepNavSelRange = "{981, 0}"; sepNavVisRange = "{0, 1186}"; sepNavWindowFrame = "{{15, 78}, {1011, 695}}"; }; }; 6B137C820F7FCC1100459200 /* Recast.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {815, 4256}}"; - sepNavSelRange = "{7159, 77}"; - sepNavVisRange = "{6663, 752}"; + sepNavIntBoundsRect = "{{0, 0}, {815, 4432}}"; + sepNavSelRange = "{3188, 0}"; + sepNavVisRange = "{2892, 689}"; }; }; 6B137C830F7FCC1100459200 /* RecastContour.cpp */ = { @@ -1053,9 +1249,9 @@ }; 6B137C880F7FCC1100459200 /* RecastRasterization.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {1195, 6144}}"; - sepNavSelRange = "{9841, 0}"; - sepNavVisRange = "{3419, 297}"; + sepNavIntBoundsRect = "{{0, 0}, {815, 5632}}"; + sepNavSelRange = "{1836, 0}"; + sepNavVisRange = "{1732, 859}"; }; }; 6B137C890F7FCC1100459200 /* RecastRegion.cpp */ = { @@ -1068,15 +1264,15 @@ 6B137C8A0F7FCC1100459200 /* RecastTimer.cpp */ = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {815, 688}}"; - sepNavSelRange = "{471, 0}"; - sepNavVisRange = "{196, 476}"; + sepNavSelRange = "{427, 0}"; + sepNavVisRange = "{0, 549}"; }; }; 6B25B6100FFA62AD004F1BC4 /* Sample.h */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {815, 2112}}"; - sepNavSelRange = "{2150, 0}"; - sepNavVisRange = "{1826, 688}"; + sepNavIntBoundsRect = "{{0, 0}, {815, 2000}}"; + sepNavSelRange = "{1310, 0}"; + sepNavVisRange = "{1016, 982}"; }; }; 6B25B6140FFA62BE004F1BC4 /* Sample.cpp */ = { @@ -1088,9 +1284,9 @@ }; 6B25B6180FFA62BE004F1BC4 /* main.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {815, 13668}}"; - sepNavSelRange = "{4244, 0}"; - sepNavVisRange = "{3980, 635}"; + sepNavIntBoundsRect = "{{0, 0}, {1195, 13488}}"; + sepNavSelRange = "{3186, 0}"; + sepNavVisRange = "{3007, 310}"; }; }; 6B2AEC510FFB8946005BE9CC /* Sample_TileMesh.h */ = { @@ -1204,7 +1400,7 @@ fRef = 6B8DE88710B69E3E00DF20FB /* DetourNavMesh.cpp */; name = "DetourNavMesh.cpp: 636"; rLen = 0; - rLoc = 17953; + rLoc = 18019; rType = 0; vrLen = 653; vrLoc = 17536; @@ -1234,7 +1430,7 @@ fRef = 6B8DE88710B69E3E00DF20FB /* DetourNavMesh.cpp */; name = "DetourNavMesh.cpp: 636"; rLen = 0; - rLoc = 17953; + rLoc = 18019; rType = 0; vrLen = 653; vrLoc = 17536; @@ -1725,7 +1921,7 @@ fRef = 6B8DE88B10B69E4C00DF20FB /* DetourNavMesh.h */; name = "DetourNavMesh.h: 446"; rLen = 0; - rLoc = 20056; + rLoc = 19911; rType = 0; vrLen = 1563; vrLoc = 18834; @@ -1735,7 +1931,7 @@ fRef = 6B8DE88710B69E3E00DF20FB /* DetourNavMesh.cpp */; name = "DetourNavMesh.cpp: 1288"; rLen = 15; - rLoc = 35081; + rLoc = 36235; rType = 0; vrLen = 913; vrLoc = 34283; @@ -1755,7 +1951,7 @@ fRef = 6B8DE88710B69E3E00DF20FB /* DetourNavMesh.cpp */; name = "DetourNavMesh.cpp: 1288"; rLen = 15; - rLoc = 35081; + rLoc = 36235; rType = 0; vrLen = 913; vrLoc = 34283; @@ -1765,7 +1961,7 @@ fRef = 6B8DE88B10B69E4C00DF20FB /* DetourNavMesh.h */; name = "DetourNavMesh.h: 446"; rLen = 0; - rLoc = 20056; + rLoc = 19911; rType = 0; vrLen = 1563; vrLoc = 18834; @@ -1775,7 +1971,7 @@ fRef = 6B8DE88710B69E3E00DF20FB /* DetourNavMesh.cpp */; name = "DetourNavMesh.cpp: 1584"; rLen = 0; - rLoc = 43371; + rLoc = 44962; rType = 0; vrLen = 966; vrLoc = 44805; @@ -1785,7 +1981,7 @@ fRef = 6B8DE88710B69E3E00DF20FB /* DetourNavMesh.cpp */; name = "DetourNavMesh.cpp: 1670"; rLen = 0; - rLoc = 46183; + rLoc = 48613; rType = 0; vrLen = 874; vrLoc = 45419; @@ -1835,7 +2031,7 @@ fRef = 6B8DE88710B69E3E00DF20FB /* DetourNavMesh.cpp */; name = "DetourNavMesh.cpp: 1659"; rLen = 0; - rLoc = 45774; + rLoc = 48204; rType = 0; vrLen = 966; vrLoc = 44805; @@ -1845,7 +2041,7 @@ fRef = 6B8DE88B10B69E4C00DF20FB /* DetourNavMesh.h */; name = "DetourNavMesh.h: 439"; rLen = 0; - rLoc = 19587; + rLoc = 19731; rType = 0; vrLen = 1637; vrLoc = 18794; @@ -1855,7 +2051,7 @@ fRef = 6B8DE88710B69E3E00DF20FB /* DetourNavMesh.cpp */; name = "DetourNavMesh.cpp: 1670"; rLen = 0; - rLoc = 46183; + rLoc = 48613; rType = 0; vrLen = 874; vrLoc = 45419; @@ -1995,7 +2191,7 @@ fRef = 6B8DE88710B69E3E00DF20FB /* DetourNavMesh.cpp */; name = "DetourNavMesh.cpp: 424"; rLen = 0; - rLoc = 11866; + rLoc = 11932; rType = 0; vrLen = 455; vrLoc = 11543; @@ -2032,7 +2228,7 @@ fRef = 6B8DE88710B69E3E00DF20FB /* DetourNavMesh.cpp */; name = "DetourNavMesh.cpp: 830"; rLen = 30; - rLoc = 22885; + rLoc = 22951; rType = 0; vrLen = 710; vrLoc = 22465; @@ -2082,7 +2278,7 @@ fRef = 6B8DE88710B69E3E00DF20FB /* DetourNavMesh.cpp */; name = "DetourNavMesh.cpp: 424"; rLen = 0; - rLoc = 11866; + rLoc = 11932; rType = 0; vrLen = 455; vrLoc = 11543; @@ -2102,7 +2298,7 @@ fRef = 6BB7FC0A10EBB6AA006DA0A6 /* NavMeshTesterTool.cpp */; name = "NavMeshTesterTool.cpp: 158"; rLen = 0; - rLoc = 4845; + rLoc = 5216; rType = 0; vrLen = 691; vrLoc = 3831; @@ -2112,7 +2308,7 @@ fRef = 6BB7FC0A10EBB6AA006DA0A6 /* NavMeshTesterTool.cpp */; name = "NavMeshTesterTool.cpp: 158"; rLen = 0; - rLoc = 4845; + rLoc = 5216; rType = 0; vrLen = 646; vrLoc = 3816; @@ -2132,7 +2328,7 @@ comments = "error: no matching function for call to 'dtNavMesh::getPortalPoints(dtPolyRef&, dtPolyRef&, float [3], float [3], short unsigned int&, short unsigned int&) const'"; fRef = 6B8DE88710B69E3E00DF20FB /* DetourNavMesh.cpp */; rLen = 0; - rLoc = 1653; + rLoc = 1712; rType = 1; }; 6B324B21111C10C700EBD2FD /* PBXTextBookmark */ = { @@ -2140,7 +2336,7 @@ fRef = 6BB7FC0A10EBB6AA006DA0A6 /* NavMeshTesterTool.cpp */; name = "NavMeshTesterTool.cpp: 158"; rLen = 0; - rLoc = 4845; + rLoc = 5216; rType = 0; vrLen = 646; vrLoc = 3816; @@ -2150,7 +2346,7 @@ fRef = 6B8DE88710B69E3E00DF20FB /* DetourNavMesh.cpp */; name = "DetourNavMesh.cpp: 1526"; rLen = 0; - rLoc = 41426; + rLoc = 42580; rType = 0; vrLen = 656; vrLoc = 40827; @@ -2170,7 +2366,7 @@ fRef = 6B8DE88710B69E3E00DF20FB /* DetourNavMesh.cpp */; name = "DetourNavMesh.cpp: 1636"; rLen = 0; - rLoc = 44972; + rLoc = 46518; rType = 0; vrLen = 644; vrLoc = 44542; @@ -2180,7 +2376,7 @@ fRef = 6B8DE88710B69E3E00DF20FB /* DetourNavMesh.cpp */; name = "DetourNavMesh.cpp: 1633"; rLen = 0; - rLoc = 44954; + rLoc = 46516; rType = 0; vrLen = 970; vrLoc = 44297; @@ -2240,7 +2436,7 @@ fRef = 6BA1E88810C7BFC9008007F6 /* Sample_SoloMeshSimple.cpp */; name = "Sample_SoloMeshSimple.cpp: 582"; rLen = 0; - rLoc = 18291; + rLoc = 18292; rType = 0; vrLen = 1059; vrLoc = 17413; @@ -2270,7 +2466,7 @@ fRef = 6B8DE88710B69E3E00DF20FB /* DetourNavMesh.cpp */; name = "DetourNavMesh.cpp: 1633"; rLen = 0; - rLoc = 44954; + rLoc = 46516; rType = 0; vrLen = 970; vrLoc = 44297; @@ -2330,7 +2526,7 @@ fRef = 6BA1E88810C7BFC9008007F6 /* Sample_SoloMeshSimple.cpp */; name = "Sample_SoloMeshSimple.cpp: 590"; rLen = 128; - rLoc = 18748; + rLoc = 18749; rType = 0; vrLen = 1046; vrLoc = 17413; @@ -2370,7 +2566,7 @@ fRef = 6BA1E88810C7BFC9008007F6 /* Sample_SoloMeshSimple.cpp */; name = "Sample_SoloMeshSimple.cpp: 582"; rLen = 0; - rLoc = 18291; + rLoc = 18292; rType = 0; vrLen = 1059; vrLoc = 17413; @@ -2440,7 +2636,7 @@ fRef = 6BB7FC0A10EBB6AA006DA0A6 /* NavMeshTesterTool.cpp */; name = "NavMeshTesterTool.cpp: 174"; rLen = 0; - rLoc = 4573; + rLoc = 4944; rType = 0; vrLen = 717; vrLoc = 3938; @@ -2470,7 +2666,7 @@ fRef = 6BA1E88810C7BFC9008007F6 /* Sample_SoloMeshSimple.cpp */; name = "Sample_SoloMeshSimple.cpp: 580"; rLen = 0; - rLoc = 17579; + rLoc = 17580; rType = 0; vrLen = 889; vrLoc = 17240; @@ -2588,7 +2784,7 @@ fRef = 6BA1E88810C7BFC9008007F6 /* Sample_SoloMeshSimple.cpp */; name = "Sample_SoloMeshSimple.cpp: 591"; rLen = 0; - rLoc = 18036; + rLoc = 18037; rType = 0; vrLen = 894; vrLoc = 17240; @@ -2598,7 +2794,7 @@ fRef = 6BB7FC0A10EBB6AA006DA0A6 /* NavMeshTesterTool.cpp */; name = "NavMeshTesterTool.cpp: 158"; rLen = 0; - rLoc = 4845; + rLoc = 5216; rType = 0; vrLen = 793; vrLoc = 3686; @@ -2618,7 +2814,7 @@ fRef = 6BB7FC0A10EBB6AA006DA0A6 /* NavMeshTesterTool.cpp */; name = "NavMeshTesterTool.cpp: 174"; rLen = 0; - rLoc = 4573; + rLoc = 4944; rType = 0; vrLen = 717; vrLoc = 3938; @@ -2648,7 +2844,7 @@ fRef = 6BA1E88810C7BFC9008007F6 /* Sample_SoloMeshSimple.cpp */; name = "Sample_SoloMeshSimple.cpp: 580"; rLen = 0; - rLoc = 17579; + rLoc = 17580; rType = 0; vrLen = 889; vrLoc = 17240; @@ -2928,7 +3124,7 @@ fRef = 6BB7FC0A10EBB6AA006DA0A6 /* NavMeshTesterTool.cpp */; name = "NavMeshTesterTool.cpp: 174"; rLen = 0; - rLoc = 4573; + rLoc = 4944; rType = 0; vrLen = 714; vrLoc = 3941; @@ -2948,7 +3144,7 @@ fRef = 6BB7FC0A10EBB6AA006DA0A6 /* NavMeshTesterTool.cpp */; name = "NavMeshTesterTool.cpp: 158"; rLen = 0; - rLoc = 4108; + rLoc = 4479; rType = 0; vrLen = 739; vrLoc = 3876; @@ -2958,7 +3154,7 @@ fRef = 6B8DE88710B69E3E00DF20FB /* DetourNavMesh.cpp */; name = "DetourNavMesh.cpp: 426"; rLen = 0; - rLoc = 11884; + rLoc = 11950; rType = 0; vrLen = 816; vrLoc = 11546; @@ -2968,7 +3164,7 @@ fRef = 6BB7FC0A10EBB6AA006DA0A6 /* NavMeshTesterTool.cpp */; name = "NavMeshTesterTool.cpp: 158"; rLen = 0; - rLoc = 4108; + rLoc = 4479; rType = 0; vrLen = 757; vrLoc = 3876; @@ -2978,7 +3174,7 @@ fRef = 6BB7FC0A10EBB6AA006DA0A6 /* NavMeshTesterTool.cpp */; name = "NavMeshTesterTool.cpp: 158"; rLen = 0; - rLoc = 4108; + rLoc = 4479; rType = 0; vrLen = 758; vrLoc = 3876; @@ -2988,7 +3184,7 @@ fRef = 6B8DE88710B69E3E00DF20FB /* DetourNavMesh.cpp */; name = "DetourNavMesh.cpp: 426"; rLen = 0; - rLoc = 11884; + rLoc = 11950; rType = 0; vrLen = 816; vrLoc = 11546; @@ -2998,7 +3194,7 @@ fRef = 6BB7FC0A10EBB6AA006DA0A6 /* NavMeshTesterTool.cpp */; name = "NavMeshTesterTool.cpp: 276"; rLen = 22; - rLoc = 6946; + rLoc = 7317; rType = 0; vrLen = 1008; vrLoc = 8088; @@ -3008,7 +3204,7 @@ fRef = 6BB7FC0A10EBB6AA006DA0A6 /* NavMeshTesterTool.cpp */; name = "NavMeshTesterTool.cpp: 276"; rLen = 22; - rLoc = 6946; + rLoc = 7317; rType = 0; vrLen = 1081; vrLoc = 8088; @@ -3028,7 +3224,7 @@ fRef = 6BB7FC0A10EBB6AA006DA0A6 /* NavMeshTesterTool.cpp */; name = "NavMeshTesterTool.cpp: 276"; rLen = 22; - rLoc = 6946; + rLoc = 7317; rType = 0; vrLen = 1081; vrLoc = 8088; @@ -3188,7 +3384,7 @@ fRef = 6B8DE88710B69E3E00DF20FB /* DetourNavMesh.cpp */; name = "DetourNavMesh.cpp: 905"; rLen = 1; - rLoc = 24733; + rLoc = 24799; rType = 0; vrLen = 820; vrLoc = 24435; @@ -3228,7 +3424,7 @@ fRef = 6B8DE88710B69E3E00DF20FB /* DetourNavMesh.cpp */; name = "DetourNavMesh.cpp: 912"; rLen = 51; - rLoc = 24861; + rLoc = 24927; rType = 0; vrLen = 897; vrLoc = 24711; @@ -3248,7 +3444,7 @@ fRef = 6B8DE88710B69E3E00DF20FB /* DetourNavMesh.cpp */; name = "DetourNavMesh.cpp: 912"; rLen = 0; - rLoc = 24866; + rLoc = 24932; rType = 0; vrLen = 898; vrLoc = 24711; @@ -3268,7 +3464,7 @@ fRef = 6B8DE88710B69E3E00DF20FB /* DetourNavMesh.cpp */; name = "DetourNavMesh.cpp: 1663"; rLen = 0; - rLoc = 45359; + rLoc = 46905; rType = 0; vrLen = 1061; vrLoc = 44826; @@ -3278,7 +3474,7 @@ fRef = 6B8DE88B10B69E4C00DF20FB /* DetourNavMesh.h */; name = "DetourNavMesh.h: 460"; rLen = 0; - rLoc = 20010; + rLoc = 19865; rType = 0; vrLen = 1696; vrLoc = 19209; @@ -3288,7 +3484,7 @@ fRef = 6B8DE88710B69E3E00DF20FB /* DetourNavMesh.cpp */; name = "DetourNavMesh.cpp: 1559"; rLen = 0; - rLoc = 41900; + rLoc = 44176; rType = 0; vrLen = 1065; vrLoc = 41625; @@ -3298,7 +3494,7 @@ fRef = 6B8DE88B10B69E4C00DF20FB /* DetourNavMesh.h */; name = "DetourNavMesh.h: 460"; rLen = 0; - rLoc = 20010; + rLoc = 19865; rType = 0; vrLen = 1708; vrLoc = 19209; @@ -3308,7 +3504,7 @@ fRef = 6B8DE88710B69E3E00DF20FB /* DetourNavMesh.cpp */; name = "DetourNavMesh.cpp: 1659"; rLen = 0; - rLoc = 45101; + rLoc = 46647; rType = 0; vrLen = 1099; vrLoc = 44826; @@ -3318,7 +3514,7 @@ fRef = 6B8DE88B10B69E4C00DF20FB /* DetourNavMesh.h */; name = "DetourNavMesh.h: 463"; rLen = 0; - rLoc = 20176; + rLoc = 20240; rType = 0; vrLen = 1706; vrLoc = 19209; @@ -3328,7 +3524,7 @@ fRef = 6B8DE88710B69E3E00DF20FB /* DetourNavMesh.cpp */; name = "DetourNavMesh.cpp: 915"; rLen = 0; - rLoc = 24979; + rLoc = 25045; rType = 0; vrLen = 820; vrLoc = 24435; @@ -3348,7 +3544,7 @@ fRef = 6B8DE88710B69E3E00DF20FB /* DetourNavMesh.cpp */; name = "DetourNavMesh.cpp: 905"; rLen = 1; - rLoc = 24733; + rLoc = 24799; rType = 0; vrLen = 820; vrLoc = 24435; @@ -3438,7 +3634,7 @@ fRef = 6B8DE88710B69E3E00DF20FB /* DetourNavMesh.cpp */; name = "DetourNavMesh.cpp: 906"; rLen = 0; - rLoc = 24734; + rLoc = 24800; rType = 0; vrLen = 820; vrLoc = 24435; @@ -3488,7 +3684,7 @@ fRef = 6B8DE88710B69E3E00DF20FB /* DetourNavMesh.cpp */; name = "DetourNavMesh.cpp: 906"; rLen = 0; - rLoc = 24734; + rLoc = 24800; rType = 0; vrLen = 820; vrLoc = 24435; @@ -3667,7 +3863,7 @@ ignoreCount = 0; lineNumber = 27; location = Recast; - modificationTime = 287078558.541171; + modificationTime = 287658767.511823; state = 1; }; 6B324BE7111C511900EBD2FD /* PBXTextBookmark */ = { @@ -4005,7 +4201,7 @@ fRef = 6BA1E88810C7BFC9008007F6 /* Sample_SoloMeshSimple.cpp */; name = "Sample_SoloMeshSimple.cpp: 480"; rLen = 0; - rLoc = 14895; + rLoc = 14896; rType = 0; vrLen = 743; vrLoc = 14600; @@ -4213,7 +4409,7 @@ fRef = 6BA1E88810C7BFC9008007F6 /* Sample_SoloMeshSimple.cpp */; name = "Sample_SoloMeshSimple.cpp: 480"; rLen = 0; - rLoc = 14895; + rLoc = 14896; rType = 0; vrLen = 743; vrLoc = 14600; @@ -4592,9 +4788,9 @@ }; 6B324C65111C5D9A00EBD2FD /* ConvexVolumeTool.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {815, 4288}}"; - sepNavSelRange = "{2503, 0}"; - sepNavVisRange = "{2175, 546}"; + sepNavIntBoundsRect = "{{0, 0}, {815, 4112}}"; + sepNavSelRange = "{5520, 0}"; + sepNavVisRange = "{5327, 620}"; }; }; 6B324C6D111C5DDC00EBD2FD /* PBXTextBookmark */ = { @@ -4621,7 +4817,7 @@ isa = PBXTextBookmark; fRef = 6B324C65111C5D9A00EBD2FD /* ConvexVolumeTool.cpp */; rLen = 0; - rLoc = 2147483044; + rLoc = 2147483257; rType = 0; }; 6B324C70111C5DDC00EBD2FD /* PBXTextBookmark */ = { @@ -4907,7 +5103,7 @@ fRef = 6B324C65111C5D9A00EBD2FD /* ConvexVolumeTool.cpp */; name = "ConvexVolumeTool.cpp: 77"; rLen = 343; - rLoc = 2105; + rLoc = 2363; rType = 0; vrLen = 690; vrLoc = 1887; @@ -4957,7 +5153,7 @@ fRef = 6BA1E88810C7BFC9008007F6 /* Sample_SoloMeshSimple.cpp */; name = "Sample_SoloMeshSimple.cpp: 477"; rLen = 0; - rLoc = 14895; + rLoc = 14896; rType = 0; vrLen = 1018; vrLoc = 14408; @@ -4967,7 +5163,7 @@ fRef = 6BA1E88810C7BFC9008007F6 /* Sample_SoloMeshSimple.cpp */; name = "Sample_SoloMeshSimple.cpp: 477"; rLen = 0; - rLoc = 14895; + rLoc = 14896; rType = 0; vrLen = 1018; vrLoc = 14408; @@ -4977,7 +5173,7 @@ fRef = 6BA1E88810C7BFC9008007F6 /* Sample_SoloMeshSimple.cpp */; name = "Sample_SoloMeshSimple.cpp: 477"; rLen = 0; - rLoc = 14895; + rLoc = 14896; rType = 0; vrLen = 1018; vrLoc = 14408; @@ -4994,7 +5190,7 @@ fRef = 6BA1E88810C7BFC9008007F6 /* Sample_SoloMeshSimple.cpp */; name = "Sample_SoloMeshSimple.cpp: 477"; rLen = 0; - rLoc = 14895; + rLoc = 14896; rType = 0; vrLen = 1018; vrLoc = 14408; @@ -5214,7 +5410,7 @@ fRef = 6B324C65111C5D9A00EBD2FD /* ConvexVolumeTool.cpp */; name = "ConvexVolumeTool.cpp: 77"; rLen = 343; - rLoc = 2105; + rLoc = 2363; rType = 0; vrLen = 686; vrLoc = 1891; @@ -5244,7 +5440,7 @@ fRef = 6B324C65111C5D9A00EBD2FD /* ConvexVolumeTool.cpp */; name = "ConvexVolumeTool.cpp: 146"; rLen = 0; - rLoc = 3569; + rLoc = 3827; rType = 0; vrLen = 808; vrLoc = 3127; @@ -5254,7 +5450,7 @@ fRef = 6B324C65111C5D9A00EBD2FD /* ConvexVolumeTool.cpp */; name = "ConvexVolumeTool.cpp: 142"; rLen = 0; - rLoc = 3517; + rLoc = 3775; rType = 0; vrLen = 804; vrLoc = 3127; @@ -5264,7 +5460,7 @@ fRef = 6B324C65111C5D9A00EBD2FD /* ConvexVolumeTool.cpp */; name = "ConvexVolumeTool.cpp: 96"; rLen = 0; - rLoc = 2553; + rLoc = 2811; rType = 0; vrLen = 413; vrLoc = 2421; @@ -5274,7 +5470,7 @@ fRef = 6B324C65111C5D9A00EBD2FD /* ConvexVolumeTool.cpp */; name = "ConvexVolumeTool.cpp: 100"; rLen = 0; - rLoc = 2605; + rLoc = 2863; rType = 0; vrLen = 413; vrLoc = 2421; @@ -5284,7 +5480,7 @@ fRef = 6B324C65111C5D9A00EBD2FD /* ConvexVolumeTool.cpp */; name = "ConvexVolumeTool.cpp: 97"; rLen = 0; - rLoc = 2579; + rLoc = 2837; rType = 0; vrLen = 413; vrLoc = 2421; @@ -5294,7 +5490,7 @@ fRef = 6BA1E88810C7BFC9008007F6 /* Sample_SoloMeshSimple.cpp */; name = "Sample_SoloMeshSimple.cpp: 473"; rLen = 262; - rLoc = 14633; + rLoc = 14634; rType = 0; vrLen = 1077; vrLoc = 14402; @@ -5322,7 +5518,7 @@ fRef = 6B324C65111C5D9A00EBD2FD /* ConvexVolumeTool.cpp */; name = "ConvexVolumeTool.cpp: 97"; rLen = 0; - rLoc = 2579; + rLoc = 2837; rType = 0; vrLen = 413; vrLoc = 2421; @@ -5332,7 +5528,7 @@ fRef = 6BA1E88810C7BFC9008007F6 /* Sample_SoloMeshSimple.cpp */; name = "Sample_SoloMeshSimple.cpp: 473"; rLen = 262; - rLoc = 14633; + rLoc = 14634; rType = 0; vrLen = 1077; vrLoc = 14402; @@ -5534,7 +5730,7 @@ fRef = 6B8DE88710B69E3E00DF20FB /* DetourNavMesh.cpp */; name = "DetourNavMesh.cpp: 903"; rLen = 0; - rLoc = 24730; + rLoc = 24796; rType = 0; vrLen = 728; vrLoc = 24435; @@ -5544,7 +5740,7 @@ fRef = 6BA1E88810C7BFC9008007F6 /* Sample_SoloMeshSimple.cpp */; name = "Sample_SoloMeshSimple.cpp: 571"; rLen = 644; - rLoc = 17398; + rLoc = 17399; rType = 0; vrLen = 996; vrLoc = 17150; @@ -5594,7 +5790,7 @@ fRef = 6B8DE88710B69E3E00DF20FB /* DetourNavMesh.cpp */; name = "DetourNavMesh.cpp: 903"; rLen = 0; - rLoc = 24730; + rLoc = 24796; rType = 0; vrLen = 728; vrLoc = 24435; @@ -5614,7 +5810,7 @@ fRef = 6BA1E88810C7BFC9008007F6 /* Sample_SoloMeshSimple.cpp */; name = "Sample_SoloMeshSimple.cpp: 571"; rLen = 644; - rLoc = 17398; + rLoc = 17399; rType = 0; vrLen = 996; vrLoc = 17150; @@ -5684,11 +5880,1968 @@ fRef = 6B324C65111C5D9A00EBD2FD /* ConvexVolumeTool.cpp */; name = "ConvexVolumeTool.cpp: 94"; rLen = 0; - rLoc = 2503; + rLoc = 2761; rType = 0; vrLen = 546; vrLoc = 2175; }; + 6B324D0F1121C78000EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C810F7FCBFE00459200 /* RecastTimer.h */; + name = "RecastTimer.h: 22"; + rLen = 0; + rLoc = 981; + rType = 0; + vrLen = 1186; + vrLoc = 0; + }; + 6B324D101121C78000EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C8A0F7FCC1100459200 /* RecastTimer.cpp */; + name = "RecastTimer.cpp: 24"; + rLen = 0; + rLoc = 427; + rType = 0; + vrLen = 549; + vrLoc = 0; + }; + 6B324D111121C78000EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B324C65111C5D9A00EBD2FD /* ConvexVolumeTool.cpp */; + name = "ConvexVolumeTool.cpp: 83"; + rLen = 0; + rLoc = 2536; + rType = 0; + vrLen = 546; + vrLoc = 2175; + }; + 6B324D121121C78000EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B324C65111C5D9A00EBD2FD /* ConvexVolumeTool.cpp */; + name = "ConvexVolumeTool.cpp: 83"; + rLen = 0; + rLoc = 2536; + rType = 0; + vrLen = 546; + vrLoc = 2175; + }; + 6B324D131121C78000EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C8A0F7FCC1100459200 /* RecastTimer.cpp */; + name = "RecastTimer.cpp: 25"; + rLen = 0; + rLoc = 428; + rType = 0; + vrLen = 583; + vrLoc = 129; + }; + 6B324D141121C78000EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C810F7FCBFE00459200 /* RecastTimer.h */; + name = "RecastTimer.h: 22"; + rLen = 0; + rLoc = 981; + rType = 0; + vrLen = 1186; + vrLoc = 0; + }; + 6B324D151121C78000EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C8A0F7FCC1100459200 /* RecastTimer.cpp */; + name = "RecastTimer.cpp: 24"; + rLen = 0; + rLoc = 427; + rType = 0; + vrLen = 549; + vrLoc = 0; + }; + 6B324D161121C78000EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B324C65111C5D9A00EBD2FD /* ConvexVolumeTool.cpp */; + name = "ConvexVolumeTool.cpp: 40"; + rLen = 1046; + rLoc = 1315; + rType = 0; + vrLen = 914; + vrLoc = 1203; + }; + 6B324D191121CC6800EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B324C65111C5D9A00EBD2FD /* ConvexVolumeTool.cpp */; + name = "ConvexVolumeTool.cpp: 49"; + rLen = 0; + rLoc = 1673; + rType = 0; + vrLen = 894; + vrLoc = 1203; + }; + 6B324D1B1121CC8100EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B324C65111C5D9A00EBD2FD /* ConvexVolumeTool.cpp */; + name = "ConvexVolumeTool.cpp: 40"; + rLen = 0; + rLoc = 1347; + rType = 0; + vrLen = 894; + vrLoc = 1203; + }; + 6B324D1C1121CCCE00EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B324C65111C5D9A00EBD2FD /* ConvexVolumeTool.cpp */; + name = "ConvexVolumeTool.cpp: 55"; + rLen = 0; + rLoc = 1859; + rType = 0; + vrLen = 894; + vrLoc = 1203; + }; + 6B324D1D1121CCD200EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B324C65111C5D9A00EBD2FD /* ConvexVolumeTool.cpp */; + name = "ConvexVolumeTool.cpp: 55"; + rLen = 0; + rLoc = 1859; + rType = 0; + vrLen = 869; + vrLoc = 1315; + }; + 6B324D1E1121CCD400EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BF7C4531115C277002B3F46 /* RecastArea.cpp */; + name = "RecastArea.cpp: 229"; + rLen = 0; + rLoc = 6514; + rType = 0; + vrLen = 523; + vrLoc = 5850; + }; + 6B324D1F1121CCD400EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B324C65111C5D9A00EBD2FD /* ConvexVolumeTool.cpp */; + name = "ConvexVolumeTool.cpp: 55"; + rLen = 0; + rLoc = 1859; + rType = 0; + vrLen = 455; + vrLoc = 1642; + }; + 6B324D211121CD0C00EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B324C65111C5D9A00EBD2FD /* ConvexVolumeTool.cpp */; + name = "ConvexVolumeTool.cpp: 55"; + rLen = 0; + rLoc = 1859; + rType = 0; + vrLen = 903; + vrLoc = 1314; + }; + 6B324D221121CD0C00EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C7E0F7FCBFE00459200 /* Recast.h */; + name = "Recast.h: 534"; + rLen = 0; + rLoc = 18922; + rType = 0; + vrLen = 1493; + vrLoc = 18110; + }; + 6B324D231121CD0C00EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B324C65111C5D9A00EBD2FD /* ConvexVolumeTool.cpp */; + name = "ConvexVolumeTool.cpp: 55"; + rLen = 0; + rLoc = 1859; + rType = 0; + vrLen = 903; + vrLoc = 1314; + }; + 6B324D241121CD0C00EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C7E0F7FCBFE00459200 /* Recast.h */; + name = "Recast.h: 55"; + rLen = 0; + rLoc = 2400; + rType = 0; + vrLen = 919; + vrLoc = 1897; + }; + 6B324D261121CD2000EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C7E0F7FCBFE00459200 /* Recast.h */; + name = "Recast.h: 45"; + rLen = 6; + rLoc = 2212; + rType = 0; + vrLen = 1026; + vrLoc = 1897; + }; + 6B324D271121CD2000EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B25B6180FFA62BE004F1BC4 /* main.cpp */; + name = "main.cpp: 188"; + rLen = 0; + rLoc = 4244; + rType = 0; + vrLen = 730; + vrLoc = 3933; + }; + 6B324D281121CD2000EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C7E0F7FCBFE00459200 /* Recast.h */; + name = "Recast.h: 45"; + rLen = 6; + rLoc = 2212; + rType = 0; + vrLen = 1026; + vrLoc = 1897; + }; + 6B324D291121CD2000EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B25B6180FFA62BE004F1BC4 /* main.cpp */; + name = "main.cpp: 146"; + rLen = 0; + rLoc = 3186; + rType = 0; + vrLen = 841; + vrLoc = 2874; + }; + 6B324D2B1121CD2900EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B25B6180FFA62BE004F1BC4 /* main.cpp */; + name = "main.cpp: 146"; + rLen = 0; + rLoc = 3186; + rType = 0; + vrLen = 846; + vrLoc = 2874; + }; + 6B324D2C1121CD3200EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B25B6180FFA62BE004F1BC4 /* main.cpp */; + name = "main.cpp: 146"; + rLen = 0; + rLoc = 3186; + rType = 0; + vrLen = 846; + vrLoc = 2874; + }; + 6B324D2D1121CD3600EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B25B6180FFA62BE004F1BC4 /* main.cpp */; + name = "main.cpp: 146"; + rLen = 0; + rLoc = 3186; + rType = 0; + vrLen = 896; + vrLoc = 2741; + }; + 6B324D2E1121CD9300EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B324C65111C5D9A00EBD2FD /* ConvexVolumeTool.cpp */; + name = "ConvexVolumeTool.cpp: 55"; + rLen = 0; + rLoc = 1859; + rType = 0; + vrLen = 473; + vrLoc = 1611; + }; + 6B324D2F1121CD9300EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B25B6180FFA62BE004F1BC4 /* main.cpp */; + name = "main.cpp: 146"; + rLen = 0; + rLoc = 3186; + rType = 0; + vrLen = 218; + vrLoc = 3081; + }; + 6B324D301121CDAF00EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B25B6180FFA62BE004F1BC4 /* main.cpp */; + name = "main.cpp: 146"; + rLen = 0; + rLoc = 3186; + rType = 0; + vrLen = 632; + vrLoc = 2874; + }; + 6B324D311121CDAF00EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB7FC0A10EBB6AA006DA0A6 /* NavMeshTesterTool.cpp */; + rLen = 3; + rLoc = 7431; + rType = 0; + }; + 6B324D321121CDAF00EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B25B6180FFA62BE004F1BC4 /* main.cpp */; + name = "main.cpp: 146"; + rLen = 0; + rLoc = 3186; + rType = 0; + vrLen = 632; + vrLoc = 2874; + }; + 6B324D331121CDAF00EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB7FC0A10EBB6AA006DA0A6 /* NavMeshTesterTool.cpp */; + name = "NavMeshTesterTool.cpp: 281"; + rLen = 0; + rLoc = 7469; + rType = 0; + vrLen = 781; + vrLoc = 6783; + }; + 6B324D361121CFCF00EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB7FC0A10EBB6AA006DA0A6 /* NavMeshTesterTool.cpp */; + name = "NavMeshTesterTool.cpp: 281"; + rLen = 0; + rLoc = 7469; + rType = 0; + vrLen = 781; + vrLoc = 6783; + }; + 6B324D371121CFCF00EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C7E0F7FCBFE00459200 /* Recast.h */; + name = "Recast.h: 50"; + rLen = 0; + rLoc = 2400; + rType = 0; + vrLen = 1026; + vrLoc = 1897; + }; + 6B324D381121CFCF00EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C820F7FCC1100459200 /* Recast.cpp */; + name = "Recast.cpp: 256"; + rLen = 322; + rLoc = 6836; + rType = 0; + vrLen = 750; + vrLoc = 6665; + }; + 6B324D391121CFCF00EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BA1E88810C7BFC9008007F6 /* Sample_SoloMeshSimple.cpp */; + name = "Sample_SoloMeshSimple.cpp: 571"; + rLen = 644; + rLoc = 17399; + rType = 0; + vrLen = 996; + vrLoc = 17150; + }; + 6B324D3A1121CFCF00EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB7FC0A10EBB6AA006DA0A6 /* NavMeshTesterTool.cpp */; + name = "NavMeshTesterTool.cpp: 281"; + rLen = 0; + rLoc = 7469; + rType = 0; + vrLen = 781; + vrLoc = 6783; + }; + 6B324D3B1121CFCF00EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C7E0F7FCBFE00459200 /* Recast.h */; + name = "Recast.h: 50"; + rLen = 0; + rLoc = 2400; + rType = 0; + vrLen = 1026; + vrLoc = 1897; + }; + 6B324D3C1121CFCF00EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C820F7FCC1100459200 /* Recast.cpp */; + name = "Recast.cpp: 256"; + rLen = 322; + rLoc = 6836; + rType = 0; + vrLen = 750; + vrLoc = 6665; + }; + 6B324D3D1121CFCF00EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BA1E88810C7BFC9008007F6 /* Sample_SoloMeshSimple.cpp */; + name = "Sample_SoloMeshSimple.cpp: 442"; + rLen = 0; + rLoc = 13214; + rType = 0; + vrLen = 1133; + vrLoc = 13221; + }; + 6B324D3E1121CFD900EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BA1E88810C7BFC9008007F6 /* Sample_SoloMeshSimple.cpp */; + name = "Sample_SoloMeshSimple.cpp: 445"; + rLen = 0; + rLoc = 13217; + rType = 0; + vrLen = 1168; + vrLoc = 13221; + }; + 6B324D3F1121CFE300EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B25B6180FFA62BE004F1BC4 /* main.cpp */; + name = "main.cpp: 146"; + rLen = 0; + rLoc = 3186; + rType = 0; + vrLen = 218; + vrLoc = 3081; + }; + 6B324D401121CFE300EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BA1E88810C7BFC9008007F6 /* Sample_SoloMeshSimple.cpp */; + name = "Sample_SoloMeshSimple.cpp: 445"; + rLen = 0; + rLoc = 13217; + rType = 0; + vrLen = 156; + vrLoc = 13514; + }; + 6B324D421121CFFD00EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BA1E88810C7BFC9008007F6 /* Sample_SoloMeshSimple.cpp */; + name = "Sample_SoloMeshSimple.cpp: 445"; + rLen = 0; + rLoc = 13217; + rType = 0; + vrLen = 1232; + vrLoc = 13003; + }; + 6B324D431121CFFD00EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C7E0F7FCBFE00459200 /* Recast.h */; + name = "Recast.h: 50"; + rLen = 0; + rLoc = 2400; + rType = 0; + vrLen = 1026; + vrLoc = 1897; + }; + 6B324D441121CFFD00EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BA1E88810C7BFC9008007F6 /* Sample_SoloMeshSimple.cpp */; + name = "Sample_SoloMeshSimple.cpp: 445"; + rLen = 0; + rLoc = 13217; + rType = 0; + vrLen = 1232; + vrLoc = 13003; + }; + 6B324D451121CFFD00EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C7E0F7FCBFE00459200 /* Recast.h */; + name = "Recast.h: 47"; + rLen = 0; + rLoc = 2221; + rType = 0; + vrLen = 1003; + vrLoc = 1897; + }; + 6B324D461121D00800EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C7E0F7FCBFE00459200 /* Recast.h */; + name = "Recast.h: 52"; + rLen = 0; + rLoc = 2400; + rType = 0; + vrLen = 1003; + vrLoc = 1897; + }; + 6B324D471121D00D00EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C7E0F7FCBFE00459200 /* Recast.h */; + name = "Recast.h: 52"; + rLen = 0; + rLoc = 2400; + rType = 0; + vrLen = 1090; + vrLoc = 1728; + }; + 6B324D491121D04800EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C7E0F7FCBFE00459200 /* Recast.h */; + name = "Recast.h: 55"; + rLen = 0; + rLoc = 2400; + rType = 0; + vrLen = 1080; + vrLoc = 1728; + }; + 6B324D4A1121D0AB00EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BA1E88810C7BFC9008007F6 /* Sample_SoloMeshSimple.cpp */; + name = "Sample_SoloMeshSimple.cpp: 445"; + rLen = 0; + rLoc = 13217; + rType = 0; + vrLen = 209; + vrLoc = 13535; + }; + 6B324D4B1121D0AB00EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C7E0F7FCBFE00459200 /* Recast.h */; + name = "Recast.h: 59"; + rLen = 0; + rLoc = 2403; + rType = 0; + vrLen = 447; + vrLoc = 2360; + }; + 6B324D4C1121D0AE00EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C7E0F7FCBFE00459200 /* Recast.h */; + name = "Recast.h: 47"; + rLen = 0; + rLoc = 2220; + rType = 0; + vrLen = 878; + vrLoc = 1982; + }; + 6B324D4D1121D13500EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C7E0F7FCBFE00459200 /* Recast.h */; + name = "Recast.h: 51"; + rLen = 0; + rLoc = 2400; + rType = 0; + vrLen = 888; + vrLoc = 1982; + }; + 6B324D4F1121D61A00EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C7E0F7FCBFE00459200 /* Recast.h */; + name = "Recast.h: 53"; + rLen = 17; + rLoc = 2421; + rType = 0; + vrLen = 892; + vrLoc = 1982; + }; + 6B324D501121D61A00EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C880F7FCC1100459200 /* RecastRasterization.cpp */; + name = "RecastRasterization.cpp: 50"; + rLen = 0; + rLoc = 1836; + rType = 0; + vrLen = 859; + vrLoc = 1732; + }; + 6B324D511121D61A00EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C820F7FCC1100459200 /* Recast.cpp */; + name = "Recast.cpp: 120"; + rLen = 0; + rLoc = 3188; + rType = 0; + vrLen = 689; + vrLoc = 2892; + }; + 6B324D521121D61A00EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BA1E88810C7BFC9008007F6 /* Sample_SoloMeshSimple.cpp */; + name = "Sample_SoloMeshSimple.cpp: 346"; + rLen = 0; + rLoc = 9658; + rType = 0; + vrLen = 710; + vrLoc = 9965; + }; + 6B324D531121D61A00EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C7E0F7FCBFE00459200 /* Recast.h */; + name = "Recast.h: 53"; + rLen = 17; + rLoc = 2421; + rType = 0; + vrLen = 892; + vrLoc = 1982; + }; + 6B324D541121D61A00EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C880F7FCC1100459200 /* RecastRasterization.cpp */; + name = "RecastRasterization.cpp: 50"; + rLen = 0; + rLoc = 1836; + rType = 0; + vrLen = 859; + vrLoc = 1732; + }; + 6B324D551121D61A00EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C820F7FCC1100459200 /* Recast.cpp */; + name = "Recast.cpp: 120"; + rLen = 0; + rLoc = 3188; + rType = 0; + vrLen = 689; + vrLoc = 2892; + }; + 6B324D561121D61A00EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BA1E88810C7BFC9008007F6 /* Sample_SoloMeshSimple.cpp */; + name = "Sample_SoloMeshSimple.cpp: 351"; + rLen = 0; + rLoc = 9700; + rType = 0; + vrLen = 817; + vrLoc = 9965; + }; + 6B324D581121D6A600EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BA1E88810C7BFC9008007F6 /* Sample_SoloMeshSimple.cpp */; + name = "Sample_SoloMeshSimple.cpp: 352"; + rLen = 0; + rLoc = 9702; + rType = 0; + vrLen = 780; + vrLoc = 9965; + }; + 6B324D591121D70600EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C7E0F7FCBFE00459200 /* Recast.h */; + name = "Recast.h: 52"; + rLen = 0; + rLoc = 2403; + rType = 0; + vrLen = 440; + vrLoc = 2184; + }; + 6B324D5A1121D70600EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BA1E88810C7BFC9008007F6 /* Sample_SoloMeshSimple.cpp */; + name = "Sample_SoloMeshSimple.cpp: 352"; + rLen = 0; + rLoc = 9702; + rType = 0; + vrLen = 308; + vrLoc = 10109; + }; + 6B324D5C1121D71800EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BA1E88810C7BFC9008007F6 /* Sample_SoloMeshSimple.cpp */; + name = "Sample_SoloMeshSimple.cpp: 352"; + rLen = 0; + rLoc = 9702; + rType = 0; + vrLen = 779; + vrLoc = 9962; + }; + 6B324D5D1121D71800EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B25B6180FFA62BE004F1BC4 /* main.cpp */; + name = "main.cpp: 146"; + rLen = 0; + rLoc = 3186; + rType = 0; + vrLen = 911; + vrLoc = 2809; + }; + 6B324D5E1121D71800EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BA1E88810C7BFC9008007F6 /* Sample_SoloMeshSimple.cpp */; + name = "Sample_SoloMeshSimple.cpp: 352"; + rLen = 0; + rLoc = 9702; + rType = 0; + vrLen = 779; + vrLoc = 9962; + }; + 6B324D5F1121D71800EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B25B6180FFA62BE004F1BC4 /* main.cpp */; + name = "main.cpp: 146"; + rLen = 0; + rLoc = 3186; + rType = 0; + vrLen = 923; + vrLoc = 2809; + }; + 6B324D601121D71A00EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B25B6180FFA62BE004F1BC4 /* main.cpp */; + name = "main.cpp: 146"; + rLen = 0; + rLoc = 3186; + rType = 0; + vrLen = 957; + vrLoc = 2809; + }; + 6B324D611121D72100EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BA1E88810C7BFC9008007F6 /* Sample_SoloMeshSimple.cpp */; + name = "Sample_SoloMeshSimple.cpp: 352"; + rLen = 0; + rLoc = 9702; + rType = 0; + vrLen = 308; + vrLoc = 10109; + }; + 6B324D621121D72100EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B25B6180FFA62BE004F1BC4 /* main.cpp */; + name = "main.cpp: 146"; + rLen = 0; + rLoc = 3186; + rType = 0; + vrLen = 360; + vrLoc = 3007; + }; + 6B324D631121DE7A00EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C7E0F7FCBFE00459200 /* Recast.h */; + name = "Recast.h: 95"; + rLen = 0; + rLoc = 3596; + rType = 0; + vrLen = 969; + vrLoc = 2909; + }; + 6B324D641121DE7A00EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B25B6180FFA62BE004F1BC4 /* main.cpp */; + name = "main.cpp: 146"; + rLen = 0; + rLoc = 3186; + rType = 0; + vrLen = 893; + vrLoc = 2738; + }; + 6B324D651121DE7A00EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BA1E88910C7BFC9008007F6 /* Sample_SoloMeshTiled.cpp */; + name = "Sample_SoloMeshTiled.cpp: 1044"; + rLen = 0; + rLoc = 30613; + rType = 0; + vrLen = 1240; + vrLoc = 30352; + }; + 6B324D661121DE7A00EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BA1E88810C7BFC9008007F6 /* Sample_SoloMeshSimple.cpp */; + name = "Sample_SoloMeshSimple.cpp: 427"; + rLen = 0; + rLoc = 13214; + rType = 0; + vrLen = 1300; + vrLoc = 12680; + }; + 6B324D671121DE7A00EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88B10B69E4C00DF20FB /* DetourNavMesh.h */; + name = "DetourNavMesh.h: 469"; + rLen = 0; + rLoc = 20249; + rType = 0; + vrLen = 1613; + vrLoc = 19392; + }; + 6B324D681121DE7A00EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88710B69E3E00DF20FB /* DetourNavMesh.cpp */; + name = "DetourNavMesh.cpp: 1587"; + rLen = 0; + rLoc = 43893; + rType = 0; + vrLen = 1198; + vrLoc = 42930; + }; + 6B324D691121DE7A00EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B25B6180FFA62BE004F1BC4 /* main.cpp */; + name = "main.cpp: 146"; + rLen = 0; + rLoc = 3186; + rType = 0; + vrLen = 913; + vrLoc = 2738; + }; + 6B324D6A1121DE7A00EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C7E0F7FCBFE00459200 /* Recast.h */; + name = "Recast.h: 95"; + rLen = 0; + rLoc = 3596; + rType = 0; + vrLen = 969; + vrLoc = 2909; + }; + 6B324D6B1121DE7A00EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B25B6180FFA62BE004F1BC4 /* main.cpp */; + name = "main.cpp: 146"; + rLen = 0; + rLoc = 3186; + rType = 0; + vrLen = 893; + vrLoc = 2738; + }; + 6B324D6C1121DE7A00EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BA1E88910C7BFC9008007F6 /* Sample_SoloMeshTiled.cpp */; + name = "Sample_SoloMeshTiled.cpp: 1044"; + rLen = 0; + rLoc = 30613; + rType = 0; + vrLen = 1240; + vrLoc = 30352; + }; + 6B324D6D1121DE7A00EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BA1E88810C7BFC9008007F6 /* Sample_SoloMeshSimple.cpp */; + name = "Sample_SoloMeshSimple.cpp: 427"; + rLen = 0; + rLoc = 13214; + rType = 0; + vrLen = 1300; + vrLoc = 12680; + }; + 6B324D6E1121DE7A00EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88710B69E3E00DF20FB /* DetourNavMesh.cpp */; + name = "DetourNavMesh.cpp: 1145"; + rLen = 0; + rLoc = 31330; + rType = 0; + vrLen = 948; + vrLoc = 30982; + }; + 6B324D6F1121DE7A00EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88B10B69E4C00DF20FB /* DetourNavMesh.h */; + name = "DetourNavMesh.h: 409"; + rLen = 16; + rLoc = 18109; + rType = 0; + vrLen = 1069; + vrLoc = 17040; + }; + 6B324D701121DE7A00EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88710B69E3E00DF20FB /* DetourNavMesh.cpp */; + name = "DetourNavMesh.cpp: 1180"; + rLen = 0; + rLoc = 32326; + rType = 0; + vrLen = 1110; + vrLoc = 31505; + }; + 6B324D711121DE7A00EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88B10B69E4C00DF20FB /* DetourNavMesh.h */; + name = "DetourNavMesh.h: 465"; + rLen = 0; + rLoc = 20249; + rType = 0; + vrLen = 1662; + vrLoc = 19392; + }; + 6B324D721121DE7A00EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88710B69E3E00DF20FB /* DetourNavMesh.cpp */; + name = "DetourNavMesh.cpp: 1180"; + rLen = 0; + rLoc = 32326; + rType = 0; + vrLen = 1087; + vrLoc = 31670; + }; + 6B324D731121DE7A00EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88B10B69E4C00DF20FB /* DetourNavMesh.h */; + name = "DetourNavMesh.h: 465"; + rLen = 0; + rLoc = 20249; + rType = 0; + vrLen = 1662; + vrLoc = 19392; + }; + 6B324D741121DE7A00EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88710B69E3E00DF20FB /* DetourNavMesh.cpp */; + name = "DetourNavMesh.cpp: 1561"; + rLen = 0; + rLoc = 44176; + rType = 0; + vrLen = 1132; + vrLoc = 41798; + }; + 6B324D751121DE7A00EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88B10B69E4C00DF20FB /* DetourNavMesh.h */; + name = "DetourNavMesh.h: 465"; + rLen = 193; + rLoc = 20249; + rType = 0; + vrLen = 1702; + vrLoc = 19392; + }; + 6B324D761121DE7A00EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88710B69E3E00DF20FB /* DetourNavMesh.cpp */; + name = "DetourNavMesh.cpp: 1582"; + rLen = 0; + rLoc = 43909; + rType = 0; + vrLen = 1310; + vrLoc = 42860; + }; + 6B324D771121DE7A00EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88B10B69E4C00DF20FB /* DetourNavMesh.h */; + name = "DetourNavMesh.h: 467"; + rLen = 0; + rLoc = 20423; + rType = 0; + vrLen = 1734; + vrLoc = 19392; + }; + 6B324D781121DE7A00EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88710B69E3E00DF20FB /* DetourNavMesh.cpp */; + name = "DetourNavMesh.cpp: 1591"; + rLen = 0; + rLoc = 44135; + rType = 0; + vrLen = 1186; + vrLoc = 43315; + }; + 6B324D791121DE7A00EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88B10B69E4C00DF20FB /* DetourNavMesh.h */; + name = "DetourNavMesh.h: 465"; + rLen = 0; + rLoc = 20249; + rType = 0; + vrLen = 1754; + vrLoc = 19392; + }; + 6B324D7A1121DE7A00EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88710B69E3E00DF20FB /* DetourNavMesh.cpp */; + name = "DetourNavMesh.cpp: 1592"; + rLen = 0; + rLoc = 44143; + rType = 0; + vrLen = 1198; + vrLoc = 43315; + }; + 6B324D7B1121DE7A00EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88B10B69E4C00DF20FB /* DetourNavMesh.h */; + name = "DetourNavMesh.h: 469"; + rLen = 0; + rLoc = 20423; + rType = 0; + vrLen = 1634; + vrLoc = 19392; + }; + 6B324D7C1121DE7A00EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88710B69E3E00DF20FB /* DetourNavMesh.cpp */; + name = "DetourNavMesh.cpp: 1598"; + rLen = 0; + rLoc = 44564; + rType = 0; + vrLen = 943; + vrLoc = 43466; + }; + 6B324D7D1121DE7A00EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88B10B69E4C00DF20FB /* DetourNavMesh.h */; + name = "DetourNavMesh.h: 465"; + rLen = 0; + rLoc = 20249; + rType = 0; + vrLen = 1669; + vrLoc = 19392; + }; + 6B324D7E1121DE7A00EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88710B69E3E00DF20FB /* DetourNavMesh.cpp */; + name = "DetourNavMesh.cpp: 1587"; + rLen = 0; + rLoc = 43893; + rType = 0; + vrLen = 1198; + vrLoc = 42930; + }; + 6B324D7F1121DE7A00EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88B10B69E4C00DF20FB /* DetourNavMesh.h */; + name = "DetourNavMesh.h: 469"; + rLen = 0; + rLoc = 20249; + rType = 0; + vrLen = 1613; + vrLoc = 19392; + }; + 6B324D801121DE7A00EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88710B69E3E00DF20FB /* DetourNavMesh.cpp */; + name = "DetourNavMesh.cpp: 1605"; + rLen = 0; + rLoc = 44552; + rType = 0; + vrLen = 946; + vrLoc = 43517; + }; + 6B324D8111253B8E00EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88B10B69E4C00DF20FB /* DetourNavMesh.h */; + name = "DetourNavMesh.h: 468"; + rLen = 0; + rLoc = 20414; + rType = 0; + vrLen = 1681; + vrLoc = 19392; + }; + 6B324D8211253B8E00EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88710B69E3E00DF20FB /* DetourNavMesh.cpp */; + name = "DetourNavMesh.cpp: 1582"; + rLen = 0; + rLoc = 43893; + rType = 0; + vrLen = 1338; + vrLoc = 42378; + }; + 6B324D8311253B8E00EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88710B69E3E00DF20FB /* DetourNavMesh.cpp */; + name = "DetourNavMesh.cpp: 1582"; + rLen = 0; + rLoc = 43893; + rType = 0; + vrLen = 1338; + vrLoc = 42378; + }; + 6B324D8411253B8E00EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88B10B69E4C00DF20FB /* DetourNavMesh.h */; + name = "DetourNavMesh.h: 468"; + rLen = 0; + rLoc = 20414; + rType = 0; + vrLen = 1681; + vrLoc = 19392; + }; + 6B324D8511253B8E00EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88710B69E3E00DF20FB /* DetourNavMesh.cpp */; + name = "DetourNavMesh.cpp: 1685"; + rLen = 0; + rLoc = 46907; + rType = 0; + vrLen = 1065; + vrLoc = 45499; + }; + 6B324D8611253BD300EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88710B69E3E00DF20FB /* DetourNavMesh.cpp */; + name = "DetourNavMesh.cpp: 1669"; + rLen = 0; + rLoc = 46501; + rType = 0; + vrLen = 1095; + vrLoc = 44612; + }; + 6B324D8711253FD300EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88710B69E3E00DF20FB /* DetourNavMesh.cpp */; + name = "DetourNavMesh.cpp: 1171"; + rLen = 0; + rLoc = 32322; + rType = 0; + vrLen = 1099; + vrLoc = 31289; + }; + 6B324D92112542DA00EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88B10B69E4C00DF20FB /* DetourNavMesh.h */; + name = "DetourNavMesh.h: 461"; + rLen = 0; + rLoc = 20013; + rType = 0; + vrLen = 1683; + vrLoc = 19392; + }; + 6B324D93112542DA00EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88710B69E3E00DF20FB /* DetourNavMesh.cpp */; + name = "DetourNavMesh.cpp: 1167"; + rLen = 0; + rLoc = 31978; + rType = 0; + vrLen = 1128; + vrLoc = 31050; + }; + 6B324D94112542DA00EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88710B69E3E00DF20FB /* DetourNavMesh.cpp */; + name = "DetourNavMesh.cpp: 1202"; + rLen = 0; + rLoc = 32855; + rType = 0; + vrLen = 703; + vrLoc = 32438; + }; + 6B324D95112542DA00EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88B10B69E4C00DF20FB /* DetourNavMesh.h */; + name = "DetourNavMesh.h: 467"; + rLen = 0; + rLoc = 20342; + rType = 0; + vrLen = 1682; + vrLoc = 19392; + }; + 6B324D96112542DA00EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88710B69E3E00DF20FB /* DetourNavMesh.cpp */; + name = "DetourNavMesh.cpp: 1167"; + rLen = 0; + rLoc = 31978; + rType = 0; + vrLen = 1128; + vrLoc = 31050; + }; + 6B324D97112542DA00EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88B10B69E4C00DF20FB /* DetourNavMesh.h */; + name = "DetourNavMesh.h: 461"; + rLen = 0; + rLoc = 20013; + rType = 0; + vrLen = 1683; + vrLoc = 19392; + }; + 6B324D98112542DA00EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88710B69E3E00DF20FB /* DetourNavMesh.cpp */; + name = "DetourNavMesh.cpp: 1936"; + rLen = 0; + rLoc = 54215; + rType = 0; + vrLen = 1061; + vrLoc = 52347; + }; + 6B324DAD112548EF00EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + comments = "error: 'parent' was not declared in this scope"; + fRef = 6B8DE88710B69E3E00DF20FB /* DetourNavMesh.cpp */; + rLen = 1; + rLoc = 2182; + rType = 1; + }; + 6B324DAE112548EF00EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88710B69E3E00DF20FB /* DetourNavMesh.cpp */; + name = "DetourNavMesh.cpp: 2155"; + rLen = 0; + rLoc = 60221; + rType = 0; + vrLen = 917; + vrLoc = 59111; + }; + 6B324DB11125492F00EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88710B69E3E00DF20FB /* DetourNavMesh.cpp */; + name = "DetourNavMesh.cpp: 2158"; + rLen = 0; + rLoc = 60362; + rType = 0; + vrLen = 917; + vrLoc = 59111; + }; + 6B324DB21125492F00EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + comments = "warning: unused variable 's'"; + fRef = 6B324C65111C5D9A00EBD2FD /* ConvexVolumeTool.cpp */; + rLen = 1; + rLoc = 230; + rType = 1; + }; + 6B324DB31125492F00EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88710B69E3E00DF20FB /* DetourNavMesh.cpp */; + name = "DetourNavMesh.cpp: 2158"; + rLen = 0; + rLoc = 60362; + rType = 0; + vrLen = 917; + vrLoc = 59111; + }; + 6B324DB41125492F00EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B324C65111C5D9A00EBD2FD /* ConvexVolumeTool.cpp */; + name = "ConvexVolumeTool.cpp: 231"; + rLen = 0; + rLoc = 5520; + rType = 0; + vrLen = 539; + vrLoc = 5313; + }; + 6B324DB51125494100EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B324C65111C5D9A00EBD2FD /* ConvexVolumeTool.cpp */; + name = "ConvexVolumeTool.cpp: 231"; + rLen = 0; + rLoc = 5520; + rType = 0; + vrLen = 539; + vrLoc = 5313; + }; + 6B324DB91125495F00EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B324C65111C5D9A00EBD2FD /* ConvexVolumeTool.cpp */; + name = "ConvexVolumeTool.cpp: 231"; + rLen = 0; + rLoc = 5520; + rType = 0; + vrLen = 620; + vrLoc = 5327; + }; + 6B324DBD112549C000EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B324C65111C5D9A00EBD2FD /* ConvexVolumeTool.cpp */; + name = "ConvexVolumeTool.cpp: 231"; + rLen = 0; + rLoc = 5520; + rType = 0; + vrLen = 620; + vrLoc = 5327; + }; + 6B324DBF11254A8400EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B324C65111C5D9A00EBD2FD /* ConvexVolumeTool.cpp */; + name = "ConvexVolumeTool.cpp: 231"; + rLen = 0; + rLoc = 5520; + rType = 0; + vrLen = 620; + vrLoc = 5327; + }; + 6B324DC211254B0C00EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B25B6180FFA62BE004F1BC4 /* main.cpp */; + name = "main.cpp: 146"; + rLen = 0; + rLoc = 3186; + rType = 0; + vrLen = 310; + vrLoc = 3007; + }; + 6B324DC311254B0C00EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B324C65111C5D9A00EBD2FD /* ConvexVolumeTool.cpp */; + name = "ConvexVolumeTool.cpp: 231"; + rLen = 0; + rLoc = 5520; + rType = 0; + vrLen = 226; + vrLoc = 5367; + }; + 6B324DC411254B0C00EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88710B69E3E00DF20FB /* DetourNavMesh.cpp */; + rLen = 0; + rLoc = 1179; + rType = 1; + }; + 6B324DC511254B0C00EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B324C65111C5D9A00EBD2FD /* ConvexVolumeTool.cpp */; + name = "ConvexVolumeTool.cpp: 231"; + rLen = 0; + rLoc = 5520; + rType = 0; + vrLen = 226; + vrLoc = 5367; + }; + 6B324DC611254B0C00EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88710B69E3E00DF20FB /* DetourNavMesh.cpp */; + name = "DetourNavMesh.cpp: 1211"; + rLen = 0; + rLoc = 33290; + rType = 0; + vrLen = 741; + vrLoc = 32759; + }; + 6B324DC911254B2E00EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B324C65111C5D9A00EBD2FD /* ConvexVolumeTool.cpp */; + name = "ConvexVolumeTool.cpp: 231"; + rLen = 0; + rLoc = 5520; + rType = 0; + vrLen = 620; + vrLoc = 5327; + }; + 6B324DCA11254B2E00EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + comments = "error: 'h' was not declared in this scope"; + fRef = 6B8DE88710B69E3E00DF20FB /* DetourNavMesh.cpp */; + rLen = 1; + rLoc = 1239; + rType = 1; + }; + 6B324DCB11254B2E00EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88710B69E3E00DF20FB /* DetourNavMesh.cpp */; + name = "DetourNavMesh.cpp: 1211"; + rLen = 0; + rLoc = 33289; + rType = 0; + vrLen = 797; + vrLoc = 32907; + }; + 6B324DCD11254E0400EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88B10B69E4C00DF20FB /* DetourNavMesh.h */; + name = "DetourNavMesh.h: 375"; + rLen = 11; + rLoc = 16754; + rType = 0; + vrLen = 1052; + vrLoc = 16496; + }; + 6B324DCE11254E0400EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88710B69E3E00DF20FB /* DetourNavMesh.cpp */; + name = "DetourNavMesh.cpp: 1213"; + rLen = 0; + rLoc = 33302; + rType = 0; + vrLen = 834; + vrLoc = 32907; + }; + 6B324DCF11254E0400EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88710B69E3E00DF20FB /* DetourNavMesh.cpp */; + name = "DetourNavMesh.cpp: 1213"; + rLen = 0; + rLoc = 33302; + rType = 0; + vrLen = 834; + vrLoc = 32907; + }; + 6B324DD011254E0400EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88B10B69E4C00DF20FB /* DetourNavMesh.h */; + name = "DetourNavMesh.h: 375"; + rLen = 11; + rLoc = 16754; + rType = 0; + vrLen = 1052; + vrLoc = 16496; + }; + 6B324DD111254E0400EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88710B69E3E00DF20FB /* DetourNavMesh.cpp */; + name = "DetourNavMesh.cpp: 1221"; + rLen = 0; + rLoc = 33495; + rType = 0; + vrLen = 869; + vrLoc = 32785; + }; + 6B324DD311254EE300EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88710B69E3E00DF20FB /* DetourNavMesh.cpp */; + name = "DetourNavMesh.cpp: 1210"; + rLen = 0; + rLoc = 33118; + rType = 0; + vrLen = 869; + vrLoc = 32785; + }; + 6B324DD81125503700EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88710B69E3E00DF20FB /* DetourNavMesh.cpp */; + name = "DetourNavMesh.cpp: 1134"; + rLen = 0; + rLoc = 30960; + rType = 0; + vrLen = 856; + vrLoc = 30549; + }; + 6B324DDE112550BF00EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88710B69E3E00DF20FB /* DetourNavMesh.cpp */; + name = "DetourNavMesh.cpp: 1136"; + rLen = 0; + rLoc = 30966; + rType = 0; + vrLen = 804; + vrLoc = 30700; + }; + 6B324DE21125511B00EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88B10B69E4C00DF20FB /* DetourNavMesh.h */; + name = "DetourNavMesh.h: 375"; + rLen = 11; + rLoc = 16754; + rType = 0; + vrLen = 1411; + vrLoc = 20003; + }; + 6B324DE31125511B00EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88710B69E3E00DF20FB /* DetourNavMesh.cpp */; + name = "DetourNavMesh.cpp: 120"; + rLen = 0; + rLoc = 3580; + rType = 0; + vrLen = 535; + vrLoc = 3302; + }; + 6B324DE41125511B00EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88710B69E3E00DF20FB /* DetourNavMesh.cpp */; + name = "DetourNavMesh.cpp: 120"; + rLen = 0; + rLoc = 3580; + rType = 0; + vrLen = 535; + vrLoc = 3302; + }; + 6B324DE51125511B00EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88B10B69E4C00DF20FB /* DetourNavMesh.h */; + name = "DetourNavMesh.h: 375"; + rLen = 11; + rLoc = 16754; + rType = 0; + vrLen = 1411; + vrLoc = 20003; + }; + 6B324DE61125511B00EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88710B69E3E00DF20FB /* DetourNavMesh.cpp */; + name = "DetourNavMesh.cpp: 123"; + rLen = 0; + rLoc = 3583; + rType = 0; + vrLen = 528; + vrLoc = 3302; + }; + 6B324DE8112552C200EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88710B69E3E00DF20FB /* DetourNavMesh.cpp */; + name = "DetourNavMesh.cpp: 124"; + rLen = 0; + rLoc = 3607; + rType = 0; + vrLen = 552; + vrLoc = 3302; + }; + 6B324DE9112552C200EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B25B6100FFA62AD004F1BC4 /* Sample.h */; + name = "Sample.h: 31"; + rLen = 21; + rLoc = 1194; + rType = 0; + vrLen = 997; + vrLoc = 1016; + }; + 6B324DEA112552C200EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB7FC0A10EBB6AA006DA0A6 /* NavMeshTesterTool.cpp */; + name = "NavMeshTesterTool.cpp: 286"; + rLen = 0; + rLoc = 7602; + rType = 0; + vrLen = 1030; + vrLoc = 6807; + }; + 6B324DEB112552C200EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88710B69E3E00DF20FB /* DetourNavMesh.cpp */; + name = "DetourNavMesh.cpp: 124"; + rLen = 0; + rLoc = 3607; + rType = 0; + vrLen = 552; + vrLoc = 3302; + }; + 6B324DEC112552C200EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B25B6100FFA62AD004F1BC4 /* Sample.h */; + name = "Sample.h: 31"; + rLen = 21; + rLoc = 1194; + rType = 0; + vrLen = 997; + vrLoc = 1016; + }; + 6B324DED112552C200EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB7FC0A10EBB6AA006DA0A6 /* NavMeshTesterTool.cpp */; + name = "NavMeshTesterTool.cpp: 286"; + rLen = 0; + rLoc = 7602; + rType = 0; + vrLen = 971; + vrLoc = 6807; + }; + 6B324DEF112552DE00EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB7FC0A10EBB6AA006DA0A6 /* NavMeshTesterTool.cpp */; + name = "NavMeshTesterTool.cpp: 286"; + rLen = 0; + rLoc = 7602; + rType = 0; + vrLen = 972; + vrLoc = 6807; + }; + 6B324DF11125530F00EBD2FD /* DetourNavMesh.cpp:1212 */ = { + isa = PBXFileBreakpoint; + actions = ( + ); + breakpointStyle = 0; + continueAfterActions = 0; + countType = 0; + delayBeforeContinue = 0; + fileReference = 6B8DE88710B69E3E00DF20FB /* DetourNavMesh.cpp */; + functionName = "dtNavMesh::findPath(dtPolyRef startRef, dtPolyRef endRef, const float* startPos, const float* endPos, dtQueryFilter* filter, dtPolyRef* path, const int maxPathSize)"; + hitCount = 1; + ignoreCount = 0; + lineNumber = 1212; + location = Recast; + modificationTime = 287658775.008817; + state = 1; + }; + 6B324DF21125531100EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB7FC0A10EBB6AA006DA0A6 /* NavMeshTesterTool.cpp */; + name = "NavMeshTesterTool.cpp: 286"; + rLen = 0; + rLoc = 7602; + rType = 0; + vrLen = 972; + vrLoc = 6807; + }; + 6B324DF31125531100EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88710B69E3E00DF20FB /* DetourNavMesh.cpp */; + name = "DetourNavMesh.cpp: 124"; + rLen = 0; + rLoc = 3607; + rType = 0; + vrLen = 528; + vrLoc = 3302; + }; + 6B324DF41125531100EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB7FC0A10EBB6AA006DA0A6 /* NavMeshTesterTool.cpp */; + name = "NavMeshTesterTool.cpp: 286"; + rLen = 0; + rLoc = 7602; + rType = 0; + vrLen = 972; + vrLoc = 6807; + }; + 6B324DF51125531100EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88710B69E3E00DF20FB /* DetourNavMesh.cpp */; + name = "DetourNavMesh.cpp: 1212"; + rLen = 0; + rLoc = 33110; + rType = 0; + vrLen = 852; + vrLoc = 32686; + }; + 6B324DF81125533B00EBD2FD /* NavMeshTesterTool.cpp:297 */ = { + isa = PBXFileBreakpoint; + actions = ( + ); + breakpointStyle = 0; + continueAfterActions = 0; + countType = 0; + delayBeforeContinue = 0; + fileReference = 6BB7FC0A10EBB6AA006DA0A6 /* NavMeshTesterTool.cpp */; + functionName = "NavMeshTesterTool::recalc()"; + hitCount = 1; + ignoreCount = 0; + lineNumber = 297; + location = Recast; + modificationTime = 287658818.519053; + state = 1; + }; + 6B324DF91125534000EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88710B69E3E00DF20FB /* DetourNavMesh.cpp */; + name = "DetourNavMesh.cpp: 1212"; + rLen = 0; + rLoc = 33110; + rType = 0; + vrLen = 861; + vrLoc = 32772; + }; + 6B324DFA1125534000EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB7FC0A10EBB6AA006DA0A6 /* NavMeshTesterTool.cpp */; + name = "NavMeshTesterTool.cpp: 286"; + rLen = 0; + rLoc = 7602; + rType = 0; + vrLen = 972; + vrLoc = 6807; + }; + 6B324DFB1125534000EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88710B69E3E00DF20FB /* DetourNavMesh.cpp */; + name = "DetourNavMesh.cpp: 1212"; + rLen = 0; + rLoc = 33110; + rType = 0; + vrLen = 861; + vrLoc = 32772; + }; + 6B324DFC1125534000EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB7FC0A10EBB6AA006DA0A6 /* NavMeshTesterTool.cpp */; + name = "NavMeshTesterTool.cpp: 286"; + rLen = 0; + rLoc = 7602; + rType = 0; + vrLen = 972; + vrLoc = 6807; + }; + 6B324DFF1125535800EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB7FC0A10EBB6AA006DA0A6 /* NavMeshTesterTool.cpp */; + name = "NavMeshTesterTool.cpp: 286"; + rLen = 0; + rLoc = 7602; + rType = 0; + vrLen = 972; + vrLoc = 6807; + }; + 6B324E001125535800EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88710B69E3E00DF20FB /* DetourNavMesh.cpp */; + rLen = 0; + rLoc = 910; + rType = 1; + }; + 6B324E011125535800EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB7FC0A10EBB6AA006DA0A6 /* NavMeshTesterTool.cpp */; + name = "NavMeshTesterTool.cpp: 286"; + rLen = 0; + rLoc = 7602; + rType = 0; + vrLen = 972; + vrLoc = 6807; + }; + 6B324E021125535800EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88710B69E3E00DF20FB /* DetourNavMesh.cpp */; + name = "DetourNavMesh.cpp: 1214"; + rLen = 0; + rLoc = 33191; + rType = 0; + vrLen = 861; + vrLoc = 32772; + }; + 6B324E031125535800EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB7FC0A10EBB6AA006DA0A6 /* NavMeshTesterTool.cpp */; + name = "NavMeshTesterTool.cpp: 286"; + rLen = 0; + rLoc = 7602; + rType = 0; + vrLen = 972; + vrLoc = 6807; + }; + 6B324E041125535800EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88710B69E3E00DF20FB /* DetourNavMesh.cpp */; + name = "DetourNavMesh.cpp: 907"; + rLen = 0; + rLoc = 24798; + rType = 0; + vrLen = 713; + vrLoc = 24469; + }; + 6B324E061125554800EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB7FC0A10EBB6AA006DA0A6 /* NavMeshTesterTool.cpp */; + name = "NavMeshTesterTool.cpp: 285"; + rLen = 0; + rLoc = 7601; + rType = 0; + vrLen = 1031; + vrLoc = 6789; + }; + 6B324E071125554800EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB7FC0910EBB6AA006DA0A6 /* NavMeshTesterTool.h */; + name = "NavMeshTesterTool.h: 26"; + rLen = 0; + rLoc = 1069; + rType = 0; + vrLen = 670; + vrLoc = 1023; + }; + 6B324E081125554800EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88B10B69E4C00DF20FB /* DetourNavMesh.h */; + name = "DetourNavMesh.h: 383"; + rLen = 57; + rLoc = 16966; + rType = 0; + vrLen = 1035; + vrLoc = 16660; + }; + 6B324E091125554800EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88710B69E3E00DF20FB /* DetourNavMesh.cpp */; + name = "DetourNavMesh.cpp: 1733"; + rLen = 0; + rLoc = 47791; + rType = 0; + vrLen = 1051; + vrLoc = 46890; + }; + 6B324E0A1125554800EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB7FC0A10EBB6AA006DA0A6 /* NavMeshTesterTool.cpp */; + name = "NavMeshTesterTool.cpp: 285"; + rLen = 0; + rLoc = 7601; + rType = 0; + vrLen = 1031; + vrLoc = 6789; + }; + 6B324E0B1125554800EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB7FC0910EBB6AA006DA0A6 /* NavMeshTesterTool.h */; + name = "NavMeshTesterTool.h: 26"; + rLen = 0; + rLoc = 1069; + rType = 0; + vrLen = 670; + vrLoc = 1023; + }; + 6B324E0C1125554800EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88B10B69E4C00DF20FB /* DetourNavMesh.h */; + name = "DetourNavMesh.h: 456"; + rLen = 0; + rLoc = 19731; + rType = 0; + vrLen = 1711; + vrLoc = 18685; + }; + 6B324E0D1125554800EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88710B69E3E00DF20FB /* DetourNavMesh.cpp */; + name = "DetourNavMesh.cpp: 1217"; + rLen = 0; + rLoc = 33290; + rType = 0; + vrLen = 856; + vrLoc = 32686; + }; + 6B324E0E1125554800EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88B10B69E4C00DF20FB /* DetourNavMesh.h */; + name = "DetourNavMesh.h: 382"; + rLen = 0; + rLoc = 17165; + rType = 0; + vrLen = 1112; + vrLoc = 16362; + }; + 6B324E0F1125554800EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88710B69E3E00DF20FB /* DetourNavMesh.cpp */; + name = "DetourNavMesh.cpp: 1733"; + rLen = 0; + rLoc = 47791; + rType = 0; + vrLen = 1051; + vrLoc = 46890; + }; + 6B324E101125554800EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88B10B69E4C00DF20FB /* DetourNavMesh.h */; + name = "DetourNavMesh.h: 383"; + rLen = 57; + rLoc = 16966; + rType = 0; + vrLen = 1035; + vrLoc = 16660; + }; + 6B324E111125554800EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88710B69E3E00DF20FB /* DetourNavMesh.cpp */; + name = "DetourNavMesh.cpp: 1743"; + rLen = 0; + rLoc = 47788; + rType = 0; + vrLen = 1054; + vrLoc = 46890; + }; + 6B324E121125559400EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88710B69E3E00DF20FB /* DetourNavMesh.cpp */; + name = "DetourNavMesh.cpp: 1738"; + rLen = 0; + rLoc = 47603; + rType = 0; + vrLen = 1058; + vrLoc = 46904; + }; + 6B324E13112555CF00EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88710B69E3E00DF20FB /* DetourNavMesh.cpp */; + name = "DetourNavMesh.cpp: 1736"; + rLen = 0; + rLoc = 47492; + rType = 0; + vrLen = 1058; + vrLoc = 46904; + }; + 6B324E14112555CF00EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88710B69E3E00DF20FB /* DetourNavMesh.cpp */; + name = "DetourNavMesh.cpp: 1736"; + rLen = 0; + rLoc = 47492; + rType = 0; + vrLen = 1058; + vrLoc = 46904; + }; + 6B324E15112555CF00EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88B10B69E4C00DF20FB /* DetourNavMesh.h */; + name = "DetourNavMesh.h: 425"; + rLen = 0; + rLoc = 18296; + rType = 0; + vrLen = 1044; + vrLoc = 17581; + }; + 6B324E17112555F200EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88B10B69E4C00DF20FB /* DetourNavMesh.h */; + name = "DetourNavMesh.h: 413"; + rLen = 0; + rLoc = 18013; + rType = 0; + vrLen = 1044; + vrLoc = 17581; + }; + 6B324E181125566A00EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88B10B69E4C00DF20FB /* DetourNavMesh.h */; + name = "DetourNavMesh.h: 413"; + rLen = 0; + rLoc = 18013; + rType = 0; + vrLen = 1044; + vrLoc = 17581; + }; + 6B324E191125566A00EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B25B6100FFA62AD004F1BC4 /* Sample.h */; + name = "Sample.h: 36"; + rLen = 0; + rLoc = 1310; + rType = 0; + vrLen = 982; + vrLoc = 1016; + }; + 6B324E1A1125566A00EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB7FC0A10EBB6AA006DA0A6 /* NavMeshTesterTool.cpp */; + name = "NavMeshTesterTool.cpp: 94"; + rLen = 0; + rLoc = 2707; + rType = 0; + vrLen = 770; + vrLoc = 2140; + }; + 6B324E1B1125566A00EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88B10B69E4C00DF20FB /* DetourNavMesh.h */; + name = "DetourNavMesh.h: 413"; + rLen = 0; + rLoc = 18013; + rType = 0; + vrLen = 1044; + vrLoc = 17581; + }; + 6B324E1C1125566A00EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B25B6100FFA62AD004F1BC4 /* Sample.h */; + name = "Sample.h: 36"; + rLen = 0; + rLoc = 1310; + rType = 0; + vrLen = 982; + vrLoc = 1016; + }; + 6B324E1D1125566A00EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB7FC0A10EBB6AA006DA0A6 /* NavMeshTesterTool.cpp */; + name = "NavMeshTesterTool.cpp: 94"; + rLen = 0; + rLoc = 2597; + rType = 0; + vrLen = 854; + vrLoc = 2140; + }; + 6B324E201125568100EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB7FC0A10EBB6AA006DA0A6 /* NavMeshTesterTool.cpp */; + name = "NavMeshTesterTool.cpp: 94"; + rLen = 0; + rLoc = 2597; + rType = 0; + vrLen = 728; + vrLoc = 2226; + }; + 6B324E211125568100EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + comments = "error: return-statement with a value, in function returning 'void'"; + fRef = 6B8DE88710B69E3E00DF20FB /* DetourNavMesh.cpp */; + rLen = 1; + rLoc = 1736; + rType = 1; + }; + 6B324E221125568100EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB7FC0A10EBB6AA006DA0A6 /* NavMeshTesterTool.cpp */; + name = "NavMeshTesterTool.cpp: 94"; + rLen = 0; + rLoc = 2597; + rType = 0; + vrLen = 728; + vrLoc = 2226; + }; + 6B324E231125568100EBD2FD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88710B69E3E00DF20FB /* DetourNavMesh.cpp */; + name = "DetourNavMesh.cpp: 1739"; + rLen = 0; + rLoc = 47666; + rType = 0; + vrLen = 829; + vrLoc = 47311; + }; 6B555DAE100B211D00247EA3 /* imguiRenderGL.h */ = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {915, 492}}"; @@ -5738,7 +7891,7 @@ vrLen = 849; vrLoc = 5542; }; - 6B84BDF5110DF38D007D997B /* DetourNavMesh.cpp:251 */ = { + 6B84BDF5110DF38D007D997B /* DetourNavMesh.cpp:254 */ = { isa = PBXFileBreakpoint; actions = ( ); @@ -5750,9 +7903,9 @@ functionName = "dtNavMesh::checkLinks(dtMeshTile* tile)"; hitCount = 0; ignoreCount = 0; - lineNumber = 251; + lineNumber = 254; location = Recast; - modificationTime = 287078558.540658; + modificationTime = 287658767.511248; state = 1; }; 6B84BE1D110DF6C6007D997B /* Sample_TileMesh.cpp:478 */ = { @@ -5769,7 +7922,7 @@ ignoreCount = 0; lineNumber = 478; location = Recast; - modificationTime = 287078558.540979; + modificationTime = 287658767.511644; state = 1; }; 6B8632970F78114600E2684A /* Recast */ = { @@ -5840,9 +7993,9 @@ }; 6B8DE88710B69E3E00DF20FB /* DetourNavMesh.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {852, 33184}}"; - sepNavSelRange = "{24730, 0}"; - sepNavVisRange = "{24435, 728}"; + sepNavIntBoundsRect = "{{0, 0}, {815, 35248}}"; + sepNavSelRange = "{47666, 0}"; + sepNavVisRange = "{47311, 829}"; sepNavWindowFrame = "{{15, 51}, {1214, 722}}"; }; }; @@ -5855,9 +8008,9 @@ }; 6B8DE88B10B69E4C00DF20FB /* DetourNavMesh.h */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {845, 7872}}"; - sepNavSelRange = "{16897, 0}"; - sepNavVisRange = "{16291, 1183}"; + sepNavIntBoundsRect = "{{0, 0}, {845, 8144}}"; + sepNavSelRange = "{18013, 0}"; + sepNavVisRange = "{17581, 1044}"; }; }; 6B8DE88C10B69E4C00DF20FB /* DetourNavMeshBuilder.h */ = { @@ -5872,7 +8025,7 @@ fRef = 6B8DE88B10B69E4C00DF20FB /* DetourNavMesh.h */; name = detail; rLen = 0; - rLoc = 17386; + rLoc = 17610; rType = 0; vrLen = 1182; vrLoc = 9676; @@ -5889,14 +8042,14 @@ }; 6BA1E88810C7BFC9008007F6 /* Sample_SoloMeshSimple.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {887, 11376}}"; - sepNavSelRange = "{17398, 644}"; - sepNavVisRange = "{17150, 996}"; + sepNavIntBoundsRect = "{{0, 0}, {815, 11456}}"; + sepNavSelRange = "{13214, 0}"; + sepNavVisRange = "{12680, 1300}"; }; }; 6BA1E88910C7BFC9008007F6 /* Sample_SoloMeshTiled.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {943, 18688}}"; + sepNavIntBoundsRect = "{{0, 0}, {943, 18784}}"; sepNavSelRange = "{30613, 0}"; sepNavVisRange = "{30352, 1240}"; }; @@ -5951,16 +8104,16 @@ }; 6BB7FC0910EBB6AA006DA0A6 /* NavMeshTesterTool.h */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {815, 1312}}"; - sepNavSelRange = "{1030, 17}"; - sepNavVisRange = "{1023, 705}"; + sepNavIntBoundsRect = "{{0, 0}, {815, 1296}}"; + sepNavSelRange = "{1069, 0}"; + sepNavVisRange = "{1023, 670}"; }; }; 6BB7FC0A10EBB6AA006DA0A6 /* NavMeshTesterTool.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {887, 11424}}"; - sepNavSelRange = "{6946, 22}"; - sepNavVisRange = "{8088, 1081}"; + sepNavIntBoundsRect = "{{0, 0}, {815, 11584}}"; + sepNavSelRange = "{2597, 0}"; + sepNavVisRange = "{2226, 728}"; }; }; 6BB7FDA310F36EFC006DA0A6 /* InputGeom.h */ = { @@ -6563,7 +8716,7 @@ fRef = 6B8DE88B10B69E4C00DF20FB /* DetourNavMesh.h */; name = "DetourNavMesh.h: 361"; rLen = 0; - rLoc = 16949; + rLoc = 17173; rType = 0; vrLen = 1227; vrLoc = 15736; @@ -6573,7 +8726,7 @@ fRef = 6B8DE88B10B69E4C00DF20FB /* DetourNavMesh.h */; name = "DetourNavMesh.h: 361"; rLen = 0; - rLoc = 16949; + rLoc = 17173; rType = 0; vrLen = 1311; vrLoc = 15654; @@ -6583,7 +8736,7 @@ fRef = 6B8DE88B10B69E4C00DF20FB /* DetourNavMesh.h */; name = "DetourNavMesh.h: 361"; rLen = 0; - rLoc = 16949; + rLoc = 17173; rType = 0; vrLen = 1069; vrLoc = 2551; @@ -8110,9 +10263,9 @@ }; 6BF7C4531115C277002B3F46 /* RecastArea.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {815, 5184}}"; - sepNavSelRange = "{8758, 0}"; - sepNavVisRange = "{8158, 604}"; + sepNavIntBoundsRect = "{{0, 0}, {1195, 5280}}"; + sepNavSelRange = "{6514, 0}"; + sepNavVisRange = "{5850, 523}"; }; }; 6BF7C4571115C403002B3F46 /* RecastArea.cpp */ = { @@ -8137,7 +10290,7 @@ fRef = 6BB7FC0A10EBB6AA006DA0A6 /* NavMeshTesterTool.cpp */; name = "NavMeshTesterTool.cpp: 193"; rLen = 0; - rLoc = 5419; + rLoc = 5790; rType = 0; vrLen = 646; vrLoc = 4301; @@ -8147,7 +10300,7 @@ fRef = 6B8DE88710B69E3E00DF20FB /* DetourNavMesh.cpp */; name = "DetourNavMesh.cpp: 1151"; rLen = 0; - rLoc = 31718; + rLoc = 32326; rType = 0; vrLen = 1087; vrLoc = 30878; @@ -8507,7 +10660,7 @@ fRef = 6B8DE88710B69E3E00DF20FB /* DetourNavMesh.cpp */; name = "DetourNavMesh.cpp: 1071"; rLen = 0; - rLoc = 29790; + rLoc = 29856; rType = 0; vrLen = 853; vrLoc = 28942; @@ -8517,7 +10670,7 @@ fRef = 6BB7FC0A10EBB6AA006DA0A6 /* NavMeshTesterTool.cpp */; name = "NavMeshTesterTool.cpp: 178"; rLen = 0; - rLoc = 5167; + rLoc = 5538; rType = 0; vrLen = 423; vrLoc = 4249; @@ -8537,7 +10690,7 @@ fRef = 6B8DE88710B69E3E00DF20FB /* DetourNavMesh.cpp */; name = "DetourNavMesh.cpp: 1071"; rLen = 0; - rLoc = 29790; + rLoc = 29856; rType = 0; vrLen = 853; vrLoc = 28942; @@ -8547,7 +10700,7 @@ fRef = 6BB7FC0A10EBB6AA006DA0A6 /* NavMeshTesterTool.cpp */; name = "NavMeshTesterTool.cpp: 178"; rLen = 0; - rLoc = 5167; + rLoc = 5538; rType = 0; vrLen = 423; vrLoc = 4249; @@ -8627,7 +10780,7 @@ fRef = 6BA1E88810C7BFC9008007F6 /* Sample_SoloMeshSimple.cpp */; name = "Sample_SoloMeshSimple.cpp: 606"; rLen = 0; - rLoc = 19395; + rLoc = 19396; rType = 0; vrLen = 872; vrLoc = 18039; @@ -8647,7 +10800,7 @@ fRef = 6BA1E88810C7BFC9008007F6 /* Sample_SoloMeshSimple.cpp */; name = "Sample_SoloMeshSimple.cpp: 609"; rLen = 0; - rLoc = 19439; + rLoc = 19440; rType = 0; vrLen = 1035; vrLoc = 16818; @@ -8714,7 +10867,7 @@ fRef = 6BA1E88810C7BFC9008007F6 /* Sample_SoloMeshSimple.cpp */; name = "Sample_SoloMeshSimple.cpp: 473"; rLen = 264; - rLoc = 14633; + rLoc = 14634; rType = 0; vrLen = 1013; vrLoc = 14323; @@ -9134,7 +11287,7 @@ fRef = 6BA1E88810C7BFC9008007F6 /* Sample_SoloMeshSimple.cpp */; name = "Sample_SoloMeshSimple.cpp: 639"; rLen = 138; - rLoc = 20638; + rLoc = 20639; rType = 0; vrLen = 2394; vrLoc = 19013; @@ -9174,7 +11327,7 @@ fRef = 6BA1E88810C7BFC9008007F6 /* Sample_SoloMeshSimple.cpp */; name = "Sample_SoloMeshSimple.cpp: 485"; rLen = 0; - rLoc = 15048; + rLoc = 15049; rType = 0; vrLen = 876; vrLoc = 14618; @@ -9231,7 +11384,7 @@ fRef = 6BA1E88810C7BFC9008007F6 /* Sample_SoloMeshSimple.cpp */; name = "Sample_SoloMeshSimple.cpp: 493"; rLen = 0; - rLoc = 15337; + rLoc = 15338; rType = 0; vrLen = 860; vrLoc = 14911; @@ -9271,7 +11424,7 @@ fRef = 6BA1E88810C7BFC9008007F6 /* Sample_SoloMeshSimple.cpp */; name = "Sample_SoloMeshSimple.cpp: 499"; rLen = 0; - rLoc = 15478; + rLoc = 15479; rType = 0; vrLen = 894; vrLoc = 14597; @@ -9291,7 +11444,7 @@ fRef = 6BA1E88810C7BFC9008007F6 /* Sample_SoloMeshSimple.cpp */; name = "Sample_SoloMeshSimple.cpp: 499"; rLen = 0; - rLoc = 15478; + rLoc = 15479; rType = 0; vrLen = 894; vrLoc = 14597; diff --git a/RecastDemo/Build/Xcode/Recast.xcodeproj/memon.perspectivev3 b/RecastDemo/Build/Xcode/Recast.xcodeproj/memon.perspectivev3 index d391372..30801d1 100644 --- a/RecastDemo/Build/Xcode/Recast.xcodeproj/memon.perspectivev3 +++ b/RecastDemo/Build/Xcode/Recast.xcodeproj/memon.perspectivev3 @@ -281,14 +281,14 @@ PBXSmartGroupTreeModuleOutlineStateSelectionKey - 45 - 44 + 36 + 35 1 0 PBXSmartGroupTreeModuleOutlineStateVisibleRectKey - {{0, 293}, {358, 643}} + {{0, 295}, {358, 643}} PBXTopSmartGroupGIDs @@ -323,7 +323,7 @@ PBXProjectModuleGUID 6B8632A30F78115100E2684A PBXProjectModuleLabel - ConvexVolumeTool.cpp + DetourNavMesh.cpp PBXSplitModuleInNavigatorKey Split0 @@ -331,11 +331,11 @@ PBXProjectModuleGUID 6B8632A40F78115100E2684A PBXProjectModuleLabel - ConvexVolumeTool.cpp + DetourNavMesh.cpp _historyCapacity 0 bookmark - 6B324D0D111C7C1700EBD2FD + 6B324E231125568100EBD2FD history 6B8DE70D10B01BBF00DF20FB @@ -350,8 +350,6 @@ 6BF7C2441111DAC1002B3F46 6BF7C2761112BE4F002B3F46 6BF7C2851112C348002B3F46 - 6BF7C3211112DB82002B3F46 - 6BF7C3431112E74B002B3F46 6BF7C36E1112EB25002B3F46 6BF7C37D1113026E002B3F46 6BF7C394111316AD002B3F46 @@ -361,13 +359,11 @@ 6BF7C4831115C7C4002B3F46 6BF7C5F91116F346002B3F46 6BF7C6591117142A002B3F46 - 6BF7C67C1117163B002B3F46 6BF7C67D1117163B002B3F46 6BF7C69B11172159002B3F46 6BF7C6AA11172278002B3F46 6B324A7C111BF65400EBD2FD 6B324AC3111C00D700EBD2FD - 6B324AC5111C00D700EBD2FD 6B324ACA111C00D700EBD2FD 6B324AE6111C07AB00EBD2FD 6B324AEA111C0D9700EBD2FD @@ -380,24 +376,29 @@ 6B324B52111C1AC800EBD2FD 6B324B71111C1C4F00EBD2FD 6B324B7A111C1C8200EBD2FD - 6B324B8A111C1DE600EBD2FD - 6B324BB8111C4C2B00EBD2FD 6B324BBB111C4C2B00EBD2FD 6B324C45111C5C5A00EBD2FD - 6B324C51111C5D1400EBD2FD 6B324C92111C604500EBD2FD - 6B324C9E111C6DD400EBD2FD 6B324CB5111C6EEA00EBD2FD 6B324CC3111C6F6300EBD2FD - 6B324CF2111C7A9800EBD2FD 6B324CF9111C7B0900EBD2FD 6B324CFA111C7B0900EBD2FD - 6B324CFB111C7B0900EBD2FD - 6B324CFC111C7B0900EBD2FD - 6B324CFD111C7B0900EBD2FD 6B324D09111C7C1700EBD2FD 6B324D0A111C7C1700EBD2FD - 6B324CDA111C789800EBD2FD + 6B324D0F1121C78000EBD2FD + 6B324D101121C78000EBD2FD + 6B324D501121D61A00EBD2FD + 6B324D511121D61A00EBD2FD + 6B324D631121DE7A00EBD2FD + 6B324D641121DE7A00EBD2FD + 6B324D651121DE7A00EBD2FD + 6B324D661121DE7A00EBD2FD + 6B324DC911254B2E00EBD2FD + 6B324E071125554800EBD2FD + 6B324E181125566A00EBD2FD + 6B324E191125566A00EBD2FD + 6B324E201125568100EBD2FD + 6B324E211125568100EBD2FD prevStack @@ -435,7 +436,6 @@ 6BF7C39C111316AD002B3F46 6BB7FDD910F37703006DA0A6 6BF7C16711119C69002B3F46 - 6BF7C4661115C514002B3F46 6BF7C46A1115C514002B3F46 6BF7C52F1115FA3B002B3F46 6BF7C6081116F61A002B3F46 @@ -461,7 +461,6 @@ 6B324AEE111C0D9700EBD2FD 6B324AEF111C0D9700EBD2FD 6B324AF0111C0D9700EBD2FD - 6B324B01111C0F2700EBD2FD 6B324B02111C0F2700EBD2FD 6B324B03111C0F2700EBD2FD 6B324B04111C0F2700EBD2FD @@ -474,7 +473,6 @@ 6B324B14111C103600EBD2FD 6B324B15111C103600EBD2FD 6B324B18111C103600EBD2FD - 6B324B21111C10C700EBD2FD 6B324B23111C10C700EBD2FD 6B324B33111C153D00EBD2FD 6B324B35111C153D00EBD2FD @@ -485,13 +483,9 @@ 6B324B55111C1AC800EBD2FD 6B324B56111C1AC800EBD2FD 6B324B57111C1AC800EBD2FD - 6B324B5A111C1AC800EBD2FD - 6B324B5B111C1AC800EBD2FD 6B324B5C111C1AC800EBD2FD - 6B324B5D111C1AC800EBD2FD 6B324B5E111C1AC800EBD2FD 6B324B5F111C1AC800EBD2FD - 6B324B60111C1AC800EBD2FD 6B324B61111C1AC800EBD2FD 6B324B62111C1AC800EBD2FD 6B324B63111C1AC800EBD2FD @@ -504,10 +498,7 @@ 6B324B75111C1C4F00EBD2FD 6B324B7D111C1C8200EBD2FD 6B324B82111C1CF000EBD2FD - 6B324B87111C1D9700EBD2FD - 6B324B8C111C1DE600EBD2FD 6B324BBD111C4C2B00EBD2FD - 6B324BBE111C4C2B00EBD2FD 6B324BC1111C4C2B00EBD2FD 6B324C21111C5B8D00EBD2FD 6B324C23111C5B8D00EBD2FD @@ -517,25 +508,18 @@ 6B324C2B111C5B8D00EBD2FD 6B324C2D111C5B8D00EBD2FD 6B324C2F111C5B8D00EBD2FD - 6B324C30111C5B8D00EBD2FD 6B324C31111C5B8D00EBD2FD 6B324C33111C5B8D00EBD2FD - 6B324C34111C5B8D00EBD2FD 6B324C49111C5C5A00EBD2FD - 6B324C58111C5D1400EBD2FD 6B324C59111C5D1400EBD2FD 6B324C5D111C5D1400EBD2FD - 6B324C5F111C5D1400EBD2FD 6B324C61111C5D1400EBD2FD - 6B324C70111C5DDC00EBD2FD 6B324C71111C5DDC00EBD2FD 6B324C79111C5E7C00EBD2FD 6B324C7A111C5E7C00EBD2FD - 6B324C7B111C5E7C00EBD2FD 6B324C80111C5EF800EBD2FD 6B324CA4111C6DD400EBD2FD 6B324CA5111C6DD400EBD2FD - 6B324CAE111C6E0100EBD2FD 6B324CB7111C6EEA00EBD2FD 6B324CB8111C6EEA00EBD2FD 6B324CB9111C6EEA00EBD2FD @@ -545,7 +529,6 @@ 6B324CD0111C759F00EBD2FD 6B324CD1111C759F00EBD2FD 6B324CDE111C789800EBD2FD - 6B324CDF111C789800EBD2FD 6B324CE0111C789800EBD2FD 6B324CE1111C789800EBD2FD 6B324CE5111C78DA00EBD2FD @@ -554,12 +537,51 @@ 6B324CF5111C7A9800EBD2FD 6B324CFF111C7B0900EBD2FD 6B324D00111C7B0900EBD2FD - 6B324D01111C7B0900EBD2FD 6B324D02111C7B0900EBD2FD - 6B324D03111C7B0900EBD2FD 6B324D04111C7B0900EBD2FD 6B324D0B111C7C1700EBD2FD 6B324D0C111C7C1700EBD2FD + 6B324D121121C78000EBD2FD + 6B324D131121C78000EBD2FD + 6B324D141121C78000EBD2FD + 6B324D151121C78000EBD2FD + 6B324D231121CD0C00EBD2FD + 6B324D281121CD2000EBD2FD + 6B324D321121CDAF00EBD2FD + 6B324D3B1121CFCF00EBD2FD + 6B324D3C1121CFCF00EBD2FD + 6B324D531121D61A00EBD2FD + 6B324D541121D61A00EBD2FD + 6B324B5A111C1AC800EBD2FD + 6B324D5E1121D71800EBD2FD + 6B324D691121DE7A00EBD2FD + 6B324D6A1121DE7A00EBD2FD + 6B324D6B1121DE7A00EBD2FD + 6B324D6C1121DE7A00EBD2FD + 6B324D6D1121DE7A00EBD2FD + 6B324D6F1121DE7A00EBD2FD + 6B324D711121DE7A00EBD2FD + 6B324D731121DE7A00EBD2FD + 6B324D751121DE7A00EBD2FD + 6B324D771121DE7A00EBD2FD + 6B324D791121DE7A00EBD2FD + 6B324D7B1121DE7A00EBD2FD + 6B324D7D1121DE7A00EBD2FD + 6B324D7F1121DE7A00EBD2FD + 6B324D8411253B8E00EBD2FD + 6B324D95112542DA00EBD2FD + 6B324D97112542DA00EBD2FD + 6B324DD011254E0400EBD2FD + 6B324DE51125511B00EBD2FD + 6B324E0B1125554800EBD2FD + 6B324E0C1125554800EBD2FD + 6B324E0D1125554800EBD2FD + 6B324E0E1125554800EBD2FD + 6B324E0F1125554800EBD2FD + 6B324E101125554800EBD2FD + 6B324E14112555CF00EBD2FD + 6B324E1B1125566A00EBD2FD + 6B324E221125568100EBD2FD SplitCount @@ -573,18 +595,18 @@ GeometryConfiguration Frame - {{0, 0}, {876, 545}} + {{0, 0}, {876, 426}} RubberWindowFrame 11 76 1256 702 0 0 1280 778 Module PBXNavigatorGroup Proportion - 545pt + 426pt Proportion - 111pt + 230pt Tabs @@ -614,7 +636,7 @@ GeometryConfiguration Frame - {{10, 27}, {876, 197}} + {{10, 27}, {876, 72}} Module PBXProjectFindModule @@ -652,7 +674,7 @@ GeometryConfiguration Frame - {{10, 27}, {876, 84}} + {{10, 27}, {876, 203}} RubberWindowFrame 11 76 1256 702 0 0 1280 778 @@ -737,12 +759,12 @@ GeometryConfiguration Frame - {{0, 0}, {1256, 260}} + {{0, 0}, {1256, 55}} Module PBXDebugCLIModule Proportion - 260pt + 55pt ContentConfiguration @@ -761,8 +783,8 @@ yes sizes - {{0, 0}, {625, 125}} - {{625, 0}, {631, 125}} + {{0, 0}, {628, 157}} + {{628, 0}, {628, 157}} VerticalSplitView @@ -777,8 +799,8 @@ yes sizes - {{0, 0}, {1256, 125}} - {{0, 125}, {1256, 271}} + {{0, 0}, {1256, 157}} + {{0, 157}, {1256, 444}} @@ -798,7 +820,7 @@ DebugSTDIOWindowFrame {{200, 200}, {500, 300}} Frame - {{0, 265}, {1256, 396}} + {{0, 60}, {1256, 601}} PBXDebugSessionStackFrameViewKey DebugVariablesTableConfiguration @@ -808,16 +830,16 @@ Value 85 Summary - 401 + 398 Frame - {{625, 0}, {631, 125}} + {{628, 0}, {628, 157}} Module PBXDebugSessionModule Proportion - 396pt + 601pt Name diff --git a/RecastDemo/Source/ConvexVolumeTool.cpp b/RecastDemo/Source/ConvexVolumeTool.cpp index 98d62cd..818039d 100644 --- a/RecastDemo/Source/ConvexVolumeTool.cpp +++ b/RecastDemo/Source/ConvexVolumeTool.cpp @@ -36,11 +36,13 @@ #endif // Quick and dirty convex hull. + +// Returns true if 'c' is left of line 'a'-'b'. inline bool left(const float* a, const float* b, const float* c) { return (b[0] - a[0]) * (c[2] - a[2]) - (c[0] - a[0]) * (b[2] - a[2]) < 0; } - +// Returns true if 'a' is more lower-left than 'b'. inline bool cmppt(const float* a, const float* b) { if (a[0] < b[0]) return true; @@ -49,15 +51,17 @@ inline bool cmppt(const float* a, const float* b) if (a[2] > b[2]) return false; return false; } - +// Calculates convex hull on xz-plane of points on 'pts', +// stores the indices of the resulting hull in 'out' and +// returns number of points on hull. static int convexhull(const float* pts, int npts, int* out) { - // Find leftmost point. + // Find lower-leftmost point. int hull = 0; for (int i = 1; i < npts; ++i) if (cmppt(&pts[i*3], &pts[hull*3])) hull = i; - // Gif wrap hull. + // Gift wrap hull. int endpt = 0; int i = 0; do @@ -224,7 +228,6 @@ void ConvexVolumeTool::handleClick(const float* p, bool shift) void ConvexVolumeTool::handleRender() { DebugDrawGL dd; - const float s = m_sample->getAgentRadius(); // Find height extents of the shape. float minh = FLT_MAX, maxh = 0; diff --git a/RecastDemo/Source/NavMeshTesterTool.cpp b/RecastDemo/Source/NavMeshTesterTool.cpp index f361ccd..dc6dd6a 100644 --- a/RecastDemo/Source/NavMeshTesterTool.cpp +++ b/RecastDemo/Source/NavMeshTesterTool.cpp @@ -85,6 +85,17 @@ void NavMeshTesterTool::init(Sample* sample) m_navMesh = sample->getNavMesh(); recalc(); + if (m_navMesh) + { + // Change costs. + m_navMesh->setAreaCost(SAMPLE_POLYAREA_GROUND, 1.0f); + m_navMesh->setAreaCost(SAMPLE_POLYAREA_WATER, 10.0f); + m_navMesh->setAreaCost(SAMPLE_POLYAREA_ROAD, 1.0f); + m_navMesh->setAreaCost(SAMPLE_POLYAREA_DOOR, 1.0f); + m_navMesh->setAreaCost(SAMPLE_POLYAREA_GRASS, 2.0f); + m_navMesh->setAreaCost(SAMPLE_POLYAREA_JUMP, 1.5f); + } + if (m_toolMode == TOOLMODE_PATHFIND_ITER || m_toolMode == TOOLMODE_PATHFIND_STRAIGHT) { unsigned char flags = DU_DRAWNAVMESH_CLOSEDLIST; @@ -282,6 +293,7 @@ void NavMeshTesterTool::recalc() m_spos[0],m_spos[1],m_spos[2], m_epos[0],m_epos[1],m_epos[2], m_filter.includeFlags, m_filter.excludeFlags); #endif + m_npolys = m_navMesh->findPath(m_startRef, m_endRef, m_spos, m_epos, &m_filter, m_polys, MAX_POLYS); m_nsmoothPath = 0; diff --git a/RecastDemo/Source/Sample_SoloMeshSimple.cpp b/RecastDemo/Source/Sample_SoloMeshSimple.cpp index cac68a1..962f7c1 100644 --- a/RecastDemo/Source/Sample_SoloMeshSimple.cpp +++ b/RecastDemo/Source/Sample_SoloMeshSimple.cpp @@ -321,6 +321,7 @@ void Sample_SoloMeshSimple::handleMeshChanged(class InputGeom* geom) } } + bool Sample_SoloMeshSimple::handleBuild() { if (!m_geom || !m_geom->getMesh())