using System; using System.Collections; using System.Collections.Generic; using UnityEngine; public class Inventory { public event EventHandler OnItemListChanged; private List itemList; private Item selectedItem; public Inventory() { itemList = new List(); selectedItem = null; } public void AddItem(Item item) { bool itemAlreadyInInventory = false; foreach (Item itemSlot in itemList) { if (itemSlot.Prefab == item.Prefab) { itemSlot.Increase(item.Amount); itemAlreadyInInventory = true; } } if (!itemAlreadyInInventory) itemList.Add(item); if (selectedItem == null) selectedItem = item; OnItemListChanged?.Invoke(this, EventArgs.Empty); } public void RemoveItem(Item item) { Item itemInInventory = null; foreach (Item inventoryItem in itemList) { if (inventoryItem.Prefab == item.Prefab) { inventoryItem.Decrease(item.Amount); itemInInventory = inventoryItem; } } if (itemInInventory != null && itemInInventory.IsEmpty()) { if (itemInInventory == selectedItem) selectedItem = ItemAfter(selectedItem) ?? ItemBefore(selectedItem); itemList.Remove(itemInInventory); } OnItemListChanged?.Invoke(this, EventArgs.Empty); } public List GetItemList() { return itemList; } public Item GetSelectedItem() { return selectedItem; } public Item ItemBefore(Item item) { int idx = itemList.IndexOf(item); if (idx == -1 || idx == 0) return null; return itemList[idx - 1]; } public Item ItemAfter(Item item) { int idx = itemList.IndexOf(item); if (idx == -1 || idx == itemList.Count) return null; return itemList[idx + 1]; } public void SelectPreviousItem() { Item newSelected = ItemBefore(selectedItem); if (newSelected == null) return; OnItemListChanged?.Invoke(this, EventArgs.Empty); } public void SelectNextItem() { Item newSelected = ItemAfter(selectedItem); if (newSelected == null) return; OnItemListChanged?.Invoke(this, EventArgs.Empty); } }