sasalka/Code/Inventory/Inventar.cs
2025-06-10 02:09:21 +03:00

70 lines
1.5 KiB
C#

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<InventoryItem> Items { get; private set; } = new();
public static bool IsInventoryOpen = false;
// public Dictionary<InventorySlot, EquippedItem> EquippedItems { get; private set; } = new();
public Dictionary<InventorySlot, InventoryItem> EquippedItems { get; private set; } = new();
public event Action OnChanged;
public event Action<InventoryItem> OnEquipped;
public event Action<InventoryItem> OnUnEquipped;
// public class EquippedItem
// {
// public InventoryItem Item { get; set; }
// public GameObject SpawnedObject { get; set; }
// }
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 UnEquipItem( InventoryItem item )
{
foreach ( var kvp in EquippedItems.Where( kvp => kvp.Value == item ).ToList() )
{
EquippedItems.Remove( kvp.Key );
}
OnUnEquipped?.Invoke( item );
}
}