Moved common functions behind name decoration.

This commit is contained in:
Mikko Mononen 2010-04-14 18:45:46 +00:00
parent b21e854c9a
commit 10b330ffb4
23 changed files with 1119 additions and 530 deletions

View File

@ -21,75 +21,75 @@
////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////
template<class T> inline void swap(T& a, T& b) { T t = a; a = b; b = t; } template<class T> inline void dtSwap(T& a, T& b) { T t = a; a = b; b = t; }
template<class T> inline T min(T a, T b) { return a < b ? a : b; } template<class T> inline T dtMin(T a, T b) { return a < b ? a : b; }
template<class T> inline T max(T a, T b) { return a > b ? a : b; } template<class T> inline T dtMax(T a, T b) { return a > b ? a : b; }
template<class T> inline T abs(T a) { return a < 0 ? -a : a; } template<class T> inline T dtAbs(T a) { return a < 0 ? -a : a; }
template<class T> inline T sqr(T a) { return a*a; } template<class T> inline T dtSqr(T a) { return a*a; }
template<class T> inline T clamp(T v, T mn, T mx) { return v < mn ? mn : (v > mx ? mx : v); } template<class T> inline T dtClamp(T v, T mn, T mx) { return v < mn ? mn : (v > mx ? mx : v); }
inline void vcross(float* dest, const float* v1, const float* v2) inline void dtVcross(float* dest, const float* v1, const float* v2)
{ {
dest[0] = v1[1]*v2[2] - v1[2]*v2[1]; dest[0] = v1[1]*v2[2] - v1[2]*v2[1];
dest[1] = v1[2]*v2[0] - v1[0]*v2[2]; dest[1] = v1[2]*v2[0] - v1[0]*v2[2];
dest[2] = v1[0]*v2[1] - v1[1]*v2[0]; dest[2] = v1[0]*v2[1] - v1[1]*v2[0];
} }
inline float vdot(const float* v1, const float* v2) inline float dtVdot(const float* v1, const float* v2)
{ {
return v1[0]*v2[0] + v1[1]*v2[1] + v1[2]*v2[2]; return v1[0]*v2[0] + v1[1]*v2[1] + v1[2]*v2[2];
} }
inline void vmad(float* dest, const float* v1, const float* v2, const float s) inline void dtVmad(float* dest, const float* v1, const float* v2, const float s)
{ {
dest[0] = v1[0]+v2[0]*s; dest[0] = v1[0]+v2[0]*s;
dest[1] = v1[1]+v2[1]*s; dest[1] = v1[1]+v2[1]*s;
dest[2] = v1[2]+v2[2]*s; dest[2] = v1[2]+v2[2]*s;
} }
inline void vlerp(float* dest, const float* v1, const float* v2, const float t) inline void dtVlerp(float* dest, const float* v1, const float* v2, const float t)
{ {
dest[0] = v1[0]+(v2[0]-v1[0])*t; dest[0] = v1[0]+(v2[0]-v1[0])*t;
dest[1] = v1[1]+(v2[1]-v1[1])*t; dest[1] = v1[1]+(v2[1]-v1[1])*t;
dest[2] = v1[2]+(v2[2]-v1[2])*t; dest[2] = v1[2]+(v2[2]-v1[2])*t;
} }
inline void vadd(float* dest, const float* v1, const float* v2) inline void dtVadd(float* dest, const float* v1, const float* v2)
{ {
dest[0] = v1[0]+v2[0]; dest[0] = v1[0]+v2[0];
dest[1] = v1[1]+v2[1]; dest[1] = v1[1]+v2[1];
dest[2] = v1[2]+v2[2]; dest[2] = v1[2]+v2[2];
} }
inline void vsub(float* dest, const float* v1, const float* v2) inline void dtVsub(float* dest, const float* v1, const float* v2)
{ {
dest[0] = v1[0]-v2[0]; dest[0] = v1[0]-v2[0];
dest[1] = v1[1]-v2[1]; dest[1] = v1[1]-v2[1];
dest[2] = v1[2]-v2[2]; dest[2] = v1[2]-v2[2];
} }
inline void vmin(float* mn, const float* v) inline void dtVmin(float* mn, const float* v)
{ {
mn[0] = min(mn[0], v[0]); mn[0] = dtMin(mn[0], v[0]);
mn[1] = min(mn[1], v[1]); mn[1] = dtMin(mn[1], v[1]);
mn[2] = min(mn[2], v[2]); mn[2] = dtMin(mn[2], v[2]);
} }
inline void vmax(float* mx, const float* v) inline void dtVmax(float* mx, const float* v)
{ {
mx[0] = max(mx[0], v[0]); mx[0] = dtMax(mx[0], v[0]);
mx[1] = max(mx[1], v[1]); mx[1] = dtMax(mx[1], v[1]);
mx[2] = max(mx[2], v[2]); mx[2] = dtMax(mx[2], v[2]);
} }
inline void vcopy(float* dest, const float* a) inline void dtVcopy(float* dest, const float* a)
{ {
dest[0] = a[0]; dest[0] = a[0];
dest[1] = a[1]; dest[1] = a[1];
dest[2] = a[2]; dest[2] = a[2];
} }
inline float vdist(const float* v1, const float* v2) inline float dtVdist(const float* v1, const float* v2)
{ {
float dx = v2[0] - v1[0]; float dx = v2[0] - v1[0];
float dy = v2[1] - v1[1]; float dy = v2[1] - v1[1];
@ -97,7 +97,7 @@ inline float vdist(const float* v1, const float* v2)
return sqrtf(dx*dx + dy*dy + dz*dz); return sqrtf(dx*dx + dy*dy + dz*dz);
} }
inline float vdistSqr(const float* v1, const float* v2) inline float dtVdistSqr(const float* v1, const float* v2)
{ {
float dx = v2[0] - v1[0]; float dx = v2[0] - v1[0];
float dy = v2[1] - v1[1]; float dy = v2[1] - v1[1];
@ -105,18 +105,18 @@ inline float vdistSqr(const float* v1, const float* v2)
return dx*dx + dy*dy + dz*dz; return dx*dx + dy*dy + dz*dz;
} }
inline void vnormalize(float* v) inline void dtVnormalize(float* v)
{ {
float d = 1.0f / sqrtf(sqr(v[0]) + sqr(v[1]) + sqr(v[2])); float d = 1.0f / sqrtf(dtSqr(v[0]) + dtSqr(v[1]) + dtSqr(v[2]));
v[0] *= d; v[0] *= d;
v[1] *= d; v[1] *= d;
v[2] *= d; v[2] *= d;
} }
inline bool vequal(const float* p0, const float* p1) inline bool dtVequal(const float* p0, const float* p1)
{ {
static const float thr = sqr(1.0f/16384.0f); static const float thr = dtSqr(1.0f/16384.0f);
const float d = vdistSqr(p0, p1); const float d = dtVdistSqr(p0, p1);
return d < thr; return d < thr;
} }

View File

