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();
|
}
|
}
|