using System; using System.Collections; using System.Collections.Generic; using UnityEngine; public class Inventory : MonoBehaviour { public static Inventory Instance { get; private set; } public List items = new List(); public int maxInventorySize = 20; private void Awake() { if (Instance == null) { Instance = this; } else { Destroy(gameObject); } if (SaveSystem.isGameLoaded) { LoadInventory(); } } private void LoadInventory() { SaveDataPlayer save = SaveSystem.LoadPlayer(); if (save != null) { foreach (SaveDataInventorySlot item in save.inventoryItems) { Item loadedItem = ItemDatabase.Instance.GetItem(item.itemId); if (loadedItem != null) { items.Add(new InventorySlot(loadedItem, item.quantity)); } else { Debug.LogError($"Failed to load item with ID: {item.itemId}"); } } } } public bool AddItem(Item item, int quantity = 1) { if (items.Count >= maxInventorySize && !item.isStackable) { //TODO: Show inventory full message Debug.Log("Inventory is full"); return false; } InventorySlot existingSlot = items.Find(slot => slot.item.itemName == item.itemName); if (existingSlot != null && item.isStackable) { //Add to existing stack if (existingSlot.quantity + quantity <= item.maxStackSize) { existingSlot.quantity += quantity; } else { int remainingQuantity = item.maxStackSize - existingSlot.quantity; existingSlot.quantity = item.maxStackSize; //TODO: Show inventory overflow message Debug.Log("Inventory overflow"); existingSlot.quantity += remainingQuantity; } } else { //Add new item to inventory items.Add(new InventorySlot(item, quantity)); } GameStateEvents.inventoryChanged?.Invoke(); return true; } public void RemoveItem(Item item, int quantity = 1) { InventorySlot existingSlot = items.Find(slot => slot.item.itemName == item.itemName); if (existingSlot != null) { if (existingSlot.quantity > quantity) { existingSlot.quantity -= quantity; } else { items.Remove(existingSlot); } } GameStateEvents.inventoryChanged?.Invoke(); } } [System.Serializable] public class InventorySlot { public Item item; public int quantity; public InventorySlot(Item item, int quantity) { this.item = item; this.quantity = quantity; } }