Added `Effect::start()` and `Effect::stop()` to allow effects to reserve memory on start and free it afterwards.

This commit is contained in:
Fabian Schlenz 2019-05-31 05:46:17 +02:00
parent a2fe1461ad
commit a7d956209a
5 changed files with 19 additions and 0 deletions

View File

@ -16,6 +16,8 @@ class Effect {
void setWindow(Window win) {
window = win;
};
virtual void start() {}
virtual void stop() {}
};
#endif

View File

@ -10,6 +10,8 @@ class CycleEffect : public Effect {
unsigned long effectSince = 0;
public:
void changeEffect();
void start();
void stop();
boolean can_be_shown_with_clock();
boolean clock_as_mask();

View File

@ -6,10 +6,21 @@ void CycleEffect::changeEffect() {
int new_id = random8(cycle_effects->size());
new_effect = cycle_effects->get(new_id);
} while (&new_effect == &effect);
if (effect) effect->stop();
effect = new_effect;
effect->start();
effectSince = millis();
}
void CycleEffect::start() {
if (!effect) changeEffect();
else effect->start();
}
void CycleEffect::stop() {
if (effect) effect->stop();
}
boolean CycleEffect::can_be_shown_with_clock() {
return effect->can_be_shown_with_clock();
};

View File

@ -22,7 +22,9 @@ void mqtt_callback(char* complete_topic, byte* pl, unsigned int length) {
EffectEntry e = effects->get(i);
if (strcmp(e.name, payload)==0) {
//Serial.printf("Effect found in mqtt_callback: %p\n", (void *)&e->effect);
current_effect->stop();
current_effect = e.effect;
current_effect->start();
clear();
return;
}

View File

@ -31,6 +31,8 @@ void setup() {
ntpClient.begin();
mqtt_setup();
LOGln("Core * Setup complete");
current_effect->start();
}
void loop() {