mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-16 07:30:42 +01:00
Core/Entities: handle more edge cases in IsInAir
can be done in one liner, with one math expression if I'm not mistaken, but this allows easier debugging
This commit is contained in:
@@ -3166,7 +3166,17 @@ bool Unit::IsUnderWater() const
|
||||
|
||||
bool Unit::IsInAir(Position const destination, float destinationFloor, bool honorHover/* = true*/) const
|
||||
{
|
||||
return std::fabs(destination.GetPositionZ() - (honorHover ? GetHoverOffset() : 0.f) - destinationFloor) > 0.1f;
|
||||
float z = destination.GetPositionZ();
|
||||
if (z < destinationFloor - 0.5f) // if really bellow ground, in air (caves,...)
|
||||
return true;
|
||||
float hoverHeight = GetHoverOffset(); // height if currently hovering
|
||||
if (GetTypeId() == TYPEID_UNIT) {
|
||||
hoverHeight = ToCreature()->CanHover() ? GetFloatValue(UNIT_FIELD_HOVERHEIGHT) : 0.f; // height if could hover
|
||||
}
|
||||
z = destination.GetPositionZ() - (honorHover ? hoverHeight : 0.f);
|
||||
if (z <= destinationFloor + 0.5f) // if is bellow ground or slightly above it, not in air - should hover too
|
||||
return false;
|
||||
return std::fabs(z - destinationFloor) > 0.5f; // if the difference is higher than tolerance level, in air (todo: this should most likely take into account unit's "size")
|
||||
}
|
||||
|
||||
void Unit::ProcessPositionDataChanged(PositionFullTerrainStatus const& data)
|
||||
|
||||
Reference in New Issue
Block a user