aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Maps/Map.cpp
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2025-01-05 20:22:34 +0100
committerOvahlord <dreadkiller@gmx.de>2025-01-09 20:53:02 +0100
commitd785a48475041fee4bf433bd7640dc192fd16640 (patch)
treecdce82c2c12de1c3987b62f755f6a8f7c053a2aa /src/server/game/Maps/Map.cpp
parent5ed1005afad1d0f3bfe8930bd623c6f6d7b3e0d4 (diff)
Core/Grids: Modernize TypeContainer with variadic template
(cherry picked from commit 401502ea3c5ceca0c6253910035b2949e13746cc)
Diffstat (limited to 'src/server/game/Maps/Map.cpp')
-rw-r--r--src/server/game/Maps/Map.cpp66
1 files changed, 18 insertions, 48 deletions
diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp
index a59394a6cae..34c7f17ab37 100644
--- a/src/server/game/Maps/Map.cpp
+++ b/src/server/game/Maps/Map.cpp
@@ -180,52 +180,21 @@ template<class T>
void Map::AddToGrid(T* obj, Cell const& cell)
{
NGridType* grid = getNGrid(cell.GridX(), cell.GridY());
- if (obj->IsStoredInWorldObjectGridContainer())
- grid->GetGridType(cell.CellX(), cell.CellY()).template AddWorldObject<T>(obj);
- else
- grid->GetGridType(cell.CellX(), cell.CellY()).template AddGridObject<T>(obj);
-}
-
-template<>
-void Map::AddToGrid(Creature* obj, Cell const& cell)
-{
- NGridType* grid = getNGrid(cell.GridX(), cell.GridY());
- if (obj->IsStoredInWorldObjectGridContainer())
- grid->GetGridType(cell.CellX(), cell.CellY()).AddWorldObject(obj);
- else
- grid->GetGridType(cell.CellX(), cell.CellY()).AddGridObject(obj);
-
- obj->SetCurrentCell(cell);
-}
-
-template<>
-void Map::AddToGrid(GameObject* obj, Cell const& cell)
-{
- NGridType* grid = getNGrid(cell.GridX(), cell.GridY());
- grid->GetGridType(cell.CellX(), cell.CellY()).AddGridObject(obj);
-
- obj->SetCurrentCell(cell);
-}
-
-template<>
-void Map::AddToGrid(DynamicObject* obj, Cell const& cell)
-{
- NGridType* grid = getNGrid(cell.GridX(), cell.GridY());
- if (obj->IsStoredInWorldObjectGridContainer())
- grid->GetGridType(cell.CellX(), cell.CellY()).AddWorldObject(obj);
- else
- grid->GetGridType(cell.CellX(), cell.CellY()).AddGridObject(obj);
-
- obj->SetCurrentCell(cell);
-}
-
-template<>
-void Map::AddToGrid(AreaTrigger* obj, Cell const& cell)
-{
- NGridType* grid = getNGrid(cell.GridX(), cell.GridY());
- grid->GetGridType(cell.CellX(), cell.CellY()).AddGridObject(obj);
+ if constexpr (WorldTypeMapContainer::TypeExists<T> && GridTypeMapContainer::TypeExists<T>)
+ {
+ NGridType::GridType& cellType = grid->GetGridType(cell.CellX(), cell.CellY());
+ if (obj->IsStoredInWorldObjectGridContainer())
+ cellType.AddWorldObject<T>(obj);
+ else
+ cellType.AddGridObject<T>(obj);
+ }
+ else if constexpr (WorldTypeMapContainer::TypeExists<T>)
+ grid->GetGridType(cell.CellX(), cell.CellY()).AddWorldObject<T>(obj);
+ else if constexpr (GridTypeMapContainer::TypeExists<T>)
+ grid->GetGridType(cell.CellX(), cell.CellY()).AddGridObject<T>(obj);
- obj->SetCurrentCell(cell);
+ if constexpr (std::is_base_of_v<MapObject, T>)
+ obj->SetCurrentCell(cell);
}
template<>
@@ -240,10 +209,11 @@ void Map::AddToGrid(Corpse* obj, Cell const& cell)
// to avoid failing an assertion in GridObject::AddToGrid
if (grid->isGridObjectDataLoaded())
{
+ NGridType::GridType& cellType = grid->GetGridType(cell.CellX(), cell.CellY());
if (obj->IsStoredInWorldObjectGridContainer())
- grid->GetGridType(cell.CellX(), cell.CellY()).AddWorldObject(obj);
+ cellType.AddWorldObject(obj);
else
- grid->GetGridType(cell.CellX(), cell.CellY()).AddGridObject(obj);
+ cellType.AddGridObject(obj);
}
}
@@ -4090,4 +4060,4 @@ std::string InstanceMap::GetDebugInfo() const
return sstr.str();
}
-template class TC_GAME_API TypeUnorderedMapContainer<AllMapStoredObjectTypes, ObjectGuid>;
+template struct TC_GAME_API TypeListContainer<MapStoredObjectsUnorderedMap, Creature, GameObject, DynamicObject, Pet, Corpse, AreaTrigger, SceneObject, Conversation>;