aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Entities/Object
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2017-05-13 19:37:33 +0200
committerariel- <ariel-@users.noreply.github.com>2017-06-19 13:16:13 -0300
commitd6201e5dbb7fa7ca8b47ffa6c0d30fa38dceada5 (patch)
tree24f77462be2079c892dd604b4a1979f476e56e3c /src/server/game/Entities/Object
parent7874bee7bfb70e0e039f91173cff212e9572de09 (diff)
Core/Grids: Ported cmangos/mangos-wotlk@ea99457e50790acde8928aa0f3dc4a9c096b4a8c
(cherry picked from commit 9299e9bde087af7e5d777d5a55a3b79d2b63c48e)
Diffstat (limited to 'src/server/game/Entities/Object')
-rw-r--r--src/server/game/Entities/Object/Object.cpp42
-rw-r--r--src/server/game/Entities/Object/Object.h4
2 files changed, 13 insertions, 33 deletions
diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp
index 51c7273de96..a488f6523e1 100644
--- a/src/server/game/Entities/Object/Object.cpp
+++ b/src/server/game/Entities/Object/Object.cpp
@@ -1769,13 +1769,13 @@ void WorldObject::SendMessageToSet(WorldPacket const* data, bool self)
void WorldObject::SendMessageToSetInRange(WorldPacket const* data, float dist, bool /*self*/)
{
Trinity::MessageDistDeliverer notifier(this, data, dist);
- VisitNearbyWorldObject(dist, notifier);
+ Cell::VisitWorldObjects(this, notifier, dist);
}
void WorldObject::SendMessageToSet(WorldPacket const* data, Player const* skipped_rcvr)
{
Trinity::MessageDistDeliverer notifier(this, data, GetVisibilityRange(), false, skipped_rcvr);
- VisitNearbyWorldObject(GetVisibilityRange(), notifier);
+ Cell::VisitWorldObjects(this, notifier, GetVisibilityRange());
}
void WorldObject::SendObjectDeSpawnAnim(ObjectGuid guid)
@@ -1925,7 +1925,7 @@ TempSummon* Map::SummonCreature(uint32 entry, Position const& pos, SummonPropert
// call MoveInLineOfSight for nearby creatures
Trinity::AIRelocationNotifier notifier(*summon);
- summon->VisitNearbyObject(GetVisibilityRange(), notifier);
+ Cell::VisitAllObjects(summon, notifier, GetVisibilityRange());
return summon;
}
@@ -2086,7 +2086,7 @@ Creature* WorldObject::FindNearestCreature(uint32 entry, float range, bool alive
Creature* creature = nullptr;
Trinity::NearestCreatureEntryWithLiveStateInObjectRangeCheck checker(*this, entry, alive, range);
Trinity::CreatureLastSearcher<Trinity::NearestCreatureEntryWithLiveStateInObjectRangeCheck> searcher(this, creature, checker);
- VisitNearbyObject(range, searcher);
+ Cell::VisitAllObjects(this, searcher, range);
return creature;
}
@@ -2095,7 +2095,7 @@ GameObject* WorldObject::FindNearestGameObject(uint32 entry, float range) const
GameObject* go = nullptr;
Trinity::NearestGameObjectEntryInObjectRangeCheck checker(*this, entry, range);
Trinity::GameObjectLastSearcher<Trinity::NearestGameObjectEntryInObjectRangeCheck> searcher(this, go, checker);
- VisitNearbyGridObject(range, searcher);
+ Cell::VisitGridObjects(this, searcher, range);
return go;
}
@@ -2104,7 +2104,7 @@ GameObject* WorldObject::FindNearestGameObjectOfType(GameobjectTypes type, float
GameObject* go = nullptr;
Trinity::NearestGameObjectTypeInObjectRangeCheck checker(*this, type, range);
Trinity::GameObjectLastSearcher<Trinity::NearestGameObjectTypeInObjectRangeCheck> searcher(this, go, checker);
- VisitNearbyGridObject(range, searcher);
+ Cell::VisitGridObjects(this, searcher, range);
return go;
}
@@ -2114,7 +2114,7 @@ Player* WorldObject::SelectNearestPlayer(float distance) const
Trinity::NearestPlayerInObjectRangeCheck checker(this, distance);
Trinity::PlayerLastSearcher<Trinity::NearestPlayerInObjectRangeCheck> searcher(this, target, checker);
- VisitNearbyObject(distance, searcher);
+ Cell::VisitWorldObjects(this, searcher, distance);
return target;
}
@@ -2123,28 +2123,17 @@ template <typename Container>
void WorldObject::GetGameObjectListWithEntryInGrid(Container& gameObjectContainer, uint32 entry, float maxSearchRange /*= 250.0f*/) const
{
CellCoord pair(Trinity::ComputeCellCoord(GetPositionX(), GetPositionY()));
- Cell cell(pair);
- cell.SetNoCreate();
-
Trinity::AllGameObjectsWithEntryInRange check(this, entry, maxSearchRange);
Trinity::GameObjectListSearcher<Trinity::AllGameObjectsWithEntryInRange> searcher(this, gameObjectContainer, check);
- TypeContainerVisitor<Trinity::GameObjectListSearcher<Trinity::AllGameObjectsWithEntryInRange>, GridTypeMapContainer> visitor(searcher);
-
- cell.Visit(pair, visitor, *GetMap(), *this, maxSearchRange);
+ Cell::VisitGridObjects(this, searcher, maxSearchRange);
}
template <typename Container>
void WorldObject::GetCreatureListWithEntryInGrid(Container& creatureContainer, uint32 entry, float maxSearchRange /*= 250.0f*/) const
{
- CellCoord pair(Trinity::ComputeCellCoord(GetPositionX(), GetPositionY()));
- Cell cell(pair);
- cell.SetNoCreate();
-
Trinity::AllCreaturesOfEntryInRange check(this, entry, maxSearchRange);
Trinity::CreatureListSearcher<Trinity::AllCreaturesOfEntryInRange> searcher(this, creatureContainer, check);
- TypeContainerVisitor<Trinity::CreatureListSearcher<Trinity::AllCreaturesOfEntryInRange>, GridTypeMapContainer> visitor(searcher);
-
- cell.Visit(pair, visitor, *GetMap(), *this, maxSearchRange);
+ Cell::VisitGridObjects(this, searcher, maxSearchRange);
}
template <typename Container>
@@ -2152,7 +2141,7 @@ void WorldObject::GetPlayerListInGrid(Container& playerContainer, float maxSearc
{
Trinity::AnyPlayerInObjectRangeCheck checker(this, maxSearchRange);
Trinity::PlayerListSearcher<Trinity::AnyPlayerInObjectRangeCheck> searcher(this, playerContainer, checker);
- VisitNearbyWorldObject(maxSearchRange, searcher);
+ Cell::VisitWorldObjects(this, searcher, maxSearchRange);
}
void WorldObject::GetNearPoint2D(float &x, float &y, float distance2d, float absAngle) const
@@ -2419,7 +2408,7 @@ void WorldObject::DestroyForNearbyPlayers()
std::list<Player*> targets;
Trinity::AnyPlayerInObjectRangeCheck check(this, GetVisibilityRange(), false);
Trinity::PlayerListSearcher<Trinity::AnyPlayerInObjectRangeCheck> searcher(this, targets, check);
- VisitNearbyWorldObject(GetVisibilityRange(), searcher);
+ Cell::VisitWorldObjects(this, searcher, GetVisibilityRange());
for (std::list<Player*>::const_iterator iter = targets.begin(); iter != targets.end(); ++iter)
{
Player* player = (*iter);
@@ -2446,7 +2435,7 @@ void WorldObject::UpdateObjectVisibility(bool /*forced*/)
{
//updates object's visibility for nearby players
Trinity::VisibleChangesNotifier notifier(*this);
- VisitNearbyWorldObject(GetVisibilityRange(), notifier);
+ Cell::VisitWorldObjects(this, notifier, GetVisibilityRange());
}
struct WorldObjectChangeAccumulator
@@ -2521,14 +2510,9 @@ struct WorldObjectChangeAccumulator
void WorldObject::BuildUpdate(UpdateDataMapType& data_map)
{
- CellCoord p = Trinity::ComputeCellCoord(GetPositionX(), GetPositionY());
- Cell cell(p);
- cell.SetNoCreate();
WorldObjectChangeAccumulator notifier(*this, data_map);
- TypeContainerVisitor<WorldObjectChangeAccumulator, WorldTypeMapContainer > player_notifier(notifier);
- Map& map = *GetMap();
//we must build packets for all visible players
- cell.Visit(p, player_notifier, map, *this, GetVisibilityRange());
+ Cell::VisitWorldObjects(this, notifier, GetVisibilityRange());
ClearUpdateMask(false);
}
diff --git a/src/server/game/Entities/Object/Object.h b/src/server/game/Entities/Object/Object.h
index 03c721d59fc..3438e428a75 100644
--- a/src/server/game/Entities/Object/Object.h
+++ b/src/server/game/Entities/Object/Object.h
@@ -596,10 +596,6 @@ class TC_GAME_API WorldObject : public Object, public WorldLocation
bool IsPermanentWorldObject() const { return m_isWorldObject; }
bool IsWorldObject() const;
- template<class NOTIFIER> void VisitNearbyObject(float const& radius, NOTIFIER& notifier) const { if (IsInWorld()) GetMap()->VisitAll(GetPositionX(), GetPositionY(), radius, notifier); }
- template<class NOTIFIER> void VisitNearbyGridObject(float const& radius, NOTIFIER& notifier) const { if (IsInWorld()) GetMap()->VisitGrid(GetPositionX(), GetPositionY(), radius, notifier); }
- template<class NOTIFIER> void VisitNearbyWorldObject(float const& radius, NOTIFIER& notifier) const { if (IsInWorld()) GetMap()->VisitWorld(GetPositionX(), GetPositionY(), radius, notifier); }
-
uint32 LastUsedScriptID;
// Transports