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