#ifndef COLORRANDOMIZERMATRIX_H #define COLORRANDOMIZERMATRIX_H #include "MatrixAnimation.h" #include "LEDHAL2D.h" #define DEFAULT_MATRIX_FADER 64 enum ColorRandomizerType { HORIZONTAL_COLORRANDOMIZER, VERTICAL_COLORRANDOMIZER }; class ColorRandomizerMatrix : public MatrixAnimation { public: ColorRandomizerMatrix(LEDHAL2D* _matrix, char* _refName, long _updateTime, bool _fade, uint8_t _numColors, CRGB* _colors, ColorRandomizerType _type) : MatrixAnimation(_matrix, _refName, _updateTime), numColors(_numColors), colors(new CRGB[_numColors]), fade(_fade), colorRandomizerInt(0), scale(DEFAULT_MATRIX_FADER) { for(uint8_t i = 0; i < _numColors; i++) { colors[i] = _colors[i]; } } virtual ~ColorRandomizerMatrix() { delete colors; delete fadingValues; } void initialize() { colorRandomizerInt = 0; isFading = false; if(fadingValues != nullptr) { delete fadingValues; } if(type == ColorRandomizerType::HORIZONTAL_COLORRANDOMIZER) { fadingValues = new CRGB[matrix->getHeight()]; } else { fadingValues = new CRGB[matrix->getWidth()]; } } void execute(); void setFade(bool _fade) { fade = _fade; initialize(); } bool getFade() { return fade; } void setFadeScale(uint8_t _scale) { scale = _scale; initialize(); } uint8_t getFadeScale() { return scale; } void setType(ColorRandomizerType _type) { type = _type; initialize(); } ColorRandomizerType getType() { return type; } private: CRGB *colors, *fadingValues; uint16_t colorRandomizerInt; uint8_t scale, numColors; bool isFading, fade; ColorRandomizerType type; }; #endif