From d2ab30e7a69bfe7efda63ae75812207377917bd3 Mon Sep 17 00:00:00 2001
From: miepzerino <o.skotnik@gmail.com>
Date: Sun, 30 Mar 2025 18:50:27 +0000
Subject: [PATCH] Merge branch 'Flexalon-UI-Layouts' into develop

---
 Assets/Scripts/Inventory/InventoryDisplay.cs |  163 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 163 insertions(+), 0 deletions(-)

diff --git a/Assets/Scripts/Inventory/InventoryDisplay.cs b/Assets/Scripts/Inventory/InventoryDisplay.cs
new file mode 100644
index 0000000..7ca2098
--- /dev/null
+++ b/Assets/Scripts/Inventory/InventoryDisplay.cs
@@ -0,0 +1,163 @@
+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 List<GameObject> itemUIs = new List<GameObject>();
+
+    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<Inventory>();
+        //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)
+            {
+                GenerateItemContentList();
+            }
+            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();
+    //}
+
+    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);
+        });
+    }
+
+    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;
+
+            // Reuse existing UI element if available
+            if (currentIndex < itemUIs.Count)
+            {
+                itemUI = itemUIs[currentIndex];
+                itemUI.SetActive(true);
+            }
+            else
+            {
+                // Create new UI element if needed
+                itemUI = Instantiate(itemUIPrefab, itemContent.transform);
+                itemUIs.Add(itemUI);
+            }
+
+            // 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;
+
+            currentIndex++;
+        });
+
+        // Remove any excess UI elements
+        if (currentIndex < itemUIs.Count)
+        {
+            for (int i = itemUIs.Count - 1; i >= currentIndex; i--)
+            {
+                Destroy(itemUIs[i]);
+                itemUIs.RemoveAt(i);
+            }
+        }
+    }
+
+    private void ClearItemContentList()
+    {
+        itemUIs.ForEach(itemUI =>
+        {
+            Destroy(itemUI);
+        });
+        itemUIs.Clear();
+    }
+}

--
Gitblit v1.9.3