From 401502ea3c5ceca0c6253910035b2949e13746cc Mon Sep 17 00:00:00 2001 From: Shauren Date: Sun, 5 Jan 2025 20:22:34 +0100 Subject: Core/Grids: Modernize TypeContainer with variadic template --- .../game/Entities/AreaTrigger/AreaTrigger.cpp | 4 +- .../game/Entities/Conversation/Conversation.cpp | 4 +- src/server/game/Entities/Corpse/Corpse.cpp | 4 +- src/server/game/Entities/Creature/Creature.cpp | 4 +- .../game/Entities/DynamicObject/DynamicObject.cpp | 4 +- src/server/game/Entities/GameObject/GameObject.cpp | 4 +- src/server/game/Entities/Pet/Pet.cpp | 4 +- .../game/Entities/SceneObject/SceneObject.cpp | 4 +- src/server/game/Grids/Dynamic/TypeContainer.h | 248 +++++---------------- .../game/Grids/Dynamic/TypeContainerFunctions.h | 157 ------------- .../game/Grids/Dynamic/TypeContainerVisitor.h | 78 ++----- src/server/game/Grids/Grid.h | 9 +- src/server/game/Grids/GridDefines.h | 14 +- src/server/game/Grids/GridRefManager.h | 26 +++ src/server/game/Grids/NGrid.cpp | 4 +- src/server/game/Grids/NGrid.h | 1 + src/server/game/Maps/Map.cpp | 66 ++---- src/server/game/Maps/Map.h | 36 ++- .../instance_culling_of_stratholme.cpp | 2 +- src/server/shared/Dynamic/TypeList.h | 45 ---- 20 files changed, 188 insertions(+), 530 deletions(-) delete mode 100644 src/server/game/Grids/Dynamic/TypeContainerFunctions.h delete mode 100644 src/server/shared/Dynamic/TypeList.h (limited to 'src/server') diff --git a/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp b/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp index b12692fe4e1..0fe2c5c684c 100644 --- a/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp +++ b/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp @@ -70,7 +70,7 @@ void AreaTrigger::AddToWorld() if (m_zoneScript) m_zoneScript->OnAreaTriggerCreate(this); - GetMap()->GetObjectsStore().Insert(GetGUID(), this); + GetMap()->GetObjectsStore().Insert(this); if (_spawnId) GetMap()->GetAreaTriggerBySpawnIdStore().insert(std::make_pair(_spawnId, this)); @@ -100,7 +100,7 @@ void AreaTrigger::RemoveFromWorld() if (IsStaticSpawn()) Trinity::Containers::MultimapErasePair(GetMap()->GetAreaTriggerBySpawnIdStore(), _spawnId, this); - GetMap()->GetObjectsStore().Remove(GetGUID()); + GetMap()->GetObjectsStore().Remove(this); } } diff --git a/src/server/game/Entities/Conversation/Conversation.cpp b/src/server/game/Entities/Conversation/Conversation.cpp index 0ca5ab2d435..60c03073507 100644 --- a/src/server/game/Entities/Conversation/Conversation.cpp +++ b/src/server/game/Entities/Conversation/Conversation.cpp @@ -52,7 +52,7 @@ void Conversation::AddToWorld() ///- Register the Conversation for guid lookup and for caster if (!IsInWorld()) { - GetMap()->GetObjectsStore().Insert(GetGUID(), this); + GetMap()->GetObjectsStore().Insert(this); WorldObject::AddToWorld(); } } @@ -65,7 +65,7 @@ void Conversation::RemoveFromWorld() _ai->OnRemove(); WorldObject::RemoveFromWorld(); - GetMap()->GetObjectsStore().Remove(GetGUID()); + GetMap()->GetObjectsStore().Remove(this); } } diff --git a/src/server/game/Entities/Corpse/Corpse.cpp b/src/server/game/Entities/Corpse/Corpse.cpp index 8a14dd291fa..225650bb472 100644 --- a/src/server/game/Entities/Corpse/Corpse.cpp +++ b/src/server/game/Entities/Corpse/Corpse.cpp @@ -50,7 +50,7 @@ void Corpse::AddToWorld() { ///- Register the corpse for guid lookup if (!IsInWorld()) - GetMap()->GetObjectsStore().Insert(GetGUID(), this); + GetMap()->GetObjectsStore().Insert(this); Object::AddToWorld(); } @@ -59,7 +59,7 @@ void Corpse::RemoveFromWorld() { ///- Remove the corpse from the accessor if (IsInWorld()) - GetMap()->GetObjectsStore().Remove(GetGUID()); + GetMap()->GetObjectsStore().Remove(this); WorldObject::RemoveFromWorld(); } diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp index 815996ffec7..c1351fd30a7 100644 --- a/src/server/game/Entities/Creature/Creature.cpp +++ b/src/server/game/Entities/Creature/Creature.cpp @@ -340,7 +340,7 @@ void Creature::AddToWorld() ///- Register the creature for guid lookup if (!IsInWorld()) { - GetMap()->GetObjectsStore().Insert(GetGUID(), this); + GetMap()->GetObjectsStore().Insert(this); if (m_spawnId) GetMap()->GetCreatureBySpawnIdStore().insert(std::make_pair(m_spawnId, this)); @@ -369,7 +369,7 @@ void Creature::RemoveFromWorld() if (m_spawnId) Trinity::Containers::MultimapErasePair(GetMap()->GetCreatureBySpawnIdStore(), m_spawnId, this); - GetMap()->GetObjectsStore().Remove(GetGUID()); + GetMap()->GetObjectsStore().Remove(this); } } diff --git a/src/server/game/Entities/DynamicObject/DynamicObject.cpp b/src/server/game/Entities/DynamicObject/DynamicObject.cpp index 03768ec51da..018435e3875 100644 --- a/src/server/game/Entities/DynamicObject/DynamicObject.cpp +++ b/src/server/game/Entities/DynamicObject/DynamicObject.cpp @@ -56,7 +56,7 @@ void DynamicObject::AddToWorld() ///- Register the dynamicObject for guid lookup and for caster if (!IsInWorld()) { - GetMap()->GetObjectsStore().Insert(GetGUID(), this); + GetMap()->GetObjectsStore().Insert(this); WorldObject::AddToWorld(); BindToCaster(); } @@ -79,7 +79,7 @@ void DynamicObject::RemoveFromWorld() UnbindFromCaster(); WorldObject::RemoveFromWorld(); - GetMap()->GetObjectsStore().Remove(GetGUID()); + GetMap()->GetObjectsStore().Remove(this); } } diff --git a/src/server/game/Entities/GameObject/GameObject.cpp b/src/server/game/Entities/GameObject/GameObject.cpp index b6e3ffd4809..c7edbaa2e89 100644 --- a/src/server/game/Entities/GameObject/GameObject.cpp +++ b/src/server/game/Entities/GameObject/GameObject.cpp @@ -935,7 +935,7 @@ void GameObject::AddToWorld() if (m_zoneScript) m_zoneScript->OnGameObjectCreate(this); - GetMap()->GetObjectsStore().Insert(GetGUID(), this); + GetMap()->GetObjectsStore().Insert(this); if (m_spawnId) GetMap()->GetGameObjectBySpawnIdStore().insert(std::make_pair(m_spawnId, this)); @@ -975,7 +975,7 @@ void GameObject::RemoveFromWorld() if (m_spawnId) Trinity::Containers::MultimapErasePair(GetMap()->GetGameObjectBySpawnIdStore(), m_spawnId, this); - GetMap()->GetObjectsStore().Remove(GetGUID()); + GetMap()->GetObjectsStore().Remove(this); } } diff --git a/src/server/game/Entities/Pet/Pet.cpp b/src/server/game/Entities/Pet/Pet.cpp index eefb3349995..534232ada4f 100644 --- a/src/server/game/Entities/Pet/Pet.cpp +++ b/src/server/game/Entities/Pet/Pet.cpp @@ -72,7 +72,7 @@ void Pet::AddToWorld() if (!IsInWorld()) { ///- Register the pet for guid lookup - GetMap()->GetObjectsStore().Insert(GetGUID(), this); + GetMap()->GetObjectsStore().Insert(this); Unit::AddToWorld(); AIM_Initialize(); if (ZoneScript* zoneScript = GetZoneScript() ? GetZoneScript() : GetInstanceScript()) @@ -98,7 +98,7 @@ void Pet::RemoveFromWorld() { ///- Don't call the function for Creature, normal mobs + totems go in a different storage Unit::RemoveFromWorld(); - GetMap()->GetObjectsStore().Remove(GetGUID()); + GetMap()->GetObjectsStore().Remove(this); } } diff --git a/src/server/game/Entities/SceneObject/SceneObject.cpp b/src/server/game/Entities/SceneObject/SceneObject.cpp index 0c7d6b3396d..9ac7394fd81 100644 --- a/src/server/game/Entities/SceneObject/SceneObject.cpp +++ b/src/server/game/Entities/SceneObject/SceneObject.cpp @@ -43,7 +43,7 @@ void SceneObject::AddToWorld() { if (!IsInWorld()) { - GetMap()->GetObjectsStore().Insert(GetGUID(), this); + GetMap()->GetObjectsStore().Insert(this); WorldObject::AddToWorld(); } } @@ -53,7 +53,7 @@ void SceneObject::RemoveFromWorld() if (IsInWorld()) { WorldObject::RemoveFromWorld(); - GetMap()->GetObjectsStore().Remove(GetGUID()); + GetMap()->GetObjectsStore().Remove(this); } } diff --git a/src/server/game/Grids/Dynamic/TypeContainer.h b/src/server/game/Grids/Dynamic/TypeContainer.h index f1d57735cef..38198bce3a5 100644 --- a/src/server/game/Grids/Dynamic/TypeContainer.h +++ b/src/server/game/Grids/Dynamic/TypeContainer.h @@ -23,203 +23,71 @@ * types of object at the same time. */ -#include #include "Define.h" -#include "Dynamic/TypeList.h" -#include "GridRefManager.h" +#include -/* - * @class ContainerMapList is a mulit-type container for map elements - * By itself its meaningless but collaborate along with TypeContainers, - * it become the most powerfully container in the whole system. - */ -template -struct ContainerMapList -{ - GridRefManager _element; -}; - -template<> -struct ContainerMapList /* nothing is in type null */ -{ -}; - -template -struct ContainerMapList > +template