From b55bc192f403826120d4721630934f27e028edba Mon Sep 17 00:00:00 2001
From: miepzerino <o.skotnik@gmail.com>
Date: Mon, 31 Mar 2025 18:21:39 +0000
Subject: [PATCH] #28 added inventory description UI scrollbar
---
Assets/Scripts/Inventory/InventoryDisplay.cs | 158 ++++++++++++++++++++++++++++++++++++++++++++++++----
1 files changed, 144 insertions(+), 14 deletions(-)
diff --git a/Assets/Scripts/Inventory/InventoryDisplay.cs b/Assets/Scripts/Inventory/InventoryDisplay.cs
index 7ca2098..dfd4f32 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,9 @@
public GameObject inventoryPanel;
public GameObject itemContent;
public GameObject itemUIPrefab;
+ public GameObject itemNameDescription;
+ public GameObject itemDescription;
+ public GameObject itemDeleteButton;
public List<GameObject> itemUIs = new List<GameObject>();
@@ -57,11 +61,11 @@
inventoryPanel.SetActive(!inventoryPanel.activeSelf);
if (inventoryPanel.activeSelf)
{
- GenerateItemContentList();
+ UpdateItemContentList();
}
else
{
- ClearItemContentList();
+ //ClearItemContentList();
}
}
}
@@ -96,16 +100,125 @@
// 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.transform.parent.parent.parent.gameObject.SetActive(!itemNameDescription.activeSelf);
+ itemDeleteButton.SetActive(!itemNameDescription.activeSelf);
+ itemNameDescription.SetActive(!itemNameDescription.activeSelf);
+ }
+ else
+ {
+ itemDescription.transform.parent.parent.parent.gameObject.SetActive(true);
+ itemDeleteButton.SetActive(true);
+ itemNameDescription.SetActive(true);
+ }
+ itemNameDescription.GetComponent<ItemUIScript>().InventorySlot = inventorySlot;
+ itemDescription.GetComponent<ItemUIScript>().InventorySlot = inventorySlot;
+ ResetScrollbarForDescription();
+ }
+ public void OnItemDeleteClick()
+ {
+ InventorySlot inventorySlot = itemNameDescription.GetComponent<ItemUIScript>()?.InventorySlot;
+ if (inventorySlot?.item?.itemName != null)
+ {
+ inventory.RemoveItem(inventorySlot.item, inventorySlot.quantity);
+ itemNameDescription.SetActive(false);
+ itemDeleteButton.SetActive(false);
+ ResetScrollbarForDescription();
+ itemDescription.transform.parent.parent.parent.gameObject.SetActive(false);
+ }
+ }
+
+ private void ResetScrollbarForDescription()
+ {
+ //var scrollRect = itemDescription.transform.parent.parent.GetComponent<ScrollRect>();
+ //if (scrollRect != null)
+ //{
+ // // Reset the scroll position
+ // scrollRect.normalizedPosition = Vector2.one; // (1,1) = top, (0,0) = bottom
+
+ // // Force the scroll view to refresh its layout
+ // LayoutRebuilder.ForceRebuildLayoutImmediate(scrollRect.content);
+
+ // // Reset the content's position
+ // var content = itemDescription.transform.Find("ItemTextDescription");
+ // if (content != null)
+ // {
+ // RectTransform rectTransform = content.GetComponent<RectTransform>();
+ // if (rectTransform != null)
+ // {
+ // rectTransform.anchoredPosition = Vector2.zero;
+ // }
+ // }
+ //}
+ // Reset the scroll position
+ var scrollrect = itemDescription.transform.parent.parent.GetComponent<ScrollRect>();
+ if (scrollrect != null)
+ {
+ Debug.Log("Resetting scroll position");
+ scrollrect.verticalNormalizedPosition = 1; // 0 = top, 1 = bottom
+ }
+ // Reset the content's position
+ // transform.Find("ItemTextDescription")
+ //var content = itemDescription.transform.Find("ItemTextDescription");
+ //if (content != null)
+ //{
+ // RectTransform rectTransform = content.GetComponent<RectTransform>();
+ // if (rectTransform != null)
+ // {
+ // rectTransform.anchoredPosition = Vector2.zero;
+ // }
+ //}
}
private void UpdateItemContentList()
@@ -119,24 +232,41 @@
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.10.0