Add null checks when creating new entity
Also, fix player spawn to reuse the playerscene_man
parent
93e3b24e40
commit
8c889690e8
|
@ -528,6 +528,7 @@ static void spawn_crate(Scene_t* scene, unsigned int tile_idx, bool metal, Conta
|
|||
{
|
||||
LevelSceneData_t* data = &(CONTAINER_OF(scene, LevelScene_t, scene)->data);
|
||||
Entity_t* p_crate = create_crate(&scene->ent_manager, &scene->engine->assets, metal, item);
|
||||
if (p_crate == NULL) return;
|
||||
|
||||
CTransform_t* p_ctransform = get_component(p_crate, CTRANSFORM_COMP_T);
|
||||
p_ctransform->position.x = (tile_idx % data->tilemap.width) * TILE_SIZE;
|
||||
|
@ -539,6 +540,7 @@ static void spawn_boulder(Scene_t* scene, unsigned int tile_idx)
|
|||
{
|
||||
LevelSceneData_t* data = &(CONTAINER_OF(scene, LevelScene_t, scene)->data);
|
||||
Entity_t* p_boulder = create_boulder(&scene->ent_manager, &scene->engine->assets);
|
||||
if (p_boulder == NULL) return;
|
||||
|
||||
CTransform_t* p_ctransform = get_component(p_boulder, CTRANSFORM_COMP_T);
|
||||
p_ctransform->position.x = (tile_idx % data->tilemap.width) * TILE_SIZE;
|
||||
|
|
|
@ -217,6 +217,7 @@ void free_component_to_mempool(ComponentEnum_t comp_type, unsigned long idx)
|
|||
|
||||
void print_mempool_stats(char* buffer)
|
||||
{
|
||||
buffer += sprintf(buffer, "Entity free: %u\n", ent_mempool.free_list.count);
|
||||
for (size_t i = 0; i < N_COMPONENTS; ++i)
|
||||
{
|
||||
buffer += sprintf(
|
||||
|
|
|
@ -202,7 +202,6 @@ void player_respawn_system(Scene_t* scene)
|
|||
LevelSceneData_t* data = &(CONTAINER_OF(scene, LevelScene_t, scene)->data);
|
||||
TileGrid_t tilemap = data->tilemap;
|
||||
Entity_t* p_player;
|
||||
uint8_t to_respawn = 0;
|
||||
// Cannot create player while looping though the players
|
||||
// So have to create outside of the loop
|
||||
sc_map_foreach_value(&scene->ent_manager.entities_map[PLAYER_ENT_TAG], p_player)
|
||||
|
@ -210,17 +209,19 @@ void player_respawn_system(Scene_t* scene)
|
|||
if (!p_player->m_alive)
|
||||
{
|
||||
CTransform_t* p_ct = get_component(p_player, CTRANSFORM_COMP_T);
|
||||
remove_entity_from_tilemap(&scene->ent_manager, &tilemap, p_player);
|
||||
Entity_t* ent = create_dead_player(&scene->ent_manager, &scene->engine->assets);
|
||||
CTransform_t* new_ct = get_component(ent, CTRANSFORM_COMP_T);
|
||||
memcpy(&new_ct->position, &p_ct->position, sizeof(p_ct->position));
|
||||
to_respawn++;
|
||||
if (ent != NULL)
|
||||
{
|
||||
CTransform_t* new_ct = get_component(ent, CTRANSFORM_COMP_T);
|
||||
memcpy(&new_ct->position, &p_ct->position, sizeof(p_ct->position));
|
||||
}
|
||||
p_player->m_alive = true;
|
||||
memset(&p_ct->position, 0, sizeof(p_ct->position));
|
||||
memset(&p_ct->velocity, 0, sizeof(p_ct->velocity));
|
||||
memset(&p_ct->accel, 0, sizeof(p_ct->accel));
|
||||
|
||||
}
|
||||
}
|
||||
if (to_respawn > 0)
|
||||
{
|
||||
create_player(&scene->ent_manager, &scene->engine->assets);
|
||||
}
|
||||
}
|
||||
|
||||
void player_dir_reset_system(Scene_t* scene)
|
||||
|
|
|
@ -34,8 +34,9 @@ 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* p_crate = add_entity(ent_manager, CRATES_ENT_TAG);
|
||||
CBBox_t* p_bbox = add_component(p_crate, CBBOX_COMP_T);
|
||||
if (p_crate == NULL) return NULL;
|
||||
|
||||
CBBox_t* p_bbox = add_component(p_crate, CBBOX_COMP_T);
|
||||
set_bbox(p_bbox, TILE_SIZE, TILE_SIZE);
|
||||
p_bbox->solid = true;
|
||||
p_bbox->fragile = !metal;
|
||||
|
@ -75,8 +76,9 @@ Entity_t* create_crate(EntityManager_t* ent_manager, Assets_t* assets, bool meta
|
|||
Entity_t* create_boulder(EntityManager_t* ent_manager, Assets_t* assets)
|
||||
{
|
||||
Entity_t* p_boulder = add_entity(ent_manager, BOULDER_ENT_TAG);
|
||||
CBBox_t* p_bbox = add_component(p_boulder, CBBOX_COMP_T);
|
||||
if (p_boulder == NULL) return NULL;
|
||||
|
||||
CBBox_t* p_bbox = add_component(p_boulder, CBBOX_COMP_T);
|
||||
set_bbox(p_bbox, TILE_SIZE, TILE_SIZE);
|
||||
p_bbox->solid = true;
|
||||
p_bbox->fragile = false;
|
||||
|
@ -99,6 +101,8 @@ 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)
|
||||
{
|
||||
Entity_t* p_arrow = add_entity(ent_manager, DESTRUCTABLE_ENT_TAG);
|
||||
if (p_arrow == NULL) return NULL;
|
||||
|
||||
add_component(p_arrow, CTILECOORD_COMP_T);
|
||||
CHitBoxes_t* p_hitbox = add_component(p_arrow, CHITBOXES_T);
|
||||
p_hitbox->n_boxes = 1;
|
||||
|
@ -143,6 +147,8 @@ Entity_t* create_arrow(EntityManager_t* ent_manager, Assets_t* assets, uint8_t d
|
|||
Entity_t* create_bomb(EntityManager_t* ent_manager, Assets_t* assets, Vector2 launch_dir)
|
||||
{
|
||||
Entity_t* p_bomb = add_entity(ent_manager, DESTRUCTABLE_ENT_TAG);
|
||||
if (p_bomb == NULL) return NULL;
|
||||
|
||||
add_component(p_bomb, CTILECOORD_COMP_T);
|
||||
add_component(p_bomb, CMOVEMENTSTATE_T);
|
||||
CHitBoxes_t* p_hitbox = add_component(p_bomb, CHITBOXES_T);
|
||||
|
@ -173,6 +179,8 @@ Entity_t* create_bomb(EntityManager_t* ent_manager, Assets_t* assets, Vector2 la
|
|||
Entity_t* create_explosion(EntityManager_t* ent_manager, Assets_t* assets)
|
||||
{
|
||||
Entity_t* p_explosion = add_entity(ent_manager, DESTRUCTABLE_ENT_TAG);
|
||||
if (p_explosion == NULL) return NULL;
|
||||
|
||||
add_component(p_explosion, CTILECOORD_COMP_T);
|
||||
CHitBoxes_t* p_hitbox = add_component(p_explosion, CHITBOXES_T);
|
||||
p_hitbox->n_boxes = 1;
|
||||
|
|
|
@ -58,6 +58,8 @@ static unsigned int player_sprite_transition_func(Entity_t* ent)
|
|||
Entity_t* create_player(EntityManager_t* ent_manager, Assets_t* assets)
|
||||
{
|
||||
Entity_t* p_ent = add_entity(ent_manager, PLAYER_ENT_TAG);
|
||||
if (p_ent == NULL) return NULL;
|
||||
|
||||
CBBox_t* p_bbox = add_component(p_ent, CBBOX_COMP_T);
|
||||
|
||||
set_bbox(p_bbox, PLAYER_WIDTH, PLAYER_HEIGHT);
|
||||
|
@ -98,6 +100,8 @@ Entity_t* create_player(EntityManager_t* ent_manager, Assets_t* assets)
|
|||
Entity_t* create_dead_player(EntityManager_t* ent_manager, Assets_t* assets)
|
||||
{
|
||||
Entity_t* p_ent = add_entity(ent_manager, NO_ENT_TAG);
|
||||
if (p_ent == NULL) return NULL;
|
||||
|
||||
CTransform_t* p_ct = add_component(p_ent, CTRANSFORM_COMP_T);
|
||||
p_ct->active = true;
|
||||
p_ct->shape_factor = (Vector2){1, 1};
|
||||
|
|
Loading…
Reference in New Issue