using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
///
/// 延迟处理管理器
///
public class DelayedProcessingManager : SingletonManager
{
///
/// 协程字典
///
public Dictionary coroutines=new Dictionary();
///
/// 延迟多少秒
///
/// 要延迟的MonoBehaviour类
/// 延迟多少秒
/// 要执行的函数
public void DelayDoSecond(MonoBehaviour mono,float delay,UnityAction unityAction)
{
mono.StartCoroutine(E_DelayDoSecond(delay, unityAction));
}
///
/// 延迟多少秒 重置版
///
public void ResetDelayDoSecond(string id,MonoBehaviour mono,float delay,UnityAction unityAction)
{
if (coroutines.ContainsKey(id))
{
mono.StopCoroutine(coroutines[id]);
coroutines.Remove(id);
}
Coroutine coroutine = mono.StartCoroutine(E_DelayDoSecond(delay, unityAction));
coroutines.Add(id, coroutine);
}
///
/// 延迟多少秒的协程
///
private IEnumerator E_DelayDoSecond(float delay, UnityAction unityAction)
{
yield return new WaitForSeconds(delay);
unityAction?.Invoke();
}
///
/// 延迟多少帧
///
/// 要延迟的MonoBehaviour类
/// 延迟多少秒
/// 要执行的函数
public void DelayDoFrame(MonoBehaviour mono,float delay,UnityAction unityAction)
{
mono.StartCoroutine(E_DelayDoFrame(delay, unityAction));
}
///
/// 延迟多少帧的协程
///
private IEnumerator E_DelayDoFrame(float delay, UnityAction unityAction)
{
for (int i = 0; i < delay; i++)
{
yield return null;
}
unityAction?.Invoke();
}
///
/// 清空
///
public void Clear()
{
coroutines.Clear();
}
}