32 float seg_time = float(
spline.
length(point_index, point_index + 1));
34 u = std::min(
float(time_point -
spline.
length(point_index)) / seg_time, 1.0f);
65 if (hermite.x != 0.f || hermite.y != 0.f)
118 el = std::max(z_now, final_z);
159 if (args.
flags.Cyclic)
189 TC_LOG_ERROR(
"misc",
"MoveSpline::init_spline: zero length spline, wrong input data?");
247 else if (args.
flags.FadeObject)
252 vertical_acceleration(0.f), initialOrientation(0.f), effect_start_time(0), point_Idx(0), point_Idx_offset(0), velocity(0.f),
253 onTransport(false), splineIsFacingOnly(false)
262#define CHECK(exp, verbose) \
263 if (!(exp)) return [&]{ \
264 TC_LOG_ERROR("misc.movesplineinitargs", "MoveSplineInitArgs::Validate: expression '{}' failed for {}", #exp, unit ? std::string_view(verbose) : "cyclic spline continuation"sv); \
289 constexpr float MAX_XY_OFFSET = (1 << 10) / 4.0f;
290 constexpr float MAX_Z_OFFSET = (1 << 9) / 4.0f;
292 auto isValidPackedXYOffset = [](
float coord) ->
bool {
return coord > -MAX_XY_OFFSET && coord < MAX_XY_OFFSET; };
293 auto isValidPackedZOffset = [](
float coord) ->
bool {
return coord > -MAX_Z_OFFSET && coord < MAX_Z_OFFSET; };
297 Vector3 middle = (
path.front() +
path.back()) / 2;
300 if ((
path[i + 1] -
path[i]).squaredLength() < 0.01f)
304 if (!
flags.UncompressedPath)
305 if (!isValidPackedXYOffset(middle.x -
path[i].x)
306 || !isValidPackedXYOffset(middle.y -
path[i].y)
307 || !isValidPackedZOffset(middle.z -
path[i].z))
308 flags.UncompressedPath =
true;
315parabolic_amplitude(0.f), effect_start_point(0), fade_object_duration_ms(0),
316splineId(0), initialOrientation(0.f),
317walk(false), HasVelocity(false), TransformForTransport(true)
338 ASSERT(minimal_diff >= 0);
340 ms_time_diff -= minimal_diff;
407 std::stringstream str;
408 str <<
"MoveSpline\n";
409 str <<
"spline Id: " <<
GetId() <<
'\n';
418 str <<
"total time: " <<
Duration() <<
'\n';
419 str <<
"spline point Id: " <<
point_Idx <<
'\n';
422 return std::move(str).str();
DB2Storage< CurveEntry > sCurveStore("Curve.db2", &CurveLoadInfo::Instance)
#define TC_LOG_ERROR(filterType__, message__,...)
#define CHECK(exp, verbose)
ObjectGuid const & GetGUID() const
int32 next_timestamp() const
std::string ToString() const
UpdateResult _updateState(int32 &ms_time_diff)
============================================================================================
Location ComputePosition() const
Optional< TurnData > turn
void computeFallElevation(int32 time_point, float &el) const
Optional< AnimTierTransition > anim_tier
void reinit_spline_for_next_cycle()
void Initialize(MoveSplineInitArgs const &)
int32 currentPathIdx() const
float vertical_acceleration
Vector3 const & FinalDestination() const
int32 segment_time_elapsed() const
void computeParabolicElevation(int32 time_point, float &el) const
MoveSplineFlag splineflags
void init_spline(MoveSplineInitArgs const &args)
Optional< SpellEffectExtraData > spell_effect_extra
Location computePosition(int32 time_point, int32 point_index) const
ControlArray const & getPoints() const
float SegLength(index_type i) const
Vector3 const & getPoint(index_type i) const
void init_cyclic_spline(const Vector3 *controls, index_type count, EvaluationMode m, index_type cyclic_point, float orientation=0.0f)
void init_spline(const Vector3 *controls, index_type count, EvaluationMode m, float orientation=0.0f)
std::string ToString() const
void set_length(index_type i, length_type length)
length_type length() const
void evaluate_derivative(float t, Vector3 &hermite) const
void evaluate_percent(float t, Vector3 &c) const
std::string ToString() const
std::string GetDebugInfo() const override
float computeFallTime(float path_length, bool isSafeFall)
float computeFallElevation(float t_passed, bool isSafeFall, float start_velocity=0.0f)
@ MONSTER_MOVE_FACING_TARGET
@ MONSTER_MOVE_FACING_ANGLE
@ MONSTER_MOVE_FACING_SPOT
int32 operator()(Spline< int32 > &s, int32 i)
struct Movement::FacingInfo::@309 f
int32 operator()(Spline< int32 > const &s, int32 i) const
float parabolic_amplitude
Optional< AnimTierTransition > animTier
Optional< SpellEffectExtraData > spellEffectExtra
bool Validate(Unit const *unit)
============================================================================================
Optional< TurnData > turnData
int32 fade_object_duration_ms
bool TransformForTransport
float parabolic_amplitude
int32 operator()(Spline< int32 > const &, int32)
static float NormalizeOrientation(float o)
std::string ToString() const
constexpr bool isSmooth() const
constexpr bool HasFlag(MoveSplineFlagEnum f) const