#include "state.h" #include "scenes/scene.h" #include "scenes/title.h" #include "twn_game_api.h" #include #include #include #include void game_tick(void) { if (ctx.initialization_needed) { if (!ctx.udata) { ctx.udata = ccalloc(1, sizeof (State)); State *state = ctx.udata; state->ctx = &ctx; state->scene = title_scene(state); } input_add_action("debug_toggle"); input_bind_action_control("debug_toggle", CONTROL_BACKSPACE); input_add_action("debug_dump_atlases"); input_bind_action_control("debug_dump_atlases", CONTROL_HOME); input_add_action("player_left"); input_bind_action_control("player_left", CONTROL_A); input_add_action("player_right"); input_bind_action_control("player_right", CONTROL_D); input_add_action("player_forward"); input_bind_action_control("player_forward", CONTROL_W); input_add_action("player_backward"); input_bind_action_control("player_backward", CONTROL_S); input_add_action("player_jump"); input_bind_action_control("player_jump", CONTROL_SPACE); input_add_action("player_run"); input_bind_action_control("player_run", CONTROL_LSHIFT); input_add_action("ui_accept"); input_bind_action_control("ui_accept", CONTROL_RETURN); input_add_action("mouse_capture_toggle"); input_bind_action_control("mouse_capture_toggle", CONTROL_ESCAPE); } State *state = ctx.udata; if (input_is_action_just_pressed("debug_toggle")) { ctx.debug = !ctx.debug; } if (input_is_action_just_pressed("debug_dump_atlases")) { textures_dump_atlases(); } state->scene->tick(state); /* there's a scene switch pending, we can do it now that the tick is done */ if (state->next_scene != NULL) { state->scene->end(state); state->scene = state->next_scene; state->is_scene_switching = false; state->next_scene = NULL; } } void game_end(void) { State *state = ctx.udata; state->scene->end(state); free(state); }