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