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

63 lines
1.7 KiB
C++

#ifndef CYCLONEMATRIX_H
#define CYCLONEMATRIX_H
#include "LEDHAL2D.h"
#include "CycloneHelper.h"
#include "MatrixAnimation.h"
class CycloneMatrix : public MatrixAnimation {
public:
CycloneMatrix(LEDHAL2D* _matrix, char* _refName, long _updateTime, uint16_t originX,
uint16_t originY, uint8_t _startRadius, uint8_t _endRadius, uint8_t numColors,
CRGB* _colors) : MatrixAnimation(_matrix, _refName, _updateTime),
startRadius(_startRadius), endRadius(_endRadius) {
colors = new CRGB[numColors];
for(uint8_t i = 0; i < numColors; i++) {
colors[i] = _colors[i];
}
helpers = new CycloneHelper*[_endRadius - _startRadius];
// The colors are currently being passed in such a way that I believe
// there being taken into the CycloneHelper through value, rather than ByRef
// i.e. wasting memory
for(uint8_t i = 0; i < _endRadius - _startRadius; i++) {
helpers[i] = new CycloneHelper(
colors[random(0, numColors)],
originX, originY,
_startRadius + i,
random(0, 100000) % 2 == 0 ? 1 : -1
);
}
}
virtual ~CycloneMatrix() { delete helpers; delete colors; }
// I don't know that there is a nice, memory friendly way to
// reset this yet...
void initialize() {
resetTimer();
}
void execute() {
matrix->clearLEDs();
for(uint8_t i = 0; i < endRadius - startRadius; i++) {
helpers[i]->updateAndRedraw(matrix);
}
matrix->requestShow();
}
private:
uint8_t
startRadius,
endRadius;
CRGB*
colors;
CycloneHelper**
helpers;
};
#endif