From e9d9ffff20c497183caa211283d16f5bc8fc4eb1 Mon Sep 17 00:00:00 2001 From: En Yi Date: Tue, 16 May 2023 22:14:54 +0800 Subject: [PATCH] Refactor implementation of Crate Entity --- scenes/CMakeLists.txt | 1 + scenes/editor_scene.c | 14 ++------------ scenes/ent_impl.h | 1 + scenes/items_ent.c | 20 ++++++++++++++++++++ 4 files changed, 24 insertions(+), 12 deletions(-) create mode 100644 scenes/items_ent.c diff --git a/scenes/CMakeLists.txt b/scenes/CMakeLists.txt index d712b54..667d8de 100644 --- a/scenes/CMakeLists.txt +++ b/scenes/CMakeLists.txt @@ -1,6 +1,7 @@ add_subdirectory(engine) add_library(lib_scenes STATIC player_ent.c + items_ent.c editor_scene.c menu_scene.c game_systems.c diff --git a/scenes/editor_scene.c b/scenes/editor_scene.c index 644b4a8..20dbbd5 100644 --- a/scenes/editor_scene.c +++ b/scenes/editor_scene.c @@ -203,21 +203,11 @@ static void level_scene_render_func(Scene_t* scene) static void spawn_crate(Scene_t* scene, unsigned int tile_idx, bool metal) { LevelSceneData_t* data = &(CONTAINER_OF(scene, LevelScene_t, scene)->data); - Entity_t* p_crate = add_entity(&scene->ent_manager, CRATES_ENT_TAG); - CBBox_t* p_bbox = add_component(&scene->ent_manager, p_crate, CBBOX_COMP_T); + Entity_t* p_crate = create_crate(&scene->ent_manager, &scene->engine->assets, metal); - set_bbox(p_bbox, TILE_SIZE, TILE_SIZE); - p_bbox->solid = true; - p_bbox->fragile = !metal; - - CTransform_t* p_ctransform = add_component(&scene->ent_manager, p_crate, CTRANSFORM_COMP_T); + CTransform_t* p_ctransform = get_component(&scene->ent_manager, p_crate, CTRANSFORM_COMP_T); p_ctransform->position.x = (tile_idx % data->tilemap.width) * TILE_SIZE; p_ctransform->position.y = (tile_idx / data->tilemap.width) * TILE_SIZE; - add_component(&scene->ent_manager, p_crate, CMOVEMENTSTATE_T); - add_component(&scene->ent_manager, p_crate, CTILECOORD_COMP_T); - CHurtbox_t* p_hurtbox = add_component(&scene->ent_manager, p_crate, CHURTBOX_T); - p_hurtbox->size = p_bbox->size; - p_hurtbox->fragile = !metal; } static void toggle_block_system(Scene_t* scene) diff --git a/scenes/ent_impl.h b/scenes/ent_impl.h index 1458a1e..75ea041 100644 --- a/scenes/ent_impl.h +++ b/scenes/ent_impl.h @@ -4,5 +4,6 @@ #include "assets.h" Entity_t* create_player(EntityManager_t* ent_manager, Assets_t* assets); +Entity_t* create_crate(EntityManager_t* ent_manager, Assets_t* assets, bool metal); #endif // __ENT_IMPL_H diff --git a/scenes/items_ent.c b/scenes/items_ent.c new file mode 100644 index 0000000..df5c9bd --- /dev/null +++ b/scenes/items_ent.c @@ -0,0 +1,20 @@ +#include "ent_impl.h" +#include "constants.h" + +Entity_t* create_crate(EntityManager_t* ent_manager, Assets_t* assets, bool metal) +{ + Entity_t* p_crate = add_entity(ent_manager, CRATES_ENT_TAG); + CBBox_t* p_bbox = add_component(ent_manager, p_crate, CBBOX_COMP_T); + + set_bbox(p_bbox, TILE_SIZE, TILE_SIZE); + p_bbox->solid = true; + p_bbox->fragile = !metal; + + add_component(ent_manager, p_crate, CTRANSFORM_COMP_T); + add_component(ent_manager, p_crate, CMOVEMENTSTATE_T); + add_component(ent_manager, p_crate, CTILECOORD_COMP_T); + CHurtbox_t* p_hurtbox = add_component(ent_manager, p_crate, CHURTBOX_T); + p_hurtbox->size = p_bbox->size; + p_hurtbox->fragile = !metal; + return p_crate; +}