diff options
| author | Shauren <shauren.trinity@gmail.com> | 2025-11-09 21:20:59 +0100 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2025-11-09 21:20:59 +0100 |
| commit | 7172c9b615831bbd0e6bfcd43d6237bb90e6b201 (patch) | |
| tree | 63467c222be756a65d75ee72216b6249817c4e25 /src | |
| parent | 746a770f35efe7c866c8ed72a5a69bfd9b2e7b46 (diff) | |
Core/Movement: Change parabolic/animtier spline arguments to use point index on path instead of raw timers
Diffstat (limited to 'src')
| -rw-r--r-- | src/server/game/Movement/Spline/MoveSpline.cpp | 10 | ||||
| -rw-r--r-- | src/server/game/Movement/Spline/MoveSplineInit.h | 31 | ||||
| -rw-r--r-- | src/server/game/Movement/Spline/MoveSplineInitArgs.h | 4 |
3 files changed, 21 insertions, 24 deletions
diff --git a/src/server/game/Movement/Spline/MoveSpline.cpp b/src/server/game/Movement/Spline/MoveSpline.cpp index 39118263388..a317b018ed6 100644 --- a/src/server/game/Movement/Spline/MoveSpline.cpp +++ b/src/server/game/Movement/Spline/MoveSpline.cpp @@ -37,7 +37,7 @@ Location MoveSpline::computePosition(int32 time_point, int32 point_index) const c.orientation = initialOrientation; spline.evaluate_percent(point_index, u, c); - if (splineflags.Animation) + if (anim_tier) ;// MoveSplineFlag::Animation disables falling or parabolic movement else if (splineflags.Parabolic) computeParabolicElevation(time_point, c.z); @@ -214,10 +214,10 @@ void MoveSpline::Initialize(MoveSplineInitArgs const& args) // init parabolic / animation // spline initialized, duration known and i able to compute parabolic acceleration - if (args.flags.HasFlag(MoveSplineFlagEnum::Parabolic | MoveSplineFlagEnum::Animation | MoveSplineFlagEnum::FadeObject)) + if (args.flags.HasFlag(MoveSplineFlagEnum::Parabolic | MoveSplineFlagEnum::FadeObject) || args.animTier) { int32 spline_duration = Duration(); - effect_start_time = spline_duration * args.effect_start_time_percent + args.effect_start_time.count(); + effect_start_time = spline.length(spline.first() + args.effect_start_point); if (effect_start_time > spline_duration) effect_start_time = spline_duration; @@ -255,7 +255,7 @@ bool MoveSplineInitArgs::Validate(Unit const* unit) CHECK(path.size() > 1, unit->GetDebugInfo()); CHECK(velocity >= 0.01f, unit->GetDebugInfo()); - CHECK(effect_start_time_percent >= 0.f && effect_start_time_percent <= 1.f, unit->GetDebugInfo()); + CHECK(effect_start_point < std::ssize(path), unit->GetDebugInfo()); CHECK(_checkPathLengths(), unit->GetGUID().ToString()); if (spellEffectExtra) { @@ -295,7 +295,7 @@ bool MoveSplineInitArgs::_checkPathLengths() } MoveSplineInitArgs::MoveSplineInitArgs() : path_Idx_offset(0), velocity(0.f), -parabolic_amplitude(0.f), vertical_acceleration(0.0f), effect_start_time_percent(0.f), effect_start_time(0ms), +parabolic_amplitude(0.f), vertical_acceleration(0.0f), effect_start_point(0), splineId(0), initialOrientation(0.f), walk(false), HasVelocity(false), TransformForTransport(true) { diff --git a/src/server/game/Movement/Spline/MoveSplineInit.h b/src/server/game/Movement/Spline/MoveSplineInit.h index 5035bb38fb1..2461fc1b5d3 100644 --- a/src/server/game/Movement/Spline/MoveSplineInit.h +++ b/src/server/game/Movement/Spline/MoveSplineInit.h @@ -52,22 +52,22 @@ namespace Movement */ void Stop(); - /* Adds movement by parabolic trajectory - * @param amplitude - the maximum height of parabola, value could be negative and positive - * @param start_time - delay between movement starting time and beginning to move by parabolic trajectory + /** Adds movement by parabolic trajectory + * @param amplitude the maximum height of parabola, value could be negative and positive + * @param start_point point index on the path where parabolic movement starts * can't be combined with final animation */ - void SetParabolic(float amplitude, float start_time); - /* Adds movement by parabolic trajectory - * @param vertical_acceleration - vertical acceleration - * @param start_time - delay between movement starting time and beginning to move by parabolic trajectory + void SetParabolic(float amplitude, int32 start_point); + /** Adds movement by parabolic trajectory + * @param vertical_acceleration vertical acceleration + * @param start_point point index on the path where parabolic movement starts * can't be combined with final animation */ - void SetParabolicVerticalAcceleration(float vertical_acceleration, float start_time); + void SetParabolicVerticalAcceleration(float vertical_acceleration, int32 start_point); /* Plays animation after movement done * can't be combined with parabolic movement */ - void SetAnimation(AnimTier anim, uint32 tierTransitionId = 0, Milliseconds transitionStartTime = 0ms); + void SetAnimation(AnimTier anim, uint32 tierTransitionId = 0, int32 transitionStartPoint = 0); /* Adds final facing animation * sets unit's facing to specified point/angle after all path done @@ -184,26 +184,25 @@ namespace Movement inline void MoveSplineInit::SetSteering() { args.flags.Steering = true; } inline void MoveSplineInit::SetUnlimitedSpeed() { args.flags.UnlimitedSpeed = true; } - inline void MoveSplineInit::SetParabolic(float amplitude, float start_time) + inline void MoveSplineInit::SetParabolic(float amplitude, int32 start_point) { - args.effect_start_time_percent = start_time; + args.effect_start_point = start_point; args.parabolic_amplitude = amplitude; args.vertical_acceleration = 0.0f; args.flags.Parabolic = true; } - inline void MoveSplineInit::SetParabolicVerticalAcceleration(float vertical_acceleration, float start_time) + inline void MoveSplineInit::SetParabolicVerticalAcceleration(float vertical_acceleration, int32 start_point) { - args.effect_start_time_percent = start_time; + args.effect_start_point = start_point; args.parabolic_amplitude = 0.0f; args.vertical_acceleration = vertical_acceleration; args.flags.Parabolic = true; } - inline void MoveSplineInit::SetAnimation(AnimTier anim, uint32 tierTransitionId /*= 0*/, Milliseconds transitionStartTime /*= 0ms*/) + inline void MoveSplineInit::SetAnimation(AnimTier anim, uint32 tierTransitionId /*= 0*/, int32 transitionStartPoint /*= 0*/) { - args.effect_start_time_percent = 0.f; - args.effect_start_time = transitionStartTime; + args.effect_start_point = transitionStartPoint; args.animTier.emplace(); args.animTier->TierTransitionId = tierTransitionId; args.animTier->AnimTier = anim; diff --git a/src/server/game/Movement/Spline/MoveSplineInitArgs.h b/src/server/game/Movement/Spline/MoveSplineInitArgs.h index 46cd0779e21..724ae2ccee7 100644 --- a/src/server/game/Movement/Spline/MoveSplineInitArgs.h +++ b/src/server/game/Movement/Spline/MoveSplineInitArgs.h @@ -18,7 +18,6 @@ #ifndef TRINITYSERVER_MOVESPLINEINIT_ARGS_H #define TRINITYSERVER_MOVESPLINEINIT_ARGS_H -#include "Duration.h" #include "MoveSplineFlag.h" #include "MovementTypedefs.h" #include "ObjectGuid.h" @@ -80,8 +79,7 @@ namespace Movement float velocity; float parabolic_amplitude; float vertical_acceleration; - float effect_start_time_percent; // fraction of total spline duration - Milliseconds effect_start_time; // absolute value + int32 effect_start_point; uint32 splineId; float initialOrientation; Optional<SpellEffectExtraData> spellEffectExtra; |
