mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-15 23:20:36 +01:00
Core/Grids: Modernize TypeContainer with variadic template
This commit is contained in:
@@ -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);
|
||||
}
|
||||
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);
|
||||
|
||||
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);
|
||||
|
||||
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>;
|
||||
|
||||
Reference in New Issue
Block a user