RobotFactoryIncrementalGame/Assets/Scripts/ResourceStorageView.cs

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