mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-23 10:26:28 +01:00
Core/Movement: Change parabolic/animtier spline arguments to use point index on path instead of raw timers
This commit is contained in:
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user