diff options
| author | Shauren <shauren.trinity@gmail.com> | 2025-11-06 18:34:58 +0100 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2025-11-06 18:34:58 +0100 |
| commit | a9c752af97f3457101059d173a8974764db2a7d5 (patch) | |
| tree | 98bdfe490d70e605f7eb6cb7b7c6bea3d665afaa /src/server/game/Maps | |
| parent | f439120b1f8c4f5a5c3fc0deb6aa01bf971e4fdf (diff) | |
Core/MMaps: Allow loading mmap meshes per map instance
Diffstat (limited to 'src/server/game/Maps')
| -rw-r--r-- | src/server/game/Maps/Map.cpp | 1 | ||||
| -rw-r--r-- | src/server/game/Maps/TerrainMgr.cpp | 16 | ||||
| -rw-r--r-- | src/server/game/Maps/TerrainMgr.h | 3 |
3 files changed, 14 insertions, 6 deletions
diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp index 3a8e3c4cc56..ab5c83ee077 100644 --- a/src/server/game/Maps/Map.cpp +++ b/src/server/game/Maps/Map.cpp @@ -290,6 +290,7 @@ void Map::EnsureGridCreated(GridCoord const& p) int gy = (MAX_NUMBER_OF_GRIDS - 1) - p.y_coord; m_terrain->LoadMapAndVMap(gx, gy); + m_terrain->LoadMMap(GetInstanceId(), gx, gy); } } diff --git a/src/server/game/Maps/TerrainMgr.cpp b/src/server/game/Maps/TerrainMgr.cpp index 19dd852baca..4233f08e072 100644 --- a/src/server/game/Maps/TerrainMgr.cpp +++ b/src/server/game/Maps/TerrainMgr.cpp @@ -25,7 +25,6 @@ #include "MMapManager.h" #include "PhasingHandler.h" #include "Random.h" -#include "ScriptMgr.h" #include "Util.h" #include "VMapFactory.h" #include "VMapManager.h" @@ -144,7 +143,7 @@ bool TerrainInfo::ExistVMap(uint32 mapid, int32 gx, int32 gy) bool TerrainInfo::HasChildTerrainGridFile(uint32 mapId, int32 gx, int32 gy) const { - auto childMapItr = std::find_if(_childTerrain.begin(), _childTerrain.end(), [mapId](std::shared_ptr<TerrainInfo> const& childTerrain) { return childTerrain->GetId() == mapId; }); + auto childMapItr = std::ranges::find(_childTerrain, mapId, [](std::shared_ptr<TerrainInfo> const& childTerrain) { return childTerrain->GetId(); }); return childMapItr != _childTerrain.end() && (*childMapItr)->_gridFileExists[GetBitsetIndex(gx, gy)]; } @@ -171,11 +170,18 @@ void TerrainInfo::LoadMMapInstance(uint32 mapId, uint32 instanceId) childTerrain->LoadMMapInstanceImpl(mapId, instanceId); } +void TerrainInfo::LoadMMap(uint32 instanceId, int32 gx, int32 gy) +{ + LoadMMapImpl(instanceId, gx, gy); + + for (std::shared_ptr<TerrainInfo> const& childTerrain : _childTerrain) + childTerrain->LoadMMapImpl(instanceId, gx, gy); +} + void TerrainInfo::LoadMapAndVMapImpl(int32 gx, int32 gy) { LoadMap(gx, gy); LoadVMap(gx, gy); - LoadMMap(gx, gy); for (std::shared_ptr<TerrainInfo> const& childTerrain : _childTerrain) childTerrain->LoadMapAndVMapImpl(gx, gy); @@ -233,12 +239,12 @@ void TerrainInfo::LoadVMap(int32 gx, int32 gy) } } -void TerrainInfo::LoadMMap(int32 gx, int32 gy) +void TerrainInfo::LoadMMapImpl(uint32 instanceId, int32 gx, int32 gy) { if (!DisableMgr::IsPathfindingEnabled(GetId())) return; - switch (MMAP::LoadResult mmapLoadResult = MMAP::MMapManager::instance()->loadMap(sWorld->GetDataPath(), GetId(), gx, gy)) + switch (MMAP::LoadResult mmapLoadResult = MMAP::MMapManager::instance()->loadMap(sWorld->GetDataPath(), GetId(), instanceId, gx, gy)) { case MMAP::LoadResult::Success: TC_LOG_DEBUG("mmaps.tiles", "MMAP loaded name:{}, id:{}, x:{}, y:{} (mmap rep.: x:{}, y:{})", GetMapName(), GetId(), gx, gy, gx, gy); diff --git a/src/server/game/Maps/TerrainMgr.h b/src/server/game/Maps/TerrainMgr.h index b4b5c5e4f89..f0e35556f22 100644 --- a/src/server/game/Maps/TerrainMgr.h +++ b/src/server/game/Maps/TerrainMgr.h @@ -58,13 +58,14 @@ public: void LoadMapAndVMap(int32 gx, int32 gy); void LoadMMapInstance(uint32 mapId, uint32 instanceId); + void LoadMMap(uint32 instanceId, int32 gx, int32 gy); private: void LoadMapAndVMapImpl(int32 gx, int32 gy); void LoadMMapInstanceImpl(uint32 mapId, uint32 instanceId); void LoadMap(int32 gx, int32 gy); void LoadVMap(int32 gx, int32 gy); - void LoadMMap(int32 gx, int32 gy); + void LoadMMapImpl(uint32 instanceId, int32 gx, int32 gy); public: void UnloadMap(int32 gx, int32 gy); |
