aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Maps/Map.cpp
diff options
context:
space:
mode:
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 5fc011482ea..49f41bf7856 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);
}
}
@@ -4094,4 +4064,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>;