mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-19 17:05:44 +01:00
Core/Objects: Unify GameObjectSearcher, UnitSearcher, CreatureSearcher and PlayerSearcher classes into one common implementation
(cherry picked from commit 526b16fea4)
This commit is contained in:
@@ -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)
|
||||
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_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)
|
||||
{
|
||||
if (!(i_mapTypeMask & GRID_MAP_TYPE_MASK_DYNAMICOBJECT))
|
||||
return;
|
||||
for (DynamicObjectMapType::iterator 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> &) { }
|
||||
};
|
||||
|
||||
template<class Check>
|
||||
struct GameObjectSearcher : GameObjectSearcherBase<Check, SearcherFirstObjectResult<GameObject*>>
|
||||
{
|
||||
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 GameObjectLastSearcher
|
||||
struct GameObjectLastSearcher : GameObjectSearcherBase<Check, SearcherLastObjectResult<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> &) { }
|
||||
GameObjectLastSearcher(WorldObject const* searcher, GameObject*& result, Check& check)
|
||||
: GameObjectSearcherBase<Check, SearcherLastObjectResult<GameObject*>>(searcher->GetPhaseMask(), result, check) { }
|
||||
};
|
||||
|
||||
template<class Check>
|
||||
struct GameObjectListSearcher : SearcherContainerResult<GameObject*>
|
||||
struct GameObjectListSearcher : GameObjectSearcherBase<Check, SearcherContainerResult<GameObject*>>
|
||||
{
|
||||
uint32 i_phaseMask;
|
||||
Check& i_check;
|
||||
|
||||
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,107 +395,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
|
||||
{
|
||||
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);
|
||||
};
|
||||
|
||||
// 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->GetPhaseMask(), 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*>>
|
||||
{
|
||||
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);
|
||||
|
||||
template<class NOT_INTERESTED> void Visit(GridRefManager<NOT_INTERESTED> &) { }
|
||||
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
|
||||
{
|
||||
uint32 i_phaseMask;
|
||||
Creature* &i_object;
|
||||
Check & i_check;
|
||||
|
||||
CreatureSearcher(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> &) { }
|
||||
};
|
||||
|
||||
// Last accepted by Check Creature if any (Check can change requirements at each call)
|
||||
template<class Check>
|
||||
struct CreatureLastSearcher
|
||||
{
|
||||
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> &) { }
|
||||
};
|
||||
|
||||
template<class Check>
|
||||
struct CreatureListSearcher : SearcherContainerResult<Creature*>
|
||||
template<class Check, class Result>
|
||||
struct CreatureSearcherBase : Result
|
||||
{
|
||||
uint32 i_phaseMask;
|
||||
Check& i_check;
|
||||
|
||||
template<typename Container>
|
||||
CreatureListSearcher(WorldObject const* searcher, Container& container, Check & check)
|
||||
: SearcherContainerResult<Creature*>(container),
|
||||
i_phaseMask(searcher->GetPhaseMask()), i_check(check) { }
|
||||
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> &) { }
|
||||
};
|
||||
|
||||
template<class Check>
|
||||
struct CreatureSearcher : CreatureSearcherBase<Check, SearcherFirstObjectResult<Creature*>>
|
||||
{
|
||||
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 CreatureLastSearcher : CreatureSearcherBase<Check, SearcherLastObjectResult<Creature*>>
|
||||
{
|
||||
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)
|
||||
: CreatureSearcherBase<Check, SearcherContainerResult<Creature*>>(searcher->GetPhaseMask(), container, check) { }
|
||||
};
|
||||
|
||||
template<class Do>
|
||||
struct CreatureWorker
|
||||
{
|
||||
@@ -562,58 +500,47 @@ namespace Trinity
|
||||
|
||||
// Player searchers
|
||||
|
||||
template<class Check>
|
||||
struct PlayerSearcher
|
||||
{
|
||||
uint32 i_phaseMask;
|
||||
Player* &i_object;
|
||||
Check & i_check;
|
||||
|
||||
PlayerSearcher(WorldObject const* searcher, Player* & result, Check & check)
|
||||
: i_phaseMask(searcher->GetPhaseMask()), 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
|
||||
{
|
||||
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> &) { }
|
||||
};
|
||||
|
||||
template<class Check>
|
||||
struct PlayerLastSearcher
|
||||
{
|
||||
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)
|
||||
{
|
||||
}
|
||||
PlayerSearcherBase(uint32 phaseMask, Container& result, Check& check)
|
||||
: Result(result), i_phaseMask(phaseMask), 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->GetPhaseMask(), result, check) { }
|
||||
};
|
||||
|
||||
template<class Check>
|
||||
struct PlayerLastSearcher : PlayerSearcherBase<Check, SearcherLastObjectResult<Player*>>
|
||||
{
|
||||
PlayerLastSearcher(WorldObject const* searcher, Player*& result, Check& check)
|
||||
: PlayerSearcherBase<Check, SearcherLastObjectResult<Player*>>(searcher->GetPhaseMask(), 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->GetPhaseMask(), container, check) { }
|
||||
|
||||
template<typename Container>
|
||||
PlayerListSearcher(uint32 phaseMask, Container& container, Check& check)
|
||||
: PlayerSearcherBase<Check, SearcherContainerResult<Player*>>(phaseMask, container, check) { }
|
||||
};
|
||||
|
||||
template<class Do>
|
||||
struct PlayerWorker
|
||||
{
|
||||
|
||||
@@ -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,220 +65,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_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());
|
||||
|
||||
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_phaseMask))
|
||||
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_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;
|
||||
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_phaseMask))
|
||||
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_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());
|
||||
|
||||
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_phaseMask))
|
||||
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_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());
|
||||
}
|
||||
|
||||
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_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());
|
||||
|
||||
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_phaseMask))
|
||||
continue;
|
||||
|
||||
if (i_check(itr->GetSource()))
|
||||
i_object = itr->GetSource();
|
||||
}
|
||||
}
|
||||
|
||||
template<class Builder>
|
||||
void Trinity::LocalizedPacketDo<Builder>::operator()(Player* p)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user