using System.Collections.Generic; using TMPro; using UnityEngine; using UnityEngine.UI; public class InventoryUI : Singleton { [Header("Config")] [SerializeField] private GameObject inventoryPanel; [SerializeField] private InventorySlot slotPrefab; [SerializeField] private Transform container; [Header("Description Panel")] [SerializeField] private GameObject descriptionPanel; [SerializeField] private Image itemIcon; [SerializeField] private TextMeshProUGUI itemNameTMP; [SerializeField] private TextMeshProUGUI itemDescriptionTMP; public InventorySlot CurrentSlot { get; set; } private List slotList = new List(); protected override void Awake() { base.Awake(); InitInventory(); } private void InitInventory() { for (int i = 0; i < Inventory.Instance.InventorySize; i++) { InventorySlot slot = Instantiate(slotPrefab, container); slot.Index = i; slotList.Add(slot); } } public void UseItem() { if (CurrentSlot == null) return; Inventory.Instance.UseItem(CurrentSlot.Index); } public void RemoveItem() { if (CurrentSlot == null) return; Inventory.Instance.RemoveItem(CurrentSlot.Index); } public void EquipItem() { if (CurrentSlot == null) return; Inventory.Instance.EquipItem(CurrentSlot.Index); } public void DrawItem(InventoryItem item, int index) { InventorySlot slot = slotList[index]; if (item == null) { slot.ShowSlotInformation(false); return; } slot.ShowSlotInformation(true); slot.UpdateSlot(item); } public void ShowItemDescription(int index) { if (Inventory.Instance.InventoryItems[index] == null) return; descriptionPanel.SetActive(true); itemIcon.sprite = Inventory.Instance.InventoryItems[index].Icon; itemNameTMP.text = Inventory.Instance.InventoryItems[index].Name; itemDescriptionTMP.text = Inventory.Instance.InventoryItems[index].Description; } public void OpenCloseInventory() { inventoryPanel.SetActive(!inventoryPanel.activeSelf); if (inventoryPanel.activeSelf == false) { descriptionPanel.SetActive(false); CurrentSlot = null; } } private void SlotSelectedCallback(int slotIndex) { CurrentSlot = slotList[slotIndex]; ShowItemDescription(slotIndex); } private void OnEnable() { InventorySlot.OnSlotSelectedEvent += SlotSelectedCallback; } private void OnDisable() { InventorySlot.OnSlotSelectedEvent -= SlotSelectedCallback; } }