summaryrefslogtreecommitdiff
path: root/src/game.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/game.c')
-rw-r--r--src/game.c134
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