85 lines
1.2 KiB
C#
85 lines
1.2 KiB
C#
using System.Text;
|
|
using TMPro;
|
|
using UnityEngine;
|
|
using UnityEngine.Serialization;
|
|
|
|
namespace RoR2.UI;
|
|
|
|
[RequireComponent(typeof(RectTransform))]
|
|
public class TimerText : MonoBehaviour
|
|
{
|
|
[FormerlySerializedAs("targetText")]
|
|
public TextMeshProUGUI targetLabel;
|
|
|
|
[SerializeField]
|
|
private TimerStringFormatter _format;
|
|
|
|
[SerializeField]
|
|
private double _seconds;
|
|
|
|
private static readonly StringBuilder sharedStringBuilder = new StringBuilder();
|
|
|
|
private int currentMinutes = -1;
|
|
|
|
private int currentSeconds = -1;
|
|
|
|
public TimerStringFormatter format
|
|
{
|
|
get
|
|
{
|
|
return _format;
|
|
}
|
|
set
|
|
{
|
|
if (!(_format == value))
|
|
{
|
|
_format = value;
|
|
Rebuild();
|
|
}
|
|
}
|
|
}
|
|
|
|
public double seconds
|
|
{
|
|
get
|
|
{
|
|
return _seconds;
|
|
}
|
|
set
|
|
{
|
|
if (_seconds != value)
|
|
{
|
|
_seconds = value;
|
|
Rebuild();
|
|
}
|
|
}
|
|
}
|
|
|
|
private void Awake()
|
|
{
|
|
Rebuild();
|
|
}
|
|
|
|
private void Rebuild()
|
|
{
|
|
if ((bool)targetLabel)
|
|
{
|
|
sharedStringBuilder.Clear();
|
|
if ((bool)format)
|
|
{
|
|
format.AppendToStringBuilder(seconds, sharedStringBuilder);
|
|
}
|
|
targetLabel.SetText(sharedStringBuilder);
|
|
}
|
|
}
|
|
|
|
private void OnValidate()
|
|
{
|
|
Rebuild();
|
|
if (!targetLabel)
|
|
{
|
|
Debug.LogErrorFormat(this, "TimerText does not specify a target label.");
|
|
}
|
|
}
|
|
}
|