From 6f7374c2fa58c8692b51018864b802e6b876d305 Mon Sep 17 00:00:00 2001 From: Aldrik Ramaekers Date: Sat, 23 Nov 2024 21:52:24 +0100 Subject: A new start --- src/game.c | 134 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 134 insertions(+) create mode 100644 src/game.c (limited to 'src/game.c') diff --git a/src/game.c b/src/game.c new file mode 100644 index 0000000..de41182 --- /dev/null +++ b/src/game.c @@ -0,0 +1,134 @@ + +static game _game_instance; + +static void game_init_current_scene() +{ + switch (_game_instance.current_state) + { + case GAME_STATE_LOADING: + loading_scene_init(); + break; + case GAME_STATE_MENU: + menu_scene_init(); + break; + case GAME_STATE_SELECT_SAVE: + save_state_select_scene_init(); + break; + case GAME_STATE_WORLD_MAP: + world_map_scene_init(); + break; + case GAME_STATE_LOADING_WORLD: + loading_world_scene_init(); + break; + case GAME_STATE_ERROR: + error_scene_init(); + break; + case GAME_STATE_PLACE_DETAIL: + place_detail_scene_init(); + break; + case GAME_STATE_SETTINGS: + settings_scene_init(); + break; + } +} + +static void game_destroy_current_scene() +{ + switch (_game_instance.current_state) + { + case GAME_STATE_LOADING: + loading_scene_destroy(); + break; + case GAME_STATE_MENU: + menu_scene_destroy(); + break; + case GAME_STATE_SELECT_SAVE: + save_state_select_scene_destroy(); + break; + case GAME_STATE_WORLD_MAP: + world_map_scene_destroy(); + break; + case GAME_STATE_LOADING_WORLD: + loading_world_scene_destroy(); + break; + case GAME_STATE_ERROR: + error_scene_destroy(); + break; + case GAME_STATE_PLACE_DETAIL: + place_detail_scene_destroy(); + break; + case GAME_STATE_SETTINGS: + settings_scene_destroy(); + break; + } +} + +void game_set_active_scene(game_state state) +{ + game_destroy_current_scene(); + _game_instance.current_state = state; + game_init_current_scene(); +} + +void game_update(platform_window* window) +{ + switch (_game_instance.current_state) + { + case GAME_STATE_LOADING: + loading_scene_update(window); + break; + case GAME_STATE_MENU: + menu_scene_update(window); + break; + case GAME_STATE_SELECT_SAVE: + save_state_select_scene_update(window); + break; + case GAME_STATE_WORLD_MAP: + world_map_scene_update(window); + break; + case GAME_STATE_LOADING_WORLD: + loading_world_scene_update(window); + break; + case GAME_STATE_ERROR: + error_scene_update(window); + break; + case GAME_STATE_PLACE_DETAIL: + place_detail_scene_update(window); + break; + case GAME_STATE_SETTINGS: + settings_scene_update(window); + break; + } +} + +void game_render(platform_window* window) +{ + switch (_game_instance.current_state) + { + case GAME_STATE_LOADING: + loading_scene_render(window); + break; + case GAME_STATE_MENU: + menu_scene_render(window); + break; + case GAME_STATE_SELECT_SAVE: + save_state_select_scene_render(window); + break; + case GAME_STATE_WORLD_MAP: + world_map_scene_render(window); + break; + case GAME_STATE_LOADING_WORLD: + loading_world_scene_render(window); + break; + case GAME_STATE_ERROR: + error_scene_render(window); + break; + case GAME_STATE_PLACE_DETAIL: + place_detail_scene_render(window); + break; + case GAME_STATE_SETTINGS: + settings_scene_render(window); + break; + } + update_render_tooltip(); +} \ No newline at end of file -- cgit v1.2.3-70-g09d2