using Chickensoft.AutoInject; using Chickensoft.Collections; using Chickensoft.Introspection; using Godot; using System; using Zennysoft.Game.Abstractions; using Zennysoft.Game.Implementation; using Zennysoft.Ma.Adapter; namespace Zennysoft.Game.Ma; [Meta(typeof(IAutoNode))] public partial class ItemSlot : Button, IItemSlot { public override void _Notification(int what) => this.Notify(what); [Dependency] private IPlayer _player => this.DependOn(); [Node] public Label Equipped { get; set; } = default!; [Node] public TextureRect ItemTexture { get; set; } = default!; public AutoProp Item { get; } = new AutoProp(default); public event Action ItemPressed; public event Action ItemSelected; public bool IsSelected { get; set; } = false; public void OnResolved() { Item.Changed += Item_Changed; FocusEntered += ItemSlot_FocusEntered; Pressed += ItemSlot_Pressed; } public void SetItemEquipmentStatus(bool isEquipped) { if (isEquipped) Equipped.Text = "E"; else Equipped.Text = string.Empty; } private void ItemSlot_FocusEntered() => ItemSelected?.Invoke(this); private void ItemSlot_Pressed() { if (Item.Value == null) return; ItemPressed?.Invoke(this); } private void Item_Changed(InventoryItem obj) { if (obj == null) return; Text = obj.ItemName; ItemTexture.Texture = obj.GetTexture(); if (Item.Value is EquipableItem equipableItem && _player.EquipmentComponent.IsItemEquipped(equipableItem)) { Equipped.Text = "E"; } else Equipped.Text = string.Empty; } }