From 60a3a6a7012906a86546200dd038d752e163dc07 Mon Sep 17 00:00:00 2001 From: miepzerino <o.skotnik@gmail.com> Date: Mon, 31 Mar 2025 15:38:41 +0000 Subject: [PATCH] #14 added item select in inventory --- Assets/Scripts/Inventory/InventoryDisplay.cs | 97 +++++++++++++++++++++++++++++++++++++++++------- 1 files changed, 83 insertions(+), 14 deletions(-) diff --git a/Assets/Scripts/Inventory/InventoryDisplay.cs b/Assets/Scripts/Inventory/InventoryDisplay.cs index 7ca2098..a5ed7cf 100644 --- a/Assets/Scripts/Inventory/InventoryDisplay.cs +++ b/Assets/Scripts/Inventory/InventoryDisplay.cs @@ -1,3 +1,4 @@ +using Assets.Scripts.Enums; using System; using System.Collections; using System.Collections.Generic; @@ -13,6 +14,8 @@ public GameObject inventoryPanel; public GameObject itemContent; public GameObject itemUIPrefab; + public GameObject itemNameDescription; + public GameObject itemDescription; public List<GameObject> itemUIs = new List<GameObject>(); @@ -57,11 +60,11 @@ inventoryPanel.SetActive(!inventoryPanel.activeSelf); if (inventoryPanel.activeSelf) { - GenerateItemContentList(); + UpdateItemContentList(); } else { - ClearItemContentList(); + //ClearItemContentList(); } } } @@ -96,16 +99,67 @@ // GenerateItemContentList(); //} - private void GenerateItemContentList() + //TODO: Delete this + //private void GenerateItemContentList() + //{ + // inventory.items?.ForEach(slot => + // { + // GameObject itemUI = Instantiate(itemUIPrefab, itemContent.transform); + // itemUI.transform.Find("ItemName").GetComponent<TextMeshProUGUI>().text = slot.item.itemName; + // itemUI.transform.Find("ItemQuantity").GetComponent<TextMeshProUGUI>().text = slot.quantity.ToString() + "x"; + // itemUI.transform.Find("ItemIcon").GetComponent<Image>().sprite = slot.item.itemIcon; + // itemUIs.Add(itemUI); + // }); + //} + + public void OnItemClick(InventorySlot inventorySlot) { - inventory.items?.ForEach(slot => + //// If itemNameDescription doesn't exist or doesn't have required component, create it + //if (itemNameDescription == null || itemNameDescription.GetComponent<ItemUIScript>() == 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<ItemUIScript>(); + // 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<TextMeshProUGUI>(); + // //var descriptionText = itemNameDescription.transform.Find("Description")?.GetComponent<TextMeshProUGUI>(); + // itemNameDescription.GetComponent<ItemUIScript>().InventorySlot = item.InventorySlot; + // //if (nameText != null) nameText.text = item.InventorySlot.item.itemName; + // //if (descriptionText != null) descriptionText.text = item.InventorySlot.item.itemDescription; + //} + if (itemNameDescription.GetComponent<ItemUIScript>()?.InventorySlot?.item?.itemName == inventorySlot.item.itemName) { - GameObject itemUI = Instantiate(itemUIPrefab, itemContent.transform); - itemUI.transform.Find("ItemName").GetComponent<TextMeshProUGUI>().text = slot.item.itemName; - itemUI.transform.Find("ItemQuantity").GetComponent<TextMeshProUGUI>().text = slot.quantity.ToString() + "x"; - itemUI.transform.Find("ItemIcon").GetComponent<Image>().sprite = slot.item.itemIcon; - itemUIs.Add(itemUI); - }); + itemDescription.SetActive(!itemNameDescription.activeSelf); + itemNameDescription.SetActive(!itemNameDescription.activeSelf); + } + else { + itemDescription.SetActive(true); + itemNameDescription.SetActive(true); + } + itemNameDescription.GetComponent<ItemUIScript>().InventorySlot = inventorySlot; + itemDescription.GetComponent<ItemUIScript>().InventorySlot = inventorySlot; } private void UpdateItemContentList() @@ -119,24 +173,39 @@ inventory.items.ForEach(slot => { GameObject itemUI; - + bool isCreated = false; // Reuse existing UI element if available if (currentIndex < itemUIs.Count) { itemUI = itemUIs[currentIndex]; + //itemUI.GetComponent<ItemUIScript>().InventorySlot = slot; itemUI.SetActive(true); } else { // Create new UI element if needed itemUI = Instantiate(itemUIPrefab, itemContent.transform); + //itemUI.GetComponent<ItemUIScript>().InventorySlot = slot; itemUIs.Add(itemUI); + isCreated = true; + } + ItemUIScript itemUIScript = itemUI.GetComponent<ItemUIScript>(); + itemUIScript.InventorySlot = slot; + + // Add click event listener only if the itemUI was just created + if (isCreated) + itemUI.GetComponent<Button>().onClick.AddListener(() => OnItemClick(itemUIScript.InventorySlot)); + else + { + // Update the itemUIScript of the itemNameDescription panel if the item is already selected + if (itemNameDescription.GetComponent<ItemUIScript>()?.InventorySlot?.item?.itemName == slot.item.itemName) + itemNameDescription.GetComponent<ItemUIScript>().InventorySlot = slot; } // Update the UI elements - itemUI.transform.Find("ItemName").GetComponent<TextMeshProUGUI>().text = slot.item.itemName; - itemUI.transform.Find("ItemQuantity").GetComponent<TextMeshProUGUI>().text = slot.quantity.ToString() + "x"; - itemUI.transform.Find("ItemIcon").GetComponent<Image>().sprite = slot.item.itemIcon; + //itemUI.transform.Find("ItemName").GetComponent<TextMeshProUGUI>().text = slot.item.itemName; + //itemUI.transform.Find("ItemQuantity").GetComponent<TextMeshProUGUI>().text = slot.quantity.ToString() + "x"; + //itemUI.transform.Find("ItemIcon").GetComponent<Image>().sprite = slot.item.itemIcon; currentIndex++; }); -- Gitblit v1.9.3