diff options
| author | Shauren <shauren.trinity@gmail.com> | 2021-11-27 21:56:00 +0100 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2021-11-27 21:56:00 +0100 |
| commit | 684cd9d9681466019dcd06ad6f994890cff8cb2e (patch) | |
| tree | 16008a4f7ac175468f2aa070a1da231a3bbdf44b /src/server/game/Movement/Spline | |
| parent | 1e46fc17eea2d98736fb506ee581c79ce30a3dd9 (diff) | |
Core/Movement: Implement initializing parabolic splines using jump gravity instead of max parabolic height
Diffstat (limited to 'src/server/game/Movement/Spline')
| -rw-r--r-- | src/server/game/Movement/Spline/MoveSpline.cpp | 15 | ||||
| -rw-r--r-- | src/server/game/Movement/Spline/MoveSplineInit.h | 15 | ||||
| -rw-r--r-- | src/server/game/Movement/Spline/MoveSplineInitArgs.h | 1 |
3 files changed, 27 insertions, 4 deletions
diff --git a/src/server/game/Movement/Spline/MoveSpline.cpp b/src/server/game/Movement/Spline/MoveSpline.cpp index 8e4ce67ca2d..d2298b8536c 100644 --- a/src/server/game/Movement/Spline/MoveSpline.cpp +++ b/src/server/game/Movement/Spline/MoveSpline.cpp @@ -210,8 +210,15 @@ void MoveSpline::Initialize(MoveSplineInitArgs const& args) effect_start_time = Duration() * args.time_perc; if (args.flags.parabolic && effect_start_time < Duration()) { - float f_duration = MSToSec(Duration() - effect_start_time); - vertical_acceleration = args.parabolic_amplitude * 8.f / (f_duration * f_duration); + if (args.parabolic_amplitude != 0.0f) + { + float f_duration = MSToSec(Duration() - effect_start_time); + vertical_acceleration = args.parabolic_amplitude * 8.f / (f_duration * f_duration); + } + else if (args.vertical_acceleration != 0.0f) + { + vertical_acceleration = args.vertical_acceleration; + } } } } @@ -256,13 +263,13 @@ bool MoveSplineInitArgs::_checkPathLengths() const return true; } MoveSplineInitArgs::MoveSplineInitArgs(size_t path_capacity /*= 16*/) : path_Idx_offset(0), velocity(0.f), -parabolic_amplitude(0.f), time_perc(0.f), splineId(0), initialOrientation(0.f), +parabolic_amplitude(0.f), vertical_acceleration(0.0f), time_perc(0.f), splineId(0), initialOrientation(0.f), walk(false), HasVelocity(false), TransformForTransport(true) { path.reserve(path_capacity); } -MoveSplineInitArgs::MoveSplineInitArgs(MoveSplineInitArgs && args) = default; +MoveSplineInitArgs::MoveSplineInitArgs(MoveSplineInitArgs&& args) = default; MoveSplineInitArgs::~MoveSplineInitArgs() = default; diff --git a/src/server/game/Movement/Spline/MoveSplineInit.h b/src/server/game/Movement/Spline/MoveSplineInit.h index 73c81c0ffdf..49856a761e5 100644 --- a/src/server/game/Movement/Spline/MoveSplineInit.h +++ b/src/server/game/Movement/Spline/MoveSplineInit.h @@ -72,6 +72,12 @@ namespace Movement * 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 + * can't be combined with final animation + */ + void SetParabolicVerticalAcceleration(float vertical_acceleration, float time_shift); /* Plays animation after movement done * can't be combined with parabolic movement */ @@ -177,6 +183,15 @@ namespace Movement { args.time_perc = time_shift; args.parabolic_amplitude = amplitude; + args.vertical_acceleration = 0.0f; + args.flags.EnableParabolic(); + } + + inline void MoveSplineInit::SetParabolicVerticalAcceleration(float vertical_acceleration, float time_shift) + { + args.time_perc = time_shift; + args.parabolic_amplitude = 0.0f; + args.vertical_acceleration = vertical_acceleration; args.flags.EnableParabolic(); } diff --git a/src/server/game/Movement/Spline/MoveSplineInitArgs.h b/src/server/game/Movement/Spline/MoveSplineInitArgs.h index 42db1df6224..441aea04d71 100644 --- a/src/server/game/Movement/Spline/MoveSplineInitArgs.h +++ b/src/server/game/Movement/Spline/MoveSplineInitArgs.h @@ -68,6 +68,7 @@ namespace Movement int32 path_Idx_offset; float velocity; float parabolic_amplitude; + float vertical_acceleration; float time_perc; uint32 splineId; float initialOrientation; |
