diff --git a/src/dev_tools/ui/maze_controls.rs b/src/dev_tools/ui/maze_controls.rs index 6f68b9a..4c64dfc 100644 --- a/src/dev_tools/ui/maze_controls.rs +++ b/src/dev_tools/ui/maze_controls.rs @@ -1,7 +1,8 @@ use crate::{ floor::components::{CurrentFloor, Floor}, - maze::{components::MazeConfig, events::RespawnMaze, GlobalMazeConfig, MazePluginLoaded}, + maze::{components::MazeConfig, events::RespawnMaze, GlobalMazeConfig}, player::events::RespawnPlayer, + screens::Screen, }; use bevy::{prelude::*, window::PrimaryWindow}; use bevy_egui::{ @@ -13,8 +14,11 @@ use rand::{thread_rng, Rng}; use std::ops::RangeInclusive; pub fn maze_controls_ui(world: &mut World) { - if world.get_resource::().is_none() { - return; + if let Some(state) = world.get_resource::>() { + // Check if the current state is NOT Gameplay + if *state.get() != Screen::Gameplay { + return; + } } let Ok(egui_context) = world diff --git a/src/floor/systems/mod.rs b/src/floor/systems/mod.rs index 43c50b2..5243719 100644 --- a/src/floor/systems/mod.rs +++ b/src/floor/systems/mod.rs @@ -2,7 +2,7 @@ mod despawn; mod movement; mod spawn; -use crate::maze::MazePluginLoaded; +use crate::screens::Screen; use bevy::prelude::*; use despawn::despawn_floor; use movement::{handle_floor_transition_events, move_floors}; @@ -18,6 +18,6 @@ pub(super) fn plugin(app: &mut App) { move_floors, ) .chain() - .run_if(resource_exists::), + .run_if(in_state(Screen::Gameplay)), ); } diff --git a/src/maze/mod.rs b/src/maze/mod.rs index b2a30e2..e8f9481 100644 --- a/src/maze/mod.rs +++ b/src/maze/mod.rs @@ -9,7 +9,7 @@ pub mod triggers; use bevy::{ecs::system::RunSystemOnce, prelude::*}; use components::HexMaze; use events::{DespawnMaze, RespawnMaze, SpawnMaze}; -pub use resources::{GlobalMazeConfig, MazePluginLoaded}; +pub use resources::GlobalMazeConfig; pub(super) fn plugin(app: &mut App) { app.init_resource::() @@ -22,5 +22,4 @@ pub(super) fn plugin(app: &mut App) { pub fn spawn_level_command(world: &mut World) { let _ = world.run_system_once(systems::setup::setup); - world.insert_resource(MazePluginLoaded); } diff --git a/src/maze/resources.rs b/src/maze/resources.rs index 7aeee09..190ec8b 100644 --- a/src/maze/resources.rs +++ b/src/maze/resources.rs @@ -1,9 +1,5 @@ use bevy::prelude::*; -#[derive(Debug, Default, Reflect, Resource)] -#[reflect(Resource)] -pub struct MazePluginLoaded; - #[derive(Debug, Reflect, Resource, Clone)] #[reflect(Resource)] pub struct GlobalMazeConfig { diff --git a/src/maze/triggers/spawn.rs b/src/maze/triggers/spawn.rs index b9b930f..c8ab16d 100644 --- a/src/maze/triggers/spawn.rs +++ b/src/maze/triggers/spawn.rs @@ -8,6 +8,7 @@ use crate::{ events::SpawnMaze, resources::GlobalMazeConfig, }, + screens::Screen, theme::palette::rose_pine::RosePineDawn, }; @@ -53,6 +54,7 @@ pub(crate) fn spawn_maze( config.clone(), Transform::from_translation(Vec3::ZERO.with_y(y_offset)), Visibility::Visible, + StateScoped(Screen::Gameplay), )) .insert_if(CurrentFloor, || *floor == 1) .id(); diff --git a/src/player/systems/mod.rs b/src/player/systems/mod.rs index c71e33d..9e892ea 100644 --- a/src/player/systems/mod.rs +++ b/src/player/systems/mod.rs @@ -3,7 +3,7 @@ mod movement; pub mod setup; mod vertical_transition; -use crate::maze::MazePluginLoaded; +use crate::screens::Screen; use bevy::prelude::*; use input::player_input; use movement::player_movement; @@ -17,6 +17,6 @@ pub(super) fn plugin(app: &mut App) { player_movement.after(player_input), handle_floor_transition, ) - .run_if(resource_exists::), + .run_if(in_state(Screen::Gameplay)), ); } diff --git a/src/player/triggers/spawn.rs b/src/player/triggers/spawn.rs index 5c77171..00bbdd0 100644 --- a/src/player/triggers/spawn.rs +++ b/src/player/triggers/spawn.rs @@ -6,6 +6,7 @@ use crate::{ components::{CurrentPosition, Player}, events::SpawnPlayer, }, + screens::Screen, }; use bevy::prelude::*; @@ -34,5 +35,6 @@ pub(super) fn spawn_player( Mesh3d(meshes.add(generate_pill_mesh(player_radius, player_height / 2.))), MeshMaterial3d(materials.add(blue_material())), Transform::from_xyz(start_pos.x, y_offset, start_pos.y), + StateScoped(Screen::Gameplay), )); }