#pragma once #include #include "Animation.h" #include #include class AnimationController { public: enum DefaultAnimation { FIRE_HOT = 0, FIRE_COLD = 1, SNOWFALL = 2, NUM_DEFAULT_ANIMATIONS }; static const constexpr std::array AnimationNames{ "Hot Fire", "Cold Fire", "Snowfall" }; AnimationController(Fader *fader); void changeAnimation(std::unique_ptr anim, bool transition = true); void changeAnimation(DefaultAnimation animation_id, bool transition = true); void loop(void); void stop(void); void restart(void); bool isIdle(void) { return m_animation->finished() && !m_nextAnimation; } private: Fader *m_fader; std::unique_ptr m_animation; std::unique_ptr m_nextAnimation; SemaphoreHandle_t m_updateMutex; uint64_t m_frame; };