summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBad Diode <bd@badd10de.dev>2021-05-10 21:32:51 +0200
committerBad Diode <bd@badd10de.dev>2021-05-10 21:32:51 +0200
commitc3045883260e0e1ba06f9d965487e21cdb47392b (patch)
tree3b6c934c8cb807281f91d739fcf81702828c3651
parentb097231d0cf6abfa716113dc157017cf256621ac (diff)
downloadgba-experiments-c3045883260e0e1ba06f9d965487e21cdb47392b.tar.gz
gba-experiments-c3045883260e0e1ba06f9d965487e21cdb47392b.zip
Remove some code duplication
-rw-r--r--src/sequencer.c77
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 }