Allow dtNavMesh m_tileBits and m_polyBits to be zero.
This commit is contained in:
parent
057c3e9bfd
commit
3f0995dc1c
@ -116,17 +116,6 @@ public:
|
||||
// Returns: True if succeed, else false.
|
||||
bool init(const dtNavMesh* nav, const int maxNodes);
|
||||
|
||||
// Sets the pathfinding cost of the specified area.
|
||||
// Params:
|
||||
// area - (in) area ID (0-63).
|
||||
// cost - (int) travel cost of the area.
|
||||
// void setAreaCost(const int area, float cost);
|
||||
|
||||
// Returns the pathfinding cost of the specified area.
|
||||
// Params:
|
||||
// area - (in) area ID (0-63).
|
||||
// float getAreaCost(const int area) const;
|
||||
|
||||
// Finds the nearest navigation polygon around the center location.
|
||||
// Params:
|
||||
// center[3] - (in) The center of the search box.
|
||||
|
@ -202,8 +202,8 @@ bool dtNavMesh::init(const dtNavMeshParams* params)
|
||||
}
|
||||
|
||||
// Init ID generator values.
|
||||
m_tileBits = dtMax((unsigned int)1, dtIlog2(dtNextPow2((unsigned int)params->maxTiles)));
|
||||
m_polyBits = dtMax((unsigned int)1, dtIlog2(dtNextPow2((unsigned int)params->maxPolys)));
|
||||
m_tileBits = dtIlog2(dtNextPow2((unsigned int)params->maxTiles));
|
||||
m_polyBits = dtIlog2(dtNextPow2((unsigned int)params->maxPolys));
|
||||
m_saltBits = 32 - m_tileBits - m_polyBits;
|
||||
if (m_saltBits < 10)
|
||||
return false;
|
||||
|
@ -175,8 +175,37 @@ bool dtNavMeshQuery::closestPointOnPolyInTile(const dtMeshTile* tile, const dtPo
|
||||
const unsigned int ip = (unsigned int)(poly - tile->polys);
|
||||
const dtPolyDetail* pd = &tile->detailMeshes[ip];
|
||||
|
||||
float closestDistSqr = FLT_MAX;
|
||||
// TODO: The commented out version finds 'cylinder distance' instead of 'sphere distance' to the navmesh.
|
||||
// Test and enable.
|
||||
/*
|
||||
// Clamp point to be inside the polygon.
|
||||
float verts[DT_VERTS_PER_POLYGON*3];
|
||||
float edged[DT_VERTS_PER_POLYGON];
|
||||
float edget[DT_VERTS_PER_POLYGON];
|
||||
const int nv = poly->vertCount;
|
||||
for (int i = 0; i < nv; ++i)
|
||||
dtVcopy(&verts[i*3], &tile->verts[poly->verts[i]*3]);
|
||||
|
||||
dtVcopy(closest, pos);
|
||||
if (!dtDistancePtPolyEdgesSqr(pos, verts, nv, edged, edget))
|
||||
{
|
||||
// Point is outside the polygon, dtClamp to nearest edge.
|
||||
float dmin = FLT_MAX;
|
||||
int imin = -1;
|
||||
for (int i = 0; i < nv; ++i)
|
||||
{
|
||||
if (edged[i] < dmin)
|
||||
{
|
||||
dmin = edged[i];
|
||||
imin = i;
|
||||
}
|
||||
}
|
||||
const float* va = &verts[imin*3];
|
||||
const float* vb = &verts[((imin+1)%nv)*3];
|
||||
dtVlerp(closest, va, vb, edget[imin]);
|
||||
}
|
||||
|
||||
// Find height at the location.
|
||||
for (int j = 0; j < pd->triCount; ++j)
|
||||
{
|
||||
const unsigned char* t = &tile->detailTris[(pd->triBase+j)*4];
|
||||
@ -188,9 +217,31 @@ bool dtNavMeshQuery::closestPointOnPolyInTile(const dtMeshTile* tile, const dtPo
|
||||
else
|
||||
v[k] = &tile->detailVerts[(pd->vertBase+(t[k]-poly->vertCount))*3];
|
||||
}
|
||||
float h;
|
||||
if (dtClosestHeightPointTriangle(pos, v[0], v[1], v[2], h))
|
||||
{
|
||||
closest[1] = h;
|
||||
break;
|
||||
}
|
||||
}
|
||||
*/
|
||||
float closestDistSqr = FLT_MAX;
|
||||
for (int j = 0; j < pd->triCount; ++j)
|
||||
{
|
||||
const unsigned char* t = &tile->detailTris[(pd->triBase+j)*4];
|
||||
const float* v[3];
|
||||
for (int k = 0; k < 3; ++k)
|
||||
{
|
||||
if (t[k] < poly->vertCount)
|
||||
v[k] = &tile->verts[poly->verts[t[k]]*3];
|
||||
else
|
||||
v[k] = &tile->detailVerts[(pd->vertBase+(t[k]-poly->vertCount))*3];
|
||||
}
|
||||
|
||||
float pt[3];
|
||||
dtClosestPtPointTriangle(pt, pos, v[0], v[1], v[2]);
|
||||
float d = dtVdistSqr(pos, pt);
|
||||
|
||||
if (d < closestDistSqr)
|
||||
{
|
||||
dtVcopy(closest, pt);
|
||||
@ -297,21 +348,6 @@ bool dtNavMeshQuery::getPolyHeight(dtPolyRef ref, const float* pos, float* heigh
|
||||
return false;
|
||||
}
|
||||
|
||||
/*
|
||||
void dtNavMeshQuery::setAreaCost(const int area, float cost)
|
||||
{
|
||||
if (area >= 0 && area < DT_MAX_AREAS)
|
||||
m_areaCost[area] = cost;
|
||||
}
|
||||
|
||||
float dtNavMeshQuery::getAreaCost(const int area) const
|
||||
{
|
||||
if (area >= 0 && area < DT_MAX_AREAS)
|
||||
return m_areaCost[area];
|
||||
return -1;
|
||||
}
|
||||
*/
|
||||
|
||||
dtPolyRef dtNavMeshQuery::findNearestPoly(const float* center, const float* extents,
|
||||
const dtQueryFilter* filter, float* nearestPt) const
|
||||
{
|
||||
|
Binary file not shown.
File diff suppressed because it is too large
Load Diff
@ -283,14 +283,14 @@
|
||||
<key>PBXSmartGroupTreeModuleOutlineStateSelectionKey</key>
|
||||
<array>
|
||||
<array>
|
||||
<integer>17</integer>
|
||||
<integer>15</integer>
|
||||
<integer>11</integer>
|
||||
<integer>1</integer>
|
||||
<integer>0</integer>
|
||||
</array>
|
||||
</array>
|
||||
<key>PBXSmartGroupTreeModuleOutlineStateVisibleRectKey</key>
|
||||
<string>{{0, 196}, {264, 660}}</string>
|
||||
<string>{{0, 127}, {264, 660}}</string>
|
||||
</dict>
|
||||
<key>PBXTopSmartGroupGIDs</key>
|
||||
<array/>
|
||||
@ -337,7 +337,7 @@
|
||||
<key>_historyCapacity</key>
|
||||
<integer>0</integer>
|
||||
<key>bookmark</key>
|
||||
<string>6BD402C6122441CB00995864</string>
|
||||
<string>6BD4036912246AD000995864</string>
|
||||
<key>history</key>
|
||||
<array>
|
||||
<string>6BBB4AA5115B4F3400CF791D</string>
|
||||
@ -356,7 +356,6 @@
|
||||
<string>6BAF3CB412116AD9008CFCDF</string>
|
||||
<string>6BAF3E781212869F008CFCDF</string>
|
||||
<string>6BAF404F12140B4E008CFCDF</string>
|
||||
<string>6BAF40F412197F3D008CFCDF</string>
|
||||
<string>6BAF4321121AF998008CFCDF</string>
|
||||
<string>6BAF43FB121C241D008CFCDF</string>
|
||||
<string>6BAF4421121C25E3008CFCDF</string>
|
||||
@ -380,11 +379,6 @@
|
||||
<string>6BA687881222F4DB00730711</string>
|
||||
<string>6BA687CA1222FA9300730711</string>
|
||||
<string>6BA687D81222FC4700730711</string>
|
||||
<string>6BA687E4122300C300730711</string>
|
||||
<string>6BA688091223041E00730711</string>
|
||||
<string>6BA688211223066C00730711</string>
|
||||
<string>6BA6887B1223122200730711</string>
|
||||
<string>6BA688D1122321D800730711</string>
|
||||
<string>6BD4020A1224336600995864</string>
|
||||
<string>6BD4020D1224336600995864</string>
|
||||
<string>6BD4020E1224336600995864</string>
|
||||
@ -408,19 +402,23 @@
|
||||
<string>6BD4028C1224399300995864</string>
|
||||
<string>6BD4029B12243A8000995864</string>
|
||||
<string>6BD4029C12243A8000995864</string>
|
||||
<string>6BD4029D12243A8000995864</string>
|
||||
<string>6BD402A612243C8100995864</string>
|
||||
<string>6BD402AB12243CEA00995864</string>
|
||||
<string>6BD402AC12243CEA00995864</string>
|
||||
<string>6BD402B4122441CB00995864</string>
|
||||
<string>6BD402B5122441CB00995864</string>
|
||||
<string>6BD402B6122441CB00995864</string>
|
||||
<string>6BD402B7122441CB00995864</string>
|
||||
<string>6BD402B8122441CB00995864</string>
|
||||
<string>6BD402B9122441CB00995864</string>
|
||||
<string>6BD402BA122441CB00995864</string>
|
||||
<string>6BD402BB122441CB00995864</string>
|
||||
<string>6BD4020B1224336600995864</string>
|
||||
<string>6BD402C912244B9B00995864</string>
|
||||
<string>6BD402CA12244B9B00995864</string>
|
||||
<string>6BD402CB12244B9B00995864</string>
|
||||
<string>6BD402CC12244B9B00995864</string>
|
||||
<string>6BD4034D122464E100995864</string>
|
||||
<string>6BD4034E122464E100995864</string>
|
||||
<string>6BD40350122464E100995864</string>
|
||||
<string>6BD4035E1224651B00995864</string>
|
||||
<string>6BD4036612246AD000995864</string>
|
||||
<string>6BD4036712246AD000995864</string>
|
||||
</array>
|
||||
<key>prevStack</key>
|
||||
<array>
|
||||
@ -483,7 +481,6 @@
|
||||
<string>6BAF4762121DA31D008CFCDF</string>
|
||||
<string>6BAF4767121DA31D008CFCDF</string>
|
||||
<string>6BAF4768121DA31D008CFCDF</string>
|
||||
<string>6B1C8DDB121EA3470048697F</string>
|
||||
<string>6B1C8E2A121EB6D30048697F</string>
|
||||
<string>6B1C8E2D121EB6D30048697F</string>
|
||||
<string>6BA6874F1222EADA00730711</string>
|
||||
@ -576,8 +573,31 @@
|
||||
<string>6BD402C1122441CB00995864</string>
|
||||
<string>6BD402C2122441CB00995864</string>
|
||||
<string>6BD402C3122441CB00995864</string>
|
||||
<string>6BD402C4122441CB00995864</string>
|
||||
<string>6BD402C5122441CB00995864</string>
|
||||
<string>6BD402CE12244B9B00995864</string>
|
||||
<string>6BD402CF12244B9B00995864</string>
|
||||
<string>6BD402D012244B9B00995864</string>
|
||||
<string>6BD402D112244B9B00995864</string>
|
||||
<string>6BD403251224632E00995864</string>
|
||||
<string>6BD403261224632E00995864</string>
|
||||
<string>6BD403271224632E00995864</string>
|
||||
<string>6BD403281224632E00995864</string>
|
||||
<string>6BD4032D1224634E00995864</string>
|
||||
<string>6BD40336122463B500995864</string>
|
||||
<string>6BD403451224642600995864</string>
|
||||
<string>6BD40353122464E100995864</string>
|
||||
<string>6BD40354122464E100995864</string>
|
||||
<string>6BD40355122464E100995864</string>
|
||||
<string>6BD40356122464E100995864</string>
|
||||
<string>6BD40357122464E100995864</string>
|
||||
<string>6BD40358122464E100995864</string>
|
||||
<string>6BD40359122464E100995864</string>
|
||||
<string>6BD4035A122464E100995864</string>
|
||||
<string>6BD403601224651B00995864</string>
|
||||
<string>6BD403611224651B00995864</string>
|
||||
<string>6BD403621224651B00995864</string>
|
||||
<string>6BD403631224651B00995864</string>
|
||||
<string>6BD4036812246AD000995864</string>
|
||||
</array>
|
||||
</dict>
|
||||
<key>SplitCount</key>
|
||||
@ -591,18 +611,18 @@
|
||||
<key>GeometryConfiguration</key>
|
||||
<dict>
|
||||
<key>Frame</key>
|
||||
<string>{{0, 0}, {994, 434}}</string>
|
||||
<string>{{0, 0}, {994, 471}}</string>
|
||||
<key>RubberWindowFrame</key>
|
||||
<string>0 59 1280 719 0 0 1280 778 </string>
|
||||
</dict>
|
||||
<key>Module</key>
|
||||
<string>PBXNavigatorGroup</string>
|
||||
<key>Proportion</key>
|
||||
<string>434pt</string>
|
||||
<string>471pt</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Proportion</key>
|
||||
<string>239pt</string>
|
||||
<string>202pt</string>
|
||||
<key>Tabs</key>
|
||||
<array>
|
||||
<dict>
|
||||
@ -632,7 +652,7 @@
|
||||
<key>GeometryConfiguration</key>
|
||||
<dict>
|
||||
<key>Frame</key>
|
||||
<string>{{10, 27}, {994, 212}}</string>
|
||||
<string>{{10, 27}, {994, -27}}</string>
|
||||
</dict>
|
||||
<key>Module</key>
|
||||
<string>PBXProjectFindModule</string>
|
||||
@ -670,7 +690,7 @@
|
||||
<key>GeometryConfiguration</key>
|
||||
<dict>
|
||||
<key>Frame</key>
|
||||
<string>{{10, 27}, {994, 212}}</string>
|
||||
<string>{{10, 27}, {994, 175}}</string>
|
||||
<key>RubberWindowFrame</key>
|
||||
<string>0 59 1280 719 0 0 1280 778 </string>
|
||||
</dict>
|
||||
@ -824,9 +844,9 @@
|
||||
<string>Name</string>
|
||||
<real>183</real>
|
||||
<string>Value</string>
|
||||
<real>85</real>
|
||||
<real>168</real>
|
||||
<string>Summary</string>
|
||||
<real>410</real>
|
||||
<real>327</real>
|
||||
</array>
|
||||
<key>Frame</key>
|
||||
<string>{{577, 0}, {703, 144}}</string>
|
||||
@ -892,6 +912,8 @@
|
||||
<integer>5</integer>
|
||||
<key>WindowOrderList</key>
|
||||
<array>
|
||||
<string>6BD40332122463A200995864</string>
|
||||
<string>6BD40333122463A200995864</string>
|
||||
<string>/Users/memon/Code/recastnavigation/RecastDemo/Build/Xcode/Recast.xcodeproj</string>
|
||||
</array>
|
||||
<key>WindowString</key>
|
||||
|
Loading…
x
Reference in New Issue
Block a user