ui: Unfinished item rotating

This commit is contained in:
Alexey 2026-03-12 10:32:55 +03:00
commit 55c4e3a1d1
3 changed files with 77 additions and 4 deletions

View file

@ -2,7 +2,7 @@ use std::f32::consts::FRAC_PI_2;
use bevy::prelude::*;
use crate::{inventory::{ActiveInventory, Inventory, item::Item}, ui::{UiRoot, WindowSize}};
use crate::{inventory::{ActiveInventory, Inventory, item::Item}, ui::{UiRoot, UiRotateEvent, WindowSize}};
const UI_SLOT_ASSET_PATH: &'static str = "sprites/ui/inventory_slot.png";
const TEMP_ITEM_PATH: &'static str = "sprites/items/choco_bar.png";
@ -19,6 +19,9 @@ pub struct UiInventorySlot(UVec2);
#[require(Node, ImageNode)]
pub struct UiItem(Entity);
#[derive(Component)]
pub struct HoveredItem(Entity);
fn on_slot_over(e: On<Pointer<Over>>, mut query: Query<&mut ImageNode, With<UiInventorySlot>>) {
if let Ok(mut image) = query.get_mut(e.event_target()) {
image.color = Color::WHITE.darker(0.3);
@ -31,6 +34,18 @@ fn on_slot_out(e: On<Pointer<Out>>, mut query: Query<&mut ImageNode, With<UiInve
}
}
fn on_item_over(e: On<Pointer<Over>>, mut commands: Commands, query: Query<Entity, With<UiItem>>) {
if let Ok(_) = query.get(e.event_target()) {
commands.entity(e.event_target()).insert(HoveredItem(e.event_target()));
}
}
fn on_item_out(e: On<Pointer<Out>>, mut commands: Commands, query: Query<Entity, With<UiItem>>) {
if let Ok(_) = query.get(e.event_target()) {
commands.entity(e.event_target()).remove::<HoveredItem>();
}
}
fn on_item_drag(e: On<Pointer<Drag>>, mut query: Query<&mut UiTransform, With<UiItem>>) {
if let Ok(mut transform) = query.get_mut(e.event_target()) {
transform.translation = Val2::px(e.distance.x, e.distance.y);
@ -80,6 +95,30 @@ fn on_item_drag_drop(
}
}
fn on_ui_rotate(
event: On<UiRotateEvent>,
item_query: Query<&Item>,
mut mut_item_query: Query<(&ChildOf, &mut Item)>,
inventory_query: Query<(&Inventory, Option<&Children>)>,
ui_item_query: Query<(&mut UiItem, &mut Node), With<HoveredItem>>,
) {
for (mut ui_item, mut node) in ui_item_query {
let Ok((item_parent, mut mut_item)) = mut_item_query.get_mut(ui_item.0) else {
continue;
};
let Ok((inventory, children)) = inventory_query.get(item_parent.0) else {
continue;
};
let children = match children {
Some(children) => &children[..],
None => &[],
};
// TODO
}
}
fn ui_inventory_bundle(
inventory: &Inventory,
inventory_entity: Entity,
@ -223,6 +262,8 @@ pub fn setup_ui_inventory(
.find(|(i, _)| i.position.unwrap_or_default() == UVec2::new(x, y)) {
slot_commands.with_children(|commands| {
commands.spawn(ui_item_bundle(item, *entity, temp_item_image.clone()))
.observe(on_item_over)
.observe(on_item_out)
.observe(on_item_drag)
.observe(on_item_drag_end);
});