From edb12e4dc589e8bb4bd3753c910cce7b0c214b19 Mon Sep 17 00:00:00 2001 From: Jordan Orelli Date: Tue, 6 Sep 2022 16:44:40 -0500 Subject: [PATCH] reorganize stuff --- assets/unknown-tile.png | Bin 0 -> 3724 bytes src/input.rs | 59 ++++++++++++++++++++++++++++++++++++++++ src/main.rs | 46 ++++++++++++------------------- 3 files changed, 77 insertions(+), 28 deletions(-) create mode 100644 assets/unknown-tile.png create mode 100644 src/input.rs diff --git a/assets/unknown-tile.png b/assets/unknown-tile.png new file mode 100644 index 0000000000000000000000000000000000000000..f2746d705c4b5cb5621cb6b4737a26d8edd7203d GIT binary patch literal 3724 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 qHL|b4{_?=|2_BN3giI&gxbY7M`03hOs) { + self.clear(); + self.up.set_from(&input, KeyCode::W); + self.up.set_from(&input, KeyCode::Up); + self.left.set_from(&input, KeyCode::A); + self.left.set_from(&input, KeyCode::Left); + self.down.set_from(&input, KeyCode::S); + self.down.set_from(&input, KeyCode::Down); + self.right.set_from(&input, KeyCode::D); + self.right.set_from(&input, KeyCode::Right); + } + +} + +#[derive(Default, Debug)] +pub struct ButtonState { + pub pressed: bool, + pub held: bool, +} + +impl ButtonState { + fn release(&mut self) { + self.pressed = false; + self.held = false; + } + + fn set_from(&mut self, input: &Input, key: KeyCode) { + if input.just_pressed(key) { + self.pressed = true; + self.held = true; + } + + if input.pressed(key) { + self.held = true; + } + } +} + diff --git a/src/main.rs b/src/main.rs index 921be08..ce9fa95 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,8 +1,12 @@ +mod input; + use bevy::{ input::{keyboard::KeyCode, Input}, prelude::*, }; +use input::{PlayerInput, ButtonState}; + #[derive(Component)] struct Player; @@ -51,44 +55,29 @@ fn setup(mut commands: Commands, asset_server: Res) { } - -fn map_key(now: &Res>, key: KeyCode, handler: &mut bool) { - *handler = now.just_pressed(key); - // if now.just_pressed(key) { *handler = true; } - // if now.just_released(key) { *handler = false; } +/// player_keyboard_input is a system that maps keyboard key presses to the player's input state +fn player_keyboard_input(now: Res>, mut input_state: ResMut) { + input_state.update(&now); } -fn keyboard_input(now: Res>, mut input_state: ResMut) { - map_key(&now, KeyCode::W, &mut input_state.up); - map_key(&now, KeyCode::Up, &mut input_state.up); - - map_key(&now, KeyCode::A, &mut input_state.left); - map_key(&now, KeyCode::Left, &mut input_state.left); - - map_key(&now, KeyCode::S, &mut input_state.down); - map_key(&now, KeyCode::Down, &mut input_state.down); - - map_key(&now, KeyCode::D, &mut input_state.right); - map_key(&now, KeyCode::Right, &mut input_state.right); +fn debug_input(now: Res>, mut debug_state: ResMut) { } fn player_movement( mut query: Query<&mut Transform, With>, - input_state: Res + input_state: Res, + tile: Res, ) { let mut player_t = query.single_mut(); - if input_state.up { player_t.translation.y += 32.0; } - if input_state.down { player_t.translation.y -= 32.0; } - if input_state.left { player_t.translation.x -= 32.0; } - if input_state.right { player_t.translation.x += 32.0; } + if input_state.up.pressed { player_t.translation.y += tile.height as f32; } + if input_state.down.pressed { player_t.translation.y -= tile.height as f32; } + if input_state.left.pressed { player_t.translation.x -= tile.width as f32; } + if input_state.right.pressed { player_t.translation.x += tile.width as f32; } } #[derive(Default, Debug)] -struct PlayerInput { - up: bool, - down: bool, - left: bool, - right: bool, +struct DebugView { + enabled: bool, } fn main() { @@ -96,9 +85,10 @@ fn main() { .add_plugins(DefaultPlugins) .insert_resource(ClearColor(BACKGROUND_COLOR)) .insert_resource(PlayerInput::default()) + .insert_resource(DebugView::default()) .insert_resource(TileSize{width: TILE_WIDTH, height: TILE_HEIGHT}) .add_startup_system(setup) - .add_system(keyboard_input) + .add_system(player_keyboard_input) .add_system(player_movement) .add_system(bevy::window::close_on_esc) .run();