void MoveSpline::computeParabolicElevation(float& el) const { if (time_passed > effect_start_time) { float t_passedf = MSToSec(time_passed - effect_start_time); float t_durationf = MSToSec(Duration() - effect_start_time); //client use not modified duration here // -a*x*x + bx + c: //(dur * v3->z_acceleration * dt)/2 - (v3->z_acceleration * dt * dt)/2 + Z; el += (t_durationf - t_passedf) * 0.5f * vertical_acceleration * t_passedf; } }
void MoveSpline::Initialize(const MoveSplineInitArgs& args) { splineflags = args.flags; facing = args.facing; m_Id = args.splineId; point_Idx_offset = args.path_Idx_offset; initialOrientation = args.initialOrientation; onTransport = false; time_passed = 0; vertical_acceleration = 0.f; effect_start_time = 0; // Check if its a stop spline if (args.flags.done) { spline.clear(); return; } init_spline(args); // init parabolic / animation // spline initialized, duration known and i able to compute parabolic acceleration if (args.flags & (MoveSplineFlag::Parabolic | MoveSplineFlag::Animation)) { 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); } } }
void MoveSpline::Initialize(MoveSplineInitArgs const& args) { splineflags = args.flags; facing = args.facing; m_Id = args.splineId; point_Idx_offset = args.path_Idx_offset; initialOrientation = args.initialOrientation; time_passed = 0; vertical_acceleration = 0.f; effect_start_time = 0; splineIsFacingOnly = args.path.size() == 2 && args.facing.type != MONSTER_MOVE_NORMAL && ((args.path[1] - args.path[0]).length() < 0.1f); // Check if its a stop spline if (args.flags.done) { spline.clear(); return; } init_spline(args); // init parabolic / animation // spline initialized, duration known and i able to compute parabolic acceleration if (args.flags & (MoveSplineFlag::Parabolic | MoveSplineFlag::Animation | MoveSplineFlag::Unknown6)) { 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); } } }
void MoveSpline::Initialize(const MoveSplineInitArgs& args) { splineflags = args.flags; facing = args.facing; m_Id = args.splineId; point_Idx_offset = args.path_Idx_offset; initialOrientation = args.initialOrientation; transportGuid = args.transportGuid; transportSeat = args.transportSeat; transportPos = args.transportPos; time_passed = 0; vertical_acceleration = 0.f; effect_start_time = 0; init_spline(args); // init parabolic / animation // spline initialized, duration known and i able to compute parabolic acceleration if (args.flags & (MoveSplineFlag::Trajectory | MoveSplineFlag::Animation)) { 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); } } }
void MoveSpline::computeFallElevation(float& el) const { float z_now = spline.getPoint(spline.first()).z - Movement::computeFallElevation(MSToSec(time_passed)); float final_z = FinalDestination().z; if (z_now < final_z) el = final_z; else el = z_now; }
void MoveSpline::computeFallElevation(float& el) const { float z_now = spline.getPoint(spline.first()).z - Movement::computeFallElevation(MSToSec(time_passed), false); float final_z = FinalDestination().z; el = std::max(z_now, final_z); }