From 122ee3a7a11b196a26b6cdc60400b01efca56b41 Mon Sep 17 00:00:00 2001 From: Mikko Mononen Date: Thu, 8 Jul 2010 12:04:43 +0000 Subject: [PATCH] Issue 86:Tiled world consisting of one tile - dtNavMesh::init fails. ___NOTE: dtPolyRef format changed___ --- Detour/Include/DetourNavMesh.h | 6 +++--- Detour/Source/DetourNavMesh.cpp | 8 ++++++-- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/Detour/Include/DetourNavMesh.h b/Detour/Include/DetourNavMesh.h index c8d998a..606c096 100644 --- a/Detour/Include/DetourNavMesh.h +++ b/Detour/Include/DetourNavMesh.h @@ -452,14 +452,14 @@ public: // Encodes a tile id. inline dtPolyRef encodePolyId(unsigned int salt, unsigned int it, unsigned int ip) const { - return (salt << (m_polyBits+m_tileBits)) | ((it+1) << m_polyBits) | ip; + return (salt << (m_polyBits+m_tileBits)) | (it << m_polyBits) | ip; } // Decodes a tile id. inline void decodePolyId(dtPolyRef ref, unsigned int& salt, unsigned int& it, unsigned int& ip) const { salt = (ref >> (m_polyBits+m_tileBits)) & ((1<> m_polyBits) - 1) & ((1<> m_polyBits) & ((1<> m_polyBits) - 1) & ((1<> m_polyBits) & ((1<= 0; --i) { + m_tiles[i].salt = 1; m_tiles[i].next = m_nextFree; m_nextFree = &m_tiles[i]; } @@ -832,8 +833,11 @@ bool dtNavMesh::removeTile(dtTileRef ref, unsigned char** data, int* dataSize) tile->detailTris = 0; tile->bvTree = 0; tile->offMeshCons = 0; - - tile->salt++; + + // Update salt, salt should never be zero. + tile->salt = (tile->salt+1) & ((1<salt == 0) + tile->salt++; // Add to free list. tile->next = m_nextFree;