Refactor for better separation of concern
Changelog: - Separate out engine-specific stuff vs game-specific stuffscene_man
parent
ee4313adbb
commit
7b3685b792
|
@ -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}
|
||||||
)
|
)
|
||||||
|
|
|
@ -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
|
|
||||||
)
|
)
|
|
@ -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
|
|
@ -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
|
||||||
|
)
|
|
@ -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
|
||||||
)
|
)
|
|
@ -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;
|
|
@ -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
|
|
@ -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);
|
||||||
|
|
Loading…
Reference in New Issue