Core/Maps: restored a hack in gridmap liquid status code to solve precision issues (#29544)
Port From (https://github.com/TrinityCore/TrinityCore/commit/bfb9fd8a2c777651c99568ba9c6a2d4a3a468955)
This commit is contained in:
@@ -513,6 +513,8 @@ namespace Game.Maps
|
||||
return _liquidMap[cx_int * _liquidWidth + cy_int];
|
||||
}
|
||||
|
||||
static 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
|
||||
public ZLiquidStatus GetLiquidStatus(float x, float y, float z, LiquidHeaderTypeFlags? reqLiquidType, LiquidData data, float collisionHeight)
|
||||
{
|
||||
@@ -577,11 +579,11 @@ namespace Game.Maps
|
||||
|
||||
// Get water level
|
||||
float liquid_level = _liquidMap != null ? _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 ZLiquidStatus.NoWater;
|
||||
|
||||
// All ok in water . store data
|
||||
|
||||
Reference in New Issue
Block a user