mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-02-06 08:59:11 +01:00
Core/Movement: ported MotionMaster::MoveJumpWithGravity implementation from master branch and cut off post Cataclsym features
This commit is contained in:
@@ -460,6 +460,22 @@ void MotionMaster::MoveJump(float x, float y, float z, float o, float speedXY, f
|
||||
Mutate(new GenericMovementGenerator(std::move(init), EFFECT_MOTION_TYPE, id), MOTION_SLOT_CONTROLLED);
|
||||
}
|
||||
|
||||
void MotionMaster::MoveJumpWithGravity(Position const& pos, float speedXY, float gravity, uint32 id, bool hasOrientation /* = false*/)
|
||||
{
|
||||
TC_LOG_DEBUG("movement.motionmaster", "MotionMaster::MoveJump: '%s', jumps to point Id: %u (%s)", _owner->GetGUID().ToString().c_str(), id, pos.ToString().c_str());
|
||||
if (speedXY < 0.01f)
|
||||
return;
|
||||
|
||||
Movement::MoveSplineInit init(_owner);
|
||||
init.MoveTo(pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), false);
|
||||
init.SetParabolicVerticalAcceleration(gravity, 0);
|
||||
init.SetVelocity(speedXY);
|
||||
if (hasOrientation)
|
||||
init.SetFacing(pos.GetOrientation());
|
||||
|
||||
Mutate(new GenericMovementGenerator(std::move(init), EFFECT_MOTION_TYPE, id), MOTION_SLOT_CONTROLLED);
|
||||
}
|
||||
|
||||
void MotionMaster::MoveCirclePath(float x, float y, float z, float radius, bool clockwise, uint8 stepCount, float velocity /*= 0.f*/)
|
||||
{
|
||||
float step = 2 * float(M_PI) / stepCount * (clockwise ? -1.0f : 1.0f);
|
||||
|
||||
@@ -181,6 +181,7 @@ class TC_GAME_API MotionMaster
|
||||
MoveJump(pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), pos.GetOrientation(), speedXY, speedZ, id, hasOrientation);
|
||||
}
|
||||
void MoveJump(float x, float y, float z, float o, float speedXY, float speedZ, uint32 id = EVENT_JUMP, bool hasOrientation = false);
|
||||
void MoveJumpWithGravity(Position const& pos, float speedXY, float gravity, uint32 id = EVENT_JUMP, bool hasOrientation = false);
|
||||
void MoveCirclePath(float x, float y, float z, float radius, bool clockwise, uint8 stepCount, float velocity = 0.f);
|
||||
void MoveCyclicPath(Position const* pathPoints, size_t pathSize, bool walk = false, bool fly = false, float velocity = 0.f);
|
||||
void MoveCyclicPath(uint32 pathId);
|
||||
|
||||
@@ -204,8 +204,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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -218,7 +225,7 @@ MoveSpline::MoveSpline() : m_Id(0), time_passed(0),
|
||||
}
|
||||
|
||||
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), walk(false),
|
||||
parabolic_amplitude(0.f), vertical_acceleration(0.f), time_perc(0.f), splineId(0), initialOrientation(0.f), walk(false),
|
||||
HasVelocity(false), TransformForTransport(true)
|
||||
{
|
||||
path.reserve(path_capacity);
|
||||
|
||||
@@ -66,6 +66,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 start_time);
|
||||
/* Plays animation after movement done
|
||||
* can't be combined with parabolic movement
|
||||
*/
|
||||
@@ -170,6 +176,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();
|
||||
}
|
||||
|
||||
|
||||
@@ -52,6 +52,7 @@ namespace Movement
|
||||
int32 path_Idx_offset;
|
||||
float velocity;
|
||||
float parabolic_amplitude;
|
||||
float vertical_acceleration;
|
||||
float time_perc;
|
||||
uint32 splineId;
|
||||
float initialOrientation;
|
||||
|
||||
Reference in New Issue
Block a user