Despawn the player when exiting the Playing state
Closes #21: Despawn player ship when exiting `GameState::Playing` I've also moved the `fn despawn<T>` utility to the lib.rs module.
This commit is contained in:
@@ -51,6 +51,7 @@ impl Plugin for AsteroidPlugin {
|
|||||||
.init_resource::<GameAssets>()
|
.init_resource::<GameAssets>()
|
||||||
.add_systems(Startup, spawn_camera)
|
.add_systems(Startup, spawn_camera)
|
||||||
.add_systems(OnEnter(GameState::Playing), objects::spawn_player)
|
.add_systems(OnEnter(GameState::Playing), objects::spawn_player)
|
||||||
|
.add_systems(OnExit(GameState::Playing), despawn::<Ship>)
|
||||||
.add_systems(
|
.add_systems(
|
||||||
FixedUpdate,
|
FixedUpdate,
|
||||||
(
|
(
|
||||||
@@ -84,6 +85,14 @@ impl Plugin for AsteroidPlugin {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Despawns entities matching the generic argument. Intended to remove UI
|
||||||
|
/// elements.
|
||||||
|
pub(crate) fn despawn<T: Component>(mut commands: Commands, to_despawn: Query<Entity, With<T>>) {
|
||||||
|
for entity in to_despawn {
|
||||||
|
commands.entity(entity).despawn();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// The game's main state tracking mechanism, registered with Bevy as a [`State`](`bevy::prelude::State`).
|
/// The game's main state tracking mechanism, registered with Bevy as a [`State`](`bevy::prelude::State`).
|
||||||
#[derive(Clone, Debug, Eq, Hash, PartialEq, States)]
|
#[derive(Clone, Debug, Eq, Hash, PartialEq, States)]
|
||||||
pub enum GameState {
|
pub enum GameState {
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ use std::ops::DerefMut;
|
|||||||
use crate::{
|
use crate::{
|
||||||
GameState,
|
GameState,
|
||||||
config::{UI_BUTTON_HOVERED, UI_BUTTON_NORMAL, UI_BUTTON_PRESSED},
|
config::{UI_BUTTON_HOVERED, UI_BUTTON_NORMAL, UI_BUTTON_PRESSED},
|
||||||
|
despawn,
|
||||||
resources::{Lives, Score},
|
resources::{Lives, Score},
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -105,14 +106,6 @@ struct CountdownText;
|
|||||||
#[derive(Component)]
|
#[derive(Component)]
|
||||||
struct CountdownBar;
|
struct CountdownBar;
|
||||||
|
|
||||||
/// Despawns entities matching the generic argument. Intended to remove UI
|
|
||||||
/// elements.
|
|
||||||
fn despawn<T: Component>(mut commands: Commands, to_despawn: Query<Entity, With<T>>) {
|
|
||||||
for entity in to_despawn {
|
|
||||||
commands.entity(entity).despawn();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Utility function for creating a standard button.
|
/// Utility function for creating a standard button.
|
||||||
fn button_bundle(text: &str) -> impl Bundle {
|
fn button_bundle(text: &str) -> impl Bundle {
|
||||||
(
|
(
|
||||||
|
|||||||
Reference in New Issue
Block a user