Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Loading...
Searching...
No Matches
MoveSpline.h
Go to the documentation of this file.
1/*
2* This file is part of Project SkyFire https://www.projectskyfire.org.
3* See LICENSE.md file for Copyright information
4*/
5
6#ifndef SKYFIRESERVER_MOVEPLINE_H
7#define SKYFIRESERVER_MOVEPLINE_H
8
10#include "Spline.h"
11
12namespace Movement
13{
14 struct Location : public Vector3
15 {
17 Location(float x, float y, float z, float o) : Vector3(x, y, z), orientation(o) { }
18 Location(const Vector3& v) : Vector3(v), orientation(0) { }
19 Location(const Vector3& v, float o) : Vector3(v), orientation(o) { }
20
22 };
23
24 // MoveSpline represents smooth catmullrom or linear curve and point that moves belong it
25 // curve can be cyclic - in this case movement will be cyclic
26 // point can have vertical acceleration motion componemt(used in fall, parabolic movement)
28 {
29 public:
38 friend class PacketBuilder;
39
40 protected:
42
44
46
48
50 // currently duration mods are unused, but its _currently_
51 //float duration_mod;
52 //float duration_mod_next;
58
59 void init_spline(const MoveSplineInitArgs& args);
60
61 protected:
62 MySpline::ControlArray const& getPath() const { return spline.getPoints(); }
63 void computeParabolicElevation(float& el) const;
64 void computeFallElevation(float& el) const;
65
66 UpdateResult _updateState(int32& ms_time_diff);
67 int32 next_timestamp() const { return spline.length(point_Idx + 1); }
69 int32 timeElapsed() const { return Duration() - time_passed; }
70 int32 timePassed() const { return time_passed; }
71
72 public:
73 int32 Duration() const { return spline.length(); }
74 MySpline const& _Spline() const { return spline; }
75 int32 _currentSplineIdx() const { return point_Idx; }
76 void _Finalize();
77 void _Interrupt() { splineflags.done = true; }
78
79 public:
80 void Initialize(const MoveSplineInitArgs&);
81 bool Initialized() const { return !spline.empty(); }
82
83 MoveSpline();
84
85 template<class UpdateHandler>
86 void updateState(int32 difftime, UpdateHandler& handler)
87 {
89 do
90 handler(_updateState(difftime));
91 while (difftime > 0);
92 }
93
94 void updateState(int32 difftime)
95 {
97 do _updateState(difftime);
98 while (difftime > 0);
99 }
100
102
103 uint32 GetId() const { return m_Id; }
104 bool Finalized() const { return splineflags.done; }
105 bool isCyclic() const { return splineflags.cyclic; }
106 bool isFalling() const { return splineflags.falling; }
107 Vector3 FinalDestination() const { return Initialized() ? spline.getPoint(spline.last()) : Vector3(); }
108 Vector3 CurrentDestination() const { return Initialized() ? spline.getPoint(point_Idx + 1) : Vector3(); }
109 int32 currentPathIdx() const;
110
112 std::string ToString() const;
113 };
114}
115#endif // SKYFIRESERVER_MOVEPLINE_H
std::int32_t int32
Definition Define.h:73
std::uint32_t uint32
Definition Define.h:77
#define ASSERT
Definition Errors.h:29
int32 next_timestamp() const
Definition MoveSpline.h:67
bool isCyclic() const
Definition MoveSpline.h:105
std::string ToString() const
UpdateResult _updateState(int32 &ms_time_diff)
============================================================================================
void Initialize(const MoveSplineInitArgs &)
Location ComputePosition() const
int32 timeElapsed() const
Definition MoveSpline.h:69
uint32 GetId() const
Definition MoveSpline.h:103
bool isFalling() const
Definition MoveSpline.h:106
void computeFallElevation(float &el) const
bool Finalized() const
Definition MoveSpline.h:104
MySpline::ControlArray const & getPath() const
Definition MoveSpline.h:62
int32 timePassed() const
Definition MoveSpline.h:70
void updateState(int32 difftime)
Definition MoveSpline.h:94
Vector3 FinalDestination() const
Definition MoveSpline.h:107
friend class PacketBuilder
Definition MoveSpline.h:38
MySpline const & _Spline() const
Definition MoveSpline.h:74
int32 currentPathIdx() const
int32 Duration() const
Definition MoveSpline.h:73
int32 _currentSplineIdx() const
Definition MoveSpline.h:75
bool Initialized() const
Definition MoveSpline.h:81
int32 segment_time_elapsed() const
Definition MoveSpline.h:68
Vector3 CurrentDestination() const
Definition MoveSpline.h:108
void init_spline(const MoveSplineInitArgs &args)
void computeParabolicElevation(float &el) const
void updateState(int32 difftime, UpdateHandler &handler)
Definition MoveSpline.h:86
MoveSplineFlag splineflags
Definition MoveSpline.h:47
Spline< int32 > MySpline
Definition MoveSpline.h:30
std::vector< Vector3 > ControlArray
Definition Spline.h:19
Location(const Vector3 &v)
Definition MoveSpline.h:18
Location(const Vector3 &v, float o)
Definition MoveSpline.h:19
Location(float x, float y, float z, float o)
Definition MoveSpline.h:17