diff --git a/Detour/Source/DetourStatNavMesh.cpp b/Detour/Source/DetourStatNavMesh.cpp index b3f23f8..e251963 100755 --- a/Detour/Source/DetourStatNavMesh.cpp +++ b/Detour/Source/DetourStatNavMesh.cpp @@ -572,19 +572,16 @@ dtStatNavMesh::~dtStatNavMesh() bool dtStatNavMesh::init(unsigned char* data, int dataSize, bool ownsData) { - m_header = (dtStatNavMeshHeader*)data; - if (m_header->magic != DT_NAVMESH_MAGIC) - { + dtStatNavMeshHeader* header = (dtStatNavMeshHeader*)data; + + if (header->magic != DT_NAVMESH_MAGIC) return false; - } - if (m_header->version != DT_NAVMESH_VERSION) - { + if (header->version != DT_NAVMESH_VERSION) return false; - } const int headerSize = sizeof(dtStatNavMeshHeader); - const int vertsSize = sizeof(float)*3*m_header->nverts; - const int polysSize = sizeof(dtPoly)*m_header->npolys; + const int vertsSize = sizeof(float)*3*header->nverts; + const int polysSize = sizeof(dtPoly)*header->npolys; m_verts = (float*)(data + headerSize); m_polys = (dtPoly*)(data + headerSize + vertsSize); @@ -604,6 +601,8 @@ bool dtStatNavMesh::init(unsigned char* data, int dataSize, bool ownsData) m_dataSize = dataSize; } + m_header = header; + return true; } @@ -629,6 +628,8 @@ const dtPoly* dtStatNavMesh::getPolyByRef(dtPolyRef ref) const int dtStatNavMesh::findPath(dtPolyRef startRef, dtPolyRef endRef, dtPolyRef* path, const int maxPathSize) { + if (!m_header) return 0; + if (!startRef || !endRef) return 0; @@ -769,6 +770,8 @@ int dtStatNavMesh::findStraightPath(const float* startPos, const float* endPos, const dtPolyRef* path, const int pathSize, float* straightPath, const int maxStraightPathSize) { + if (!m_header) return 0; + if (!maxStraightPathSize) return 0; @@ -910,9 +913,9 @@ int dtStatNavMesh::findStraightPath(const float* startPos, const float* endPos, int dtStatNavMesh::getPolyVerts(dtPolyRef ref, float* verts) { + if (!m_header) return 0; const dtPoly* poly = getPolyByRef(ref); - if (!poly) - return 0; + if (!poly) return 0; float* v = verts; for (int i = 0; i < (int)poly->nv; ++i) { @@ -927,10 +930,10 @@ int dtStatNavMesh::getPolyVerts(dtPolyRef ref, float* verts) bool dtStatNavMesh::raycast(dtPolyRef centerRef, const float* startPos, const float* endPos, float& t, dtPolyRef& endRef) { - endRef = centerRef; + if (!m_header) return 0; + if (!centerRef) return 0; - if (!centerRef) - return 0; + endRef = centerRef; dtPolyRef prevRef = centerRef; dtPolyRef curRef = centerRef; @@ -982,8 +985,8 @@ bool dtStatNavMesh::raycast(dtPolyRef centerRef, const float* startPos, const fl float dtStatNavMesh::findDistanceToWall(dtPolyRef centerRef, const float* centerPos, float maxRadius, float* hitPos, float* hitNormal) { - if (!centerRef) - return 0; + if (!m_header) return 0; + if (!centerRef) return 0; m_nodePool->clear(); m_openList->clear(); @@ -1097,8 +1100,8 @@ int dtStatNavMesh::findPolysAround(dtPolyRef centerRef, const float* centerPos, unsigned short* resultCost, unsigned short* resultDepth, const int maxResult) { - if (!centerRef) - return 0; + if (!m_header) return 0; + if (!centerRef) return 0; m_nodePool->clear(); m_openList->clear(); @@ -1202,6 +1205,8 @@ int dtStatNavMesh::findPolysAround(dtPolyRef centerRef, const float* centerPos, int dtStatNavMesh::queryPolygons(const float* center, const float* extents, unsigned short* ids, const int maxIds) { + if (!m_header) return 0; + const dtBVNode* node = &m_bvtree[0]; const dtBVNode* end = &m_bvtree[m_header->nnodes]; @@ -1253,6 +1258,8 @@ int dtStatNavMesh::queryPolygons(const float* center, const float* extents, dtPolyRef dtStatNavMesh::findNearestPoly(const float* center, const float* extents) { + if (!m_header) return 0; + // Get nearby polygons from proximity grid. unsigned short polys[128]; int npolys = queryPolygons(center, extents, polys, 128); diff --git a/Recast/Include/RecastDebugDraw.h b/Recast/Include/RecastDebugDraw.h index 4c4d018..12cf119 100644 --- a/Recast/Include/RecastDebugDraw.h +++ b/Recast/Include/RecastDebugDraw.h @@ -40,13 +40,14 @@ void rcDebugDrawHeightfieldSolid(const struct rcHeightfield& hf, void rcDebugDrawHeightfieldWalkable(const struct rcHeightfield& hf, const float* orig, float cs, float ch); -void rcDebugDrawMesh(const class rcMeshLoaderObj& mesh, const unsigned char* flags); -void rcDebugDrawMeshSlope(const class rcMeshLoaderObj& mesh, const float walkableSlopeAngle); +void rcDebugDrawMesh(const class rcMeshLoaderObj& mesh, const unsigned char* flags, const float miny, const float maxy); +void rcDebugDrawMeshSlope(const class rcMeshLoaderObj& mesh, const float walkableSlopeAngle, const float miny, const float maxy); void rcDebugDrawCompactHeightfieldSolid(const struct rcCompactHeightfield& chf); void rcDebugDrawCompactHeightfieldRegions(const struct rcCompactHeightfield& chf); void rcDebugDrawCompactHeightfieldDistance(const struct rcCompactHeightfield& chf); +void rcDebugDrawRegionConnections(const struct rcContourSet& cset, const float* orig, float cs, float ch, const float alpha = 1.0f); void rcDebugDrawRawContours(const struct rcContourSet& cset, const float* orig, float cs, float ch, const float alpha = 1.0f); void rcDebugDrawContours(const struct rcContourSet& cset, const float* orig, float cs, float ch); void rcDebugDrawPolyMesh(const struct rcPolyMesh& mesh); diff --git a/Recast/Source/RecastContour.cpp b/Recast/Source/RecastContour.cpp index 73f850f..0fa7a18 100644 --- a/Recast/Source/RecastContour.cpp +++ b/Recast/Source/RecastContour.cpp @@ -719,32 +719,6 @@ static bool insertPoint(rcContour* c, int idx, const int* v) return true; } -static void calcBox(const int* v0, const int* v1, int* bounds) -{ - bounds[0] = rcMin(v0[0], v1[0]); - bounds[1] = rcMin(v0[1], v1[1]); - bounds[2] = rcMin(v0[2], v1[2]); - bounds[3] = rcMax(v0[0], v1[0]); - bounds[4] = rcMax(v0[1], v1[1]); - bounds[5] = rcMax(v0[2], v1[2]); -} - -/*inline bool checkOverlapBoxY(const int* a, const int* b) -{ - bool overlap = true; - overlap = (a[0] >= b[3+0] || a[3+0] <= b[0]) ? false : overlap; - overlap = (a[1] >= b[3+1] || a[3+1] <= b[1]) ? false : overlap; - overlap = (a[2] >= b[3+2] || a[3+2] <= b[2]) ? false : overlap; - return overlap; -}*/ - -inline bool checkOverlapBoxY(const int* a, const int* b) -{ - bool overlap = true; - overlap = (a[1] > b[3+1] || a[3+1] < b[1]) ? false : overlap; - return overlap; -} - static bool conformVertex(rcContourSet* cset, const int* v, const int pminy, const int pmaxy, const int nminy, const int nmaxy, @@ -800,8 +774,6 @@ bool rcFixupAdjacentContours(rcContourSet* cseta, rcContourSet* csetb, rcTimeVal startTime = rcGetPerformanceTimer(); -// int nbox[6], pbox[6]; - for (int i = 0; i < cseta->nconts; ++i) { const rcContour& c = cseta->conts[i]; diff --git a/Recast/Source/RecastDebugDraw.cpp b/Recast/Source/RecastDebugDraw.cpp index 7e84eb2..a67b259 100644 --- a/Recast/Source/RecastDebugDraw.cpp +++ b/Recast/Source/RecastDebugDraw.cpp @@ -24,16 +24,20 @@ #include "MeshLoaderObj.h" #include "Recast.h" -void rcDebugDrawMesh(const rcMeshLoaderObj& mesh, const unsigned char* flags) +void rcDebugDrawMesh(const rcMeshLoaderObj& mesh, const unsigned char* flags, const float miny, const float maxy) { int nt = mesh.getTriCount(); const float* verts = mesh.getVerts(); const float* normals = mesh.getNormals(); const int* tris = mesh.getTris(); + + const float s = 0.5f / (maxy - miny); + glBegin(GL_TRIANGLES); for (int i = 0; i < nt*3; i += 3) { float a = (2+normals[i+0]+normals[i+1])/4; + a *= 0.5f + (verts[tris[i]*3+1]-miny)*s; if (flags && !flags[i/3]) glColor3f(a,a*0.3f,a*0.1f); else @@ -45,7 +49,7 @@ void rcDebugDrawMesh(const rcMeshLoaderObj& mesh, const unsigned char* flags) glEnd(); } -void rcDebugDrawMeshSlope(const rcMeshLoaderObj& mesh, const float walkableSlopeAngle) +void rcDebugDrawMeshSlope(const rcMeshLoaderObj& mesh, const float walkableSlopeAngle, const float miny, const float maxy) { const float walkableThr = cosf(walkableSlopeAngle/180.0f*(float)M_PI); @@ -54,11 +58,14 @@ void rcDebugDrawMeshSlope(const rcMeshLoaderObj& mesh, const float walkableSlope const float* normals = mesh.getNormals(); const int* tris = mesh.getTris(); + const float s = 0.5f / (maxy - miny); + glBegin(GL_TRIANGLES); for (int i = 0; i < nt*3; i += 3) { const float* norm = &normals[i]; float a = (2+norm[0]+norm[1])/4; + a *= 0.5f+(verts[tris[i]*3+1]-miny)*s; if (norm[1] > walkableThr) glColor3f(a,a,a); else @@ -148,6 +155,41 @@ void drawBox(float minx, float miny, float minz, float maxx, float maxy, float m } } + +void drawBox2(float minx, float miny, float minz, float maxx, float maxy, float maxz) +{ + float verts[8*3] = + { + minx, miny, minz, + maxx, miny, minz, + maxx, miny, maxz, + minx, miny, maxz, + minx, maxy, minz, + maxx, maxy, minz, + maxx, maxy, maxz, + minx, maxy, maxz, + }; + static const unsigned char inds[5*4] = + { + 7, 6, 5, 4, +// 0, 1, 2, 3, + 1, 5, 6, 2, + 3, 7, 4, 0, + 2, 6, 7, 3, + 0, 4, 5, 1, + }; + + const unsigned char* in = inds; + for (int i = 0; i < 5; ++i) + { + glVertex3fv(&verts[*in*3]); in++; + glVertex3fv(&verts[*in*3]); in++; + glVertex3fv(&verts[*in*3]); in++; + glVertex3fv(&verts[*in*3]); in++; + } +} + + void rcDebugDrawCylinderWire(float minx, float miny, float minz, float maxx, float maxy, float maxz, const float* col) { static const int NUM_SEG = 16; @@ -273,10 +315,11 @@ void rcDebugDrawCompactHeightfieldSolid(const rcCompactHeightfield& chf) { const rcCompactSpan& s = chf.spans[i]; const float fy = chf.bmin[1] + (s.y+1)*ch; - glVertex3f(fx, fy, fz); + drawBox2(fx, fy-ch*2, fz, fx+cs, fy, fz+cs); +/* glVertex3f(fx, fy, fz); glVertex3f(fx, fy, fz+cs); glVertex3f(fx+cs, fy, fz+cs); - glVertex3f(fx+cs, fy, fz); + glVertex3f(fx+cs, fy, fz);*/ } } } @@ -308,12 +351,16 @@ void rcDebugDrawCompactHeightfieldRegions(const rcCompactHeightfield& chf) glColor4fv(col); } else - glColor4ub(0,0,0,128); + { +// glColor4ub(0,0,0,128); + glColor3ub(128,128,128); + } const float fy = chf.bmin[1] + (s.y+1)*ch; - glVertex3f(fx, fy, fz); + drawBox2(fx, fy-ch*2, fz, fx+cs, fy, fz+cs); +/* glVertex3f(fx, fy, fz); glVertex3f(fx, fy, fz+cs); glVertex3f(fx+cs, fy, fz+cs); - glVertex3f(fx+cs, fy, fz); + glVertex3f(fx+cs, fy, fz);*/ } } } @@ -345,16 +392,123 @@ void rcDebugDrawCompactHeightfieldDistance(const rcCompactHeightfield& chf) const float fy = chf.bmin[1] + (s.y+1)*ch; float cd = (float)s.dist * dscale; glColor3f(cd, cd, cd); - glVertex3f(fx, fy, fz); + drawBox2(fx, fy-ch*2, fz, fx+cs, fy, fz+cs); +/* glVertex3f(fx, fy, fz); glVertex3f(fx, fy, fz+cs); glVertex3f(fx+cs, fy, fz+cs); - glVertex3f(fx+cs, fy, fz); + glVertex3f(fx+cs, fy, fz);*/ } } } glEnd(); } +static void getContourCenter(const rcContour* cont, const float* orig, float cs, float ch, float* center) +{ + center[0] = 0; + center[1] = 0; + center[2] = 0; + if (!cont->nverts) + return; + for (int i = 0; i < cont->nverts; ++i) + { + const int* v = &cont->verts[i*4]; + center[0] += (float)v[0]; + center[1] += (float)v[1]; + center[2] += (float)v[2]; + } + const float s = 1.0f / cont->nverts; + center[0] *= s * cs; + center[1] *= s * ch; + center[2] *= s * cs; + center[0] += orig[0]; + center[1] += orig[1] + 4*ch; + center[2] += orig[2]; +} + +static const rcContour* findContourFromSet(const rcContourSet& cset, unsigned short reg) +{ + for (int i = 0; i < cset.nconts; ++i) + { + if (cset.conts[i].reg == reg) + return &cset.conts[i]; + } + return 0; +} + +static void drawArc(const float* p0, const float* p1) +{ + static const int NPTS = 8; + float pts[NPTS*3]; + float dir[3]; + vsub(dir, p1, p0); + const float len = sqrtf(vdistSqr(p0, p1)); + for (int i = 0; i < NPTS; ++i) + { + float u = (float)i / (float)(NPTS-1); + float* p = &pts[i*3]; + p[0] = p0[0] + dir[0] * u; + p[1] = p0[1] + dir[1] * u + (len/4) * (1-rcSqr(u*2-1)); + p[2] = p0[2] + dir[2] * u; + } + for (int i = 0; i < NPTS-1; ++i) + { + glVertex3fv(&pts[i*3]); + glVertex3fv(&pts[(i+1)*3]); + } +} + +void rcDebugDrawRegionConnections(const rcContourSet& cset, const float* orig, float cs, float ch, const float alpha) +{ + // Draw centers + float pos[3], pos2[3]; + + glColor4ub(0,0,0,196); + + glLineWidth(2.0f); + glBegin(GL_LINES); + for (int i = 0; i < cset.nconts; ++i) + { + const rcContour* cont = &cset.conts[i]; + getContourCenter(cont, orig, cs, ch, pos); + for (int j = 0; j < cont->nverts; ++j) + { + const int* v = &cont->verts[j*4]; + if (v[3] == 0 || (unsigned short)v[3] < cont->reg) continue; + const rcContour* cont2 = findContourFromSet(cset, (unsigned short)v[3]); + if (cont2) + { + getContourCenter(cont2, orig, cs, ch, pos2); + drawArc(pos, pos2); +// glVertex3fv(pos); +// glVertex3fv(pos2); + } + } + } + glEnd(); + + float col[4] = { 1,1,1,alpha }; + + glPointSize(7.0f); + glBegin(GL_POINTS); + for (int i = 0; i < cset.nconts; ++i) + { + const rcContour* cont = &cset.conts[i]; + intToCol(cont->reg, col); + col[0] *= 0.5f; + col[1] *= 0.5f; + col[2] *= 0.5f; + glColor4fv(col); + getContourCenter(cont, orig, cs, ch, pos); + glVertex3fv(pos); + } + glEnd(); + + + glLineWidth(1.0f); + glPointSize(1.0f); +} + void rcDebugDrawRawContours(const rcContourSet& cset, const float* orig, float cs, float ch, const float alpha) { float col[4] = { 1,1,1,alpha }; diff --git a/RecastDemo/Build/Xcode/Recast.xcodeproj/memon.pbxuser b/RecastDemo/Build/Xcode/Recast.xcodeproj/memon.pbxuser index 8c472ea..17d1c6e 100644 --- a/RecastDemo/Build/Xcode/Recast.xcodeproj/memon.pbxuser +++ b/RecastDemo/Build/Xcode/Recast.xcodeproj/memon.pbxuser @@ -99,8 +99,8 @@ PBXFileDataSource_Target_ColumnID, ); }; - PBXPerProjectTemplateStateSaveDate = 265705984; - PBXWorkspaceStateSaveDate = 265705984; + PBXPerProjectTemplateStateSaveDate = 265812916; + PBXWorkspaceStateSaveDate = 265812916; }; perUserProjectItems = { 6B09CDFF0FD5563E005637D5 = 6B09CDFF0FD5563E005637D5 /* PBXTextBookmark */; @@ -145,6 +145,35 @@ 6B09CE740FD5BEC3005637D5 = 6B09CE740FD5BEC3005637D5 /* PBXTextBookmark */; 6B09CE750FD5BEC3005637D5 = 6B09CE750FD5BEC3005637D5 /* PBXTextBookmark */; 6B09CE770FD5BEC6005637D5 = 6B09CE770FD5BEC6005637D5 /* PBXTextBookmark */; + 6B164B210FD678A500D2F919 = 6B164B210FD678A500D2F919 /* PBXTextBookmark */; + 6B164B220FD678A500D2F919 = 6B164B220FD678A500D2F919 /* PBXTextBookmark */; + 6B164B230FD678A500D2F919 = 6B164B230FD678A500D2F919 /* PBXTextBookmark */; + 6B164B240FD678A500D2F919 = 6B164B240FD678A500D2F919 /* PBXTextBookmark */; + 6B164B250FD678A500D2F919 = 6B164B250FD678A500D2F919 /* PBXTextBookmark */; + 6B164B260FD678A500D2F919 = 6B164B260FD678A500D2F919 /* PBXTextBookmark */; + 6B164B270FD678A500D2F919 = 6B164B270FD678A500D2F919 /* PBXTextBookmark */; + 6B164B280FD678A500D2F919 = 6B164B280FD678A500D2F919 /* PBXTextBookmark */; + 6B164B290FD678A500D2F919 = 6B164B290FD678A500D2F919 /* PBXTextBookmark */; + 6B164B2A0FD678A500D2F919 = 6B164B2A0FD678A500D2F919 /* PBXTextBookmark */; + 6B164B2B0FD678A500D2F919 = 6B164B2B0FD678A500D2F919 /* PBXTextBookmark */; + 6B164B2C0FD678A500D2F919 = 6B164B2C0FD678A500D2F919 /* PBXTextBookmark */; + 6B164B2D0FD678A500D2F919 = 6B164B2D0FD678A500D2F919 /* PBXTextBookmark */; + 6B164B2E0FD678A500D2F919 = 6B164B2E0FD678A500D2F919 /* PBXTextBookmark */; + 6B164B2F0FD678A500D2F919 = 6B164B2F0FD678A500D2F919 /* PBXTextBookmark */; + 6B164B300FD678A500D2F919 = 6B164B300FD678A500D2F919 /* PBXTextBookmark */; + 6B164B310FD678A500D2F919 = 6B164B310FD678A500D2F919 /* PBXTextBookmark */; + 6B164B320FD678A500D2F919 = 6B164B320FD678A500D2F919 /* PBXTextBookmark */; + 6B164B330FD678A500D2F919 = 6B164B330FD678A500D2F919 /* PBXTextBookmark */; + 6B164B340FD678A500D2F919 = 6B164B340FD678A500D2F919 /* PBXTextBookmark */; + 6B164B350FD678A500D2F919 = 6B164B350FD678A500D2F919 /* PBXTextBookmark */; + 6B164B360FD678A500D2F919 = 6B164B360FD678A500D2F919 /* PBXTextBookmark */; + 6B164B370FD678A500D2F919 = 6B164B370FD678A500D2F919 /* PBXTextBookmark */; + 6B164B380FD678A500D2F919 = 6B164B380FD678A500D2F919 /* PBXTextBookmark */; + 6B164B390FD678A500D2F919 = 6B164B390FD678A500D2F919 /* PBXTextBookmark */; + 6B164B3A0FD678A500D2F919 = 6B164B3A0FD678A500D2F919 /* PBXTextBookmark */; + 6B164B3B0FD678A500D2F919 = 6B164B3B0FD678A500D2F919 /* PBXTextBookmark */; + 6B164B3C0FD678A500D2F919 = 6B164B3C0FD678A500D2F919 /* PBXTextBookmark */; + 6B164B3D0FD678A500D2F919 = 6B164B3D0FD678A500D2F919 /* PBXTextBookmark */; 6B1E02680F924A8500CC0038 = 6B1E02680F924A8500CC0038 /* PBXTextBookmark */; 6B1E02750F924A8500CC0038 = 6B1E02750F924A8500CC0038 /* PBXTextBookmark */; 6B1E028F0F924D5A00CC0038 = 6B1E028F0F924D5A00CC0038 /* PBXTextBookmark */; @@ -170,6 +199,62 @@ 6B8DB2D70F93A7A5007FA9E1 = 6B8DB2D70F93A7A5007FA9E1 /* PBXTextBookmark */; 6B8DB38F0F9798DE007FA9E1 = 6B8DB38F0F9798DE007FA9E1 /* PBXTextBookmark */; 6B8DB3900F9798DE007FA9E1 = 6B8DB3900F9798DE007FA9E1 /* PBXTextBookmark */; + 6B8FD17B0FD7C3230059D643 = 6B8FD17B0FD7C3230059D643 /* PBXTextBookmark */; + 6B8FD1810FD7C3F10059D643 = 6B8FD1810FD7C3F10059D643 /* PBXTextBookmark */; + 6B8FD1820FD7C3F10059D643 = 6B8FD1820FD7C3F10059D643 /* PBXTextBookmark */; + 6B8FD1830FD7C3F10059D643 = 6B8FD1830FD7C3F10059D643 /* PBXTextBookmark */; + 6B8FD1840FD7C3F10059D643 = 6B8FD1840FD7C3F10059D643 /* PBXTextBookmark */; + 6B8FD18D0FD7C4D10059D643 = 6B8FD18D0FD7C4D10059D643 /* PBXTextBookmark */; + 6B8FD18E0FD7C4D10059D643 = 6B8FD18E0FD7C4D10059D643 /* PBXTextBookmark */; + 6B8FD18F0FD7C4D10059D643 = 6B8FD18F0FD7C4D10059D643 /* PBXTextBookmark */; + 6B8FD1900FD7C4D10059D643 = 6B8FD1900FD7C4D10059D643 /* PBXTextBookmark */; + 6B8FD1910FD7C4D10059D643 = 6B8FD1910FD7C4D10059D643 /* PBXTextBookmark */; + 6B8FD1940FD7C50F0059D643 = 6B8FD1940FD7C50F0059D643 /* PBXTextBookmark */; + 6B8FD1960FD7C5660059D643 = 6B8FD1960FD7C5660059D643 /* PBXTextBookmark */; + 6B8FD1980FD7C5B60059D643 = 6B8FD1980FD7C5B60059D643 /* PBXTextBookmark */; + 6B8FD19B0FD7ED310059D643 = 6B8FD19B0FD7ED310059D643 /* PBXTextBookmark */; + 6B8FD19C0FD7ED310059D643 = 6B8FD19C0FD7ED310059D643 /* PBXTextBookmark */; + 6B8FD19D0FD7ED310059D643 = 6B8FD19D0FD7ED310059D643 /* PBXTextBookmark */; + 6B8FD19E0FD7ED310059D643 = 6B8FD19E0FD7ED310059D643 /* PBXTextBookmark */; + 6B8FD19F0FD7ED310059D643 = 6B8FD19F0FD7ED310059D643 /* PBXTextBookmark */; + 6B8FD1A00FD7ED310059D643 = 6B8FD1A00FD7ED310059D643 /* PBXTextBookmark */; + 6B8FD1A10FD7ED310059D643 = 6B8FD1A10FD7ED310059D643 /* PBXTextBookmark */; + 6B8FD1A20FD7ED310059D643 = 6B8FD1A20FD7ED310059D643 /* PBXTextBookmark */; + 6B8FD1A30FD7ED310059D643 = 6B8FD1A30FD7ED310059D643 /* PBXTextBookmark */; + 6B8FD1A40FD7ED310059D643 = 6B8FD1A40FD7ED310059D643 /* PBXTextBookmark */; + 6B8FD1A50FD7ED310059D643 = 6B8FD1A50FD7ED310059D643 /* PBXTextBookmark */; + 6B8FD1A60FD7ED310059D643 = 6B8FD1A60FD7ED310059D643 /* PBXTextBookmark */; + 6B8FD1A70FD7ED310059D643 = 6B8FD1A70FD7ED310059D643 /* PBXTextBookmark */; + 6B8FD1AA0FD7ED7B0059D643 = 6B8FD1AA0FD7ED7B0059D643 /* PBXTextBookmark */; + 6B8FD1AE0FD7EE090059D643 = 6B8FD1AE0FD7EE090059D643 /* PBXTextBookmark */; + 6B8FD1AF0FD7EED60059D643 = 6B8FD1AF0FD7EED60059D643 /* PBXTextBookmark */; + 6B8FD1B20FD7EFAB0059D643 = 6B8FD1B20FD7EFAB0059D643 /* PBXTextBookmark */; + 6B8FD1B30FD7EFAB0059D643 = 6B8FD1B30FD7EFAB0059D643 /* PBXTextBookmark */; + 6B8FD1B40FD7EFAB0059D643 = 6B8FD1B40FD7EFAB0059D643 /* PBXTextBookmark */; + 6B8FD1B50FD7EFAB0059D643 = 6B8FD1B50FD7EFAB0059D643 /* PBXTextBookmark */; + 6B8FD1B80FD7F05F0059D643 = 6B8FD1B80FD7F05F0059D643 /* PBXTextBookmark */; + 6B8FD1B90FD7F05F0059D643 = 6B8FD1B90FD7F05F0059D643 /* PBXTextBookmark */; + 6B8FD1BA0FD7F05F0059D643 = 6B8FD1BA0FD7F05F0059D643 /* PBXTextBookmark */; + 6B8FD1BB0FD7F05F0059D643 = 6B8FD1BB0FD7F05F0059D643 /* PBXTextBookmark */; + 6B8FD1BF0FD7F15D0059D643 = 6B8FD1BF0FD7F15D0059D643 /* PBXTextBookmark */; + 6B8FD1C00FD7F15D0059D643 = 6B8FD1C00FD7F15D0059D643 /* PBXTextBookmark */; + 6B8FD1C10FD7F15D0059D643 = 6B8FD1C10FD7F15D0059D643 /* PBXTextBookmark */; + 6B8FD1C20FD7F15D0059D643 = 6B8FD1C20FD7F15D0059D643 /* PBXTextBookmark */; + 6B8FD1C70FD7F2070059D643 = 6B8FD1C70FD7F2070059D643 /* PBXTextBookmark */; + 6B8FD1C80FD7F2070059D643 = 6B8FD1C80FD7F2070059D643 /* PBXTextBookmark */; + 6B8FD1CB0FD7F2A20059D643 = 6B8FD1CB0FD7F2A20059D643 /* PBXTextBookmark */; + 6B8FD1CE0FD7F56C0059D643 = 6B8FD1CE0FD7F56C0059D643 /* PBXTextBookmark */; + 6B8FD1CF0FD7F56C0059D643 = 6B8FD1CF0FD7F56C0059D643 /* PBXTextBookmark */; + 6B8FD1D00FD7F56C0059D643 = 6B8FD1D00FD7F56C0059D643 /* PBXTextBookmark */; + 6B8FD1D10FD7F56C0059D643 = 6B8FD1D10FD7F56C0059D643 /* PBXTextBookmark */; + 6B8FD1D20FD7F56C0059D643 = 6B8FD1D20FD7F56C0059D643 /* PBXTextBookmark */; + 6B8FD1D30FD7F56C0059D643 = 6B8FD1D30FD7F56C0059D643 /* PBXTextBookmark */; + 6B8FD1D50FD7F5AC0059D643 = 6B8FD1D50FD7F5AC0059D643 /* PBXTextBookmark */; + 6B8FD1D80FD7F6190059D643 = 6B8FD1D80FD7F6190059D643 /* PBXTextBookmark */; + 6B8FD1DA0FD7F69A0059D643 = 6B8FD1DA0FD7F69A0059D643 /* PBXTextBookmark */; + 6B8FD1DB0FD7F69A0059D643 = 6B8FD1DB0FD7F69A0059D643 /* PBXTextBookmark */; + 6B8FD1DC0FD7F69A0059D643 = 6B8FD1DC0FD7F69A0059D643 /* PBXTextBookmark */; + 6B8FD1DD0FD7F69A0059D643 = 6B8FD1DD0FD7F69A0059D643 /* PBXTextBookmark */; 6BB787680FC03EAD003C24DB = 6BB787680FC03EAD003C24DB /* PBXTextBookmark */; 6BB7876A0FC03EAD003C24DB = 6BB7876A0FC03EAD003C24DB /* PBXTextBookmark */; 6BB7876B0FC03EAD003C24DB = 6BB7876B0FC03EAD003C24DB /* PBXTextBookmark */; @@ -191,6 +276,47 @@ 6BB85D3E0FCEAA6300758966 = 6BB85D3E0FCEAA6300758966 /* PBXTextBookmark */; 6BB87E0B0F9DE8A300E33F12 = 6BB87E0B0F9DE8A300E33F12 /* PBXTextBookmark */; 6BB87E0E0F9DE8A300E33F12 = 6BB87E0E0F9DE8A300E33F12 /* PBXTextBookmark */; + 6BC6204B0FD684AD0022CACF = 6BC6204B0FD684AD0022CACF /* PBXTextBookmark */; + 6BC620550FD684B30022CACF = 6BC620550FD684B30022CACF /* PBXTextBookmark */; + 6BC620580FD684D50022CACF = 6BC620580FD684D50022CACF /* PBXTextBookmark */; + 6BC620590FD684E70022CACF = 6BC620590FD684E70022CACF /* PBXTextBookmark */; + 6BC6205B0FD684F10022CACF = 6BC6205B0FD684F10022CACF /* PBXTextBookmark */; + 6BC620600FD686900022CACF = 6BC620600FD686900022CACF /* PBXTextBookmark */; + 6BC620610FD686900022CACF = 6BC620610FD686900022CACF /* PBXTextBookmark */; + 6BC620620FD686900022CACF = 6BC620620FD686900022CACF /* PBXTextBookmark */; + 6BC620630FD686900022CACF = 6BC620630FD686900022CACF /* PBXTextBookmark */; + 6BC620640FD686900022CACF = 6BC620640FD686900022CACF /* PBXTextBookmark */; + 6BC620650FD686900022CACF = 6BC620650FD686900022CACF /* PBXTextBookmark */; + 6BC620660FD686900022CACF = 6BC620660FD686900022CACF /* PBXTextBookmark */; + 6BC620670FD686900022CACF = 6BC620670FD686900022CACF /* PBXTextBookmark */; + 6BC620680FD686900022CACF = 6BC620680FD686900022CACF /* PBXTextBookmark */; + 6BC620690FD686900022CACF = 6BC620690FD686900022CACF /* PBXTextBookmark */; + 6BC6206A0FD686900022CACF = 6BC6206A0FD686900022CACF /* PBXTextBookmark */; + 6BC6206B0FD686900022CACF = 6BC6206B0FD686900022CACF /* PBXTextBookmark */; + 6BC6206C0FD686900022CACF = 6BC6206C0FD686900022CACF /* PBXTextBookmark */; + 6BC6206E0FD6870C0022CACF = 6BC6206E0FD6870C0022CACF /* PBXTextBookmark */; + 6BC6206F0FD6870C0022CACF = 6BC6206F0FD6870C0022CACF /* PBXTextBookmark */; + 6BC620700FD6870C0022CACF = 6BC620700FD6870C0022CACF /* PBXTextBookmark */; + 6BC620710FD6870C0022CACF = 6BC620710FD6870C0022CACF /* PBXTextBookmark */; + 6BC620730FD687B90022CACF = 6BC620730FD687B90022CACF /* PBXTextBookmark */; + 6BC6207A0FD7BBAB0022CACF = 6BC6207A0FD7BBAB0022CACF /* PBXTextBookmark */; + 6BC6207B0FD7BBAB0022CACF = 6BC6207B0FD7BBAB0022CACF /* PBXTextBookmark */; + 6BC6207D0FD7BCB50022CACF = 6BC6207D0FD7BCB50022CACF /* PBXTextBookmark */; + 6BC6207F0FD7BCD00022CACF = 6BC6207F0FD7BCD00022CACF /* PBXTextBookmark */; + 6BC620810FD7BD030022CACF = 6BC620810FD7BD030022CACF /* PBXTextBookmark */; + 6BC620830FD7BD370022CACF = 6BC620830FD7BD370022CACF /* PBXTextBookmark */; + 6BC620850FD7BD520022CACF = 6BC620850FD7BD520022CACF /* PBXTextBookmark */; + 6BC620870FD7BD710022CACF = 6BC620870FD7BD710022CACF /* PBXTextBookmark */; + 6BC6208D0FD7C2380022CACF = 6BC6208D0FD7C2380022CACF /* PBXTextBookmark */; + 6BC6208E0FD7C2380022CACF = 6BC6208E0FD7C2380022CACF /* PBXTextBookmark */; + 6BC6208F0FD7C2380022CACF = 6BC6208F0FD7C2380022CACF /* PBXTextBookmark */; + 6BC620900FD7C2380022CACF = 6BC620900FD7C2380022CACF /* PBXTextBookmark */; + 6BC620910FD7C2380022CACF = 6BC620910FD7C2380022CACF /* PBXTextBookmark */; + 6BC620920FD7C2380022CACF = 6BC620920FD7C2380022CACF /* PBXTextBookmark */; + 6BC620930FD7C2380022CACF = 6BC620930FD7C2380022CACF /* PBXTextBookmark */; + 6BC620940FD7C2380022CACF = 6BC620940FD7C2380022CACF /* PBXTextBookmark */; + 6BC620950FD7C2380022CACF = 6BC620950FD7C2380022CACF /* PBXTextBookmark */; + 6BC620960FD7C2380022CACF = 6BC620960FD7C2380022CACF /* PBXTextBookmark */; }; sourceControlManager = 6B8632A90F78115100E2684A /* Source Control */; userBuildSettings = { @@ -339,7 +465,7 @@ fRef = 6B137C830F7FCC1100459200 /* RecastContour.cpp */; name = "RecastContour.cpp: 797"; rLen = 0; - rLoc = 21273; + rLoc = 20511; rType = 0; vrLen = 742; vrLoc = 18804; @@ -349,7 +475,7 @@ fRef = 6B137C6A0F7FCBBB00459200 /* demo.cpp */; name = "demo.cpp: 638"; rLen = 0; - rLoc = 16356; + rLoc = 13575; rType = 0; vrLen = 1081; vrLoc = 15593; @@ -359,7 +485,7 @@ fRef = 6B137C830F7FCC1100459200 /* RecastContour.cpp */; name = "RecastContour.cpp: 735"; rLen = 0; - rLoc = 18404; + rLoc = 17834; rType = 0; vrLen = 746; vrLoc = 17754; @@ -399,7 +525,7 @@ fRef = 6B137C830F7FCC1100459200 /* RecastContour.cpp */; name = "RecastContour.cpp: 767"; rLen = 0; - rLoc = 19212; + rLoc = 18476; rType = 0; vrLen = 957; vrLoc = 20651; @@ -459,7 +585,7 @@ fRef = 6B137C830F7FCC1100459200 /* RecastContour.cpp */; name = "RecastContour.cpp: 767"; rLen = 0; - rLoc = 19212; + rLoc = 18476; rType = 0; vrLen = 957; vrLoc = 20651; @@ -479,7 +605,7 @@ fRef = 6B137C6A0F7FCBBB00459200 /* demo.cpp */; name = "demo.cpp: 709"; rLen = 19; - rLoc = 18154; + rLoc = 15373; rType = 0; vrLen = 834; vrLoc = 17855; @@ -549,7 +675,7 @@ fRef = 6B137C6A0F7FCBBB00459200 /* demo.cpp */; name = "demo.cpp: 714"; rLen = 0; - rLoc = 18427; + rLoc = 15646; rType = 0; vrLen = 997; vrLoc = 17616; @@ -579,7 +705,7 @@ fRef = 6B137C6A0F7FCBBB00459200 /* demo.cpp */; name = "demo.cpp: 742"; rLen = 0; - rLoc = 19583; + rLoc = 16802; rType = 0; vrLen = 2052; vrLoc = 18613; @@ -599,7 +725,7 @@ fRef = 6B137C6A0F7FCBBB00459200 /* demo.cpp */; name = "demo.cpp: 742"; rLen = 0; - rLoc = 19583; + rLoc = 16802; rType = 0; vrLen = 2052; vrLoc = 18613; @@ -619,16 +745,16 @@ fRef = 6B137C6A0F7FCBBB00459200 /* demo.cpp */; name = "demo.cpp: 1044"; rLen = 0; - rLoc = 29307; + rLoc = 26541; rType = 0; vrLen = 812; vrLoc = 28927; }; 6B137C6A0F7FCBBB00459200 /* demo.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {969, 31664}}"; - sepNavSelRange = "{29222, 0}"; - sepNavVisRange = "{28927, 812}"; + sepNavIntBoundsRect = "{{0, 0}, {969, 31872}}"; + sepNavSelRange = "{25878, 0}"; + sepNavVisRange = "{25484, 807}"; }; }; 6B137C6B0F7FCBBB00459200 /* glfont.cpp */ = { @@ -661,16 +787,16 @@ }; 6B137C7E0F7FCBFE00459200 /* Recast.h */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {969, 5872}}"; - sepNavSelRange = "{12894, 15}"; - sepNavVisRange = "{12216, 1116}"; + sepNavIntBoundsRect = "{{0, 0}, {969, 6928}}"; + sepNavSelRange = "{6131, 8}"; + sepNavVisRange = "{6012, 638}"; }; }; 6B137C7F0F7FCBFE00459200 /* RecastDebugDraw.h */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {969, 960}}"; - sepNavSelRange = "{1066, 0}"; - sepNavVisRange = "{1034, 1604}"; + sepNavIntBoundsRect = "{{0, 0}, {969, 976}}"; + sepNavSelRange = "{2031, 28}"; + sepNavVisRange = "{1036, 1807}"; }; }; 6B137C800F7FCBFE00459200 /* RecastLog.h */ = { @@ -697,16 +823,16 @@ }; 6B137C830F7FCC1100459200 /* RecastContour.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {1219, 13632}}"; - sepNavSelRange = "{19267, 0}"; - sepNavVisRange = "{18939, 582}"; + sepNavIntBoundsRect = "{{0, 0}, {969, 13360}}"; + sepNavSelRange = "{9576, 0}"; + sepNavVisRange = "{8864, 937}"; }; }; 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {969, 8112}}"; - sepNavSelRange = "{10218, 0}"; - sepNavVisRange = "{9726, 759}"; + sepNavIntBoundsRect = "{{0, 0}, {969, 10976}}"; + sepNavSelRange = "{8149, 0}"; + sepNavVisRange = "{6919, 807}"; }; }; 6B137C850F7FCC1100459200 /* RecastFilter.cpp */ = { @@ -720,7 +846,7 @@ uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {969, 1248}}"; sepNavSelRange = "{1703, 0}"; - sepNavVisRange = "{1527, 299}"; + sepNavVisRange = "{1314, 512}"; }; }; 6B137C870F7FCC1100459200 /* RecastMesh.cpp */ = { @@ -751,6 +877,317 @@ sepNavVisRange = "{0, 574}"; }; }; + 6B164AFD0FD6687600D2F919 /* glimage.cpp */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {969, 1440}}"; + sepNavSelRange = "{947, 0}"; + sepNavVisRange = "{554, 900}"; + }; + }; + 6B164AFF0FD6688000D2F919 /* glimage.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {969, 592}}"; + sepNavSelRange = "{110, 7}"; + sepNavVisRange = "{0, 494}"; + }; + }; + 6B164B000FD668B700D2F919 /* stb_image.c */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {969, 62620}}"; + sepNavSelRange = "{120397, 30}"; + sepNavVisRange = "{119874, 666}"; + }; + }; + 6B164B210FD678A500D2F919 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BDD9E080F91113800904EEF /* DetourStatNavMesh.cpp */; + name = "DetourStatNavMesh.cpp: 1208"; + rLen = 0; + rLoc = 26982; + rType = 0; + vrLen = 1391; + vrLoc = 26481; + }; + 6B164B220FD678A500D2F919 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BDD9E070F91113800904EEF /* DetourDebugDraw.cpp */; + name = "DetourDebugDraw.cpp: 152"; + rLen = 26; + rLoc = 4065; + rType = 0; + vrLen = 723; + vrLoc = 3786; + }; + 6B164B230FD678A500D2F919 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 361"; + rLen = 0; + rLoc = 12675; + rType = 0; + vrLen = 755; + vrLoc = 9050; + }; + 6B164B240FD678A500D2F919 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B164AFD0FD6687600D2F919 /* glimage.cpp */; + name = "glimage.cpp: 55"; + rLen = 0; + rLoc = 947; + rType = 0; + vrLen = 900; + vrLoc = 554; + }; + 6B164B250FD678A500D2F919 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B164AFF0FD6688000D2F919 /* glimage.h */; + name = "glimage.h: 12"; + rLen = 7; + rLoc = 110; + rType = 0; + vrLen = 494; + vrLoc = 0; + }; + 6B164B260FD678A500D2F919 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B164B000FD668B700D2F919 /* stb_image.c */; + name = "stb_image.c: 3612"; + rLen = 30; + rLoc = 120397; + rType = 0; + vrLen = 610; + vrLoc = 119874; + }; + 6B164B270FD678A500D2F919 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C6A0F7FCBBB00459200 /* demo.cpp */; + name = "demo.cpp: 153"; + rLen = 0; + rLoc = 3861; + rType = 0; + vrLen = 629; + vrLoc = 3632; + }; + 6B164B280FD678A500D2F919 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C6A0F7FCBBB00459200 /* demo.cpp */; + name = "demo.cpp: 1040"; + rLen = 0; + rLoc = 26456; + rType = 0; + vrLen = 812; + vrLoc = 28927; + }; + 6B164B290FD678A500D2F919 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 509"; + rLen = 0; + rLoc = 16486; + rType = 0; + vrLen = 787; + vrLoc = 12134; + }; + 6B164B2A0FD678A500D2F919 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BDD9E070F91113800904EEF /* DetourDebugDraw.cpp */; + name = "DetourDebugDraw.cpp: 173"; + rLen = 0; + rLoc = 4525; + rType = 0; + vrLen = 715; + vrLoc = 4023; + }; + 6B164B2B0FD678A500D2F919 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 277"; + rLen = 0; + rLoc = 8234; + rType = 0; + vrLen = 807; + vrLoc = 6702; + }; + 6B164B2C0FD678A500D2F919 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BDD9E080F91113800904EEF /* DetourStatNavMesh.cpp */; + name = "DetourStatNavMesh.cpp: 1208"; + rLen = 0; + rLoc = 26982; + rType = 0; + vrLen = 1391; + vrLoc = 26481; + }; + 6B164B2D0FD678A500D2F919 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BDD9E070F91113800904EEF /* DetourDebugDraw.cpp */; + name = "DetourDebugDraw.cpp: 149"; + rLen = 0; + rLoc = 4024; + rType = 0; + vrLen = 723; + vrLoc = 3786; + }; + 6B164B2E0FD678A500D2F919 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 479"; + rLen = 0; + rLoc = 15778; + rType = 0; + vrLen = 889; + vrLoc = 11590; + }; + 6B164B2F0FD678A500D2F919 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BDD9E070F91113800904EEF /* DetourDebugDraw.cpp */; + name = "DetourDebugDraw.cpp: 152"; + rLen = 26; + rLoc = 4065; + rType = 0; + vrLen = 723; + vrLoc = 3786; + }; + 6B164B300FD678A500D2F919 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 361"; + rLen = 0; + rLoc = 12675; + rType = 0; + vrLen = 755; + vrLoc = 9050; + }; + 6B164B310FD678A500D2F919 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C6A0F7FCBBB00459200 /* demo.cpp */; + name = "demo.cpp: 1243"; + rLen = 0; + rLoc = 31694; + rType = 0; + vrLen = 797; + vrLoc = 33780; + }; + 6B164B320FD678A500D2F919 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B164AFF0FD6688000D2F919 /* glimage.h */; + name = "glimage.h: 26"; + rLen = 0; + rLoc = 191; + rType = 0; + vrLen = 606; + vrLoc = 104; + }; + 6B164B330FD678A500D2F919 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B164AFD0FD6687600D2F919 /* glimage.cpp */; + name = "glimage.cpp: 74"; + rLen = 0; + rLoc = 1364; + rType = 0; + vrLen = 974; + vrLoc = 914; + }; + 6B164B340FD678A500D2F919 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B164AFF0FD6688000D2F919 /* glimage.h */; + name = "glimage.h: 39"; + rLen = 0; + rLoc = 432; + rType = 0; + vrLen = 606; + vrLoc = 104; + }; + 6B164B350FD678A500D2F919 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B164AFD0FD6687600D2F919 /* glimage.cpp */; + name = "glimage.cpp: 64"; + rLen = 0; + rLoc = 1019; + rType = 0; + vrLen = 1129; + vrLoc = 645; + }; + 6B164B360FD678A500D2F919 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B164AFF0FD6688000D2F919 /* glimage.h */; + name = "glimage.h: 24"; + rLen = 0; + rLoc = 346; + rType = 0; + vrLen = 465; + vrLoc = 36; + }; + 6B164B370FD678A500D2F919 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B164AFD0FD6687600D2F919 /* glimage.cpp */; + name = "glimage.cpp: 29"; + rLen = 0; + rLoc = 364; + rType = 0; + vrLen = 474; + vrLoc = 0; + }; + 6B164B380FD678A500D2F919 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B164AFF0FD6688000D2F919 /* glimage.h */; + name = "glimage.h: 24"; + rLen = 0; + rLoc = 346; + rType = 0; + vrLen = 465; + vrLoc = 36; + }; + 6B164B390FD678A500D2F919 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B164AFD0FD6687600D2F919 /* glimage.cpp */; + name = "glimage.cpp: 55"; + rLen = 0; + rLoc = 947; + rType = 0; + vrLen = 900; + vrLoc = 554; + }; + 6B164B3A0FD678A500D2F919 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B164AFF0FD6688000D2F919 /* glimage.h */; + name = "glimage.h: 12"; + rLen = 7; + rLoc = 110; + rType = 0; + vrLen = 494; + vrLoc = 0; + }; + 6B164B3B0FD678A500D2F919 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C6A0F7FCBBB00459200 /* demo.cpp */; + name = "demo.cpp: 153"; + rLen = 0; + rLoc = 3861; + rType = 0; + vrLen = 629; + vrLoc = 3632; + }; + 6B164B3C0FD678A500D2F919 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B164B000FD668B700D2F919 /* stb_image.c */; + name = "stb_image.c: 3612"; + rLen = 30; + rLoc = 120397; + rType = 0; + vrLen = 610; + vrLoc = 119874; + }; + 6B164B3D0FD678A500D2F919 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C6A0F7FCBBB00459200 /* demo.cpp */; + name = "demo.cpp: 153"; + rLen = 0; + rLoc = 3861; + rType = 0; + vrLen = 613; + vrLoc = 3632; + }; 6B1E02680F924A8500CC0038 /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = 6B137C820F7FCC1100459200 /* Recast.cpp */; @@ -946,7 +1383,7 @@ hitCount = 0; ignoreCount = 0; lineNumber = 5; - modificationTime = 265642840.2117; + modificationTime = 265812977.276666; state = 0; }; 6B7708F20FBDA96300D21BAE /* PBXTextBookmark */ = { @@ -1057,7 +1494,7 @@ fRef = 6BDD9E070F91113800904EEF /* DetourDebugDraw.cpp */; name = "DetourDebugDraw.cpp: 151"; rLen = 0; - rLoc = 4057; + rLoc = 4059; rType = 0; vrLen = 820; vrLoc = 3643; @@ -1067,7 +1504,7 @@ fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; name = "RecastDebugDraw.cpp: 356"; rLen = 19; - rLoc = 9641; + rLoc = 13447; rType = 0; vrLen = 696; vrLoc = 8752; @@ -1092,6 +1529,566 @@ vrLen = 1243; vrLoc = 0; }; + 6B8FD17B0FD7C3230059D643 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C6A0F7FCBBB00459200 /* demo.cpp */; + name = "demo.cpp: 1563"; + rLen = 0; + rLoc = 40263; + rType = 0; + vrLen = 970; + vrLoc = 42664; + }; + 6B8FD1810FD7C3F10059D643 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C6A0F7FCBBB00459200 /* demo.cpp */; + name = "demo.cpp: 1032"; + rLen = 0; + rLoc = 26038; + rType = 0; + vrLen = 803; + vrLoc = 28482; + }; + 6B8FD1820FD7C3F10059D643 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 411"; + rLen = 0; + rLoc = 11886; + rType = 0; + vrLen = 821; + vrLoc = 9964; + }; + 6B8FD1830FD7C3F10059D643 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C6A0F7FCBBB00459200 /* demo.cpp */; + name = "demo.cpp: 1032"; + rLen = 0; + rLoc = 26038; + rType = 0; + vrLen = 803; + vrLoc = 28482; + }; + 6B8FD1840FD7C3F10059D643 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 414"; + rLen = 0; + rLoc = 12103; + rType = 0; + vrLen = 809; + vrLoc = 9964; + }; + 6B8FD18D0FD7C4D10059D643 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C830F7FCC1100459200 /* RecastContour.cpp */; + name = "RecastContour.cpp: 388"; + rLen = 0; + rLoc = 9576; + rType = 0; + vrLen = 937; + vrLoc = 8864; + }; + 6B8FD18E0FD7C4D10059D643 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 410"; + rLen = 0; + rLoc = 11885; + rType = 0; + vrLen = 842; + vrLoc = 9966; + }; + 6B8FD18F0FD7C4D10059D643 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 410"; + rLen = 0; + rLoc = 11885; + rType = 0; + vrLen = 844; + vrLoc = 9964; + }; + 6B8FD1900FD7C4D10059D643 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C830F7FCC1100459200 /* RecastContour.cpp */; + name = "RecastContour.cpp: 388"; + rLen = 0; + rLoc = 9576; + rType = 0; + vrLen = 937; + vrLoc = 8864; + }; + 6B8FD1910FD7C4D10059D643 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 411"; + rLen = 0; + rLoc = 11960; + rType = 0; + vrLen = 840; + vrLoc = 10090; + }; + 6B8FD1940FD7C50F0059D643 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 427"; + rLen = 0; + rLoc = 12107; + rType = 0; + vrLen = 814; + vrLoc = 10298; + }; + 6B8FD1960FD7C5660059D643 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 420"; + rLen = 0; + rLoc = 11874; + rType = 0; + vrLen = 838; + vrLoc = 10298; + }; + 6B8FD1980FD7C5B60059D643 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 403"; + rLen = 0; + rLoc = 11569; + rType = 0; + vrLen = 784; + vrLoc = 9976; + }; + 6B8FD19B0FD7ED310059D643 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C7F0F7FCBFE00459200 /* RecastDebugDraw.h */; + name = "RecastDebugDraw.h: 50"; + rLen = 28; + rLoc = 2031; + rType = 0; + vrLen = 1807; + vrLoc = 1036; + }; + 6B8FD19C0FD7ED310059D643 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C860F7FCC1100459200 /* RecastLog.cpp */; + name = "RecastLog.cpp: 68"; + rLen = 0; + rLoc = 1703; + rType = 0; + vrLen = 512; + vrLoc = 1314; + }; + 6B8FD19D0FD7ED310059D643 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C850F7FCC1100459200 /* RecastFilter.cpp */; + name = "RecastFilter.cpp: 235"; + rLen = 0; + rLoc = 6932; + rType = 0; + vrLen = 1017; + vrLoc = 6018; + }; + 6B8FD19E0FD7ED310059D643 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C7E0F7FCBFE00459200 /* Recast.h */; + name = "Recast.h: 227"; + rLen = 8; + rLoc = 6131; + rType = 0; + vrLen = 638; + vrLoc = 6012; + }; + 6B8FD19F0FD7ED310059D643 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 404"; + rLen = 0; + rLoc = 11066; + rType = 0; + vrLen = 697; + vrLoc = 9976; + }; + 6B8FD1A00FD7ED310059D643 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C7F0F7FCBFE00459200 /* RecastDebugDraw.h */; + name = "RecastDebugDraw.h: 50"; + rLen = 28; + rLoc = 2031; + rType = 0; + vrLen = 1807; + vrLoc = 1036; + }; + 6B8FD1A10FD7ED310059D643 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C7E0F7FCBFE00459200 /* Recast.h */; + name = "Recast.h: 199"; + rLen = 4; + rLoc = 5614; + rType = 0; + vrLen = 924; + vrLoc = 5059; + }; + 6B8FD1A20FD7ED310059D643 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 404"; + rLen = 0; + rLoc = 11066; + rType = 0; + vrLen = 697; + vrLoc = 9976; + }; + 6B8FD1A30FD7ED310059D643 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C860F7FCC1100459200 /* RecastLog.cpp */; + name = "RecastLog.cpp: 68"; + rLen = 0; + rLoc = 1703; + rType = 0; + vrLen = 512; + vrLoc = 1314; + }; + 6B8FD1A40FD7ED310059D643 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C850F7FCC1100459200 /* RecastFilter.cpp */; + name = "RecastFilter.cpp: 235"; + rLen = 0; + rLoc = 6932; + rType = 0; + vrLen = 1017; + vrLoc = 6018; + }; + 6B8FD1A50FD7ED310059D643 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 404"; + rLen = 0; + rLoc = 11066; + rType = 0; + vrLen = 697; + vrLoc = 9976; + }; + 6B8FD1A60FD7ED310059D643 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C7E0F7FCBFE00459200 /* Recast.h */; + name = "Recast.h: 227"; + rLen = 8; + rLoc = 6131; + rType = 0; + vrLen = 638; + vrLoc = 6012; + }; + 6B8FD1A70FD7ED310059D643 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 408"; + rLen = 0; + rLoc = 11156; + rType = 0; + vrLen = 723; + vrLoc = 9976; + }; + 6B8FD1AA0FD7ED7B0059D643 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 410"; + rLen = 0; + rLoc = 11251; + rType = 0; + vrLen = 740; + vrLoc = 9976; + }; + 6B8FD1AE0FD7EE090059D643 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 456"; + rLen = 0; + rLoc = 12303; + rType = 0; + vrLen = 719; + vrLoc = 11282; + }; + 6B8FD1AF0FD7EED60059D643 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 385"; + rLen = 0; + rLoc = 10650; + rType = 0; + vrLen = 819; + vrLoc = 9604; + }; + 6B8FD1B20FD7EFAB0059D643 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 404"; + rLen = 0; + rLoc = 11066; + rType = 0; + vrLen = 819; + vrLoc = 9604; + }; + 6B8FD1B30FD7EFAB0059D643 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C6A0F7FCBBB00459200 /* demo.cpp */; + name = "demo.cpp: 1032"; + rLen = 0; + rLoc = 26038; + rType = 0; + vrLen = 803; + vrLoc = 28482; + }; + 6B8FD1B40FD7EFAB0059D643 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 404"; + rLen = 0; + rLoc = 11066; + rType = 0; + vrLen = 819; + vrLoc = 9604; + }; + 6B8FD1B50FD7EFAB0059D643 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C6A0F7FCBBB00459200 /* demo.cpp */; + name = "demo.cpp: 1562"; + rLen = 0; + rLoc = 40263; + rType = 0; + vrLen = 1002; + vrLoc = 42628; + }; + 6B8FD1B80FD7F05F0059D643 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C6A0F7FCBBB00459200 /* demo.cpp */; + name = "demo.cpp: 1552"; + rLen = 0; + rLoc = 40011; + rType = 0; + vrLen = 1002; + vrLoc = 42628; + }; + 6B8FD1B90FD7F05F0059D643 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 404"; + rLen = 0; + rLoc = 11066; + rType = 0; + vrLen = 819; + vrLoc = 9604; + }; + 6B8FD1BA0FD7F05F0059D643 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C6A0F7FCBBB00459200 /* demo.cpp */; + name = "demo.cpp: 1552"; + rLen = 0; + rLoc = 40011; + rType = 0; + vrLen = 1002; + vrLoc = 42628; + }; + 6B8FD1BB0FD7F05F0059D643 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 459"; + rLen = 0; + rLoc = 12357; + rType = 0; + vrLen = 772; + vrLoc = 10865; + }; + 6B8FD1BF0FD7F15D0059D643 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 445"; + rLen = 0; + rLoc = 12111; + rType = 0; + vrLen = 794; + vrLoc = 10865; + }; + 6B8FD1C00FD7F15D0059D643 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C6A0F7FCBBB00459200 /* demo.cpp */; + name = "demo.cpp: 1552"; + rLen = 0; + rLoc = 40011; + rType = 0; + vrLen = 965; + vrLoc = 42628; + }; + 6B8FD1C10FD7F15D0059D643 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 445"; + rLen = 0; + rLoc = 12111; + rType = 0; + vrLen = 794; + vrLoc = 10865; + }; + 6B8FD1C20FD7F15D0059D643 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C6A0F7FCBBB00459200 /* demo.cpp */; + name = "demo.cpp: 1539"; + rLen = 0; + rLoc = 42990; + rType = 0; + vrLen = 755; + vrLoc = 42623; + }; + 6B8FD1C70FD7F2070059D643 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C6A0F7FCBBB00459200 /* demo.cpp */; + name = "demo.cpp: 1555"; + rLen = 0; + rLoc = 43260; + rType = 0; + vrLen = 755; + vrLoc = 42623; + }; + 6B8FD1C80FD7F2070059D643 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C6A0F7FCBBB00459200 /* demo.cpp */; + name = "demo.cpp: 1928"; + rLen = 0; + rLoc = 54016; + rType = 0; + vrLen = 808; + vrLoc = 53477; + }; + 6B8FD1CB0FD7F2A20059D643 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C6A0F7FCBBB00459200 /* demo.cpp */; + name = "demo.cpp: 901"; + rLen = 0; + rLoc = 25899; + rType = 0; + vrLen = 803; + vrLoc = 25484; + }; + 6B8FD1CE0FD7F56C0059D643 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C6A0F7FCBBB00459200 /* demo.cpp */; + name = "demo.cpp: 901"; + rLen = 0; + rLoc = 25899; + rType = 0; + vrLen = 829; + vrLoc = 25484; + }; + 6B8FD1CF0FD7F56C0059D643 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BDD9E070F91113800904EEF /* DetourDebugDraw.cpp */; + name = "DetourDebugDraw.cpp: 148"; + rLen = 0; + rLoc = 4022; + rType = 0; + vrLen = 723; + vrLoc = 3786; + }; + 6B8FD1D00FD7F56C0059D643 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 445"; + rLen = 0; + rLoc = 12111; + rType = 0; + vrLen = 774; + vrLoc = 10865; + }; + 6B8FD1D10FD7F56C0059D643 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C6A0F7FCBBB00459200 /* demo.cpp */; + name = "demo.cpp: 901"; + rLen = 0; + rLoc = 25899; + rType = 0; + vrLen = 829; + vrLoc = 25484; + }; + 6B8FD1D20FD7F56C0059D643 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BDD9E070F91113800904EEF /* DetourDebugDraw.cpp */; + name = "DetourDebugDraw.cpp: 148"; + rLen = 0; + rLoc = 4022; + rType = 0; + vrLen = 723; + vrLoc = 3786; + }; + 6B8FD1D30FD7F56C0059D643 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 185"; + rLen = 0; + rLoc = 4835; + rType = 0; + vrLen = 715; + vrLoc = 4631; + }; + 6B8FD1D50FD7F5AC0059D643 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 356"; + rLen = 0; + rLoc = 9070; + rType = 0; + vrLen = 789; + vrLoc = 8549; + }; + 6B8FD1D80FD7F6190059D643 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 318"; + rLen = 0; + rLoc = 8149; + rType = 0; + vrLen = 781; + vrLoc = 6919; + }; + 6B8FD1DA0FD7F69A0059D643 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 318"; + rLen = 0; + rLoc = 8149; + rType = 0; + vrLen = 807; + vrLoc = 6919; + }; + 6B8FD1DB0FD7F69A0059D643 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C6A0F7FCBBB00459200 /* demo.cpp */; + name = "demo.cpp: 901"; + rLen = 0; + rLoc = 25899; + rType = 0; + vrLen = 829; + vrLoc = 25484; + }; + 6B8FD1DC0FD7F69A0059D643 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 318"; + rLen = 0; + rLoc = 8149; + rType = 0; + vrLen = 807; + vrLoc = 6919; + }; + 6B8FD1DD0FD7F69A0059D643 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C6A0F7FCBBB00459200 /* demo.cpp */; + name = "demo.cpp: 1389"; + rLen = 0; + rLoc = 38927; + rType = 0; + vrLen = 1271; + vrLoc = 32293; + }; 6BB787680FC03EAD003C24DB /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = 6B137C860F7FCC1100459200 /* RecastLog.cpp */; @@ -1271,7 +2268,7 @@ fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; name = "RecastDebugDraw.cpp: 404"; rLen = 0; - rLoc = 10218; + rLoc = 14072; rType = 0; vrLen = 759; vrLoc = 9726; @@ -1330,6 +2327,412 @@ vrLen = 707; vrLoc = 4122; }; + 6BC6204B0FD684AD0022CACF /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C6A0F7FCBBB00459200 /* demo.cpp */; + name = "demo.cpp: 150"; + rLen = 0; + rLoc = 3791; + rType = 0; + vrLen = 629; + vrLoc = 3607; + }; + 6BC620550FD684B30022CACF /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C6A0F7FCBBB00459200 /* demo.cpp */; + name = "demo.cpp: 152"; + rLen = 0; + rLoc = 3846; + rType = 0; + vrLen = 693; + vrLoc = 3607; + }; + 6BC620580FD684D50022CACF /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C6A0F7FCBBB00459200 /* demo.cpp */; + name = "demo.cpp: 152"; + rLen = 0; + rLoc = 3846; + rType = 0; + vrLen = 633; + vrLoc = 3607; + }; + 6BC620590FD684E70022CACF /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C6A0F7FCBBB00459200 /* demo.cpp */; + name = "demo.cpp: 156"; + rLen = 0; + rLoc = 3881; + rType = 0; + vrLen = 336; + vrLoc = 3632; + }; + 6BC6205B0FD684F10022CACF /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C6A0F7FCBBB00459200 /* demo.cpp */; + name = "demo.cpp: 1031"; + rLen = 0; + rLoc = 26038; + rType = 0; + vrLen = 801; + vrLoc = 28452; + }; + 6BC620600FD686900022CACF /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BDD9E070F91113800904EEF /* DetourDebugDraw.cpp */; + name = "DetourDebugDraw.cpp: 147"; + rLen = 0; + rLoc = 4012; + rType = 0; + vrLen = 723; + vrLoc = 3786; + }; + 6BC620610FD686900022CACF /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C7F0F7FCBFE00459200 /* RecastDebugDraw.h */; + name = "RecastDebugDraw.h: 44"; + rLen = 0; + rLoc = 1773; + rType = 0; + vrLen = 1676; + vrLoc = 1034; + }; + 6BC620620FD686900022CACF /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C6A0F7FCBBB00459200 /* demo.cpp */; + name = "demo.cpp: 1342"; + rLen = 0; + rLoc = 34043; + rType = 0; + vrLen = 854; + vrLoc = 36483; + }; + 6BC620630FD686900022CACF /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + comments = "error: 's' was not declared in this scope"; + fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; + rLen = 1; + rLoc = 67; + rType = 1; + }; + 6BC620640FD686900022CACF /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C6A0F7FCBBB00459200 /* demo.cpp */; + name = "demo.cpp: 1031"; + rLen = 0; + rLoc = 25996; + rType = 0; + vrLen = 803; + vrLoc = 28452; + }; + 6BC620650FD686900022CACF /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BDD9E070F91113800904EEF /* DetourDebugDraw.cpp */; + name = "DetourDebugDraw.cpp: 147"; + rLen = 0; + rLoc = 4012; + rType = 0; + vrLen = 723; + vrLoc = 3786; + }; + 6BC620660FD686900022CACF /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 365"; + rLen = 0; + rLoc = 12771; + rType = 0; + vrLen = 755; + vrLoc = 9050; + }; + 6BC620670FD686900022CACF /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C7F0F7FCBFE00459200 /* RecastDebugDraw.h */; + name = "RecastDebugDraw.h: 43"; + rLen = 34; + rLoc = 1609; + rType = 0; + vrLen = 1640; + vrLoc = 1034; + }; + 6BC620680FD686900022CACF /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 365"; + rLen = 0; + rLoc = 12771; + rType = 0; + vrLen = 755; + vrLoc = 9050; + }; + 6BC620690FD686900022CACF /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C7F0F7FCBFE00459200 /* RecastDebugDraw.h */; + name = "RecastDebugDraw.h: 44"; + rLen = 0; + rLoc = 1773; + rType = 0; + vrLen = 1676; + vrLoc = 1034; + }; + 6BC6206A0FD686900022CACF /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 67"; + rLen = 0; + rLoc = 2314; + rType = 0; + vrLen = 912; + vrLoc = 1688; + }; + 6BC6206B0FD686900022CACF /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C6A0F7FCBBB00459200 /* demo.cpp */; + name = "demo.cpp: 1342"; + rLen = 0; + rLoc = 34043; + rType = 0; + vrLen = 854; + vrLoc = 36483; + }; + 6BC6206C0FD686900022CACF /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 62"; + rLen = 0; + rLoc = 2140; + rType = 0; + vrLen = 864; + vrLoc = 1495; + }; + 6BC6206E0FD6870C0022CACF /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 40"; + rLen = 0; + rLoc = 1509; + rType = 0; + vrLen = 999; + vrLoc = 945; + }; + 6BC6206F0FD6870C0022CACF /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C6A0F7FCBBB00459200 /* demo.cpp */; + name = "demo.cpp: 1342"; + rLen = 0; + rLoc = 34043; + rType = 0; + vrLen = 854; + vrLoc = 36483; + }; + 6BC620700FD6870C0022CACF /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 40"; + rLen = 0; + rLoc = 1509; + rType = 0; + vrLen = 999; + vrLoc = 945; + }; + 6BC620710FD6870C0022CACF /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C6A0F7FCBBB00459200 /* demo.cpp */; + name = "demo.cpp: 1120"; + rLen = 0; + rLoc = 28167; + rType = 0; + vrLen = 853; + vrLoc = 30637; + }; + 6BC620730FD687B90022CACF /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C6A0F7FCBBB00459200 /* demo.cpp */; + name = "demo.cpp: 1120"; + rLen = 0; + rLoc = 28167; + rType = 0; + vrLen = 853; + vrLoc = 30637; + }; + 6BC6207A0FD7BBAB0022CACF /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C6A0F7FCBBB00459200 /* demo.cpp */; + name = "demo.cpp: 1120"; + rLen = 0; + rLoc = 28167; + rType = 0; + vrLen = 875; + vrLoc = 30637; + }; + 6BC6207B0FD7BBAB0022CACF /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C6A0F7FCBBB00459200 /* demo.cpp */; + name = "demo.cpp: 1031"; + rLen = 0; + rLoc = 26038; + rType = 0; + vrLen = 861; + vrLoc = 28664; + }; + 6BC6207D0FD7BCB50022CACF /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C6A0F7FCBBB00459200 /* demo.cpp */; + name = "demo.cpp: 1114"; + rLen = 0; + rLoc = 28044; + rType = 0; + vrLen = 962; + vrLoc = 30405; + }; + 6BC6207F0FD7BCD00022CACF /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C6A0F7FCBBB00459200 /* demo.cpp */; + name = "demo.cpp: 1113"; + rLen = 0; + rLoc = 27983; + rType = 0; + vrLen = 962; + vrLoc = 30405; + }; + 6BC620810FD7BD030022CACF /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C6A0F7FCBBB00459200 /* demo.cpp */; + name = "demo.cpp: 1400"; + rLen = 0; + rLoc = 35682; + rType = 0; + vrLen = 1037; + vrLoc = 38046; + }; + 6BC620830FD7BD370022CACF /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C6A0F7FCBBB00459200 /* demo.cpp */; + name = "demo.cpp: 1399"; + rLen = 0; + rLoc = 35646; + rType = 0; + vrLen = 1034; + vrLoc = 38046; + }; + 6BC620850FD7BD520022CACF /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C6A0F7FCBBB00459200 /* demo.cpp */; + name = "demo.cpp: 1404"; + rLen = 0; + rLoc = 35858; + rType = 0; + vrLen = 1034; + vrLoc = 38046; + }; + 6BC620870FD7BD710022CACF /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C6A0F7FCBBB00459200 /* demo.cpp */; + name = "demo.cpp: 1376"; + rLen = 0; + rLoc = 34899; + rType = 0; + vrLen = 1060; + vrLoc = 37527; + }; + 6BC6208D0FD7C2380022CACF /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 411"; + rLen = 0; + rLoc = 11886; + rType = 0; + vrLen = 939; + vrLoc = 9846; + }; + 6BC6208E0FD7C2380022CACF /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C7F0F7FCBFE00459200 /* RecastDebugDraw.h */; + name = "RecastDebugDraw.h: 50"; + rLen = 28; + rLoc = 2031; + rType = 0; + vrLen = 1807; + vrLoc = 1036; + }; + 6BC6208F0FD7C2380022CACF /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + comments = "error: 'rcDebugDrawContourConnections' was not declared in this scope"; + fRef = 6B137C6A0F7FCBBB00459200 /* demo.cpp */; + rLen = 0; + rLoc = 1436; + rType = 1; + }; + 6BC620900FD7C2380022CACF /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C6A0F7FCBBB00459200 /* demo.cpp */; + name = "demo.cpp: 1563"; + rLen = 0; + rLoc = 40263; + rType = 0; + vrLen = 898; + vrLoc = 42754; + }; + 6BC620910FD7C2380022CACF /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 34"; + rLen = 0; + rLoc = 1385; + rType = 0; + vrLen = 999; + vrLoc = 945; + }; + 6BC620920FD7C2380022CACF /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C7F0F7FCBFE00459200 /* RecastDebugDraw.h */; + name = "RecastDebugDraw.h: 51"; + rLen = 22; + rLoc = 2164; + rType = 0; + vrLen = 1807; + vrLoc = 1036; + }; + 6BC620930FD7C2380022CACF /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 411"; + rLen = 0; + rLoc = 11886; + rType = 0; + vrLen = 939; + vrLoc = 9846; + }; + 6BC620940FD7C2380022CACF /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C6A0F7FCBBB00459200 /* demo.cpp */; + name = "demo.cpp: 1563"; + rLen = 0; + rLoc = 40263; + rType = 0; + vrLen = 904; + vrLoc = 42731; + }; + 6BC620950FD7C2380022CACF /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C7F0F7FCBFE00459200 /* RecastDebugDraw.h */; + name = "RecastDebugDraw.h: 50"; + rLen = 28; + rLoc = 2031; + rType = 0; + vrLen = 1807; + vrLoc = 1036; + }; + 6BC620960FD7C2380022CACF /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C6A0F7FCBBB00459200 /* demo.cpp */; + name = "demo.cpp: 1563"; + rLen = 0; + rLoc = 40263; + rType = 0; + vrLen = 929; + vrLoc = 42701; + }; 6BDD9E040F91112200904EEF /* DetourDebugDraw.h */ = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {969, 553}}"; @@ -1353,16 +2756,16 @@ }; 6BDD9E070F91113800904EEF /* DetourDebugDraw.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {969, 2864}}"; - sepNavSelRange = "{4057, 0}"; - sepNavVisRange = "{3643, 820}"; + sepNavIntBoundsRect = "{{0, 0}, {969, 2880}}"; + sepNavSelRange = "{4022, 0}"; + sepNavVisRange = "{3786, 723}"; }; }; 6BDD9E080F91113800904EEF /* DetourStatNavMesh.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {969, 19648}}"; - sepNavSelRange = "{26982, 0}"; - sepNavVisRange = "{26481, 1391}"; + sepNavIntBoundsRect = "{{0, 0}, {969, 19744}}"; + sepNavSelRange = "{26901, 0}"; + sepNavVisRange = "{26544, 1426}"; }; }; 6BDD9E090F91113800904EEF /* DetourStatNavMeshBuilder.cpp */ = { diff --git a/RecastDemo/Build/Xcode/Recast.xcodeproj/memon.perspectivev3 b/RecastDemo/Build/Xcode/Recast.xcodeproj/memon.perspectivev3 index 63295c0..b9b5094 100644 --- a/RecastDemo/Build/Xcode/Recast.xcodeproj/memon.perspectivev3 +++ b/RecastDemo/Build/Xcode/Recast.xcodeproj/memon.perspectivev3 @@ -278,13 +278,13 @@ PBXSmartGroupTreeModuleOutlineStateSelectionKey - 31 + 34 1 0 PBXSmartGroupTreeModuleOutlineStateVisibleRectKey - {{0, 0}, {228, 660}} + {{0, 24}, {228, 660}} PBXTopSmartGroupGIDs @@ -331,7 +331,7 @@ _historyCapacity 0 bookmark - 6B09CE770FD5BEC6005637D5 + 6B8FD1DD0FD7F69A0059D643 history 6B8633370F7813A600E2684A @@ -340,29 +340,32 @@ 6B7707EF0FBD90F100D21BAE 6B7707F00FBD90F100D21BAE 6B7708F20FBDA96300D21BAE - 6BB787680FC03EAD003C24DB 6BB7876A0FC03EAD003C24DB 6BB7876B0FC03EAD003C24DB 6BB7876D0FC03EAD003C24DB 6BB787710FC03EAD003C24DB 6BB7881E0FC0593E003C24DB 6BB7881F0FC0593E003C24DB - 6BB788220FC0593E003C24DB 6BB788230FC0593E003C24DB 6B8171D70FC327630022159F - 6B8AD2EA0FCDE25800016452 - 6BB85D1A0FCEA5BD00758966 - 6BB85D2F0FCEA8BE00758966 6BB85D3A0FCEAA6300758966 6B09CDFF0FD5563E005637D5 - 6B09CE5A0FD5BDE6005637D5 - 6B09CE5B0FD5BDE6005637D5 6B09CE5C0FD5BDE6005637D5 6B09CE5D0FD5BDE6005637D5 - 6B09CE5E0FD5BDE6005637D5 6B09CE5F0FD5BDE6005637D5 6B09CE730FD5BEC3005637D5 - 6B09CE740FD5BEC3005637D5 + 6B164B210FD678A500D2F919 + 6B164B240FD678A500D2F919 + 6B164B250FD678A500D2F919 + 6B164B260FD678A500D2F919 + 6B8FD18D0FD7C4D10059D643 + 6B8FD19B0FD7ED310059D643 + 6B8FD19C0FD7ED310059D643 + 6B8FD19D0FD7ED310059D643 + 6B8FD19E0FD7ED310059D643 + 6B8FD1CF0FD7F56C0059D643 + 6B8FD1DA0FD7F69A0059D643 + 6B8FD1DB0FD7F69A0059D643 prevStack @@ -371,11 +374,8 @@ 6B1E02750F924A8500CC0038 6B1E028F0F924D5A00CC0038 6B1E029B0F924D8B00CC0038 - 6B1E02AE0F92530C00CC0038 - 6B1E02BB0F92547D00CC0038 6B1E02FC0F92563500CC0038 6B1E032E0F925D9100CC0038 - 6B8DB2D70F93A7A5007FA9E1 6B8DB38F0F9798DE007FA9E1 6B8DB3900F9798DE007FA9E1 6BB87E0E0F9DE8A300E33F12 @@ -385,45 +385,34 @@ 6B7707F70FBD90F100D21BAE 6B7707F90FBD90F100D21BAE 6B7708F70FBDA96300D21BAE - 6BB787BD0FC03EAD003C24DB 6BB787C30FC03EAD003C24DB 6BB787D40FC03EAD003C24DB 6BB788290FC0593E003C24DB 6BB7882A0FC0593E003C24DB 6BB7882B0FC0593E003C24DB 6BB85D3E0FCEAA6300758966 - 6B09CE050FD5563E005637D5 - 6B09CE060FD5563E005637D5 - 6B09CE070FD5563E005637D5 - 6B09CE080FD5563E005637D5 - 6B09CE090FD5563E005637D5 - 6B09CE0A0FD5563E005637D5 - 6B09CE0B0FD5563E005637D5 - 6B09CE0C0FD5563E005637D5 - 6B09CE0D0FD5563E005637D5 - 6B09CE100FD5563E005637D5 - 6B09CE130FD5563E005637D5 6B09CE1E0FD55805005637D5 6B09CE2D0FD55B4D005637D5 - 6B09CE360FD55B99005637D5 - 6B09CE470FD55FA2005637D5 - 6B09CE480FD55FA2005637D5 - 6B09CE490FD55FA2005637D5 - 6B09CE4A0FD55FA2005637D5 - 6B09CE620FD5BDE6005637D5 - 6B09CE630FD5BDE6005637D5 - 6B09CE640FD5BDE6005637D5 - 6B09CE650FD5BDE6005637D5 - 6B09CE660FD5BDE6005637D5 - 6B09CE670FD5BDE6005637D5 - 6B09CE680FD5BDE6005637D5 - 6B09CE690FD5BDE6005637D5 - 6B09CE6A0FD5BDE6005637D5 - 6B09CE6B0FD5BDE6005637D5 - 6B09CE6C0FD5BDE6005637D5 - 6B09CE6D0FD5BDE6005637D5 - 6B09CE6E0FD5BDE6005637D5 - 6B09CE750FD5BEC3005637D5 + 6B164B320FD678A500D2F919 + 6B164B330FD678A500D2F919 + 6B164B3C0FD678A500D2F919 + 6BC620900FD7C2380022CACF + 6BC620920FD7C2380022CACF + 6B8FD1830FD7C3F10059D643 + 6B8FD1900FD7C4D10059D643 + 6B8FD1A00FD7ED310059D643 + 6B8FD1A10FD7ED310059D643 + 6B8FD1A20FD7ED310059D643 + 6B8FD1A30FD7ED310059D643 + 6B8FD1A40FD7ED310059D643 + 6B8FD1A50FD7ED310059D643 + 6B8FD1A60FD7ED310059D643 + 6B8FD1B40FD7EFAB0059D643 + 6B8FD1BA0FD7F05F0059D643 + 6B8FD1C10FD7F15D0059D643 + 6B8FD1D10FD7F56C0059D643 + 6B8FD1D20FD7F56C0059D643 + 6B8FD1DC0FD7F69A0059D643 SplitCount @@ -463,6 +452,8 @@ Frame {{10, 27}, {1030, 61}} + RubberWindowFrame + 0 59 1280 719 0 0 1280 778 Module XCDetailModule @@ -517,8 +508,6 @@ Frame {{10, 27}, {1030, 61}} - RubberWindowFrame - 0 59 1280 719 0 0 1280 778 Module PBXBuildResultsModule @@ -546,11 +535,11 @@ TableOfContents - 6B09CDD80FD52128005637D5 + 6B8FD17C0FD7C3230059D643 1CA23ED40692098700951B8B - 6B09CDD90FD52128005637D5 + 6B8FD17D0FD7C3230059D643 6B8632A30F78115100E2684A - 6B09CDDA0FD52128005637D5 + 6B8FD17E0FD7C3230059D643 1CA23EDF0692099D00951B8B 1CA23EE00692099D00951B8B 1CA23EE10692099D00951B8B @@ -697,14 +686,14 @@ TableOfContents - 6B09CDDB0FD52128005637D5 + 6B8FD1850FD7C3F10059D643 1CCC7628064C1048000F2A68 1CCC7629064C1048000F2A68 - 6B09CDDC0FD52128005637D5 - 6B09CDDD0FD52128005637D5 - 6B09CDDE0FD52128005637D5 - 6B09CDDF0FD52128005637D5 - 6B09CDE00FD52128005637D5 + 6B8FD1860FD7C3F10059D643 + 6B8FD1870FD7C3F10059D643 + 6B8FD1880FD7C3F10059D643 + 6B8FD1890FD7C3F10059D643 + 6B8FD18A0FD7C3F10059D643 ToolbarConfiguration xcode.toolbar.config.debugV3 @@ -734,8 +723,6 @@ 5 WindowOrderList - 6B09CE700FD5BDE6005637D5 - 6B09CE710FD5BDE6005637D5 /Users/memon/Code/recastnavigation/RecastDemo/Build/Xcode/Recast.xcodeproj WindowString diff --git a/RecastDemo/Build/Xcode/Recast.xcodeproj/project.pbxproj b/RecastDemo/Build/Xcode/Recast.xcodeproj/project.pbxproj index 8ac178c..e6fef95 100644 --- a/RecastDemo/Build/Xcode/Recast.xcodeproj/project.pbxproj +++ b/RecastDemo/Build/Xcode/Recast.xcodeproj/project.pbxproj @@ -22,6 +22,8 @@ 6B137C910F7FCC1100459200 /* RecastRasterization.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6B137C880F7FCC1100459200 /* RecastRasterization.cpp */; }; 6B137C920F7FCC1100459200 /* RecastRegion.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6B137C890F7FCC1100459200 /* RecastRegion.cpp */; }; 6B137C930F7FCC1100459200 /* RecastTimer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6B137C8A0F7FCC1100459200 /* RecastTimer.cpp */; }; + 6B164AFE0FD6687600D2F919 /* glimage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6B164AFD0FD6687600D2F919 /* glimage.cpp */; }; + 6B164B010FD668B700D2F919 /* stb_image.c in Sources */ = {isa = PBXBuildFile; fileRef = 6B164B000FD668B700D2F919 /* stb_image.c */; }; 6B8632DA0F78122C00E2684A /* SDL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6B8632D90F78122C00E2684A /* SDL.framework */; }; 6B8632DC0F78123E00E2684A /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6B8632DB0F78123E00E2684A /* OpenGL.framework */; }; 6BB788170FC0472B003C24DB /* ChunkyTriMesh.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6BB788160FC0472B003C24DB /* ChunkyTriMesh.cpp */; }; @@ -62,6 +64,9 @@ 6B137C880F7FCC1100459200 /* RecastRasterization.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = RecastRasterization.cpp; path = ../../../Recast/Source/RecastRasterization.cpp; sourceTree = SOURCE_ROOT; }; 6B137C890F7FCC1100459200 /* RecastRegion.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = RecastRegion.cpp; path = ../../../Recast/Source/RecastRegion.cpp; sourceTree = SOURCE_ROOT; }; 6B137C8A0F7FCC1100459200 /* RecastTimer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = RecastTimer.cpp; path = ../../../Recast/Source/RecastTimer.cpp; sourceTree = SOURCE_ROOT; }; + 6B164AFD0FD6687600D2F919 /* glimage.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = glimage.cpp; path = ../../Source/glimage.cpp; sourceTree = SOURCE_ROOT; }; + 6B164AFF0FD6688000D2F919 /* glimage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = glimage.h; path = ../../Include/glimage.h; sourceTree = SOURCE_ROOT; }; + 6B164B000FD668B700D2F919 /* stb_image.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = stb_image.c; path = ../../Source/stb_image.c; sourceTree = SOURCE_ROOT; }; 6B8632D90F78122C00E2684A /* SDL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SDL.framework; path = Library/Frameworks/SDL.framework; sourceTree = SDKROOT; }; 6B8632DB0F78123E00E2684A /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = System/Library/Frameworks/OpenGL.framework; sourceTree = SDKROOT; }; 6BB788160FC0472B003C24DB /* ChunkyTriMesh.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ChunkyTriMesh.cpp; path = ../../Source/ChunkyTriMesh.cpp; sourceTree = SOURCE_ROOT; }; @@ -93,6 +98,9 @@ 080E96DDFE201D6D7F000001 /* Classes */ = { isa = PBXGroup; children = ( + 6B164B000FD668B700D2F919 /* stb_image.c */, + 6B164AFF0FD6688000D2F919 /* glimage.h */, + 6B164AFD0FD6687600D2F919 /* glimage.cpp */, 6BDD9E030F91110C00904EEF /* Detour */, 6B137C7D0F7FCBE800459200 /* Recast */, 6B137C790F7FCBE400459200 /* glfont.h */, @@ -283,6 +291,8 @@ 6BDD9E0B0F91113800904EEF /* DetourStatNavMesh.cpp in Sources */, 6BDD9E0C0F91113800904EEF /* DetourStatNavMeshBuilder.cpp in Sources */, 6BB788170FC0472B003C24DB /* ChunkyTriMesh.cpp in Sources */, + 6B164AFE0FD6687600D2F919 /* glimage.cpp in Sources */, + 6B164B010FD668B700D2F919 /* stb_image.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/RecastDemo/Source/demo.cpp b/RecastDemo/Source/demo.cpp index 6688f9d..aad4256 100644 --- a/RecastDemo/Source/demo.cpp +++ b/RecastDemo/Source/demo.cpp @@ -29,6 +29,7 @@ #include "SDL.h" #include "SDL_Opengl.h" #include "GLFont.h" +#include "GLImage.h" #include "RecastTimer.h" #include "MeshLoaderObj.h" #include "ChunkyTriMesh.h" @@ -144,6 +145,17 @@ struct FileList size++; } + static int cmp(const void* a, const void* b) + { + return strcmp(*(const char**)a, *(const char**)b); + } + + void sort() + { + if (size > 1) + qsort(files, size, sizeof(char*), cmp); + } + char* files[MAX_FILES]; int size; }; @@ -184,6 +196,7 @@ void scanDirectory(const char* path, const char* ext, FileList& list) } closedir(dp); #endif + list.sort(); } @@ -199,6 +212,7 @@ enum DrawMode DRAWMODE_COMPACT, DRAWMODE_COMPACT_DISTANCE, DRAWMODE_COMPACT_REGIONS, + DRAWMODE_REGION_CONNECTIONS, DRAWMODE_RAW_CONTOURS, DRAWMODE_BOTH_CONTOURS, DRAWMODE_CONTOURS, @@ -257,123 +271,6 @@ rcLog g_log; rcBuildTimes g_buildTimes; -struct Portal -{ - float bmin[3], bmax[3]; -}; -static const int MAX_PORTALS = 2000; - -Portal g_portals[MAX_PORTALS]; -int g_portalCount = 0; - -Portal g_cportals[MAX_PORTALS]; -int g_cportalCount = 0; - -void findContourPortals(const rcContour* cont, const int tx, const int tz, const int tileSize, - const int climb, const float* bmin, const float cs, const float ch) -{ - if (!cont) return; - if (!cont->nverts) return; - for (int i = 0, j = cont->nverts-1; i < cont->nverts; j=i++) - { - const int* vj = &cont->verts[j*4]; - const int* vi = &cont->verts[i*4]; - int edge = 0; - if (vj[0] == tx && vi[0] == tx) - edge = 1; - else if (vj[0] == tx+tileSize && vi[0] == tx+tileSize) - edge = 2; - else if (vj[2] == tz && vi[2] == tz) - edge = 3; - else if (vj[2] == tz+tileSize && vi[2] == tz+tileSize) - edge = 4; - - if (edge != 0) - { - if (g_portalCount >= MAX_PORTALS) - return; - Portal& p = g_portals[g_portalCount]; - g_portalCount++; - - float v0[3], v1[3]; - v0[0] = bmin[0] + vj[0]*cs; - v0[1] = bmin[1] + vj[1]*ch; - v0[2] = bmin[2] + vj[2]*cs; - v1[0] = bmin[0] + vi[0]*cs; - v1[1] = bmin[1] + vi[1]*ch; - v1[2] = bmin[2] + vi[2]*cs; - vcopy(p.bmin, v0); - vcopy(p.bmax, v0); - vmin(p.bmin, v1); - vmax(p.bmax, v1); - - if (edge == 1) - { - p.bmin[2] += cs/4; - p.bmax[2] -= cs/4; - p.bmax[1] += climb*ch; - p.bmin[0] -= cs/4; - p.bmax[0] += cs/4; - } - else if (edge == 2) - { - p.bmin[2] += cs/4; - p.bmax[2] -= cs/4; - p.bmax[1] += climb*ch; - p.bmin[0] -= cs/4; - p.bmax[0] += cs/4; - } - else if (edge == 3) - { - p.bmin[0] += cs/4; - p.bmax[0] -= cs/4; - p.bmax[1] += climb*ch; - p.bmin[2] -= cs/4; - p.bmax[2] += cs/4; - } - else if (edge == 4) - { - p.bmin[0] += cs/4; - p.bmax[0] -= cs/4; - p.bmax[1] += climb*ch; - p.bmin[2] -= cs/4; - p.bmax[2] += cs/4; - } - } - } -} - -void findPortals(const rcContourSet* cset, const int tx, const int ty, const int tileSize, - const int climb, const float* bmin, const float cs, const float ch) -{ - if (!cset) return; - if (!cset->nconts) return; - for (int i = 0; i < cset->nconts; ++i) - findContourPortals(&cset->conts[i], tx, ty, tileSize, climb, bmin, cs, ch); -} - -void connectPortals() -{ - for (int i = 0; i < g_portalCount-1; ++i) - { - for (int j = i+1; j < g_portalCount; ++j) - { - if (g_portalCount >= MAX_PORTALS) - return; - Portal& pi = g_portals[i]; - Portal& pj = g_portals[j]; - Portal& p = g_cportals[g_cportalCount]; - vcopy(p.bmin, pi.bmin); - vcopy(p.bmax, pi.bmax); - vmax(p.bmin, pj.bmin); - vmin(p.bmax, pj.bmax); - if (p.bmin[0] >= p.bmax[0] || p.bmin[1] >= p.bmax[1] || p.bmin[2] >= p.bmax[2]) - continue; - g_cportalCount++; - } - } -} - bool buildTiledNavigation(const rcConfig& cfg, const rcMeshLoaderObj* mesh, const rcChunkyTriMesh* chunkyMesh, @@ -601,18 +498,6 @@ bool buildTiledNavigation(const rcConfig& cfg, delete solid; delete chf; - g_portalCount = 0; - g_cportalCount = 0; -/* for (int y = 0; y < tileSet->height; ++y) - { - for (int x = 0; x < tileSet->width; ++x) - { - findPortals(tileSet->tiles[x + y*tileSet->width].cset, - x*tileCfg.tileSize, y*tileCfg.tileSize, tileCfg.tileSize, - cfg.walkableClimb, cfg.bmin, cfg.cs, cfg.ch); - } - } - connectPortals();*/ for (int y = 0; y < tileSet->height; ++y) { @@ -1013,8 +898,8 @@ int main(int argc, char *argv[]) SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 8); SDL_GL_SetAttribute(SDL_GL_ALPHA_SIZE, 8); - int width = 1024; //1200; - int height = 768; //700; + int width = 1280; //1024; //1200; + int height = 800; //768; //700; SDL_Surface* screen = SDL_SetVideoMode(width, height, 0, SDL_OPENGL /*| SDL_FULLSCREEN*/); if (!screen) { @@ -1045,13 +930,29 @@ int main(int argc, char *argv[]) float tileSize = 0.0f; int drawMode = DRAWMODE_NAVMESH; int toolMode = TOOLMODE_PATHFIND; + bool showMenu = false; bool showLevels = false; bool showLog = false; - bool showTools = true; + bool showTools = false; char curLevel[256] = "Choose Level..."; bool mouseOverMenu = false; bool keepInterResults = false; FileList fileList; + + FileList slidesList; + bool showSlides = false; + bool showCurSlide = true; + float slideAlpha = 1.0f; + int curSlide = 0; + int nextSlide = 0; + scanDirectory("slides", ".png", slidesList); + GLImage slideTex; + + char path[256]; + strcpy(path, "slides/"); + strcat(path, slidesList.files[curSlide]); + slideTex.create(path); + dtPolyRef startRef = 0, endRef = 0; @@ -1082,8 +983,8 @@ int main(int argc, char *argv[]) float distanceToWall = 0; bool sposSet = false, eposSet = false; bool mposSet = false; - static const float startCol[4] = { 0.6f, 0.1f, 0.1f, 0.75f }; - static const float endCol[4] = { 0.1f, 0.6f, 0.1f, 0.75f }; + static const float startCol[4] = { 0.5f, 0.1f, 0.0f, 0.75f }; + static const float endCol[4] = { 0.2f, 0.4f, 0.0f, 0.75f }; bool recalcTool = false; glEnable(GL_CULL_FACE); @@ -1110,10 +1011,34 @@ int main(int argc, char *argv[]) { case SDL_KEYDOWN: // Handle any key presses here. - if(event.key.keysym.sym == SDLK_ESCAPE) + if (event.key.keysym.sym == SDLK_ESCAPE) { done = true; } + else if (event.key.keysym.sym == SDLK_TAB) + { + showCurSlide = !showCurSlide; + } + else if (event.key.keysym.sym == SDLK_2) + { + showSlides = !showSlides; + } + else if (event.key.keysym.sym == SDLK_1) + { + showMenu = !showMenu; + } + else if (event.key.keysym.sym == SDLK_LEFT) + { + nextSlide--; + if (nextSlide < 0) + nextSlide = 0; + } + else if (event.key.keysym.sym == SDLK_RIGHT) + { + nextSlide++; + if (nextSlide >= slidesList.size) + nextSlide = slidesList.size-1; + } break; case SDL_MOUSEBUTTONDOWN: @@ -1212,6 +1137,23 @@ int main(int argc, char *argv[]) t += dt; + float slideAlphaTarget = showCurSlide ? 1 : 0; + if (curSlide != nextSlide) + slideAlphaTarget = 0; + + if (slideAlphaTarget > slideAlpha) + slideAlpha = rcMin(slideAlpha+dt*4,1.0f); + else if (slideAlphaTarget < slideAlpha) + slideAlpha = rcMax(slideAlpha-dt*4,0.0f); + + if (curSlide != nextSlide && slideAlpha < 0.01f) + { + curSlide = nextSlide; + char path[256]; + strcpy(path, "slides/"); + strcat(path, slidesList.files[curSlide]); + slideTex.create(path); + } // Update and render glViewport(0, 0, width, height); @@ -1272,12 +1214,12 @@ int main(int argc, char *argv[]) if (drawMode == DRAWMODE_MESH) { if (g_mesh) - rcDebugDrawMeshSlope(*g_mesh, agentMaxSlope); + rcDebugDrawMeshSlope(*g_mesh, agentMaxSlope, g_meshBMin[1], g_meshBMax[1]); } else if (drawMode != DRAWMODE_NAVMESH_TRANS) { if (g_mesh) - rcDebugDrawMesh(*g_mesh, 0); + rcDebugDrawMesh(*g_mesh, 0, g_meshBMin[1], g_meshBMax[1]); } glDisable(GL_FOG); @@ -1301,13 +1243,13 @@ int main(int argc, char *argv[]) if (npolys) { - const float pathCol[4] = {1,0.75f,0,0.25f}; + const float pathCol[4] = {0,0,0,0.25f}; //{1,0.75f,0,0.25f}; for (int i = 1; i < npolys-1; ++i) dtDebugDrawStatNavMeshPoly(g_navMesh, polys[i], pathCol); } if (nstraightPath) { - glColor4ub(220,16,0,220); + glColor4ub(128,16,0,220); glLineWidth(3.0f); glBegin(GL_LINE_STRIP); for (int i = 0; i < nstraightPath; ++i) @@ -1331,7 +1273,7 @@ int main(int argc, char *argv[]) const float pathCol[4] = {1,0.75f,0,0.25f}; dtDebugDrawStatNavMeshPoly(g_navMesh, polys[0], pathCol); - glColor4ub(220,16,0,220); + glColor4ub(128,16,0,220); glLineWidth(3.0f); glBegin(GL_LINE_STRIP); for (int i = 0; i < nstraightPath; ++i) @@ -1362,7 +1304,7 @@ int main(int argc, char *argv[]) } else if (toolMode == TOOLMODE_FIND_POLYS_AROUND) { - const float pathCol[4] = {1,0.75f,0,0.25f}; + const float pathCol[4] = {0,0,0,0.25f}; //{1,0.75f,0,0.25f}; for (int i = 0; i < npolys; ++i) dtDebugDrawStatNavMeshPoly(g_navMesh, polys[i], pathCol); @@ -1484,6 +1426,29 @@ int main(int argc, char *argv[]) } glDepthMask(GL_TRUE); } + if (drawMode == DRAWMODE_REGION_CONNECTIONS) + { + if (g_tileSet) + { + for (int i = 0; i < g_tileSet->width*g_tileSet->height; ++i) + { + if (g_tileSet->tiles[i].chf) + rcDebugDrawCompactHeightfieldRegions(*(g_tileSet->tiles[i].chf)); + } + glDepthMask(GL_TRUE); + + glDepthMask(GL_FALSE); + for (int i = 0; i < g_tileSet->width*g_tileSet->height; ++i) + { + if (g_tileSet->tiles[i].cset) + { + // rcDebugDrawRawContours(*(g_tileSet->tiles[i].cset), g_tileSet->bmin, g_tileSet->cs, g_tileSet->ch); + rcDebugDrawRegionConnections(*(g_tileSet->tiles[i].cset), g_tileSet->bmin, g_tileSet->cs, g_tileSet->ch); + } + } + glDepthMask(GL_TRUE); + } + } if (drawMode == DRAWMODE_POLYMESH) { glDepthMask(GL_FALSE); @@ -1581,19 +1546,7 @@ int main(int argc, char *argv[]) rcDebugDrawBoxWire(g_meshBMin[0], g_meshBMin[1], g_meshBMin[2], g_meshBMax[0], g_meshBMax[1], g_meshBMax[2], col); - - col[0] = 0.1f; col[1] = 0.5f; col[2] = 0.75f; col[3] = 0.5f; - /* for (int i = 0; i < g_portalCount; ++i) - { - rcDebugDrawBoxWire(g_portals[i].bmin[0], g_portals[i].bmin[1], g_portals[i].bmin[2], - g_portals[i].bmax[0], g_portals[i].bmax[1], g_portals[i].bmax[2], col); - }*/ - for (int i = 0; i < g_cportalCount; ++i) - { - rcDebugDrawBoxWire(g_cportals[i].bmin[0], g_cportals[i].bmin[1], g_cportals[i].bmin[2], - g_cportals[i].bmax[0], g_cportals[i].bmax[1], g_cportals[i].bmax[2], col); - } - + glDepthMask(GL_TRUE); } @@ -1611,6 +1564,9 @@ int main(int argc, char *argv[]) mouseOverMenu = false; + if (showMenu) + { + static int propScroll = 0; if (imguiBeginScrollArea(GENID, "Properties", width - 250 - 10, 10, 250, height-20, &propScroll)) mouseOverMenu = true; @@ -1628,6 +1584,7 @@ int main(int argc, char *argv[]) } } + imguiSeparator(); if (g_mesh) @@ -1743,12 +1700,12 @@ int main(int argc, char *argv[]) drawMode = DRAWMODE_MESH; if (imguiCheck(GENID, "Navmesh", drawMode == DRAWMODE_NAVMESH)) drawMode = DRAWMODE_NAVMESH; - if (imguiCheck(GENID, "Navmesh BVTree", drawMode == DRAWMODE_NAVMESH_BVTREE)) - drawMode = DRAWMODE_NAVMESH_BVTREE; if (imguiCheck(GENID, "Navmesh Invis", drawMode == DRAWMODE_NAVMESH_INVIS)) drawMode = DRAWMODE_NAVMESH_INVIS; if (imguiCheck(GENID, "Navmesh Trans", drawMode == DRAWMODE_NAVMESH_TRANS)) drawMode = DRAWMODE_NAVMESH_TRANS; + if (imguiCheck(GENID, "Navmesh BVTree", drawMode == DRAWMODE_NAVMESH_BVTREE)) + drawMode = DRAWMODE_NAVMESH_BVTREE; if (imguiCheck(GENID, "Voxels", drawMode == DRAWMODE_VOXELS)) drawMode = DRAWMODE_VOXELS; if (imguiCheck(GENID, "Walkable Voxels", drawMode == DRAWMODE_VOXELS_WALKABLE)) @@ -1759,6 +1716,8 @@ int main(int argc, char *argv[]) drawMode = DRAWMODE_COMPACT_DISTANCE; if (imguiCheck(GENID, "Compact Regions", drawMode == DRAWMODE_COMPACT_REGIONS)) drawMode = DRAWMODE_COMPACT_REGIONS; + if (imguiCheck(GENID, "Region Conections", drawMode == DRAWMODE_REGION_CONNECTIONS)) + drawMode = DRAWMODE_REGION_CONNECTIONS; if (imguiCheck(GENID, "Raw Contours", drawMode == DRAWMODE_RAW_CONTOURS)) drawMode = DRAWMODE_RAW_CONTOURS; if (imguiCheck(GENID, "Both Contours", drawMode == DRAWMODE_BOTH_CONTOURS)) @@ -1769,12 +1728,14 @@ int main(int argc, char *argv[]) drawMode = DRAWMODE_POLYMESH; imguiEndScrollArea(); + + } // Tools if (showTools) { static int toolsScroll = 0; - if (imguiBeginScrollArea(GENID, "Tools", 10, 450, 150, 200, &toolsScroll)) + if (imguiBeginScrollArea(GENID, "Tools", 10, height - 10 - 200, 150, 200, &toolsScroll)) mouseOverMenu = true; if (imguiCheck(GENID, "Pathfind", toolMode == TOOLMODE_PATHFIND)) @@ -1800,7 +1761,7 @@ int main(int argc, char *argv[]) imguiEndScrollArea(); } - + if (g_navMesh && recalcTool) { recalcTool = false; @@ -1959,7 +1920,65 @@ int main(int argc, char *argv[]) } - g_font.drawText(10.0f, (float)height-20.0f, "W/S/A/D: Move RMB: Rotate LMB: Place Start LMB+SHIFT: Place End", GLFont::RGBA(255,255,255,128)); + if (showSlides) + { + static int slidesScroll = 0; + if (imguiBeginScrollArea(GENID, "Slides", 10, height - 10 - 200 - 20 - 250, 150, 250, &slidesScroll)) + mouseOverMenu = true; + + int slideToLoad = -1; + for (int i = 0; i < slidesList.size; ++i) + { + char msg[256]; + snprintf(msg,256,"%s%s", i == curSlide ? ">> " : (i == nextSlide ? ">" : ""), slidesList.files[i]); + if (imguiItem(GENID1(i), msg)) + slideToLoad = i; + } + if (slideToLoad >= 0) + { + nextSlide = slideToLoad; + showSlides = false; + } + + imguiEndScrollArea(); + } + + if (slideAlpha > 0.01f && curSlide >= 0 && curSlide < slidesList.size) + { + unsigned char alpha = (unsigned char)(slideAlpha*255.0f); +/* const char* file = slidesList.files[curSlide]; + const float len = g_font.getTextLength(file); + g_font.drawText(width/2-len/2, (float)height/2, file, GLFont::RGBA(255,255,255,alpha));*/ + + glEnable(GL_TEXTURE_RECTANGLE_ARB); + slideTex.bind(); + + const float tw = slideTex.getWidth(); + const float th = slideTex.getHeight(); + const float hw = tw/2; //width*0.5f; + const float hh = th/2; //height*0.5f; + + glColor4ub(255,255,255,alpha); + glBegin(GL_QUADS); + glTexCoord2f(0,th); + glVertex2f(hw-tw/2,hh-th/2); + glTexCoord2f(tw,th); + glVertex2f(hw+tw/2,hh-th/2); + glTexCoord2f(tw,0); + glVertex2f(hw+tw/2,hh+th/2); + glTexCoord2f(0,0); + glVertex2f(hw-tw/2,hh+th/2); + glEnd(); + + glDisable(GL_TEXTURE_RECTANGLE_ARB); + } + + +/* { + const char msg[] = "W/S/A/D: Move RMB: Rotate LMB: Place Start LMB+SHIFT: Place End"; + const float len = g_font.getTextLength(msg); + g_font.drawText(width/2-len/2, (float)height-20.0f, msg, GLFont::RGBA(255,255,255,128)); + }*/ // Draw start and end point labels if (sposSet && gluProject((GLdouble)spos[0], (GLdouble)spos[1], (GLdouble)spos[2],