From 65663f682f8a8834a2241ba18cd4e5da6c472614 Mon Sep 17 00:00:00 2001 From: PROMETHIA-27 <42193387+PROMETHIA-27@users.noreply.github.com> Date: Wed, 10 Dec 2025 18:31:42 -0500 Subject: [PATCH] Clientside Backpack UI (#84) --- crates/client/src/backpack/backpack_ui.rs | 4 +- crates/client/src/control/controls.rs | 31 ++--- crates/server/src/backpack/backpack_ui.rs | 128 ------------------ crates/server/src/backpack/mod.rs | 7 - crates/server/src/main.rs | 2 - crates/shared/src/backpack/backpack_ui.rs | 5 +- crates/shared/src/backpack/mod.rs | 110 ++++++++++++++- .../shared/src/control/controller_common.rs | 93 ++++--------- crates/shared/src/control/mod.rs | 21 ++- crates/shared/src/heads/mod.rs | 30 ++-- crates/shared/src/player.rs | 6 +- crates/shared/src/protocol/mod.rs | 11 +- 12 files changed, 178 insertions(+), 270 deletions(-) delete mode 100644 crates/server/src/backpack/backpack_ui.rs delete mode 100644 crates/server/src/backpack/mod.rs diff --git a/crates/client/src/backpack/backpack_ui.rs b/crates/client/src/backpack/backpack_ui.rs index 62cef1f..eedb6d5 100644 --- a/crates/client/src/backpack/backpack_ui.rs +++ b/crates/client/src/backpack/backpack_ui.rs @@ -1,7 +1,7 @@ use crate::{GameState, HEDZ_GREEN, heads::HeadsImages, loading_assets::UIAssets}; use bevy::{ecs::spawn::SpawnIter, prelude::*}; use shared::backpack::backpack_ui::{ - BackpackCountText, BackpackMarker, BackpackUiState, HEAD_SLOTS, HeadDamage, HeadImage, + BACKPACK_HEAD_SLOTS, BackpackCountText, BackpackMarker, BackpackUiState, HeadDamage, HeadImage, HeadSelector, }; @@ -25,7 +25,7 @@ fn setup(mut commands: Commands, assets: Res) { height: Val::Px(74.0), ..default() }, - Children::spawn(SpawnIter((0..HEAD_SLOTS).map({ + Children::spawn(SpawnIter((0..BACKPACK_HEAD_SLOTS).map({ let bg = assets.head_bg.clone(); let regular = assets.head_regular.clone(); let selector = assets.head_selector.clone(); diff --git a/crates/client/src/control/controls.rs b/crates/client/src/control/controls.rs index 34d1df0..55e0e30 100644 --- a/crates/client/src/control/controls.rs +++ b/crates/client/src/control/controls.rs @@ -8,9 +8,8 @@ use bevy::{ }; use shared::{ control::{ - BackpackLeftPressed, BackpackRightPressed, BackpackSwapPressed, BackpackTogglePressed, - CashHealPressed, ClientInputs, ControllerSet, Inputs, LocalInputs, LookDirMovement, - SelectLeftPressed, SelectRightPressed, + BackpackButtonPress, CashHealPressed, ClientInputs, ControllerSet, Inputs, LocalInputs, + LookDirMovement, SelectLeftPressed, SelectRightPressed, }, player::{LocalPlayer, PlayerBodyMesh}, }; @@ -98,10 +97,7 @@ fn gamepad_controls( gamepads: Query<&Gamepad>, mut inputs: Single<&mut LocalInputs>, mut look_dir: ResMut, - mut backpack_toggle_pressed: MessageWriter, - mut backpack_swap_pressed: MessageWriter, - mut backpack_left_pressed: MessageWriter, - mut backpack_right_pressed: MessageWriter, + mut backpack_inputs: MessageWriter, mut select_left_pressed: MessageWriter, mut select_right_pressed: MessageWriter, mut cash_heal_pressed: MessageWriter, @@ -139,19 +135,19 @@ fn gamepad_controls( inputs.0.trigger |= gamepad.pressed(GamepadButton::RightTrigger2); if gamepad.just_pressed(GamepadButton::DPadUp) { - backpack_toggle_pressed.write(BackpackTogglePressed); + backpack_inputs.write(BackpackButtonPress::Toggle); } if gamepad.just_pressed(GamepadButton::DPadDown) { - backpack_swap_pressed.write(BackpackSwapPressed); + backpack_inputs.write(BackpackButtonPress::Swap); } if gamepad.just_pressed(GamepadButton::DPadLeft) { - backpack_left_pressed.write(BackpackLeftPressed); + backpack_inputs.write(BackpackButtonPress::Left); } if gamepad.just_pressed(GamepadButton::DPadRight) { - backpack_right_pressed.write(BackpackRightPressed); + backpack_inputs.write(BackpackButtonPress::Right); } if gamepad.just_pressed(GamepadButton::LeftTrigger) { @@ -181,10 +177,7 @@ fn keyboard_controls( keyboard: Res>, mouse: Res>, mut inputs: Single<&mut LocalInputs>, - mut backpack_toggle_pressed: MessageWriter, - mut backpack_swap_pressed: MessageWriter, - mut backpack_left_pressed: MessageWriter, - mut backpack_right_pressed: MessageWriter, + mut backpack_inputs: MessageWriter, mut select_left_pressed: MessageWriter, mut select_right_pressed: MessageWriter, mut cash_heal_pressed: MessageWriter, @@ -209,19 +202,19 @@ fn keyboard_controls( inputs.0.trigger = mouse.pressed(MouseButton::Left); if keyboard.just_pressed(KeyCode::KeyB) { - backpack_toggle_pressed.write(BackpackTogglePressed); + backpack_inputs.write(BackpackButtonPress::Toggle); } if keyboard.just_pressed(KeyCode::Enter) { - backpack_swap_pressed.write(BackpackSwapPressed); + backpack_inputs.write(BackpackButtonPress::Swap); } if keyboard.just_pressed(KeyCode::Comma) { - backpack_left_pressed.write(BackpackLeftPressed); + backpack_inputs.write(BackpackButtonPress::Left); } if keyboard.just_pressed(KeyCode::Period) { - backpack_right_pressed.write(BackpackRightPressed); + backpack_inputs.write(BackpackButtonPress::Right); } if keyboard.just_pressed(KeyCode::KeyQ) { diff --git a/crates/server/src/backpack/backpack_ui.rs b/crates/server/src/backpack/backpack_ui.rs deleted file mode 100644 index 97614e2..0000000 --- a/crates/server/src/backpack/backpack_ui.rs +++ /dev/null @@ -1,128 +0,0 @@ -use bevy::prelude::*; -use bevy_replicon::prelude::{ClientState, FromClient, SendMode, ServerTriggerExt, ToClients}; -use shared::{ - GameState, - backpack::{ - BackbackSwapEvent, Backpack, UiHeadState, - backpack_ui::{BackpackUiState, HEAD_SLOTS}, - }, - control::{ - BackpackLeftPressed, BackpackRightPressed, BackpackSwapPressed, BackpackTogglePressed, - }, - protocol::{ClientToController, PlaySound}, -}; - -pub fn plugin(app: &mut App) { - app.add_systems( - FixedUpdate, - sync_on_change.run_if(in_state(GameState::Playing)), - ); - app.add_systems( - FixedUpdate, - swap_head_inputs.run_if(in_state(ClientState::Disconnected)), - ); -} - -#[allow(clippy::too_many_arguments)] -fn swap_head_inputs( - backpacks: Query>, - clients: ClientToController, - mut backpack_toggles: MessageReader>, - mut backpack_lefts: MessageReader>, - mut backpack_rights: MessageReader>, - mut backpack_swaps: MessageReader>, - mut commands: Commands, - mut state: Single<&mut BackpackUiState>, - time: Res