54 lines
1.3 KiB
C#
54 lines
1.3 KiB
C#
using System;
|
|
using AibisDream.Kit;
|
|
using UnityEngine;
|
|
|
|
namespace AibisDream.Framework
|
|
{
|
|
/// <summary>
|
|
/// 实现一个类似沙漏的功能,给一个命令就开始倒计时,倒计时结束执行命令
|
|
/// </summary>
|
|
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();
|
|
}
|
|
}
|
|
}
|
|
} |