namespace Sasalka; public class Inventar { [Flags] public enum InventorySlot { None = 0, LeftHand = 1 << 0, // 1 RightHand = 1 << 1, // 2 Head = 1 << 2, // 4 Body = 1 << 3, // 8 Hands = 1 << 4, // 16 Bottom = 1 << 5, // 32 Feet = 1 << 6 // 64 } public List Items { get; private set; } = new(); public static bool IsInventoryOpen = false; public Dictionary EquippedItems { get; private set; } = new(); public event Action OnChanged; public event Action OnEquipped; public event Action OnUnEquipped; public void AddItem( InventoryItem item ) { Items.Add( item ); OnChanged?.Invoke(); } public void RemoveItem( InventoryItem item ) { UnEquipItem( item ); Items.Remove( item ); OnChanged?.Invoke(); } // public void EquipItem( InventoryItem item ) // { // if ( EquippedItems.ContainsValue( item ) ) // { // UnEquipItem( item ); // } // else // { // EquippedItems.Add( item.Definition.Slot, item ); // OnEquipped?.Invoke( item ); // } // } public void EquipItem( InventoryItem item ) { if ( item.Definition is not IEquipable equipable ) return; if ( EquippedItems.ContainsValue( item ) ) { UnEquipItem( item ); } else { EquippedItems[equipable.Slot] = item; OnEquipped?.Invoke( item ); } } public void UnEquipItem( InventoryItem item ) { foreach ( var kvp in EquippedItems.Where( kvp => kvp.Value == item ).ToList() ) { EquippedItems.Remove( kvp.Key ); } OnUnEquipped?.Invoke( item ); } }