TrinityCore
Loading...
Searching...
No Matches
MoveSpline.h
Go to the documentation of this file.
1/*
2 * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
3 *
4 * This program is free software; you can redistribute it and/or modify it
5 * under the terms of the GNU General Public License as published by the
6 * Free Software Foundation; either version 2 of the License, or (at your
7 * option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12 * more details.
13 *
14 * You should have received a copy of the GNU General Public License along
15 * with this program. If not, see <http://www.gnu.org/licenses/>.
16 */
17
18#ifndef TRINITYSERVER_MOVEPLINE_H
19#define TRINITYSERVER_MOVEPLINE_H
20
21#include "Spline.h"
22#include "MoveSplineInitArgs.h"
23#include <G3D/Vector3.h>
24
25enum class AnimTier : uint8;
26
27namespace Movement
28{
29 struct Location : public Vector3
30 {
32 Location(float x, float y, float z, float o) : Vector3(x, y, z), orientation(o) { }
33 Location(Vector3 const& v) : Vector3(v), orientation(0) { }
34 Location(Vector3 const& v, float o) : Vector3(v), orientation(o) { }
35
37 };
38
39 // MoveSpline represents smooth catmullrom or linear curve and point that moves belong it
40 // curve can be cyclic - in this case movement will be cyclic
41 // point can have vertical acceleration motion componemt(used in fall, parabolic movement)
43 {
44 public:
47 {
48 Result_None = 0x01,
49 Result_Arrived = 0x02,
50 Result_NextCycle = 0x04,
51 Result_NextSegment = 0x08
52 };
53 friend class PacketBuilder;
54
55 protected:
57
59
61
63
65 // currently duration mods are unused, but its _currently_
66 //float duration_mod;
67 //float duration_mod_next;
73 float velocity;
74
75 void init_spline(MoveSplineInitArgs const& args);
76
77 protected:
78 MySpline::ControlArray const& getPath() const { return spline.getPoints(); }
79 void computeParabolicElevation(float& el) const;
80 void computeFallElevation(float& el) const;
81
82 UpdateResult _updateState(int32& ms_time_diff);
83 int32 next_timestamp() const { return spline.length(point_Idx + 1); }
84 int32 segment_time_elapsed() const { return next_timestamp() - time_passed; }
85 int32 timeElapsed() const { return Duration() - time_passed; }
86
87 public:
88 int32 timePassed() const { return time_passed; }
89 int32 Duration() const { return spline.length(); }
90 MySpline const& _Spline() const { return spline; }
91 int32 _currentSplineIdx() const { return point_Idx; }
92 float Velocity() const { return velocity; }
93 void _Finalize();
94 void _Interrupt() { splineflags.done = true; }
95
96 public:
97 void Initialize(MoveSplineInitArgs const&);
98 bool Initialized() const { return !spline.empty(); }
99
100 MoveSpline();
101
102 template<class UpdateHandler>
103 void updateState(int32 difftime, UpdateHandler& handler)
104 {
105 ASSERT(Initialized());
106 do
107 handler(_updateState(difftime));
108 while (difftime > 0);
109 }
110
111 void updateState(int32 difftime)
112 {
113 ASSERT(Initialized());
114 do _updateState(difftime);
115 while (difftime > 0);
116 }
117
118 Location ComputePosition() const;
119
120 uint32 GetId() const { return m_Id; }
121 bool Finalized() const { return splineflags.done; }
122 bool isCyclic() const { return splineflags.cyclic; }
123 bool isFalling() const { return splineflags.falling; }
124 Vector3 FinalDestination() const { return Initialized() ? spline.getPoint(spline.last()) : Vector3(); }
125 Vector3 CurrentDestination() const { return Initialized() ? spline.getPoint(point_Idx + 1) : Vector3(); }
126 int32 currentPathIdx() const;
127
128 bool HasAnimation() const { return splineflags.animation; }
129 AnimTier GetAnimTier() const { return static_cast<AnimTier>(splineflags.animTier); }
130
132 std::string ToString() const;
133 bool HasStarted() const
134 {
135 return time_passed > 0;
136 }
137 };
138}
139#endif // TRINITYSERVER_MOVEPLINE_H
#define TC_GAME_API
Definition Define.h:114
uint8_t uint8
Definition Define.h:135
int32_t int32
Definition Define.h:129
uint32_t uint32
Definition Define.h:133
#define ASSERT
Definition Errors.h:68
AnimTier
Definition UnitDefines.h:85
int32 next_timestamp() const
Definition MoveSpline.h:83
bool isCyclic() const
Definition MoveSpline.h:122
float Velocity() const
Definition MoveSpline.h:92
int32 timeElapsed() const
Definition MoveSpline.h:85
uint32 GetId() const
Definition MoveSpline.h:120
bool isFalling() const
Definition MoveSpline.h:123
bool Finalized() const
Definition MoveSpline.h:121
MySpline::ControlArray const & getPath() const
Definition MoveSpline.h:78
int32 timePassed() const
Definition MoveSpline.h:88
void updateState(int32 difftime)
Definition MoveSpline.h:111
Vector3 FinalDestination() const
Definition MoveSpline.h:124
MySpline const & _Spline() const
Definition MoveSpline.h:90
int32 Duration() const
Definition MoveSpline.h:89
int32 _currentSplineIdx() const
Definition MoveSpline.h:91
AnimTier GetAnimTier() const
Definition MoveSpline.h:129
bool Initialized() const
Definition MoveSpline.h:98
int32 segment_time_elapsed() const
Definition MoveSpline.h:84
Vector3 CurrentDestination() const
Definition MoveSpline.h:125
void updateState(int32 difftime, UpdateHandler &handler)
Definition MoveSpline.h:103
MoveSplineFlag splineflags
Definition MoveSpline.h:62
bool HasAnimation() const
Definition MoveSpline.h:128
Spline< int32 > MySpline
Definition MoveSpline.h:45
bool HasStarted() const
Definition MoveSpline.h:133
std::vector< Vector3 > ControlArray
Definition Spline.h:33
ControlArray const & getPoints() const
Definition Spline.h:115
bool empty() const
Definition Spline.h:111
Vector3 const & getPoint(index_type i) const
Definition Spline.h:117
index_type last() const
Definition Spline.h:109
length_type length() const
Definition Spline.h:203
float computeFallElevation(float t_passed, bool isSafeFall, float start_velocity=0.0f)
Location(Vector3 const &v, float o)
Definition MoveSpline.h:34
Location(Vector3 const &v)
Definition MoveSpline.h:33
Location(float x, float y, float z, float o)
Definition MoveSpline.h:32