diff options
| author | Shauren <shauren.trinity@gmail.com> | 2021-12-28 22:19:31 +0100 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2021-12-28 22:19:31 +0100 |
| commit | f515424217b6470b73269c7671a3086ff19c2359 (patch) | |
| tree | ea2ba88a447bd53b7f5243e900dc4d0bcf440ba9 /src/server/game/Spells/Spell.cpp | |
| parent | 108eeea327b50a157c503da42b05b59003a1ffac (diff) | |
Core/Spells: Implemented target 137 TARGET_DEST_CASTER_MOVEMENT_DIRECTION
Diffstat (limited to 'src/server/game/Spells/Spell.cpp')
| -rw-r--r-- | src/server/game/Spells/Spell.cpp | 36 |
1 files changed, 36 insertions, 0 deletions
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<float>(M_PI); + case MOVEMENTFLAG_STRAFE_LEFT: + case MOVEMENTFLAG_FORWARD | MOVEMENTFLAG_BACKWARD | MOVEMENTFLAG_STRAFE_LEFT: + return static_cast<float>(M_PI / 2); + case MOVEMENTFLAG_FORWARD | MOVEMENTFLAG_STRAFE_LEFT: + return static_cast<float>(M_PI / 4); + case MOVEMENTFLAG_BACKWARD | MOVEMENTFLAG_STRAFE_LEFT: + return static_cast<float>(3 * M_PI / 4); + case MOVEMENTFLAG_STRAFE_RIGHT: + case MOVEMENTFLAG_FORWARD | MOVEMENTFLAG_BACKWARD | MOVEMENTFLAG_STRAFE_RIGHT: + return static_cast<float>(-M_PI / 2); + case MOVEMENTFLAG_FORWARD | MOVEMENTFLAG_STRAFE_RIGHT: + return static_cast<float>(-M_PI / 4); + case MOVEMENTFLAG_BACKWARD | MOVEMENTFLAG_STRAFE_RIGHT: + return static_cast<float>(-3 * M_PI / 4); + default: + return 0.0f; + } + }(); + } Position pos = dest._position; |
