miepzerino
2025-04-02 7f1913677d73bc96b0a1bac649b3518e95d0fdbf
Assets/Scripts/Inventory/InventoryDisplay.cs
@@ -1,3 +1,5 @@
using Assets.Scripts.Enums;
using Assets.Scripts.Helpers;
using System;
using System.Collections;
using System.Collections.Generic;
@@ -13,6 +15,10 @@
    public GameObject inventoryPanel;
    public GameObject itemContent;
    public GameObject itemUIPrefab;
    public GameObject itemNameDescription;
    public GameObject itemDescription;
    public GameObject itemDeleteButton;
    public GameObject inventoryMaxAmount;
    public List<GameObject> itemUIs = new List<GameObject>();
@@ -54,15 +60,20 @@
        //}
        if (context.started)
        {
            inventoryPanel.SetActive(!inventoryPanel.activeSelf);
            if (inventoryPanel.activeSelf)
            {
                GenerateItemContentList();
            }
            else
            {
                ClearItemContentList();
            }
            ToggleInventoryPanel();
        }
    }
    public void ToggleInventoryPanel()
    {
        inventoryPanel.SetActive(!inventoryPanel.activeSelf);
        if (inventoryPanel.activeSelf)
        {
            UpdateItemContentList();
        }
        else
        {
            //ClearItemContentList();
        }
    }
@@ -96,20 +107,131 @@
    //    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()
    {
        UIHelper.UpdateItemMaxCountText(inventoryMaxAmount.GetComponent<TextMeshProUGUI>(), inventory.items.Count, inventory.maxInventorySize);
        // First, deactivate all existing itemUIs
        itemUIs.ForEach(itemUI => itemUI.SetActive(false));
@@ -119,24 +241,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++;
        });