smart-interactive-display/Assets/GadGame/Scripts/Timer.cs

77 lines
1.6 KiB
C#
Raw Normal View History

2024-06-18 23:34:19 -07:00
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.UI;
public class Timer : MonoBehaviour
{
[Header("Timer UI references: ")]
[SerializeField] private Image _uiFillImage;
[SerializeField] private Text _uiText;
public UnityEvent WarningTimer;
public int Duration { get; private set; }
private int _remainingDuration;
private bool _playAnimation = false;
private void Awake()
{
ResetTimer();
}
private void ResetTimer()
{
_uiText.text = "00:00";
_uiFillImage.fillAmount = 0f;
Duration = _remainingDuration = 0;
}
public Timer SetDuration (int seconds)
{
Duration = _remainingDuration = seconds;
return this;
}
public void Begin()
{
StopAllCoroutines();
StartCoroutine(UpdateTimer());
}
private IEnumerator UpdateTimer()
{
while (_remainingDuration > 0)
{
UpdateUI(_remainingDuration);
_remainingDuration--;
if(_remainingDuration < 30 && !_playAnimation)
{
WarningTimer.Invoke();
_playAnimation = true;
}
yield return new WaitForSeconds(1f);
}
End();
}
private void UpdateUI(int seconds)
{
_uiText.text = string.Format("{0:D2}:{1:D2}", seconds / 60, seconds % 60);
_uiFillImage.fillAmount = Mathf.InverseLerp(0, Duration, seconds);
}
public void End()
{
ResetTimer();
}
private void OnDestroy()
{
StopAllCoroutines();
}
}