Files
2026-07-09 21:33:33 +02:00

61 lines
2.2 KiB
C#

using System;
using UnityEngine.UIElements;
using VOID.ScriptableObjects;
namespace VOID.UserInterface.Game.Util
{
[Serializable]
public class StatusUI
{
// Content of slot
public BasicStatus status { get; private set; }
// Elements
private VisualElement _templateElement;
private VisualElement _iconElement;
private Label _timerLabel;
/// <summary>
/// Initializes completly new <see cref="StatusUI"/> inside given parent.
/// </summary>
/// <param name="parentWrapperElement">Create new status as child in given parent.</param>
/// <param name="status"><see cref="BasicStatus"/> to use for this StatusUI</param>
/// <param name="name">Optional name for UI element</param>
public void InitNew(VisualElement parentWrapperElement, BasicStatus status, string name = null)
{
this.status = status;
// Create Status (from template) in GUI
_templateElement = GameUI.current.statusTemplate.CloneTree().contentContainer;
_templateElement.name = name ?? "status";
_templateElement.AddToClassList("status");
_templateElement.AddToClassList("status-medium");
parentWrapperElement.Add(_templateElement);
// Find all Status's elements
_iconElement = _templateElement.Q("icon");
_iconElement.style.backgroundImage = new StyleBackground(status.displayIcon);
_timerLabel = _templateElement.Q<Label>("time-remaining");
// Monitor what happening to displayed status
status.OnTimeDecrease += OnTimeDecrease;
// Also force
OnTimeDecrease();
_templateElement.dataSource = this;
_templateElement.pickingMode = PickingMode.Position;
}
public void Destroy()
{
status.OnTimeDecrease -= OnTimeDecrease;
_templateElement.parent.Remove(_templateElement);
}
private void OnTimeDecrease()
{
_timerLabel.text = status.durationLeft.ToString("0");
}
}
}