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);
|
LevelSceneData_t* data = &(CONTAINER_OF(scene, LevelScene_t, scene)->data);
|
||||||
Entity_t* p_crate = create_crate(&scene->ent_manager, &scene->engine->assets, metal, item);
|
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);
|
CTransform_t* p_ctransform = get_component(p_crate, CTRANSFORM_COMP_T);
|
||||||
p_ctransform->position.x = (tile_idx % data->tilemap.width) * TILE_SIZE;
|
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);
|
LevelSceneData_t* data = &(CONTAINER_OF(scene, LevelScene_t, scene)->data);
|
||||||
Entity_t* p_boulder = create_boulder(&scene->ent_manager, &scene->engine->assets);
|
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);
|
CTransform_t* p_ctransform = get_component(p_boulder, CTRANSFORM_COMP_T);
|
||||||
p_ctransform->position.x = (tile_idx % data->tilemap.width) * TILE_SIZE;
|
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)
|
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)
|
for (size_t i = 0; i < N_COMPONENTS; ++i)
|
||||||
{
|
{
|
||||||
buffer += sprintf(
|
buffer += sprintf(
|
||||||
|
|
|
@ -202,7 +202,6 @@ void player_respawn_system(Scene_t* scene)
|
||||||
LevelSceneData_t* data = &(CONTAINER_OF(scene, LevelScene_t, scene)->data);
|
LevelSceneData_t* data = &(CONTAINER_OF(scene, LevelScene_t, scene)->data);
|
||||||
TileGrid_t tilemap = data->tilemap;
|
TileGrid_t tilemap = data->tilemap;
|
||||||
Entity_t* p_player;
|
Entity_t* p_player;
|
||||||
uint8_t to_respawn = 0;
|
|
||||||
// Cannot create player while looping though the players
|
// Cannot create player while looping though the players
|
||||||
// So have to create outside of the loop
|
// So have to create outside of the loop
|
||||||
sc_map_foreach_value(&scene->ent_manager.entities_map[PLAYER_ENT_TAG], p_player)
|
sc_map_foreach_value(&scene->ent_manager.entities_map[PLAYER_ENT_TAG], p_player)
|
||||||
|
@ -210,16 +209,18 @@ void player_respawn_system(Scene_t* scene)
|
||||||
if (!p_player->m_alive)
|
if (!p_player->m_alive)
|
||||||
{
|
{
|
||||||
CTransform_t* p_ct = get_component(p_player, CTRANSFORM_COMP_T);
|
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);
|
Entity_t* ent = create_dead_player(&scene->ent_manager, &scene->engine->assets);
|
||||||
|
if (ent != NULL)
|
||||||
|
{
|
||||||
CTransform_t* new_ct = get_component(ent, CTRANSFORM_COMP_T);
|
CTransform_t* new_ct = get_component(ent, CTRANSFORM_COMP_T);
|
||||||
memcpy(&new_ct->position, &p_ct->position, sizeof(p_ct->position));
|
memcpy(&new_ct->position, &p_ct->position, sizeof(p_ct->position));
|
||||||
to_respawn++;
|
|
||||||
}
|
}
|
||||||
|
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);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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* 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);
|
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);
|
set_bbox(p_bbox, TILE_SIZE, TILE_SIZE);
|
||||||
p_bbox->solid = true;
|
p_bbox->solid = true;
|
||||||
p_bbox->fragile = !metal;
|
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* create_boulder(EntityManager_t* ent_manager, Assets_t* assets)
|
||||||
{
|
{
|
||||||
Entity_t* p_boulder = add_entity(ent_manager, BOULDER_ENT_TAG);
|
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);
|
set_bbox(p_bbox, TILE_SIZE, TILE_SIZE);
|
||||||
p_bbox->solid = true;
|
p_bbox->solid = true;
|
||||||
p_bbox->fragile = false;
|
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* 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, DESTRUCTABLE_ENT_TAG);
|
||||||
|
if (p_arrow == NULL) return NULL;
|
||||||
|
|
||||||
add_component(p_arrow, CTILECOORD_COMP_T);
|
add_component(p_arrow, CTILECOORD_COMP_T);
|
||||||
CHitBoxes_t* p_hitbox = add_component(p_arrow, CHITBOXES_T);
|
CHitBoxes_t* p_hitbox = add_component(p_arrow, CHITBOXES_T);
|
||||||
p_hitbox->n_boxes = 1;
|
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* create_bomb(EntityManager_t* ent_manager, Assets_t* assets, Vector2 launch_dir)
|
||||||
{
|
{
|
||||||
Entity_t* p_bomb = add_entity(ent_manager, DESTRUCTABLE_ENT_TAG);
|
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, CTILECOORD_COMP_T);
|
||||||
add_component(p_bomb, CMOVEMENTSTATE_T);
|
add_component(p_bomb, CMOVEMENTSTATE_T);
|
||||||
CHitBoxes_t* p_hitbox = add_component(p_bomb, CHITBOXES_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* create_explosion(EntityManager_t* ent_manager, Assets_t* assets)
|
||||||
{
|
{
|
||||||
Entity_t* p_explosion = add_entity(ent_manager, DESTRUCTABLE_ENT_TAG);
|
Entity_t* p_explosion = add_entity(ent_manager, DESTRUCTABLE_ENT_TAG);
|
||||||
|
if (p_explosion == NULL) return NULL;
|
||||||
|
|
||||||
add_component(p_explosion, CTILECOORD_COMP_T);
|
add_component(p_explosion, CTILECOORD_COMP_T);
|
||||||
CHitBoxes_t* p_hitbox = add_component(p_explosion, CHITBOXES_T);
|
CHitBoxes_t* p_hitbox = add_component(p_explosion, CHITBOXES_T);
|
||||||
p_hitbox->n_boxes = 1;
|
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* create_player(EntityManager_t* ent_manager, Assets_t* assets)
|
||||||
{
|
{
|
||||||
Entity_t* p_ent = add_entity(ent_manager, PLAYER_ENT_TAG);
|
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);
|
CBBox_t* p_bbox = add_component(p_ent, CBBOX_COMP_T);
|
||||||
|
|
||||||
set_bbox(p_bbox, PLAYER_WIDTH, PLAYER_HEIGHT);
|
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* create_dead_player(EntityManager_t* ent_manager, Assets_t* assets)
|
||||||
{
|
{
|
||||||
Entity_t* p_ent = add_entity(ent_manager, NO_ENT_TAG);
|
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);
|
CTransform_t* p_ct = add_component(p_ent, CTRANSFORM_COMP_T);
|
||||||
p_ct->active = true;
|
p_ct->active = true;
|
||||||
p_ct->shape_factor = (Vector2){1, 1};
|
p_ct->shape_factor = (Vector2){1, 1};
|
||||||
|
|
Loading…
Reference in New Issue