From d785a48475041fee4bf433bd7640dc192fd16640 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 (cherry picked from commit 401502ea3c5ceca0c6253910035b2949e13746cc) --- .../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') diff --git a/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp b/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp index 06cad86f559..7178a58ae7f 100644 --- a/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp +++ b/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp @@ -68,7 +68,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)); @@ -98,7 +98,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 2607ec5f9da..0fdf9b708a3 100644 --- a/src/server/game/Entities/Conversation/Conversation.cpp +++ b/src/server/game/Entities/Conversation/Conversation.cpp @@ -50,7 +50,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(); } } @@ -63,7 +63,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 b49dfd031f6..41ef20445f9 100644 --- a/src/server/game/Entities/Corpse/Corpse.cpp +++ b/src/server/game/Entities/Corpse/Corpse.cpp @@ -48,7 +48,7 @@ void Corpse::AddToWorld() { ///- Register the corpse for guid lookup if (!IsInWorld()) - GetMap()->GetObjectsStore().Insert(GetGUID(), this); + GetMap()->GetObjectsStore().Insert(this); Object::AddToWorld(); } @@ -57,7 +57,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 3e8fafc4d8b..2a3767f865b 100644 --- a/src/server/game/Entities/Creature/Creature.cpp +++ b/src/server/game/Entities/Creature/Creature.cpp @@ -344,7 +344,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)); @@ -373,7 +373,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 98699bd0c0f..6344c627386 100644 --- a/src/server/game/Entities/DynamicObject/DynamicObject.cpp +++ b/src/server/game/Entities/DynamicObject/DynamicObject.cpp @@ -54,7 +54,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(); } @@ -77,7 +77,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 596f3040505..6c5b4bb5b1d 100644 --- a/src/server/game/Entities/GameObject/GameObject.cpp +++ b/src/server/game/Entities/GameObject/GameObject.cpp @@ -930,7 +930,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)); @@ -970,7 +970,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 fc521065b5f..7ee837ce1bf 100644 --- a/src/server/game/Entities/Pet/Pet.cpp +++ b/src/server/game/Entities/Pet/Pet.cpp @@ -71,7 +71,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()) @@ -97,7 +97,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 80f8e2c624e..b8b5367426a 100644 --- a/src/server/game/Entities/SceneObject/SceneObject.cpp +++ b/src/server/game/Entities/SceneObject/SceneObject.cpp @@ -41,7 +41,7 @@ void SceneObject::AddToWorld() { if (!IsInWorld()) { - GetMap()->GetObjectsStore().Insert(GetGUID(), this); + GetMap()->GetObjectsStore().Insert(this); WorldObject::AddToWorld(); } } @@ -51,7 +51,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