using System; using System.Collections; using System.Collections.Generic; using UnityEngine; public class TimerSystem : MonoSingleton { private List m_TimerTaskList = new List(); private void Update() { for (int i = 0; i < m_TimerTaskList.Count; i++) { TimeTask timeTask = m_TimerTaskList[i]; if (timeTask.remainingTime <= 0) { if (timeTask.callBack != null) { try { timeTask.callBack(); } catch(Exception e) { Debug.LogException(e); } } if (timeTask.count == 1) { m_TimerTaskList.RemoveAt(i); i--; } else { if (timeTask.count != 0) { timeTask.count -= 1; } timeTask.remainingTime = timeTask.delay; } } if (!timeTask.pause) { timeTask.remainingTime -= Time.deltaTime; } } } public TimeTask AddTimeTask(Action callback, float delay, int count = 1) { TimeTask task = new TimeTask(callback, delay, count); m_TimerTaskList.Add(task); return task; } public bool RemoveTimeTask(TimeTask task) { if (task != null) { if (m_TimerTaskList.Contains(task)) { m_TimerTaskList.Remove(task); return true; } } return false; } }