pitrix/src/effect_cycle.cpp

42 lines
1.0 KiB
C++

#include "effect_cycle.h"
void CycleEffect::changeEffect() {
Effect* new_effect;
do {
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();
};
boolean CycleEffect::clock_as_mask() {
return effect->clock_as_mask();
};
void CycleEffect::loop() {
if (!effect) changeEffect(); // If this is the first run, we have to select an effect first!
effect->loop();
// Don't use EVERY_N_SECONDS(config_effect_cycle_time) here because that function isn't relly made
// to be used with changing values.
EVERY_N_SECONDS(1) {
if (effectSince + EFFECT_CYCLE_TIME*1000 < millis()) {
changeEffect();
}
}
}