diff --git a/src/floor/components.rs b/src/floor/components.rs index a44f17b..b3e8adf 100644 --- a/src/floor/components.rs +++ b/src/floor/components.rs @@ -8,6 +8,10 @@ pub struct Floor(pub u8); #[reflect(Component)] pub struct CurrentFloor; +#[derive(Debug, Reflect, Component)] +#[reflect(Component)] +pub struct NextFloor; + impl Default for Floor { fn default() -> Self { Self(1) @@ -15,11 +19,11 @@ impl Default for Floor { } impl Floor { - pub fn increase(&self) -> Self { + pub fn increased(&self) -> Self { Self(self.0.saturating_add(1)) } - pub fn decrease(&self) -> Self { + pub fn decreased(&self) -> Self { Self(self.0.saturating_sub(1).max(1)) } } @@ -36,7 +40,7 @@ mod tests { #[case(255, 255)] fn increase(#[case] input: u8, #[case] expected: u8) { let floor = Floor(input); - assert_eq!(*floor.increase(), expected); + assert_eq!(*floor.increased(), expected); } #[rstest] @@ -46,6 +50,6 @@ mod tests { #[case(255, 254)] fn decrease(#[case] input: u8, #[case] expected: u8) { let floor = Floor(input); - assert_eq!(*floor.decrease(), expected); + assert_eq!(*floor.decreased(), expected); } } diff --git a/src/floor/systems/despawn.rs b/src/floor/systems/despawn.rs index b66f570..2c77d52 100644 --- a/src/floor/systems/despawn.rs +++ b/src/floor/systems/despawn.rs @@ -1,3 +1,3 @@ use bevy::prelude::*; -pub(super) fn despawn_level(mut commands: Commands) {} +pub(super) fn despawn_floor(mut commands: Commands) {} diff --git a/src/floor/systems/mod.rs b/src/floor/systems/mod.rs index cfbd806..2c82479 100644 --- a/src/floor/systems/mod.rs +++ b/src/floor/systems/mod.rs @@ -1,14 +1,18 @@ mod despawn; +mod movement; mod spawn; use crate::maze::MazePluginLoaded; use bevy::prelude::*; -use despawn::despawn_level; +use despawn::despawn_floor; +use movement::floor_movement; use spawn::spawn_floor; pub(super) fn plugin(app: &mut App) { app.add_systems( Update, - (spawn_floor, despawn_level).run_if(resource_exists::), + (spawn_floor, despawn_floor, floor_movement) + .chain() + .run_if(resource_exists::), ); } diff --git a/src/floor/systems/movement.rs b/src/floor/systems/movement.rs new file mode 100644 index 0000000..be94014 --- /dev/null +++ b/src/floor/systems/movement.rs @@ -0,0 +1,59 @@ +use bevy::prelude::*; + +use crate::{ + floor::{ + components::{CurrentFloor, NextFloor}, + events::TransitionFloor, + }, + maze::{components::Maze, GlobalMazeConfig}, + player::components::{MovementSpeed, Player}, +}; + +pub(super) fn floor_movement( + mut commands: Commands, + mut maze_transforms: Query<(Entity, &mut Transform), With>, + current_floor: Query>, + next_floor: Query>, + player_query: Query<&MovementSpeed, With>, + time: Res