From 97af0c31af13de23eabe4eb22ed3e71dd5602531 Mon Sep 17 00:00:00 2001 From: Ovahlord Date: Tue, 2 Jan 2024 19:46:44 +0100 Subject: Core/Maps: implement LIQUID_MAP_OCEAN_FLOOR to identify units that are on the bottom of a liquid (#29545) --- src/server/game/Maps/GridMap.cpp | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) (limited to 'src/server/game/Maps/GridMap.cpp') 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 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(status); } -- cgit v1.2.3