diff options
author | Shauren <shauren.trinity@gmail.com> | 2018-03-03 15:39:19 +0100 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2018-03-25 19:28:36 +0300 |
commit | 8f53ba385474e51b4e2ebf29e33d7661a2848669 (patch) | |
tree | 2c3a2ee08d085b096996fdfd349097b151e783f6 /src/server/game/Phasing/PhasingHandler.cpp | |
parent | 3743d042017d72435d2ff8135f66808988beaf9e (diff) |
Core/Phasing: Rewrite GetTerrainMapId
Diffstat (limited to 'src/server/game/Phasing/PhasingHandler.cpp')
-rw-r--r-- | src/server/game/Phasing/PhasingHandler.cpp | 26 |
1 files changed, 26 insertions, 0 deletions
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) |