From 52bdd0d79c77df0a7752fd15ebcc730f9e9796b1 Mon Sep 17 00:00:00 2001 From: Bad Diode Date: Sun, 28 May 2023 19:17:48 +0200 Subject: Refactor settings into own files --- src/globals.c | 9 +++++ src/main.c | 114 ++------------------------------------------------------ src/save.c | 17 ++++----- src/save.h | 21 +++++++++++ src/sequencer.c | 7 ++-- src/settings.c | 63 +++++++++++++++++++++++++++++++ src/settings.h | 44 ++++++++++++++++++++++ 7 files changed, 152 insertions(+), 123 deletions(-) create mode 100644 src/save.h create mode 100644 src/settings.c create mode 100644 src/settings.h diff --git a/src/globals.c b/src/globals.c index 8ce79d5..60e64e7 100644 --- a/src/globals.c +++ b/src/globals.c @@ -17,6 +17,7 @@ u32 last_channel_loc = 0; u32 last_pattern_loc = 0; u32 last_right_col_loc = 0; u32 last_step_counter = 0; +bool clear_screen = false; // // Color indexes. @@ -113,3 +114,11 @@ void handle_param_selection_ch1(void); void handle_param_selection_ch2(void); void handle_param_selection_ch3(void); void handle_param_selection_ch4(void); + +typedef enum Scene { + SCENE_SEQUENCER = 0, + SCENE_SETTINGS, +} Scene; + +static Scene scene = SCENE_SETTINGS; +static Scene next_scene = SCENE_SETTINGS; diff --git a/src/main.c b/src/main.c index b2d7a23..4a4f265 100644 --- a/src/main.c +++ b/src/main.c @@ -55,6 +55,8 @@ WITH REGARD TO THIS SOFTWARE. #include "gba/gba.h" #include "renderer_m0.c" +#include "globals.c" +#include "settings.c" #include "sequencer.c" #define PROF_ENABLE 0 @@ -99,65 +101,6 @@ render_sequencer(void) { PROF(draw_cursors(), draw_cursor_cycles); } -bool clear_screen = false; - -typedef enum Scene { - SCENE_SEQUENCER = 0, - SCENE_SETTINGS, -} Scene; - -static scene = SCENE_SETTINGS; -static next_scene = SCENE_SETTINGS; - -typedef enum SyncSetting { - SYNC_NONE = 0, - SYNC_OUT_LINK_16, - SYNC_OUT_LINK_8, - SYNC_OUT_LINK_4, - SYNC_NUM, -} SyncSetting; - -char * sync_setting_str[] = { - "NONE", - "LINK OUT (16)", - "LINK OUT (8)", - "LINK OUT (4)", -}; - -typedef enum ThemeSetting { - THEME_DEFAULT = 0, -} ThemeSetting; - -char * theme_setting_str[] = { - "DEFAULT", -}; - -typedef enum CursorSetting { - CURSOR_DEFAULT = 0, -} CursorSetting; - -char * cursor_setting_str[] = { - "LINE", -}; - -typedef struct Settings { - SyncSetting sync; - ThemeSetting theme; - CursorSetting cursor; -} Settings; - -static Settings settings = {0}; -static settings_cursor_loc = 0; - -void -draw_settings_cursor(void) { - int x = 6; - int y = 17 + settings_cursor_loc * 12; - draw_line(x + 1, y + 3, x + 1, y + 7, COL_CYAN); - draw_line(x + 2, y + 4, x + 2, y + 6, COL_CYAN); - draw_line(x + 3, y + 5, x + 3, y + 5, COL_CYAN); -} - void render_settings(void) { PROF(draw_rect(0, 0, SCREEN_WIDTH - 1, SCREEN_HEIGHT - 1, 1), clear_cycles); @@ -168,62 +111,13 @@ render_settings(void) { txt_printf(" CURSOR: %s\n\n", cursor_setting_str[settings.cursor]); txt_render(); txt_clear(); - draw_settings_cursor(); -} - -#define N_SETTINGS 3 - -void -handle_settings_input(void) { - if (key_tap(KEY_DOWN)) { - if (settings_cursor_loc == (N_SETTINGS - 1)) { - settings_cursor_loc = 0; - } else { - settings_cursor_loc++; - } - clear_screen = true; - } - if (key_tap(KEY_UP)) { - if (settings_cursor_loc == 0) { - settings_cursor_loc = N_SETTINGS - 1; - } else { - settings_cursor_loc--; - } - clear_screen = true; - } - if (key_tap(KEY_R)) { - switch (settings_cursor_loc) { - case 0: { - if ((settings.sync + 1) >= SYNC_NUM) { - settings.sync = 0; - } else { - settings.sync++; - } - } break; - } - clear_screen = true; - } - if (key_tap(KEY_L)) { - switch (settings_cursor_loc) { - case 0: { - if (settings.sync == 0) { - settings.sync = SYNC_NUM - 1; - } else { - settings.sync--; - } - } break; - } - clear_screen = true; - } - if (key_tap(KEY_B)) { - next_scene = SCENE_SEQUENCER; - } + PROF(draw_settings_cursor(), draw_cursor_cycles); } void render(void) { if (clear_screen) { - screen_fill(COL_BG); + PROF(screen_fill(COL_BG), clear_cycles); clear_screen = false; } switch (scene) { diff --git a/src/save.c b/src/save.c index 1722e9d..4b285ad 100644 --- a/src/save.c +++ b/src/save.c @@ -1,17 +1,9 @@ +#include "save.h" + // // Save data. // -#define SRAM ((vu8*)(MEM_CART)) -#define SAVE_INIT_MAGIC 0xBADD10DE - -typedef struct Metadata { - u8 blank; - u32 initialized; - int current_bank; - int current_pattern; -} Metadata; - static Metadata metadata = {0}; void @@ -38,3 +30,8 @@ load_bank(int i) { sram_read(&patterns, sizeof(Metadata) + i * sizeof(patterns), sizeof(patterns)); } +void +save_metadata(void) { + metadata.settings = settings; + sram_write(&metadata, 0, sizeof(Metadata)); +} diff --git a/src/save.h b/src/save.h new file mode 100644 index 0000000..ccc190b --- /dev/null +++ b/src/save.h @@ -0,0 +1,21 @@ +#ifndef SAVE_H +#define SAVE_H + +#include "settings.h" + +#define SRAM ((vu8*)(MEM_CART)) +#define SAVE_INIT_MAGIC 0xBADD10DE + +typedef struct Metadata { + u8 blank; + u32 initialized; + int current_bank; + int current_pattern; + Settings settings; +} Metadata; + +void save_bank(int i); +void load_bank(int i); +void save_metadata(void); + +#endif // SAVE_H diff --git a/src/sequencer.c b/src/sequencer.c index 7c989f2..44ec7bb 100644 --- a/src/sequencer.c +++ b/src/sequencer.c @@ -1,4 +1,3 @@ -#include "globals.c" #include "rng.c" #include "text.h" #include "assets.c" @@ -346,7 +345,7 @@ select_bank(int i) { save_bank(current_bank); metadata.current_pattern = current_pattern; metadata.current_bank = i; - sram_write(&metadata, 0, sizeof(Metadata)); + save_metadata(); if (current_bank != i) { load_bank(i); } @@ -965,6 +964,7 @@ handle_sequencer_input(void) { if (key_tap(KEY_START)) { if (key_hold(KEY_SELECT)) { save_bank(current_bank); + save_metadata(); return; } // Stop the sequencer or start playing from the beginning. @@ -992,7 +992,7 @@ sequencer_init(void) { } dma_fill(&metadata, 0, sizeof(Metadata), 3); metadata.initialized = SAVE_INIT_MAGIC; - sram_write(&metadata, 0, sizeof(Metadata)); + save_metadata(); save_bank(0); save_bank(1); save_bank(2); @@ -1002,6 +1002,7 @@ sequencer_init(void) { current_pattern = metadata.current_pattern; next_pattern = metadata.current_pattern; pattern_selection_loc = current_pattern; + settings = metadata.settings; load_bank(metadata.current_bank); } diff --git a/src/settings.c b/src/settings.c new file mode 100644 index 0000000..fd5b090 --- /dev/null +++ b/src/settings.c @@ -0,0 +1,63 @@ +#include "settings.h" +#include "save.h" + +static Settings settings = {0}; +static int settings_cursor_loc = 0; + +void +draw_settings_cursor(void) { + int x = 6; + int y = 17 + settings_cursor_loc * 12; + draw_line(x + 1, y + 3, x + 1, y + 7, COL_CYAN); + draw_line(x + 2, y + 4, x + 2, y + 6, COL_CYAN); + draw_line(x + 3, y + 5, x + 3, y + 5, COL_CYAN); +} + +void +handle_settings_input(void) { + if (key_tap(KEY_DOWN)) { + if (settings_cursor_loc == (N_SETTINGS - 1)) { + settings_cursor_loc = 0; + } else { + settings_cursor_loc++; + } + clear_screen = true; + } + if (key_tap(KEY_UP)) { + if (settings_cursor_loc == 0) { + settings_cursor_loc = N_SETTINGS - 1; + } else { + settings_cursor_loc--; + } + clear_screen = true; + } + if (key_tap(KEY_R)) { + switch (settings_cursor_loc) { + case 0: { + if ((settings.sync + 1) >= SYNC_NUM) { + settings.sync = 0; + } else { + settings.sync++; + } + } break; + } + save_metadata(); + clear_screen = true; + } + if (key_tap(KEY_L)) { + switch (settings_cursor_loc) { + case 0: { + if (settings.sync == 0) { + settings.sync = SYNC_NUM - 1; + } else { + settings.sync--; + } + } break; + } + save_metadata(); + clear_screen = true; + } + if (key_tap(KEY_B)) { + next_scene = SCENE_SEQUENCER; + } +} diff --git a/src/settings.h b/src/settings.h new file mode 100644 index 0000000..db46144 --- /dev/null +++ b/src/settings.h @@ -0,0 +1,44 @@ +#ifndef SETTINGS_H +#define SETTINGS_H + +#define N_SETTINGS 3 + +typedef enum SyncSetting { + SYNC_NONE = 0, + SYNC_OUT_LINK_16, + SYNC_OUT_LINK_8, + SYNC_OUT_LINK_4, + SYNC_NUM, +} SyncSetting; + +char * sync_setting_str[] = { + "NONE", + "LINK OUT (16)", + "LINK OUT (8)", + "LINK OUT (4)", +}; + +typedef enum ThemeSetting { + THEME_DEFAULT = 0, +} ThemeSetting; + +char * theme_setting_str[] = { + "DEFAULT", +}; + +typedef enum CursorSetting { + CURSOR_DEFAULT = 0, +} CursorSetting; + +char * cursor_setting_str[] = { + "LINE", +}; + +typedef struct Settings { + SyncSetting sync; + ThemeSetting theme; + CursorSetting cursor; +} Settings; + + +#endif // SETTINGS_H -- cgit v1.2.1