New Effect: DvdEffect
This commit is contained in:
parent
f1821b0b85
commit
e897c6bdcd
17
include/effect_dvd.h
Normal file
17
include/effect_dvd.h
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
#pragma once
|
||||||
|
#include "Effect.h"
|
||||||
|
|
||||||
|
class DvdEffect : public Effect {
|
||||||
|
private:
|
||||||
|
Window* window = new Window(0, 0, LED_WIDTH, LED_HEIGHT-6);
|
||||||
|
uint8_t _x = 0;
|
||||||
|
uint8_t _y = 0;
|
||||||
|
int8_t _x_dir = 1;
|
||||||
|
int8_t _y_dir = 1;
|
||||||
|
CRGB _color;
|
||||||
|
public:
|
||||||
|
DvdEffect();
|
||||||
|
~DvdEffect();
|
||||||
|
void loop() override;
|
||||||
|
bool can_be_shown_with_clock() override;
|
||||||
|
};
|
37
src/effect_dvd.cpp
Normal file
37
src/effect_dvd.cpp
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
#include "effect_dvd.h"
|
||||||
|
#include "my_fastled.h"
|
||||||
|
|
||||||
|
void DvdEffect::loop() {
|
||||||
|
bool dir_changed = false;
|
||||||
|
EVERY_N_MILLISECONDS( 250 ) {
|
||||||
|
_x += _x_dir;
|
||||||
|
_y += _y_dir;
|
||||||
|
|
||||||
|
if (_x == 0 || _x + EFFECT_DVD_WIDTH >= window->width) {
|
||||||
|
_x_dir = -_x_dir;
|
||||||
|
dir_changed = true;
|
||||||
|
}
|
||||||
|
if (_y == 0 || _y + EFFECT_DVD_HEIGHT >= window->height) {
|
||||||
|
_y_dir = -_y_dir;
|
||||||
|
dir_changed = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
window->clear();
|
||||||
|
|
||||||
|
for (int x=0; x<EFFECT_DVD_WIDTH; x++) for (int y=0; y<EFFECT_DVD_HEIGHT; y++) {
|
||||||
|
window->setPixel(_x + x, _y + y, (CRGB*)&_color);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dir_changed) _color = (CRGB)CHSV(random8(), 255, 255);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool DvdEffect::can_be_shown_with_clock() { return true; }
|
||||||
|
|
||||||
|
DvdEffect::DvdEffect() {
|
||||||
|
_color = CHSV(random8(), 255, 255);
|
||||||
|
}
|
||||||
|
|
||||||
|
DvdEffect::~DvdEffect() {
|
||||||
|
delete window;
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user