From 1612b4f6488a856b27080c9beffbc93a31067904 Mon Sep 17 00:00:00 2001 From: En Yi Date: Sun, 12 Feb 2023 23:30:55 +0800 Subject: [PATCH] Refactor and prepare for scene changing Changelog: - Rename scene.* to engine.* as the game engine is tied to the base scene struct - Combine *_impl.h into a single header - Rename scene implementation source code file - Add GameEngine struct and SceneState enum --- engine/CMakeLists.txt | 6 +++--- engine/{scene_impl.c => editor_scene.c} | 0 engine/{scene.c => engine.c} | 5 ++--- engine/{scene.h => engine.h} | 28 +++++++++++++++++++------ engine/menu_impl.h | 28 ------------------------- engine/{menu_impl.c => menu_scene.c} | 2 +- engine/scene_impl.h | 27 +++++++++++++++++++++++- main.c | 2 +- menu_test.c | 2 +- 9 files changed, 56 insertions(+), 44 deletions(-) rename engine/{scene_impl.c => editor_scene.c} (100%) rename engine/{scene.c => engine.c} (92%) rename engine/{scene.h => engine.h} (71%) delete mode 100644 engine/menu_impl.h rename engine/{menu_impl.c => menu_scene.c} (99%) diff --git a/engine/CMakeLists.txt b/engine/CMakeLists.txt index 37f1162..96ef5b7 100644 --- a/engine/CMakeLists.txt +++ b/engine/CMakeLists.txt @@ -1,8 +1,8 @@ add_subdirectory(EC) add_library(lib_scenes STATIC - scene.c - scene_impl.c - menu_impl.c + engine.c + editor_scene.c + menu_scene.c game_systems.c AABB.c gui.c diff --git a/engine/scene_impl.c b/engine/editor_scene.c similarity index 100% rename from engine/scene_impl.c rename to engine/editor_scene.c diff --git a/engine/scene.c b/engine/engine.c similarity index 92% rename from engine/scene.c rename to engine/engine.c index f7ee934..6ec4248 100644 --- a/engine/scene.c +++ b/engine/engine.c @@ -1,4 +1,4 @@ -#include "scene.h" +#include "engine.h" void init_scene(Scene_t *scene, SceneType_t scene_type, system_func_t render_func, action_func_t action_func) { @@ -9,8 +9,7 @@ void init_scene(Scene_t *scene, SceneType_t scene_type, system_func_t render_fun scene->scene_type = scene_type; scene->render_function = render_func; scene->action_function = action_func; - scene->paused = false; - scene->has_ended = false; + scene->state = SCENE_ENDED; } void free_scene(Scene_t *scene) diff --git a/engine/scene.h b/engine/engine.h similarity index 71% rename from engine/scene.h rename to engine/engine.h index c342a52..f81b430 100644 --- a/engine/scene.h +++ b/engine/engine.h @@ -1,15 +1,31 @@ -#ifndef __SCENE_H -#define __SCENE_H +#ifndef __ENGINE_H +#define __ENGINE_H #include "entManager.h" #include "actions.h" #include "sc/array/sc_array.h" +typedef struct Scene Scene_t; + +typedef struct GameEngine +{ + Scene_t *scenes; + unsigned int max_scenes; + unsigned int curr_scene; +}GameEngine_t; +void change_scene(GameEngine_t *engine); + typedef enum SceneType { LEVEL_SCENE = 0, MENU_SCENE, }SceneType_t; -typedef struct Scene Scene_t; +typedef enum SceneState +{ + SCENE_PLAYING = 0, + SCENE_SUSPENDED, + SCENE_ENDED, +}SceneState_t; + typedef void(*system_func_t)(Scene_t *); typedef void(*action_func_t)(Scene_t *, ActionType_t, bool); sc_array_def(system_func_t, systems); @@ -22,9 +38,9 @@ struct Scene action_func_t action_function; EntityManager_t ent_manager; SceneType_t scene_type; + SceneState_t state; void * scene_data; - bool paused; - bool has_ended; + GameEngine_t *engine; }; // Inline functions, for convenience @@ -35,4 +51,4 @@ extern void do_action(Scene_t *scene, ActionType_t action, bool pressed); void init_scene(Scene_t *scene, SceneType_t scene_type, system_func_t render_func, action_func_t action_func); void free_scene(Scene_t *scene); -#endif // __SCENE_H +#endif // __ENGINE_H diff --git a/engine/menu_impl.h b/engine/menu_impl.h deleted file mode 100644 index f6b7cb4..0000000 --- a/engine/menu_impl.h +++ /dev/null @@ -1,28 +0,0 @@ -#ifndef __MENU_IMPL_H -#define __MENU_IMPL_H -#include "scene.h" -#include "gui.h" - -typedef enum GuiMode -{ - KEYBOARD_MODE, - MOUSE_MODE -}GuiMode_t; - -typedef struct MenuSceneData -{ - UIComp_t buttons[3]; - int selected_comp; - int max_comp; - GuiMode_t mode; -}MenuSceneData_t; - -typedef struct MenuScene -{ - Scene_t scene; - MenuSceneData_t data; -}MenuScene_t; - -void init_menu_scene(MenuScene_t *scene); -void free_menu_scene(MenuScene_t *scene); -#endif diff --git a/engine/menu_impl.c b/engine/menu_scene.c similarity index 99% rename from engine/menu_impl.c rename to engine/menu_scene.c index 3af9a0c..9537268 100644 --- a/engine/menu_impl.c +++ b/engine/menu_scene.c @@ -1,4 +1,4 @@ -#include "menu_impl.h" +#include "scene_impl.h" #include "raymath.h" #include diff --git a/engine/scene_impl.h b/engine/scene_impl.h index f8a30fa..f820229 100644 --- a/engine/scene_impl.h +++ b/engine/scene_impl.h @@ -4,7 +4,9 @@ * */ #ifndef __SCENE_IMPL_H #define __SCENE_IMPL_H -#include "scene.h" +#include "engine.h" +#include "gui.h" + typedef struct Tile { bool solid; @@ -35,4 +37,27 @@ typedef struct LevelScene void init_level_scene(LevelScene_t *scene); void free_level_scene(LevelScene_t *scene); void reload_level_scene(LevelScene_t *scene); + +typedef enum GuiMode +{ + KEYBOARD_MODE, + MOUSE_MODE +}GuiMode_t; + +typedef struct MenuSceneData +{ + UIComp_t buttons[3]; + int selected_comp; + int max_comp; + GuiMode_t mode; +}MenuSceneData_t; + +typedef struct MenuScene +{ + Scene_t scene; + MenuSceneData_t data; +}MenuScene_t; + +void init_menu_scene(MenuScene_t *scene); +void free_menu_scene(MenuScene_t *scene); #endif // __SCENE_IMPL_H diff --git a/main.c b/main.c index 298bc25..67ebc33 100644 --- a/main.c +++ b/main.c @@ -1,5 +1,5 @@ #include "raylib.h" -#include "scene.h" +#include "engine.h" #define N_SCENES 3 Scene_t scenes[N_SCENES]; diff --git a/menu_test.c b/menu_test.c index 70b4f8c..addfe4b 100644 --- a/menu_test.c +++ b/menu_test.c @@ -1,5 +1,5 @@ #include "mempool.h" -#include "menu_impl.h" +#include "scene_impl.h" #include #include