Effects are now constructed when needed instead of having global objects of every effect flying around.

This commit is contained in:
2019-06-18 18:14:59 +02:00
parent 5a02050680
commit 0941ad8349
4 changed files with 66 additions and 95 deletions

View File

@ -1,32 +1,33 @@
#include "effect_cycle.h"
#include "effects.h"
CycleEffect::CycleEffect() {
changeEffect();
}
CycleEffect::~CycleEffect() {
delete effect;
}
void CycleEffect::changeEffect() {
int new_id;
if (EFFECT_CYCLE_RANDOM) {
do {
new_id = random8(cycle_effects->size());
new_id = random8(cycle_effects_count);
} while (new_id == effect_id);
} else {
new_id = (effect_id + 1) % cycle_effects->size();
new_id = (effect_id + 1) % cycle_effects_count;
}
LOG("CycleEffect * Changing effect from #"); LOG(effect_id); LOG(" to #"); LOGln(new_id);
if (effect) effect->stop();
effect = cycle_effects->get(new_id);
effect->start();
LOGln("CycleEffect * Changing effect from #%d to #%d", effect_id, new_id);
delay(25);
if (effect) delete effect;
LOGln("CycleEffect * Searching for new effect '%s'", cycle_effects[new_id]);
delay(25);
effect = string_to_effect(cycle_effects[new_id]);
effect_id = new_id;
effectSince = millis();
}
void CycleEffect::start() {
if (!effect) changeEffect();
else effect->start();
}
void CycleEffect::stop() {
effect_id = -1;
if (effect) effect->stop();
}
boolean CycleEffect::can_be_shown_with_clock() {
return effect->can_be_shown_with_clock();
};