diff --git a/Source/Engine/Navigation/NavMeshBuilder.cpp b/Source/Engine/Navigation/NavMeshBuilder.cpp index 8d0bbafeb..01441d831 100644 --- a/Source/Engine/Navigation/NavMeshBuilder.cpp +++ b/Source/Engine/Navigation/NavMeshBuilder.cpp @@ -590,18 +590,31 @@ bool GenerateTile(NavMesh* navMesh, NavMeshRuntime* runtime, int32 x, int32 y, B ScopeLock lock(runtime->Locker); - // Add tile data navMesh->IsDataDirty = true; - auto& tile = navMesh->Data.Tiles.AddOne(); - tile.PosX = x; - tile.PosY = y; - tile.Layer = layer; + NavMeshTileData* tile = nullptr; + for (int32 i = 0; i < navMesh->Data.Tiles.Count(); i++) + { + auto& e = navMesh->Data.Tiles[i]; + if (e.PosX == x && e.PosY == y && e.Layer == layer) + { + tile = &e; + break; + } + } + if (!tile) + { + // Add new tile + tile = &navMesh->Data.Tiles.AddOne(); + tile->PosX = x; + tile->PosY = y; + tile->Layer = layer; + } - // Copy data - tile.Data.Copy(navData, navDataSize); + // Copy data to the tile + tile->Data.Copy(navData, navDataSize); // Add tile to navmesh - runtime->AddTile(navMesh, tile); + runtime->AddTile(navMesh, *tile); } dtFree(navData); diff --git a/Source/Engine/Navigation/NavMeshRuntime.cpp b/Source/Engine/Navigation/NavMeshRuntime.cpp index d81f46e06..d576f3607 100644 --- a/Source/Engine/Navigation/NavMeshRuntime.cpp +++ b/Source/Engine/Navigation/NavMeshRuntime.cpp @@ -13,6 +13,7 @@ #define MAX_NODES 2048 #define USE_DATA_LINK 0 #define USE_NAV_MESH_ALLOC 1 +// TODO: try not using USE_NAV_MESH_ALLOC #define DEFAULT_NAV_QUERY_EXTENT_HORIZONTAL 50.0f #define DEFAULT_NAV_QUERY_EXTENT_VERTICAL 250.0f