#pragma once #include "common.hpp" #include "components/config.hpp" #include "drawtypes/label.hpp" #include "utils/mixins.hpp" LEMONBUDDY_NS namespace drawtypes { class animation : public non_copyable_mixin { public: explicit animation(int framerate_ms) : m_framerate_ms(framerate_ms) {} explicit animation(vector&& frames, int framerate_ms) : m_frames(forward(frames)) , m_framerate_ms(framerate_ms) , m_framecount(m_frames.size()) , m_lastupdate(chrono::system_clock::now()) {} void add(icon_t&& frame); icon_t get(); int framerate(); operator bool(); protected: void tick(); vector m_frames; int m_framerate_ms = 1000; int m_frame = 0; int m_framecount = 0; chrono::system_clock::time_point m_lastupdate; }; using animation_t = shared_ptr; animation_t load_animation( const config& conf, string section, string name = "animation", bool required = true); } LEMONBUDDY_NS_END