From 0fb3504b81455db325945adae102702adee20212 Mon Sep 17 00:00:00 2001 From: Kristofers Solo Date: Mon, 9 Dec 2024 20:25:33 +0200 Subject: [PATCH] feat(player): add movement system --- src/maze/mod.rs | 2 +- src/player/components.rs | 6 ++-- src/player/mod.rs | 12 ++++--- src/player/systems/mod.rs | 9 +++++ src/player/systems/movement.rs | 38 +++++++++++++++++++++ src/player/{systems.rs => systems/spawn.rs} | 12 ++++--- src/screens/gameplay.rs | 4 ++- 7 files changed, 69 insertions(+), 14 deletions(-) create mode 100644 src/player/systems/mod.rs create mode 100644 src/player/systems/movement.rs rename src/player/{systems.rs => systems/spawn.rs} (79%) diff --git a/src/maze/mod.rs b/src/maze/mod.rs index d4be988..3ad26fc 100644 --- a/src/maze/mod.rs +++ b/src/maze/mod.rs @@ -15,7 +15,7 @@ pub(super) fn plugin(app: &mut App) { .add_systems(Update, handle_maze_recreation_event); } -pub fn spawn_maze(world: &mut World) { +pub fn spawn_level_command(world: &mut World) { world.insert_resource(MazePluginLoaded); world.run_system_once(systems::setup::setup); } diff --git a/src/player/components.rs b/src/player/components.rs index b31e58b..746f505 100644 --- a/src/player/components.rs +++ b/src/player/components.rs @@ -1,5 +1,7 @@ use bevy::prelude::*; -#[derive(Component, Debug, Clone, Copy, PartialEq, Eq, Default, Reflect)] +#[derive(Component, Debug, Clone, Copy, PartialEq, Default, Reflect)] #[reflect(Component)] -pub struct Player; +pub struct Player { + pub speed: f32, +} diff --git a/src/player/mod.rs b/src/player/mod.rs index fd85629..baf5698 100644 --- a/src/player/mod.rs +++ b/src/player/mod.rs @@ -1,12 +1,14 @@ mod assets; -mod components; +pub mod components; mod systems; -use bevy::prelude::*; +use bevy::{ecs::system::RunSystemOnce, prelude::*}; use components::Player; -use systems::spawn_player; pub(super) fn plugin(app: &mut App) { - app.register_type::() - .add_systems(Startup, spawn_player); + app.register_type::().add_plugins(systems::plugin); +} + +pub fn spawn_player_command(world: &mut World) { + world.run_system_once(systems::spawn::spawn_player); } diff --git a/src/player/systems/mod.rs b/src/player/systems/mod.rs new file mode 100644 index 0000000..fc506a3 --- /dev/null +++ b/src/player/systems/mod.rs @@ -0,0 +1,9 @@ +pub mod movement; +pub mod spawn; + +use bevy::prelude::*; +use movement::player_movement; + +pub(super) fn plugin(app: &mut App) { + app.add_systems(Update, player_movement); +} diff --git a/src/player/systems/movement.rs b/src/player/systems/movement.rs new file mode 100644 index 0000000..73bde06 --- /dev/null +++ b/src/player/systems/movement.rs @@ -0,0 +1,38 @@ +use bevy::prelude::*; +use hexx::{EdgeDirection, Hex}; + +use crate::{maze::MazeConfig, player::components::Player}; + +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( + time: Res