#if GARLAND_SUPPORT
|
|
|
|
#include "../anim.h"
|
|
#include "../color.h"
|
|
#include "../palette.h"
|
|
|
|
//------------------------------------------------------------------------------
|
|
class AnimFly : public Anim {
|
|
public:
|
|
AnimFly() : Anim("Fly") {
|
|
}
|
|
|
|
void SetupImpl() override {
|
|
//length of particle tail
|
|
pos = secureRandom(2, 15);
|
|
//probability of the tail
|
|
inc = secureRandom(5, 15);
|
|
if (secureRandom(10) > 5) {
|
|
inc = -inc;
|
|
}
|
|
phase = 0;
|
|
}
|
|
|
|
void Run() override {
|
|
byte launchpos;
|
|
if (inc > 0) {
|
|
launchpos = numLeds - 1;
|
|
for (int i = 1; i < numLeds; i++) {
|
|
leds[i - 1] = leds[i];
|
|
}
|
|
} else {
|
|
launchpos = 0;
|
|
for (int i = numLeds - 2; i >= 0; i--) {
|
|
leds[i + 1] = leds[i];
|
|
}
|
|
}
|
|
|
|
if (secureRandom(abs(inc)) == 0) {
|
|
curColor = palette->getRndInterpColor();
|
|
phase = pos;
|
|
}
|
|
|
|
leds[launchpos] = Color((int)curColor.r * phase / pos, (int)curColor.g * phase / pos, (int)curColor.b * phase / pos);
|
|
if (phase > 0) phase--;
|
|
}
|
|
};
|
|
|
|
#endif // GARLAND_SUPPORT
|