71 lines
1.7 KiB
C#
71 lines
1.7 KiB
C#
using TMPro;
|
|
using UnityEngine;
|
|
using UnityEngine.Events;
|
|
using UnityEngine.Serialization;
|
|
|
|
public class Timer : MonoBehaviour
|
|
{
|
|
public UnityEvent OnTimerEnded;
|
|
[FormerlySerializedAs("TimeLabel")] public TextMeshProUGUI timeLabel;
|
|
|
|
[SerializeField, FormerlySerializedAs("restTime")] private float _restTime;
|
|
[SerializeField] private AudioClip _warningSound;
|
|
|
|
private bool _processing;
|
|
private bool _recentlyPlayed;
|
|
private float _lastSignalTime;
|
|
|
|
private void Update()
|
|
{
|
|
if (_processing == false)
|
|
return;
|
|
|
|
UiDraw();
|
|
_restTime -= Time.deltaTime;
|
|
|
|
if (_restTime <= 0f)
|
|
{
|
|
_restTime = 0f;
|
|
StopTimer();
|
|
OnTimerEnded?.Invoke();
|
|
}
|
|
|
|
int rest = (int)_restTime;
|
|
if (_recentlyPlayed == false && (rest % 60 == 0 || rest == 30 || rest < 11))
|
|
{
|
|
SoundManager.instance.PlaySfx(_warningSound);
|
|
_recentlyPlayed = true;
|
|
_lastSignalTime = Time.time;
|
|
}
|
|
|
|
if (_recentlyPlayed && Time.time - _lastSignalTime >= 1f)
|
|
_recentlyPlayed = false;
|
|
}
|
|
|
|
public void SetupTimer(float seconds)
|
|
{
|
|
_restTime = seconds;
|
|
UiDraw();
|
|
}
|
|
|
|
public void StartTimer()
|
|
=> _processing = true;
|
|
|
|
public void StopTimer()
|
|
=> _processing = false;
|
|
|
|
private void UiDraw()
|
|
{
|
|
string minutes = ((int)(_restTime / 60)).ToString();
|
|
string seconds = ((int)(_restTime % 60)).ToString();
|
|
|
|
if (minutes.Length < 2)
|
|
minutes = "0" + minutes;
|
|
|
|
if (seconds.Length < 2)
|
|
seconds = "0" + seconds;
|
|
|
|
timeLabel.text = minutes + ":" + seconds;
|
|
}
|
|
}
|