#if GARLAND_SUPPORT
|
|
|
|
#include "../anim.h"
|
|
#include "../color.h"
|
|
#include "../palette.h"
|
|
|
|
//seq keeps phases: 0..127 increasing, 128..255 decreasing, ends at 255 (steady off)
|
|
//ledstmp keeps color of stars
|
|
|
|
//------------------------------------------------------------------------------
|
|
class AnimStars : public Anim {
|
|
public:
|
|
AnimStars() : Anim("Stars") {
|
|
}
|
|
|
|
void SetupImpl() override {
|
|
//inc is (average) interval between appearance of new stars
|
|
inc = secureRandom(2, 5);
|
|
|
|
//reset all phases
|
|
for (int i = 0; i < numLeds; ++i)
|
|
seq[i] = 255;
|
|
}
|
|
|
|
void Run() override {
|
|
for (byte i = 0; i < numLeds; i++) {
|
|
byte phi = seq[i];
|
|
if (phi < 254) {
|
|
Color col = ledstmp[i];
|
|
if (phi <= 127) {
|
|
leds[i] = col.brightness(phi << 1);
|
|
} else {
|
|
leds[i] = col.brightness((255 - phi) << 1);
|
|
}
|
|
seq[i] += 2;
|
|
} else {
|
|
leds[i].r = 0;
|
|
leds[i].g = 0;
|
|
leds[i].b = 0;
|
|
}
|
|
}
|
|
|
|
if (secureRandom(inc) == 0) {
|
|
byte pos = secureRandom(numLeds);
|
|
if (seq[pos] > 250) {
|
|
seq[pos] = 0;
|
|
ledstmp[pos] = palette->getRndInterpColor();
|
|
}
|
|
}
|
|
}
|
|
};
|
|
|
|
#endif // GARLAND_SUPPORT
|