G.U.L.L.S/include/ColorRandomizerMatrix.h

68 lines
1.8 KiB
C++

#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