Effects are now constructed when needed instead of having global objects of every effect flying around.
This commit is contained in:
@ -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();
|
||||
};
|
||||
|
Reference in New Issue
Block a user