From c3045883260e0e1ba06f9d965487e21cdb47392b Mon Sep 17 00:00:00 2001 From: Bad Diode Date: Mon, 10 May 2021 21:32:51 +0200 Subject: Remove some code duplication --- src/sequencer.c | 77 ++++++++++++++++++++++----------------------------------- 1 file changed, 29 insertions(+), 48 deletions(-) diff --git a/src/sequencer.c b/src/sequencer.c index f70b1a3..fa44eae 100644 --- a/src/sequencer.c +++ b/src/sequencer.c @@ -1222,25 +1222,31 @@ handle_sequencer_input(void) { } // Adjust the parameters up or down. - if (key_pressed(KEY_L)) { + if (key_pressed(KEY_L) || key_pressed(KEY_R)) { + int inc; + if (key_pressed(KEY_L)) { + inc = -1; + } else { + inc = 1; + } switch (param_selection_loc) { case 0: { - trig->env_volume = MAX(trig->env_volume - 1, 0); + trig->env_volume = CLAMP(trig->env_volume + inc, 0, 15); } break; case 1: { - trig->env_time = MAX(trig->env_time - 1, 0); + trig->env_time = CLAMP(trig->env_time + inc, 0, 7); } break; case 2: { trig->env_direction ^= 1; } break; case 3: { - trig->duty_cycle = MAX(trig->duty_cycle - 1, 0); + trig->duty_cycle = CLAMP(trig->duty_cycle + inc, 0, 3); } break; case 4: { - trig->sweep_number = MAX(trig->sweep_number - 1, 0); + trig->sweep_number = CLAMP(trig->sweep_number + inc, 0, 7); } break; case 5: { - trig->sweep_time = MAX(trig->sweep_time - 1, 0); + trig->sweep_time = CLAMP(trig->sweep_time + inc, 0, 7); } break; case 6: { if (trig->sweep_direction == 0) { @@ -1251,71 +1257,46 @@ handle_sequencer_input(void) { } break; } } - if (key_pressed(KEY_R)) { - switch (param_selection_loc) { - case 0: { - trig->env_volume = MIN(trig->env_volume + 1, 15); - } break; - case 1: { - trig->env_time = MIN(trig->env_time + 1, 7); - } break; - case 2: { - trig->env_direction ^= 1; - } break; - case 3: { - trig->duty_cycle = MIN(trig->duty_cycle + 1, 3); - } break; - case 4: { - trig->sweep_number = MIN(trig->sweep_number + 1, 7); - } break; - case 5: { - trig->sweep_time = MIN(trig->sweep_time + 1, 7); - } break; - case 6: { - trig->sweep_direction ^= 1; - } break; - } - } } else if (channel_selection_loc == 2) { if (key_pressed(KEY_LEFT) || key_pressed(KEY_RIGHT)) { - int increment = 0; + int inc = 0; int loc = param_selection_loc; if (key_pressed(KEY_RIGHT)) { if (loc == 15 || loc == 32) { - increment = 17; + inc = 17; } else if (loc != 47){ - increment = 1; + inc = 1; } } else { if (loc == 32 || loc == 48) { - increment = -17; + inc = -17; } else if (loc != 16){ - increment = -1; + inc = -1; } } - param_selection_loc = CLAMP(loc + increment, 0, 63); + param_selection_loc = CLAMP(loc + inc, 0, 63); } if (key_pressed(KEY_UP) || key_pressed(KEY_DOWN)) { - int increment = 0; + int inc = 0; int loc = param_selection_loc; if (key_pressed(KEY_UP)) { if ((loc >= 16 && loc < 32) || (loc >= 48)) { - increment = -16; + inc = -16; } } else { if (loc < 16 || (loc >= 32 && loc < 48)) { - increment = 16; + inc = 16; } } - param_selection_loc = CLAMP(loc + increment, 0, 63); + param_selection_loc = CLAMP(loc + inc, 0, 63); } if (key_pressed(KEY_R) || key_pressed(KEY_L)) { int odd = param_selection_loc & 0x1; - int increment; + int inc; if (key_pressed(KEY_R)) { - increment = 1; + inc = 1; } else { - increment = -1; + inc = -1; } // Wave: AA BB CC DD ... // ^^ @@ -1325,18 +1306,18 @@ handle_sequencer_input(void) { u8 byte_number = param_selection_loc >> 1; u8 byte = sequences[2][trig_selection_loc].wave_a[byte_number]; if (odd) { - byte = (~0xF & byte) | ((byte + increment) & 0xF); + byte = (~0xF & byte) | ((byte + inc) & 0xF); } else { - byte = (0xF & byte) | (((byte >> 4) + increment) & 0xF) << 4; + byte = (0xF & byte) | (((byte >> 4) + inc) & 0xF) << 4; } sequences[2][trig_selection_loc].wave_a[byte_number] = byte; } else { u8 byte_number = (param_selection_loc - 32) >> 1; u8 byte = sequences[2][trig_selection_loc].wave_b[byte_number]; if (odd) { - byte = (~0xF & byte) | (byte + increment); + byte = (~0xF & byte) | (byte + inc); } else { - byte = (0xF & byte) | ((byte >> 4) + increment) << 4; + byte = (0xF & byte) | ((byte >> 4) + inc) << 4; } sequences[2][trig_selection_loc].wave_b[byte_number] = byte; } -- cgit v1.2.1