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