aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Phasing
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2018-03-03 15:39:19 +0100
committerShauren <shauren.trinity@gmail.com>2018-03-25 19:28:36 +0300
commit8f53ba385474e51b4e2ebf29e33d7661a2848669 (patch)
tree2c3a2ee08d085b096996fdfd349097b151e783f6 /src/server/game/Phasing
parent3743d042017d72435d2ff8135f66808988beaf9e (diff)
Core/Phasing: Rewrite GetTerrainMapId
Diffstat (limited to 'src/server/game/Phasing')
-rw-r--r--src/server/game/Phasing/PhaseShift.cpp29
-rw-r--r--src/server/game/Phasing/PhaseShift.h1
-rw-r--r--src/server/game/Phasing/PhasingHandler.cpp26
-rw-r--r--src/server/game/Phasing/PhasingHandler.h3
4 files changed, 29 insertions, 30 deletions
diff --git a/src/server/game/Phasing/PhaseShift.cpp b/src/server/game/Phasing/PhaseShift.cpp
index d543ccd1f22..b2885ae15bb 100644
--- a/src/server/game/Phasing/PhaseShift.cpp
+++ b/src/server/game/Phasing/PhaseShift.cpp
@@ -17,8 +17,6 @@
#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*/)
{
@@ -147,33 +145,6 @@ 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;
diff --git a/src/server/game/Phasing/PhaseShift.h b/src/server/game/Phasing/PhaseShift.h
index ca38614ed45..8755868ae9d 100644
--- a/src/server/game/Phasing/PhaseShift.h
+++ b/src/server/game/Phasing/PhaseShift.h
@@ -101,7 +101,6 @@ public:
void ClearPhases();
bool CanSee(PhaseShift const& other) const;
- uint32 GetTerrainMapId(uint32 realMapId, float x, float y) const;
protected:
friend class PhasingHandler;
diff --git a/src/server/game/Phasing/PhasingHandler.cpp b/src/server/game/Phasing/PhasingHandler.cpp
index 44f0a9ff753..549093fecba 100644
--- a/src/server/game/Phasing/PhasingHandler.cpp
+++ b/src/server/game/Phasing/PhasingHandler.cpp
@@ -469,6 +469,32 @@ bool PhasingHandler::InDbPhaseShift(WorldObject const* object, uint8 phaseUseFla
return object->GetPhaseShift().CanSee(phaseShift);
}
+uint32 PhasingHandler::GetTerrainMapId(PhaseShift const& phaseShift, Map const* map, float x, float y)
+{
+ if (phaseShift.VisibleMapIds.empty())
+ return map->GetId();
+
+ if (phaseShift.VisibleMapIds.size() == 1)
+ return phaseShift.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 gxbegin = std::max(gx - 1, 0);
+ int32 gxend = std::min(gx + 1, MAX_NUMBER_OF_GRIDS);
+ int32 gybegin = std::max(gy - 1, 0);
+ int32 gyend = std::min(gy + 1, MAX_NUMBER_OF_GRIDS);
+
+ for (auto itr = phaseShift.VisibleMapIds.rbegin(); itr != phaseShift.VisibleMapIds.rend(); ++itr)
+ for (int32 gxi = gxbegin; gxi < gxend; ++gxi)
+ for (int32 gyi = gybegin; gyi < gyend; ++gyi)
+ if (map->HasGrid(itr->first, gxi, gyi))
+ return itr->first;
+
+ return map->GetId();
+}
+
void PhasingHandler::SetAlwaysVisible(PhaseShift& phaseShift, bool apply)
{
if (apply)
diff --git a/src/server/game/Phasing/PhasingHandler.h b/src/server/game/Phasing/PhasingHandler.h
index 9ee408ad26c..95f4357b30c 100644
--- a/src/server/game/Phasing/PhasingHandler.h
+++ b/src/server/game/Phasing/PhasingHandler.h
@@ -22,6 +22,7 @@
#include <string>
class ChatHandler;
+class Map;
class PhaseShift;
class Player;
class WorldObject;
@@ -60,6 +61,8 @@ public:
static void InitDbVisibleMapId(PhaseShift& phaseShift, int32 visibleMapId);
static bool InDbPhaseShift(WorldObject const* object, uint8 phaseUseFlags, uint16 phaseId, uint32 phaseGroupId);
+ static uint32 GetTerrainMapId(PhaseShift const& phaseShift, Map const* map, float x, float y);
+
static void SetAlwaysVisible(PhaseShift& phaseShift, bool apply);
static void SetInversed(PhaseShift& phaseShift, bool apply);