diff options
author | Bad Diode <bd@badd10de.dev> | 2021-05-10 21:32:51 +0200 |
---|---|---|
committer | Bad Diode <bd@badd10de.dev> | 2021-05-10 21:32:51 +0200 |
commit | c3045883260e0e1ba06f9d965487e21cdb47392b (patch) | |
tree | 3b6c934c8cb807281f91d739fcf81702828c3651 | |
parent | b097231d0cf6abfa716113dc157017cf256621ac (diff) | |
download | gba-experiments-c3045883260e0e1ba06f9d965487e21cdb47392b.tar.gz gba-experiments-c3045883260e0e1ba06f9d965487e21cdb47392b.zip |
Remove some code duplication
-rw-r--r-- | src/sequencer.c | 77 |
1 files 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) { | |||
1222 | } | 1222 | } |
1223 | 1223 | ||
1224 | // Adjust the parameters up or down. | 1224 | // Adjust the parameters up or down. |
1225 | if (key_pressed(KEY_L)) { | 1225 | if (key_pressed(KEY_L) || key_pressed(KEY_R)) { |
1226 | int inc; | ||
1227 | if (key_pressed(KEY_L)) { | ||
1228 | inc = -1; | ||
1229 | } else { | ||
1230 | inc = 1; | ||
1231 | } | ||
1226 | switch (param_selection_loc) { | 1232 | switch (param_selection_loc) { |
1227 | case 0: { | 1233 | case 0: { |
1228 | trig->env_volume = MAX(trig->env_volume - 1, 0); | 1234 | trig->env_volume = CLAMP(trig->env_volume + inc, 0, 15); |
1229 | } break; | 1235 | } break; |
1230 | case 1: { | 1236 | case 1: { |
1231 | trig->env_time = MAX(trig->env_time - 1, 0); | 1237 | trig->env_time = CLAMP(trig->env_time + inc, 0, 7); |
1232 | } break; | 1238 | } break; |
1233 | case 2: { | 1239 | case 2: { |
1234 | trig->env_direction ^= 1; | 1240 | trig->env_direction ^= 1; |
1235 | } break; | 1241 | } break; |
1236 | case 3: { | 1242 | case 3: { |
1237 | trig->duty_cycle = MAX(trig->duty_cycle - 1, 0); | 1243 | trig->duty_cycle = CLAMP(trig->duty_cycle + inc, 0, 3); |
1238 | } break; | 1244 | } break; |
1239 | case 4: { | 1245 | case 4: { |
1240 | trig->sweep_number = MAX(trig->sweep_number - 1, 0); | 1246 | trig->sweep_number = CLAMP(trig->sweep_number + inc, 0, 7); |
1241 | } break; | 1247 | } break; |
1242 | case 5: { | 1248 | case 5: { |
1243 | trig->sweep_time = MAX(trig->sweep_time - 1, 0); | 1249 | trig->sweep_time = CLAMP(trig->sweep_time + inc, 0, 7); |
1244 | } break; | 1250 | } break; |
1245 | case 6: { | 1251 | case 6: { |
1246 | if (trig->sweep_direction == 0) { | 1252 | if (trig->sweep_direction == 0) { |
@@ -1251,71 +1257,46 @@ handle_sequencer_input(void) { | |||
1251 | } break; | 1257 | } break; |
1252 | } | 1258 | } |
1253 | } | 1259 | } |
1254 | if (key_pressed(KEY_R)) { | ||
1255 | switch (param_selection_loc) { | ||
1256 | case 0: { | ||
1257 | trig->env_volume = MIN(trig->env_volume + 1, 15); | ||
1258 | } break; | ||
1259 | case 1: { | ||
1260 | trig->env_time = MIN(trig->env_time + 1, 7); | ||
1261 | } break; | ||
1262 | case 2: { | ||
1263 | trig->env_direction ^= 1; | ||
1264 | } break; | ||
1265 | case 3: { | ||
1266 | trig->duty_cycle = MIN(trig->duty_cycle + 1, 3); | ||
1267 | } break; | ||
1268 | case 4: { | ||
1269 | trig->sweep_number = MIN(trig->sweep_number + 1, 7); | ||
1270 | } break; | ||
1271 | case 5: { | ||
1272 | trig->sweep_time = MIN(trig->sweep_time + 1, 7); | ||
1273 | } break; | ||
1274 | case 6: { | ||
1275 | trig->sweep_direction ^= 1; | ||
1276 | } break; | ||
1277 | } | ||
1278 | } | ||
1279 | } else if (channel_selection_loc == 2) { | 1260 | } else if (channel_selection_loc == 2) { |
1280 | if (key_pressed(KEY_LEFT) || key_pressed(KEY_RIGHT)) { | 1261 | if (key_pressed(KEY_LEFT) || key_pressed(KEY_RIGHT)) { |
1281 | int increment = 0; | 1262 | int inc = 0; |
1282 | int loc = param_selection_loc; | 1263 | int loc = param_selection_loc; |
1283 | if (key_pressed(KEY_RIGHT)) { | 1264 | if (key_pressed(KEY_RIGHT)) { |
1284 | if (loc == 15 || loc == 32) { | 1265 | if (loc == 15 || loc == 32) { |
1285 | increment = 17; | 1266 | inc = 17; |
1286 | } else if (loc != 47){ | 1267 | } else if (loc != 47){ |
1287 | increment = 1; | 1268 | inc = 1; |
1288 | } | 1269 | } |
1289 | } else { | 1270 | } else { |
1290 | if (loc == 32 || loc == 48) { | 1271 | if (loc == 32 || loc == 48) { |
1291 | increment = -17; | 1272 | inc = -17; |
1292 | } else if (loc != 16){ | 1273 | } else if (loc != 16){ |
1293 | increment = -1; | 1274 | inc = -1; |
1294 | } | 1275 | } |
1295 | } | 1276 | } |
1296 | param_selection_loc = CLAMP(loc + increment, 0, 63); | 1277 | param_selection_loc = CLAMP(loc + inc, 0, 63); |
1297 | } | 1278 | } |
1298 | if (key_pressed(KEY_UP) || key_pressed(KEY_DOWN)) { | 1279 | if (key_pressed(KEY_UP) || key_pressed(KEY_DOWN)) { |
1299 | int increment = 0; | 1280 | int inc = 0; |
1300 | int loc = param_selection_loc; | 1281 | int loc = param_selection_loc; |
1301 | if (key_pressed(KEY_UP)) { | 1282 | if (key_pressed(KEY_UP)) { |
1302 | if ((loc >= 16 && loc < 32) || (loc >= 48)) { | 1283 | if ((loc >= 16 && loc < 32) || (loc >= 48)) { |
1303 | increment = -16; | 1284 | inc = -16; |
1304 | } | 1285 | } |
1305 | } else { | 1286 | } else { |
1306 | if (loc < 16 || (loc >= 32 && loc < 48)) { | 1287 | if (loc < 16 || (loc >= 32 && loc < 48)) { |
1307 | increment = 16; | 1288 | inc = 16; |
1308 | } | 1289 | } |
1309 | } | 1290 | } |
1310 | param_selection_loc = CLAMP(loc + increment, 0, 63); | 1291 | param_selection_loc = CLAMP(loc + inc, 0, 63); |
1311 | } | 1292 | } |
1312 | if (key_pressed(KEY_R) || key_pressed(KEY_L)) { | 1293 | if (key_pressed(KEY_R) || key_pressed(KEY_L)) { |
1313 | int odd = param_selection_loc & 0x1; | 1294 | int odd = param_selection_loc & 0x1; |
1314 | int increment; | 1295 | int inc; |
1315 | if (key_pressed(KEY_R)) { | 1296 | if (key_pressed(KEY_R)) { |
1316 | increment = 1; | 1297 | inc = 1; |
1317 | } else { | 1298 | } else { |
1318 | increment = -1; | 1299 | inc = -1; |
1319 | } | 1300 | } |
1320 | // Wave: AA BB CC DD ... | 1301 | // Wave: AA BB CC DD ... |
1321 | // ^^ | 1302 | // ^^ |
@@ -1325,18 +1306,18 @@ handle_sequencer_input(void) { | |||
1325 | u8 byte_number = param_selection_loc >> 1; | 1306 | u8 byte_number = param_selection_loc >> 1; |
1326 | u8 byte = sequences[2][trig_selection_loc].wave_a[byte_number]; | 1307 | u8 byte = sequences[2][trig_selection_loc].wave_a[byte_number]; |
1327 | if (odd) { | 1308 | if (odd) { |
1328 | byte = (~0xF & byte) | ((byte + increment) & 0xF); | 1309 | byte = (~0xF & byte) | ((byte + inc) & 0xF); |
1329 | } else { | 1310 | } else { |
1330 | byte = (0xF & byte) | (((byte >> 4) + increment) & 0xF) << 4; | 1311 | byte = (0xF & byte) | (((byte >> 4) + inc) & 0xF) << 4; |
1331 | } | 1312 | } |
1332 | sequences[2][trig_selection_loc].wave_a[byte_number] = byte; | 1313 | sequences[2][trig_selection_loc].wave_a[byte_number] = byte; |
1333 | } else { | 1314 | } else { |
1334 | u8 byte_number = (param_selection_loc - 32) >> 1; | 1315 | u8 byte_number = (param_selection_loc - 32) >> 1; |
1335 | u8 byte = sequences[2][trig_selection_loc].wave_b[byte_number]; | 1316 | u8 byte = sequences[2][trig_selection_loc].wave_b[byte_number]; |
1336 | if (odd) { | 1317 | if (odd) { |
1337 | byte = (~0xF & byte) | (byte + increment); | 1318 | byte = (~0xF & byte) | (byte + inc); |
1338 | } else { | 1319 | } else { |
1339 | byte = (0xF & byte) | ((byte >> 4) + increment) << 4; | 1320 | byte = (0xF & byte) | ((byte >> 4) + inc) << 4; |
1340 | } | 1321 | } |
1341 | sequences[2][trig_selection_loc].wave_b[byte_number] = byte; | 1322 | sequences[2][trig_selection_loc].wave_b[byte_number] = byte; |
1342 | } | 1323 | } |