mirror of
https://github.com/Mauler125/r5sdk.git
synced 2025-02-09 19:15:03 +01:00
Recast: traverse over every tile in the array
dtNavMesh::getTileCount returns the total number of added tiles, the issue with this is that if the navmesh gets pruned, that means disabling unlinked polygons and removing dead tiles, then some tile instances in the m_tiles array may become empty. Less tiles will be installed and since there are null tiles in between, we won't be traversing each tile.
This commit is contained in:
parent
c9c687fc73
commit
9f430a455e
@ -192,7 +192,7 @@ void CAI_Utility::DrawNavMeshBVTree(
|
||||
return; // NavMesh for hull not loaded.
|
||||
|
||||
OverlayBox_t::Transforms vTransforms;
|
||||
for (int i = iBVTreeIndex, nt = pMesh->getTileCount(); i < nt; ++i)
|
||||
for (int i = iBVTreeIndex, nt = pMesh->getMaxTiles(); i < nt; ++i)
|
||||
{
|
||||
if (nTileRange > 0 && i > nTileRange)
|
||||
break;
|
||||
@ -255,7 +255,7 @@ void CAI_Utility::DrawNavMeshPortals(const dtNavMesh* pMesh,
|
||||
if (!pMesh)
|
||||
return; // NavMesh for hull not loaded.
|
||||
|
||||
for (int i = iPortalIndex, nt = pMesh->getTileCount(); i < nt; ++i)
|
||||
for (int i = iPortalIndex, nt = pMesh->getMaxTiles(); i < nt; ++i)
|
||||
{
|
||||
if (nTileRange > 0 && i > nTileRange)
|
||||
break;
|
||||
@ -375,7 +375,7 @@ void CAI_Utility::DrawNavMeshPolys(const dtNavMesh* pMesh,
|
||||
if (!pMesh)
|
||||
return; // NavMesh for hull not loaded.
|
||||
|
||||
for (int i = iPolyIndex; i < pMesh->getTileCount(); ++i)
|
||||
for (int i = iPolyIndex; i < pMesh->getMaxTiles(); ++i)
|
||||
{
|
||||
if (nTileRange > 0 && i > nTileRange)
|
||||
break;
|
||||
@ -464,7 +464,7 @@ void CAI_Utility::DrawNavMeshPolyBoundaries(const dtNavMesh* pMesh,
|
||||
|
||||
const bool bDrawInner = navmesh_draw_poly_bounds_inner.GetBool();
|
||||
|
||||
for (int i = iBoundaryIndex, nt = pMesh->getTileCount(); i < nt; ++i)
|
||||
for (int i = iBoundaryIndex, nt = pMesh->getMaxTiles(); i < nt; ++i)
|
||||
{
|
||||
if (nTileRange > 0 && i > nTileRange)
|
||||
break;
|
||||
|
@ -844,7 +844,7 @@ void Editor::buildStaticPathingData()
|
||||
|
||||
void Editor::connectOffMeshLinks()
|
||||
{
|
||||
for (int i = 0; i < m_navMesh->getTileCount(); i++)
|
||||
for (int i = 0; i < m_navMesh->getMaxTiles(); i++)
|
||||
{
|
||||
dtMeshTile* target = m_navMesh->getTile(i);
|
||||
const dtMeshHeader* header = target->header;
|
||||
|
@ -706,20 +706,20 @@ void Editor_TileMesh::buildTile(const float* pos)
|
||||
{
|
||||
// If there are external off-mesh links landing on
|
||||
// this tile, connect them.
|
||||
for (int i = 0; i < m_navMesh->getTileCount(); i++)
|
||||
for (int i = 0; i < m_navMesh->getMaxTiles(); i++)
|
||||
{
|
||||
dtMeshTile* target = m_navMesh->getTile(i);
|
||||
const dtMeshHeader* targetHeader = target->header;
|
||||
|
||||
if (!targetHeader)
|
||||
continue;
|
||||
|
||||
const dtTileRef targetRef = m_navMesh->getTileRef(target);
|
||||
|
||||
// Connection to self has already been done above.
|
||||
if (targetRef == tileRef)
|
||||
continue;
|
||||
|
||||
const dtMeshHeader* targetHeader = target->header;
|
||||
|
||||
if (!targetHeader)
|
||||
continue;
|
||||
|
||||
for (int j = 0; j < targetHeader->offMeshConCount; j++)
|
||||
{
|
||||
const dtOffMeshConnection* con = &target->offMeshCons[j];
|
||||
|
@ -159,7 +159,7 @@ static void floodNavmesh(dtNavMesh* nav, NavmeshFlags* flags, dtPolyRef start, u
|
||||
|
||||
static void disableUnvisitedPolys(dtNavMesh* nav, NavmeshFlags* flags)
|
||||
{
|
||||
for (int i = 0; i < nav->getTileCount(); ++i)
|
||||
for (int i = 0; i < nav->getMaxTiles(); ++i)
|
||||
{
|
||||
const dtMeshTile* tile = nav->getTile(i);
|
||||
dtMeshHeader* header = tile->header;
|
||||
@ -197,7 +197,7 @@ static void disableUnvisitedPolys(dtNavMesh* nav, NavmeshFlags* flags)
|
||||
|
||||
static void removeUnlinkedTiles(dtNavMesh* nav)
|
||||
{
|
||||
for (int i = nav->getTileCount(); i-- > 0;)
|
||||
for (int i = nav->getMaxTiles(); i-- > 0;)
|
||||
{
|
||||
const dtMeshTile* tile = nav->getTile(i);
|
||||
const dtMeshHeader* header = tile->header;
|
||||
|
@ -25,13 +25,16 @@ bool duDumpTraverseLinkDetail(const dtNavMesh& mesh, const dtNavMeshQuery* query
|
||||
rdTempVector<float> elevationVec;
|
||||
|
||||
int totTraverseLinkCount = 0;
|
||||
const int tileCount = mesh.getTileCount();
|
||||
const int tileCount = mesh.getMaxTiles();
|
||||
|
||||
for (int i = 0; i < tileCount; i++)
|
||||
{
|
||||
const dtMeshTile* tile = mesh.getTile(i);
|
||||
const dtMeshHeader* header = tile->header;
|
||||
|
||||
if (!header)
|
||||
continue;
|
||||
|
||||
bool writeTileDetail = false;
|
||||
|
||||
for (int j = 0; j < header->polyCount; ++j)
|
||||
|
Loading…
x
Reference in New Issue
Block a user