diff options
author | Ovahlord <dreadkiller@gmx.de> | 2024-01-02 19:40:34 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-01-02 19:40:34 +0100 |
commit | bfb9fd8a2c777651c99568ba9c6a2d4a3a468955 (patch) | |
tree | 8062349385fdecc004679819c82f308a5cfcc364 /src/server/game/Maps/GridMap.cpp | |
parent | 47813ad734d7d01a26587bc5f817fb032b03dc41 (diff) |
Core/Maps: restored a hack in gridmap liquid status code to solve precision issues (#29544)
Closes #29543
Closes #22020
Diffstat (limited to 'src/server/game/Maps/GridMap.cpp')
-rw-r--r-- | src/server/game/Maps/GridMap.cpp | 6 |
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 |