Reorganized effect selection stuff: No longer a big case clause comparing CRC32. Instead an array of structs. Much nicer. Also, other code can now see which effects there are.
This commit is contained in:
@ -3,6 +3,11 @@
|
||||
#include <ErriezCRC32.h>
|
||||
|
||||
CycleEffect::CycleEffect() {
|
||||
_effects_count = 0;
|
||||
for (uint8_t i=0; i<effects_size; i++) {
|
||||
if (effects[i].use_in_cycle) _effects_count++;
|
||||
}
|
||||
LOGln("Cycle * Found %d effects to use in cycle.", _effects_count);
|
||||
changeEffect();
|
||||
}
|
||||
|
||||
@ -14,17 +19,28 @@ void CycleEffect::changeEffect() {
|
||||
uint8_t new_id;
|
||||
if (settings.effects.cycle.random && _effects_count>1) {
|
||||
do {
|
||||
new_id = random8(cycle_effects_count);
|
||||
new_id = random8(_effects_count);
|
||||
} while (new_id == effect_id);
|
||||
} else {
|
||||
new_id = (effect_id + 1) % cycle_effects_count;
|
||||
new_id = (effect_id + 1) % _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]) );
|
||||
LOGln("CycleEffect * Searching for new effect #%d", new_id);
|
||||
for (uint8_t i=0; i<effects_size; i++) {
|
||||
if (effects[i].use_in_cycle) {
|
||||
if (new_id == 0) {
|
||||
effect = effects[i].create();
|
||||
break;
|
||||
} else {
|
||||
new_id--;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (effect) {
|
||||
effect_id = new_id;
|
||||
effectSince = millis();
|
||||
@ -47,7 +63,7 @@ void CycleEffect::loop(uint16_t 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()) {
|
||||
if (effectSince + settings.effects.cycle.time*1000 < millis()) {
|
||||
changeEffect();
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user