#include "effect_cycle.h" void CycleEffect::changeEffect() { int new_id; if (EFFECT_CYCLE_RANDOM) { do { new_id = random8(cycle_effects->size()); } while (new_id == effect_id); } else { new_id = (effect_id + 1) % cycle_effects->size(); } 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(); 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(); }; 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(); } } }