From 7b3685b7927eeedb99cebd2c99cd64641282f8b7 Mon Sep 17 00:00:00 2001 From: En Yi Date: Tue, 16 May 2023 21:09:38 +0800 Subject: [PATCH] Refactor for better separation of concern Changelog: - Separate out engine-specific stuff vs game-specific stuff --- CMakeLists.txt | 45 ++----------------- {engine => scenes}/CMakeLists.txt | 12 ++--- {engine => scenes}/assets_maps.c | 0 {engine => scenes}/assets_maps.h | 0 {engine => scenes}/constants.h | 0 {engine => scenes}/editor_scene.c | 3 +- {engine => scenes/engine}/AABB.c | 0 {engine => scenes/engine}/AABB.h | 0 scenes/engine/CMakeLists.txt | 15 +++++++ {engine => scenes/engine}/EC/CMakeLists.txt | 15 +++++-- {engine => scenes/engine}/EC/components.h | 0 {engine => scenes/engine}/EC/entManager.c | 0 {engine => scenes/engine}/EC/entManager.h | 0 {engine => scenes/engine}/EC/entity.h | 0 {engine => scenes/engine}/EC/mempool.c | 0 {engine => scenes/engine}/EC/mempool.h | 0 .../engine}/EC/sc/CMakeLists.txt | 0 {engine => scenes/engine}/EC/sc/LICENSE | 0 .../engine}/EC/sc/array/CMakeLists.txt | 0 .../engine}/EC/sc/array/README.md | 0 .../engine}/EC/sc/array/sc_array.h | 0 .../engine}/EC/sc/heap/CMakeLists.txt | 0 .../engine}/EC/sc/heap/README.md | 0 .../engine}/EC/sc/heap/sc_heap.c | 0 .../engine}/EC/sc/heap/sc_heap.h | 0 .../engine}/EC/sc/map/CMakeLists.txt | 0 {engine => scenes/engine}/EC/sc/map/README.md | 0 {engine => scenes/engine}/EC/sc/map/sc_map.c | 0 {engine => scenes/engine}/EC/sc/map/sc_map.h | 0 .../engine}/EC/sc/queue/CMakeLists.txt | 0 .../engine}/EC/sc/queue/README.md | 0 .../engine}/EC/sc/queue/sc_queue.h | 0 {engine => scenes/engine}/actions.h | 0 {engine => scenes/engine}/assets.c | 0 {engine => scenes/engine}/assets.h | 0 {engine => scenes/engine}/engine.c | 5 ++- {engine => scenes/engine}/engine.h | 13 +++--- {engine => scenes/engine}/gui.c | 0 {engine => scenes/engine}/gui.h | 0 {engine => scenes/engine}/raygui.h | 0 {engine => scenes}/game_systems.c | 0 {engine => scenes}/game_systems.h | 0 {engine => scenes}/menu_scene.c | 3 +- {engine => scenes}/scene_impl.h | 0 44 files changed, 47 insertions(+), 64 deletions(-) rename {engine => scenes}/CMakeLists.txt (63%) rename {engine => scenes}/assets_maps.c (100%) rename {engine => scenes}/assets_maps.h (100%) rename {engine => scenes}/constants.h (100%) rename {engine => scenes}/editor_scene.c (99%) rename {engine => scenes/engine}/AABB.c (100%) rename {engine => scenes/engine}/AABB.h (100%) create mode 100644 scenes/engine/CMakeLists.txt rename {engine => scenes/engine}/EC/CMakeLists.txt (65%) rename {engine => scenes/engine}/EC/components.h (100%) rename {engine => scenes/engine}/EC/entManager.c (100%) rename {engine => scenes/engine}/EC/entManager.h (100%) rename {engine => scenes/engine}/EC/entity.h (100%) rename {engine => scenes/engine}/EC/mempool.c (100%) rename {engine => scenes/engine}/EC/mempool.h (100%) rename {engine => scenes/engine}/EC/sc/CMakeLists.txt (100%) rename {engine => scenes/engine}/EC/sc/LICENSE (100%) rename {engine => scenes/engine}/EC/sc/array/CMakeLists.txt (100%) rename {engine => scenes/engine}/EC/sc/array/README.md (100%) rename {engine => scenes/engine}/EC/sc/array/sc_array.h (100%) rename {engine => scenes/engine}/EC/sc/heap/CMakeLists.txt (100%) rename {engine => scenes/engine}/EC/sc/heap/README.md (100%) rename {engine => scenes/engine}/EC/sc/heap/sc_heap.c (100%) rename {engine => scenes/engine}/EC/sc/heap/sc_heap.h (100%) rename {engine => scenes/engine}/EC/sc/map/CMakeLists.txt (100%) rename {engine => scenes/engine}/EC/sc/map/README.md (100%) rename {engine => scenes/engine}/EC/sc/map/sc_map.c (100%) rename {engine => scenes/engine}/EC/sc/map/sc_map.h (100%) rename {engine => scenes/engine}/EC/sc/queue/CMakeLists.txt (100%) rename {engine => scenes/engine}/EC/sc/queue/README.md (100%) rename {engine => scenes/engine}/EC/sc/queue/sc_queue.h (100%) rename {engine => scenes/engine}/actions.h (100%) rename {engine => scenes/engine}/assets.c (100%) rename {engine => scenes/engine}/assets.h (100%) rename {engine => scenes/engine}/engine.c (80%) rename {engine => scenes/engine}/engine.h (78%) rename {engine => scenes/engine}/gui.c (100%) rename {engine => scenes/engine}/gui.h (100%) rename {engine => scenes/engine}/raygui.h (100%) rename {engine => scenes}/game_systems.c (100%) rename {engine => scenes}/game_systems.h (100%) rename {engine => scenes}/menu_scene.c (96%) rename {engine => scenes}/scene_impl.h (100%) diff --git a/CMakeLists.txt b/CMakeLists.txt index 6148c9c..878f6a2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -11,17 +11,11 @@ if (${CMAKE_BUILD_TYPE} STREQUAL tile16) endif() set(GAME_LIBS - lib_EC lib_scenes - sc_queue - sc_map - sc_array - raylib - m ) -add_subdirectory(engine) +add_subdirectory(scenes) add_executable(${PROJECT_NAME} main.c ) @@ -29,11 +23,6 @@ add_executable(${PROJECT_NAME} target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_LIST_DIR} - ${RAYLIB_DIR}/include -) -target_link_directories(${PROJECT_NAME} - PRIVATE - ${RAYLIB_DIR}/lib ) target_link_libraries(${PROJECT_NAME} @@ -48,17 +37,9 @@ target_link_options(EntManager_test PRIVATE -fsanitize=address -gdwarf-4) target_include_directories(EntManager_test PRIVATE ${CMAKE_CURRENT_LIST_DIR} - ${RAYLIB_DIR}/include -) -target_link_directories(EntManager_test - PRIVATE - ${RAYLIB_DIR}/lib ) target_link_libraries(EntManager_test - lib_EC - lib_scenes - sc_queue - sc_map + ${GAME_LIBS} ) add_executable(scene_test @@ -68,17 +49,11 @@ add_executable(scene_test target_include_directories(scene_test PRIVATE ${CMAKE_CURRENT_LIST_DIR} - ${RAYLIB_DIR}/include ) target_compile_options(scene_test PRIVATE -fsanitize=address -gdwarf-4) target_link_options(scene_test PRIVATE -fsanitize=address -gdwarf-4) -target_link_directories(scene_test - PRIVATE - ${RAYLIB_DIR}/lib -) - target_link_libraries(scene_test ${GAME_LIBS} ) @@ -89,13 +64,9 @@ add_executable(scene_test_mem target_include_directories(scene_test_mem PRIVATE ${CMAKE_CURRENT_LIST_DIR} - ${RAYLIB_DIR}/include ) target_link_options(scene_test_mem PRIVATE -Xlinker -Map=scene_test.map) -target_link_directories(scene_test_mem - PRIVATE - ${RAYLIB_DIR}/lib -) + target_link_libraries(scene_test_mem ${GAME_LIBS} ) @@ -106,14 +77,9 @@ add_executable(menu_test target_include_directories(menu_test PRIVATE ${CMAKE_CURRENT_LIST_DIR} - ${RAYLIB_DIR}/include ) target_compile_options(menu_test PRIVATE -fsanitize=address -gdwarf-4) target_link_options(menu_test PRIVATE -fsanitize=address -gdwarf-4) -target_link_directories(menu_test - PRIVATE - ${RAYLIB_DIR}/lib -) target_link_libraries(menu_test ${GAME_LIBS} ) @@ -124,14 +90,9 @@ add_executable(assets_test target_include_directories(assets_test PRIVATE ${CMAKE_CURRENT_LIST_DIR} - ${RAYLIB_DIR}/include ) target_compile_options(assets_test PRIVATE -fsanitize=address -gdwarf-4) target_link_options(assets_test PRIVATE -fsanitize=address -gdwarf-4) -target_link_directories(assets_test - PRIVATE - ${RAYLIB_DIR}/lib -) target_link_libraries(assets_test ${GAME_LIBS} ) diff --git a/engine/CMakeLists.txt b/scenes/CMakeLists.txt similarity index 63% rename from engine/CMakeLists.txt rename to scenes/CMakeLists.txt index 55fe9e3..8f700ab 100644 --- a/engine/CMakeLists.txt +++ b/scenes/CMakeLists.txt @@ -1,21 +1,15 @@ -add_subdirectory(EC) +add_subdirectory(engine) add_library(lib_scenes STATIC - engine.c - assets.c assets_maps.c editor_scene.c menu_scene.c game_systems.c - AABB.c - gui.c ) target_include_directories(lib_scenes PUBLIC ${CMAKE_CURRENT_LIST_DIR} - ${RAYLIB_DIR}/include ) target_link_libraries(lib_scenes - PRIVATE - lib_EC - raylib + PUBLIC + lib_engine ) diff --git a/engine/assets_maps.c b/scenes/assets_maps.c similarity index 100% rename from engine/assets_maps.c rename to scenes/assets_maps.c diff --git a/engine/assets_maps.h b/scenes/assets_maps.h similarity index 100% rename from engine/assets_maps.h rename to scenes/assets_maps.h diff --git a/engine/constants.h b/scenes/constants.h similarity index 100% rename from engine/constants.h rename to scenes/constants.h diff --git a/engine/editor_scene.c b/scenes/editor_scene.c similarity index 99% rename from engine/editor_scene.c rename to scenes/editor_scene.c index 2b51548..3aa6e11 100644 --- a/engine/editor_scene.c +++ b/scenes/editor_scene.c @@ -423,7 +423,8 @@ void level_do_action(Scene_t* scene, ActionType_t action, bool pressed) void init_level_scene(LevelScene_t* scene) { - init_scene(&scene->scene, LEVEL_SCENE, &level_scene_render_func, &level_do_action); + //init_scene(&scene->scene, LEVEL_SCENE, &level_scene_render_func, &level_do_action); + init_scene(&scene->scene, &level_scene_render_func, &level_do_action); init_level_scene_data(&scene->data); // insert level scene systems diff --git a/engine/AABB.c b/scenes/engine/AABB.c similarity index 100% rename from engine/AABB.c rename to scenes/engine/AABB.c diff --git a/engine/AABB.h b/scenes/engine/AABB.h similarity index 100% rename from engine/AABB.h rename to scenes/engine/AABB.h diff --git a/scenes/engine/CMakeLists.txt b/scenes/engine/CMakeLists.txt new file mode 100644 index 0000000..7f3fe12 --- /dev/null +++ b/scenes/engine/CMakeLists.txt @@ -0,0 +1,15 @@ +add_subdirectory(EC) +add_library(lib_engine STATIC + assets.c + AABB.c + gui.c + engine.c +) +target_include_directories(lib_engine + PUBLIC + ${CMAKE_CURRENT_LIST_DIR} +) +target_link_libraries(lib_engine + PUBLIC + lib_EC +) diff --git a/engine/EC/CMakeLists.txt b/scenes/engine/EC/CMakeLists.txt similarity index 65% rename from engine/EC/CMakeLists.txt rename to scenes/engine/EC/CMakeLists.txt index f397030..ff872d6 100644 --- a/engine/EC/CMakeLists.txt +++ b/scenes/engine/EC/CMakeLists.txt @@ -8,7 +8,16 @@ target_include_directories(lib_EC ${CMAKE_CURRENT_LIST_DIR} ${RAYLIB_DIR}/include ) -target_link_libraries(lib_EC - PRIVATE - raylib + +target_link_directories(lib_EC + PUBLIC + ${RAYLIB_DIR}/lib +) +target_link_libraries(lib_EC + PUBLIC + raylib + sc_queue + sc_map + sc_array + m ) diff --git a/engine/EC/components.h b/scenes/engine/EC/components.h similarity index 100% rename from engine/EC/components.h rename to scenes/engine/EC/components.h diff --git a/engine/EC/entManager.c b/scenes/engine/EC/entManager.c similarity index 100% rename from engine/EC/entManager.c rename to scenes/engine/EC/entManager.c diff --git a/engine/EC/entManager.h b/scenes/engine/EC/entManager.h similarity index 100% rename from engine/EC/entManager.h rename to scenes/engine/EC/entManager.h diff --git a/engine/EC/entity.h b/scenes/engine/EC/entity.h similarity index 100% rename from engine/EC/entity.h rename to scenes/engine/EC/entity.h diff --git a/engine/EC/mempool.c b/scenes/engine/EC/mempool.c similarity index 100% rename from engine/EC/mempool.c rename to scenes/engine/EC/mempool.c diff --git a/engine/EC/mempool.h b/scenes/engine/EC/mempool.h similarity index 100% rename from engine/EC/mempool.h rename to scenes/engine/EC/mempool.h diff --git a/engine/EC/sc/CMakeLists.txt b/scenes/engine/EC/sc/CMakeLists.txt similarity index 100% rename from engine/EC/sc/CMakeLists.txt rename to scenes/engine/EC/sc/CMakeLists.txt diff --git a/engine/EC/sc/LICENSE b/scenes/engine/EC/sc/LICENSE similarity index 100% rename from engine/EC/sc/LICENSE rename to scenes/engine/EC/sc/LICENSE diff --git a/engine/EC/sc/array/CMakeLists.txt b/scenes/engine/EC/sc/array/CMakeLists.txt similarity index 100% rename from engine/EC/sc/array/CMakeLists.txt rename to scenes/engine/EC/sc/array/CMakeLists.txt diff --git a/engine/EC/sc/array/README.md b/scenes/engine/EC/sc/array/README.md similarity index 100% rename from engine/EC/sc/array/README.md rename to scenes/engine/EC/sc/array/README.md diff --git a/engine/EC/sc/array/sc_array.h b/scenes/engine/EC/sc/array/sc_array.h similarity index 100% rename from engine/EC/sc/array/sc_array.h rename to scenes/engine/EC/sc/array/sc_array.h diff --git a/engine/EC/sc/heap/CMakeLists.txt b/scenes/engine/EC/sc/heap/CMakeLists.txt similarity index 100% rename from engine/EC/sc/heap/CMakeLists.txt rename to scenes/engine/EC/sc/heap/CMakeLists.txt diff --git a/engine/EC/sc/heap/README.md b/scenes/engine/EC/sc/heap/README.md similarity index 100% rename from engine/EC/sc/heap/README.md rename to scenes/engine/EC/sc/heap/README.md diff --git a/engine/EC/sc/heap/sc_heap.c b/scenes/engine/EC/sc/heap/sc_heap.c similarity index 100% rename from engine/EC/sc/heap/sc_heap.c rename to scenes/engine/EC/sc/heap/sc_heap.c diff --git a/engine/EC/sc/heap/sc_heap.h b/scenes/engine/EC/sc/heap/sc_heap.h similarity index 100% rename from engine/EC/sc/heap/sc_heap.h rename to scenes/engine/EC/sc/heap/sc_heap.h diff --git a/engine/EC/sc/map/CMakeLists.txt b/scenes/engine/EC/sc/map/CMakeLists.txt similarity index 100% rename from engine/EC/sc/map/CMakeLists.txt rename to scenes/engine/EC/sc/map/CMakeLists.txt diff --git a/engine/EC/sc/map/README.md b/scenes/engine/EC/sc/map/README.md similarity index 100% rename from engine/EC/sc/map/README.md rename to scenes/engine/EC/sc/map/README.md diff --git a/engine/EC/sc/map/sc_map.c b/scenes/engine/EC/sc/map/sc_map.c similarity index 100% rename from engine/EC/sc/map/sc_map.c rename to scenes/engine/EC/sc/map/sc_map.c diff --git a/engine/EC/sc/map/sc_map.h b/scenes/engine/EC/sc/map/sc_map.h similarity index 100% rename from engine/EC/sc/map/sc_map.h rename to scenes/engine/EC/sc/map/sc_map.h diff --git a/engine/EC/sc/queue/CMakeLists.txt b/scenes/engine/EC/sc/queue/CMakeLists.txt similarity index 100% rename from engine/EC/sc/queue/CMakeLists.txt rename to scenes/engine/EC/sc/queue/CMakeLists.txt diff --git a/engine/EC/sc/queue/README.md b/scenes/engine/EC/sc/queue/README.md similarity index 100% rename from engine/EC/sc/queue/README.md rename to scenes/engine/EC/sc/queue/README.md diff --git a/engine/EC/sc/queue/sc_queue.h b/scenes/engine/EC/sc/queue/sc_queue.h similarity index 100% rename from engine/EC/sc/queue/sc_queue.h rename to scenes/engine/EC/sc/queue/sc_queue.h diff --git a/engine/actions.h b/scenes/engine/actions.h similarity index 100% rename from engine/actions.h rename to scenes/engine/actions.h diff --git a/engine/assets.c b/scenes/engine/assets.c similarity index 100% rename from engine/assets.c rename to scenes/engine/assets.c diff --git a/engine/assets.h b/scenes/engine/assets.h similarity index 100% rename from engine/assets.h rename to scenes/engine/assets.h diff --git a/engine/engine.c b/scenes/engine/engine.c similarity index 80% rename from engine/engine.c rename to scenes/engine/engine.c index d7e859a..841a1fc 100644 --- a/engine/engine.c +++ b/scenes/engine/engine.c @@ -7,13 +7,14 @@ void change_scene(GameEngine_t* engine, unsigned int idx) engine->scenes[engine->curr_scene]->state = SCENE_PLAYING; } -void init_scene(Scene_t* scene, SceneType_t scene_type, system_func_t render_func, action_func_t action_func) +//void init_scene(Scene_t* scene, SceneType_t scene_type, system_func_t render_func, action_func_t action_func) +void init_scene(Scene_t* scene, system_func_t render_func, action_func_t action_func) { sc_map_init_64(&scene->action_map, 32, 0); sc_array_init(&scene->systems); init_entity_manager(&scene->ent_manager); - scene->scene_type = scene_type; + //scene->scene_type = scene_type; scene->render_function = render_func; scene->action_function = action_func; scene->state = SCENE_ENDED; diff --git a/engine/engine.h b/scenes/engine/engine.h similarity index 78% rename from engine/engine.h rename to scenes/engine/engine.h index 11454cd..d9eb952 100644 --- a/engine/engine.h +++ b/scenes/engine/engine.h @@ -15,10 +15,10 @@ typedef struct GameEngine { } GameEngine_t; void change_scene(GameEngine_t* engine, unsigned int idx); -typedef enum SceneType { - LEVEL_SCENE = 0, - MENU_SCENE, -}SceneType_t; +//typedef enum SceneType { +// LEVEL_SCENE = 0, +// MENU_SCENE, +//}SceneType_t; typedef enum SceneState { SCENE_PLAYING = 0, @@ -36,7 +36,7 @@ struct Scene { system_func_t render_function; action_func_t action_function; EntityManager_t ent_manager; - SceneType_t scene_type; + //SceneType_t scene_type; SceneState_t state; GameEngine_t *engine; }; @@ -46,7 +46,8 @@ extern void update_scene(Scene_t* scene); extern void render_scene(Scene_t* scene); 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 init_scene(Scene_t* scene, SceneType_t scene_type, system_func_t render_func, action_func_t action_func); +void init_scene(Scene_t* scene, system_func_t render_func, action_func_t action_func); void free_scene(Scene_t* scene); #endif // __ENGINE_H diff --git a/engine/gui.c b/scenes/engine/gui.c similarity index 100% rename from engine/gui.c rename to scenes/engine/gui.c diff --git a/engine/gui.h b/scenes/engine/gui.h similarity index 100% rename from engine/gui.h rename to scenes/engine/gui.h diff --git a/engine/raygui.h b/scenes/engine/raygui.h similarity index 100% rename from engine/raygui.h rename to scenes/engine/raygui.h diff --git a/engine/game_systems.c b/scenes/game_systems.c similarity index 100% rename from engine/game_systems.c rename to scenes/game_systems.c diff --git a/engine/game_systems.h b/scenes/game_systems.h similarity index 100% rename from engine/game_systems.h rename to scenes/game_systems.h diff --git a/engine/menu_scene.c b/scenes/menu_scene.c similarity index 96% rename from engine/menu_scene.c rename to scenes/menu_scene.c index a26286e..20d07d6 100644 --- a/engine/menu_scene.c +++ b/scenes/menu_scene.c @@ -118,7 +118,8 @@ static void gui_loop(Scene_t* scene) void init_menu_scene(MenuScene_t* scene) { - init_scene(&scene->scene, MENU_SCENE, &menu_scene_render_func, &menu_do_action); + //init_scene(&scene->scene, MENU_SCENE, &menu_scene_render_func, &menu_do_action); + init_scene(&scene->scene, &menu_scene_render_func, &menu_do_action); sc_array_add(&scene->scene.systems, &gui_loop); diff --git a/engine/scene_impl.h b/scenes/scene_impl.h similarity index 100% rename from engine/scene_impl.h rename to scenes/scene_impl.h