diff options
author | Shauren <shauren.trinity@gmail.com> | 2023-05-28 16:54:23 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2024-10-05 17:42:55 +0200 |
commit | d019719289cb8266e581147ef2085bd2f43b2bd2 (patch) | |
tree | fb30d591454a6f40ebd04b4dc7085ceb5f66dcec /src | |
parent | 36bd2df79210e44735d0364776ce0c28249acaa0 (diff) |
Core/Objects: Unify GameObjectSearcher, UnitSearcher, CreatureSearcher and PlayerSearcher classes into one common implementation
(cherry picked from commit 526b16fea41fb69a302fdebe8a727e175949f04b)
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Grids/Notifiers/GridNotifiers.h | 269 | ||||
-rw-r--r-- | src/server/game/Grids/Notifiers/GridNotifiersImpl.h | 211 |
2 files changed, 142 insertions, 338 deletions
diff --git a/src/server/game/Grids/Notifiers/GridNotifiers.h b/src/server/game/Grids/Notifiers/GridNotifiers.h index faf245e578b..55f17abea86 100644 --- a/src/server/game/Grids/Notifiers/GridNotifiers.h +++ b/src/server/game/Grids/Notifiers/GridNotifiers.h @@ -280,11 +280,11 @@ namespace Trinity { uint32 i_mapTypeMask; uint32 i_phaseMask; - Check &i_check; + Check& i_check; template<typename Container> - WorldObjectSearcherBase(WorldObject const* searcher, Container& result, Check& check, uint32 mapTypeMask = GRID_MAP_TYPE_MASK_ALL) - : Result(result), i_mapTypeMask(mapTypeMask), i_phaseMask(searcher->GetPhaseMask()), i_check(check) { } + WorldObjectSearcherBase(uint32 phaseMask, Container& result, Check& check, uint32 mapTypeMask = GRID_MAP_TYPE_MASK_ALL) + : Result(result), i_mapTypeMask(mapTypeMask), i_phaseMask(phaseMask), i_check(check) { } template<class T> void Visit(GridRefManager<T>&); @@ -294,22 +294,22 @@ namespace Trinity struct WorldObjectSearcher : WorldObjectSearcherBase<Check, SearcherFirstObjectResult<WorldObject*>> { WorldObjectSearcher(WorldObject const* searcher, WorldObject*& result, Check& check, uint32 mapTypeMask = GRID_MAP_TYPE_MASK_ALL) - : WorldObjectSearcherBase<Check, SearcherFirstObjectResult<WorldObject*>>(searcher, result, check, mapTypeMask) { } + : WorldObjectSearcherBase<Check, SearcherFirstObjectResult<WorldObject*>>(searcher->GetPhaseMask(), result, check, mapTypeMask) { } }; template<class Check> struct WorldObjectLastSearcher : WorldObjectSearcherBase<Check, SearcherLastObjectResult<WorldObject*>> { - WorldObjectLastSearcher(WorldObject const* searcher, WorldObject* & result, Check& check, uint32 mapTypeMask = GRID_MAP_TYPE_MASK_ALL) - : WorldObjectSearcherBase<Check, SearcherLastObjectResult<WorldObject*>>(searcher, result, check, mapTypeMask) { } + WorldObjectLastSearcher(WorldObject const* searcher, WorldObject*& result, Check& check, uint32 mapTypeMask = GRID_MAP_TYPE_MASK_ALL) + : WorldObjectSearcherBase<Check, SearcherLastObjectResult<WorldObject*>>(searcher->GetPhaseMask(), result, check, mapTypeMask) { } }; template<class Check> struct WorldObjectListSearcher : WorldObjectSearcherBase<Check, SearcherContainerResult<WorldObject*>> { template<typename Container> - WorldObjectListSearcher(WorldObject const* searcher, Container& container, Check & check, uint32 mapTypeMask = GRID_MAP_TYPE_MASK_ALL) - : WorldObjectSearcherBase<Check, SearcherContainerResult<WorldObject*>>(searcher, container, check, mapTypeMask) { } + WorldObjectListSearcher(WorldObject const* searcher, Container& container, Check& check, uint32 mapTypeMask = GRID_MAP_TYPE_MASK_ALL) + : WorldObjectSearcherBase<Check, SearcherContainerResult<WorldObject*>>(searcher->GetPhaseMask(), container, check, mapTypeMask) { } }; template<class Do> @@ -322,100 +322,55 @@ namespace Trinity WorldObjectWorker(WorldObject const* searcher, Do const& _do, uint32 mapTypeMask = GRID_MAP_TYPE_MASK_ALL) : i_mapTypeMask(mapTypeMask), i_phaseMask(searcher->GetPhaseMask()), i_do(_do) { } - void Visit(GameObjectMapType &m) - { - if (!(i_mapTypeMask & GRID_MAP_TYPE_MASK_GAMEOBJECT)) - return; - for (GameObjectMapType::iterator itr=m.begin(); itr != m.end(); ++itr) - if (itr->GetSource()->InSamePhase(i_phaseMask)) - i_do(itr->GetSource()); - } - - void Visit(PlayerMapType &m) - { - if (!(i_mapTypeMask & GRID_MAP_TYPE_MASK_PLAYER)) - return; - for (PlayerMapType::iterator itr=m.begin(); itr != m.end(); ++itr) - if (itr->GetSource()->InSamePhase(i_phaseMask)) - i_do(itr->GetSource()); - } - void Visit(CreatureMapType &m) - { - if (!(i_mapTypeMask & GRID_MAP_TYPE_MASK_CREATURE)) - return; - for (CreatureMapType::iterator itr=m.begin(); itr != m.end(); ++itr) - if (itr->GetSource()->InSamePhase(i_phaseMask)) - i_do(itr->GetSource()); - } - - void Visit(CorpseMapType &m) - { - if (!(i_mapTypeMask & GRID_MAP_TYPE_MASK_CORPSE)) - return; - for (CorpseMapType::iterator itr=m.begin(); itr != m.end(); ++itr) - if (itr->GetSource()->InSamePhase(i_phaseMask)) - i_do(itr->GetSource()); - } - - void Visit(DynamicObjectMapType &m) + template<class T> + void Visit(GridRefManager<T>& m) { - if (!(i_mapTypeMask & GRID_MAP_TYPE_MASK_DYNAMICOBJECT)) + if (!(i_mapTypeMask & GridMapTypeMaskForType<T>::value)) return; - for (DynamicObjectMapType::iterator itr=m.begin(); itr != m.end(); ++itr) + for (auto itr = m.begin(); itr != m.end(); ++itr) if (itr->GetSource()->InSamePhase(i_phaseMask)) i_do(itr->GetSource()); } - - template<class NOT_INTERESTED> void Visit(GridRefManager<NOT_INTERESTED> &) { } }; // Gameobject searchers - template<class Check> - struct GameObjectSearcher + template<class Check, class Result> + struct GameObjectSearcherBase : Result { uint32 i_phaseMask; - GameObject* &i_object; Check &i_check; - GameObjectSearcher(WorldObject const* searcher, GameObject* & result, Check& check) - : i_phaseMask(searcher->GetPhaseMask()), i_object(result), i_check(check) { } + template<typename Container> + GameObjectSearcherBase(uint32 phaseMask, Container& result, Check& check) + : Result(result), i_phaseMask(phaseMask), i_check(check) { } - void Visit(GameObjectMapType &m); + void Visit(GameObjectMapType& m); template<class NOT_INTERESTED> void Visit(GridRefManager<NOT_INTERESTED> &) { } }; - // Last accepted by Check GO if any (Check can change requirements at each call) template<class Check> - struct GameObjectLastSearcher + struct GameObjectSearcher : GameObjectSearcherBase<Check, SearcherFirstObjectResult<GameObject*>> { - uint32 i_phaseMask; - GameObject* &i_object; - Check& i_check; - - GameObjectLastSearcher(WorldObject const* searcher, GameObject* & result, Check& check) - : i_phaseMask(searcher->GetPhaseMask()), i_object(result), i_check(check) { } - - void Visit(GameObjectMapType &m); - - template<class NOT_INTERESTED> void Visit(GridRefManager<NOT_INTERESTED> &) { } + GameObjectSearcher(WorldObject const* searcher, GameObject*& result, Check& check) + : GameObjectSearcherBase<Check, SearcherFirstObjectResult<GameObject*>>(searcher->GetPhaseMask(), result, check) { } }; + // Last accepted by Check GO if any (Check can change requirements at each call) template<class Check> - struct GameObjectListSearcher : SearcherContainerResult<GameObject*> + struct GameObjectLastSearcher : GameObjectSearcherBase<Check, SearcherLastObjectResult<GameObject*>> { - uint32 i_phaseMask; - Check& i_check; + GameObjectLastSearcher(WorldObject const* searcher, GameObject*& result, Check& check) + : GameObjectSearcherBase<Check, SearcherLastObjectResult<GameObject*>>(searcher->GetPhaseMask(), result, check) { } + }; + template<class Check> + struct GameObjectListSearcher : GameObjectSearcherBase<Check, SearcherContainerResult<GameObject*>> + { template<typename Container> - GameObjectListSearcher(WorldObject const* searcher, Container& container, Check & check) - : SearcherContainerResult<GameObject*>(container), - i_phaseMask(searcher->GetPhaseMask()), i_check(check) { } - - void Visit(GameObjectMapType &m); - - template<class NOT_INTERESTED> void Visit(GridRefManager<NOT_INTERESTED> &) { } + GameObjectListSearcher(WorldObject const* searcher, Container& container, Check& check) + : GameObjectSearcherBase<Check, SearcherContainerResult<GameObject*>>(searcher->GetPhaseMask(), container, check) { } }; template<class Functor> @@ -440,105 +395,88 @@ namespace Trinity // Unit searchers - // First accepted by Check Unit if any - template<class Check> - struct UnitSearcher + template<class Check, class Result> + struct UnitSearcherBase : Result { uint32 i_phaseMask; - Unit* &i_object; - Check & i_check; + Check& i_check; - UnitSearcher(WorldObject const* searcher, Unit* & result, Check & check) - : i_phaseMask(searcher->GetPhaseMask()), i_object(result), i_check(check) { } + template<typename Container> + UnitSearcherBase(uint32 phaseMask, Container& result, Check& check) + : Result(result), i_phaseMask(phaseMask), i_check(check) { } - void Visit(CreatureMapType &m); - void Visit(PlayerMapType &m); + void Visit(CreatureMapType& m) { VisitImpl(m); } + void Visit(PlayerMapType& m) { VisitImpl(m); } - template<class NOT_INTERESTED> void Visit(GridRefManager<NOT_INTERESTED> &) { } + template<class NOT_INTERESTED> void Visit(GridRefManager<NOT_INTERESTED>&) { } + + private: + template<class T> void VisitImpl(GridRefManager<T>& m); }; - // Last accepted by Check Unit if any (Check can change requirements at each call) + // First accepted by Check Unit if any template<class Check> - struct UnitLastSearcher + struct UnitSearcher : UnitSearcherBase<Check, SearcherFirstObjectResult<Unit*>> { - uint32 i_phaseMask; - Unit* &i_object; - Check & i_check; - - UnitLastSearcher(WorldObject const* searcher, Unit* & result, Check & check) - : i_phaseMask(searcher->GetPhaseMask()), i_object(result), i_check(check) { } - - void Visit(CreatureMapType &m); - void Visit(PlayerMapType &m); + UnitSearcher(WorldObject const* searcher, Unit*& result, Check& check) + : UnitSearcherBase<Check, SearcherFirstObjectResult<Unit*>>(searcher->GetPhaseMask(), result, check) { } + }; - template<class NOT_INTERESTED> void Visit(GridRefManager<NOT_INTERESTED> &) { } + // Last accepted by Check Unit if any (Check can change requirements at each call) + template<class Check> + struct UnitLastSearcher : UnitSearcherBase<Check, SearcherLastObjectResult<Unit*>> + { + UnitLastSearcher(WorldObject const* searcher, Unit*& result, Check& check) + : UnitSearcherBase<Check, SearcherLastObjectResult<Unit*>>(searcher->GetPhaseMask(), result, check) { } }; // All accepted by Check units if any template<class Check> - struct UnitListSearcher : SearcherContainerResult<Unit*> + struct UnitListSearcher : UnitSearcherBase<Check, SearcherContainerResult<Unit*>> { - uint32 i_phaseMask; - Check& i_check; - template<typename Container> UnitListSearcher(WorldObject const* searcher, Container& container, Check& check) - : SearcherContainerResult<Unit*>(container), - i_phaseMask(searcher->GetPhaseMask()), i_check(check) { } - - void Visit(PlayerMapType &m); - void Visit(CreatureMapType &m); - - template<class NOT_INTERESTED> void Visit(GridRefManager<NOT_INTERESTED> &) { } + : UnitSearcherBase<Check, SearcherContainerResult<Unit*>>(searcher->GetPhaseMask(), container, check) { } }; // Creature searchers - template<class Check> - struct CreatureSearcher + template<class Check, class Result> + struct CreatureSearcherBase : Result { uint32 i_phaseMask; - Creature* &i_object; - Check & i_check; + Check& i_check; - CreatureSearcher(WorldObject const* searcher, Creature* & result, Check & check) - : i_phaseMask(searcher->GetPhaseMask()), i_object(result), i_check(check) { } + template<typename Container> + CreatureSearcherBase(uint32 phaseMask, Container& result, Check& check) + : Result(result), i_phaseMask(phaseMask), i_check(check) { } - void Visit(CreatureMapType &m); + void Visit(CreatureMapType& m); template<class NOT_INTERESTED> void Visit(GridRefManager<NOT_INTERESTED> &) { } }; - // Last accepted by Check Creature if any (Check can change requirements at each call) template<class Check> - struct CreatureLastSearcher + struct CreatureSearcher : CreatureSearcherBase<Check, SearcherFirstObjectResult<Creature*>> { - uint32 i_phaseMask; - Creature* &i_object; - Check & i_check; - - CreatureLastSearcher(WorldObject const* searcher, Creature* & result, Check & check) - : i_phaseMask(searcher->GetPhaseMask()), i_object(result), i_check(check) { } - - void Visit(CreatureMapType &m); - - template<class NOT_INTERESTED> void Visit(GridRefManager<NOT_INTERESTED> &) { } + CreatureSearcher(WorldObject const* searcher, Creature*& result, Check& check) + : CreatureSearcherBase<Check, SearcherFirstObjectResult<Creature*>>(searcher->GetPhaseMask(), result, check) { } }; + // Last accepted by Check Creature if any (Check can change requirements at each call) template<class Check> - struct CreatureListSearcher : SearcherContainerResult<Creature*> + struct CreatureLastSearcher : CreatureSearcherBase<Check, SearcherLastObjectResult<Creature*>> { - uint32 i_phaseMask; - Check& i_check; + CreatureLastSearcher(WorldObject const* searcher, Creature*& result, Check& check) + : CreatureSearcherBase<Check, SearcherLastObjectResult<Creature*>>(searcher->GetPhaseMask(), result, check) { } + }; + template<class Check> + struct CreatureListSearcher : CreatureSearcherBase<Check, SearcherContainerResult<Creature*>> + { template<typename Container> CreatureListSearcher(WorldObject const* searcher, Container& container, Check & check) - : SearcherContainerResult<Creature*>(container), - i_phaseMask(searcher->GetPhaseMask()), i_check(check) { } - - void Visit(CreatureMapType &m); - - template<class NOT_INTERESTED> void Visit(GridRefManager<NOT_INTERESTED> &) { } + : CreatureSearcherBase<Check, SearcherContainerResult<Creature*>>(searcher->GetPhaseMask(), container, check) { } }; template<class Do> @@ -562,56 +500,45 @@ namespace Trinity // Player searchers - template<class Check> - struct PlayerSearcher + template<class Check, class Result> + struct PlayerSearcherBase : Result { uint32 i_phaseMask; - Player* &i_object; - Check & i_check; + Check& i_check; - PlayerSearcher(WorldObject const* searcher, Player* & result, Check & check) - : i_phaseMask(searcher->GetPhaseMask()), i_object(result), i_check(check) { } + template<typename Container> + PlayerSearcherBase(uint32 phaseMask, Container& result, Check& check) + : Result(result), i_phaseMask(phaseMask), i_check(check) { } - void Visit(PlayerMapType &m); + void Visit(PlayerMapType& m); template<class NOT_INTERESTED> void Visit(GridRefManager<NOT_INTERESTED> &) { } }; template<class Check> - struct PlayerListSearcher : SearcherContainerResult<Player*> + struct PlayerSearcher : PlayerSearcherBase<Check, SearcherFirstObjectResult<Player*>> { - uint32 i_phaseMask; - Check& i_check; - - template<typename Container> - PlayerListSearcher(WorldObject const* searcher, Container& container, Check & check) - : SearcherContainerResult<Player*>(container), - i_phaseMask(searcher->GetPhaseMask()), i_check(check) { } - - template<typename Container> - PlayerListSearcher(uint32 phaseMask, Container& container, Check & check) - : SearcherContainerResult<Player*>(container), - i_phaseMask(phaseMask), i_check(check) { } - - void Visit(PlayerMapType &m); - - template<class NOT_INTERESTED> void Visit(GridRefManager<NOT_INTERESTED> &) { } + PlayerSearcher(WorldObject const* searcher, Player*& result, Check& check) + : PlayerSearcherBase<Check, SearcherFirstObjectResult<Player*>>(searcher->GetPhaseMask(), result, check) { } }; template<class Check> - struct PlayerLastSearcher + struct PlayerLastSearcher : PlayerSearcherBase<Check, SearcherLastObjectResult<Player*>> { - uint32 i_phaseMask; - Player* &i_object; - Check& i_check; - - PlayerLastSearcher(WorldObject const* searcher, Player*& result, Check& check) : i_phaseMask(searcher->GetPhaseMask()), i_object(result), i_check(check) - { - } + PlayerLastSearcher(WorldObject const* searcher, Player*& result, Check& check) + : PlayerSearcherBase<Check, SearcherLastObjectResult<Player*>>(searcher->GetPhaseMask(), result, check) { } + }; - void Visit(PlayerMapType& m); + template<class Check> + struct PlayerListSearcher : PlayerSearcherBase<Check, SearcherContainerResult<Player*>> + { + template<typename Container> + PlayerListSearcher(WorldObject const* searcher, Container& container, Check& check) + : PlayerSearcherBase<Check, SearcherContainerResult<Player*>>(searcher->GetPhaseMask(), container, check) { } - template<class NOT_INTERESTED> void Visit(GridRefManager<NOT_INTERESTED> &) { } + template<typename Container> + PlayerListSearcher(uint32 phaseMask, Container& container, Check& check) + : PlayerSearcherBase<Check, SearcherContainerResult<Player*>>(phaseMask, container, check) { } }; template<class Do> diff --git a/src/server/game/Grids/Notifiers/GridNotifiersImpl.h b/src/server/game/Grids/Notifiers/GridNotifiersImpl.h index bb417726403..2a852b6c046 100644 --- a/src/server/game/Grids/Notifiers/GridNotifiersImpl.h +++ b/src/server/game/Grids/Notifiers/GridNotifiersImpl.h @@ -51,11 +51,11 @@ void Trinity::WorldObjectSearcherBase<Check, Result>::Visit(GridRefManager<T>& m if (this->ShouldContinue() == WorldObjectSearcherContinuation::Return) return; - for (auto itr = m.begin(); itr != m.end(); ++itr) + for (GridReference<T> const& ref : m) { - if (i_check(itr->GetSource())) + if (i_check(ref.GetSource())) { - this->Insert(itr->GetSource()); + this->Insert(ref.GetSource()); if (this->ShouldContinue() == WorldObjectSearcherContinuation::Return) return; @@ -65,217 +65,94 @@ void Trinity::WorldObjectSearcherBase<Check, Result>::Visit(GridRefManager<T>& m // Gameobject searchers -template<class Check> -void Trinity::GameObjectSearcher<Check>::Visit(GameObjectMapType &m) +template <class Check, class Result> +void Trinity::GameObjectSearcherBase<Check, Result>::Visit(GameObjectMapType& m) { - // already found - if (i_object) + if (this->ShouldContinue() == WorldObjectSearcherContinuation::Return) return; - for (GameObjectMapType::iterator itr=m.begin(); itr != m.end(); ++itr) + for (GridReference<GameObject> const& ref : m) { - if (!itr->GetSource()->InSamePhase(i_phaseMask)) + if (!ref.GetSource()->InSamePhase(i_phaseMask)) continue; - if (i_check(itr->GetSource())) + if (i_check(ref.GetSource())) { - i_object = itr->GetSource(); - return; - } - } -} + this->Insert(ref.GetSource()); -template<class Check> -void Trinity::GameObjectLastSearcher<Check>::Visit(GameObjectMapType &m) -{ - for (GameObjectMapType::iterator itr=m.begin(); itr != m.end(); ++itr) - { - if (!itr->GetSource()->InSamePhase(i_phaseMask)) - continue; - - if (i_check(itr->GetSource())) - i_object = itr->GetSource(); + if (this->ShouldContinue() == WorldObjectSearcherContinuation::Return) + return; + } } } -template<class Check> -void Trinity::GameObjectListSearcher<Check>::Visit(GameObjectMapType &m) -{ - for (GameObjectMapType::iterator itr=m.begin(); itr != m.end(); ++itr) - if (itr->GetSource()->InSamePhase(i_phaseMask)) - if (i_check(itr->GetSource())) - Insert(itr->GetSource()); -} - // Unit searchers -template<class Check> -void Trinity::UnitSearcher<Check>::Visit(CreatureMapType &m) +template <class Check, class Result> +template <class T> +void Trinity::UnitSearcherBase<Check, Result>::VisitImpl(GridRefManager<T>& m) { - // already found - if (i_object) + if (this->ShouldContinue() == WorldObjectSearcherContinuation::Return) return; - for (CreatureMapType::iterator itr=m.begin(); itr != m.end(); ++itr) + for (GridReference<T> const& ref : m) { - if (!itr->GetSource()->InSamePhase(i_phaseMask)) + if (!ref.GetSource()->InSamePhase(i_phaseMask)) continue; - if (i_check(itr->GetSource())) + if (i_check(ref.GetSource())) { - i_object = itr->GetSource(); - return; - } - } -} - -template<class Check> -void Trinity::UnitSearcher<Check>::Visit(PlayerMapType &m) -{ - // already found - if (i_object) - return; - - for (PlayerMapType::iterator itr=m.begin(); itr != m.end(); ++itr) - { - if (!itr->GetSource()->InSamePhase(i_phaseMask)) - continue; + this->Insert(ref.GetSource()); - if (i_check(itr->GetSource())) - { - i_object = itr->GetSource(); - return; + if (this->ShouldContinue() == WorldObjectSearcherContinuation::Return) + return; } } } -template<class Check> -void Trinity::UnitLastSearcher<Check>::Visit(CreatureMapType &m) -{ - for (CreatureMapType::iterator itr=m.begin(); itr != m.end(); ++itr) - { - if (!itr->GetSource()->InSamePhase(i_phaseMask)) - continue; - - if (i_check(itr->GetSource())) - i_object = itr->GetSource(); - } -} - -template<class Check> -void Trinity::UnitLastSearcher<Check>::Visit(PlayerMapType &m) -{ - for (PlayerMapType::iterator itr=m.begin(); itr != m.end(); ++itr) - { - if (!itr->GetSource()->InSamePhase(i_phaseMask)) - continue; - - if (i_check(itr->GetSource())) - i_object = itr->GetSource(); - } -} - -template<class Check> -void Trinity::UnitListSearcher<Check>::Visit(PlayerMapType &m) -{ - for (PlayerMapType::iterator itr=m.begin(); itr != m.end(); ++itr) - if (itr->GetSource()->InSamePhase(i_phaseMask)) - if (i_check(itr->GetSource())) - Insert(itr->GetSource()); -} - -template<class Check> -void Trinity::UnitListSearcher<Check>::Visit(CreatureMapType &m) -{ - for (CreatureMapType::iterator itr=m.begin(); itr != m.end(); ++itr) - if (itr->GetSource()->InSamePhase(i_phaseMask)) - if (i_check(itr->GetSource())) - Insert(itr->GetSource()); -} - // Creature searchers -template<class Check> -void Trinity::CreatureSearcher<Check>::Visit(CreatureMapType &m) +template <class Check, class Result> +void Trinity::CreatureSearcherBase<Check, Result>::Visit(CreatureMapType& m) { - // already found - if (i_object) + if (this->ShouldContinue() == WorldObjectSearcherContinuation::Return) return; - for (CreatureMapType::iterator itr=m.begin(); itr != m.end(); ++itr) + for (GridReference<Creature> const& ref : m) { - if (!itr->GetSource()->InSamePhase(i_phaseMask)) + if (!ref.GetSource()->InSamePhase(i_phaseMask)) continue; - if (i_check(itr->GetSource())) + if (i_check(ref.GetSource())) { - i_object = itr->GetSource(); - return; - } - } -} + this->Insert(ref.GetSource()); -template<class Check> -void Trinity::CreatureLastSearcher<Check>::Visit(CreatureMapType &m) -{ - for (CreatureMapType::iterator itr=m.begin(); itr != m.end(); ++itr) - { - if (!itr->GetSource()->InSamePhase(i_phaseMask)) - continue; - - if (i_check(itr->GetSource())) - i_object = itr->GetSource(); + if (this->ShouldContinue() == WorldObjectSearcherContinuation::Return) + return; + } } } -template<class Check> -void Trinity::CreatureListSearcher<Check>::Visit(CreatureMapType &m) -{ - for (CreatureMapType::iterator itr=m.begin(); itr != m.end(); ++itr) - if (itr->GetSource()->InSamePhase(i_phaseMask)) - if (i_check(itr->GetSource())) - Insert(itr->GetSource()); -} - -template<class Check> -void Trinity::PlayerListSearcher<Check>::Visit(PlayerMapType &m) -{ - for (PlayerMapType::iterator itr=m.begin(); itr != m.end(); ++itr) - if (itr->GetSource()->InSamePhase(i_phaseMask)) - if (i_check(itr->GetSource())) - Insert(itr->GetSource()); -} +// Player searchers -template<class Check> -void Trinity::PlayerSearcher<Check>::Visit(PlayerMapType &m) +template <class Check, class Result> +void Trinity::PlayerSearcherBase<Check, Result>::Visit(PlayerMapType& m) { - // already found - if (i_object) + if (this->ShouldContinue() == WorldObjectSearcherContinuation::Return) return; - for (PlayerMapType::iterator itr=m.begin(); itr != m.end(); ++itr) + for (GridReference<Player> const& ref : m) { - if (!itr->GetSource()->InSamePhase(i_phaseMask)) + if (!ref.GetSource()->InSamePhase(i_phaseMask)) continue; - if (i_check(itr->GetSource())) + if (i_check(ref.GetSource())) { - i_object = itr->GetSource(); - return; - } - } -} + this->Insert(ref.GetSource()); -template<class Check> -void Trinity::PlayerLastSearcher<Check>::Visit(PlayerMapType& m) -{ - for (PlayerMapType::iterator itr = m.begin(); itr != m.end(); ++itr) - { - if (!itr->GetSource()->InSamePhase(i_phaseMask)) - continue; - - if (i_check(itr->GetSource())) - i_object = itr->GetSource(); + if (this->ShouldContinue() == WorldObjectSearcherContinuation::Return) + return; + } } } |