NasNas
An intuitive and beginner friendly 2D game framework for C++
Anim.hpp
1 
6 #pragma once
7 
8 #include <string>
9 #include <vector>
10 
11 #include <SFML/Graphics/Sprite.hpp>
12 #include <SFML/System/Clock.hpp>
13 #include <SFML/System/Vector2.hpp>
14 
15 #include <NasNas/core/data/Rect.hpp>
16 
17 namespace ns {
18 
19  class AnimFrame {
20  public:
28  AnimFrame(const ns::IntRect& rectangle, int duration, const sf::Vector2i& origin={0, 0});
30  const int duration;
31  const sf::Vector2i origin;
32  };
33 
34 
35  class Anim {
36  public:
40  Anim();
41 
49  Anim(std::string name, std::vector<AnimFrame> frames, bool loop=true);
50 
56  void add(const AnimFrame& frame);
57 
63  auto getName() const -> const std::string&;
64 
71  auto getFrame(int index) const -> const AnimFrame&;
72 
77  auto size() const -> int;
78 
79  mutable bool loop = true;
80 
81  private:
82  std::string m_name;
83  std::vector<AnimFrame> m_frames;
84  };
85 
86 
87  class AnimPlayer {
88  public:
92  explicit AnimPlayer();
93 
97  void play(const Anim& animation);
98 
102  void replay(const Anim& animation);
103 
107  void replay();
108 
112  void resume();
113 
117  void pause();
118 
122  void stop();
123 
129  auto isPlaying() const -> bool;
130 
136  auto getAnim() const -> const Anim*;
137 
143  auto getActiveFrame() const -> const AnimFrame&;
144 
149  void setPlaySpeed(float speed);
150 
154  void update();
155 
156  void update(sf::Sprite& spr);
157 
158  private:
159  const Anim* m_anim = nullptr;
160  int m_index = 0;
161  bool m_playing = false;
162  float m_play_speed = 1;
163  sf::Clock m_clock;
164  };
165 
166 }
AnimFrame(const ns::IntRect &rectangle, int duration, const sf::Vector2i &origin={0, 0})
Constructs an AnimFrame object.
const ns::IntRect rectangle
Frame rectangle.
Definition: Anim.hpp:29
const sf::Vector2i origin
Frame origin.
Definition: Anim.hpp:31
const int duration
Frame duration in milliseconds.
Definition: Anim.hpp:30