Added AnimationEffect::Blinker to quickly create a blinking sprite effect from an image file.
This commit is contained in:
parent
402d7f5d75
commit
1707084299
@ -11,12 +11,14 @@ private:
|
||||
const char* name;
|
||||
uint16_t xOffset;
|
||||
uint16_t yOffset;
|
||||
unsigned long _last_blink_at;
|
||||
uint16_t _blink_freq;
|
||||
public:
|
||||
AnimationEffect(const char* name) : AnimationEffect(name, 0x000000, 0, 0) {}
|
||||
AnimationEffect(const char* name, uint32_t bg_color) : AnimationEffect(name, bg_color, 0, 0) {}
|
||||
AnimationEffect(const char* name, uint32_t bg_color, int x, int y);
|
||||
AnimationEffect(const char* name, uint32_t bg_color=0x000000, int x=0, int y=0);
|
||||
static AnimationEffect* Blinker(const char* name, uint16_t interval, uint32_t color, uint32_t background_color=0x000000);
|
||||
~AnimationEffect();
|
||||
AnimationEffect* setFgColor(uint32_t c);
|
||||
AnimationEffect* setBlinkFrequency(uint16_t);
|
||||
void loop(uint16_t ms);
|
||||
String get_name() override;
|
||||
};
|
||||
|
@ -9,6 +9,8 @@ AnimationEffect::AnimationEffect(const char* name, uint32_t bg, int x, int y) {
|
||||
this->animation = new Animation(name, window);
|
||||
this->animation->setBgColor(bg);
|
||||
this->animation->setOffsets(this->xOffset, this->yOffset);
|
||||
|
||||
_last_blink_at = millis();
|
||||
}
|
||||
|
||||
AnimationEffect* AnimationEffect::setFgColor(uint32_t c) {
|
||||
@ -16,11 +18,23 @@ AnimationEffect* AnimationEffect::setFgColor(uint32_t c) {
|
||||
return this;
|
||||
}
|
||||
|
||||
AnimationEffect* AnimationEffect::setBlinkFrequency(uint16_t ms) {
|
||||
_blink_freq = ms;
|
||||
return this;
|
||||
}
|
||||
|
||||
AnimationEffect::~AnimationEffect() {
|
||||
delete this->animation;
|
||||
}
|
||||
|
||||
void AnimationEffect::loop(uint16_t ms) {
|
||||
if (_blink_freq > 0) {
|
||||
unsigned long mil = millis();
|
||||
if (mil < _last_blink_at || _last_blink_at + _blink_freq <= mil) {
|
||||
this->animation->invert();
|
||||
_last_blink_at = mil;
|
||||
}
|
||||
}
|
||||
this->animation->drawFrame();
|
||||
this->animation->advance();
|
||||
}
|
||||
@ -30,3 +44,10 @@ String AnimationEffect::get_name() {
|
||||
s += this->name;
|
||||
return s;
|
||||
}
|
||||
|
||||
AnimationEffect* AnimationEffect::Blinker(const char* name, uint16_t interval, uint32_t color, uint32_t background_color) {
|
||||
AnimationEffect* anim = new AnimationEffect(name, background_color);
|
||||
anim->setFgColor(color);
|
||||
anim->setBlinkFrequency(interval);
|
||||
return anim;
|
||||
}
|
||||
|
@ -31,11 +31,11 @@ ClockEffect effect_clock;
|
||||
TimerEffect effect_timer;
|
||||
|
||||
// We're using 0 instead of false to get a better visual difference between true and false.
|
||||
const EffectEntry effects[] = {
|
||||
EffectEntry effects[] = {
|
||||
/* 0 */ {"sinematrix3", true, [](){ return new Sinematrix3Effect(); }},
|
||||
/* 1 */ {"big_clock", true, [](){ return new BigClockEffect(); }},
|
||||
/* 2 */ {"clock", 0, [](){ return new ClockEffect(); }},
|
||||
/* 3 */ {"bell", 0, [](){ return new BellEffect(); }},
|
||||
/* 3 */ {"bell", 0, [](){ return AnimationEffect::Blinker("/bell.pia", 300, 0xFFFF00); }},
|
||||
/* 4 */ {"off", 0, [](){ return new StaticEffect(0x000000); }},
|
||||
/* 5 */ {"single_dynamic", true, [](){ return new SingleDynamicEffect(); }},
|
||||
/* 6 */ {"multi_dynamic", true, [](){ return new MultiDynamicEffect(); }},
|
||||
|
Loading…
Reference in New Issue
Block a user