new_10007_YanCheng_Metrology/Assets/Template/Default/Scripts/Timers.cs

102 lines
2.3 KiB
C#

using UnityEngine;
using UnityEngine.UI;
using UnityEngine.Events;
using TMPro;
public class Timers : MonoBehaviour
{
private bool isRun = false;
public float limitTime = 0;
private TextMeshProUGUI guiTimer;
public UnityAction<string> timeOver;
public void SetTime(int _time, TextMeshProUGUI timeText, UnityAction<string> timeOverCallback)
{
limitTime = _time * 60;
guiTimer = timeText;
guiTimer.text = "倒计时:" + StringHelper.GetCountDownStr((int)limitTime);
timeOver = timeOverCallback;
RunTimer();
}
public string GetCurrentTime()
{
EndTimer();
return limitTime.ToString("0");
}
// 运行计时器
public void RunTimer()
{
isRun = true;
}
// 暂停或恢复计时器
public void PauseTimer()
{
isRun = false;
}
// 结束计时器
public void EndTimer()
{
isRun = false;
}
// Update 方法在每一帧运行,用于更新计时器的状态和显示
private void Update()
{
if (isRun)
Timer();
}
/// <summary>
/// 计时
/// </summary>
/// <returns></returns>
private void Timer()
{
guiTimer.text = StringHelper.GetCountDownStr((int)limitTime);
if (limitTime >= 0)
{
limitTime -= Time.deltaTime;
guiTimer.text = "倒计时:" + StringHelper.GetCountDownStr((int)limitTime);
}
else
{
//Debug.Log("计时结束");
limitTime = 0;
guiTimer.text = "倒计时:" + StringHelper.GetCountDownStr((int)limitTime);
timeOver?.Invoke(limitTime.ToString());
isRun = false;
}
}
}
public class StringHelper
{
public const string format = "{0}:{1}:{2}";
public const char zero = '0';
public const int hour2Second = 3600;
public const int minute2Second = 60;
/// <summary>
/// 倒计时格式
/// </summary>
/// <param name="second">秒数</param>
/// <returns></returns>
public static string GetCountDownStr(int second)
{
int hours = second / 3600;
int minutes = (second % 3600) / 60;
int seconds = second % 60;
return string.Format("{0:00}:{1:00}:{2:00}", hours, minutes, seconds);
}
}