diff options
Diffstat (limited to 'src/server/game/Phasing/PhaseShift.cpp')
-rw-r--r-- | src/server/game/Phasing/PhaseShift.cpp | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/src/server/game/Phasing/PhaseShift.cpp b/src/server/game/Phasing/PhaseShift.cpp index b2885ae15bb..d543ccd1f22 100644 --- a/src/server/game/Phasing/PhaseShift.cpp +++ b/src/server/game/Phasing/PhaseShift.cpp @@ -17,6 +17,8 @@ #include "PhaseShift.h" #include "Containers.h" +#include "GridDefines.h" +#include "VMapFactory.h" bool PhaseShift::AddPhase(uint32 phaseId, PhaseFlags flags, std::vector<Condition*> const* areaConditions, int32 references /*= 1*/) { @@ -145,6 +147,33 @@ bool PhaseShift::CanSee(PhaseShift const& other) const return checkInversePhaseShift(other, *this); } +uint32 PhaseShift::GetTerrainMapId(uint32 realMapId, float x, float y) const +{ + if (VisibleMapIds.empty()) + return realMapId; + + if (VisibleMapIds.size() == 1) + return VisibleMapIds.begin()->first; + + GridCoord gridCoord = Trinity::ComputeGridCoord(x, y); + int32 gx = (MAX_NUMBER_OF_GRIDS - 1) - gridCoord.x_coord; + int32 gy = (MAX_NUMBER_OF_GRIDS - 1) - gridCoord.y_coord; + + int32 minDistance = std::numeric_limits<int32>::max(); + uint32 terrainMapId; + for (auto itr = VisibleMapIds.begin(); itr != VisibleMapIds.end(); ++itr) + { + int32 dist = VMAP::VMapFactory::createOrGetVMapManager()->GetDistanceToClosestPrimaryTile(itr->first, gx, gy); + if (dist < minDistance) + { + minDistance = dist; + terrainMapId = itr->first; + } + } + + return terrainMapId; +} + void PhaseShift::ModifyPhasesReferences(PhaseContainer::iterator itr, int32 references) { itr->References += references; |