mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-16 07:30:42 +01:00
Core/Objects: Unify GameObjectSearcher, UnitSearcher, CreatureSearcher and PlayerSearcher classes into one common implementation
This commit is contained in:
@@ -312,11 +312,11 @@ namespace Trinity
|
||||
{
|
||||
uint32 i_mapTypeMask;
|
||||
PhaseShift const* i_phaseShift;
|
||||
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_phaseShift(&searcher->GetPhaseShift()), i_check(check) { }
|
||||
WorldObjectSearcherBase(PhaseShift const* phaseShift, Container& result, Check& check, uint32 mapTypeMask = GRID_MAP_TYPE_MASK_ALL)
|
||||
: Result(result), i_mapTypeMask(mapTypeMask), i_phaseShift(phaseShift), i_check(check) { }
|
||||
|
||||
template<class T>
|
||||
void Visit(GridRefManager<T>&);
|
||||
@@ -326,22 +326,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->GetPhaseShift(), 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->GetPhaseShift(), 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->GetPhaseShift(), container, check, mapTypeMask) { }
|
||||
};
|
||||
|
||||
template<class Do>
|
||||
@@ -354,127 +354,55 @@ namespace Trinity
|
||||
WorldObjectWorker(WorldObject const* searcher, Do const& _do, uint32 mapTypeMask = GRID_MAP_TYPE_MASK_ALL)
|
||||
: i_mapTypeMask(mapTypeMask), i_phaseShift(&searcher->GetPhaseShift()), i_do(_do) { }
|
||||
|
||||
void Visit(GameObjectMapType &m)
|
||||
template<class T>
|
||||
void Visit(GridRefManager<T>& m)
|
||||
{
|
||||
if (!(i_mapTypeMask & GRID_MAP_TYPE_MASK_GAMEOBJECT))
|
||||
if (!(i_mapTypeMask & GridMapTypeMaskForType<T>::value))
|
||||
return;
|
||||
for (GameObjectMapType::iterator itr=m.begin(); itr != m.end(); ++itr)
|
||||
for (auto itr = m.begin(); itr != m.end(); ++itr)
|
||||
if (itr->GetSource()->InSamePhase(*i_phaseShift))
|
||||
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_phaseShift))
|
||||
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_phaseShift))
|
||||
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_phaseShift))
|
||||
i_do(itr->GetSource());
|
||||
}
|
||||
|
||||
void Visit(DynamicObjectMapType &m)
|
||||
{
|
||||
if (!(i_mapTypeMask & GRID_MAP_TYPE_MASK_DYNAMICOBJECT))
|
||||
return;
|
||||
for (DynamicObjectMapType::iterator itr=m.begin(); itr != m.end(); ++itr)
|
||||
if (itr->GetSource()->InSamePhase(*i_phaseShift))
|
||||
i_do(itr->GetSource());
|
||||
}
|
||||
|
||||
void Visit(AreaTriggerMapType &m)
|
||||
{
|
||||
if (!(i_mapTypeMask & GRID_MAP_TYPE_MASK_AREATRIGGER))
|
||||
return;
|
||||
for (AreaTriggerMapType::iterator itr=m.begin(); itr != m.end(); ++itr)
|
||||
if (itr->GetSource()->InSamePhase(*i_phaseShift))
|
||||
i_do(itr->GetSource());
|
||||
}
|
||||
|
||||
void Visit(SceneObjectMapType& m)
|
||||
{
|
||||
if (!(i_mapTypeMask & GRID_MAP_TYPE_MASK_SCENEOBJECT))
|
||||
return;
|
||||
for (SceneObjectMapType::iterator itr = m.begin(); itr != m.end(); ++itr)
|
||||
if (itr->GetSource()->InSamePhase(*i_phaseShift))
|
||||
i_do(itr->GetSource());
|
||||
}
|
||||
|
||||
void Visit(ConversationMapType &m)
|
||||
{
|
||||
if (!(i_mapTypeMask & GRID_MAP_TYPE_MASK_CONVERSATION))
|
||||
return;
|
||||
for (ConversationMapType::iterator itr = m.begin(); itr != m.end(); ++itr)
|
||||
if (itr->GetSource()->InSamePhase(*i_phaseShift))
|
||||
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
|
||||
{
|
||||
PhaseShift const* i_phaseShift;
|
||||
GameObject* &i_object;
|
||||
Check &i_check;
|
||||
|
||||
GameObjectSearcher(WorldObject const* searcher, GameObject* & result, Check& check)
|
||||
: i_phaseShift(&searcher->GetPhaseShift()), i_object(result), i_check(check) { }
|
||||
template<typename Container>
|
||||
GameObjectSearcherBase(PhaseShift const* phaseShift, Container& result, Check& check)
|
||||
: Result(result), i_phaseShift(phaseShift), i_check(check) { }
|
||||
|
||||
void Visit(GameObjectMapType &m);
|
||||
void Visit(GameObjectMapType& m);
|
||||
|
||||
template<class NOT_INTERESTED> void Visit(GridRefManager<NOT_INTERESTED> &) { }
|
||||
};
|
||||
|
||||
template<class Check>
|
||||
struct GameObjectSearcher : GameObjectSearcherBase<Check, SearcherFirstObjectResult<GameObject*>>
|
||||
{
|
||||
GameObjectSearcher(WorldObject const* searcher, GameObject*& result, Check& check)
|
||||
: GameObjectSearcherBase<Check, SearcherFirstObjectResult<GameObject*>>(&searcher->GetPhaseShift(), result, check) { }
|
||||
};
|
||||
|
||||
// Last accepted by Check GO if any (Check can change requirements at each call)
|
||||
template<class Check>
|
||||
struct GameObjectLastSearcher
|
||||
struct GameObjectLastSearcher : GameObjectSearcherBase<Check, SearcherLastObjectResult<GameObject*>>
|
||||
{
|
||||
PhaseShift const* i_phaseShift;
|
||||
GameObject* &i_object;
|
||||
Check& i_check;
|
||||
|
||||
GameObjectLastSearcher(WorldObject const* searcher, GameObject* & result, Check& check)
|
||||
: i_phaseShift(&searcher->GetPhaseShift()), i_object(result), i_check(check) { }
|
||||
|
||||
void Visit(GameObjectMapType &m);
|
||||
|
||||
template<class NOT_INTERESTED> void Visit(GridRefManager<NOT_INTERESTED> &) { }
|
||||
GameObjectLastSearcher(WorldObject const* searcher, GameObject*& result, Check& check)
|
||||
: GameObjectSearcherBase<Check, SearcherLastObjectResult<GameObject*>>(&searcher->GetPhaseShift(), result, check) { }
|
||||
};
|
||||
|
||||
template<class Check>
|
||||
struct GameObjectListSearcher : SearcherContainerResult<GameObject*>
|
||||
struct GameObjectListSearcher : GameObjectSearcherBase<Check, SearcherContainerResult<GameObject*>>
|
||||
{
|
||||
PhaseShift const* i_phaseShift;
|
||||
Check& i_check;
|
||||
|
||||
template<typename Container>
|
||||
GameObjectListSearcher(WorldObject const* searcher, Container& container, Check & check)
|
||||
: SearcherContainerResult<GameObject*>(container),
|
||||
i_phaseShift(&searcher->GetPhaseShift()), 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->GetPhaseShift(), container, check) { }
|
||||
};
|
||||
|
||||
template<class Functor>
|
||||
@@ -499,107 +427,90 @@ namespace Trinity
|
||||
|
||||
// Unit searchers
|
||||
|
||||
// First accepted by Check Unit if any
|
||||
template<class Check>
|
||||
struct UnitSearcher
|
||||
template<class Check, class Result>
|
||||
struct UnitSearcherBase : Result
|
||||
{
|
||||
PhaseShift const* i_phaseShift;
|
||||
Unit* &i_object;
|
||||
Check & i_check;
|
||||
Check& i_check;
|
||||
|
||||
UnitSearcher(WorldObject const* searcher, Unit* & result, Check & check)
|
||||
: i_phaseShift(&searcher->GetPhaseShift()), i_object(result), i_check(check) { }
|
||||
template<typename Container>
|
||||
UnitSearcherBase(PhaseShift const* phaseShift, Container& result, Check& check)
|
||||
: Result(result), i_phaseShift(phaseShift), 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);
|
||||
};
|
||||
|
||||
// First accepted by Check Unit if any
|
||||
template<class Check>
|
||||
struct UnitSearcher : UnitSearcherBase<Check, SearcherFirstObjectResult<Unit*>>
|
||||
{
|
||||
UnitSearcher(WorldObject const* searcher, Unit*& result, Check& check)
|
||||
: UnitSearcherBase<Check, SearcherFirstObjectResult<Unit*>>(&searcher->GetPhaseShift(), result, check) { }
|
||||
};
|
||||
|
||||
// Last accepted by Check Unit if any (Check can change requirements at each call)
|
||||
template<class Check>
|
||||
struct UnitLastSearcher
|
||||
struct UnitLastSearcher : UnitSearcherBase<Check, SearcherLastObjectResult<Unit*>>
|
||||
{
|
||||
PhaseShift const* i_phaseShift;
|
||||
Unit* &i_object;
|
||||
Check & i_check;
|
||||
|
||||
UnitLastSearcher(WorldObject const* searcher, Unit* & result, Check & check)
|
||||
: i_phaseShift(&searcher->GetPhaseShift()), i_object(result), i_check(check) { }
|
||||
|
||||
void Visit(CreatureMapType &m);
|
||||
void Visit(PlayerMapType &m);
|
||||
|
||||
template<class NOT_INTERESTED> void Visit(GridRefManager<NOT_INTERESTED> &) { }
|
||||
UnitLastSearcher(WorldObject const* searcher, Unit*& result, Check& check)
|
||||
: UnitSearcherBase<Check, SearcherLastObjectResult<Unit*>>(&searcher->GetPhaseShift(), result, check) { }
|
||||
};
|
||||
|
||||
// All accepted by Check units if any
|
||||
template<class Check>
|
||||
struct UnitListSearcher : SearcherContainerResult<Unit*>
|
||||
struct UnitListSearcher : UnitSearcherBase<Check, SearcherContainerResult<Unit*>>
|
||||
{
|
||||
PhaseShift const* i_phaseShift;
|
||||
Check& i_check;
|
||||
|
||||
template<typename Container>
|
||||
UnitListSearcher(WorldObject const* searcher, Container& container, Check& check)
|
||||
: SearcherContainerResult<Unit*>(container),
|
||||
i_phaseShift(&searcher->GetPhaseShift()), 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->GetPhaseShift(), container, check) { }
|
||||
};
|
||||
|
||||
// Creature searchers
|
||||
|
||||
template<class Check>
|
||||
struct CreatureSearcher
|
||||
{
|
||||
PhaseShift const* i_phaseShift;
|
||||
Creature* &i_object;
|
||||
Check & i_check;
|
||||
|
||||
CreatureSearcher(WorldObject const* searcher, Creature* & result, Check & check)
|
||||
: i_phaseShift(&searcher->GetPhaseShift()), i_object(result), i_check(check) { }
|
||||
|
||||
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
|
||||
{
|
||||
PhaseShift const* i_phaseShift;
|
||||
Creature* &i_object;
|
||||
Check & i_check;
|
||||
|
||||
CreatureLastSearcher(WorldObject const* searcher, Creature* & result, Check & check)
|
||||
: i_phaseShift(&searcher->GetPhaseShift()), i_object(result), i_check(check) { }
|
||||
|
||||
void Visit(CreatureMapType &m);
|
||||
|
||||
template<class NOT_INTERESTED> void Visit(GridRefManager<NOT_INTERESTED> &) { }
|
||||
};
|
||||
|
||||
template<class Check>
|
||||
struct CreatureListSearcher : SearcherContainerResult<Creature*>
|
||||
template<class Check, class Result>
|
||||
struct CreatureSearcherBase : Result
|
||||
{
|
||||
PhaseShift const* i_phaseShift;
|
||||
Check& i_check;
|
||||
|
||||
template<typename Container>
|
||||
CreatureListSearcher(WorldObject const* searcher, Container& container, Check & check)
|
||||
: SearcherContainerResult<Creature*>(container),
|
||||
i_phaseShift(&searcher->GetPhaseShift()), i_check(check) { }
|
||||
CreatureSearcherBase(PhaseShift const* phaseShift, Container& result, Check& check)
|
||||
: Result(result), i_phaseShift(phaseShift), i_check(check) { }
|
||||
|
||||
void Visit(CreatureMapType &m);
|
||||
void Visit(CreatureMapType& m);
|
||||
|
||||
template<class NOT_INTERESTED> void Visit(GridRefManager<NOT_INTERESTED> &) { }
|
||||
};
|
||||
|
||||
template<class Check>
|
||||
struct CreatureSearcher : CreatureSearcherBase<Check, SearcherFirstObjectResult<Creature*>>
|
||||
{
|
||||
CreatureSearcher(WorldObject const* searcher, Creature*& result, Check& check)
|
||||
: CreatureSearcherBase<Check, SearcherFirstObjectResult<Creature*>>(&searcher->GetPhaseShift(), result, check) { }
|
||||
};
|
||||
|
||||
// Last accepted by Check Creature if any (Check can change requirements at each call)
|
||||
template<class Check>
|
||||
struct CreatureLastSearcher : CreatureSearcherBase<Check, SearcherLastObjectResult<Creature*>>
|
||||
{
|
||||
CreatureLastSearcher(WorldObject const* searcher, Creature*& result, Check& check)
|
||||
: CreatureSearcherBase<Check, SearcherLastObjectResult<Creature*>>(&searcher->GetPhaseShift(), result, check) { }
|
||||
};
|
||||
|
||||
template<class Check>
|
||||
struct CreatureListSearcher : CreatureSearcherBase<Check, SearcherContainerResult<Creature*>>
|
||||
{
|
||||
template<typename Container>
|
||||
CreatureListSearcher(WorldObject const* searcher, Container& container, Check & check)
|
||||
: CreatureSearcherBase<Check, SearcherContainerResult<Creature*>>(&searcher->GetPhaseShift(), container, check) { }
|
||||
};
|
||||
|
||||
template<class Do>
|
||||
struct CreatureWorker
|
||||
{
|
||||
@@ -621,58 +532,47 @@ namespace Trinity
|
||||
|
||||
// Player searchers
|
||||
|
||||
template<class Check>
|
||||
struct PlayerSearcher
|
||||
{
|
||||
PhaseShift const* i_phaseShift;
|
||||
Player* &i_object;
|
||||
Check & i_check;
|
||||
|
||||
PlayerSearcher(WorldObject const* searcher, Player* & result, Check & check)
|
||||
: i_phaseShift(&searcher->GetPhaseShift()), i_object(result), i_check(check) { }
|
||||
|
||||
void Visit(PlayerMapType &m);
|
||||
|
||||
template<class NOT_INTERESTED> void Visit(GridRefManager<NOT_INTERESTED> &) { }
|
||||
};
|
||||
|
||||
template<class Check>
|
||||
struct PlayerListSearcher : SearcherContainerResult<Player*>
|
||||
template<class Check, class Result>
|
||||
struct PlayerSearcherBase : Result
|
||||
{
|
||||
PhaseShift const* i_phaseShift;
|
||||
Check& i_check;
|
||||
|
||||
template<typename Container>
|
||||
PlayerListSearcher(WorldObject const* searcher, Container& container, Check & check)
|
||||
: SearcherContainerResult<Player*>(container),
|
||||
i_phaseShift(&searcher->GetPhaseShift()), i_check(check) { }
|
||||
|
||||
template<typename Container>
|
||||
PlayerListSearcher(PhaseShift const& phaseShift, Container& container, Check & check)
|
||||
: SearcherContainerResult<Player*>(container),
|
||||
i_phaseShift(&phaseShift), i_check(check) { }
|
||||
|
||||
void Visit(PlayerMapType &m);
|
||||
|
||||
template<class NOT_INTERESTED> void Visit(GridRefManager<NOT_INTERESTED> &) { }
|
||||
};
|
||||
|
||||
template<class Check>
|
||||
struct PlayerLastSearcher
|
||||
{
|
||||
PhaseShift const* i_phaseShift;
|
||||
Player* &i_object;
|
||||
Check& i_check;
|
||||
|
||||
PlayerLastSearcher(WorldObject const* searcher, Player*& result, Check& check) : i_phaseShift(&searcher->GetPhaseShift()), i_object(result), i_check(check)
|
||||
{
|
||||
}
|
||||
PlayerSearcherBase(PhaseShift const* phaseShift, Container& result, Check& check)
|
||||
: Result(result), i_phaseShift(phaseShift), i_check(check) { }
|
||||
|
||||
void Visit(PlayerMapType& m);
|
||||
|
||||
template<class NOT_INTERESTED> void Visit(GridRefManager<NOT_INTERESTED> &) { }
|
||||
};
|
||||
|
||||
template<class Check>
|
||||
struct PlayerSearcher : PlayerSearcherBase<Check, SearcherFirstObjectResult<Player*>>
|
||||
{
|
||||
PlayerSearcher(WorldObject const* searcher, Player*& result, Check& check)
|
||||
: PlayerSearcherBase<Check, SearcherFirstObjectResult<Player*>>(&searcher->GetPhaseShift(), result, check) { }
|
||||
};
|
||||
|
||||
template<class Check>
|
||||
struct PlayerLastSearcher : PlayerSearcherBase<Check, SearcherLastObjectResult<Player*>>
|
||||
{
|
||||
PlayerLastSearcher(WorldObject const* searcher, Player*& result, Check& check)
|
||||
: PlayerSearcherBase<Check, SearcherLastObjectResult<Player*>>(&searcher->GetPhaseShift(), result, check) { }
|
||||
};
|
||||
|
||||
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->GetPhaseShift(), container, check) { }
|
||||
|
||||
template<typename Container>
|
||||
PlayerListSearcher(PhaseShift const& phaseShift, Container& container, Check& check)
|
||||
: PlayerSearcherBase<Check, SearcherContainerResult<Player*>>(phaseShift, container, check) { }
|
||||
};
|
||||
|
||||
template<class Do>
|
||||
struct PlayerWorker
|
||||
{
|
||||
|
||||
@@ -190,11 +190,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;
|
||||
@@ -204,220 +204,97 @@ 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_phaseShift))
|
||||
if (!ref.GetSource()->InSamePhase(*i_phaseShift))
|
||||
continue;
|
||||
|
||||
if (i_check(itr->GetSource()))
|
||||
if (i_check(ref.GetSource()))
|
||||
{
|
||||
i_object = itr->GetSource();
|
||||
return;
|
||||
this->Insert(ref.GetSource());
|
||||
|
||||
if (this->ShouldContinue() == WorldObjectSearcherContinuation::Return)
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
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_phaseShift))
|
||||
continue;
|
||||
|
||||
if (i_check(itr->GetSource()))
|
||||
i_object = itr->GetSource();
|
||||
}
|
||||
}
|
||||
|
||||
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_phaseShift))
|
||||
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_phaseShift))
|
||||
if (!ref.GetSource()->InSamePhase(*i_phaseShift))
|
||||
continue;
|
||||
|
||||
if (i_check(itr->GetSource()))
|
||||
if (i_check(ref.GetSource()))
|
||||
{
|
||||
i_object = itr->GetSource();
|
||||
return;
|
||||
this->Insert(ref.GetSource());
|
||||
|
||||
if (this->ShouldContinue() == WorldObjectSearcherContinuation::Return)
|
||||
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_phaseShift))
|
||||
continue;
|
||||
|
||||
if (i_check(itr->GetSource()))
|
||||
{
|
||||
i_object = itr->GetSource();
|
||||
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_phaseShift))
|
||||
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_phaseShift))
|
||||
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_phaseShift))
|
||||
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_phaseShift))
|
||||
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_phaseShift))
|
||||
if (!ref.GetSource()->InSamePhase(*i_phaseShift))
|
||||
continue;
|
||||
|
||||
if (i_check(itr->GetSource()))
|
||||
if (i_check(ref.GetSource()))
|
||||
{
|
||||
i_object = itr->GetSource();
|
||||
return;
|
||||
this->Insert(ref.GetSource());
|
||||
|
||||
if (this->ShouldContinue() == WorldObjectSearcherContinuation::Return)
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
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_phaseShift))
|
||||
continue;
|
||||
// Player searchers
|
||||
|
||||
if (i_check(itr->GetSource()))
|
||||
i_object = itr->GetSource();
|
||||
}
|
||||
}
|
||||
|
||||
template<class Check>
|
||||
void Trinity::CreatureListSearcher<Check>::Visit(CreatureMapType &m)
|
||||
template <class Check, class Result>
|
||||
void Trinity::PlayerSearcherBase<Check, Result>::Visit(PlayerMapType& m)
|
||||
{
|
||||
for (CreatureMapType::iterator itr=m.begin(); itr != m.end(); ++itr)
|
||||
if (itr->GetSource()->InSamePhase(*i_phaseShift))
|
||||
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_phaseShift))
|
||||
if (i_check(itr->GetSource()))
|
||||
Insert(itr->GetSource());
|
||||
}
|
||||
|
||||
template<class Check>
|
||||
void Trinity::PlayerSearcher<Check>::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_phaseShift))
|
||||
if (!ref.GetSource()->InSamePhase(*i_phaseShift))
|
||||
continue;
|
||||
|
||||
if (i_check(itr->GetSource()))
|
||||
if (i_check(ref.GetSource()))
|
||||
{
|
||||
i_object = itr->GetSource();
|
||||
return;
|
||||
this->Insert(ref.GetSource());
|
||||
|
||||
if (this->ShouldContinue() == WorldObjectSearcherContinuation::Return)
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
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_phaseShift))
|
||||
continue;
|
||||
|
||||
if (i_check(itr->GetSource()))
|
||||
i_object = itr->GetSource();
|
||||
}
|
||||
}
|
||||
|
||||
template<typename Localizer>
|
||||
void Trinity::LocalizedDo<Localizer>::operator()(Player const* p)
|
||||
{
|
||||
|
||||
@@ -45,6 +45,7 @@
|
||||
#include "ObjectMgr.h"
|
||||
#include "PathGenerator.h"
|
||||
#include "Pet.h"
|
||||
#include "PhasingHandler.h"
|
||||
#include "Player.h"
|
||||
#include "ScriptMgr.h"
|
||||
#include "SharedDefines.h"
|
||||
|
||||
Reference in New Issue
Block a user