diff options
author | Nicholas Tay <nick@windblume.net> | 2023-08-15 20:45:39 +1000 |
---|---|---|
committer | Nicholas Tay <nick@windblume.net> | 2023-08-15 20:45:39 +1000 |
commit | a689ba41dadad0093f7545dd8999d41a165ceb98 (patch) | |
tree | ffb517c40ac8a750554eba610574008cfb45d27b /clak.c | |
parent | 7d2f0751d0043a4f5ac0c1a6118622202e4e9e47 (diff) | |
download | clak-plugin-refactor.tar.gz clak-plugin-refactor.tar.bz2 clak-plugin-refactor.zip |
Initial refactor of plugin system (darwin only)plugin-refactor
Darwin only for now since that's what I'm on, will migrate the others a
bit later. Trying out a different plugin system that probably makes more
sense as an interface to each other. Might shuffle things around even
more later.
This is based somewhat on Tsoding's audio visualiser plugin system, I
thought that was way more elegant (the 'state' object), as opposed to
whatever the hell we were doing.
Diffstat (limited to '')
-rw-r--r-- | clak.c | 19 |
1 files changed, 12 insertions, 7 deletions
@@ -9,7 +9,7 @@ #define VOLUME 0.15 -struct board *board = NULL; +struct board_state state = {0}; void do_exit(int code) { @@ -21,14 +21,14 @@ void on_clean_exit(void) { do_exit(0); } void keyboard_on_down(void) { - assert(board != NULL); - board->on_down(); + assert(state.on_down != NULL); + state.on_down(&state); } void keyboard_on_up(void) { - assert(board != NULL); - board->on_up(); + assert(state.on_up != NULL); + state.on_up(&state); } int main(int argc, char **argv) @@ -40,12 +40,17 @@ int main(int argc, char **argv) // TODO: List valid boards. return 1; } + + /* Initialise board state */ + state.sound_play = &sound_play; /* Inject platform-specific impl */ + fprintf(stderr, "Loading board...\n"); - if ((board = load_board(argv[1])) == NULL) { + if (!load_board(&state, argv[1])) { printf("Failed to load board, exiting.\n"); return 1; } - fprintf(stderr, "Loaded board: %s\n", board->name); + state.board_init(&state); + fprintf(stderr, "Loaded board: %s\n", state.name); fprintf(stderr, "Initialisating sound system...\n"); if (!sound_init(VOLUME)) { |