22 #include <unordered_map>
26 #include "signals/signal.h"
27 #include "utils/throttle.h"
32 std::string animation_name;
45 void add_sequence(
const std::string& name,
const std::vector<AnimationSequenceStage>& stages);
46 void add_animation(
const std::string& name, uint32_t start_frame, uint32_t end_frame,
float fps);
47 void add_animation(
const std::string& name, uint32_t start_frame, uint32_t end_frame);
49 bool has_animations()
const {
return !animations_.empty(); }
50 std::size_t animation_count()
const {
return animations_.size(); }
52 void set_default_fps(
float fps);
53 float default_fps()
const;
62 Animation(
float duration, uint32_t start, uint32_t end):
64 frames(std::make_pair(start, end)) {}
67 std::pair<uint32_t, uint32_t> frames;
70 typedef std::unordered_map<std::string, std::shared_ptr<Animation> > AnimationMap;
71 AnimationMap animations_;
72 std::string first_animation_;
74 Animation* animation(
const std::string& name) {
75 auto it = animations_.find(name);
76 if(it == animations_.end())
return nullptr;
78 return (*it).second.get();
82 float default_fps_ = 7.0f;
86 typedef std::function<void (int32_t, int32_t,
float)> AnimationUpdatedCallback;
92 AnimationUpdatedCallback refresh_animation_state
96 on_animation_added_.disconnect();
99 void play_first_animation();
100 void play_animation(
const std::string& name);
101 void queue_next_animation(
const std::string& name);
102 void play_sequence(
const std::string& name);
104 void override_playing_animation_duration(
const float new_duration);
105 void update(
float dt);
107 uint32_t current_frame()
const {
return current_frame_; }
108 uint32_t next_frame()
const {
return next_frame_; }
109 float interp()
const {
return interp_; }
116 float current_animation_duration_ = 0.0f;
118 uint32_t current_frame_ = 0;
119 uint32_t next_frame_ = 0;
120 float interp_ = 0.0f;
122 AnimationUpdatedCallback refresh_animation_state_;