Break out the game demo into multiple source and include files, add a bunch of missing assets, conform to the new subsystems interface from libakgl

This commit is contained in:
2026-05-25 21:30:47 -04:00
parent f7e61cf59b
commit df4d532d82
23 changed files with 873 additions and 406 deletions

45
src/events.c Normal file
View File

@@ -0,0 +1,45 @@
#include <akgltest.h>
akerr_ErrorContext AKERR_NOIGNORE *savegame(akgl_Actor *obj, SDL_Event *event)
{
return akgl_game_save("assets/savegame.bin");
}
akerr_ErrorContext AKERR_NOIGNORE *quit_game(akgl_Actor *obj, SDL_Event *event)
{
PREPARE_ERROR(e);
AKGL_BITMASK_ADD(game.state.flags, AKGLTEST_STATE_QUIT);
SDL_Log("Quitting game");
SUCCEED_RETURN(e);
}
SDL_AppResult SDL_AppEvent(void *appstate, SDL_Event *event)
{
PREPARE_ERROR(e);
ATTEMPT {
CATCH(e, akgl_game_state_lock());
FAIL_ZERO_BREAK(e, appstate, AKERR_NULLPOINTER, "NULL appstate pointer");
FAIL_ZERO_BREAK(e, event, AKERR_NULLPOINTER, "NULL event pointer");
if ( AKGL_BITMASK_HAS(game.state.flags, AKGLTEST_STATE_WAITFORINPUT) ) {
if ( event->type == SDL_EVENT_GAMEPAD_BUTTON_DOWN ||
event->type == SDL_EVENT_GAMEPAD_BUTTON_UP ||
event->type == SDL_EVENT_KEY_DOWN ||
event->type == SDL_EVENT_KEY_UP ) {
// get the player's default keyboard or gamepad id from the event
CATCH(e, akgltest_controller_get_defaults(appstate, event));
CATCH(e, akgltest_set_gamemode_menu(appstate, event));
}
} else {
CATCH(e, akgl_controller_handle_event(appstate, event));
}
if (event->type == SDL_EVENT_QUIT) {
return SDL_APP_SUCCESS; /* end the program, reporting success to the OS. */
}
} CLEANUP {
IGNORE(akgl_game_state_unlock());
} PROCESS(e) {
} FINISH_NORETURN(e);
return SDL_APP_CONTINUE; /* carry on with the program! */
}