diff --git a/scenes/assets_tag.h b/scenes/assets_tag.h index 2ae622c..eeb8bd6 100644 --- a/scenes/assets_tag.h +++ b/scenes/assets_tag.h @@ -6,6 +6,7 @@ typedef enum EntityTag { ENEMY_ENT_TAG, CRATES_ENT_TAG, CHEST_ENT_TAG, + ARROW_ENT_TAG, BOULDER_ENT_TAG, LEVEL_END_TAG, DESTRUCTABLE_ENT_TAG, diff --git a/scenes/game_systems.c b/scenes/game_systems.c index 0c56111..b442ecc 100644 --- a/scenes/game_systems.c +++ b/scenes/game_systems.c @@ -282,6 +282,20 @@ void destroy_entity(Scene_t* scene, TileGrid_t* tilemap, Entity_t* p_ent) }; play_particle_emitter(&scene->part_sys, &emitter); } + else if (p_ent->m_tag == ARROW_ENT_TAG) + { + const CTransform_t* p_ctransform = get_component(p_ent, CTRANSFORM_COMP_T); + ParticleEmitter_t emitter = { + .spr = get_sprite(&scene->engine->assets, "p_arrow"), + .config = get_emitter_conf(&scene->engine->assets, "pe_burst"), + .position = p_ctransform->position, + .n_particles = 2, + .user_data = &(CONTAINER_OF(scene, LevelScene_t, scene)->data), + .update_func = &simple_particle_system_update, + }; + play_particle_emitter(&scene->part_sys, &emitter); + } + remove_entity_from_tilemap(&scene->ent_manager, tilemap, p_ent); } diff --git a/scenes/items_ent.c b/scenes/items_ent.c index fae5037..6308b69 100644 --- a/scenes/items_ent.c +++ b/scenes/items_ent.c @@ -2,7 +2,7 @@ #include "constants.h" #include "raymath.h" -static SpriteRenderInfo_t item_sprite_map[19] = {0}; +static SpriteRenderInfo_t item_sprite_map[20] = {0}; bool init_item_creation(Assets_t* assets) { @@ -28,6 +28,7 @@ bool init_item_creation(Assets_t* assets) item_sprite_map[17].sprite = get_sprite(assets, "explode"); item_sprite_map[17].offset = (Vector2){-12, -12}; item_sprite_map[18].sprite = get_sprite(assets, "chest"); + item_sprite_map[19].sprite = get_sprite(assets, "boulder"); return true; } @@ -96,12 +97,17 @@ Entity_t* create_boulder(EntityManager_t* ent_manager, Assets_t* assets) p_hurtbox->size = p_bbox->size; p_hurtbox->def = 2; p_hurtbox->damage_src = -1; + + CSprite_t* p_cspr = add_component(p_boulder, CSPRITE_T); + p_cspr->sprites = item_sprite_map; + p_cspr->current_idx = 19; + return p_boulder; } Entity_t* create_arrow(EntityManager_t* ent_manager, Assets_t* assets, uint8_t dir) { - Entity_t* p_arrow = add_entity(ent_manager, DESTRUCTABLE_ENT_TAG); + Entity_t* p_arrow = add_entity(ent_manager, ARROW_ENT_TAG); if (p_arrow == NULL) return NULL; add_component(p_arrow, CTILECOORD_COMP_T);