#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; uint8_t x, y; uint8_t length = 1; uint8_t _direction = 2; bool _random_direction = false; virtual CRGB _getColor(uint8_t height); virtual void restart(bool completely_random); private: uint16_t speed; boolean running; unsigned long last_move = 0; public: static const uint8_t DIR_NORTH = 0; static const uint8_t DIR_EAST = 1; static const uint8_t DIR_SOUTH = 2; static const uint8_t DIR_WEST = 3; MatrixEffectColumn(Window* win, uint8_t direction=0, bool random_direction=false); virtual ~MatrixEffectColumn() {}; void advance(); void draw(); void loop(); }; class RainbowMatrixEffectColumn : public MatrixEffectColumn { protected: CRGB _getColor(uint8_t height) override; public: RainbowMatrixEffectColumn(Window* win, uint8_t dir, bool rnd=false) : MatrixEffectColumn(win, dir, rnd) {}; }; class RandomMatrixEffectColumn : public MatrixEffectColumn { protected: uint8_t _hue = 42; CRGB _getColor(uint8_t height) override; void restart(bool completely_random) override; public: RandomMatrixEffectColumn(Window* win, uint8_t dir, bool rnd=false) : MatrixEffectColumn(win, dir, rnd) {}; }; class MatrixEffect : public Effect { protected: MatrixEffectColumn** _columns; virtual void _init(); public: boolean can_be_shown_with_clock(); MatrixEffect(); virtual ~MatrixEffect(); void loop(); }; class RainbowMatrixEffect : public MatrixEffect { private: void _init() override; }; class RandomMatrixEffect : public MatrixEffect { private: void _init() override; };