diff --git a/assets/images/id_card_toolbar.png b/assets/images/id_card_toolbar.png new file mode 100644 index 0000000..c4bb27a Binary files /dev/null and b/assets/images/id_card_toolbar.png differ diff --git a/assets/main.assets.ron b/assets/main.assets.ron index 1a7db2c..c1ceecf 100644 --- a/assets/main.assets.ron +++ b/assets/main.assets.ron @@ -6,4 +6,5 @@ path: "meshes/library", ), "id_card": File(path: "meshes/id_card.glb") + "id_card_toolbar": File(path: "images/id_card_toolbar.png"") }) diff --git a/src/asset_loading/mod.rs b/src/asset_loading/mod.rs index 5e89abf..1a1c74d 100644 --- a/src/asset_loading/mod.rs +++ b/src/asset_loading/mod.rs @@ -50,6 +50,8 @@ pub(crate) struct ConfigAssets {} pub(crate) struct ImageAssets { #[asset(key = "lebron")] pub(crate) king: Handle, + #[asset(key = "id_card_toolbar")] + pub(crate) id_card: Handle, } #[derive(AssetCollection, Resource, Clone)] diff --git a/src/interaction/ui.rs b/src/interaction/ui.rs index b126b90..137fecb 100644 --- a/src/interaction/ui.rs +++ b/src/interaction/ui.rs @@ -38,7 +38,6 @@ fn update_interaction_opportunities( let player = single!(player_query); for event in collision_events.read() { - dbg!(event); let (e1, e2, started) = match event { CollisionEvent::Started(e1, e2, CollisionEventFlags::SENSOR) => (*e1, *e2, true), CollisionEvent::Stopped(e1, e2, CollisionEventFlags::SENSOR) => (*e1, *e2, false), @@ -47,21 +46,21 @@ fn update_interaction_opportunities( } }; - let poss_target = match player { + let sensor = match player { p if p == e1 => e2, p if p == e2 => e1, _ => continue, }; - let mut ancestors = iter::once(poss_target).chain(parents.iter_ancestors(poss_target)); + let mut ancestors = iter::once(sensor).chain(parents.iter_ancestors(sensor)); - let Some(target) = ancestors.find_map(|entity| target_query.get(entity).ok()) else { + let Some(interactable) = ancestors.find_map(|entity| target_query.get(entity).ok()) else { continue; }; if started { - interaction_opportunity.0.replace(target); + interaction_opportunity.0.replace(interactable); } else { - interaction_opportunity.0.take_if(|t| *t == target); + interaction_opportunity.0.take_if(|t| *t == interactable); } } } diff --git a/src/player/toolbar.rs b/src/player/toolbar.rs index 9dcfe31..58c8f4c 100644 --- a/src/player/toolbar.rs +++ b/src/player/toolbar.rs @@ -1,14 +1,17 @@ -use bevy::{prelude::*, window::PrimaryWindow}; -use bevy_egui::{EguiContext, EguiContexts, egui}; +use bevy::prelude::*; +use bevy_egui::{EguiContexts, egui}; use std::default::Default; -use crate::{GameState, util::single}; +use crate::{GameState, asset_loading::ImageAssets, interaction::Interact, util::single}; use super::Player; #[derive(Component, Default, Debug)] pub struct Item(Option); +#[derive(Component, Default, Debug)] +pub struct ItemIcon(Handle); + impl Item { pub fn none() -> Self { Default::default() @@ -24,7 +27,13 @@ pub fn plugin(app: &mut App) { app.add_systems(Update, bottom_panel.run_if(in_state(GameState::Playing))); } -fn bottom_panel(mut egui_ctx: EguiContexts, item_query: Query<&Item, With>) { +fn bottom_panel( + mut egui_ctx: EguiContexts, + player_item_query: Query<&Item, With>, + item_query: Query<(&Name, &ItemIcon), With>, + models: Res>, + gltf_assets: Res, +) { egui::TopBottomPanel::bottom("inventory_toolbar") .frame(egui::Frame { fill: egui::Color32::from_rgba_premultiplied(0, 0, 0, 0), @@ -52,12 +61,17 @@ fn bottom_panel(mut egui_ctx: EguiContexts, item_query: Query<&Item, With 1) ui.label( - egui::RichText::new("LOL") + egui::RichText::new("") .color(egui::Color32::WHITE) .size(12.0), );