| | |
| | | using System; |
| | | using System.Collections; |
| | | using System.Collections.Generic; |
| | | using UnityEngine; |
| | |
| | | { |
| | | Destroy(gameObject); |
| | | } |
| | | if (SaveSystem.isGameLoaded) |
| | | { |
| | | LoadInventory(); |
| | | } |
| | | } |
| | | |
| | | private void LoadInventory() |
| | | { |
| | | SaveDataPlayer save = SaveSystemManager.Instance.GetPlayerStateFromSave(); |
| | | 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; |
| | | return true; |
| | | } |
| | | else |
| | | { |
| | | int remainingQuantity = item.maxStackSize - existingSlot.quantity; |
| | | existingSlot.quantity = item.maxStackSize; |
| | | return AddItem(item, quantity - remainingQuantity); |
| | | //TODO: Show inventory overflow message |
| | | Debug.Log("Inventory overflow"); |
| | | existingSlot.quantity += remainingQuantity; |
| | | } |
| | | |
| | | } |
| | | else |
| | | { |
| | | if (items.Count < maxInventorySize) |
| | | { |
| | | items.Add(new InventorySlot(item, quantity)); |
| | | return true; |
| | | } |
| | | return false; |
| | | //Add new item to inventory |
| | | items.Add(new InventorySlot(item, quantity)); |
| | | } |
| | | GameStateEvents.inventoryChanged?.Invoke(); |
| | | return true; |
| | | } |
| | | |
| | | public void RemoveItem(Item item, int quantity = 1) |
| | |
| | | items.Remove(existingSlot); |
| | | } |
| | | } |
| | | GameStateEvents.inventoryChanged?.Invoke(); |
| | | } |
| | | } |
| | | |