diff --git a/src/dev_tools/ui/maze_controls.rs b/src/dev_tools/ui/maze_controls.rs index 2040541..4c3535f 100644 --- a/src/dev_tools/ui/maze_controls.rs +++ b/src/dev_tools/ui/maze_controls.rs @@ -1,7 +1,7 @@ use crate::{ floor::components::{CurrentFloor, Floor}, maze::{commands::RespawnMaze, components::MazeConfig, GlobalMazeConfig}, - player::events::RespawnPlayer, + player::commands::RespawnPlayer, screens::Screen, }; use bevy::{prelude::*, window::PrimaryWindow}; @@ -77,7 +77,7 @@ pub fn maze_controls_ui(world: &mut World) { config: maze_config, } .apply(world); - world.trigger(RespawnPlayer); + RespawnPlayer.apply(world); } } }); diff --git a/src/floor/systems/spawn.rs b/src/floor/systems/spawn.rs index d27c00f..308598b 100644 --- a/src/floor/systems/spawn.rs +++ b/src/floor/systems/spawn.rs @@ -9,7 +9,7 @@ use crate::{ maze::{commands::SpawnMaze, components::MazeConfig}, }; -pub(super) fn spawn_floor( +pub fn spawn_floor( mut commands: Commands, query: Query<(&mut Floor, &MazeConfig), (With, Without)>, mut event_reader: EventReader, diff --git a/src/hint/mod.rs b/src/hint/mod.rs index a34f165..371febd 100644 --- a/src/hint/mod.rs +++ b/src/hint/mod.rs @@ -9,5 +9,5 @@ pub(super) fn plugin(app: &mut App) { } pub fn spawn_hint_command(world: &mut World) { - let _ = world.run_system_once(systems::setup::setup); + let _ = world.run_system_once(systems::spawn::spawn_hints); } diff --git a/src/hint/systems/mod.rs b/src/hint/systems/mod.rs index 1307108..b56e322 100644 --- a/src/hint/systems/mod.rs +++ b/src/hint/systems/mod.rs @@ -1,5 +1,5 @@ mod check; -pub mod setup; +pub mod spawn; use bevy::prelude::*; use check::check_player_hints; diff --git a/src/hint/systems/setup.rs b/src/hint/systems/spawn.rs similarity index 92% rename from src/hint/systems/setup.rs rename to src/hint/systems/spawn.rs index 6b08c17..1a095a2 100644 --- a/src/hint/systems/setup.rs +++ b/src/hint/systems/spawn.rs @@ -5,7 +5,7 @@ use crate::hint::{ components::{Hint, IdleTimer}, }; -pub fn setup(mut commands: Commands, hint_assets: Res) { +pub fn spawn_hints(mut commands: Commands, hint_assets: Res) { commands.spawn(( Name::new("Movement hint"), Hint::Movement, diff --git a/src/player/commands.rs b/src/player/commands.rs new file mode 100644 index 0000000..fcebafd --- /dev/null +++ b/src/player/commands.rs @@ -0,0 +1,30 @@ +use bevy::{ecs::system::RunSystemOnce, prelude::*}; + +use super::systems::{despawn::despawn_players, respawn::respawn_player, spawn::spawn_player}; + +#[derive(Debug, Reflect)] +pub struct SpawnPlayer; + +#[derive(Debug, Reflect)] +pub struct RespawnPlayer; + +#[derive(Debug, Reflect)] +pub struct DespawnPlayer; + +impl Command for SpawnPlayer { + fn apply(self, world: &mut World) { + let _ = world.run_system_once(spawn_player); + } +} + +impl Command for RespawnPlayer { + fn apply(self, world: &mut World) { + let _ = world.run_system_once(respawn_player); + } +} + +impl Command for DespawnPlayer { + fn apply(self, world: &mut World) { + let _ = world.run_system_once(despawn_players); + } +} diff --git a/src/player/events.rs b/src/player/events.rs deleted file mode 100644 index 953c8c9..0000000 --- a/src/player/events.rs +++ /dev/null @@ -1,10 +0,0 @@ -use bevy::prelude::*; - -#[derive(Debug, Event)] -pub struct SpawnPlayer; - -#[derive(Debug, Event)] -pub struct RespawnPlayer; - -#[derive(Debug, Event)] -pub struct DespawnPlayer; diff --git a/src/player/mod.rs b/src/player/mod.rs index 6414c08..90a4592 100644 --- a/src/player/mod.rs +++ b/src/player/mod.rs @@ -1,25 +1,20 @@ mod assets; +pub mod commands; pub mod components; -pub mod events; mod systems; -mod triggers; use assets::PlayerAssets; use bevy::{ecs::system::RunSystemOnce, prelude::*}; use components::Player; -use events::{DespawnPlayer, RespawnPlayer, SpawnPlayer}; use crate::asset_tracking::LoadResource; pub(super) fn plugin(app: &mut App) { app.register_type::() .load_resource::() - .add_event::() - .add_event::() - .add_event::() - .add_plugins((triggers::plugin, systems::plugin)); + .add_plugins(systems::plugin); } pub fn spawn_player_command(world: &mut World) { - let _ = world.run_system_once(systems::setup::setup); + let _ = world.run_system_once(systems::spawn::spawn_player); } diff --git a/src/player/systems/despawn.rs b/src/player/systems/despawn.rs new file mode 100644 index 0000000..5ef6191 --- /dev/null +++ b/src/player/systems/despawn.rs @@ -0,0 +1,8 @@ +use crate::player::components::Player; +use bevy::prelude::*; + +pub fn despawn_players(mut commands: Commands, query: Query>) { + for entity in query.iter() { + commands.entity(entity).despawn_recursive(); + } +} diff --git a/src/player/systems/mod.rs b/src/player/systems/mod.rs index ae65cb4..4b15cc5 100644 --- a/src/player/systems/mod.rs +++ b/src/player/systems/mod.rs @@ -1,7 +1,9 @@ +pub mod despawn; mod input; mod movement; -pub mod setup; +pub mod respawn; mod sound_effect; +pub mod spawn; mod vertical_transition; use crate::{screens::Screen, AppSet}; diff --git a/src/player/systems/respawn.rs b/src/player/systems/respawn.rs new file mode 100644 index 0000000..2813672 --- /dev/null +++ b/src/player/systems/respawn.rs @@ -0,0 +1,7 @@ +use crate::player::commands::{DespawnPlayer, SpawnPlayer}; +use bevy::prelude::*; + +pub fn respawn_player(mut commands: Commands) { + commands.queue(DespawnPlayer); + commands.queue(SpawnPlayer); +} diff --git a/src/player/systems/setup.rs b/src/player/systems/setup.rs deleted file mode 100644 index 12157dd..0000000 --- a/src/player/systems/setup.rs +++ /dev/null @@ -1,6 +0,0 @@ -use crate::player::events::SpawnPlayer; -use bevy::prelude::*; - -pub fn setup(mut commands: Commands) { - commands.trigger(SpawnPlayer); -} diff --git a/src/player/triggers/spawn.rs b/src/player/systems/spawn.rs similarity index 92% rename from src/player/triggers/spawn.rs rename to src/player/systems/spawn.rs index 00bbdd0..636572e 100644 --- a/src/player/triggers/spawn.rs +++ b/src/player/systems/spawn.rs @@ -4,14 +4,12 @@ use crate::{ player::{ assets::{blue_material, generate_pill_mesh}, components::{CurrentPosition, Player}, - events::SpawnPlayer, }, screens::Screen, }; use bevy::prelude::*; -pub(super) fn spawn_player( - _trigger: Trigger, +pub fn spawn_player( mut commands: Commands, mut meshes: ResMut>, mut materials: ResMut>, diff --git a/src/player/triggers/despawn.rs b/src/player/triggers/despawn.rs deleted file mode 100644 index 417b572..0000000 --- a/src/player/triggers/despawn.rs +++ /dev/null @@ -1,12 +0,0 @@ -use crate::player::{components::Player, events::DespawnPlayer}; -use bevy::prelude::*; - -pub(super) fn despawn_players( - _trigger: Trigger, - mut commands: Commands, - query: Query>, -) { - for entity in query.iter() { - commands.entity(entity).despawn_recursive(); - } -} diff --git a/src/player/triggers/mod.rs b/src/player/triggers/mod.rs deleted file mode 100644 index fc1d3dc..0000000 --- a/src/player/triggers/mod.rs +++ /dev/null @@ -1,14 +0,0 @@ -mod despawn; -mod respawn; -mod spawn; - -use bevy::prelude::*; -use despawn::despawn_players; -use respawn::respawn_player; -use spawn::spawn_player; - -pub(super) fn plugin(app: &mut App) { - app.add_observer(spawn_player) - .add_observer(respawn_player) - .add_observer(despawn_players); -} diff --git a/src/player/triggers/respawn.rs b/src/player/triggers/respawn.rs deleted file mode 100644 index 6c83923..0000000 --- a/src/player/triggers/respawn.rs +++ /dev/null @@ -1,7 +0,0 @@ -use crate::player::events::{DespawnPlayer, RespawnPlayer, SpawnPlayer}; -use bevy::prelude::*; - -pub(super) fn respawn_player(_trigger: Trigger, mut commands: Commands) { - commands.trigger(DespawnPlayer); - commands.trigger(SpawnPlayer); -}