aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Maps/Map.cpp
diff options
context:
space:
mode:
authorJeremy <Golrag@users.noreply.github.com>2019-04-07 20:15:40 +0200
committerGiacomo Pozzoni <giacomopoz@gmail.com>2019-04-07 20:15:40 +0200
commit9fcbd8f15d249070aabc25d48df86681e8ec3d11 (patch)
tree33b077329695d07b6592e47b0d8aeb3a5c58a72d /src/server/game/Maps/Map.cpp
parent73e3fdc8b4545cca52b66032a5f2465183d14c71 (diff)
Core/Movement: Fix some undermap issues with random movement/fear/blink (#22937)
* Core/Movement: - Only move to point if there is a path that is not a shortcut (which will make the unit move through terrain) - Added new function to check if there is a vmap floor without search distance - Units that can fly, are underground but far above the vmap floor will stay underground (bronze drakes in tanaris) - Don't remove PATHFIND_SHORTCUT from path type in some cases * Core/Object: Ignore UpdateAllowedPositionZ for flying units. - This will make flying units go through mountains instead of going to the top and back to the bottom to reach you. * Core/Object: Revert some changes and let MovePositionToFirstCollision deal with a position without ground * Missing groundZ change for objects on transport * use CanFly instead of IsFlying
Diffstat (limited to 'src/server/game/Maps/Map.cpp')
-rw-r--r--src/server/game/Maps/Map.cpp25
1 files changed, 15 insertions, 10 deletions
diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp
index f847fca56e2..2cefeb63532 100644
--- a/src/server/game/Maps/Map.cpp
+++ b/src/server/game/Maps/Map.cpp
@@ -2443,12 +2443,9 @@ float Map::GetHeight(float x, float y, float z, bool checkVMap /*= true*/, float
{
// find raw .map surface under Z coordinates
float mapHeight = VMAP_INVALID_HEIGHT_VALUE;
- if (GridMap* gmap = const_cast<Map*>(this)->GetGrid(x, y))
- {
- float gridHeight = gmap->getHeight(x, y);
- if (G3D::fuzzyGe(z, gridHeight - GROUND_HEIGHT_TOLERANCE))
- mapHeight = gridHeight;
- }
+ float gridHeight = GetGridHeight(x, y);
+ if (G3D::fuzzyGe(z, gridHeight - GROUND_HEIGHT_TOLERANCE))
+ mapHeight = gridHeight;
float vmapHeight = VMAP_INVALID_HEIGHT_VALUE;
if (checkVMap)
@@ -2470,16 +2467,24 @@ float Map::GetHeight(float x, float y, float z, bool checkVMap /*= true*/, float
// or if the distance of the vmap height is less the land height distance
if (vmapHeight > mapHeight || std::fabs(mapHeight - z) > std::fabs(vmapHeight - z))
return vmapHeight;
- else
- return mapHeight; // better use .map surface height
+
+ return mapHeight; // better use .map surface height
}
- else
- return vmapHeight; // we have only vmapHeight (if have)
+
+ return vmapHeight; // we have only vmapHeight (if have)
}
return mapHeight; // explicitly use map data
}
+float Map::GetGridHeight(float x, float y) const
+{
+ if (GridMap* gmap = const_cast<Map*>(this)->GetGrid(x, y))
+ return gmap->getHeight(x, y);
+
+ return VMAP_INVALID_HEIGHT_VALUE;
+}
+
float Map::GetMinHeight(float x, float y) const
{
if (GridMap const* grid = const_cast<Map*>(this)->GetGrid(x, y))