diff options
| author | Aldrik Ramaekers <aldrikboy@gmail.com> | 2024-11-23 21:52:24 +0100 |
|---|---|---|
| committer | Aldrik Ramaekers <aldrikboy@gmail.com> | 2024-11-23 21:52:24 +0100 |
| commit | 6f7374c2fa58c8692b51018864b802e6b876d305 (patch) | |
| tree | a7e8ead757e9f4de1920395336dcac1c8a989576 /src/game.c | |
A new start
Diffstat (limited to 'src/game.c')
| -rw-r--r-- | src/game.c | 134 |
1 files changed, 134 insertions, 0 deletions
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 |
