This commit is contained in:
LorrensP-2158466
2025-04-06 15:49:38 +02:00
parent 4bd1f1343e
commit 2ee65798fd
5 changed files with 27 additions and 11 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

@@ -6,4 +6,5 @@
path: "meshes/library", path: "meshes/library",
), ),
"id_card": File(path: "meshes/id_card.glb") "id_card": File(path: "meshes/id_card.glb")
"id_card_toolbar": File(path: "images/id_card_toolbar.png"")
}) })

View File

@@ -50,6 +50,8 @@ pub(crate) struct ConfigAssets {}
pub(crate) struct ImageAssets { pub(crate) struct ImageAssets {
#[asset(key = "lebron")] #[asset(key = "lebron")]
pub(crate) king: Handle<Image>, pub(crate) king: Handle<Image>,
#[asset(key = "id_card_toolbar")]
pub(crate) id_card: Handle<Image>,
} }
#[derive(AssetCollection, Resource, Clone)] #[derive(AssetCollection, Resource, Clone)]

View File

@@ -38,7 +38,6 @@ fn update_interaction_opportunities(
let player = single!(player_query); let player = single!(player_query);
for event in collision_events.read() { for event in collision_events.read() {
dbg!(event);
let (e1, e2, started) = match event { let (e1, e2, started) = match event {
CollisionEvent::Started(e1, e2, CollisionEventFlags::SENSOR) => (*e1, *e2, true), CollisionEvent::Started(e1, e2, CollisionEventFlags::SENSOR) => (*e1, *e2, true),
CollisionEvent::Stopped(e1, e2, CollisionEventFlags::SENSOR) => (*e1, *e2, false), 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 == e1 => e2,
p if p == e2 => e1, p if p == e2 => e1,
_ => continue, _ => 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; continue;
}; };
if started { if started {
interaction_opportunity.0.replace(target); interaction_opportunity.0.replace(interactable);
} else { } else {
interaction_opportunity.0.take_if(|t| *t == target); interaction_opportunity.0.take_if(|t| *t == interactable);
} }
} }
} }

View File

@@ -1,14 +1,17 @@
use bevy::{prelude::*, window::PrimaryWindow}; use bevy::prelude::*;
use bevy_egui::{EguiContext, EguiContexts, egui}; use bevy_egui::{EguiContexts, egui};
use std::default::Default; use std::default::Default;
use crate::{GameState, util::single}; use crate::{GameState, asset_loading::ImageAssets, interaction::Interact, util::single};
use super::Player; use super::Player;
#[derive(Component, Default, Debug)] #[derive(Component, Default, Debug)]
pub struct Item(Option<Entity>); pub struct Item(Option<Entity>);
#[derive(Component, Default, Debug)]
pub struct ItemIcon(Handle<Image>);
impl Item { impl Item {
pub fn none() -> Self { pub fn none() -> Self {
Default::default() Default::default()
@@ -24,7 +27,13 @@ pub fn plugin(app: &mut App) {
app.add_systems(Update, bottom_panel.run_if(in_state(GameState::Playing))); app.add_systems(Update, bottom_panel.run_if(in_state(GameState::Playing)));
} }
fn bottom_panel(mut egui_ctx: EguiContexts, item_query: Query<&Item, With<Player>>) { fn bottom_panel(
mut egui_ctx: EguiContexts,
player_item_query: Query<&Item, With<Player>>,
item_query: Query<(&Name, &ItemIcon), With<Interact>>,
models: Res<Assets<Image>>,
gltf_assets: Res<ImageAssets>,
) {
egui::TopBottomPanel::bottom("inventory_toolbar") egui::TopBottomPanel::bottom("inventory_toolbar")
.frame(egui::Frame { .frame(egui::Frame {
fill: egui::Color32::from_rgba_premultiplied(0, 0, 0, 0), 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<Player
ui.add_sized([50.0, 50.0], |ui: &mut egui::Ui| { ui.add_sized([50.0, 50.0], |ui: &mut egui::Ui| {
// Display the item // Display the item
ui.vertical_centered(|ui| { ui.vertical_centered(|ui| {
let item = single!(player_item_query);
let item = item.0.and_then(|id| item_query.get(id).ok());
// Placeholder for texture - in a real app, load the texture // Placeholder for texture - in a real app, load the texture
ui.label(egui::RichText::new("🔨").size(24.0)); ui.label(egui::RichText::new("🔨").size(24.0));
// let (name, icon) = item.map_or_else((Name::new(""), ), |(name, handle)|{
// });
// Item count (display only if > 1) // Item count (display only if > 1)
ui.label( ui.label(
egui::RichText::new("LOL") egui::RichText::new("")
.color(egui::Color32::WHITE) .color(egui::Color32::WHITE)
.size(12.0), .size(12.0),
); );