@ -24,27 +24,27 @@ void closestPtPointTriangle(float* closest, const float* p,
{ {
// Check if P in vertex region outside A // Check if P in vertex region outside A
float ab[3], ac[3], ap[3]; float ab[3], ac[3], ap[3];
vsub(ab, b, a); dtVsub(ab, b, a);
vsub(ac, c, a); dtVsub(ac, c, a);
vsub(ap, p, a); dtVsub(ap, p, a);
float d1 = vdot(ab, ap); float d1 = dtVdot(ab, ap);
float d2 = vdot(ac, ap); float d2 = dtVdot(ac, ap);
if (d1 <= 0.0f && d2 <= 0.0f) if (d1 <= 0.0f && d2 <= 0.0f)
{ {
// barycentric coordinates (1,0,0) // barycentric coordinates (1,0,0)
vcopy(closest, a); dtVcopy(closest, a);
return; return;
} }
// Check if P in vertex region outside B // Check if P in vertex region outside B
float bp[3]; float bp[3];
vsub(bp, p, b); dtVsub(bp, p, b);
float d3 = vdot(ab, bp); float d3 = dtVdot(ab, bp);
float d4 = vdot(ac, bp); float d4 = dtVdot(ac, bp);
if (d3 >= 0.0f && d4 <= d3) if (d3 >= 0.0f && d4 <= d3)
{ {
// barycentric coordinates (0,1,0) // barycentric coordinates (0,1,0)
vcopy(closest, b); dtVcopy(closest, b);
return; return;
} }
@ -62,13 +62,13 @@ void closestPtPointTriangle(float* closest, const float* p,
// Check if P in vertex region outside C // Check if P in vertex region outside C
float cp[3]; float cp[3];
vsub(cp, p, c); dtVsub(cp, p, c);
float d5 = vdot(ab, cp); float d5 = dtVdot(ab, cp);
float d6 = vdot(ac, cp); float d6 = dtVdot(ac, cp);
if (d6 >= 0.0f && d5 <= d6) if (d6 >= 0.0f && d5 <= d6)
{ {
// barycentric coordinates (0,0,1) // barycentric coordinates (0,0,1)
vcopy(closest, c); dtVcopy(closest, c);
return; return;
} }
@ -118,16 +118,16 @@ bool intersectSegmentPoly2D(const float* p0, const float* p1,
segMax = -1; segMax = -1;
float dir[3]; float dir[3];
vsub(dir, p1, p0); dtVsub(dir, p1, p0);
for (int i = 0, j = nverts-1; i < nverts; j=i++) for (int i = 0, j = nverts-1; i < nverts; j=i++)
{ {
float edge[3], diff[3]; float edge[3], diff[3];
vsub(edge, &verts[i*3], &verts[j*3]); dtVsub(edge, &verts[i*3], &verts[j*3]);
vsub(diff, p0, &verts[j*3]); dtVsub(diff, p0, &verts[j*3]);
float n = vperp2D(edge, diff); float n = vperp2D(edge, diff);
float d = -vperp2D(edge, dir); float d = -vperp2D(edge, dir);
if (fabs(d) < EPS) if (fabsf(d) < EPS)
{ {
// S is nearly parallel to this edge // S is nearly parallel to this edge
if (n < 0) if (n < 0)
@ -202,9 +202,9 @@ void calcPolyCenter(float* tc, const unsigned short* idx, int nidx, const float*
bool closestHeightPointTriangle(const float* p, const float* a, const float* b, const float* c, float& h) bool closestHeightPointTriangle(const float* p, const float* a, const float* b, const float* c, float& h)
{ {
float v0[3], v1[3], v2[3]; float v0[3], v1[3], v2[3];
vsub(v0, c,a); dtVsub(v0, c,a);
vsub(v1, b,a); dtVsub(v1, b,a);
vsub(v2, p,a); dtVsub(v2, p,a);
const float dot00 = vdot2D(v0, v0); const float dot00 = vdot2D(v0, v0);
const float dot01 = vdot2D(v0, v1); const float dot01 = vdot2D(v0, v1);

View File

@ -52,17 +52,17 @@ static void calcRect(const float* va, const float* vb,
{ {
if (side == 0 || side == 4) if (side == 0 || side == 4)
{ {
bmin[0] = min(va[2],vb[2]) + padx; bmin[0] = dtMin(va[2],vb[2]) + padx;
bmin[1] = min(va[1],vb[1]) - pady; bmin[1] = dtMin(va[1],vb[1]) - pady;
bmax[0] = max(va[2],vb[2]) - padx; bmax[0] = dtMax(va[2],vb[2]) - padx;
bmax[1] = max(va[1],vb[1]) + pady; bmax[1] = dtMax(va[1],vb[1]) + pady;
} }
else if (side == 2 || side == 6) else if (side == 2 || side == 6)
{ {
bmin[0] = min(va[0],vb[0]) + padx; bmin[0] = dtMin(va[0],vb[0]) + padx;
bmin[1] = min(va[1],vb[1]) - pady; bmin[1] = dtMin(va[1],vb[1]) - pady;
bmax[0] = max(va[0],vb[0]) - padx; bmax[0] = dtMax(va[0],vb[0]) - padx;
bmax[1] = max(va[1],vb[1]) + pady; bmax[1] = dtMax(va[1],vb[1]) + pady;
} }
} }
@ -141,7 +141,7 @@ dtNavMesh::~dtNavMesh()
bool dtNavMesh::init(const dtNavMeshParams* params) bool dtNavMesh::init(const dtNavMeshParams* params)
{ {
memcpy(&m_params, params, sizeof(dtNavMeshParams)); memcpy(&m_params, params, sizeof(dtNavMeshParams));
vcopy(m_orig, params->orig); dtVcopy(m_orig, params->orig);
m_tileWidth = params->tileWidth; m_tileWidth = params->tileWidth;
m_tileHeight = params->tileHeight; m_tileHeight = params->tileHeight;
@ -181,8 +181,8 @@ bool dtNavMesh::init(const dtNavMeshParams* params)
} }
// Init ID generator values. // Init ID generator values.
m_tileBits = max((unsigned int)1,ilog2(nextPow2((unsigned int)params->maxTiles))); m_tileBits = dtMax((unsigned int)1,ilog2(nextPow2((unsigned int)params->maxTiles)));
m_polyBits = max((unsigned int)1,ilog2(nextPow2((unsigned int)params->maxPolys))); m_polyBits = dtMax((unsigned int)1,ilog2(nextPow2((unsigned int)params->maxPolys)));
m_saltBits = 32 - m_tileBits - m_polyBits; m_saltBits = 32 - m_tileBits - m_polyBits;
if (m_saltBits < 10) if (m_saltBits < 10)
return false; return false;
@ -200,7 +200,7 @@ bool dtNavMesh::init(unsigned char* data, int dataSize, int flags, int maxNodes)
return false; return false;
dtNavMeshParams params; dtNavMeshParams params;
vcopy(params.orig, header->bmin); dtVcopy(params.orig, header->bmin);
params.tileWidth = header->bmax[0] - header->bmin[0]; params.tileWidth = header->bmax[0] - header->bmin[0];
params.tileHeight = header->bmax[2] - header->bmin[2]; params.tileHeight = header->bmax[2] - header->bmin[2];
params.maxTiles = 1; params.maxTiles = 1;
@ -250,8 +250,8 @@ int dtNavMesh::findConnectingPolys(const float* va, const float* vb,
// Add return value. // Add return value.
if (n < maxcon) if (n < maxcon)
{ {
conarea[n*2+0] = max(amin[0], bmin[0]); conarea[n*2+0] = dtMax(amin[0], bmin[0]);
conarea[n*2+1] = min(amax[0], bmax[0]); conarea[n*2+1] = dtMin(amax[0], bmax[0]);
con[n] = base | (unsigned int)i; con[n] = base | (unsigned int)i;
n++; n++;
} }
@ -332,17 +332,17 @@ void dtNavMesh::connectExtLinks(dtMeshTile* tile, dtMeshTile* target, int side)
// Compress portal limits to a byte value. // Compress portal limits to a byte value.
if (side == 0 || side == 4) if (side == 0 || side == 4)
{ {
const float lmin = min(va[2], vb[2]); const float lmin = dtMin(va[2], vb[2]);
const float lmax = max(va[2], vb[2]); const float lmax = dtMax(va[2], vb[2]);
link->bmin = (unsigned char)(clamp((neia[k*2+0]-lmin)/(lmax-lmin), 0.0f, 1.0f)*255.0f); link->bmin = (unsigned char)(dtClamp((neia[k*2+0]-lmin)/(lmax-lmin), 0.0f, 1.0f)*255.0f);
link->bmax = (unsigned char)(clamp((neia[k*2+1]-lmin)/(lmax-lmin), 0.0f, 1.0f)*255.0f); link->bmax = (unsigned char)(dtClamp((neia[k*2+1]-lmin)/(lmax-lmin), 0.0f, 1.0f)*255.0f);
} }
else if (side == 2 || side == 6) else if (side == 2 || side == 6)
{ {
const float lmin = min(va[0], vb[0]); const float lmin = dtMin(va[0], vb[0]);
const float lmax = max(va[0], vb[0]); const float lmax = dtMax(va[0], vb[0]);
link->bmin = (unsigned char)(clamp((neia[k*2+0]-lmin)/(lmax-lmin), 0.0f, 1.0f)*255.0f); link->bmin = (unsigned char)(dtClamp((neia[k*2+0]-lmin)/(lmax-lmin), 0.0f, 1.0f)*255.0f);
link->bmax = (unsigned char)(clamp((neia[k*2+1]-lmin)/(lmax-lmin), 0.0f, 1.0f)*255.0f); link->bmax = (unsigned char)(dtClamp((neia[k*2+1]-lmin)/(lmax-lmin), 0.0f, 1.0f)*255.0f);
} }
} }
} }
@ -375,11 +375,11 @@ void dtNavMesh::connectExtOffMeshLinks(dtMeshTile* tile, dtMeshTile* target, int
dtPolyRef ref = findNearestPolyInTile(tile, p, ext, &defaultFilter, nearestPt); dtPolyRef ref = findNearestPolyInTile(tile, p, ext, &defaultFilter, nearestPt);
if (!ref) continue; if (!ref) continue;
// findNearestPoly may return too optimistic results, further check to make sure. // findNearestPoly may return too optimistic results, further check to make sure.
if (sqr(nearestPt[0]-p[0])+sqr(nearestPt[2]-p[2]) > sqr(targetCon->rad)) if (dtSqr(nearestPt[0]-p[0])+dtSqr(nearestPt[2]-p[2]) > dtSqr(targetCon->rad))
continue; continue;
// Make sure the location is on current mesh. // Make sure the location is on current mesh.
float* v = &target->verts[targetPoly->verts[1]*3]; float* v = &target->verts[targetPoly->verts[1]*3];
vcopy(v, nearestPt); dtVcopy(v, nearestPt);
// Link off-mesh connection to target poly. // Link off-mesh connection to target poly.
unsigned int idx = allocLink(target); unsigned int idx = allocLink(target);
@ -481,11 +481,11 @@ void dtNavMesh::connectIntOffMeshLinks(dtMeshTile* tile)
dtPolyRef ref = findNearestPolyInTile(tile, p, ext, &defaultFilter, nearestPt); dtPolyRef ref = findNearestPolyInTile(tile, p, ext, &defaultFilter, nearestPt);
if (!ref) continue; if (!ref) continue;
// findNearestPoly may return too optimistic results, further check to make sure. // findNearestPoly may return too optimistic results, further check to make sure.
if (sqr(nearestPt[0]-p[0])+sqr(nearestPt[2]-p[2]) > sqr(con->rad)) if (dtSqr(nearestPt[0]-p[0])+dtSqr(nearestPt[2]-p[2]) > dtSqr(con->rad))
continue; continue;
// Make sure the location is on current mesh. // Make sure the location is on current mesh.
float* v = &tile->verts[poly->verts[j]*3]; float* v = &tile->verts[poly->verts[j]*3];
vcopy(v, nearestPt); dtVcopy(v, nearestPt);
// Link off-mesh connection to target poly. // Link off-mesh connection to target poly.
unsigned int idx = allocLink(tile); unsigned int idx = allocLink(tile);
@ -927,10 +927,10 @@ bool dtNavMesh::closestPointOnPolyInTile(const dtMeshTile* tile, unsigned int ip
} }
float pt[3]; float pt[3];
closestPtPointTriangle(pt, pos, v[0], v[1], v[2]); closestPtPointTriangle(pt, pos, v[0], v[1], v[2]);
float d = vdistSqr(pos, pt); float d = dtVdistSqr(pos, pt);
if (d < closestDistSqr) if (d < closestDistSqr)
{ {
vcopy(closest, pt); dtVcopy(closest, pt);
closestDistSqr = d; closestDistSqr = d;
} }
} }
@ -956,7 +956,7 @@ bool dtNavMesh::closestPointOnPolyBoundary(dtPolyRef ref, const float* pos, floa
int nv = 0; int nv = 0;
for (int i = 0; i < (int)poly->vertCount; ++i) for (int i = 0; i < (int)poly->vertCount; ++i)
{ {
vcopy(&verts[nv*3], &tile->verts[poly->verts[i]*3]); dtVcopy(&verts[nv*3], &tile->verts[poly->verts[i]*3]);
nv++; nv++;
} }
@ -964,11 +964,11 @@ bool dtNavMesh::closestPointOnPolyBoundary(dtPolyRef ref, const float* pos, floa
if (inside) if (inside)
{ {
// Point is inside the polygon, return the point. // Point is inside the polygon, return the point.
vcopy(closest, pos); dtVcopy(closest, pos);
} }
else else
{ {
// Point is outside the polygon, clamp to nearest edge. // Point is outside the polygon, dtClamp to nearest edge.
float dmin = FLT_MAX; float dmin = FLT_MAX;
int imin = -1; int imin = -1;
for (int i = 0; i < nv; ++i) for (int i = 0; i < nv; ++i)
@ -981,7 +981,7 @@ bool dtNavMesh::closestPointOnPolyBoundary(dtPolyRef ref, const float* pos, floa
} }
const float* va = &verts[imin*3]; const float* va = &verts[imin*3];
const float* vb = &verts[((imin+1)%nv)*3]; const float* vb = &verts[((imin+1)%nv)*3];
vlerp(closest, va, vb, edget[imin]); dtVlerp(closest, va, vb, edget[imin]);
} }
return true; return true;
@ -1021,8 +1021,8 @@ bool dtNavMesh::getOffMeshConnectionPolyEndPoints(dtPolyRef prevRef, dtPolyRef p
} }
} }
vcopy(startPos, &tile->verts[poly->verts[idx0]*3]); dtVcopy(startPos, &tile->verts[poly->verts[idx0]*3]);
vcopy(endPos, &tile->verts[poly->verts[idx1]*3]); dtVcopy(endPos, &tile->verts[poly->verts[idx1]*3]);
return true; return true;
} }
@ -1043,8 +1043,8 @@ bool dtNavMesh::getPolyHeight(dtPolyRef ref, const float* pos, float* height) co
{ {
const float* v0 = &tile->verts[poly->verts[0]*3]; const float* v0 = &tile->verts[poly->verts[0]*3];
const float* v1 = &tile->verts[poly->verts[1]*3]; const float* v1 = &tile->verts[poly->verts[1]*3];
const float d0 = vdist(pos, v0); const float d0 = dtVdist(pos, v0);
const float d1 = vdist(pos, v1); const float d1 = dtVdist(pos, v1);
const float u = d0 / (d0+d1); const float u = d0 / (d0+d1);
if (height) if (height)
*height = v0[1] + (v1[1] - v0[1]) * u; *height = v0[1] + (v1[1] - v0[1]) * u;
@ -1105,11 +1105,11 @@ dtPolyRef dtNavMesh::findNearestPoly(const float* center, const float* extents,
float closestPtPoly[3]; float closestPtPoly[3];
if (!closestPointOnPoly(ref, center, closestPtPoly)) if (!closestPointOnPoly(ref, center, closestPtPoly))
continue; continue;
float d = vdistSqr(center, closestPtPoly); float d = dtVdistSqr(center, closestPtPoly);
if (d < nearestDistanceSqr) if (d < nearestDistanceSqr)
{ {
if (nearestPt) if (nearestPt)
vcopy(nearestPt, closestPtPoly); dtVcopy(nearestPt, closestPtPoly);
nearestDistanceSqr = d; nearestDistanceSqr = d;
nearest = ref; nearest = ref;
} }
@ -1122,8 +1122,8 @@ dtPolyRef dtNavMesh::findNearestPolyInTile(dtMeshTile* tile, const float* center
dtQueryFilter* filter, float* nearestPt) dtQueryFilter* filter, float* nearestPt)
{ {
float bmin[3], bmax[3]; float bmin[3], bmax[3];
vsub(bmin, center, extents); dtVsub(bmin, center, extents);
vadd(bmax, center, extents); dtVadd(bmax, center, extents);
// Get nearby polygons from proximity grid. // Get nearby polygons from proximity grid.
dtPolyRef polys[128]; dtPolyRef polys[128];
@ -1138,11 +1138,11 @@ dtPolyRef dtNavMesh::findNearestPolyInTile(dtMeshTile* tile, const float* center
float closestPtPoly[3]; float closestPtPoly[3];
if (!closestPointOnPolyInTile(tile, decodePolyIdPoly(ref), center, closestPtPoly)) if (!closestPointOnPolyInTile(tile, decodePolyIdPoly(ref), center, closestPtPoly))
continue; continue;
float d = vdistSqr(center, closestPtPoly); float d = dtVdistSqr(center, closestPtPoly);
if (d < nearestDistanceSqr) if (d < nearestDistanceSqr)
{ {
if (nearestPt) if (nearestPt)
vcopy(nearestPt, closestPtPoly); dtVcopy(nearestPt, closestPtPoly);
nearestDistanceSqr = d; nearestDistanceSqr = d;
nearest = ref; nearest = ref;
} }
@ -1165,13 +1165,13 @@ int dtNavMesh::queryPolygonsInTile(dtMeshTile* tile, const float* qmin, const fl
// Calculate quantized box // Calculate quantized box
unsigned short bmin[3], bmax[3]; unsigned short bmin[3], bmax[3];
// Clamp query box to world box. // dtClamp query box to world box.
float minx = clamp(qmin[0], tbmin[0], tbmax[0]) - tbmin[0]; float minx = dtClamp(qmin[0], tbmin[0], tbmax[0]) - tbmin[0];
float miny = clamp(qmin[1], tbmin[1], tbmax[1]) - tbmin[1]; float miny = dtClamp(qmin[1], tbmin[1], tbmax[1]) - tbmin[1];
float minz = clamp(qmin[2], tbmin[2], tbmax[2]) - tbmin[2]; float minz = dtClamp(qmin[2], tbmin[2], tbmax[2]) - tbmin[2];
float maxx = clamp(qmax[0], tbmin[0], tbmax[0]) - tbmin[0]; float maxx = dtClamp(qmax[0], tbmin[0], tbmax[0]) - tbmin[0];
float maxy = clamp(qmax[1], tbmin[1], tbmax[1]) - tbmin[1]; float maxy = dtClamp(qmax[1], tbmin[1], tbmax[1]) - tbmin[1];
float maxz = clamp(qmax[2], tbmin[2], tbmax[2]) - tbmin[2]; float maxz = dtClamp(qmax[2], tbmin[2], tbmax[2]) - tbmin[2];
// Quantize // Quantize
bmin[0] = (unsigned short)(qfac * minx) & 0xfffe; bmin[0] = (unsigned short)(qfac * minx) & 0xfffe;
bmin[1] = (unsigned short)(qfac * miny) & 0xfffe; bmin[1] = (unsigned short)(qfac * miny) & 0xfffe;
@ -1218,13 +1218,13 @@ int dtNavMesh::queryPolygonsInTile(dtMeshTile* tile, const float* qmin, const fl
// Calc polygon bounds. // Calc polygon bounds.
dtPoly* p = &tile->polys[i]; dtPoly* p = &tile->polys[i];
const float* v = &tile->verts[p->verts[0]*3]; const float* v = &tile->verts[p->verts[0]*3];
vcopy(bmin, v); dtVcopy(bmin, v);
vcopy(bmax, v); dtVcopy(bmax, v);
for (int j = 1; j < p->vertCount; ++j) for (int j = 1; j < p->vertCount; ++j)
{ {
v = &tile->verts[p->verts[j]*3]; v = &tile->verts[p->verts[j]*3];
vmin(bmin, v); dtVmin(bmin, v);
vmax(bmax, v); dtVmax(bmax, v);
} }
if (overlapBoxes(qmin,qmax, bmin,bmax)) if (overlapBoxes(qmin,qmax, bmin,bmax))
{ {
@ -1243,8 +1243,8 @@ int dtNavMesh::queryPolygons(const float* center, const float* extents, dtQueryF
dtPolyRef* polys, const int maxPolys) dtPolyRef* polys, const int maxPolys)
{ {
float bmin[3], bmax[3]; float bmin[3], bmax[3];
vsub(bmin, center, extents); dtVsub(bmin, center, extents);
vadd(bmax, center, extents); dtVadd(bmax, center, extents);
// Find tiles the query touches. // Find tiles the query touches.
const int minx = (int)floorf((bmin[0]-m_orig[0]) / m_tileWidth); const int minx = (int)floorf((bmin[0]-m_orig[0]) / m_tileWidth);
@ -1298,7 +1298,7 @@ int dtNavMesh::findPath(dtPolyRef startRef, dtPolyRef endRef,
dtNode* startNode = m_nodePool->getNode(startRef); dtNode* startNode = m_nodePool->getNode(startRef);
startNode->pidx = 0; startNode->pidx = 0;
startNode->cost = 0; startNode->cost = 0;
startNode->total = vdist(startPos, endPos) * H_SCALE; startNode->total = dtVdist(startPos, endPos) * H_SCALE;
startNode->id = startRef; startNode->id = startRef;
startNode->flags = DT_NODE_OPEN; startNode->flags = DT_NODE_OPEN;
m_openList->push(startNode); m_openList->push(startNode);
@ -1350,7 +1350,7 @@ int dtNavMesh::findPath(dtPolyRef startRef, dtPolyRef endRef,
} }
else else
{ {
vcopy(previousEdgeMidPoint, startPos); dtVcopy(previousEdgeMidPoint, startPos);
} }
for (unsigned int i = bestPoly->firstLink; i != DT_NULL_LINK; i = bestTile->links[i].next) for (unsigned int i = bestPoly->firstLink; i != DT_NULL_LINK; i = bestTile->links[i].next)
@ -1387,8 +1387,8 @@ int dtNavMesh::findPath(dtPolyRef startRef, dtPolyRef endRef,
{ {
// Cost // Cost
newNode.cost = bestNode->cost + newNode.cost = bestNode->cost +
vdist(previousEdgeMidPoint,edgeMidPoint) * m_areaCost[bestPoly->area] + dtVdist(previousEdgeMidPoint,edgeMidPoint) * m_areaCost[bestPoly->area] +
vdist(edgeMidPoint, endPos) * m_areaCost[neighbourPoly->area]; dtVdist(edgeMidPoint, endPos) * m_areaCost[neighbourPoly->area];
// Heuristic // Heuristic
h = 0; h = 0;
} }
@ -1396,9 +1396,9 @@ int dtNavMesh::findPath(dtPolyRef startRef, dtPolyRef endRef,
{ {
// Cost // Cost
newNode.cost = bestNode->cost + newNode.cost = bestNode->cost +
vdist(previousEdgeMidPoint,edgeMidPoint) * m_areaCost[bestPoly->area]; dtVdist(previousEdgeMidPoint,edgeMidPoint) * m_areaCost[bestPoly->area];
// Heuristic // Heuristic
h = vdist(edgeMidPoint,endPos)*H_SCALE; h = dtVdist(edgeMidPoint,endPos)*H_SCALE;
} }
newNode.total = newNode.cost + h; newNode.total = newNode.cost + h;
@ -1484,7 +1484,7 @@ int dtNavMesh::findStraightPath(const float* startPos, const float* endPos,
return 0; return 0;
// Add start point. // Add start point.
vcopy(&straightPath[straightPathSize*3], closestStartPos); dtVcopy(&straightPath[straightPathSize*3], closestStartPos);
if (straightPathFlags) if (straightPathFlags)
straightPathFlags[straightPathSize] = DT_STRAIGHTPATH_START; straightPathFlags[straightPathSize] = DT_STRAIGHTPATH_START;
if (straightPathRefs) if (straightPathRefs)
@ -1500,9 +1500,9 @@ int dtNavMesh::findStraightPath(const float* startPos, const float* endPos,
if (pathSize > 1) if (pathSize > 1)
{ {
float portalApex[3], portalLeft[3], portalRight[3]; float portalApex[3], portalLeft[3], portalRight[3];
vcopy(portalApex, closestStartPos); dtVcopy(portalApex, closestStartPos);
vcopy(portalLeft, portalApex); dtVcopy(portalLeft, portalApex);
vcopy(portalRight, portalApex); dtVcopy(portalRight, portalApex);
int apexIndex = 0; int apexIndex = 0;
int leftIndex = 0; int leftIndex = 0;
int rightIndex = 0; int rightIndex = 0;
@ -1526,7 +1526,7 @@ int dtNavMesh::findStraightPath(const float* startPos, const float* endPos,
if (!closestPointOnPolyBoundary(path[i], endPos, closestEndPos)) if (!closestPointOnPolyBoundary(path[i], endPos, closestEndPos))
return 0; return 0;
vcopy(&straightPath[straightPathSize*3], closestEndPos); dtVcopy(&straightPath[straightPathSize*3], closestEndPos);
if (straightPathFlags) if (straightPathFlags)
straightPathFlags[straightPathSize] = 0; straightPathFlags[straightPathSize] = 0;
if (straightPathRefs) if (straightPathRefs)
@ -1547,8 +1547,8 @@ int dtNavMesh::findStraightPath(const float* startPos, const float* endPos,
else else
{ {
// End of the path. // End of the path.
vcopy(left, closestEndPos); dtVcopy(left, closestEndPos);
vcopy(right, closestEndPos); dtVcopy(right, closestEndPos);
fromType = toType = DT_POLYTYPE_GROUND; fromType = toType = DT_POLYTYPE_GROUND;
} }
@ -1556,16 +1556,16 @@ int dtNavMesh::findStraightPath(const float* startPos, const float* endPos,
// Right vertex. // Right vertex.
if (triArea2D(portalApex, portalRight, right) <= 0.0f) if (triArea2D(portalApex, portalRight, right) <= 0.0f)
{ {
if (vequal(portalApex, portalRight) || triArea2D(portalApex, portalLeft, right) > 0.0f) if (dtVequal(portalApex, portalRight) || triArea2D(portalApex, portalLeft, right) > 0.0f)
{ {
vcopy(portalRight, right); dtVcopy(portalRight, right);
rightPolyRef = (i+1 < pathSize) ? path[i+1] : 0; rightPolyRef = (i+1 < pathSize) ? path[i+1] : 0;
rightPolyType = toType; rightPolyType = toType;
rightIndex = i; rightIndex = i;
} }
else else
{ {
vcopy(portalApex, portalLeft); dtVcopy(portalApex, portalLeft);
apexIndex = leftIndex; apexIndex = leftIndex;
unsigned char flags = 0; unsigned char flags = 0;
@ -1575,10 +1575,10 @@ int dtNavMesh::findStraightPath(const float* startPos, const float* endPos,
flags = DT_STRAIGHTPATH_OFFMESH_CONNECTION; flags = DT_STRAIGHTPATH_OFFMESH_CONNECTION;
dtPolyRef ref = leftPolyRef; dtPolyRef ref = leftPolyRef;
if (!vequal(&straightPath[(straightPathSize-1)*3], portalApex)) if (!dtVequal(&straightPath[(straightPathSize-1)*3], portalApex))
{ {
// Append new vertex. // Append new vertex.
vcopy(&straightPath[straightPathSize*3], portalApex); dtVcopy(&straightPath[straightPathSize*3], portalApex);
if (straightPathFlags) if (straightPathFlags)
straightPathFlags[straightPathSize] = flags; straightPathFlags[straightPathSize] = flags;
if (straightPathRefs) if (straightPathRefs)
@ -1597,8 +1597,8 @@ int dtNavMesh::findStraightPath(const float* startPos, const float* endPos,
straightPathRefs[straightPathSize-1] = ref; straightPathRefs[straightPathSize-1] = ref;
} }
vcopy(portalLeft, portalApex); dtVcopy(portalLeft, portalApex);
vcopy(portalRight, portalApex); dtVcopy(portalRight, portalApex);
leftIndex = apexIndex; leftIndex = apexIndex;
rightIndex = apexIndex; rightIndex = apexIndex;
@ -1612,16 +1612,16 @@ int dtNavMesh::findStraightPath(const float* startPos, const float* endPos,
// Left vertex. // Left vertex.
if (triArea2D(portalApex, portalLeft, left) >= 0.0f) if (triArea2D(portalApex, portalLeft, left) >= 0.0f)
{ {
if (vequal(portalApex, portalLeft) || triArea2D(portalApex, portalRight, left) < 0.0f) if (dtVequal(portalApex, portalLeft) || triArea2D(portalApex, portalRight, left) < 0.0f)
{ {
vcopy(portalLeft, left); dtVcopy(portalLeft, left);
leftPolyRef = (i+1 < pathSize) ? path[i+1] : 0; leftPolyRef = (i+1 < pathSize) ? path[i+1] : 0;
leftPolyType = toType; leftPolyType = toType;
leftIndex = i; leftIndex = i;
} }
else else
{ {
vcopy(portalApex, portalRight); dtVcopy(portalApex, portalRight);
apexIndex = rightIndex; apexIndex = rightIndex;
unsigned char flags = 0; unsigned char flags = 0;
@ -1631,10 +1631,10 @@ int dtNavMesh::findStraightPath(const float* startPos, const float* endPos,
flags = DT_STRAIGHTPATH_OFFMESH_CONNECTION; flags = DT_STRAIGHTPATH_OFFMESH_CONNECTION;
dtPolyRef ref = rightPolyRef; dtPolyRef ref = rightPolyRef;
if (!vequal(&straightPath[(straightPathSize-1)*3], portalApex)) if (!dtVequal(&straightPath[(straightPathSize-1)*3], portalApex))
{ {
// Append new vertex. // Append new vertex.
vcopy(&straightPath[straightPathSize*3], portalApex); dtVcopy(&straightPath[straightPathSize*3], portalApex);
if (straightPathFlags) if (straightPathFlags)
straightPathFlags[straightPathSize] = flags; straightPathFlags[straightPathSize] = flags;
if (straightPathRefs) if (straightPathRefs)
@ -1653,8 +1653,8 @@ int dtNavMesh::findStraightPath(const float* startPos, const float* endPos,
straightPathRefs[straightPathSize-1] = ref; straightPathRefs[straightPathSize-1] = ref;
} }
vcopy(portalLeft, portalApex); dtVcopy(portalLeft, portalApex);
vcopy(portalRight, portalApex); dtVcopy(portalRight, portalApex);
leftIndex = apexIndex; leftIndex = apexIndex;
rightIndex = apexIndex; rightIndex = apexIndex;
@ -1668,13 +1668,13 @@ int dtNavMesh::findStraightPath(const float* startPos, const float* endPos,
} }
// If the point already exists, remove it and add reappend the actual end location. // If the point already exists, remove it and add reappend the actual end location.
if (straightPathSize && vequal(&straightPath[(straightPathSize-1)*3], closestEndPos)) if (straightPathSize && dtVequal(&straightPath[(straightPathSize-1)*3], closestEndPos))
straightPathSize--; straightPathSize--;
// Add end point. // Add end point.
if (straightPathSize < maxStraightPathSize) if (straightPathSize < maxStraightPathSize)
{ {
vcopy(&straightPath[straightPathSize*3], closestEndPos); dtVcopy(&straightPath[straightPathSize*3], closestEndPos);
if (straightPathFlags) if (straightPathFlags)
straightPathFlags[straightPathSize] = DT_STRAIGHTPATH_END; straightPathFlags[straightPathSize] = DT_STRAIGHTPATH_END;
if (straightPathRefs) if (straightPathRefs)
@ -1700,7 +1700,7 @@ int dtNavMesh::moveAlongPathCorridor(const float* startPos, const float* endPos,
static const float SLOP = 0.01f; static const float SLOP = 0.01f;
vcopy(resultPos, startPos); dtVcopy(resultPos, startPos);
while (n < pathSize) while (n < pathSize)
{ {
@ -1722,7 +1722,7 @@ int dtNavMesh::moveAlongPathCorridor(const float* startPos, const float* endPos,
unsigned char fromType, toType; unsigned char fromType, toType;
if (!getPortalPoints(path[n], path[n+1], left, right, fromType, toType)) if (!getPortalPoints(path[n], path[n+1], left, right, fromType, toType))
return n; return n;
vcopy(resultPos, endPos); dtVcopy(resultPos, endPos);
} }
return n+1; return n+1;
} }
@ -1731,7 +1731,7 @@ int dtNavMesh::moveAlongPathCorridor(const float* startPos, const float* endPos,
int nv = 0; int nv = 0;
for (int i = 0; i < (int)poly->vertCount; ++i) for (int i = 0; i < (int)poly->vertCount; ++i)
{ {
vcopy(&verts[nv*3], &tile->verts[poly->verts[i]*3]); dtVcopy(&verts[nv*3], &tile->verts[poly->verts[i]*3]);
nv++; nv++;
} }
@ -1739,7 +1739,7 @@ int dtNavMesh::moveAlongPathCorridor(const float* startPos, const float* endPos,
if (inside) if (inside)
{ {
// The end point is inside the current polygon. // The end point is inside the current polygon.
vcopy(resultPos, endPos); dtVcopy(resultPos, endPos);
return n; return n;
} }
@ -1757,7 +1757,7 @@ int dtNavMesh::moveAlongPathCorridor(const float* startPos, const float* endPos,
} }
const float* va = &verts[imin*3]; const float* va = &verts[imin*3];
const float* vb = &verts[((imin+1)%nv)*3]; const float* vb = &verts[((imin+1)%nv)*3];
vlerp(resultPos, va, vb, edget[imin]); dtVlerp(resultPos, va, vb, edget[imin]);
// Check to see if the point is on the portal edge to the next polygon. // Check to see if the point is on the portal edge to the next polygon.
if (n+1 >= pathSize) if (n+1 >= pathSize)
@ -1767,7 +1767,7 @@ int dtNavMesh::moveAlongPathCorridor(const float* startPos, const float* endPos,
unsigned char fromType, toType; unsigned char fromType, toType;
if (!getPortalPoints(path[n], path[n+1], left, right, fromType, toType)) if (!getPortalPoints(path[n], path[n+1], left, right, fromType, toType))
return n; return n;
// If the clamped point is close to the next portal edge, advance to next poly. // If the dtClamped point is close to the next portal edge, advance to next poly.
float t; float t;
float d = distancePtSegSqr2D(resultPos, left, right, t); float d = distancePtSegSqr2D(resultPos, left, right, t);
if (d > SLOP*SLOP) if (d > SLOP*SLOP)
@ -1831,8 +1831,8 @@ bool dtNavMesh::getPortalPoints(dtPolyRef from, const dtPoly* fromPoly, const dt
if (fromTile->links[i].ref == to) if (fromTile->links[i].ref == to)
{ {
const int v = fromTile->links[i].edge; const int v = fromTile->links[i].edge;
vcopy(left, &fromTile->verts[fromPoly->verts[v]*3]); dtVcopy(left, &fromTile->verts[fromPoly->verts[v]*3]);
vcopy(right, &fromTile->verts[fromPoly->verts[v]*3]); dtVcopy(right, &fromTile->verts[fromPoly->verts[v]*3]);
return true; return true;
} }
} }
@ -1846,8 +1846,8 @@ bool dtNavMesh::getPortalPoints(dtPolyRef from, const dtPoly* fromPoly, const dt
if (toTile->links[i].ref == from) if (toTile->links[i].ref == from)
{ {
const int v = toTile->links[i].edge; const int v = toTile->links[i].edge;
vcopy(left, &toTile->verts[toPoly->verts[v]*3]); dtVcopy(left, &toTile->verts[toPoly->verts[v]*3]);
vcopy(right, &toTile->verts[toPoly->verts[v]*3]); dtVcopy(right, &toTile->verts[toPoly->verts[v]*3]);
return true; return true;
} }
} }
@ -1857,36 +1857,36 @@ bool dtNavMesh::getPortalPoints(dtPolyRef from, const dtPoly* fromPoly, const dt
// Find portal vertices. // Find portal vertices.
const int v0 = fromPoly->verts[link->edge]; const int v0 = fromPoly->verts[link->edge];
const int v1 = fromPoly->verts[(link->edge+1) % (int)fromPoly->vertCount]; const int v1 = fromPoly->verts[(link->edge+1) % (int)fromPoly->vertCount];
vcopy(left, &fromTile->verts[v0*3]); dtVcopy(left, &fromTile->verts[v0*3]);
vcopy(right, &fromTile->verts[v1*3]); dtVcopy(right, &fromTile->verts[v1*3]);
// If the link is at tile boundary, clamp the vertices to // If the link is at tile boundary, dtClamp the vertices to
// the link width. // the link width.
if (link->side == 0 || link->side == 4) if (link->side == 0 || link->side == 4)
{ {
// Unpack portal limits. // Unpack portal limits.
const float smin = min(left[2],right[2]); const float smin = dtMin(left[2],right[2]);
const float smax = max(left[2],right[2]); const float smax = dtMax(left[2],right[2]);
const float s = (smax-smin) / 255.0f; const float s = (smax-smin) / 255.0f;
const float lmin = smin + link->bmin*s; const float lmin = smin + link->bmin*s;
const float lmax = smin + link->bmax*s; const float lmax = smin + link->bmax*s;
left[2] = max(left[2],lmin); left[2] = dtMax(left[2],lmin);
left[2] = min(left[2],lmax); left[2] = dtMin(left[2],lmax);
right[2] = max(right[2],lmin); right[2] = dtMax(right[2],lmin);
right[2] = min(right[2],lmax); right[2] = dtMin(right[2],lmax);
} }
else if (link->side == 2 || link->side == 6) else if (link->side == 2 || link->side == 6)
{ {
// Unpack portal limits. // Unpack portal limits.
const float smin = min(left[0],right[0]); const float smin = dtMin(left[0],right[0]);
const float smax = max(left[0],right[0]); const float smax = dtMax(left[0],right[0]);
const float s = (smax-smin) / 255.0f; const float s = (smax-smin) / 255.0f;
const float lmin = smin + link->bmin*s; const float lmin = smin + link->bmin*s;
const float lmax = smin + link->bmax*s; const float lmax = smin + link->bmax*s;
left[0] = max(left[0],lmin); left[0] = dtMax(left[0],lmin);
left[0] = min(left[0],lmax); left[0] = dtMin(left[0],lmax);
right[0] = max(right[0],lmin); right[0] = dtMax(right[0],lmin);
right[0] = min(right[0],lmax); right[0] = dtMin(right[0],lmax);
} }
return true; return true;
@ -1996,7 +1996,7 @@ int dtNavMesh::raycast(dtPolyRef centerRef, const float* startPos, const float*
int nv = 0; int nv = 0;
for (int i = 0; i < (int)poly->vertCount; ++i) for (int i = 0; i < (int)poly->vertCount; ++i)
{ {
vcopy(&verts[nv*3], &tile->verts[poly->verts[i]*3]); dtVcopy(&verts[nv*3], &tile->verts[poly->verts[i]*3]);
nv++; nv++;
} }
@ -2047,8 +2047,8 @@ int dtNavMesh::raycast(dtPolyRef centerRef, const float* startPos, const float*
if (link->side == 0 || link->side == 4) if (link->side == 0 || link->side == 4)
{ {
// Calculate link size. // Calculate link size.
const float smin = min(left[2],right[2]); const float smin = dtMin(left[2],right[2]);
const float smax = max(left[2],right[2]); const float smax = dtMax(left[2],right[2]);
const float s = (smax-smin) / 255.0f; const float s = (smax-smin) / 255.0f;
const float lmin = smin + link->bmin*s; const float lmin = smin + link->bmin*s;
const float lmax = smin + link->bmax*s; const float lmax = smin + link->bmax*s;
@ -2063,8 +2063,8 @@ int dtNavMesh::raycast(dtPolyRef centerRef, const float* startPos, const float*
else if (link->side == 2 || link->side == 6) else if (link->side == 2 || link->side == 6)
{ {
// Calculate link size. // Calculate link size.
const float smin = min(left[0],right[0]); const float smin = dtMin(left[0],right[0]);
const float smax = max(left[0],right[0]); const float smax = dtMax(left[0],right[0]);
const float s = (smax-smin) / 255.0f; const float s = (smax-smin) / 255.0f;
const float lmin = smin + link->bmin*s; const float lmin = smin + link->bmin*s;
const float lmax = smin + link->bmax*s; const float lmax = smin + link->bmax*s;
@ -2093,7 +2093,7 @@ int dtNavMesh::raycast(dtPolyRef centerRef, const float* startPos, const float*
hitNormal[0] = dz; hitNormal[0] = dz;
hitNormal[1] = 0; hitNormal[1] = 0;
hitNormal[2] = -dx; hitNormal[2] = -dx;
vnormalize(hitNormal); dtVnormalize(hitNormal);
return n; return n;
} }
@ -2136,7 +2136,7 @@ int dtNavMesh::findPolysAround(dtPolyRef centerRef, const float* centerPos, floa
++n; ++n;
} }
const float radiusSqr = sqr(radius); const float radiusSqr = dtSqr(radius);
unsigned int it, ip; unsigned int it, ip;
@ -2172,7 +2172,7 @@ int dtNavMesh::findPolysAround(dtPolyRef centerRef, const float* centerPos, floa
} }
else else
{ {
vcopy(previousEdgeMidPoint, centerPos); dtVcopy(previousEdgeMidPoint, centerPos);
} }
for (unsigned int i = bestPoly->firstLink; i != DT_NULL_LINK; i = bestTile->links[i].next) for (unsigned int i = bestPoly->firstLink; i != DT_NULL_LINK; i = bestTile->links[i].next)
@ -2211,7 +2211,7 @@ int dtNavMesh::findPolysAround(dtPolyRef centerRef, const float* centerPos, floa
getEdgeMidPoint(bestRef, bestPoly, bestTile, getEdgeMidPoint(bestRef, bestPoly, bestTile,
neighbourRef, neighbourPoly, neighbourTile, edgeMidPoint); neighbourRef, neighbourPoly, neighbourTile, edgeMidPoint);
newNode.total = bestNode->total + vdist(previousEdgeMidPoint, edgeMidPoint); newNode.total = bestNode->total + dtVdist(previousEdgeMidPoint, edgeMidPoint);
dtNode* actualNode = m_nodePool->getNode(newNode.id); dtNode* actualNode = m_nodePool->getNode(newNode.id);
if (!actualNode) if (!actualNode)
@ -2268,7 +2268,7 @@ float dtNavMesh::findDistanceToWall(dtPolyRef centerRef, const float* centerPos,
startNode->flags = DT_NODE_OPEN; startNode->flags = DT_NODE_OPEN;
m_openList->push(startNode); m_openList->push(startNode);
float radiusSqr = sqr(maxRadius); float radiusSqr = dtSqr(maxRadius);
unsigned int it, ip; unsigned int it, ip;
@ -2304,7 +2304,7 @@ float dtNavMesh::findDistanceToWall(dtPolyRef centerRef, const float* centerPos,
} }
else else
{ {
vcopy(previousEdgeMidPoint, centerPos); dtVcopy(previousEdgeMidPoint, centerPos);
} }
// Hit test walls. // Hit test walls.
@ -2387,7 +2387,7 @@ float dtNavMesh::findDistanceToWall(dtPolyRef centerRef, const float* centerPos,
getEdgeMidPoint(bestRef, bestPoly, bestTile, getEdgeMidPoint(bestRef, bestPoly, bestTile,
neighbourRef, neighbourPoly, neighbourTile, edgeMidPoint); neighbourRef, neighbourPoly, neighbourTile, edgeMidPoint);
newNode.total = bestNode->total + vdist(previousEdgeMidPoint, edgeMidPoint); newNode.total = bestNode->total + dtVdist(previousEdgeMidPoint, edgeMidPoint);
dtNode* actualNode = m_nodePool->getNode(newNode.id); dtNode* actualNode = m_nodePool->getNode(newNode.id);
if (!actualNode) if (!actualNode)
@ -2414,8 +2414,8 @@ float dtNavMesh::findDistanceToWall(dtPolyRef centerRef, const float* centerPos,
} }
// Calc hit normal. // Calc hit normal.
vsub(hitNormal, centerPos, hitPos); dtVsub(hitNormal, centerPos, hitPos);
vnormalize(hitNormal); dtVnormalize(hitNormal);
return sqrtf(radiusSqr); return sqrtf(radiusSqr);
} }

View File

@ -375,8 +375,8 @@ bool dtCreateNavMeshData(dtNavMeshCreateParams* params, unsigned char** outData,
header->polyCount = totPolyCount; header->polyCount = totPolyCount;
header->vertCount = totVertCount; header->vertCount = totVertCount;
header->maxLinkCount = maxLinkCount; header->maxLinkCount = maxLinkCount;
vcopy(header->bmin, params->bmin); dtVcopy(header->bmin, params->bmin);
vcopy(header->bmax, params->bmax); dtVcopy(header->bmax, params->bmax);
header->detailMeshCount = params->polyCount; header->detailMeshCount = params->polyCount;
header->detailVertCount = uniqueDetailVertCount; header->detailVertCount = uniqueDetailVertCount;
header->detailTriCount = params->detailTriCount; header->detailTriCount = params->detailTriCount;
@ -410,8 +410,8 @@ bool dtCreateNavMeshData(dtNavMeshCreateParams* params, unsigned char** outData,
{ {
const float* linkv = &params->offMeshConVerts[i*2*3]; const float* linkv = &params->offMeshConVerts[i*2*3];
float* v = &navVerts[(offMeshVertsBase + n*2)*3]; float* v = &navVerts[(offMeshVertsBase + n*2)*3];
vcopy(&v[0], &linkv[0]); dtVcopy(&v[0], &linkv[0]);
vcopy(&v[3], &linkv[3]); dtVcopy(&v[3], &linkv[3]);
n++; n++;
} }
} }
@ -519,8 +519,8 @@ bool dtCreateNavMeshData(dtNavMeshCreateParams* params, unsigned char** outData,
con->poly = (unsigned short)(offMeshPolyBase + n); con->poly = (unsigned short)(offMeshPolyBase + n);
// Copy connection end-points. // Copy connection end-points.
const float* endPts = &params->offMeshConVerts[i*2*3]; const float* endPts = &params->offMeshConVerts[i*2*3];
vcopy(&con->pos[0], &endPts[0]); dtVcopy(&con->pos[0], &endPts[0]);
vcopy(&con->pos[3], &endPts[3]); dtVcopy(&con->pos[3], &endPts[3]);
con->rad = params->offMeshConRad[i]; con->rad = params->offMeshConRad[i];
con->flags = params->offMeshConDir[i] ? DT_OFFMESH_CON_BIDIR : 0; con->flags = params->offMeshConDir[i] ? DT_OFFMESH_CON_BIDIR : 0;
con->side = offMeshConClass[i*2+1]; con->side = offMeshConClass[i*2+1];

View File

@ -300,61 +300,61 @@ template<class T> inline T rcSqr(T a) { return a*a; }
template<class T> inline T rcClamp(T v, T mn, T mx) { return v < mn ? mn : (v > mx ? mx : v); } template<class T> inline T rcClamp(T v, T mn, T mx) { return v < mn ? mn : (v > mx ? mx : v); }
// Common vector helper functions. // Common vector helper functions.
inline void vcross(float* dest, const float* v1, const float* v2) inline void rcVcross(float* dest, const float* v1, const float* v2)
{ {
dest[0] = v1[1]*v2[2] - v1[2]*v2[1]; dest[0] = v1[1]*v2[2] - v1[2]*v2[1];
dest[1] = v1[2]*v2[0] - v1[0]*v2[2]; dest[1] = v1[2]*v2[0] - v1[0]*v2[2];
dest[2] = v1[0]*v2[1] - v1[1]*v2[0]; dest[2] = v1[0]*v2[1] - v1[1]*v2[0];
} }
inline float vdot(const float* v1, const float* v2) inline float rcVdot(const float* v1, const float* v2)
{ {
return v1[0]*v2[0] + v1[1]*v2[1] + v1[2]*v2[2]; return v1[0]*v2[0] + v1[1]*v2[1] + v1[2]*v2[2];
} }
inline void vmad(float* dest, const float* v1, const float* v2, const float s) inline void rcVmad(float* dest, const float* v1, const float* v2, const float s)
{ {
dest[0] = v1[0]+v2[0]*s; dest[0] = v1[0]+v2[0]*s;
dest[1] = v1[1]+v2[1]*s; dest[1] = v1[1]+v2[1]*s;
dest[2] = v1[2]+v2[2]*s; dest[2] = v1[2]+v2[2]*s;
} }
inline void vadd(float* dest, const float* v1, const float* v2) inline void rcVadd(float* dest, const float* v1, const float* v2)
{ {
dest[0] = v1[0]+v2[0]; dest[0] = v1[0]+v2[0];
dest[1] = v1[1]+v2[1]; dest[1] = v1[1]+v2[1];
dest[2] = v1[2]+v2[2]; dest[2] = v1[2]+v2[2];
} }
inline void vsub(float* dest, const float* v1, const float* v2) inline void rcVsub(float* dest, const float* v1, const float* v2)
{ {
dest[0] = v1[0]-v2[0]; dest[0] = v1[0]-v2[0];
dest[1] = v1[1]-v2[1]; dest[1] = v1[1]-v2[1];
dest[2] = v1[2]-v2[2]; dest[2] = v1[2]-v2[2];
} }
inline void vmin(float* mn, const float* v) inline void rcVmin(float* mn, const float* v)
{ {
mn[0] = rcMin(mn[0], v[0]); mn[0] = rcMin(mn[0], v[0]);
mn[1] = rcMin(mn[1], v[1]); mn[1] = rcMin(mn[1], v[1]);
mn[2] = rcMin(mn[2], v[2]); mn[2] = rcMin(mn[2], v[2]);
} }
inline void vmax(float* mx, const float* v) inline void rcVmax(float* mx, const float* v)
{ {
mx[0] = rcMax(mx[0], v[0]); mx[0] = rcMax(mx[0], v[0]);
mx[1] = rcMax(mx[1], v[1]); mx[1] = rcMax(mx[1], v[1]);
mx[2] = rcMax(mx[2], v[2]); mx[2] = rcMax(mx[2], v[2]);
} }
inline void vcopy(float* dest, const float* v) inline void rcVcopy(float* dest, const float* v)
{ {
dest[0] = v[0]; dest[0] = v[0];
dest[1] = v[1]; dest[1] = v[1];
dest[2] = v[2]; dest[2] = v[2];
} }
inline float vdist(const float* v1, const float* v2) inline float rcVdist(const float* v1, const float* v2)
{ {
float dx = v2[0] - v1[0]; float dx = v2[0] - v1[0];
float dy = v2[1] - v1[1]; float dy = v2[1] - v1[1];
@ -362,7 +362,7 @@ inline float vdist(const float* v1, const float* v2)
return sqrtf(dx*dx + dy*dy + dz*dz); return sqrtf(dx*dx + dy*dy + dz*dz);
} }
inline float vdistSqr(const float* v1, const float* v2) inline float rcVdistSqr(const float* v1, const float* v2)
{ {
float dx = v2[0] - v1[0]; float dx = v2[0] - v1[0];
float dy = v2[1] - v1[1]; float dy = v2[1] - v1[1];
@ -370,7 +370,7 @@ inline float vdistSqr(const float* v1, const float* v2)
return dx*dx + dy*dy + dz*dz; return dx*dx + dy*dy + dz*dz;
} }
inline void vnormalize(float* v) inline void rcVnormalize(float* v)
{ {
float d = 1.0f / sqrtf(rcSqr(v[0]) + rcSqr(v[1]) + rcSqr(v[2])); float d = 1.0f / sqrtf(rcSqr(v[0]) + rcSqr(v[1]) + rcSqr(v[2]));
v[0] *= d; v[0] *= d;
@ -378,10 +378,10 @@ inline void vnormalize(float* v)
v[2] *= d; v[2] *= d;
} }
inline bool vequal(const float* p0, const float* p1) inline bool rcVequal(const float* p0, const float* p1)
{ {
static const float thr = rcSqr(1.0f/16384.0f); static const float thr = rcSqr(1.0f/16384.0f);
const float d = vdistSqr(p0, p1); const float d = rcVdistSqr(p0, p1);
return d < thr; return d < thr;
} }

View File

@ -44,13 +44,13 @@ void rcIntArray::resize(int n)
void rcCalcBounds(const float* verts, int nv, float* bmin, float* bmax) void rcCalcBounds(const float* verts, int nv, float* bmin, float* bmax)
{ {
// Calculate bounding box. // Calculate bounding box.
vcopy(bmin, verts); rcVcopy(bmin, verts);
vcopy(bmax, verts); rcVcopy(bmax, verts);
for (int i = 1; i < nv; ++i) for (int i = 1; i < nv; ++i)
{ {
const float* v = &verts[i*3]; const float* v = &verts[i*3];
vmin(bmin, v); rcVmin(bmin, v);
vmax(bmax, v); rcVmax(bmax, v);
} }
} }
@ -67,8 +67,8 @@ bool rcCreateHeightfield(rcHeightfield& hf, int width, int height,
hf.width = width; hf.width = width;
hf.height = height; hf.height = height;
hf.spans = new rcSpan*[hf.width*hf.height]; hf.spans = new rcSpan*[hf.width*hf.height];
vcopy(hf.bmin, bmin); rcVcopy(hf.bmin, bmin);
vcopy(hf.bmax, bmax); rcVcopy(hf.bmax, bmax);
hf.cs = cs; hf.cs = cs;
hf.ch = ch; hf.ch = ch;
if (!hf.spans) if (!hf.spans)
@ -80,10 +80,10 @@ bool rcCreateHeightfield(rcHeightfield& hf, int width, int height,
static void calcTriNormal(const float* v0, const float* v1, const float* v2, float* norm) static void calcTriNormal(const float* v0, const float* v1, const float* v2, float* norm)
{ {
float e0[3], e1[3]; float e0[3], e1[3];
vsub(e0, v1, v0); rcVsub(e0, v1, v0);
vsub(e1, v2, v0); rcVsub(e1, v2, v0);
vcross(norm, e0, e1); rcVcross(norm, e0, e1);
vnormalize(norm); rcVnormalize(norm);
} }
void rcMarkWalkableTriangles(const float walkableSlopeAngle, void rcMarkWalkableTriangles(const float walkableSlopeAngle,
@ -141,8 +141,8 @@ bool rcBuildCompactHeightfield(const int walkableHeight, const int walkableClimb
chf.walkableHeight = walkableHeight; chf.walkableHeight = walkableHeight;
chf.walkableClimb = walkableClimb; chf.walkableClimb = walkableClimb;
chf.maxRegions = 0; chf.maxRegions = 0;
vcopy(chf.bmin, hf.bmin); rcVcopy(chf.bmin, hf.bmin);
vcopy(chf.bmax, hf.bmax); rcVcopy(chf.bmax, hf.bmax);
chf.bmax[1] += walkableHeight*hf.ch; chf.bmax[1] += walkableHeight*hf.ch;
chf.cs = hf.cs; chf.cs = hf.cs;
chf.ch = hf.ch; chf.ch = hf.ch;

View File

@ -265,12 +265,12 @@ void rcMarkConvexPolyArea(const float* verts, const int nverts,
rcCompactHeightfield& chf) rcCompactHeightfield& chf)
{ {
float bmin[3], bmax[3]; float bmin[3], bmax[3];
vcopy(bmin, verts); rcVcopy(bmin, verts);
vcopy(bmax, verts); rcVcopy(bmax, verts);
for (int i = 1; i < nverts; ++i) for (int i = 1; i < nverts; ++i)
{ {
vmin(bmin, &verts[i*3]); rcVmin(bmin, &verts[i*3]);
vmax(bmax, &verts[i*3]); rcVmax(bmax, &verts[i*3]);
} }
bmin[1] = hmin; bmin[1] = hmin;
bmax[1] = hmax; bmax[1] = hmax;

View File

@ -565,8 +565,8 @@ bool rcBuildContours(rcCompactHeightfield& chf,
rcTimeVal startTime = rcGetPerformanceTimer(); rcTimeVal startTime = rcGetPerformanceTimer();
vcopy(cset.bmin, chf.bmin); rcVcopy(cset.bmin, chf.bmin);
vcopy(cset.bmax, chf.bmax); rcVcopy(cset.bmax, chf.bmax);
cset.cs = chf.cs; cset.cs = chf.cs;
cset.ch = chf.ch; cset.ch = chf.ch;

View File

@ -819,8 +819,8 @@ bool rcBuildPolyMesh(rcContourSet& cset, int nvp, rcPolyMesh& mesh)
{ {
rcTimeVal startTime = rcGetPerformanceTimer(); rcTimeVal startTime = rcGetPerformanceTimer();
vcopy(mesh.bmin, cset.bmin); rcVcopy(mesh.bmin, cset.bmin);
vcopy(mesh.bmax, cset.bmax); rcVcopy(mesh.bmax, cset.bmax);
mesh.cs = cset.cs; mesh.cs = cset.cs;
mesh.ch = cset.ch; mesh.ch = cset.ch;
@ -1125,16 +1125,16 @@ bool rcMergePolyMeshes(rcPolyMesh** meshes, const int nmeshes, rcPolyMesh& mesh)
mesh.nvp = meshes[0]->nvp; mesh.nvp = meshes[0]->nvp;
mesh.cs = meshes[0]->cs; mesh.cs = meshes[0]->cs;
mesh.ch = meshes[0]->ch; mesh.ch = meshes[0]->ch;
vcopy(mesh.bmin, meshes[0]->bmin); rcVcopy(mesh.bmin, meshes[0]->bmin);
vcopy(mesh.bmax, meshes[0]->bmax); rcVcopy(mesh.bmax, meshes[0]->bmax);
int maxVerts = 0; int maxVerts = 0;
int maxPolys = 0; int maxPolys = 0;
int maxVertsPerMesh = 0; int maxVertsPerMesh = 0;
for (int i = 0; i < nmeshes; ++i) for (int i = 0; i < nmeshes; ++i)
{ {
vmin(mesh.bmin, meshes[i]->bmin); rcVmin(mesh.bmin, meshes[i]->bmin);
vmax(mesh.bmax, meshes[i]->bmax); rcVmax(mesh.bmax, meshes[i]->bmax);
maxVertsPerMesh = rcMax(maxVertsPerMesh, meshes[i]->nverts); maxVertsPerMesh = rcMax(maxVertsPerMesh, meshes[i]->nverts);
maxVerts += meshes[i]->nverts; maxVerts += meshes[i]->nverts;
maxPolys += meshes[i]->npolys; maxPolys += meshes[i]->npolys;

View File

@ -90,9 +90,9 @@ static bool circumCircle(const float* p1, const float* p2, const float* p3,
static float distPtTri(const float* p, const float* a, const float* b, const float* c) static float distPtTri(const float* p, const float* a, const float* b, const float* c)
{ {
float v0[3], v1[3], v2[3]; float v0[3], v1[3], v2[3];
vsub(v0, c,a); rcVsub(v0, c,a);
vsub(v1, b,a); rcVsub(v1, b,a);
vsub(v2, p,a); rcVsub(v2, p,a);
const float dot00 = vdot2(v0, v0); const float dot00 = vdot2(v0, v0);
const float dot01 = vdot2(v0, v1); const float dot01 = vdot2(v0, v1);
@ -508,7 +508,7 @@ static bool buildPolyDetail(const float* in, const int nin,
nverts = 0; nverts = 0;
for (int i = 0; i < nin; ++i) for (int i = 0; i < nin; ++i)
vcopy(&verts[i*3], &in[i*3]); rcVcopy(&verts[i*3], &in[i*3]);
nverts = nin; nverts = nin;
const float cs = chf.cs; const float cs = chf.cs;
@ -602,7 +602,7 @@ static bool buildPolyDetail(const float* in, const int nin,
{ {
for (int k = nidx-2; k > 0; --k) for (int k = nidx-2; k > 0; --k)
{ {
vcopy(&verts[nverts*3], &edge[idx[k]*3]); rcVcopy(&verts[nverts*3], &edge[idx[k]*3]);
hull[nhull++] = nverts; hull[nhull++] = nverts;
nverts++; nverts++;
} }
@ -611,7 +611,7 @@ static bool buildPolyDetail(const float* in, const int nin,
{ {
for (int k = 1; k < nidx-1; ++k) for (int k = 1; k < nidx-1; ++k)
{ {
vcopy(&verts[nverts*3], &edge[idx[k]*3]); rcVcopy(&verts[nverts*3], &edge[idx[k]*3]);
hull[nhull++] = nverts; hull[nhull++] = nverts;
nverts++; nverts++;
} }
@ -645,12 +645,12 @@ static bool buildPolyDetail(const float* in, const int nin,
{ {
// Create sample locations in a grid. // Create sample locations in a grid.
float bmin[3], bmax[3]; float bmin[3], bmax[3];
vcopy(bmin, in); rcVcopy(bmin, in);
vcopy(bmax, in); rcVcopy(bmax, in);
for (int i = 1; i < nin; ++i) for (int i = 1; i < nin; ++i)
{ {
vmin(bmin, &in[i*3]); rcVmin(bmin, &in[i*3]);
vmax(bmax, &in[i*3]); rcVmax(bmax, &in[i*3]);
} }
int x0 = (int)floorf(bmin[0]/sampleDist); int x0 = (int)floorf(bmin[0]/sampleDist);
int x1 = (int)ceilf(bmax[0]/sampleDist); int x1 = (int)ceilf(bmax[0]/sampleDist);
@ -693,7 +693,7 @@ static bool buildPolyDetail(const float* in, const int nin,
if (d > bestd) if (d > bestd)
{ {
bestd = d; bestd = d;
vcopy(bestpt,pt); rcVcopy(bestpt,pt);
} }
} }
// If the max error is within accepted threshold, stop tesselating. // If the max error is within accepted threshold, stop tesselating.
@ -701,7 +701,7 @@ static bool buildPolyDetail(const float* in, const int nin,
break; break;
// Add the new sample point. // Add the new sample point.
vcopy(&verts[nverts*3],bestpt); rcVcopy(&verts[nverts*3],bestpt);
nverts++; nverts++;
// Create new triangulation. // Create new triangulation.
@ -1200,7 +1200,7 @@ bool rcMergePolyMeshDetails(rcPolyMeshDetail** meshes, const int nmeshes, rcPoly
for (int k = 0; k < dm->nverts; ++k) for (int k = 0; k < dm->nverts; ++k)
{ {
vcopy(&mesh.verts[mesh.nverts*3], &dm->verts[k*3]); rcVcopy(&mesh.verts[mesh.nverts*3], &dm->verts[k*3]);
mesh.nverts++; mesh.nverts++;
} }
for (int k = 0; k < dm->ntris; ++k) for (int k = 0; k < dm->ntris; ++k)

View File

@ -196,12 +196,12 @@ static void rasterizeTri(const float* v0, const float* v1, const float* v2,
const float by = bmax[1] - bmin[1]; const float by = bmax[1] - bmin[1];
// Calculate the bounding box of the triangle. // Calculate the bounding box of the triangle.
vcopy(tmin, v0); rcVcopy(tmin, v0);
vcopy(tmax, v0); rcVcopy(tmax, v0);
vmin(tmin, v1); rcVmin(tmin, v1);
vmin(tmin, v2); rcVmin(tmin, v2);
vmax(tmax, v1); rcVmax(tmax, v1);
vmax(tmax, v2); rcVmax(tmax, v2);
// If the triangle does not touch the bbox of the heightfield, skip the triagle. // If the triangle does not touch the bbox of the heightfield, skip the triagle.
if (!overlapBounds(bmin, bmax, tmin, tmax)) if (!overlapBounds(bmin, bmax, tmin, tmax))
@ -223,9 +223,9 @@ static void rasterizeTri(const float* v0, const float* v1, const float* v2,
for (int y = y0; y <= y1; ++y) for (int y = y0; y <= y1; ++y)
{ {
// Clip polygon to row. // Clip polygon to row.
vcopy(&in[0], v0); rcVcopy(&in[0], v0);
vcopy(&in[1*3], v1); rcVcopy(&in[1*3], v1);
vcopy(&in[2*3], v2); rcVcopy(&in[2*3], v2);
int nvrow = 3; int nvrow = 3;
const float cz = bmin[2] + y*cs; const float cz = bmin[2] + y*cs;
nvrow = clipPoly(in, nvrow, out, 0, 1, -cz); nvrow = clipPoly(in, nvrow, out, 0, 1, -cz);

File diff suppressed because it is too large Load Diff

View File

@ -216,10 +216,10 @@
<key>_historyCapacity</key> <key>_historyCapacity</key>
<integer>0</integer> <integer>0</integer>
<key>bookmark</key> <key>bookmark</key>
<string>6BF5F3751175AACB000502A6</string> <string>6BF5F4B1117644A2000502A6</string>
<key>history</key> <key>history</key>
<array> <array>
<string>6BF5F2B811747E6F000502A6</string> <string>6BF5F3751175AACB000502A6</string>
</array> </array>
</dict> </dict>
<key>SplitCount</key> <key>SplitCount</key>
@ -323,8 +323,8 @@
<key>PBXSmartGroupTreeModuleOutlineStateSelectionKey</key> <key>PBXSmartGroupTreeModuleOutlineStateSelectionKey</key>
<array> <array>
<array> <array>
<integer>5</integer> <integer>18</integer>
<integer>2</integer> <integer>11</integer>
<integer>1</integer> <integer>1</integer>
<integer>0</integer> <integer>0</integer>
</array> </array>
@ -365,7 +365,7 @@
<key>PBXProjectModuleGUID</key> <key>PBXProjectModuleGUID</key>
<string>6B8632A30F78115100E2684A</string> <string>6B8632A30F78115100E2684A</string>
<key>PBXProjectModuleLabel</key> <key>PBXProjectModuleLabel</key>
<string>DebugDraw.cpp</string> <string>DetourNavMesh.cpp</string>
<key>PBXSplitModuleInNavigatorKey</key> <key>PBXSplitModuleInNavigatorKey</key>
<dict> <dict>
<key>Split0</key> <key>Split0</key>
@ -373,23 +373,19 @@
<key>PBXProjectModuleGUID</key> <key>PBXProjectModuleGUID</key>
<string>6B8632A40F78115100E2684A</string> <string>6B8632A40F78115100E2684A</string>
<key>PBXProjectModuleLabel</key> <key>PBXProjectModuleLabel</key>
<string>DebugDraw.cpp</string> <string>DetourNavMesh.cpp</string>
<key>_historyCapacity</key> <key>_historyCapacity</key>
<integer>0</integer> <integer>0</integer>
<key>bookmark</key> <key>bookmark</key>
<string>6BF5F3741175AACB000502A6</string> <string>6BF5F4A7117644A2000502A6</string>
<key>history</key> <key>history</key>
<array> <array>
<string>6BBB4A94115B4F3400CF791D</string>
<string>6BBB4A95115B4F3400CF791D</string>
<string>6BBB4A96115B4F3400CF791D</string> <string>6BBB4A96115B4F3400CF791D</string>
<string>6BBB4A99115B4F3400CF791D</string> <string>6BBB4A99115B4F3400CF791D</string>
<string>6BBB4A9A115B4F3400CF791D</string> <string>6BBB4A9A115B4F3400CF791D</string>
<string>6BBB4A9B115B4F3400CF791D</string> <string>6BBB4A9B115B4F3400CF791D</string>
<string>6BBB4A9E115B4F3400CF791D</string> <string>6BBB4A9E115B4F3400CF791D</string>
<string>6BBB4AA0115B4F3400CF791D</string>
<string>6BBB4AA1115B4F3400CF791D</string> <string>6BBB4AA1115B4F3400CF791D</string>
<string>6BBB4AA2115B4F3400CF791D</string>
<string>6BBB4AA3115B4F3400CF791D</string> <string>6BBB4AA3115B4F3400CF791D</string>
<string>6BBB4AA4115B4F3400CF791D</string> <string>6BBB4AA4115B4F3400CF791D</string>
<string>6BBB4AA5115B4F3400CF791D</string> <string>6BBB4AA5115B4F3400CF791D</string>
@ -397,39 +393,27 @@
<string>6BBB4AA7115B4F3400CF791D</string> <string>6BBB4AA7115B4F3400CF791D</string>
<string>6BBB4AAB115B4F3400CF791D</string> <string>6BBB4AAB115B4F3400CF791D</string>
<string>6BBB4AB0115B4F3400CF791D</string> <string>6BBB4AB0115B4F3400CF791D</string>
<string>6BBB4AB1115B4F3400CF791D</string>
<string>6BBB4AB2115B4F3400CF791D</string> <string>6BBB4AB2115B4F3400CF791D</string>
<string>6BBB4AB3115B4F3400CF791D</string> <string>6BBB4AB3115B4F3400CF791D</string>
<string>6BBB4AB4115B4F3400CF791D</string> <string>6BBB4AB4115B4F3400CF791D</string>
<string>6BBB4ABB115B4F3400CF791D</string> <string>6BBB4ABB115B4F3400CF791D</string>
<string>6BBB4ABD115B4F3400CF791D</string>
<string>6BBB4ABE115B4F3400CF791D</string> <string>6BBB4ABE115B4F3400CF791D</string>
<string>6BBB4ABF115B4F3400CF791D</string> <string>6BBB4ABF115B4F3400CF791D</string>
<string>6BBB4AC0115B4F3400CF791D</string>
<string>6BBB4AC1115B4F3400CF791D</string> <string>6BBB4AC1115B4F3400CF791D</string>
<string>6BBB4AC2115B4F3400CF791D</string> <string>6BBB4AC2115B4F3400CF791D</string>
<string>6BBB4AC3115B4F3400CF791D</string>
<string>6BBB4AC4115B4F3400CF791D</string> <string>6BBB4AC4115B4F3400CF791D</string>
<string>6BBB4AC5115B4F3400CF791D</string>
<string>6BBB4AC6115B4F3400CF791D</string> <string>6BBB4AC6115B4F3400CF791D</string>
<string>6BBB4AC8115B4F3400CF791D</string>
<string>6BBB4AC9115B4F3400CF791D</string>
<string>6BBB4ACB115B4F3400CF791D</string> <string>6BBB4ACB115B4F3400CF791D</string>
<string>6BBB4ACD115B4F3400CF791D</string> <string>6BBB4ACD115B4F3400CF791D</string>
<string>6BBB4B7A115B639200CF791D</string>
<string>6BBB4B7D115B639200CF791D</string>
<string>6BBB4B7F115B639200CF791D</string> <string>6BBB4B7F115B639200CF791D</string>
<string>6BBB4C34115B7A3D00CF791D</string> <string>6BBB4C34115B7A3D00CF791D</string>
<string>6BED8AE2117451EB00582F38</string> <string>6BED8AE2117451EB00582F38</string>
<string>6BED8AEE117455CB00582F38</string>
<string>6BED8AF21174567000582F38</string>
<string>6BF5F27011747CFA000502A6</string> <string>6BF5F27011747CFA000502A6</string>
<string>6BF5F27311747CFA000502A6</string> <string>6BF5F27311747CFA000502A6</string>
<string>6BF5F2E411748884000502A6</string> <string>6BF5F2E411748884000502A6</string>
<string>6BF5F2E511748884000502A6</string> <string>6BF5F2E511748884000502A6</string>
<string>6BF5F2E611748884000502A6</string> <string>6BF5F2E611748884000502A6</string>
<string>6BF5F2E711748884000502A6</string> <string>6BF5F2E711748884000502A6</string>
<string>6BF5F2E911748884000502A6</string>
<string>6BF5F2EA11748884000502A6</string> <string>6BF5F2EA11748884000502A6</string>
<string>6BF5F30E1174904B000502A6</string> <string>6BF5F30E1174904B000502A6</string>
<string>6BF5F31C117490A1000502A6</string> <string>6BF5F31C117490A1000502A6</string>
@ -437,14 +421,30 @@
<string>6BF5F32F11759C3C000502A6</string> <string>6BF5F32F11759C3C000502A6</string>
<string>6BF5F33011759C3C000502A6</string> <string>6BF5F33011759C3C000502A6</string>
<string>6BF5F33111759C3C000502A6</string> <string>6BF5F33111759C3C000502A6</string>
<string>6BF5F33211759C3C000502A6</string>
<string>6BF5F33311759C3C000502A6</string>
<string>6BF5F33411759C3C000502A6</string>
<string>6BF5F36A1175A3C9000502A6</string> <string>6BF5F36A1175A3C9000502A6</string>
<string>6BF5F36E1175AACB000502A6</string>
<string>6BF5F36F1175AACB000502A6</string> <string>6BF5F36F1175AACB000502A6</string>
<string>6BF5F3701175AACB000502A6</string> <string>6BF5F3701175AACB000502A6</string>
<string>6BBB4A9C115B4F3400CF791D</string> <string>6BF5F471117644A2000502A6</string>
<string>6BF5F472117644A2000502A6</string>
<string>6BF5F473117644A2000502A6</string>
<string>6BF5F474117644A2000502A6</string>
<string>6BF5F475117644A2000502A6</string>
<string>6BF5F476117644A2000502A6</string>
<string>6BF5F477117644A2000502A6</string>
<string>6BF5F478117644A2000502A6</string>
<string>6BF5F479117644A2000502A6</string>
<string>6BF5F47A117644A2000502A6</string>
<string>6BF5F47B117644A2000502A6</string>
<string>6BF5F47C117644A2000502A6</string>
<string>6BF5F47D117644A2000502A6</string>
<string>6BF5F47E117644A2000502A6</string>
<string>6BF5F47F117644A2000502A6</string>
<string>6BF5F480117644A2000502A6</string>
<string>6BF5F481117644A2000502A6</string>
<string>6BF5F482117644A2000502A6</string>
<string>6BF5F483117644A2000502A6</string>
<string>6BF5F484117644A2000502A6</string>
<string>6BF5F485117644A2000502A6</string>
</array> </array>
<key>prevStack</key> <key>prevStack</key>
<array> <array>
@ -506,73 +506,45 @@
<string>6BF5F27811747CFA000502A6</string> <string>6BF5F27811747CFA000502A6</string>
<string>6BF5F28011747CFA000502A6</string> <string>6BF5F28011747CFA000502A6</string>
<string>6BF5F28D11747CFA000502A6</string> <string>6BF5F28D11747CFA000502A6</string>
<string>6BF5F2EC11748884000502A6</string>
<string>6BF5F2ED11748884000502A6</string> <string>6BF5F2ED11748884000502A6</string>
<string>6BF5F2EE11748884000502A6</string> <string>6BF5F2EE11748884000502A6</string>
<string>6BF5F2EF11748884000502A6</string>
<string>6BF5F2F011748884000502A6</string>
<string>6BF5F2F111748884000502A6</string>
<string>6BF5F2F211748884000502A6</string>
<string>6BF5F2F311748884000502A6</string>
<string>6BF5F2F411748884000502A6</string>
<string>6BF5F2F511748884000502A6</string>
<string>6BF5F2F611748884000502A6</string>
<string>6BF5F2F711748884000502A6</string>
<string>6BF5F2F811748884000502A6</string> <string>6BF5F2F811748884000502A6</string>
<string>6BF5F2F911748884000502A6</string>
<string>6BF5F2FA11748884000502A6</string>
<string>6BF5F3121174904B000502A6</string>
<string>6BF5F3131174904B000502A6</string>
<string>6BF5F3141174904B000502A6</string>
<string>6BF5F3151174904B000502A6</string>
<string>6BF5F31E117490A1000502A6</string>
<string>6BF5F31F117490A1000502A6</string>
<string>6BF5F33611759C3C000502A6</string>
<string>6BF5F33711759C3C000502A6</string>
<string>6BF5F33811759C3C000502A6</string> <string>6BF5F33811759C3C000502A6</string>
<string>6BF5F33911759C3C000502A6</string> <string>6BF5F33911759C3C000502A6</string>
<string>6BF5F33A11759C3C000502A6</string>
<string>6BF5F33B11759C3C000502A6</string>
<string>6BF5F33C11759C3C000502A6</string>
<string>6BF5F33D11759C3C000502A6</string>
<string>6BF5F33E11759C3C000502A6</string>
<string>6BF5F33F11759C3C000502A6</string>
<string>6BF5F34011759C3C000502A6</string>
<string>6BF5F34111759C3C000502A6</string>
<string>6BF5F34211759C3C000502A6</string>
<string>6BF5F34311759C3C000502A6</string>
<string>6BF5F34411759C3C000502A6</string>
<string>6BF5F34511759C3C000502A6</string>
<string>6BF5F34611759C3C000502A6</string>
<string>6BF5F34711759C3C000502A6</string>
<string>6BF5F34811759C3C000502A6</string>
<string>6BF5F34911759C3C000502A6</string>
<string>6BF5F34A11759C3C000502A6</string> <string>6BF5F34A11759C3C000502A6</string>
<string>6BF5F34B11759C3C000502A6</string> <string>6BF5F486117644A2000502A6</string>
<string>6BF5F34C11759C3C000502A6</string> <string>6BF5F487117644A2000502A6</string>
<string>6BF5F34D11759C3C000502A6</string> <string>6BF5F488117644A2000502A6</string>
<string>6BF5F34E11759C3C000502A6</string> <string>6BF5F489117644A2000502A6</string>
<string>6BF5F3541175A187000502A6</string> <string>6BF5F48A117644A2000502A6</string>
<string>6BF5F3551175A187000502A6</string> <string>6BF5F48B117644A2000502A6</string>
<string>6BF5F3561175A187000502A6</string> <string>6BF5F48C117644A2000502A6</string>
<string>6BF5F3571175A187000502A6</string> <string>6BF5F48D117644A2000502A6</string>
<string>6BF5F3581175A187000502A6</string> <string>6BF5F48E117644A2000502A6</string>
<string>6BF5F3591175A187000502A6</string> <string>6BF5F48F117644A2000502A6</string>
<string>6BF5F35A1175A187000502A6</string> <string>6BF5F490117644A2000502A6</string>
<string>6BF5F35B1175A187000502A6</string> <string>6BF5F491117644A2000502A6</string>
<string>6BF5F35C1175A187000502A6</string> <string>6BF5F492117644A2000502A6</string>
<string>6BF5F35D1175A187000502A6</string> <string>6BF5F493117644A2000502A6</string>
<string>6BF5F35E1175A187000502A6</string> <string>6BF5F494117644A2000502A6</string>
<string>6BF5F35F1175A187000502A6</string> <string>6BF5F495117644A2000502A6</string>
<string>6BF5F3601175A187000502A6</string> <string>6BF5F496117644A2000502A6</string>
<string>6BF5F3611175A187000502A6</string> <string>6BF5F497117644A2000502A6</string>
<string>6BF5F3621175A187000502A6</string> <string>6BF5F498117644A2000502A6</string>
<string>6BF5F3631175A187000502A6</string> <string>6BF5F499117644A2000502A6</string>
<string>6BF5F3671175A3A4000502A6</string> <string>6BF5F49A117644A2000502A6</string>
<string>6BF5F36B1175A3C9000502A6</string> <string>6BF5F49B117644A2000502A6</string>
<string>6BF5F3711175AACB000502A6</string> <string>6BF5F49C117644A2000502A6</string>
<string>6BF5F3721175AACB000502A6</string> <string>6BF5F49D117644A2000502A6</string>
<string>6BF5F3731175AACB000502A6</string> <string>6BF5F49E117644A2000502A6</string>
<string>6BF5F49F117644A2000502A6</string>
<string>6BF5F4A0117644A2000502A6</string>
<string>6BF5F4A1117644A2000502A6</string>
<string>6BF5F4A2117644A2000502A6</string>
<string>6BF5F4A3117644A2000502A6</string>
<string>6BF5F4A4117644A2000502A6</string>
<string>6BF5F4A5117644A2000502A6</string>
<string>6BF5F4A6117644A2000502A6</string>
</array> </array>
</dict> </dict>
<key>SplitCount</key> <key>SplitCount</key>
@ -586,18 +558,18 @@
<key>GeometryConfiguration</key> <key>GeometryConfiguration</key>
<dict> <dict>
<key>Frame</key> <key>Frame</key>
<string>{{0, 0}, {970, 546}}</string> <string>{{0, 0}, {970, 456}}</string>
<key>RubberWindowFrame</key> <key>RubberWindowFrame</key>
<string>13 75 1256 702 0 0 1280 778 </string> <string>13 75 1256 702 0 0 1280 778 </string>
</dict> </dict>
<key>Module</key> <key>Module</key>
<string>PBXNavigatorGroup</string> <string>PBXNavigatorGroup</string>
<key>Proportion</key> <key>Proportion</key>
<string>546pt</string> <string>456pt</string>
</dict> </dict>
<dict> <dict>
<key>Proportion</key> <key>Proportion</key>
<string>110pt</string> <string>200pt</string>
<key>Tabs</key> <key>Tabs</key>
<array> <array>
<dict> <dict>
@ -611,7 +583,7 @@
<key>GeometryConfiguration</key> <key>GeometryConfiguration</key>
<dict> <dict>
<key>Frame</key> <key>Frame</key>
<string>{{10, 27}, {970, 92}}</string> <string>{{10, 27}, {970, 83}}</string>
</dict> </dict>
<key>Module</key> <key>Module</key>
<string>XCDetailModule</string> <string>XCDetailModule</string>
@ -665,7 +637,7 @@
<key>GeometryConfiguration</key> <key>GeometryConfiguration</key>
<dict> <dict>
<key>Frame</key> <key>Frame</key>
<string>{{10, 27}, {970, 83}}</string> <string>{{10, 27}, {970, 173}}</string>
<key>RubberWindowFrame</key> <key>RubberWindowFrame</key>
<string>13 75 1256 702 0 0 1280 778 </string> <string>13 75 1256 702 0 0 1280 778 </string>
</dict> </dict>
@ -695,11 +667,11 @@
</array> </array>
<key>TableOfContents</key> <key>TableOfContents</key>
<array> <array>
<string>6BF5F2FC11748884000502A6</string> <string>6BF5F4A8117644A2000502A6</string>
<string>1CA23ED40692098700951B8B</string> <string>1CA23ED40692098700951B8B</string>
<string>6BF5F2FD11748884000502A6</string> <string>6BF5F4A9117644A2000502A6</string>
<string>6B8632A30F78115100E2684A</string> <string>6B8632A30F78115100E2684A</string>
<string>6BF5F2FE11748884000502A6</string> <string>6BF5F4AA117644A2000502A6</string>
<string>1CA23EDF0692099D00951B8B</string> <string>1CA23EDF0692099D00951B8B</string>
<string>1CA23EE00692099D00951B8B</string> <string>1CA23EE00692099D00951B8B</string>
<string>1CA23EE10692099D00951B8B</string> <string>1CA23EE10692099D00951B8B</string>
@ -848,14 +820,14 @@
</array> </array>
<key>TableOfContents</key> <key>TableOfContents</key>
<array> <array>
<string>6BF5F2FF11748884000502A6</string> <string>6BF5F4AB117644A2000502A6</string>
<string>1CCC7628064C1048000F2A68</string> <string>1CCC7628064C1048000F2A68</string>
<string>1CCC7629064C1048000F2A68</string> <string>1CCC7629064C1048000F2A68</string>
<string>6BF5F30011748884000502A6</string> <string>6BF5F4AC117644A2000502A6</string>
<string>6BF5F30111748884000502A6</string> <string>6BF5F4AD117644A2000502A6</string>
<string>6BF5F30211748884000502A6</string> <string>6BF5F4AE117644A2000502A6</string>
<string>6BF5F30311748884000502A6</string> <string>6BF5F4AF117644A2000502A6</string>
<string>6BF5F30411748884000502A6</string> <string>6BF5F4B0117644A2000502A6</string>
</array> </array>
<key>ToolbarConfigUserDefaultsMinorVersion</key> <key>ToolbarConfigUserDefaultsMinorVersion</key>
<string>2</string> <string>2</string>
@ -887,8 +859,6 @@
<integer>5</integer> <integer>5</integer>
<key>WindowOrderList</key> <key>WindowOrderList</key>
<array> <array>
<string>6BF5F322117490A1000502A6</string>
<string>6BF5F323117490A1000502A6</string>
<string>6BF5F29911747CFA000502A6</string> <string>6BF5F29911747CFA000502A6</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>

View File

@ -191,14 +191,14 @@ void ConvexVolumeTool::handleClick(const float* p, bool shift)
// Create // Create
// If clicked on that last pt, create the shape. // If clicked on that last pt, create the shape.
if (m_npts && vdistSqr(p, &m_pts[(m_npts-1)*3]) < rcSqr(0.2f)) if (m_npts && rcVdistSqr(p, &m_pts[(m_npts-1)*3]) < rcSqr(0.2f))
{ {
if (m_nhull > 2) if (m_nhull > 2)
{ {
// Create shape. // Create shape.
float verts[MAX_PTS*3]; float verts[MAX_PTS*3];
for (int i = 0; i < m_nhull; ++i) for (int i = 0; i < m_nhull; ++i)
vcopy(&verts[i*3], &m_pts[m_hull[i]*3]); rcVcopy(&verts[i*3], &m_pts[m_hull[i]*3]);
float minh = FLT_MAX, maxh = 0; float minh = FLT_MAX, maxh = 0;
for (int i = 0; i < m_nhull; ++i) for (int i = 0; i < m_nhull; ++i)
@ -217,7 +217,7 @@ void ConvexVolumeTool::handleClick(const float* p, bool shift)
// Add new point // Add new point
if (m_npts < MAX_PTS) if (m_npts < MAX_PTS)
{ {
vcopy(&m_pts[m_npts*3], p); rcVcopy(&m_pts[m_npts*3], p);
m_npts++; m_npts++;
// Update hull. // Update hull.
if (m_npts > 1) if (m_npts > 1)

View File

@ -36,32 +36,32 @@ static bool intersectSegmentTriangle(const float* sp, const float* sq,
{ {
float v, w; float v, w;
float ab[3], ac[3], qp[3], ap[3], norm[3], e[3]; float ab[3], ac[3], qp[3], ap[3], norm[3], e[3];
vsub(ab, b, a); rcVsub(ab, b, a);
vsub(ac, c, a); rcVsub(ac, c, a);
vsub(qp, sp, sq); rcVsub(qp, sp, sq);
// Compute triangle normal. Can be precalculated or cached if // Compute triangle normal. Can be precalculated or cached if
// intersecting multiple segments against the same triangle // intersecting multiple segments against the same triangle
vcross(norm, ab, ac); rcVcross(norm, ab, ac);
// Compute denominator d. If d <= 0, segment is parallel to or points // Compute denominator d. If d <= 0, segment is parallel to or points
// away from triangle, so exit early // away from triangle, so exit early
float d = vdot(qp, norm); float d = rcVdot(qp, norm);
if (d <= 0.0f) return false; if (d <= 0.0f) return false;
// Compute intersection t value of pq with plane of triangle. A ray // Compute intersection t value of pq with plane of triangle. A ray
// intersects iff 0 <= t. Segment intersects iff 0 <= t <= 1. Delay // intersects iff 0 <= t. Segment intersects iff 0 <= t <= 1. Delay
// dividing by d until intersection has been found to pierce triangle // dividing by d until intersection has been found to pierce triangle
vsub(ap, sp, a); rcVsub(ap, sp, a);
t = vdot(ap, norm); t = rcVdot(ap, norm);
if (t < 0.0f) return false; if (t < 0.0f) return false;
if (t > d) return false; // For segment; exclude this code line for a ray test if (t > d) return false; // For segment; exclude this code line for a ray test
// Compute barycentric coordinate components and test if within bounds // Compute barycentric coordinate components and test if within bounds
vcross(e, qp, ap); rcVcross(e, qp, ap);
v = vdot(ac, e); v = rcVdot(ac, e);
if (v < 0.0f || v > d) return false; if (v < 0.0f || v > d) return false;
w = -vdot(ab, e); w = -rcVdot(ab, e);
if (w < 0.0f || v + w > d) return false; if (w < 0.0f || v + w > d) return false;
// Segment/ray intersects triangle. Perform delayed division // Segment/ray intersects triangle. Perform delayed division
@ -289,7 +289,7 @@ bool InputGeom::save(const char* filepath)
bool InputGeom::raycastMesh(float* src, float* dst, float& tmin) bool InputGeom::raycastMesh(float* src, float* dst, float& tmin)
{ {
float dir[3]; float dir[3];
vsub(dir, dst, src); rcVsub(dir, dst, src);
int nt = m_mesh->getTriCount(); int nt = m_mesh->getTriCount();
const float* verts = m_mesh->getVerts(); const float* verts = m_mesh->getVerts();
@ -301,7 +301,7 @@ bool InputGeom::raycastMesh(float* src, float* dst, float& tmin)
for (int i = 0; i < nt*3; i += 3) for (int i = 0; i < nt*3; i += 3)
{ {
const float* n = &normals[i]; const float* n = &normals[i];
if (vdot(dir, n) > 0) if (rcVdot(dir, n) > 0)
continue; continue;
float t = 1; float t = 1;
@ -328,8 +328,8 @@ void InputGeom::addOffMeshConnection(const float* spos, const float* epos, const
m_offMeshConDirs[m_offMeshConCount] = bidir; m_offMeshConDirs[m_offMeshConCount] = bidir;
m_offMeshConAreas[m_offMeshConCount] = area; m_offMeshConAreas[m_offMeshConCount] = area;
m_offMeshConFlags[m_offMeshConCount] = flags; m_offMeshConFlags[m_offMeshConCount] = flags;
vcopy(&v[0], spos); rcVcopy(&v[0], spos);
vcopy(&v[3], epos); rcVcopy(&v[3], epos);
m_offMeshConCount++; m_offMeshConCount++;
} }
@ -338,8 +338,8 @@ void InputGeom::deleteOffMeshConnection(int i)
m_offMeshConCount--; m_offMeshConCount--;
float* src = &m_offMeshConVerts[m_offMeshConCount*3*2]; float* src = &m_offMeshConVerts[m_offMeshConCount*3*2];
float* dst = &m_offMeshConVerts[i*3*2]; float* dst = &m_offMeshConVerts[i*3*2];
vcopy(&dst[0], &src[0]); rcVcopy(&dst[0], &src[0]);
vcopy(&dst[3], &src[3]); rcVcopy(&dst[3], &src[3]);
m_offMeshConRads[i] = m_offMeshConRads[m_offMeshConCount]; m_offMeshConRads[i] = m_offMeshConRads[m_offMeshConCount];
m_offMeshConDirs[i] = m_offMeshConDirs[m_offMeshConCount]; m_offMeshConDirs[i] = m_offMeshConDirs[m_offMeshConCount];
m_offMeshConAreas[i] = m_offMeshConAreas[m_offMeshConCount]; m_offMeshConAreas[i] = m_offMeshConAreas[m_offMeshConCount];

View File

@ -66,7 +66,7 @@ static bool getSteerTarget(dtNavMesh* navMesh, const float* startPos, const floa
{ {
*outPointCount = nsteerPath; *outPointCount = nsteerPath;
for (int i = 0; i < nsteerPath; ++i) for (int i = 0; i < nsteerPath; ++i)
vcopy(&outPoints[i*3], &steerPath[i*3]); rcVcopy(&outPoints[i*3], &steerPath[i*3]);
} }
@ -84,7 +84,7 @@ static bool getSteerTarget(dtNavMesh* navMesh, const float* startPos, const floa
if (ns >= nsteerPath) if (ns >= nsteerPath)
return false; return false;
vcopy(steerPos, &steerPath[ns*3]); rcVcopy(steerPos, &steerPath[ns*3]);
steerPosFlag = steerPathFlags[ns]; steerPosFlag = steerPathFlags[ns];
steerPosRef = steerPathPolys[ns]; steerPosRef = steerPathPolys[ns];
@ -258,12 +258,12 @@ void NavMeshTesterTool::handleClick(const float* p, bool shift)
if (shift) if (shift)
{ {
m_sposSet = true; m_sposSet = true;
vcopy(m_spos, p); rcVcopy(m_spos, p);
} }
else else
{ {
m_eposSet = true; m_eposSet = true;
vcopy(m_epos, p); rcVcopy(m_epos, p);
} }
recalc(); recalc();
} }
@ -297,12 +297,12 @@ void NavMeshTesterTool::handleStep()
m_nsmoothPath = 0; m_nsmoothPath = 0;
vcopy(&m_smoothPath[m_nsmoothPath*3], m_iterPos); rcVcopy(&m_smoothPath[m_nsmoothPath*3], m_iterPos);
m_nsmoothPath++; m_nsmoothPath++;
} }
} }
vcopy(m_prevIterPos, m_iterPos); rcVcopy(m_prevIterPos, m_iterPos);
m_pathIterNum++; m_pathIterNum++;
@ -325,22 +325,22 @@ void NavMeshTesterTool::handleStep()
m_steerPoints, &m_steerPointCount)) m_steerPoints, &m_steerPointCount))
return; return;
vcopy(m_steerPos, steerPos); rcVcopy(m_steerPos, steerPos);
bool endOfPath = (steerPosFlag & DT_STRAIGHTPATH_END) ? true : false; bool endOfPath = (steerPosFlag & DT_STRAIGHTPATH_END) ? true : false;
bool offMeshConnection = (steerPosFlag & DT_STRAIGHTPATH_OFFMESH_CONNECTION) ? true : false; bool offMeshConnection = (steerPosFlag & DT_STRAIGHTPATH_OFFMESH_CONNECTION) ? true : false;
// Find movement delta. // Find movement delta.
float delta[3], len; float delta[3], len;
vsub(delta, steerPos, m_iterPos); rcVsub(delta, steerPos, m_iterPos);
len = sqrtf(vdot(delta,delta)); len = sqrtf(rcVdot(delta,delta));
// If the steer target is end of path or off-mesh link, do not move past the location. // If the steer target is end of path or off-mesh link, do not move past the location.
if ((endOfPath || offMeshConnection) && len < STEP_SIZE) if ((endOfPath || offMeshConnection) && len < STEP_SIZE)
len = 1; len = 1;
else else
len = STEP_SIZE / len; len = STEP_SIZE / len;
float moveTgt[3]; float moveTgt[3];
vmad(moveTgt, m_iterPos, delta, len); rcVmad(moveTgt, m_iterPos, delta, len);
// Move // Move
float result[3]; float result[3];
@ -355,16 +355,16 @@ void NavMeshTesterTool::handleStep()
m_pathIterPolyCount -= n; m_pathIterPolyCount -= n;
} }
// Update position. // Update position.
vcopy(m_iterPos, result); rcVcopy(m_iterPos, result);
// Handle end of path and off-mesh links when close enough. // Handle end of path and off-mesh links when close enough.
if (endOfPath && inRange(m_iterPos, steerPos, SLOP, 1.0f)) if (endOfPath && inRange(m_iterPos, steerPos, SLOP, 1.0f))
{ {
// Reached end of path. // Reached end of path.
vcopy(m_iterPos, m_targetPos); rcVcopy(m_iterPos, m_targetPos);
if (m_nsmoothPath < MAX_SMOOTH) if (m_nsmoothPath < MAX_SMOOTH)
{ {
vcopy(&m_smoothPath[m_nsmoothPath*3], m_iterPos); rcVcopy(&m_smoothPath[m_nsmoothPath*3], m_iterPos);
m_nsmoothPath++; m_nsmoothPath++;
} }
return; return;
@ -389,17 +389,17 @@ void NavMeshTesterTool::handleStep()
{ {
if (m_nsmoothPath < MAX_SMOOTH) if (m_nsmoothPath < MAX_SMOOTH)
{ {
vcopy(&m_smoothPath[m_nsmoothPath*3], startPos); rcVcopy(&m_smoothPath[m_nsmoothPath*3], startPos);
m_nsmoothPath++; m_nsmoothPath++;
// Hack to make the dotted path not visible during off-mesh connection. // Hack to make the dotted path not visible during off-mesh connection.
if (m_nsmoothPath & 1) if (m_nsmoothPath & 1)
{ {
vcopy(&m_smoothPath[m_nsmoothPath*3], startPos); rcVcopy(&m_smoothPath[m_nsmoothPath*3], startPos);
m_nsmoothPath++; m_nsmoothPath++;
} }
} }
// Move position at the other side of the off-mesh link. // Move position at the other side of the off-mesh link.
vcopy(m_iterPos, endPos); rcVcopy(m_iterPos, endPos);
float h; float h;
m_navMesh->getPolyHeight(m_pathIterPolys[0], m_iterPos, &h); m_navMesh->getPolyHeight(m_pathIterPolys[0], m_iterPos, &h);
m_iterPos[1] = h; m_iterPos[1] = h;
@ -409,7 +409,7 @@ void NavMeshTesterTool::handleStep()
// Store results. // Store results.
if (m_nsmoothPath < MAX_SMOOTH) if (m_nsmoothPath < MAX_SMOOTH)
{ {
vcopy(&m_smoothPath[m_nsmoothPath*3], m_iterPos); rcVcopy(&m_smoothPath[m_nsmoothPath*3], m_iterPos);
m_nsmoothPath++; m_nsmoothPath++;
} }
@ -473,7 +473,7 @@ void NavMeshTesterTool::recalc()
m_nsmoothPath = 0; m_nsmoothPath = 0;
vcopy(&m_smoothPath[m_nsmoothPath*3], iterPos); rcVcopy(&m_smoothPath[m_nsmoothPath*3], iterPos);
m_nsmoothPath++; m_nsmoothPath++;
// Move towards target a small advancement at a time until target reached or // Move towards target a small advancement at a time until target reached or
@ -494,15 +494,15 @@ void NavMeshTesterTool::recalc()
// Find movement delta. // Find movement delta.
float delta[3], len; float delta[3], len;
vsub(delta, steerPos, iterPos); rcVsub(delta, steerPos, iterPos);
len = sqrtf(vdot(delta,delta)); len = sqrtf(rcVdot(delta,delta));
// If the steer target is end of path or off-mesh link, do not move past the location. // If the steer target is end of path or off-mesh link, do not move past the location.
if ((endOfPath || offMeshConnection) && len < STEP_SIZE) if ((endOfPath || offMeshConnection) && len < STEP_SIZE)
len = 1; len = 1;
else else
len = STEP_SIZE / len; len = STEP_SIZE / len;
float moveTgt[3]; float moveTgt[3];
vmad(moveTgt, iterPos, delta, len); rcVmad(moveTgt, iterPos, delta, len);
// Move // Move
float result[3]; float result[3];
@ -517,16 +517,16 @@ void NavMeshTesterTool::recalc()
npolys -= n; npolys -= n;
} }
// Update position. // Update position.
vcopy(iterPos, result); rcVcopy(iterPos, result);
// Handle end of path and off-mesh links when close enough. // Handle end of path and off-mesh links when close enough.
if (endOfPath && inRange(iterPos, steerPos, SLOP, 1.0f)) if (endOfPath && inRange(iterPos, steerPos, SLOP, 1.0f))
{ {
// Reached end of path. // Reached end of path.
vcopy(iterPos, targetPos); rcVcopy(iterPos, targetPos);
if (m_nsmoothPath < MAX_SMOOTH) if (m_nsmoothPath < MAX_SMOOTH)
{ {
vcopy(&m_smoothPath[m_nsmoothPath*3], iterPos); rcVcopy(&m_smoothPath[m_nsmoothPath*3], iterPos);
m_nsmoothPath++; m_nsmoothPath++;
} }
break; break;
@ -551,17 +551,17 @@ void NavMeshTesterTool::recalc()
{ {
if (m_nsmoothPath < MAX_SMOOTH) if (m_nsmoothPath < MAX_SMOOTH)
{ {
vcopy(&m_smoothPath[m_nsmoothPath*3], startPos); rcVcopy(&m_smoothPath[m_nsmoothPath*3], startPos);
m_nsmoothPath++; m_nsmoothPath++;
// Hack to make the dotted path not visible during off-mesh connection. // Hack to make the dotted path not visible during off-mesh connection.
if (m_nsmoothPath & 1) if (m_nsmoothPath & 1)
{ {
vcopy(&m_smoothPath[m_nsmoothPath*3], startPos); rcVcopy(&m_smoothPath[m_nsmoothPath*3], startPos);
m_nsmoothPath++; m_nsmoothPath++;
} }
} }
// Move position at the other side of the off-mesh link. // Move position at the other side of the off-mesh link.
vcopy(iterPos, endPos); rcVcopy(iterPos, endPos);
float h; float h;
m_navMesh->getPolyHeight(polys[0], iterPos, &h); m_navMesh->getPolyHeight(polys[0], iterPos, &h);
iterPos[1] = h; iterPos[1] = h;
@ -571,7 +571,7 @@ void NavMeshTesterTool::recalc()
// Store results. // Store results.
if (m_nsmoothPath < MAX_SMOOTH) if (m_nsmoothPath < MAX_SMOOTH)
{ {
vcopy(&m_smoothPath[m_nsmoothPath*3], iterPos); rcVcopy(&m_smoothPath[m_nsmoothPath*3], iterPos);
m_nsmoothPath++; m_nsmoothPath++;
} }
} }
@ -628,7 +628,7 @@ void NavMeshTesterTool::recalc()
if (t > 1) if (t > 1)
{ {
// No hit // No hit
vcopy(m_hitPos, m_epos); rcVcopy(m_hitPos, m_epos);
m_hitResult = false; m_hitResult = false;
} }
else else
@ -645,7 +645,7 @@ void NavMeshTesterTool::recalc()
} }
m_hitResult = true; m_hitResult = true;
} }
vcopy(&m_straightPath[3], m_hitPos); rcVcopy(&m_straightPath[3], m_hitPos);
} }
} }
else if (m_toolMode == TOOLMODE_DISTANCE_TO_WALL) else if (m_toolMode == TOOLMODE_DISTANCE_TO_WALL)

View File

@ -99,7 +99,7 @@ void OffMeshConnectionTool::handleClick(const float* p, bool shift)
for (int i = 0; i < geom->getOffMeshConnectionCount()*2; ++i) for (int i = 0; i < geom->getOffMeshConnectionCount()*2; ++i)
{ {
const float* v = &verts[i*3]; const float* v = &verts[i*3];
float d = vdistSqr(p, v); float d = rcVdistSqr(p, v);
if (d < nearestDist) if (d < nearestDist)
{ {
nearestDist = d; nearestDist = d;
@ -118,7 +118,7 @@ void OffMeshConnectionTool::handleClick(const float* p, bool shift)
// Create // Create
if (!m_hitPosSet) if (!m_hitPosSet)
{ {
vcopy(m_hitPos, p); rcVcopy(m_hitPos, p);
m_hitPosSet = true; m_hitPosSet = true;
} }
else else

View File

@ -159,8 +159,8 @@ void Sample_Debug::handleRender()
duDebugDrawNavMeshPoly(&dd, m_navMesh, m_ref, duRGBA(255,0,0,128)); duDebugDrawNavMeshPoly(&dd, m_navMesh, m_ref, duRGBA(255,0,0,128));
float bmin[3], bmax[3]; float bmin[3], bmax[3];
vsub(bmin, m_center, m_ext); rcVsub(bmin, m_center, m_ext);
vadd(bmax, m_center, m_ext); rcVadd(bmax, m_center, m_ext);
duDebugDrawBoxWire(&dd, bmin[0],bmin[1],bmin[2], bmax[0],bmax[1],bmax[2], duRGBA(255,255,255,128), 1.0f); duDebugDrawBoxWire(&dd, bmin[0],bmin[1],bmin[2], bmax[0],bmax[1],bmax[2], duRGBA(255,255,255,128), 1.0f);
duDebugDrawCross(&dd, m_center[0], m_center[1], m_center[2], 1.0f, duRGBA(255,255,255,128), 2.0f); duDebugDrawCross(&dd, m_center[0], m_center[1], m_center[2], 1.0f, duRGBA(255,255,255,128), 2.0f);

View File

@ -370,8 +370,8 @@ bool Sample_SoloMeshSimple::handleBuild()
// Set the area where the navigation will be build. // Set the area where the navigation will be build.
// Here the bounds of the input mesh are used, but the // Here the bounds of the input mesh are used, but the
// area could be specified by an user defined box, etc. // area could be specified by an user defined box, etc.
vcopy(m_cfg.bmin, bmin); rcVcopy(m_cfg.bmin, bmin);
vcopy(m_cfg.bmax, bmax); rcVcopy(m_cfg.bmax, bmax);
rcCalcGridSize(m_cfg.bmin, m_cfg.bmax, m_cfg.cs, &m_cfg.width, &m_cfg.height); rcCalcGridSize(m_cfg.bmin, m_cfg.bmax, m_cfg.cs, &m_cfg.width, &m_cfg.height);
// Reset build times gathering. // Reset build times gathering.
@ -622,8 +622,8 @@ bool Sample_SoloMeshSimple::handleBuild()
params.walkableHeight = m_agentHeight; params.walkableHeight = m_agentHeight;
params.walkableRadius = m_agentRadius; params.walkableRadius = m_agentRadius;
params.walkableClimb = m_agentMaxClimb; params.walkableClimb = m_agentMaxClimb;
vcopy(params.bmin, m_pmesh->bmin); rcVcopy(params.bmin, m_pmesh->bmin);
vcopy(params.bmax, m_pmesh->bmax); rcVcopy(params.bmax, m_pmesh->bmax);
params.cs = m_cfg.cs; params.cs = m_cfg.cs;
params.ch = m_cfg.ch; params.ch = m_cfg.ch;

View File

@ -81,7 +81,7 @@ public:
virtual void handleClick(const float* p, bool /*shift*/) virtual void handleClick(const float* p, bool /*shift*/)
{ {
m_hitPosSet = true; m_hitPosSet = true;
vcopy(m_hitPos,p); rcVcopy(m_hitPos,p);
if (m_sample) if (m_sample)
m_sample->setHighlightedTile(m_hitPos); m_sample->setHighlightedTile(m_hitPos);
} }
@ -716,8 +716,8 @@ bool Sample_SoloMeshTiled::handleBuild()
// Set the area where the navigation will be build. // Set the area where the navigation will be build.
// Here the bounds of the input mesh are used, but the // Here the bounds of the input mesh are used, but the
// area could be specified by an user defined box, etc. // area could be specified by an user defined box, etc.
vcopy(m_cfg.bmin, bmin); rcVcopy(m_cfg.bmin, bmin);
vcopy(m_cfg.bmax, bmax); rcVcopy(m_cfg.bmax, bmax);
rcCalcGridSize(m_cfg.bmin, m_cfg.bmax, m_cfg.cs, &m_cfg.width, &m_cfg.height); rcCalcGridSize(m_cfg.bmin, m_cfg.bmax, m_cfg.cs, &m_cfg.width, &m_cfg.height);
// Reset build times gathering. // Reset build times gathering.
@ -735,8 +735,8 @@ bool Sample_SoloMeshTiled::handleBuild()
rcGetLog()->log(RC_LOG_ERROR, "buildTiledNavigation: Out of memory 'tileSet'."); rcGetLog()->log(RC_LOG_ERROR, "buildTiledNavigation: Out of memory 'tileSet'.");
return false; return false;
} }
vcopy(m_tileSet->bmin, m_cfg.bmin); rcVcopy(m_tileSet->bmin, m_cfg.bmin);
vcopy(m_tileSet->bmax, m_cfg.bmax); rcVcopy(m_tileSet->bmax, m_cfg.bmax);
m_tileSet->cs = m_cfg.cs; m_tileSet->cs = m_cfg.cs;
m_tileSet->ch = m_cfg.ch; m_tileSet->ch = m_cfg.ch;
m_tileSet->width = (m_cfg.width + m_cfg.tileSize-1) / m_cfg.tileSize; m_tileSet->width = (m_cfg.width + m_cfg.tileSize-1) / m_cfg.tileSize;
@ -1081,8 +1081,8 @@ bool Sample_SoloMeshTiled::handleBuild()
params.walkableHeight = m_agentHeight; params.walkableHeight = m_agentHeight;
params.walkableRadius = m_agentRadius; params.walkableRadius = m_agentRadius;
params.walkableClimb = m_agentMaxClimb; params.walkableClimb = m_agentMaxClimb;
vcopy(params.bmin, m_pmesh->bmin); rcVcopy(params.bmin, m_pmesh->bmin);
vcopy(params.bmax, m_pmesh->bmax); rcVcopy(params.bmax, m_pmesh->bmax);
params.cs = m_cfg.cs; params.cs = m_cfg.cs;
params.ch = m_cfg.ch; params.ch = m_cfg.ch;

View File

@ -115,7 +115,7 @@ public:
virtual void handleClick(const float* p, bool shift) virtual void handleClick(const float* p, bool shift)
{ {
m_hitPosSet = true; m_hitPosSet = true;
vcopy(m_hitPos,p); rcVcopy(m_hitPos,p);
if (m_sample) if (m_sample)
{ {
if (shift) if (shift)
@ -509,7 +509,7 @@ bool Sample_TileMesh::handleBuild()
} }
dtNavMeshParams params; dtNavMeshParams params;
vcopy(params.orig, m_geom->getMeshBoundsMin()); rcVcopy(params.orig, m_geom->getMeshBoundsMin());
params.tileWidth = m_tileSize*m_cellSize; params.tileWidth = m_tileSize*m_cellSize;
params.tileHeight = m_tileSize*m_cellSize; params.tileHeight = m_tileSize*m_cellSize;
params.maxTiles = m_maxTiles; params.maxTiles = m_maxTiles;
@ -692,8 +692,8 @@ unsigned char* Sample_TileMesh::buildTileMesh(const int tx, const int ty, const
m_cfg.detailSampleDist = m_detailSampleDist < 0.9f ? 0 : m_cellSize * m_detailSampleDist; m_cfg.detailSampleDist = m_detailSampleDist < 0.9f ? 0 : m_cellSize * m_detailSampleDist;
m_cfg.detailSampleMaxError = m_cellHeight * m_detailSampleMaxError; m_cfg.detailSampleMaxError = m_cellHeight * m_detailSampleMaxError;
vcopy(m_cfg.bmin, bmin); rcVcopy(m_cfg.bmin, bmin);
vcopy(m_cfg.bmax, bmax); rcVcopy(m_cfg.bmax, bmax);
m_cfg.bmin[0] -= m_cfg.borderSize*m_cfg.cs; m_cfg.bmin[0] -= m_cfg.borderSize*m_cfg.cs;
m_cfg.bmin[2] -= m_cfg.borderSize*m_cfg.cs; m_cfg.bmin[2] -= m_cfg.borderSize*m_cfg.cs;
m_cfg.bmax[0] += m_cfg.borderSize*m_cfg.cs; m_cfg.bmax[0] += m_cfg.borderSize*m_cfg.cs;
@ -960,8 +960,8 @@ unsigned char* Sample_TileMesh::buildTileMesh(const int tx, const int ty, const
params.walkableClimb = m_agentMaxClimb; params.walkableClimb = m_agentMaxClimb;
params.tileX = tx; params.tileX = tx;
params.tileY = ty; params.tileY = ty;
vcopy(params.bmin, bmin); rcVcopy(params.bmin, bmin);
vcopy(params.bmax, bmax); rcVcopy(params.bmax, bmax);
params.cs = m_cfg.cs; params.cs = m_cfg.cs;
params.ch = m_cfg.ch; params.ch = m_cfg.ch;
params.tileSize = m_cfg.tileSize; params.tileSize = m_cfg.tileSize;

View File

@ -234,8 +234,8 @@ void TestCase::handleRender()
for (Test* iter = m_tests; iter; iter = iter->next) for (Test* iter = m_tests; iter; iter = iter->next)
{ {
float dir[3]; float dir[3];
vsub(dir, iter->epos, iter->spos); rcVsub(dir, iter->epos, iter->spos);
vnormalize(dir); rcVnormalize(dir);
glColor4ub(128,25,0,192); glColor4ub(128,25,0,192);
glVertex3f(iter->spos[0],iter->spos[1]-0.3f,iter->spos[2]); glVertex3f(iter->spos[0],iter->spos[1]-0.3f,iter->spos[2]);
glVertex3f(iter->spos[0],iter->spos[1]+0.3f,iter->spos[2]); glVertex3f(iter->spos[0],iter->spos[1]+0.3f,iter->spos[2]);
@ -273,20 +273,20 @@ bool TestCase::handleRenderOverlay(double* proj, double* model, int* view)
float pt[3], dir[3]; float pt[3], dir[3];
if (iter->nstraight) if (iter->nstraight)
{ {
vcopy(pt, &iter->straight[3]); rcVcopy(pt, &iter->straight[3]);
if (vdist(pt, iter->spos) > LABEL_DIST) if (rcVdist(pt, iter->spos) > LABEL_DIST)
{ {
vsub(dir, pt, iter->spos); rcVsub(dir, pt, iter->spos);
vnormalize(dir); rcVnormalize(dir);
vmad(pt, iter->spos, dir, LABEL_DIST); rcVmad(pt, iter->spos, dir, LABEL_DIST);
} }
pt[1]+=0.5f; pt[1]+=0.5f;
} }
else else
{ {
vsub(dir, iter->epos, iter->spos); rcVsub(dir, iter->epos, iter->spos);
vnormalize(dir); rcVnormalize(dir);
vmad(pt, iter->spos, dir, LABEL_DIST); rcVmad(pt, iter->spos, dir, LABEL_DIST);
pt[1]+=0.5f; pt[1]+=0.5f;
} }