#include "effect_cycle.h" #include "effects.h" #include CycleEffect::CycleEffect() { changeEffect(); } CycleEffect::~CycleEffect() { delete effect; } void CycleEffect::changeEffect() { int new_id; if (EFFECT_CYCLE_RANDOM) { do { new_id = random8(cycle_effects_count); } while (new_id == effect_id); } else { new_id = (effect_id + 1) % cycle_effects_count; } 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 = select_effect( crc32String(cycle_effects[new_id]) ); if (effect) { effect_id = new_id; effectSince = millis(); LOGln("CycleEffect * Effect %s found", effect->get_name().c_str()); } else { LOGln("CycleEffect * Effect NOT found"); } } 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(uint16_t ms) { if (!effect) changeEffect(); // If this is the first run, we have to select an effect first! effect->loop(ms); // 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(); } } } String CycleEffect::get_name() { String s = "cycle/"; s += effect->get_name(); return s; }