GameDesignProject1/Assets/Scripts/UI/InventoryDisplay.cs

58 lines
1.8 KiB
C#

using TMPro;
using UnityEngine;
using UnityEngine.UI;
public class InventoryDisplay : MonoBehaviour
{
private Image[] displays;
private TextMeshProUGUI[] counters;
private PlayerController player;
private RawImage background;
private void Awake()
{
Transform slotsRoot = transform.Find("Slots");
displays = new Image[slotsRoot.childCount];
counters = new TextMeshProUGUI[slotsRoot.childCount];
for (int i = 0; i < slotsRoot.childCount; i++)
{
Transform child = slotsRoot.GetChild(i);
displays[i] = child.Find("Item Display").GetComponent<Image>();
counters[i] = child.Find("Count Display").GetComponent<TextMeshProUGUI>();
}
background = GetComponent<RawImage>();
player = FindObjectOfType<PlayerController>();
}
private void Update()
{
bool active = Input.GetKey(KeyCode.E);
for (int i = 0; i < transform.childCount; i++) transform.GetChild(i).gameObject.SetActive(active);
background.enabled = active;
if (active) RefreshInventory();
}
public void RefreshInventory()
{
for (int i = 0; i < player.Inventory.MaxSpace; i++)
{
if (i >= displays.Length) break;
else if (i >= player.Inventory.ItemSlots.Count || player.Inventory.ItemSlots[i].Item == null)
{
displays[i].gameObject.SetActive(false);
counters[i].gameObject.SetActive(false);
continue;
}
displays[i].gameObject.SetActive(true);
displays[i].sprite = player.Inventory.ItemSlots[i].Item.Sprite;
counters[i].gameObject.SetActive(player.Inventory.ItemSlots[i].Count > 1);
counters[i].text = $"x{player.Inventory.ItemSlots[i].Count}";
}
}
}