From c4dcedd7239f8367dc5ce5d23f1ada843b6394bb Mon Sep 17 00:00:00 2001 From: Kristofers Solo Date: Sat, 4 Jan 2025 22:34:08 +0200 Subject: [PATCH] fix(floor): descend --- src/floor/components.rs | 4 -- src/floor/events.rs | 4 +- src/floor/systems/clear_events.rs | 1 - src/floor/systems/mod.rs | 1 - src/floor/systems/movement.rs | 47 +++++++++++++---------- src/floor/systems/spawn.rs | 16 ++++---- src/maze/triggers/spawn.rs | 3 +- src/player/systems/vertical_transition.rs | 6 +-- 8 files changed, 41 insertions(+), 41 deletions(-) delete mode 100644 src/floor/systems/clear_events.rs diff --git a/src/floor/components.rs b/src/floor/components.rs index 65ab700..d0b0d7a 100644 --- a/src/floor/components.rs +++ b/src/floor/components.rs @@ -8,10 +8,6 @@ pub struct Floor(pub u8); #[reflect(Component)] pub struct CurrentFloor; -#[derive(Debug, Reflect, Component)] -#[reflect(Component)] -pub struct NextFloor; - #[derive(Debug, Reflect, Component, Deref, DerefMut)] #[reflect(Component)] pub struct FloorYTarget(pub f32); diff --git a/src/floor/events.rs b/src/floor/events.rs index 11b79ab..f83c8ff 100644 --- a/src/floor/events.rs +++ b/src/floor/events.rs @@ -38,8 +38,8 @@ impl From for f32 { impl From<&TransitionFloor> for f32 { fn from(value: &TransitionFloor) -> Self { match value { - TransitionFloor::Ascend => -1., - TransitionFloor::Descend => 1., + TransitionFloor::Ascend => -1., // When ascending, floors move down + TransitionFloor::Descend => 1., // When descending, floors move up } } } diff --git a/src/floor/systems/clear_events.rs b/src/floor/systems/clear_events.rs deleted file mode 100644 index 8b13789..0000000 --- a/src/floor/systems/clear_events.rs +++ /dev/null @@ -1 +0,0 @@ - diff --git a/src/floor/systems/mod.rs b/src/floor/systems/mod.rs index 2d424d4..8428a20 100644 --- a/src/floor/systems/mod.rs +++ b/src/floor/systems/mod.rs @@ -1,4 +1,3 @@ -mod clear_events; mod despawn; mod movement; mod spawn; diff --git a/src/floor/systems/movement.rs b/src/floor/systems/movement.rs index ec8ce20..bfe1e01 100644 --- a/src/floor/systems/movement.rs +++ b/src/floor/systems/movement.rs @@ -1,7 +1,7 @@ use crate::{ constants::{FLOOR_Y_OFFSET, MOVEMENT_THRESHOLD}, floor::{ - components::{CurrentFloor, FloorYTarget, NextFloor}, + components::{CurrentFloor, Floor, FloorYTarget}, events::TransitionFloor, }, maze::components::HexMaze, @@ -35,45 +35,52 @@ pub fn move_floors( pub fn handle_floor_transition_events( mut commands: Commands, - mut maze_query: Query<(Entity, &Transform, Option<&FloorYTarget>), With>, - current_query: Query>, - next_query: Query>, + mut maze_query: Query<(Entity, &Transform, &Floor, Option<&FloorYTarget>), With>, + current_query: Query<(Entity, &Floor), With>, mut event_reader: EventReader, ) { let is_moving = maze_query .iter() - .any(|(_, _, movement_state)| movement_state.is_some()); + .any(|(_, _, _, movement_state)| movement_state.is_some()); if is_moving { return; } for event in event_reader.read() { + dbg!(&event); + let Some((current_entity, current_floor)) = current_query.get_single().ok() else { + continue; + }; + + let target_floor_num = event.next_floor_num(current_floor); + + let target_entity = maze_query + .iter() + .find(|(_, _, floor, _)| floor.0 == target_floor_num) + .map(|(entity, ..)| entity); + + let Some(target_entity) = target_entity else { + continue; + }; + let direction = event.into(); - let Some(current_entity) = current_query.get_single().ok() else { - continue; - }; - let Some(next_entity) = next_query.get_single().ok() else { - continue; - }; - - for (entity, transforms, movement_state) in maze_query.iter_mut() { + for (entity, transforms, _, movement_state) in maze_query.iter_mut() { let target_y = (FLOOR_Y_OFFSET as f32).mul_add(direction, transforms.translation.y); + dbg!(movement_state, target_y); if movement_state.is_none() { commands.entity(entity).insert(FloorYTarget(target_y)); } } - update_current_next_floor(&mut commands, current_entity, next_entity); + update_current_next_floor(&mut commands, current_entity, target_entity); break; } + event_reader.clear(); } -fn update_current_next_floor(commands: &mut Commands, current_entity: Entity, next_entity: Entity) { - commands.entity(current_entity).remove::(); - commands - .entity(next_entity) - .remove::() - .insert(CurrentFloor); +fn update_current_next_floor(commands: &mut Commands, current: Entity, target: Entity) { + commands.entity(current).remove::(); + commands.entity(target).insert(CurrentFloor); } diff --git a/src/floor/systems/spawn.rs b/src/floor/systems/spawn.rs index e2a143b..74759f1 100644 --- a/src/floor/systems/spawn.rs +++ b/src/floor/systems/spawn.rs @@ -14,22 +14,24 @@ pub(super) fn spawn_floor( mut event_reader: EventReader, mut highest_floor: ResMut, ) { - let Ok(floor) = query.get_single() else { + let Ok(current_floor) = query.get_single() else { return; }; for event in event_reader.read() { - let floor = event.next_floor_num(floor); - - if floor == 1 && *event == TransitionFloor::Descend { + if current_floor.0 == 0 && *event == TransitionFloor::Descend { warn!("Cannot descend below floor 1"); return; } - highest_floor.0 = highest_floor.0.max(floor); + let next_floor = event.next_floor_num(current_floor); + highest_floor.0 = highest_floor.0.max(next_floor); - info!("Creating level for floor {}", floor); + info!("Creating level for floor {}", next_floor); - commands.trigger(SpawnMaze { floor, ..default() }); + commands.trigger(SpawnMaze { + floor: next_floor, + ..default() + }); } } diff --git a/src/maze/triggers/spawn.rs b/src/maze/triggers/spawn.rs index afd3cb1..9ed2179 100644 --- a/src/maze/triggers/spawn.rs +++ b/src/maze/triggers/spawn.rs @@ -1,7 +1,7 @@ use super::common::generate_maze; use crate::{ constants::FLOOR_Y_OFFSET, - floor::components::{CurrentFloor, Floor, NextFloor}, + floor::components::{CurrentFloor, Floor}, maze::{ assets::MazeAssets, components::{HexMaze, MazeConfig, Tile, Wall}, @@ -56,7 +56,6 @@ pub(super) fn spawn_maze( Visibility::Visible, )) .insert_if(CurrentFloor, || *floor == 1) - .insert_if(NextFloor, || *floor != 1) .id(); let assets = MazeAssets::new(&mut meshes, &mut materials, &global_config); diff --git a/src/player/systems/vertical_transition.rs b/src/player/systems/vertical_transition.rs index f56cc07..3619443 100644 --- a/src/player/systems/vertical_transition.rs +++ b/src/player/systems/vertical_transition.rs @@ -22,16 +22,14 @@ pub fn handle_floor_transition( for current_hex in player_query.iter() { // Check for ascending if current_hex.0 == config.end_pos { - dbg!("Ascending"); + info!("Ascending"); event_writer.send(TransitionFloor::Ascend); - return; } // Check for descending if current_hex.0 == config.start_pos && floor.0 != 1 { - dbg!("Descending"); + info!("Descending"); event_writer.send(TransitionFloor::Descend); - return; } } }