Run-and-capture/Assets/Scripts/TimerHelper.cs

68 lines
1.7 KiB
C#

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace DefaultNamespace
{
public class TimerHelper : MonoBehaviour
{
private static TimerHelper _instance;
public static TimerHelper Instance
{
get
{
if (_instance == null)
{
_instance = new GameObject("Timer").AddComponent<TimerHelper>();
}
return _instance;
}
}
//[EditorButton]
public void SetTimerScale(float scale)
{
Time.timeScale = scale;
}
public void StartTimer(Action action, float time)
{
StartCoroutine(Timer(action, time));
}
public void StartTimer<T>(Action<T> action, float time, T param)
{
StartCoroutine(Timer(action, time, param));
}
public void StartTimer<T>(List<Action<T>> actions, float time, T param)
{
StartCoroutine(Timer(actions, time, param));
}
IEnumerator Timer(Action action, float time)
{
yield return new WaitForSeconds(time);
action?.Invoke();
}
IEnumerator Timer<T>(Action<T> action, float time, T param)
{
yield return new WaitForSeconds(time);
action?.Invoke(param);
}
IEnumerator Timer<T>(List<Action<T>> actions, float time, T param)
{
foreach (var action in actions)
{
yield return new WaitForSeconds(time);
action?.Invoke(param);
}
}
}
}