/** Animations are structured in AnimationData as follows: .colors contains .color_count*3 uint8_t values for R, G and B. .offsets contains the frame start offsets within .data + the length of the data. (So you can always do something like `for (int i=anim.offsets[i]; i #include "prototypes.h" #include "my_fastled.h" #include "Window.h" class Animation { protected: AnimationData* data; unsigned long currentFrameSince; uint8_t currentFrame = 0; uint8_t* animation_data; CRGB* colors; CRGB* fgColor = NULL; CRGB* bgColor = new CRGB(0x000000); int8_t xOffset = 0; int8_t yOffset = 0; uint8_t startFrame = 0; uint8_t endFrame = 0; virtual CRGB* getColor(uint8_t color_index); void drawFrame(Window* w, uint8_t frame_index); void drawPixel(Window* w, int index, CRGB* color); uint16_t getFrameDelay(int frame); public: Animation(AnimationData* d); void setFgColor(CRGB*); void setBgColor(CRGB* bg_color); bool invert(); void setOffsets(int8_t x, int8_t y); void setStartFrame(uint8_t sf); void setEndFrame(uint8_t ef); void setFrameRange(uint8_t sf, uint8_t ef); void setSingleFrame(uint8_t frame); virtual ~Animation(); void draw(Window* w); void drawFrame(Window* w); virtual bool advance(); };