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, &camera_update_system);
|
||||||
sc_array_add(&scene->scene.systems, &player_dir_reset_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, &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, &player_respawn_system);
|
||||||
sc_array_add(&scene->scene.systems, &level_end_detection_system);
|
sc_array_add(&scene->scene.systems, &level_end_detection_system);
|
||||||
sc_array_add(&scene->scene.systems, &render_editor_game_scene);
|
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, &sprite_animation_system);
|
||||||
sc_array_add(&scene->scene.systems, &camera_update_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_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, &update_water_runner_system);
|
||||||
sc_array_add(&scene->scene.systems, &render_regular_game_scene);
|
sc_array_add(&scene->scene.systems, &render_regular_game_scene);
|
||||||
sc_array_add(&scene->scene.systems, &level_scene_render_func);
|
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);
|
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)
|
void player_respawn_system(Scene_t* scene)
|
||||||
{
|
{
|
||||||
Entity_t* p_player;
|
Entity_t* p_player;
|
||||||
|
@ -237,14 +258,10 @@ 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);
|
|
||||||
Entity_t* ent = create_dead_player(&scene->ent_manager);
|
Entity_t* new_player = create_player(&scene->ent_manager);
|
||||||
if (ent != NULL)
|
CTransform_t* p_ct = get_component(new_player, CTRANSFORM_COMP_T);
|
||||||
{
|
new_player->position = p_player->spawn_pos;
|
||||||
ent->position = p_player->position;
|
|
||||||
}
|
|
||||||
p_player->m_alive = true;
|
|
||||||
p_player->position = p_player->spawn_pos;
|
|
||||||
memset(&p_ct->velocity, 0, sizeof(p_ct->velocity));
|
memset(&p_ct->velocity, 0, sizeof(p_ct->velocity));
|
||||||
memset(&p_ct->accel, 0, sizeof(p_ct->accel));
|
memset(&p_ct->accel, 0, sizeof(p_ct->accel));
|
||||||
}
|
}
|
||||||
|
@ -507,6 +524,7 @@ void player_crushing_system(Scene_t* scene)
|
||||||
Entity_t* p_player;
|
Entity_t* p_player;
|
||||||
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)
|
||||||
{
|
{
|
||||||
|
// TODO: Use BBox for crushing check only if not noclip
|
||||||
CBBox_t* p_bbox = get_component(p_player, CBBOX_COMP_T);
|
CBBox_t* p_bbox = get_component(p_player, CBBOX_COMP_T);
|
||||||
|
|
||||||
uint8_t edges = check_bbox_edges(
|
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 container_destroy_system(Scene_t* scene);
|
||||||
void player_dir_reset_system(Scene_t* scene);
|
void player_dir_reset_system(Scene_t* scene);
|
||||||
void player_respawn_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 lifetimer_update_system(Scene_t* scene);
|
||||||
void airtimer_update_system(Scene_t* scene);
|
void airtimer_update_system(Scene_t* scene);
|
||||||
void spike_collision_system(Scene_t* scene);
|
void spike_collision_system(Scene_t* scene);
|
||||||
|
|
Loading…
Reference in New Issue