diff --git a/scene_test.c b/scene_test.c index 43a3cc9..a777610 100644 --- a/scene_test.c +++ b/scene_test.c @@ -27,6 +27,7 @@ int main(void) init_assets(&engine.assets); load_from_infofile("res/assets.info", &engine.assets); init_player_creation("res/player_spr.info", &engine.assets); + init_item_creation(&engine.assets); LevelScene_t scene; scene.scene.engine = &engine; diff --git a/scenes/ent_impl.h b/scenes/ent_impl.h index 305604c..744f563 100644 --- a/scenes/ent_impl.h +++ b/scenes/ent_impl.h @@ -15,6 +15,9 @@ typedef enum EntityTag { bool init_player_creation(const char* info_file, Assets_t* assets); Entity_t* create_player(EntityManager_t* ent_manager, Assets_t* assets); + + +bool init_item_creation(Assets_t* assets); Entity_t* create_crate(EntityManager_t* ent_manager, Assets_t* assets, bool metal, ContainerItem_t item); Entity_t* create_boulder(EntityManager_t* ent_manager, Assets_t* assets); Entity_t* create_arrow(EntityManager_t* ent_manager, Assets_t* assets, uint8_t dir); diff --git a/scenes/items_ent.c b/scenes/items_ent.c index eed08f0..3f1a606 100644 --- a/scenes/items_ent.c +++ b/scenes/items_ent.c @@ -2,6 +2,16 @@ #include "constants.h" #include "raymath.h" +static SpriteRenderInfo_t item_sprite_map[2] = {0}; + +bool init_item_creation(Assets_t* assets) +{ + item_sprite_map[0].sprite = get_sprite(assets, "w_crate"); + item_sprite_map[1].sprite = get_sprite(assets, "m_crate"); + return true; +} + + Entity_t* create_crate(EntityManager_t* ent_manager, Assets_t* assets, bool metal, ContainerItem_t item) { Entity_t* p_crate = add_entity(ent_manager, CRATES_ENT_TAG); @@ -11,8 +21,15 @@ Entity_t* create_crate(EntityManager_t* ent_manager, Assets_t* assets, bool meta p_bbox->solid = true; p_bbox->fragile = !metal; + if (item == CONTAINER_EMPTY) + { + CSprite_t* p_cspr = add_component(p_crate, CSPRITE_T); + p_cspr->sprites = item_sprite_map; + p_cspr->current_idx = metal? 1 : 0; + } + CTransform_t* p_ctransform = add_component(p_crate, CTRANSFORM_COMP_T); - p_ctransform->grav_delay = 5; + p_ctransform->grav_delay = 7; p_ctransform->shape_factor = metal ? (Vector2){0.7,0.7} : (Vector2){0.8,0.8} ; add_component(p_crate, CMOVEMENTSTATE_T); add_component(p_crate, CTILECOORD_COMP_T); @@ -130,9 +147,9 @@ Entity_t* create_explosion(EntityManager_t* ent_manager, Assets_t* assets) CTransform_t* p_ctransform = add_component(p_explosion, CTRANSFORM_COMP_T); p_ctransform->movement_mode = KINEMATIC_MOVEMENT; p_ctransform->active = true; - p_ctransform->position.x -= 15; - p_ctransform->position.y -= 15; - p_hitbox->boxes[0] = (Rectangle){0, 0, TILE_SIZE + 30, TILE_SIZE + 30}; + p_ctransform->position.x -= 24; + p_ctransform->position.y -= 24; + p_hitbox->boxes[0] = (Rectangle){0, 0, TILE_SIZE + 48, TILE_SIZE + 48}; CLifeTimer_t* p_clifetimer = add_component(p_explosion, CLIFETIMER_T); p_clifetimer->life_time = 3;