aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Phasing/PhaseShift.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/game/Phasing/PhaseShift.cpp')
-rw-r--r--src/server/game/Phasing/PhaseShift.cpp29
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;