using Assets.Scripts.Enums; 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 GameObject itemNameDescription; public GameObject itemDescription; 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) { UpdateItemContentList(); } 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(); //} //TODO: Delete this //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); // }); //} public void OnItemClick(InventorySlot inventorySlot) { //// If itemNameDescription doesn't exist or doesn't have required component, create it //if (itemNameDescription == null || itemNameDescription.GetComponent() == null) //{ // Debug.LogError("ItemNameDescription is not properly set up with ItemUIScript component"); // return; //} //// Toggle the description panel //itemNameDescription.SetActive(!itemNameDescription.activeSelf); //if (itemNameDescription.activeSelf) //{ // var itemUIScript = itemNameDescription.GetComponent(); // if (itemUIScript != null) // { // itemUIScript.InventorySlot = item.InventorySlot; // } // else // { // Debug.LogError("ItemUIScript component not found on itemNameDescription"); // } //} //// Toggle the description panel //itemNameDescription.SetActive(!itemNameDescription.activeSelf); //if (itemNameDescription.activeSelf) //{ // // Update description panel content // var nameText = itemNameDescription.transform.Find("ItemName")?.GetComponent(); // //var descriptionText = itemNameDescription.transform.Find("Description")?.GetComponent(); // itemNameDescription.GetComponent().InventorySlot = item.InventorySlot; // //if (nameText != null) nameText.text = item.InventorySlot.item.itemName; // //if (descriptionText != null) descriptionText.text = item.InventorySlot.item.itemDescription; //} if (itemNameDescription.GetComponent()?.InventorySlot?.item?.itemName == inventorySlot.item.itemName) { itemDescription.SetActive(!itemNameDescription.activeSelf); itemNameDescription.SetActive(!itemNameDescription.activeSelf); } else { itemDescription.SetActive(true); itemNameDescription.SetActive(true); } itemNameDescription.GetComponent().InventorySlot = inventorySlot; itemDescription.GetComponent().InventorySlot = inventorySlot; } 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; bool isCreated = false; // Reuse existing UI element if available if (currentIndex < itemUIs.Count) { itemUI = itemUIs[currentIndex]; //itemUI.GetComponent().InventorySlot = slot; itemUI.SetActive(true); } else { // Create new UI element if needed itemUI = Instantiate(itemUIPrefab, itemContent.transform); //itemUI.GetComponent().InventorySlot = slot; itemUIs.Add(itemUI); isCreated = true; } ItemUIScript itemUIScript = itemUI.GetComponent(); itemUIScript.InventorySlot = slot; // Add click event listener only if the itemUI was just created if (isCreated) itemUI.GetComponent