diff options
author | ariel- <ariel-@users.noreply.github.com> | 2016-10-13 01:23:02 -0300 |
---|---|---|
committer | ariel- <ariel-@users.noreply.github.com> | 2016-10-13 01:23:02 -0300 |
commit | 1667dd3b7ad93b67298d27d0b759f886188ebcfa (patch) | |
tree | c3d76bab8ad9c3d61e0b42fc9d2066e67a03d3be /src | |
parent | 318f21b391b73fbb0c2ec182663f94615ceed631 (diff) |
Core/Entities: extend available containers for WorldObject::GetxxxInGrid
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Entities/Object/Object.cpp | 112 | ||||
-rw-r--r-- | src/server/game/Entities/Object/Object.h | 11 |
2 files changed, 34 insertions, 89 deletions
diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp index aea923f6eac..c02bef32506 100644 --- a/src/server/game/Entities/Object/Object.cpp +++ b/src/server/game/Entities/Object/Object.cpp @@ -2116,114 +2116,42 @@ GameObject* WorldObject::FindNearestGameObjectOfType(GameobjectTypes type, float return go; } -void WorldObject::GetGameObjectListWithEntryInGrid(std::list<GameObject*>& gameobjectList, uint32 entry, float maxSearchRange) const +template <typename Container> +void WorldObject::GetGameObjectListWithEntryInGrid(Container& gameObjectContainer, uint32 entry, float maxSearchRange /*= 250.0f*/) const { - CellCoord pair(Trinity::ComputeCellCoord(this->GetPositionX(), this->GetPositionY())); + CellCoord pair(Trinity::ComputeCellCoord(GetPositionX(), GetPositionY())); Cell cell(pair); cell.SetNoCreate(); Trinity::AllGameObjectsWithEntryInRange check(this, entry, maxSearchRange); - Trinity::GameObjectListSearcher<Trinity::AllGameObjectsWithEntryInRange> searcher(this, gameobjectList, check); + Trinity::GameObjectListSearcher<Trinity::AllGameObjectsWithEntryInRange> searcher(this, gameObjectContainer, check); TypeContainerVisitor<Trinity::GameObjectListSearcher<Trinity::AllGameObjectsWithEntryInRange>, GridTypeMapContainer> visitor(searcher); - cell.Visit(pair, visitor, *(this->GetMap()), *this, maxSearchRange); + cell.Visit(pair, visitor, *GetMap(), *this, maxSearchRange); } -void WorldObject::GetCreatureListWithEntryInGrid(std::list<Creature*>& creatureList, uint32 entry, float maxSearchRange) const +template <typename Container> +void WorldObject::GetCreatureListWithEntryInGrid(Container& creatureContainer, uint32 entry, float maxSearchRange /*= 250.0f*/) const { - CellCoord pair(Trinity::ComputeCellCoord(this->GetPositionX(), this->GetPositionY())); + CellCoord pair(Trinity::ComputeCellCoord(GetPositionX(), GetPositionY())); Cell cell(pair); cell.SetNoCreate(); Trinity::AllCreaturesOfEntryInRange check(this, entry, maxSearchRange); - Trinity::CreatureListSearcher<Trinity::AllCreaturesOfEntryInRange> searcher(this, creatureList, check); + Trinity::CreatureListSearcher<Trinity::AllCreaturesOfEntryInRange> searcher(this, creatureContainer, check); TypeContainerVisitor<Trinity::CreatureListSearcher<Trinity::AllCreaturesOfEntryInRange>, GridTypeMapContainer> visitor(searcher); - cell.Visit(pair, visitor, *(this->GetMap()), *this, maxSearchRange); + cell.Visit(pair, visitor, *GetMap(), *this, maxSearchRange); } -void WorldObject::GetPlayerListInGrid(std::list<Player*>& playerList, float maxSearchRange) const +template <typename Container> +void WorldObject::GetPlayerListInGrid(Container& playerContainer, float maxSearchRange) const { Trinity::AnyPlayerInObjectRangeCheck checker(this, maxSearchRange); - Trinity::PlayerListSearcher<Trinity::AnyPlayerInObjectRangeCheck> searcher(this, playerList, checker); - this->VisitNearbyWorldObject(maxSearchRange, searcher); + Trinity::PlayerListSearcher<Trinity::AnyPlayerInObjectRangeCheck> searcher(this, playerContainer, checker); + VisitNearbyWorldObject(maxSearchRange, searcher); } -/* -namespace Trinity -{ - class NearUsedPosDo - { - public: - NearUsedPosDo(WorldObject const& obj, WorldObject const* searcher, float angle, ObjectPosSelector& selector) - : i_object(obj), i_searcher(searcher), i_angle(angle), i_selector(selector) { } - - void operator()(Corpse*) const { } - void operator()(DynamicObject*) const { } - - void operator()(Creature* c) const - { - // skip self or target - if (c == i_searcher || c == &i_object) - return; - - float x, y, z; - - if (!c->IsAlive() || c->HasUnitState(UNIT_STATE_ROOT | UNIT_STATE_STUNNED | UNIT_STATE_DISTRACTED) || - !c->GetMotionMaster()->GetDestination(x, y, z)) - { - x = c->GetPositionX(); - y = c->GetPositionY(); - } - - add(c, x, y); - } - - template<class T> - void operator()(T* u) const - { - // skip self or target - if (u == i_searcher || u == &i_object) - return; - - float x, y; - - x = u->GetPositionX(); - y = u->GetPositionY(); - - add(u, x, y); - } - - // we must add used pos that can fill places around center - void add(WorldObject* u, float x, float y) const - { - // u is too nearest/far away to i_object - if (!i_object.IsInRange2d(x, y, i_selector.m_dist - i_selector.m_size, i_selector.m_dist + i_selector.m_size)) - return; - - float angle = i_object.GetAngle(u)-i_angle; - - // move angle to range -pi ... +pi - while (angle > M_PI) - angle -= 2.0f * M_PI; - while (angle < -M_PI) - angle += 2.0f * M_PI; - - // dist include size of u - float dist2d = i_object.GetDistance2d(x, y); - i_selector.AddUsedPos(u->GetObjectSize(), angle, dist2d + i_object.GetObjectSize()); - } - private: - WorldObject const& i_object; - WorldObject const* i_searcher; - float i_angle; - ObjectPosSelector& i_selector; - }; -} // namespace Trinity -*/ - -//=================================================================================================== - void WorldObject::GetNearPoint2D(float &x, float &y, float distance2d, float absAngle) const { x = GetPositionX() + (GetObjectSize() + distance2d) * std::cos(absAngle); @@ -2623,3 +2551,15 @@ ObjectGuid WorldObject::GetTransGUID() const return GetTransport()->GetGUID(); return ObjectGuid::Empty; } + +template void WorldObject::GetGameObjectListWithEntryInGrid(std::list<GameObject*>&, uint32, float) const; +template void WorldObject::GetGameObjectListWithEntryInGrid(std::deque<GameObject*>&, uint32, float) const; +template void WorldObject::GetGameObjectListWithEntryInGrid(std::vector<GameObject*>&, uint32, float) const; + +template void WorldObject::GetCreatureListWithEntryInGrid(std::list<Creature*>&, uint32, float) const; +template void WorldObject::GetCreatureListWithEntryInGrid(std::deque<Creature*>&, uint32, float) const; +template void WorldObject::GetCreatureListWithEntryInGrid(std::vector<Creature*>&, uint32, float) const; + +template void WorldObject::GetPlayerListInGrid(std::list<Player*>&, float) const; +template void WorldObject::GetPlayerListInGrid(std::deque<Player*>&, float) const; +template void WorldObject::GetPlayerListInGrid(std::vector<Player*>&, float) const; diff --git a/src/server/game/Entities/Object/Object.h b/src/server/game/Entities/Object/Object.h index 2fdb9433356..e107a5f6bfd 100644 --- a/src/server/game/Entities/Object/Object.h +++ b/src/server/game/Entities/Object/Object.h @@ -558,9 +558,14 @@ class TC_GAME_API WorldObject : public Object, public WorldLocation GameObject* FindNearestGameObject(uint32 entry, float range) const; GameObject* FindNearestGameObjectOfType(GameobjectTypes type, float range) const; - void GetGameObjectListWithEntryInGrid(std::list<GameObject*>& lList, uint32 uiEntry = 0, float fMaxSearchRange = 250.0f) const; - void GetCreatureListWithEntryInGrid(std::list<Creature*>& lList, uint32 uiEntry = 0, float fMaxSearchRange = 250.0f) const; - void GetPlayerListInGrid(std::list<Player*>& lList, float fMaxSearchRange) const; + template <typename Container> + void GetGameObjectListWithEntryInGrid(Container& gameObjectContainer, uint32 entry, float maxSearchRange = 250.0f) const; + + template <typename Container> + void GetCreatureListWithEntryInGrid(Container& creatureContainer, uint32 entry, float maxSearchRange = 250.0f) const; + + template <typename Container> + void GetPlayerListInGrid(Container& playerContainer, float maxSearchRange) const; void DestroyForNearbyPlayers(); virtual void UpdateObjectVisibility(bool forced = true); |