Tileson 1.4.0
A helpful json parser for Tiled maps
Loading...
Searching...
No Matches
Animation.hpp
Go to the documentation of this file.
1//
2// Created by robin on 21.05.2021.
3//
4
5#ifndef TILESON_ANIMATION_HPP
6#define TILESON_ANIMATION_HPP
7
8namespace tson
9{
11 {
12 public:
13 inline Animation() = default;
14 inline Animation(const std::vector<tson::Frame> &frames) : m_frames {frames} {};
15
16 inline void update(float timeDeltaMs);
17 inline void reset();
18
19 inline void setFrames(const std::vector<tson::Frame> &frames);
20 inline void setCurrentFrame(uint32_t currentFrame);
21 inline void setTimeDelta(float timeDelta);
22
23 inline const std::vector<tson::Frame> &getFrames() const;
24 inline const tson::Frame *getCurrentFrame() const;
25 inline uint32_t getCurrentFrameNumber() const;
26 inline uint32_t getCurrentTileId() const;
27 inline float getTimeDelta() const;
28
29 inline bool any() const;
30 inline size_t size() const;
31
32 private:
33 inline int nextFrame();
34 std::vector<tson::Frame> m_frames;
35 uint32_t m_currentFrame {0};
36 float m_timeDelta {0};
37 };
38
39 const std::vector<tson::Frame> &Animation::getFrames() const
40 {
41 return m_frames;
42 }
43
48 {
49 m_currentFrame = 0;
50 m_timeDelta = 0.f;
51 }
52
58 {
59 return (m_frames.size() == 0 || m_currentFrame >= m_frames.size()) ? nullptr : &m_frames.at(m_currentFrame);
60 }
61
62 size_t Animation::size() const
63 {
64 return m_frames.size();
65 }
66
71 void Animation::update(float timeDeltaMs)
72 {
73 const tson::Frame *frame = getCurrentFrame();
74 if(frame != nullptr)
75 {
76 m_timeDelta += timeDeltaMs;
77 if(m_timeDelta >= frame->getDuration())
78 {
79 m_timeDelta = static_cast<float>((int32_t)m_timeDelta % frame->getDuration());
80 m_currentFrame = nextFrame();
81 }
82 }
83 }
84
85 int Animation::nextFrame()
86 {
87 return (m_currentFrame+1 >= m_frames.size()) ? 0 : m_currentFrame + 1;
88 }
89
91 {
92 return m_timeDelta;
93 }
94
96 {
97 return m_currentFrame;
98 }
99
101 {
102 return (getCurrentFrame() != nullptr) ? getCurrentFrame()->getTileId() : 0;
103 }
104
105 void Animation::setFrames(const std::vector<tson::Frame> &frames)
106 {
107 m_frames = frames;
108 }
109
110 void Animation::setCurrentFrame(uint32_t currentFrame)
111 {
112 m_currentFrame = currentFrame;
113 }
114
115 void Animation::setTimeDelta(float timeDelta)
116 {
117 m_timeDelta = timeDelta;
118 }
119
124 bool Animation::any() const
125 {
126 return m_frames.size() > 0;
127 }
128}
129
130#endif //TILESON_ANIMATION_HPP
Definition Animation.hpp:11
size_t size() const
Definition Animation.hpp:62
Animation(const std::vector< tson::Frame > &frames)
Definition Animation.hpp:14
void setTimeDelta(float timeDelta)
Definition Animation.hpp:115
Animation()=default
void setFrames(const std::vector< tson::Frame > &frames)
Definition Animation.hpp:105
uint32_t getCurrentTileId() const
Definition Animation.hpp:100
const tson::Frame * getCurrentFrame() const
Definition Animation.hpp:57
void update(float timeDeltaMs)
Definition Animation.hpp:71
uint32_t getCurrentFrameNumber() const
Definition Animation.hpp:95
float getTimeDelta() const
Definition Animation.hpp:90
void setCurrentFrame(uint32_t currentFrame)
Definition Animation.hpp:110
void reset()
Definition Animation.hpp:47
const std::vector< tson::Frame > & getFrames() const
Definition Animation.hpp:39
bool any() const
Definition Animation.hpp:124
Definition Frame.hpp:13
int getDuration() const
Definition Frame.hpp:68
uint32_t getTileId() const
Definition Frame.hpp:77
Definition Base64.hpp:12