TimerSystem.cs 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using UnityEngine;
  5. public class TimerSystem : MonoSingleton<TimerSystem>
  6. {
  7. private List<TimeTask> m_TimerTaskList = new List<TimeTask>();
  8. private void Update()
  9. {
  10. for (int i = 0; i < m_TimerTaskList.Count; i++)
  11. {
  12. TimeTask timeTask = m_TimerTaskList[i];
  13. if (timeTask.remainingTime <= 0)
  14. {
  15. if (timeTask.callBack != null)
  16. {
  17. try
  18. {
  19. timeTask.callBack();
  20. }
  21. catch(Exception e)
  22. {
  23. Debug.LogException(e);
  24. }
  25. }
  26. if (timeTask.count == 1)
  27. {
  28. m_TimerTaskList.RemoveAt(i);
  29. i--;
  30. }
  31. else
  32. {
  33. if (timeTask.count != 0)
  34. {
  35. timeTask.count -= 1;
  36. }
  37. timeTask.remainingTime = timeTask.delay;
  38. }
  39. }
  40. if (!timeTask.pause)
  41. {
  42. timeTask.remainingTime -= Time.deltaTime;
  43. }
  44. }
  45. }
  46. public TimeTask AddTimeTask(Action callback, float delay, int count = 1)
  47. {
  48. TimeTask task = new TimeTask(callback, delay, count);
  49. m_TimerTaskList.Add(task);
  50. return task;
  51. }
  52. public bool RemoveTimeTask(TimeTask task)
  53. {
  54. if (task != null)
  55. {
  56. if (m_TimerTaskList.Contains(task))
  57. {
  58. m_TimerTaskList.Remove(task);
  59. return true;
  60. }
  61. }
  62. return false;
  63. }
  64. }