aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Maps/GridMap.cpp
diff options
context:
space:
mode:
authorOvahlord <dreadkiller@gmx.de>2024-01-02 19:46:44 +0100
committerfunjoker <funjoker109@gmail.com>2024-01-09 13:08:58 +0100
commit1d397b8c8c8638793a6239bfb211027c556a9e8b (patch)
tree005c0a51f487ee065cb42a65a6613e818bb88dd0 /src/server/game/Maps/GridMap.cpp
parent8c1612644ed024c107bfd679120bd67fbfae8ba5 (diff)
Core/Maps: implement LIQUID_MAP_OCEAN_FLOOR to identify units that are on the bottom of a liquid (#29545)
(cherry picked from commit 97af0c31af13de23eabe4eb22ed3e71dd5602531)
Diffstat (limited to 'src/server/game/Maps/GridMap.cpp')
-rw-r--r--src/server/game/Maps/GridMap.cpp22
1 files changed, 14 insertions, 8 deletions
diff --git a/src/server/game/Maps/GridMap.cpp b/src/server/game/Maps/GridMap.cpp
index 2d06aa25687..0d5f2587675 100644
--- a/src/server/game/Maps/GridMap.cpp
+++ b/src/server/game/Maps/GridMap.cpp
@@ -677,12 +677,18 @@ ZLiquidStatus GridMap::GetLiquidStatus(float x, float y, float z, Optional<map_l
// For speed check as int values
float delta = liquid_level - z;
- if (delta > collisionHeight) // Under water
- return LIQUID_MAP_UNDER_WATER;
- if (delta > 0.0f) // In water
- return LIQUID_MAP_IN_WATER;
- if (delta > -0.1f) // Walk on water
- return LIQUID_MAP_WATER_WALK;
- // Above water
- return LIQUID_MAP_ABOVE_WATER;
+ uint32 status = LIQUID_MAP_ABOVE_WATER; // Above water
+
+ if (delta > collisionHeight) // Under water
+ status = LIQUID_MAP_UNDER_WATER;
+ else if (delta > 0.0f) // In water
+ status = LIQUID_MAP_IN_WATER;
+ else if (delta > -0.1f) // Walk on water
+ status = LIQUID_MAP_WATER_WALK;
+
+ if (status != LIQUID_MAP_ABOVE_WATER)
+ if (std::fabs(ground_level - z) <= GROUND_HEIGHT_TOLERANCE)
+ status |= LIQUID_MAP_OCEAN_FLOOR;
+
+ return static_cast<ZLiquidStatus>(status);
}