From f515424217b6470b73269c7671a3086ff19c2359 Mon Sep 17 00:00:00 2001 From: Shauren Date: Tue, 28 Dec 2021 22:19:31 +0100 Subject: Core/Spells: Implemented target 137 TARGET_DEST_CASTER_MOVEMENT_DIRECTION --- src/server/game/Spells/Spell.cpp | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) (limited to 'src/server/game/Spells/Spell.cpp') diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index 10b03a50ffe..461d4d81129 100644 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -1351,6 +1351,7 @@ void Spell::SelectImplicitCasterDestTargets(SpellEffectInfo const& spellEffectIn break; } case TARGET_DEST_CASTER_FRONT_LEAP: + case TARGET_DEST_CASTER_MOVEMENT_DIRECTION: { Unit* unitCaster = m_caster->ToUnit(); if (!unitCaster) @@ -1358,6 +1359,41 @@ void Spell::SelectImplicitCasterDestTargets(SpellEffectInfo const& spellEffectIn float dist = spellEffectInfo.CalcRadius(unitCaster); float angle = targetType.CalcDirectionAngle(); + if (targetType.GetTarget() == TARGET_DEST_CASTER_MOVEMENT_DIRECTION) + { + angle = [&]() + { + switch (m_caster->m_movementInfo.GetMovementFlags() & (MOVEMENTFLAG_FORWARD | MOVEMENTFLAG_BACKWARD | MOVEMENTFLAG_STRAFE_LEFT | MOVEMENTFLAG_STRAFE_RIGHT)) + { + case MOVEMENTFLAG_NONE: + case MOVEMENTFLAG_FORWARD: + case MOVEMENTFLAG_FORWARD | MOVEMENTFLAG_BACKWARD: + case MOVEMENTFLAG_STRAFE_LEFT | MOVEMENTFLAG_STRAFE_RIGHT: + case MOVEMENTFLAG_FORWARD | MOVEMENTFLAG_STRAFE_LEFT | MOVEMENTFLAG_STRAFE_RIGHT: + case MOVEMENTFLAG_FORWARD | MOVEMENTFLAG_BACKWARD | MOVEMENTFLAG_STRAFE_LEFT | MOVEMENTFLAG_STRAFE_RIGHT: + return 0.0f; + case MOVEMENTFLAG_BACKWARD: + case MOVEMENTFLAG_BACKWARD | MOVEMENTFLAG_STRAFE_LEFT | MOVEMENTFLAG_STRAFE_RIGHT: + return static_cast(M_PI); + case MOVEMENTFLAG_STRAFE_LEFT: + case MOVEMENTFLAG_FORWARD | MOVEMENTFLAG_BACKWARD | MOVEMENTFLAG_STRAFE_LEFT: + return static_cast(M_PI / 2); + case MOVEMENTFLAG_FORWARD | MOVEMENTFLAG_STRAFE_LEFT: + return static_cast(M_PI / 4); + case MOVEMENTFLAG_BACKWARD | MOVEMENTFLAG_STRAFE_LEFT: + return static_cast(3 * M_PI / 4); + case MOVEMENTFLAG_STRAFE_RIGHT: + case MOVEMENTFLAG_FORWARD | MOVEMENTFLAG_BACKWARD | MOVEMENTFLAG_STRAFE_RIGHT: + return static_cast(-M_PI / 2); + case MOVEMENTFLAG_FORWARD | MOVEMENTFLAG_STRAFE_RIGHT: + return static_cast(-M_PI / 4); + case MOVEMENTFLAG_BACKWARD | MOVEMENTFLAG_STRAFE_RIGHT: + return static_cast(-3 * M_PI / 4); + default: + return 0.0f; + } + }(); + } Position pos = dest._position; -- cgit v1.2.3