using System; using AibisDream.Kit; using UnityEngine; namespace AibisDream.Framework { /// /// 实现一个类似沙漏的功能,给一个命令就开始倒计时,倒计时结束执行命令 /// public class SandClock { public float CountDownTime { get; private set; } public float CurTime { get; private set; } private readonly Action _endAction; public SandClock(float duration, Action endAction) { CountDownTime = duration; _endAction = endAction; } public void Start() { ActionKitMonoBehaviourEvents.Instance.OnUpdate.Register(OnUpdate); CurTime = 0; } public void Stop() { CurTime = 0; ActionKitMonoBehaviourEvents.Instance.OnUpdate.UnRegister(OnUpdate); _endAction?.Invoke(); } public void Pause() { ActionKitMonoBehaviourEvents.Instance.OnUpdate.UnRegister(OnUpdate); } public void Continue() { ActionKitMonoBehaviourEvents.Instance.OnUpdate.Register(OnUpdate); } private void OnUpdate() { CurTime += Time.deltaTime; if (CurTime >= CountDownTime) { Stop(); } } } }