feat(Core/Maps): Use a fixed offset instead of full collision height when retrieving floor Z. (#4909)

This commit is contained in:
UltraNix
2021-03-21 15:20:06 +01:00
committed by GitHub
parent ac5958c8ee
commit 1d5cc1fb74
3 changed files with 5 additions and 5 deletions

View File

@@ -1516,7 +1516,7 @@ void WorldObject::UpdateAllowedPositionZ(float x, float y, float& z, float* grou
if (max_z > INVALID_HEIGHT)
{
if (canSwim && unit->GetMap()->IsInWater(x, y, max_z - WATER_HEIGHT_TOLERANCE)) {
if (canSwim && unit->GetMap()->IsInWater(x, y, max_z - Z_OFFSET_FIND_HEIGHT)) {
// do not allow creatures to walk on
// water level while swimming
max_z = max_z - GetMinHeightInWater();
@@ -3058,7 +3058,7 @@ uint64 WorldObject::GetTransGUID() const
float WorldObject::GetMapHeight(float x, float y, float z, bool vmap/* = true*/, float distanceToSearch/* = DEFAULT_HEIGHT_SEARCH*/) const
{
if (z != MAX_HEIGHT)
z += GetCollisionHeight();
z += Z_OFFSET_FIND_HEIGHT;
return GetMap()->GetHeight(GetPhaseMask(), x, y, z, vmap, distanceToSearch);
}
@@ -3075,5 +3075,5 @@ float WorldObject::GetFloorZ() const
if (!IsInWorld())
return m_staticFloorZ;
return std::max<float>(m_staticFloorZ, GetMap()->GetGameObjectFloor(GetPhaseMask(), GetPositionX(), GetPositionY(), GetPositionZ() + GetCollisionHeight()));
return std::max<float>(m_staticFloorZ, GetMap()->GetGameObjectFloor(GetPhaseMask(), GetPositionX(), GetPositionY(), GetPositionZ() + Z_OFFSET_FIND_HEIGHT));
}

View File

@@ -1914,7 +1914,7 @@ float Map::GetWaterOrGroundLevel(uint32 phasemask, float x, float y, float z, fl
if (const_cast<Map*>(this)->GetGrid(x, y))
{
// we need ground level (including grid height version) for proper return water level in point
float ground_z = GetHeight(phasemask, x, y, z + collisionHeight, true, 50.0f);
float ground_z = GetHeight(phasemask, x, y, z + Z_OFFSET_FIND_HEIGHT, true, 50.0f);
if (ground)
*ground = ground_z;

View File

@@ -12,7 +12,7 @@
#include <cassert>
float const GROUND_HEIGHT_TOLERANCE = 0.05f; // Extra tolerance to z position to check if it is in air or on ground.
float const WATER_HEIGHT_TOLERANCE = 0.5f; // Extra tolerance to z position to check if it is in water
constexpr float Z_OFFSET_FIND_HEIGHT = 0.5f;
enum SpellEffIndex
{