aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Spells/Spell.cpp
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2021-12-28 22:19:31 +0100
committerShauren <shauren.trinity@gmail.com>2021-12-28 22:19:31 +0100
commitf515424217b6470b73269c7671a3086ff19c2359 (patch)
treeea2ba88a447bd53b7f5243e900dc4d0bcf440ba9 /src/server/game/Spells/Spell.cpp
parent108eeea327b50a157c503da42b05b59003a1ffac (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.cpp36
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;