aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOvahlord <dreadkiller@gmx.de>2024-01-02 19:40:34 +0100
committerfunjoker <funjoker109@gmail.com>2024-01-09 13:08:47 +0100
commit8c1612644ed024c107bfd679120bd67fbfae8ba5 (patch)
tree1aa0eb92ee9b5808c7179236946bee0abda87301
parent439f8da207b58c6dd5f64faa8b02c60a4da2c4d3 (diff)
Core/Maps: restored a hack in gridmap liquid status code to solve precision issues (#29544)
Closes #29543 Closes #22020 (cherry picked from commit bfb9fd8a2c777651c99568ba9c6a2d4a3a468955)
-rw-r--r--src/server/game/Maps/GridMap.cpp6
1 files changed, 4 insertions, 2 deletions
diff --git a/src/server/game/Maps/GridMap.cpp b/src/server/game/Maps/GridMap.cpp
index 247a22b5d89..2d06aa25687 100644
--- a/src/server/game/Maps/GridMap.cpp
+++ b/src/server/game/Maps/GridMap.cpp
@@ -593,6 +593,8 @@ float GridMap::getLiquidLevel(float x, float y) const
return _liquidMap[cx_int*_liquidWidth + cy_int];
}
+constexpr float GROUND_LEVEL_OFFSET_HACK = 0.02f; // due to floating point precision issues, we have to resort to a small hack to fix inconsistencies in liquids
+
// Get water state on map
ZLiquidStatus GridMap::GetLiquidStatus(float x, float y, float z, Optional<map_liquidHeaderTypeFlags> ReqLiquidType, LiquidData* data, float collisionHeight) const
{
@@ -656,11 +658,11 @@ ZLiquidStatus GridMap::GetLiquidStatus(float x, float y, float z, Optional<map_l
// Get water level
float liquid_level = _liquidMap ? _liquidMap[lx_int*_liquidWidth + ly_int] : _liquidLevel;
- // Get ground level (sub 0.2 for fix some errors)
+ // Get ground level (sub 0.02 for fix some errors)
float ground_level = getHeight(x, y);
// Check water level and ground level
- if (liquid_level < ground_level || z < ground_level)
+ if (liquid_level < (ground_level - GROUND_LEVEL_OFFSET_HACK) || z < (ground_level - GROUND_LEVEL_OFFSET_HACK))
return LIQUID_MAP_NO_WATER;
// All ok in water -> store data