Decouple player dead and respawn system
parent
2461244f6b
commit
e762f62f40
|
@ -1296,6 +1296,7 @@ void init_sandbox_scene(LevelScene_t* scene)
|
|||
sc_array_add(&scene->scene.systems, &camera_update_system);
|
||||
sc_array_add(&scene->scene.systems, &player_dir_reset_system);
|
||||
sc_array_add(&scene->scene.systems, &update_water_runner_system);
|
||||
sc_array_add(&scene->scene.systems, &check_player_dead_system);
|
||||
sc_array_add(&scene->scene.systems, &player_respawn_system);
|
||||
sc_array_add(&scene->scene.systems, &level_end_detection_system);
|
||||
sc_array_add(&scene->scene.systems, &render_editor_game_scene);
|
||||
|
|
|
@ -471,7 +471,8 @@ void init_game_scene(LevelScene_t* scene)
|
|||
sc_array_add(&scene->scene.systems, &sprite_animation_system);
|
||||
sc_array_add(&scene->scene.systems, &camera_update_system);
|
||||
sc_array_add(&scene->scene.systems, &player_dir_reset_system);
|
||||
sc_array_add(&scene->scene.systems, &player_respawn_system);
|
||||
sc_array_add(&scene->scene.systems, &check_player_dead_system);
|
||||
//sc_array_add(&scene->scene.systems, &player_respawn_system);
|
||||
sc_array_add(&scene->scene.systems, &update_water_runner_system);
|
||||
sc_array_add(&scene->scene.systems, &render_regular_game_scene);
|
||||
sc_array_add(&scene->scene.systems, &level_scene_render_func);
|
||||
|
|
|
@ -228,6 +228,27 @@ void destroy_entity(Scene_t* scene, TileGrid_t* tilemap, Entity_t* p_ent)
|
|||
remove_entity_from_tilemap(&scene->ent_manager, tilemap, p_ent);
|
||||
}
|
||||
|
||||
void check_player_dead_system(Scene_t* scene)
|
||||
{
|
||||
LevelSceneData_t* data = &(CONTAINER_OF(scene, LevelScene_t, scene)->data);
|
||||
TileGrid_t tilemap = data->tilemap;
|
||||
Entity_t* p_player;
|
||||
// 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)
|
||||
{
|
||||
if (!p_player->m_alive)
|
||||
{
|
||||
Entity_t* ent = create_dead_player(&scene->ent_manager);
|
||||
if (ent != NULL)
|
||||
{
|
||||
ent->position = p_player->position;
|
||||
}
|
||||
destroy_entity(scene, &data->tilemap, p_player);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void player_respawn_system(Scene_t* scene)
|
||||
{
|
||||
Entity_t* p_player;
|
||||
|
@ -237,14 +258,10 @@ void player_respawn_system(Scene_t* scene)
|
|||
{
|
||||
if (!p_player->m_alive)
|
||||
{
|
||||
CTransform_t* p_ct = get_component(p_player, CTRANSFORM_COMP_T);
|
||||
Entity_t* ent = create_dead_player(&scene->ent_manager);
|
||||
if (ent != NULL)
|
||||
{
|
||||
ent->position = p_player->position;
|
||||
}
|
||||
p_player->m_alive = true;
|
||||
p_player->position = p_player->spawn_pos;
|
||||
|
||||
Entity_t* new_player = create_player(&scene->ent_manager);
|
||||
CTransform_t* p_ct = get_component(new_player, CTRANSFORM_COMP_T);
|
||||
new_player->position = p_player->spawn_pos;
|
||||
memset(&p_ct->velocity, 0, sizeof(p_ct->velocity));
|
||||
memset(&p_ct->accel, 0, sizeof(p_ct->accel));
|
||||
}
|
||||
|
@ -507,6 +524,7 @@ void player_crushing_system(Scene_t* scene)
|
|||
Entity_t* p_player;
|
||||
sc_map_foreach_value(&scene->ent_manager.entities_map[PLAYER_ENT_TAG], p_player)
|
||||
{
|
||||
// TODO: Use BBox for crushing check only if not noclip
|
||||
CBBox_t* p_bbox = get_component(p_player, CBBOX_COMP_T);
|
||||
|
||||
uint8_t edges = check_bbox_edges(
|
||||
|
|
|
@ -23,6 +23,7 @@ void camera_update_system(Scene_t* scene);
|
|||
void container_destroy_system(Scene_t* scene);
|
||||
void player_dir_reset_system(Scene_t* scene);
|
||||
void player_respawn_system(Scene_t* scene);
|
||||
void check_player_dead_system(Scene_t* scene);
|
||||
void lifetimer_update_system(Scene_t* scene);
|
||||
void airtimer_update_system(Scene_t* scene);
|
||||
void spike_collision_system(Scene_t* scene);
|
||||
|
|
Loading…
Reference in New Issue