#pragma once #include "prototypes.h" #include "Effect.h" #include "config.h" #include "my_fastled.h" #include "my_color_palettes.h" class MatrixEffectColumn { protected: Window* window; int x, y; int length = 1; virtual CRGB _getColor(uint8_t height); private: uint16_t speed; boolean running; unsigned long last_move = 0; public: MatrixEffectColumn(); MatrixEffectColumn(Window* win, int xPos); virtual void start(); void advance(); void draw(); void loop(); }; class RainbowMatrixEffectColumn : public MatrixEffectColumn { protected: CRGB _getColor(uint8_t height) override; public: RainbowMatrixEffectColumn() : MatrixEffectColumn() {}; RainbowMatrixEffectColumn(Window* win, int xPos) : MatrixEffectColumn(win, xPos) {}; }; class RandomMatrixEffectColumn : public MatrixEffectColumn { protected: uint8_t _hue = 42; CRGB _getColor(uint8_t height) override; public: void start() override; RandomMatrixEffectColumn() : MatrixEffectColumn() {}; RandomMatrixEffectColumn(Window* win, int xPos) : MatrixEffectColumn(win, xPos) {}; }; class MatrixEffect : public Effect { protected: MatrixEffectColumn** _columns; public: boolean can_be_shown_with_clock(); virtual void start(); void stop(); MatrixEffect(); void loop(); }; class RainbowMatrixEffect : public MatrixEffect { public: void start() override; }; class RandomMatrixEffect : public MatrixEffect { public: void start() override; };