using System; using System.Collections; using System.Collections.Generic; using TMPro; using UnityEngine; using UnityEngine.InputSystem; using UnityEngine.UI; public class InventoryDisplay : MonoBehaviour { private GameObject _playerGO; private Inventory inventory; public GameObject inventoryPanel; public GameObject itemContent; public GameObject itemUIPrefab; public List itemUIs = new List(); public GameObject PlayerGO { get { if (_playerGO == null) { _playerGO = GameObject.Find("Player"); } return _playerGO; } private set { _playerGO = value; } } private void Awake() { PlayerGO = GameObject.Find("Player"); inventory = _playerGO.GetComponent(); //originalRect = healthImage.rectTransform.rect; } private void OnEnable() { GameStateEvents.inventoryChanged += UpdateItemContentList; } private void OnDisable() { GameStateEvents.inventoryChanged -= UpdateItemContentList; } public void OnInventoryButtonPressed(InputAction.CallbackContext context) { //TODO: Delete this //if (context.started) //{ // ResumeOrPauseGame(GameManager.GameIsPaused); //} if (context.started) { inventoryPanel.SetActive(!inventoryPanel.activeSelf); if (inventoryPanel.activeSelf) { GenerateItemContentList(); } else { ClearItemContentList(); } } } //TODO: Delete this //private void ResumeOrPauseGame(bool resume) //{ // if (resume) // { // ResumeWithMenu(); // } // else // { // PauseWithMenu(); // } //} //TODO: Delete this //private void ResumeWithMenu() //{ // GameManager.ResumeGame(); // inventoryPanel.SetActive(false); // ClearItemContentList(); //} //TODO: Delete this //private void PauseWithMenu() //{ // GameManager.PauseGame(); // inventoryPanel.SetActive(true); // GenerateItemContentList(); //} private void GenerateItemContentList() { inventory.items?.ForEach(slot => { GameObject itemUI = Instantiate(itemUIPrefab, itemContent.transform); itemUI.transform.Find("ItemName").GetComponent().text = slot.item.itemName; itemUI.transform.Find("ItemQuantity").GetComponent().text = slot.quantity.ToString() + "x"; itemUI.transform.Find("ItemIcon").GetComponent().sprite = slot.item.itemIcon; itemUIs.Add(itemUI); }); } private void UpdateItemContentList() { // First, deactivate all existing itemUIs itemUIs.ForEach(itemUI => itemUI.SetActive(false)); // Keep track of which UI elements we've used int currentIndex = 0; inventory.items.ForEach(slot => { GameObject itemUI; // Reuse existing UI element if available if (currentIndex < itemUIs.Count) { itemUI = itemUIs[currentIndex]; itemUI.SetActive(true); } else { // Create new UI element if needed itemUI = Instantiate(itemUIPrefab, itemContent.transform); itemUIs.Add(itemUI); } // Update the UI elements itemUI.transform.Find("ItemName").GetComponent().text = slot.item.itemName; itemUI.transform.Find("ItemQuantity").GetComponent().text = slot.quantity.ToString() + "x"; itemUI.transform.Find("ItemIcon").GetComponent().sprite = slot.item.itemIcon; currentIndex++; }); // Remove any excess UI elements if (currentIndex < itemUIs.Count) { for (int i = itemUIs.Count - 1; i >= currentIndex; i--) { Destroy(itemUIs[i]); itemUIs.RemoveAt(i); } } } private void ClearItemContentList() { itemUIs.ForEach(itemUI => { Destroy(itemUI); }); itemUIs.Clear(); } }