73 lines
2.2 KiB
C#
73 lines
2.2 KiB
C#
using System;
|
|
using UnityEngine;
|
|
using UnityEngine.UIElements;
|
|
|
|
internal class SlotInfo
|
|
{
|
|
public VisualElement slotElement { get; private set; }
|
|
public Label amountLabel { get; private set; }
|
|
|
|
public SlotInfo(VisualElement slotElement)
|
|
{
|
|
this.slotElement = slotElement;
|
|
amountLabel = slotElement.Q<Label>(className: "amount");
|
|
}
|
|
}
|
|
|
|
[RequireComponent(typeof(UIDocument))]
|
|
[RequireComponent(typeof(ResourceStorage))]
|
|
public class ResourceStorageView : MonoBehaviour
|
|
{
|
|
private UIDocument uiDocument;
|
|
private ResourceStorage storage;
|
|
|
|
private SlotInfo metalSlot;
|
|
private SlotInfo electronicsSlot;
|
|
private SlotInfo energySlot;
|
|
private SlotInfo moneySlot;
|
|
|
|
void OnEnable()
|
|
{
|
|
storage = GetComponent<ResourceStorage>();
|
|
storage.RegisterOnChangeCallback(OnStorageChange);
|
|
}
|
|
|
|
void OnDisable()
|
|
{
|
|
storage.UnregisterOnChangeCallback(OnStorageChange);
|
|
}
|
|
|
|
private void OnStorageChange()
|
|
{
|
|
UpdateVisuals();
|
|
}
|
|
|
|
// Start is called once before the first execution of Update after the MonoBehaviour is created
|
|
void Start()
|
|
{
|
|
uiDocument = GetComponent<UIDocument>();
|
|
var rootElement = uiDocument.rootVisualElement;
|
|
|
|
metalSlot = new SlotInfo(rootElement.Q<VisualElement>("MetalSlot"));
|
|
electronicsSlot = new SlotInfo(rootElement.Q<VisualElement>("ElectronicsSlot"));
|
|
energySlot = new SlotInfo(rootElement.Q<VisualElement>("EnergySlot"));
|
|
moneySlot = new SlotInfo(rootElement.Q<VisualElement>("MoneySlot"));
|
|
|
|
UpdateVisuals();
|
|
}
|
|
|
|
private void UpdateVisuals()
|
|
{
|
|
UpdateSlotVisuals(metalSlot, storage.GetResource(ResourceStorage.Metal));
|
|
UpdateSlotVisuals(electronicsSlot, storage.GetResource(ResourceStorage.Electronics));
|
|
UpdateSlotVisuals(energySlot, storage.GetResource(ResourceStorage.Energy));
|
|
UpdateSlotVisuals(moneySlot, storage.GetResource(ResourceStorage.Money));
|
|
}
|
|
|
|
private void UpdateSlotVisuals(SlotInfo slot, StoredResource resource)
|
|
{
|
|
slot.slotElement.style.display = resource.Unlocked ? DisplayStyle.Flex : DisplayStyle.None;
|
|
slot.amountLabel.text = resource.Amount.ToString();
|
|
}
|
|
}
|