#include #include #include #include #include #include #pragma once class TransitionController { public: TransitionController(); void clearListeners(); void addListener(Transition::TransitionFn fn); std::shared_ptr buildColorTransition(const BulbId& bulbId, const ParsedColor& start, const ParsedColor& end); std::shared_ptr buildFieldTransition(const BulbId& bulbId, GroupStateField field, uint16_t start, uint16_t end); void addTransition(std::shared_ptr transition); void clear(); void loop(); ListNode>* getTransitions(); Transition* getTransition(size_t id); ListNode>* findTransition(size_t id); bool deleteTransition(size_t id); private: Transition::TransitionFn callback; LinkedList> activeTransitions; std::vector observers; size_t currentId; void transitionCallback(const BulbId& bulbId, GroupStateField field, uint16_t arg); };