From d626591d0de726220cac8aeffece033c20084e6a Mon Sep 17 00:00:00 2001 From: LorrensP-2158466 Date: Sun, 6 Apr 2025 18:15:44 +0200 Subject: [PATCH] pickup item --- src/interaction/ui.rs | 11 ++++++++++- src/level_instantiation/mod.rs | 3 +++ src/player/toolbar.rs | 17 +++++++---------- 3 files changed, 20 insertions(+), 11 deletions(-) diff --git a/src/interaction/ui.rs b/src/interaction/ui.rs index 137fecb..d9a8de4 100644 --- a/src/interaction/ui.rs +++ b/src/interaction/ui.rs @@ -94,6 +94,7 @@ fn display_interaction_prompt( fn handle_pick_up( // current action mut action: Query<(&PlayerAction, &mut Item), With>, + mut item_query: Query<&mut Visibility, With>, // current interactable interaction_opportunity: Res, ) { @@ -102,6 +103,14 @@ fn handle_pick_up( }; let (action, mut item) = single_mut!(action); if *action == PlayerAction::Interact { - let _replaced = item.set_item(target); + let replaced = item.set_item(target); + if let Ok(mut vis) = item_query.get_mut(target) { + *vis = Visibility::Hidden; + } + if let Some(dropped) = replaced { + if let Ok(mut vis) = item_query.get_mut(dropped) { + *vis = Visibility::Visible; + } + } } } diff --git a/src/level_instantiation/mod.rs b/src/level_instantiation/mod.rs index e2f1c48..609a7d6 100644 --- a/src/level_instantiation/mod.rs +++ b/src/level_instantiation/mod.rs @@ -157,11 +157,13 @@ fn spawn_objects( Interact, RigidBody::Dynamic, Name::new("Id Card"), + Visibility::Visible, ItemIcon::new(image_assets.id_card.clone()), SceneRoot(asset.clone()), )) .with_children(|parent| { parent.spawn(( + Visibility::Inherited, ColliderMassProperties::Mass(10.0), Collider::cuboid(0.05, 0.05, 0.01), Transform::from_rotation(Quat::from_euler( @@ -172,6 +174,7 @@ fn spawn_objects( )), )); parent.spawn(( + Visibility::Inherited, ActiveEvents::COLLISION_EVENTS, Transform::default(), Collider::ball(0.5), // Interaction radius diff --git a/src/player/toolbar.rs b/src/player/toolbar.rs index f8eecfb..24903cf 100644 --- a/src/player/toolbar.rs +++ b/src/player/toolbar.rs @@ -2,7 +2,7 @@ use bevy::prelude::*; use bevy_egui::{EguiContexts, egui}; use std::default::Default; -use crate::{GameState, asset_loading::ImageAssets, interaction::Interact, util::single}; +use crate::{GameState, interaction::Interact, util::single}; use super::Player; @@ -40,15 +40,12 @@ fn bottom_panel( ) { let item = single!(player_item_query); let item = item.0.and_then(|id| item_query.get(id).ok()); - let (name, icon) = item.map_or_else( - || (Name::new(""), None), - |(name, handle)| { - ( - name.clone(), - Some(egui_ctx.add_image(handle.0.clone_weak())), - ) - }, - ); + let (name, icon) = item.map_or((Name::new(""), None), |(name, handle)| { + ( + name.clone(), + Some(egui_ctx.add_image(handle.0.clone_weak())), + ) + }); egui::TopBottomPanel::bottom("inventory_toolbar") .frame(egui::Frame {