Tileson  1.3.0
A helpful json parser for Tiled maps
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 
8 namespace tson
9 {
10  class Animation
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 = (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