From 6bdfc2f67225beef9805c4e47fcc12c662027a8a Mon Sep 17 00:00:00 2001 From: Kristofers Solo Date: Tue, 10 Dec 2024 17:31:45 +0200 Subject: [PATCH] refactor(player): separate into 2 systems --- src/player/systems/input.rs | 28 +++++++++++ src/player/systems/mod.rs | 6 ++- src/player/systems/movement.rs | 88 ++++++++++++++++++++-------------- 3 files changed, 83 insertions(+), 39 deletions(-) create mode 100644 src/player/systems/input.rs diff --git a/src/player/systems/input.rs b/src/player/systems/input.rs new file mode 100644 index 0000000..917699f --- /dev/null +++ b/src/player/systems/input.rs @@ -0,0 +1,28 @@ +use crate::player::components::Player; +use bevy::prelude::*; +use hexx::EdgeDirection; + +const fn create_direction(key: &KeyCode) -> Option { + match key { + KeyCode::KeyD => Some(EdgeDirection::FLAT_SOUTH), + KeyCode::KeyS => Some(EdgeDirection::FLAT_NORTH_EAST), + KeyCode::KeyA => Some(EdgeDirection::FLAT_NORTH), + KeyCode::KeyQ => Some(EdgeDirection::FLAT_NORTH_WEST), + KeyCode::KeyW => Some(EdgeDirection::FLAT_SOUTH_WEST), + KeyCode::KeyE => Some(EdgeDirection::FLAT_SOUTH_EAST), + _ => None, + } +} + +pub(super) fn player_input(input: Res>, mut player_query: Query<&mut Player>) { + for mut player in player_query.iter_mut() { + if player.target_hex.is_some() { + continue; + } + + if let Some(direction) = input.get_pressed().find_map(|key| create_direction(key)) { + let next_hex = player.current_hex + direction.into_hex(); + player.target_hex = Some(next_hex); + } + } +} diff --git a/src/player/systems/mod.rs b/src/player/systems/mod.rs index fc506a3..b43f2f4 100644 --- a/src/player/systems/mod.rs +++ b/src/player/systems/mod.rs @@ -1,9 +1,11 @@ -pub mod movement; +mod input; +mod movement; pub mod spawn; use bevy::prelude::*; +use input::player_input; use movement::player_movement; pub(super) fn plugin(app: &mut App) { - app.add_systems(Update, player_movement); + app.add_systems(Update, (player_input, player_movement.after(player_input))); } diff --git a/src/player/systems/movement.rs b/src/player/systems/movement.rs index 0ff3430..3d607f4 100644 --- a/src/player/systems/movement.rs +++ b/src/player/systems/movement.rs @@ -1,52 +1,66 @@ use crate::{maze::MazeConfig, player::components::Player}; use bevy::prelude::*; -use hexx::EdgeDirection; +use hexx::Hex; -const fn create_direction(key: &KeyCode) -> Option { - match key { - KeyCode::KeyD => Some(EdgeDirection::FLAT_SOUTH), - KeyCode::KeyS => Some(EdgeDirection::FLAT_NORTH_EAST), - KeyCode::KeyA => Some(EdgeDirection::FLAT_NORTH), - KeyCode::KeyQ => Some(EdgeDirection::FLAT_NORTH_WEST), - KeyCode::KeyW => Some(EdgeDirection::FLAT_SOUTH_WEST), - KeyCode::KeyE => Some(EdgeDirection::FLAT_SOUTH_EAST), - _ => None, - } -} - -pub fn player_movement( +pub(super) fn player_movement( time: Res