mirror of
https://gitee.com/jisol/jisol-game/
synced 2025-06-26 03:14:47 +00:00
80 lines
2.0 KiB
C#
80 lines
2.0 KiB
C#
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using UnityEngine;
|
|
|
|
namespace JNGame.Runtime.Util
|
|
{
|
|
|
|
public delegate void TimerCallback();
|
|
|
|
public class TimerInfo
|
|
{
|
|
public TimerCallback Callback { get; set; }
|
|
public float Interval { get; set; }
|
|
public int Repeat { get; set; }
|
|
public float RunTime = 0;
|
|
public bool IsRunSuccess { get; private set; } = false;
|
|
|
|
public void Update(float dt)
|
|
{
|
|
|
|
if (IsRunSuccess) return;
|
|
RunTime += dt;
|
|
|
|
if (RunTime >= Interval)
|
|
{
|
|
|
|
RunTime = 0;
|
|
Callback?.Invoke();
|
|
|
|
if (Repeat > 0)
|
|
{
|
|
Repeat -= 1;
|
|
}
|
|
|
|
if (Repeat == 0) IsRunSuccess = true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
public class Timers : SingletonScene<Timers>
|
|
{
|
|
|
|
private List<TimerInfo> timers = new List<TimerInfo>();
|
|
|
|
public TimerInfo SetInterval(float interval,TimerCallback callback)
|
|
{
|
|
return SetTimeout(interval,callback,-1);
|
|
}
|
|
public TimerInfo SetTimeout(float interval,TimerCallback callback,int repeat = 1)
|
|
{
|
|
TimerInfo timerInfo = new TimerInfo()
|
|
{
|
|
Callback = callback,
|
|
Interval = interval,
|
|
Repeat = repeat,
|
|
};
|
|
timers.Add(timerInfo);
|
|
return timerInfo;
|
|
}
|
|
|
|
public void ClearTimeout(TimerCallback callback)
|
|
{
|
|
var removes = timers.Where(time => callback == time.Callback).ToList();
|
|
removes.ForEach(time=> timers.Remove(time));
|
|
}
|
|
|
|
private void Update()
|
|
{
|
|
timers.ForEach(time =>
|
|
{
|
|
time.Update(Time.deltaTime);
|
|
});
|
|
var removes = timers.Where(time => time.IsRunSuccess).ToList();
|
|
removes.ForEach(time=> timers.Remove(time));
|
|
}
|
|
}
|
|
} |