fix(Core): creature movement bugs (#4544)

- fix UpdateEnvironmentIfNeeded was changing flying creature status all the time. closes: #4447
- fix hovering state was causing bugs at #4466
- add animation state priority: fly > hover > ground

Co-authored-by: Wotex <fm@gmail.com>
Co-authored-by: Francesco Borzì <borzifrancesco@gmail.com>
Co-authored-by: Patrick Lewis <pat@lo5t.com>
This commit is contained in:
Footman
2021-02-12 13:42:41 +03:00
committed by GitHub
parent e75961756d
commit 695a7402ad
6 changed files with 61 additions and 30 deletions

View File

@@ -3816,28 +3816,39 @@ void Unit::UpdateEnvironmentIfNeeded(const uint8 option)
changed = true;
}
}
else if (c->CanFly() && isInAir)
else if (c->CanFly() && isInAir && !c->IsFalling())
{
if (!c->IsFalling() && (!HasUnitMovementFlag(MOVEMENTFLAG_CAN_FLY) || !HasUnitMovementFlag(MOVEMENTFLAG_DISABLE_GRAVITY) || !HasUnitMovementFlag(MOVEMENTFLAG_HOVER)))
if (!HasUnitMovementFlag(MOVEMENTFLAG_CAN_FLY) || !HasUnitMovementFlag(MOVEMENTFLAG_DISABLE_GRAVITY))
{
SetCanFly(true);
SetDisableGravity(true);
if (IsAlive() && (c->CanHover() || HasAuraType(SPELL_AURA_HOVER)))
SetHover(true);
changed = true;
}
if (IsHovering() && !HasAuraType(SPELL_AURA_HOVER))
{
SetHover(false);
changed = true;
}
}
else
{
if (HasUnitMovementFlag(MOVEMENTFLAG_CAN_FLY) || HasUnitMovementFlag(MOVEMENTFLAG_FLYING) || HasUnitMovementFlag(MOVEMENTFLAG_HOVER))
if (HasUnitMovementFlag(MOVEMENTFLAG_CAN_FLY) || HasUnitMovementFlag(MOVEMENTFLAG_FLYING))
{
SetCanFly(false);
RemoveUnitMovementFlag(MOVEMENTFLAG_FLYING);
if (!HasAuraType(SPELL_AURA_HOVER))
SetHover(false);
changed = true;
}
if (HasUnitMovementFlag(MOVEMENTFLAG_DISABLE_GRAVITY) && !HasUnitMovementFlag(MOVEMENTFLAG_SWIMMING) && !HasUnitMovementFlag(MOVEMENTFLAG_HOVER))
if (!IsHovering() && IsAlive() && (c->CanHover() || HasAuraType(SPELL_AURA_HOVER)))
{
SetHover(true);
changed = true;
}
if (HasUnitMovementFlag(MOVEMENTFLAG_DISABLE_GRAVITY) && !HasUnitMovementFlag(MOVEMENTFLAG_SWIMMING))
{
SetDisableGravity(false);
changed = true;