From 73e1a886880e82dd3b956657bb02579aeac347c8 Mon Sep 17 00:00:00 2001 From: extrawurst Date: Wed, 19 Mar 2025 23:44:37 +0100 Subject: [PATCH] swap heads on gamepad --- src/controls.rs | 28 ++++++++++++++++++++++------ src/heads_ui.rs | 36 ++++++++++++++++++------------------ 2 files changed, 40 insertions(+), 24 deletions(-) diff --git a/src/controls.rs b/src/controls.rs index 3fd829f..68f26e9 100644 --- a/src/controls.rs +++ b/src/controls.rs @@ -1,3 +1,4 @@ +use crate::{heads_ui::SwapHead, shooting::TriggerState}; use bevy::{ input::{ ButtonState, @@ -7,8 +8,6 @@ use bevy::{ prelude::*, }; -use crate::shooting::TriggerState; - #[derive(Resource, Debug, Clone, Copy, Default, PartialEq)] pub struct ControlState { pub move_dir: Vec2, @@ -77,15 +76,21 @@ fn gamepad_controls( move_dir: gamepad.left_stick(), look_dir, jump: gamepad.pressed(GamepadButton::South), - view_mode: gamepad.pressed(GamepadButton::East), + view_mode: gamepad.pressed(GamepadButton::LeftTrigger2), }; - if gamepad.just_pressed(GamepadButton::North) { + if gamepad.just_pressed(GamepadButton::RightTrigger2) { commands.trigger(TriggerState::Active); } - if gamepad.just_released(GamepadButton::North) { + if gamepad.just_released(GamepadButton::RightTrigger2) { commands.trigger(TriggerState::Inactive); } + if gamepad.just_pressed(GamepadButton::LeftTrigger) { + commands.trigger(SwapHead::Left); + } + if gamepad.just_pressed(GamepadButton::RightTrigger) { + commands.trigger(SwapHead::Right); + } if controls .gamepad_state @@ -104,7 +109,11 @@ fn mouse_rotate(mut mouse: EventReader, mut controls: ResMut>, mut controls: ResMut) { +fn keyboard_controls( + mut commands: Commands, + keyboard: Res>, + mut controls: ResMut, +) { let mut direction = Vec2::ZERO; if keyboard.pressed(KeyCode::KeyW) { @@ -120,6 +129,13 @@ fn keyboard_controls(keyboard: Res>, mut controls: ResMut(); app.add_systems(Startup, setup); - app.add_systems(Update, (update, toggle_heads)); + app.add_systems(Update, update); + app.add_observer(on_swap_head); } fn setup(mut commands: Commands, asset_server: Res) { @@ -181,22 +188,15 @@ fn update( } } -fn toggle_heads( - mut commands: Commands, - mut res: ResMut, - keys: Res>, -) { - let changed = if keys.just_pressed(KeyCode::KeyE) { - res.current_slot = (res.current_slot + 1) % 5; - true - } else if keys.just_pressed(KeyCode::KeyQ) { - res.current_slot = (res.current_slot + 4) % 5; - true - } else { - false - }; - - if changed { - commands.trigger(HeadChanged(res.heads[res.current_slot].unwrap())); +fn on_swap_head(trigger: Trigger, mut commands: Commands, mut res: ResMut) { + match trigger.event() { + SwapHead::Right => { + res.current_slot = (res.current_slot + 1) % 5; + } + SwapHead::Left => { + res.current_slot = (res.current_slot + 4) % 5; + } } + + commands.trigger(HeadChanged(res.heads[res.current_slot].unwrap())); }