53 lines
1.2 KiB
C++
53 lines
1.2 KiB
C++
#ifndef PLASMAMATRIX_H
|
|
#define PLASMAMATRIX_H
|
|
|
|
#include "MatrixAnimation.h"
|
|
#include "LEDHAL2D.h"
|
|
|
|
class PlasmaMatrix : public MatrixAnimation {
|
|
public:
|
|
PlasmaMatrix(LEDHAL2D* _matrix, char* _refName, long _updateTime) :
|
|
MatrixAnimation(_matrix, _refName, _updateTime), paletteShift(0), palette(new CRGB[256]) {
|
|
plasma = new uint8_t*[matrix->getWidth()];
|
|
|
|
for(uint16_t i = 0; i < matrix->getWidth(); i++) {
|
|
plasma[i] = new uint8_t[matrix->getHeight()];
|
|
}
|
|
|
|
for(uint16_t x = 0; x < matrix->getWidth(); x++) {
|
|
for(uint16_t y = 0; y < matrix->getHeight(); y++) {
|
|
plasma[x][y] = (uint8_t) ((128.0 + (128 * sinf(x / 8.0)) + 128 + (128.0 * sinf(y / 8.0))) / 2);
|
|
}
|
|
}
|
|
|
|
for(uint16_t i = 0; i < 256; i++) {
|
|
palette[i] = CRGB(CHSV(i, 255, 255));
|
|
}
|
|
}
|
|
|
|
virtual ~PlasmaMatrix() {
|
|
delete[] palette;
|
|
|
|
for(uint16_t i = 0; i < matrix->getWidth(); i++) {
|
|
delete[] plasma[i];
|
|
}
|
|
|
|
delete[] plasma;
|
|
}
|
|
|
|
void initialize() {
|
|
paletteShift = 0;
|
|
}
|
|
|
|
void execute();
|
|
|
|
private:
|
|
uint16_t
|
|
paletteShift;
|
|
CRGB*
|
|
palette;
|
|
uint8_t**
|
|
plasma;
|
|
};
|
|
|
|
#endif |