Refactor implementation of Crate Entity

scene_man
En Yi 2023-05-16 22:14:54 +08:00
parent 3580209f71
commit e9d9ffff20
4 changed files with 24 additions and 12 deletions

View File

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

View File

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

View File

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

20
scenes/items_ent.c 100644
View File

@ -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;
}