Changed many 0xffff:s to named consts.

This commit is contained in:
Mikko Mononen 2010-01-27 14:52:18 +00:00
parent 4cb96e9dc0
commit 5651b7c5dd
12 changed files with 313 additions and 2453 deletions

View File

@ -523,7 +523,7 @@ void duDebugDrawPolyMesh(duDebugDraw* dd, const struct rcPolyMesh& mesh)
unsigned short vi[3]; unsigned short vi[3];
for (int j = 2; j < nvp; ++j) for (int j = 2; j < nvp; ++j)
{ {
if (p[j] == 0xffff) break; if (p[j] == RC_MESH_NULL_IDX) break;
vi[0] = p[0]; vi[0] = p[0];
vi[1] = p[j-1]; vi[1] = p[j-1];
vi[2] = p[j]; vi[2] = p[j];
@ -547,11 +547,11 @@ void duDebugDrawPolyMesh(duDebugDraw* dd, const struct rcPolyMesh& mesh)
const unsigned short* p = &mesh.polys[i*nvp*2]; const unsigned short* p = &mesh.polys[i*nvp*2];
for (int j = 0; j < nvp; ++j) for (int j = 0; j < nvp; ++j)
{ {
if (p[j] == 0xffff) break; if (p[j] == RC_MESH_NULL_IDX) break;
if (p[nvp+j] == 0xffff) continue; if (p[nvp+j] == RC_MESH_NULL_IDX) continue;
int vi[2]; int vi[2];
vi[0] = p[j]; vi[0] = p[j];
if (j+1 >= nvp || p[j+1] == 0xffff) if (j+1 >= nvp || p[j+1] == RC_MESH_NULL_IDX)
vi[1] = p[0]; vi[1] = p[0];
else else
vi[1] = p[j+1]; vi[1] = p[j+1];
@ -575,11 +575,11 @@ void duDebugDrawPolyMesh(duDebugDraw* dd, const struct rcPolyMesh& mesh)
const unsigned short* p = &mesh.polys[i*nvp*2]; const unsigned short* p = &mesh.polys[i*nvp*2];
for (int j = 0; j < nvp; ++j) for (int j = 0; j < nvp; ++j)
{ {
if (p[j] == 0xffff) break; if (p[j] == RC_MESH_NULL_IDX) break;
if (p[nvp+j] != 0xffff) continue; if (p[nvp+j] != RC_MESH_NULL_IDX) continue;
int vi[2]; int vi[2];
vi[0] = p[j]; vi[0] = p[j];
if (j+1 >= nvp || p[j+1] == 0xffff) if (j+1 >= nvp || p[j+1] == RC_MESH_NULL_IDX)
vi[1] = p[0]; vi[1] = p[0];
else else
vi[1] = p[j+1]; vi[1] = p[j+1];

View File

@ -55,7 +55,7 @@ bool duDumpPolyMeshToObj(rcPolyMesh& pmesh, const char* filepath)
const unsigned short* p = &pmesh.polys[i*nvp*2]; const unsigned short* p = &pmesh.polys[i*nvp*2];
for (int j = 2; j < nvp; ++j) for (int j = 2; j < nvp; ++j)
{ {
if (p[j] == 0xffff) break; if (p[j] == RC_MESH_NULL_IDX) break;
fprintf(fp, "f %d %d %d\n", p[0]+1, p[j-1]+1, p[j]+1); fprintf(fp, "f %d %d %d\n", p[0]+1, p[j-1]+1, p[j]+1);
} }
} }

View File

@ -24,7 +24,7 @@
#include "DetourCommon.h" #include "DetourCommon.h"
#include "DetourNavMeshBuilder.h" #include "DetourNavMeshBuilder.h"
static unsigned short MESH_NULL_IDX = 0xffff;
struct BVItem struct BVItem
{ {
@ -184,7 +184,7 @@ static int createBVTree(const unsigned short* verts, const int nverts,
for (int j = 1; j < nvp; ++j) for (int j = 1; j < nvp; ++j)
{ {
if (p[j] == 0xffff) break; if (p[j] == MESH_NULL_IDX) break;
unsigned short x = verts[p[j]*3+0]; unsigned short x = verts[p[j]*3+0];
unsigned short y = verts[p[j]*3+1]; unsigned short y = verts[p[j]*3+1];
unsigned short z = verts[p[j]*3+2]; unsigned short z = verts[p[j]*3+2];
@ -293,9 +293,9 @@ bool dtCreateNavMeshData(dtNavMeshCreateParams* params, unsigned char** outData,
const unsigned short* p = &params->polys[i*2*nvp]; const unsigned short* p = &params->polys[i*2*nvp];
for (int j = 0; j < nvp; ++j) for (int j = 0; j < nvp; ++j)
{ {
if (p[j] == 0xffff) break; if (p[j] == MESH_NULL_IDX) break;
int nj = j+1; int nj = j+1;
if (nj >= nvp || p[nj] == 0xffff) nj = 0; if (nj >= nvp || p[nj] == MESH_NULL_IDX) nj = 0;
const unsigned short* va = &params->verts[p[j]*3]; const unsigned short* va = &params->verts[p[j]*3];
const unsigned short* vb = &params->verts[p[nj]*3]; const unsigned short* vb = &params->verts[p[nj]*3];
@ -326,7 +326,7 @@ bool dtCreateNavMeshData(dtNavMeshCreateParams* params, unsigned char** outData,
int nv = 0; int nv = 0;
for (int j = 0; j < nvp; ++j) for (int j = 0; j < nvp; ++j)
{ {
if (p[j] == 0xffff) break; if (p[j] == MESH_NULL_IDX) break;
nv++; nv++;
} }
ndv -= nv; ndv -= nv;
@ -422,7 +422,7 @@ bool dtCreateNavMeshData(dtNavMeshCreateParams* params, unsigned char** outData,
p->flags = DT_POLY_GROUND; p->flags = DT_POLY_GROUND;
for (int j = 0; j < nvp; ++j) for (int j = 0; j < nvp; ++j)
{ {
if (src[j] == 0xffff) break; if (src[j] == MESH_NULL_IDX) break;
p->verts[j] = src[j]; p->verts[j] = src[j];
p->neis[j] = (src[nvp+j]+1) & 0xffff; p->neis[j] = (src[nvp+j]+1) & 0xffff;
p->vertCount++; p->vertCount++;

View File

@ -19,6 +19,8 @@
#include "DetourNode.h" #include "DetourNode.h"
#include <string.h> #include <string.h>
static const unsigned short DT_NULL_IDX = 0xffff;
////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////
dtNodePool::dtNodePool(int maxNodes, int hashSize) : dtNodePool::dtNodePool(int maxNodes, int hashSize) :
@ -53,7 +55,7 @@ const dtNode* dtNodePool::findNode(unsigned int id) const
{ {
unsigned int bucket = hashint(id) & (m_hashSize-1); unsigned int bucket = hashint(id) & (m_hashSize-1);
unsigned short i = m_first[bucket]; unsigned short i = m_first[bucket];
while (i != 0xffff) while (i != DT_NULL_IDX)
{ {
if (m_nodes[i].id == id) if (m_nodes[i].id == id)
return &m_nodes[i]; return &m_nodes[i];
@ -67,7 +69,7 @@ dtNode* dtNodePool::getNode(unsigned int id)
unsigned int bucket = hashint(id) & (m_hashSize-1); unsigned int bucket = hashint(id) & (m_hashSize-1);
unsigned short i = m_first[bucket]; unsigned short i = m_first[bucket];
dtNode* node = 0; dtNode* node = 0;
while (i != 0xffff) while (i != DT_NULL_IDX)
{ {
if (m_nodes[i].id == id) if (m_nodes[i].id == id)
return &m_nodes[i]; return &m_nodes[i];

View File

@ -150,8 +150,8 @@ struct rcContourSet
// 'nvp*2' elements. The first 'nvp' elements are indices to vertices // 'nvp*2' elements. The first 'nvp' elements are indices to vertices
// and the second 'nvp' elements are indices to neighbour polygons. // and the second 'nvp' elements are indices to neighbour polygons.
// If a polygona has less than 'bvp' vertices, the remaining indices // If a polygona has less than 'bvp' vertices, the remaining indices
// are set os 0xffff. If an polygon edge does not have a neighbour // are set to RC_MESH_NULL_IDX. If an polygon edge does not have a neighbour
// the neighbour index is set to 0xffff. // the neighbour index is set to RC_MESH_NULL_IDX.
// Vertices can be transformed into world space as follows: // Vertices can be transformed into world space as follows:
// x = bmin[0] + verts[i*3+0]*cs; // x = bmin[0] + verts[i*3+0]*cs;
// y = bmin[1] + verts[i*3+1]*ch; // y = bmin[1] + verts[i*3+1]*ch;
@ -242,6 +242,11 @@ static const unsigned short RC_BORDER_REG = 0x8000;
// removed in order to match the segments and vertices at tile boundaries. // removed in order to match the segments and vertices at tile boundaries.
static const int RC_BORDER_VERTEX = 0x10000; static const int RC_BORDER_VERTEX = 0x10000;
// Mask used with contours to extract region id.
static const int RC_CONTOUR_REG_MASK = 0xffff;
// Null index which is used with meshes to mark unset or invalid indices.
static const unsigned short RC_MESH_NULL_IDX = 0xffff;
// Value returned by rcGetCon() if the direction is not connected. // Value returned by rcGetCon() if the direction is not connected.
static const int RC_NOT_CONNECTED = 0xf; static const int RC_NOT_CONNECTED = 0xf;

View File

@ -223,7 +223,7 @@ static void simplifyContour(rcIntArray& points, rcIntArray& simplified, float ma
bool noConnections = true; bool noConnections = true;
for (int i = 0; i < points.size(); i += 4) for (int i = 0; i < points.size(); i += 4)
{ {
if ((points[i+3] & 0xffff) != 0) if ((points[i+3] & RC_CONTOUR_REG_MASK) != 0)
{ {
noConnections = false; noConnections = false;
break; break;
@ -280,7 +280,7 @@ static void simplifyContour(rcIntArray& points, rcIntArray& simplified, float ma
for (int i = 0, ni = points.size()/4; i < ni; ++i) for (int i = 0, ni = points.size()/4; i < ni; ++i)
{ {
int ii = (i+1) % ni; int ii = (i+1) % ni;
if ((points[i*4+3] & 0xffff) != (points[ii*4+3] & 0xffff)) if ((points[i*4+3] & RC_CONTOUR_REG_MASK) != (points[ii*4+3] & RC_CONTOUR_REG_MASK))
{ {
simplified.push(points[i*4+0]); simplified.push(points[i*4+0]);
simplified.push(points[i*4+1]); simplified.push(points[i*4+1]);
@ -313,7 +313,7 @@ static void simplifyContour(rcIntArray& points, rcIntArray& simplified, float ma
int ci = (ai+1) % pn; int ci = (ai+1) % pn;
// Tesselate only outer edges. // Tesselate only outer edges.
if ((points[ci*4+3] & 0xffff) == 0) if ((points[ci*4+3] & RC_CONTOUR_REG_MASK) == 0)
{ {
while (ci != bi) while (ci != bi)
{ {
@ -375,7 +375,7 @@ static void simplifyContour(rcIntArray& points, rcIntArray& simplified, float ma
int ci = (ai+1) % pn; int ci = (ai+1) % pn;
// Tesselate only outer edges. // Tesselate only outer edges.
if ((points[ci*4+3] & 0xffff) == 0) if ((points[ci*4+3] & RC_CONTOUR_REG_MASK) == 0)
{ {
int dx = bx - ax; int dx = bx - ax;
int dz = bz - az; int dz = bz - az;
@ -419,7 +419,7 @@ static void simplifyContour(rcIntArray& points, rcIntArray& simplified, float ma
// and the neighbour region is take from the next raw point. // and the neighbour region is take from the next raw point.
const int ai = (simplified[i*4+3]+1) % pn; const int ai = (simplified[i*4+3]+1) % pn;
const int bi = simplified[i*4+3]; const int bi = simplified[i*4+3];
simplified[i*4+3] = (points[ai*4+3] & 0xffff) | (points[bi*4+3] & RC_BORDER_VERTEX); simplified[i*4+3] = (points[ai*4+3] & RC_CONTOUR_REG_MASK) | (points[bi*4+3] & RC_BORDER_VERTEX);
} }
} }

View File

@ -50,10 +50,7 @@ static bool buildMeshAdjacency(unsigned short* polys, const int npolys,
return false; return false;
for (int i = 0; i < nverts; i++) for (int i = 0; i < nverts; i++)
firstEdge[i] = 0xffff; firstEdge[i] = RC_MESH_NULL_IDX;
// Invalida indices are marked as 0xffff, the following code
// handles them just fine.
for (int i = 0; i < npolys; ++i) for (int i = 0; i < npolys; ++i)
{ {
@ -61,7 +58,7 @@ static bool buildMeshAdjacency(unsigned short* polys, const int npolys,
for (int j = 0; j < vertsPerPoly; ++j) for (int j = 0; j < vertsPerPoly; ++j)
{ {
unsigned short v0 = t[j]; unsigned short v0 = t[j];
unsigned short v1 = (j+1 >= vertsPerPoly || t[j+1] == 0xffff) ? t[0] : t[j+1]; unsigned short v1 = (j+1 >= vertsPerPoly || t[j+1] == RC_MESH_NULL_IDX) ? t[0] : t[j+1];
if (v0 < v1) if (v0 < v1)
{ {
rcEdge& edge = edges[edgeCount]; rcEdge& edge = edges[edgeCount];
@ -85,10 +82,10 @@ static bool buildMeshAdjacency(unsigned short* polys, const int npolys,
for (int j = 0; j < vertsPerPoly; ++j) for (int j = 0; j < vertsPerPoly; ++j)
{ {
unsigned short v0 = t[j]; unsigned short v0 = t[j];
unsigned short v1 = (j+1 >= vertsPerPoly || t[j+1] == 0xffff) ? t[0] : t[j+1]; unsigned short v1 = (j+1 >= vertsPerPoly || t[j+1] == RC_MESH_NULL_IDX) ? t[0] : t[j+1];
if (v0 > v1) if (v0 > v1)
{ {
for (unsigned short e = firstEdge[v1]; e != 0xffff; e = nextEdge[e]) for (unsigned short e = firstEdge[v1]; e != RC_MESH_NULL_IDX; e = nextEdge[e])
{ {
rcEdge& edge = edges[e]; rcEdge& edge = edges[e];
if (edge.vert[1] == v0 && edge.poly[0] == edge.poly[1]) if (edge.vert[1] == v0 && edge.poly[0] == edge.poly[1])
@ -379,7 +376,7 @@ int triangulate(int n, const int* verts, int* indices, int* tris)
static int countPolyVerts(const unsigned short* p, const int nvp) static int countPolyVerts(const unsigned short* p, const int nvp)
{ {
for (int i = 0; i < nvp; ++i) for (int i = 0; i < nvp; ++i)
if (p[i] == 0xffff) if (p[i] == RC_MESH_NULL_IDX)
return i; return i;
return nvp; return nvp;
} }
@ -1145,7 +1142,7 @@ bool rcMergePolyMeshes(rcPolyMesh** meshes, const int nmeshes, rcPolyMesh& mesh)
mesh.npolys++; mesh.npolys++;
for (int k = 0; k < mesh.nvp; ++k) for (int k = 0; k < mesh.nvp; ++k)
{ {
if (src[k] == 0xffff) break; if (src[k] == RC_MESH_NULL_IDX) break;
tgt[k] = vremap[src[k]]; tgt[k] = vremap[src[k]];
} }
} }

View File

@ -27,6 +27,8 @@
#include "RecastTimer.h" #include "RecastTimer.h"
static const unsigned RC_UNSET_HEIGHT = 0xffff;
struct rcHeightPatch struct rcHeightPatch
{ {
inline rcHeightPatch() : data(0) {} inline rcHeightPatch() : data(0) {}
@ -199,7 +201,7 @@ static unsigned short getHeight(const float fx, const float fz, const float cs,
ix = rcClamp(ix-hp.xmin, 0, hp.width); ix = rcClamp(ix-hp.xmin, 0, hp.width);
iz = rcClamp(iz-hp.ymin, 0, hp.height); iz = rcClamp(iz-hp.ymin, 0, hp.height);
unsigned short h = hp.data[ix+iz*hp.width]; unsigned short h = hp.data[ix+iz*hp.width];
if (h == 0xffff) if (h == RC_UNSET_HEIGHT)
{ {
// Special case when data might be bad. // Special case when data might be bad.
// Find nearest neighbour pixel which has valid height. // Find nearest neighbour pixel which has valid height.
@ -211,7 +213,7 @@ static unsigned short getHeight(const float fx, const float fz, const float cs,
const int nz = iz+off[i*2+1]; const int nz = iz+off[i*2+1];
if (nx < 0 || nz < 0 || nx >= hp.width || nz >= hp.height) continue; if (nx < 0 || nz < 0 || nx >= hp.width || nz >= hp.height) continue;
const unsigned short nh = hp.data[nx+nz*hp.width]; const unsigned short nh = hp.data[nx+nz*hp.width];
if (nh == 0xffff) continue; if (nh == RC_UNSET_HEIGHT) continue;
const float dx = (nx+0.5f)*cs - fx; const float dx = (nx+0.5f)*cs - fx;
const float dz = (nz+0.5f)*cs - fz; const float dz = (nz+0.5f)*cs - fz;
const float d = dx*dx+dz*dz; const float d = dx*dx+dz*dz;
@ -726,7 +728,7 @@ static void getHeightData(const rcCompactHeightfield& chf,
continue; continue;
const rcCompactCell& c = chf.cells[ax+az*chf.width]; const rcCompactCell& c = chf.cells[ax+az*chf.width];
int dmin = 0xffff; int dmin = RC_UNSET_HEIGHT;
int ai = -1; int ai = -1;
for (int i = (int)c.index, ni = (int)(c.index+c.count); i < ni; ++i) for (int i = (int)c.index, ni = (int)(c.index+c.count); i < ni; ++i)
{ {
@ -764,7 +766,7 @@ static void getHeightData(const rcCompactHeightfield& chf,
cz >= hp.ymin && cz < hp.ymin+hp.height) cz >= hp.ymin && cz < hp.ymin+hp.height)
{ {
const rcCompactCell& c = chf.cells[cx+cz*chf.width]; const rcCompactCell& c = chf.cells[cx+cz*chf.width];
int dmin = 0xffff; int dmin = RC_UNSET_HEIGHT;
int ci = -1; int ci = -1;
for (int i = (int)c.index, ni = (int)(c.index+c.count); i < ni; ++i) for (int i = (int)c.index, ni = (int)(c.index+c.count); i < ni; ++i)
{ {
@ -793,7 +795,7 @@ static void getHeightData(const rcCompactHeightfield& chf,
// Skip already visited locations. // Skip already visited locations.
int idx = cx-hp.xmin+(cy-hp.ymin)*hp.width; int idx = cx-hp.xmin+(cy-hp.ymin)*hp.width;
if (hp.data[idx] != 0xffff) if (hp.data[idx] != RC_UNSET_HEIGHT)
continue; continue;
const rcCompactSpan& cs = chf.spans[ci]; const rcCompactSpan& cs = chf.spans[ci];
@ -810,7 +812,7 @@ static void getHeightData(const rcCompactHeightfield& chf,
ay < hp.ymin || ay >= (hp.ymin+hp.height)) ay < hp.ymin || ay >= (hp.ymin+hp.height))
continue; continue;
if (hp.data[ax-hp.xmin+(ay-hp.ymin)*hp.width] != 0xffff) if (hp.data[ax-hp.xmin+(ay-hp.ymin)*hp.width] != RC_UNSET_HEIGHT)
continue; continue;
const int ai = (int)chf.cells[ax+ay*chf.width].index + rcGetCon(cs, dir); const int ai = (int)chf.cells[ax+ay*chf.width].index + rcGetCon(cs, dir);
@ -900,7 +902,7 @@ bool rcBuildPolyMeshDetail(const rcPolyMesh& mesh, const rcCompactHeightfield& c
ymax = 0; ymax = 0;
for (int j = 0; j < nvp; ++j) for (int j = 0; j < nvp; ++j)
{ {
if(p[j] == 0xffff) break; if(p[j] == RC_MESH_NULL_IDX) break;
const unsigned short* v = &mesh.verts[p[j]*3]; const unsigned short* v = &mesh.verts[p[j]*3];
xmin = rcMin(xmin, (int)v[0]); xmin = rcMin(xmin, (int)v[0]);
xmax = rcMax(xmax, (int)v[0]); xmax = rcMax(xmax, (int)v[0]);
@ -964,7 +966,7 @@ bool rcBuildPolyMeshDetail(const rcPolyMesh& mesh, const rcCompactHeightfield& c
int npoly = 0; int npoly = 0;
for (int j = 0; j < nvp; ++j) for (int j = 0; j < nvp; ++j)
{ {
if(p[j] == 0xffff) break; if(p[j] == RC_MESH_NULL_IDX) break;
const unsigned short* v = &mesh.verts[p[j]*3]; const unsigned short* v = &mesh.verts[p[j]*3];
poly[j*3+0] = v[0]*cs; poly[j*3+0] = v[0]*cs;
poly[j*3+1] = v[1]*ch; poly[j*3+1] = v[1]*ch;

View File

@ -954,6 +954,9 @@ static void paintRectRegion(int minx, int maxx, int miny, int maxy,
} }
} }
static const unsigned short RC_NULL_NEI = 0xffff;
struct rcSweepSpan struct rcSweepSpan
{ {
unsigned short rid; // row id unsigned short rid; // row id
@ -1061,7 +1064,7 @@ bool rcBuildRegionsMonotone(rcCompactHeightfield& chf,
} }
else else
{ {
sweeps[previd].nei = 0xffff; sweeps[previd].nei = RC_NULL_NEI;
} }
} }
} }
@ -1073,7 +1076,7 @@ bool rcBuildRegionsMonotone(rcCompactHeightfield& chf,
// Create unique ID. // Create unique ID.
for (int i = 1; i < rid; ++i) for (int i = 1; i < rid; ++i)
{ {
if (sweeps[i].nei != 0xffff && sweeps[i].nei != 0 && if (sweeps[i].nei != RC_NULL_NEI && sweeps[i].nei != 0 &&
prev[sweeps[i].nei] == (int)sweeps[i].ns) prev[sweeps[i].nei] == (int)sweeps[i].ns)
{ {
sweeps[i].id = sweeps[i].nei; sweeps[i].id = sweeps[i].nei;

File diff suppressed because it is too large Load Diff

View File

@ -323,7 +323,7 @@
<key>PBXProjectModuleGUID</key> <key>PBXProjectModuleGUID</key>
<string>6B8632A30F78115100E2684A</string> <string>6B8632A30F78115100E2684A</string>
<key>PBXProjectModuleLabel</key> <key>PBXProjectModuleLabel</key>
<string>DetourNavMesh.cpp</string> <string>DetourNavMesh.h</string>
<key>PBXSplitModuleInNavigatorKey</key> <key>PBXSplitModuleInNavigatorKey</key>
<dict> <dict>
<key>Split0</key> <key>Split0</key>
@ -331,11 +331,11 @@
<key>PBXProjectModuleGUID</key> <key>PBXProjectModuleGUID</key>
<string>6B8632A40F78115100E2684A</string> <string>6B8632A40F78115100E2684A</string>
<key>PBXProjectModuleLabel</key> <key>PBXProjectModuleLabel</key>
<string>DetourNavMesh.cpp</string> <string>DetourNavMesh.h</string>
<key>_historyCapacity</key> <key>_historyCapacity</key>
<integer>0</integer> <integer>0</integer>
<key>bookmark</key> <key>bookmark</key>
<string>6BF7BE92110F1BDA002B3F46</string> <string>6BF7C0D41110857A002B3F46</string>
<key>history</key> <key>history</key>
<array> <array>
<string>6B57D358108C66B200DDD053</string> <string>6B57D358108C66B200DDD053</string>
@ -385,8 +385,8 @@
<string>6BF7BE82110F196C002B3F46</string> <string>6BF7BE82110F196C002B3F46</string>
<string>6BF7BE83110F196C002B3F46</string> <string>6BF7BE83110F196C002B3F46</string>
<string>6BF7BE8C110F1AFC002B3F46</string> <string>6BF7BE8C110F1AFC002B3F46</string>
<string>6BF7BE8D110F1AFC002B3F46</string> <string>6BF7C0CB1110857A002B3F46</string>
<string>6BF7BE1E110F0792002B3F46</string> <string>6BF7C0CC1110857A002B3F46</string>
</array> </array>
<key>prevStack</key> <key>prevStack</key>
<array> <array>
@ -427,99 +427,13 @@
<string>6B4260411109E27F00C48C36</string> <string>6B4260411109E27F00C48C36</string>
<string>6B4260471109E83800C48C36</string> <string>6B4260471109E83800C48C36</string>
<string>6B4260481109E83800C48C36</string> <string>6B4260481109E83800C48C36</string>
<string>6BF7BDC7110EF674002B3F46</string> <string>6BF7C0CD1110857A002B3F46</string>
<string>6BF7BDC8110EF674002B3F46</string> <string>6BF7C0CE1110857A002B3F46</string>
<string>6BF7BDC9110EF674002B3F46</string> <string>6BF7C0CF1110857A002B3F46</string>
<string>6BF7BDCA110EF674002B3F46</string> <string>6BF7C0D01110857A002B3F46</string>
<string>6BF7BDCB110EF674002B3F46</string> <string>6BF7C0D11110857A002B3F46</string>
<string>6BF7BDCC110EF674002B3F46</string> <string>6BF7C0D21110857A002B3F46</string>
<string>6BF7BDCD110EF674002B3F46</string> <string>6BF7C0D31110857A002B3F46</string>
<string>6BF7BDCE110EF674002B3F46</string>
<string>6BF7BDCF110EF674002B3F46</string>
<string>6BF7BDD0110EF674002B3F46</string>
<string>6BF7BDD1110EF674002B3F46</string>
<string>6BF7BDD2110EF674002B3F46</string>
<string>6BF7BDD3110EF674002B3F46</string>
<string>6BF7BDD4110EF674002B3F46</string>
<string>6BF7BDD5110EF674002B3F46</string>
<string>6BF7BDD6110EF674002B3F46</string>
<string>6BF7BDD7110EF674002B3F46</string>
<string>6BF7BDD8110EF674002B3F46</string>
<string>6BF7BDD9110EF674002B3F46</string>
<string>6BF7BDDA110EF674002B3F46</string>
<string>6BF7BDDB110EF674002B3F46</string>
<string>6BF7BDDC110EF674002B3F46</string>
<string>6BF7BDDD110EF674002B3F46</string>
<string>6BF7BDDE110EF674002B3F46</string>
<string>6BF7BDDF110EF674002B3F46</string>
<string>6BF7BDE0110EF674002B3F46</string>
<string>6BF7BDE1110EF674002B3F46</string>
<string>6BF7BDE2110EF674002B3F46</string>
<string>6BF7BDE3110EF674002B3F46</string>
<string>6BF7BDE4110EF674002B3F46</string>
<string>6BF7BDE5110EF674002B3F46</string>
<string>6BF7BDE6110EF674002B3F46</string>
<string>6BF7BDE7110EF674002B3F46</string>
<string>6BF7BDE8110EF674002B3F46</string>
<string>6BF7BDE9110EF674002B3F46</string>
<string>6BF7BDEA110EF674002B3F46</string>
<string>6BF7BDF7110EF76D002B3F46</string>
<string>6BF7BDF8110EF76D002B3F46</string>
<string>6BF7BDF9110EF76D002B3F46</string>
<string>6BF7BDFA110EF76D002B3F46</string>
<string>6BF7BE07110EF794002B3F46</string>
<string>6BF7BE11110EF7F7002B3F46</string>
<string>6BF7BE1A110F023C002B3F46</string>
<string>6BF7BE1B110F023C002B3F46</string>
<string>6BF7BE1C110F023C002B3F46</string>
<string>6BF7BE22110F0792002B3F46</string>
<string>6BF7BE23110F0792002B3F46</string>
<string>6BF7BE24110F0792002B3F46</string>
<string>6BF7BE25110F0792002B3F46</string>
<string>6BF7BE26110F0792002B3F46</string>
<string>6BF7BE2C110F13F9002B3F46</string>
<string>6BF7BE2D110F13F9002B3F46</string>
<string>6BF7BE40110F1576002B3F46</string>
<string>6BF7BE41110F1576002B3F46</string>
<string>6BF7BE42110F1576002B3F46</string>
<string>6BF7BE43110F1576002B3F46</string>
<string>6BF7BE44110F1576002B3F46</string>
<string>6BF7BE45110F1576002B3F46</string>
<string>6BF7BE46110F1576002B3F46</string>
<string>6BF7BE47110F1576002B3F46</string>
<string>6BF7BE48110F1576002B3F46</string>
<string>6BF7BE49110F1576002B3F46</string>
<string>6BF7BE4A110F1576002B3F46</string>
<string>6BF7BE4B110F1576002B3F46</string>
<string>6BF7BE4C110F1576002B3F46</string>
<string>6BF7BE4D110F1576002B3F46</string>
<string>6BF7BE4E110F1576002B3F46</string>
<string>6BF7BE56110F160F002B3F46</string>
<string>6BF7BE57110F160F002B3F46</string>
<string>6BF7BE64110F170A002B3F46</string>
<string>6BF7BE65110F170A002B3F46</string>
<string>6BF7BE66110F170A002B3F46</string>
<string>6BF7BE67110F170A002B3F46</string>
<string>6BF7BE68110F170A002B3F46</string>
<string>6BF7BE69110F170A002B3F46</string>
<string>6BF7BE6A110F170A002B3F46</string>
<string>6BF7BE6B110F170A002B3F46</string>
<string>6BF7BE6C110F170A002B3F46</string>
<string>6BF7BE6D110F170A002B3F46</string>
<string>6BF7BE78110F1832002B3F46</string>
<string>6BF7BE79110F1832002B3F46</string>
<string>6BF7BE7A110F1832002B3F46</string>
<string>6BF7BE7B110F1832002B3F46</string>
<string>6BF7BE7C110F1832002B3F46</string>
<string>6BF7BE7D110F1832002B3F46</string>
<string>6BF7BE85110F196C002B3F46</string>
<string>6BF7BE86110F196C002B3F46</string>
<string>6BF7BE87110F196C002B3F46</string>
<string>6BF7BE88110F196C002B3F46</string>
<string>6BF7BE89110F196C002B3F46</string>
<string>6BF7BE8A110F196C002B3F46</string>
<string>6BF7BE8E110F1AFC002B3F46</string>
<string>6BF7BE8F110F1AFC002B3F46</string>
</array> </array>
</dict> </dict>
<key>SplitCount</key> <key>SplitCount</key>
@ -558,7 +472,9 @@
<key>GeometryConfiguration</key> <key>GeometryConfiguration</key>
<dict> <dict>
<key>Frame</key> <key>Frame</key>
<string>{{10, 27}, {876, 88}}</string> <string>{{10, 27}, {876, 73}}</string>
<key>RubberWindowFrame</key>
<string>11 76 1256 702 0 0 1280 778 </string>
</dict> </dict>
<key>Module</key> <key>Module</key>
<string>XCDetailModule</string> <string>XCDetailModule</string>
@ -575,8 +491,6 @@
<dict> <dict>
<key>Frame</key> <key>Frame</key>
<string>{{10, 27}, {876, 73}}</string> <string>{{10, 27}, {876, 73}}</string>
<key>RubberWindowFrame</key>
<string>11 76 1256 702 0 0 1280 778 </string>
</dict> </dict>
<key>Module</key> <key>Module</key>
<string>PBXProjectFindModule</string> <string>PBXProjectFindModule</string>
@ -642,11 +556,11 @@
</array> </array>
<key>TableOfContents</key> <key>TableOfContents</key>
<array> <array>
<string>6BF7BDEC110EF674002B3F46</string> <string>6BF7C0C811108202002B3F46</string>
<string>1CA23ED40692098700951B8B</string> <string>1CA23ED40692098700951B8B</string>
<string>6BF7BDED110EF674002B3F46</string> <string>6BF7C0C911108202002B3F46</string>
<string>6B8632A30F78115100E2684A</string> <string>6B8632A30F78115100E2684A</string>
<string>6BF7BDEE110EF674002B3F46</string> <string>6BF7C0CA11108202002B3F46</string>
<string>1CA23EDF0692099D00951B8B</string> <string>1CA23EDF0692099D00951B8B</string>
<string>1CA23EE00692099D00951B8B</string> <string>1CA23EE00692099D00951B8B</string>
<string>1CA23EE10692099D00951B8B</string> <string>1CA23EE10692099D00951B8B</string>
@ -834,8 +748,6 @@
<integer>5</integer> <integer>5</integer>
<key>WindowOrderList</key> <key>WindowOrderList</key>
<array> <array>
<string>6BF7BE0B110EF794002B3F46</string>
<string>6BF7BE0C110EF794002B3F46</string>
<string>/Users/memon/Code/recastnavigation/RecastDemo/Build/Xcode/Recast.xcodeproj</string> <string>/Users/memon/Code/recastnavigation/RecastDemo/Build/Xcode/Recast.xcodeproj</string>
</array> </array>
<key>WindowString</key> <key>WindowString</key>