aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Movement/Spline
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2021-11-27 21:56:00 +0100
committerShauren <shauren.trinity@gmail.com>2021-11-27 21:56:00 +0100
commit684cd9d9681466019dcd06ad6f994890cff8cb2e (patch)
tree16008a4f7ac175468f2aa070a1da231a3bbdf44b /src/server/game/Movement/Spline
parent1e46fc17eea2d98736fb506ee581c79ce30a3dd9 (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.cpp15
-rw-r--r--src/server/game/Movement/Spline/MoveSplineInit.h15
-rw-r--r--src/server/game/Movement/Spline/MoveSplineInitArgs.h1
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;