diff options
author | Giacomo Pozzoni <giacomopoz@gmail.com> | 2021-02-21 17:29:09 +0100 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2022-03-06 22:24:01 +0100 |
commit | 9bcff210f90d57689557b7b8cc20cd336b8ab035 (patch) | |
tree | 7c0eb1e44a36f4a3ca7926c39fcf1c934d5481e9 | |
parent | f17dc43bff44fc4f6edb13fda3ffe86e2dfb0a99 (diff) |
Core/Maps: Use a fixed offset instead of full collision height when retrieving floor Z (#26092)
Use a fixed offset 0.5f instead of full collision height when retrieving floor Z as a full collision height ended up on the floor above a few times. It makes more sense to cast the ray just a bit higher up than using a full collision height (which by default is 2.0f)
(cherry picked from commit f96aab2186d17ddd286fa42913f3f14e9562c4eb)
-rw-r--r-- | src/server/game/Entities/Object/Object.cpp | 4 | ||||
-rw-r--r-- | src/server/game/Maps/Map.cpp | 2 | ||||
-rw-r--r-- | src/server/game/Miscellaneous/SharedDefines.h | 1 |
3 files changed, 4 insertions, 3 deletions
diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp index 995f1b7b29c..191b88464d8 100644 --- a/src/server/game/Entities/Object/Object.cpp +++ b/src/server/game/Entities/Object/Object.cpp @@ -3588,7 +3588,7 @@ float WorldObject::GetFloorZ() const { if (!IsInWorld()) return m_staticFloorZ; - return std::max<float>(m_staticFloorZ, GetMap()->GetGameObjectFloor(GetPhaseShift(), GetPositionX(), GetPositionY(), GetPositionZ() + GetCollisionHeight())); + return std::max<float>(m_staticFloorZ, GetMap()->GetGameObjectFloor(GetPhaseShift(), GetPositionX(), GetPositionY(), GetPositionZ() + Z_OFFSET_FIND_HEIGHT)); } float WorldObject::GetMapWaterOrGroundLevel(float x, float y, float z, float* ground/* = nullptr*/) const @@ -3601,7 +3601,7 @@ float WorldObject::GetMapWaterOrGroundLevel(float x, float y, float z, float* gr 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(GetPhaseShift(), x, y, z, vmap, distanceToSearch); } diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp index 07d20d19b1f..e23b413bf6a 100644 --- a/src/server/game/Maps/Map.cpp +++ b/src/server/game/Maps/Map.cpp @@ -2556,7 +2556,7 @@ float Map::GetWaterOrGroundLevel(PhaseShift const& phaseShift, float x, float y, if (GetGrid(PhasingHandler::GetTerrainMapId(phaseShift, this, x, y), x, y)) { // we need ground level (including grid height version) for proper return water level in point - float ground_z = GetHeight(phaseShift, x, y, z + collisionHeight, true, 50.0f); + float ground_z = GetHeight(phaseShift, x, y, z + Z_OFFSET_FIND_HEIGHT, true, 50.0f); if (ground) *ground = ground_z; diff --git a/src/server/game/Miscellaneous/SharedDefines.h b/src/server/game/Miscellaneous/SharedDefines.h index 6b8ecd4759b..e7763702c9a 100644 --- a/src/server/game/Miscellaneous/SharedDefines.h +++ b/src/server/game/Miscellaneous/SharedDefines.h @@ -21,6 +21,7 @@ #include "Define.h" float const GROUND_HEIGHT_TOLERANCE = 0.05f; // Extra tolerance to z position to check if it is in air or on ground. +constexpr float Z_OFFSET_FIND_HEIGHT = 0.5f; enum SpellEffIndex : uint8 { |