diff --git a/scenes/editor_scene.c b/scenes/editor_scene.c index 0b61d73..3677ba1 100644 --- a/scenes/editor_scene.c +++ b/scenes/editor_scene.c @@ -435,6 +435,7 @@ void init_level_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, &toggle_block_system); // This avoid graphical glitch, not essential diff --git a/scenes/game_systems.c b/scenes/game_systems.c index b48fd57..9b245a3 100644 --- a/scenes/game_systems.c +++ b/scenes/game_systems.c @@ -353,6 +353,22 @@ static Vector2 shift_bbox(Vector2 bbox, Vector2 new_bbox, AnchorPoint_t anchor) return offset; } +void player_respawn_system(Scene_t* scene) +{ + Entity_t* p_player; + sc_map_foreach_value(&scene->ent_manager.entities_map[PLAYER_ENT_TAG], p_player) + { + if (!p_player->m_alive) + { + p_player->m_alive = true; + CTransform_t* p_ctransform = get_component(p_player, CTRANSFORM_COMP_T); + memset(&p_ctransform->position, 0, sizeof(p_ctransform->position)); + memset(&p_ctransform->velocity, 0, sizeof(p_ctransform->velocity)); + memset(&p_ctransform->accel, 0, sizeof(p_ctransform->accel)); + } + } +} + void player_dir_reset_system(Scene_t* scene) { CPlayerState_t* p_pstate; @@ -630,9 +646,7 @@ void player_crushing_system(Scene_t* scene) if (detected == 0b11) { - memset(&p_ctransform->position, 0, sizeof(p_ctransform->position)); - memset(&p_ctransform->velocity, 0, sizeof(p_ctransform->velocity)); - memset(&p_ctransform->accel, 0, sizeof(p_ctransform->accel)); + p_player->m_alive = false; return; } @@ -651,9 +665,7 @@ void player_crushing_system(Scene_t* scene) //if (check_collision(&ent, &tilemap, false) == 1) if (detected == 0b11) { - memset(&p_ctransform->position, 0, sizeof(p_ctransform->position)); - memset(&p_ctransform->velocity, 0, sizeof(p_ctransform->velocity)); - memset(&p_ctransform->accel, 0, sizeof(p_ctransform->accel)); + p_player->m_alive = false; return; } } diff --git a/scenes/game_systems.h b/scenes/game_systems.h index 1d0783e..0e427b4 100644 --- a/scenes/game_systems.h +++ b/scenes/game_systems.h @@ -20,4 +20,5 @@ void hitbox_update_system(Scene_t* scene); void sprite_animation_system(Scene_t* scene); void camera_update_system(Scene_t* scene); void player_dir_reset_system(Scene_t* scene); +void player_respawn_system(Scene_t* scene); #endif // __GAME_SYSTEMS_H