Refactor for better separation of concern

Changelog:
- Separate out engine-specific stuff vs game-specific stuff
scene_man
En Yi 2023-05-16 21:09:38 +08:00
parent ee4313adbb
commit 7b3685b792
44 changed files with 47 additions and 64 deletions

View File

@ -11,17 +11,11 @@ if (${CMAKE_BUILD_TYPE} STREQUAL tile16)
endif() endif()
set(GAME_LIBS set(GAME_LIBS
lib_EC
lib_scenes lib_scenes
sc_queue
sc_map
sc_array
raylib
m
) )
add_subdirectory(engine) add_subdirectory(scenes)
add_executable(${PROJECT_NAME} add_executable(${PROJECT_NAME}
main.c main.c
) )
@ -29,11 +23,6 @@ add_executable(${PROJECT_NAME}
target_include_directories(${PROJECT_NAME} target_include_directories(${PROJECT_NAME}
PRIVATE PRIVATE
${CMAKE_CURRENT_LIST_DIR} ${CMAKE_CURRENT_LIST_DIR}
${RAYLIB_DIR}/include
)
target_link_directories(${PROJECT_NAME}
PRIVATE
${RAYLIB_DIR}/lib
) )
target_link_libraries(${PROJECT_NAME} target_link_libraries(${PROJECT_NAME}
@ -48,17 +37,9 @@ target_link_options(EntManager_test PRIVATE -fsanitize=address -gdwarf-4)
target_include_directories(EntManager_test target_include_directories(EntManager_test
PRIVATE PRIVATE
${CMAKE_CURRENT_LIST_DIR} ${CMAKE_CURRENT_LIST_DIR}
${RAYLIB_DIR}/include
)
target_link_directories(EntManager_test
PRIVATE
${RAYLIB_DIR}/lib
) )
target_link_libraries(EntManager_test target_link_libraries(EntManager_test
lib_EC ${GAME_LIBS}
lib_scenes
sc_queue
sc_map
) )
add_executable(scene_test add_executable(scene_test
@ -68,17 +49,11 @@ add_executable(scene_test
target_include_directories(scene_test target_include_directories(scene_test
PRIVATE PRIVATE
${CMAKE_CURRENT_LIST_DIR} ${CMAKE_CURRENT_LIST_DIR}
${RAYLIB_DIR}/include
) )
target_compile_options(scene_test PRIVATE -fsanitize=address -gdwarf-4) target_compile_options(scene_test PRIVATE -fsanitize=address -gdwarf-4)
target_link_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 target_link_libraries(scene_test
${GAME_LIBS} ${GAME_LIBS}
) )
@ -89,13 +64,9 @@ add_executable(scene_test_mem
target_include_directories(scene_test_mem target_include_directories(scene_test_mem
PRIVATE PRIVATE
${CMAKE_CURRENT_LIST_DIR} ${CMAKE_CURRENT_LIST_DIR}
${RAYLIB_DIR}/include
) )
target_link_options(scene_test_mem PRIVATE -Xlinker -Map=scene_test.map) 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 target_link_libraries(scene_test_mem
${GAME_LIBS} ${GAME_LIBS}
) )
@ -106,14 +77,9 @@ add_executable(menu_test
target_include_directories(menu_test target_include_directories(menu_test
PRIVATE PRIVATE
${CMAKE_CURRENT_LIST_DIR} ${CMAKE_CURRENT_LIST_DIR}
${RAYLIB_DIR}/include
) )
target_compile_options(menu_test PRIVATE -fsanitize=address -gdwarf-4) target_compile_options(menu_test PRIVATE -fsanitize=address -gdwarf-4)
target_link_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 target_link_libraries(menu_test
${GAME_LIBS} ${GAME_LIBS}
) )
@ -124,14 +90,9 @@ add_executable(assets_test
target_include_directories(assets_test target_include_directories(assets_test
PRIVATE PRIVATE
${CMAKE_CURRENT_LIST_DIR} ${CMAKE_CURRENT_LIST_DIR}
${RAYLIB_DIR}/include
) )
target_compile_options(assets_test PRIVATE -fsanitize=address -gdwarf-4) target_compile_options(assets_test PRIVATE -fsanitize=address -gdwarf-4)
target_link_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 target_link_libraries(assets_test
${GAME_LIBS} ${GAME_LIBS}
) )

View File

@ -1,21 +1,15 @@
add_subdirectory(EC) add_subdirectory(engine)
add_library(lib_scenes STATIC add_library(lib_scenes STATIC
engine.c
assets.c
assets_maps.c assets_maps.c
editor_scene.c editor_scene.c
menu_scene.c menu_scene.c
game_systems.c game_systems.c
AABB.c
gui.c
) )
target_include_directories(lib_scenes target_include_directories(lib_scenes
PUBLIC PUBLIC
${CMAKE_CURRENT_LIST_DIR} ${CMAKE_CURRENT_LIST_DIR}
${RAYLIB_DIR}/include
) )
target_link_libraries(lib_scenes target_link_libraries(lib_scenes
PRIVATE PUBLIC
lib_EC lib_engine
raylib
) )

View File

@ -423,7 +423,8 @@ void level_do_action(Scene_t* scene, ActionType_t action, bool pressed)
void init_level_scene(LevelScene_t* scene) 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); init_level_scene_data(&scene->data);
// insert level scene systems // insert level scene systems

View File

@ -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
)

View File

@ -8,7 +8,16 @@ target_include_directories(lib_EC
${CMAKE_CURRENT_LIST_DIR} ${CMAKE_CURRENT_LIST_DIR}
${RAYLIB_DIR}/include ${RAYLIB_DIR}/include
) )
target_link_libraries(lib_EC
PRIVATE target_link_directories(lib_EC
raylib PUBLIC
${RAYLIB_DIR}/lib
)
target_link_libraries(lib_EC
PUBLIC
raylib
sc_queue
sc_map
sc_array
m
) )

View File

@ -7,13 +7,14 @@ void change_scene(GameEngine_t* engine, unsigned int idx)
engine->scenes[engine->curr_scene]->state = SCENE_PLAYING; 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_map_init_64(&scene->action_map, 32, 0);
sc_array_init(&scene->systems); sc_array_init(&scene->systems);
init_entity_manager(&scene->ent_manager); init_entity_manager(&scene->ent_manager);
scene->scene_type = scene_type; //scene->scene_type = scene_type;
scene->render_function = render_func; scene->render_function = render_func;
scene->action_function = action_func; scene->action_function = action_func;
scene->state = SCENE_ENDED; scene->state = SCENE_ENDED;

View File

@ -15,10 +15,10 @@ typedef struct GameEngine {
} GameEngine_t; } GameEngine_t;
void change_scene(GameEngine_t* engine, unsigned int idx); void change_scene(GameEngine_t* engine, unsigned int idx);
typedef enum SceneType { //typedef enum SceneType {
LEVEL_SCENE = 0, // LEVEL_SCENE = 0,
MENU_SCENE, // MENU_SCENE,
}SceneType_t; //}SceneType_t;
typedef enum SceneState { typedef enum SceneState {
SCENE_PLAYING = 0, SCENE_PLAYING = 0,
@ -36,7 +36,7 @@ struct Scene {
system_func_t render_function; system_func_t render_function;
action_func_t action_function; action_func_t action_function;
EntityManager_t ent_manager; EntityManager_t ent_manager;
SceneType_t scene_type; //SceneType_t scene_type;
SceneState_t state; SceneState_t state;
GameEngine_t *engine; GameEngine_t *engine;
}; };
@ -46,7 +46,8 @@ extern void update_scene(Scene_t* scene);
extern void render_scene(Scene_t* scene); extern void render_scene(Scene_t* scene);
extern void do_action(Scene_t* scene, ActionType_t action, bool pressed); 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); void free_scene(Scene_t* scene);
#endif // __ENGINE_H #endif // __ENGINE_H

View File

@ -118,7 +118,8 @@ static void gui_loop(Scene_t* scene)
void init_menu_scene(MenuScene_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); sc_array_add(&scene->scene.systems, &gui_loop);