TimerFunc_Tips.lua 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. ---@class TimerFunc
  2. TimerFunc ={
  3. timerTasks={};--延时任务
  4. timerLoopTasks={};--延时循环任务
  5. timerRemoveTasks = {};
  6. taskIndex=1;--任务编号
  7. loopPool = TablePool();
  8. delayPool = TablePool();
  9. };
  10. local this = TimerFunc
  11. --设置延时循环函数 id,初次延时,循环后间隔延时,循环时间,循环函数,结束时回调函数
  12. function TimerFunc:SetDelayLoopFunction(delayTime, delayTime1, loopTime, funcLoop,funcOnFinish)
  13. if self.timerLoopTasks[self.taskIndex] == nil then
  14. self.timerLoopTasks[self.taskIndex] = self.loopPool:Pop()
  15. end
  16. self.timerLoopTasks[self.taskIndex].startTime=Time.time+delayTime;--触发时机
  17. self.timerLoopTasks[self.taskIndex].loopDelay=delayTime1;--每次循环的间隔
  18. self.timerLoopTasks[self.taskIndex].overTime=Time.time+loopTime+delayTime;--循环持续时间
  19. self.timerLoopTasks[self.taskIndex].funcLoop=funcLoop;--循环函数
  20. self.timerLoopTasks[self.taskIndex].funcOnFinish=funcOnFinish;--结束时回调函数
  21. self.timerLoopTasks[self.taskIndex].isTimerFuncStop = false
  22. self.taskIndex=self.taskIndex+1;
  23. return self.taskIndex-1;
  24. end
  25. --延时函数 id,延时时间,触发方法
  26. function TimerFunc:SetDelayFunction(delayTime, func)
  27. if self.timerTasks[self.taskIndex] == nil then
  28. self.timerTasks[self.taskIndex] = self.delayPool:Pop()
  29. end
  30. self.timerTasks[self.taskIndex].func = func;
  31. self.timerTasks[self.taskIndex].startTime = Time.time + delayTime;
  32. self.timerTasks[self.taskIndex].isTimerFuncStop = false
  33. self.taskIndex=self.taskIndex+1;
  34. return self.taskIndex-1;
  35. end
  36. --更新
  37. function TimerFunc:Update()
  38. table.clear(self.timerRemoveTasks)
  39. for k, v in pairs(self.timerTasks) do
  40. --满足延时条件 触发
  41. if v.startTime < Time.time then
  42. v.isTimerFuncStop = true
  43. --self.timerTasks[k]=nil;--回收任务
  44. table.insert(self.timerRemoveTasks,k)
  45. if v.func~=nil then
  46. v.func();--延时方法
  47. end
  48. end
  49. end
  50. for k,v in pairs(self.timerLoopTasks) do
  51. --过期任务
  52. if v.overTime < Time.time then
  53. v.isTimerFuncStop = true
  54. --self.timerLoopTasks[k]=nil;--回收任务
  55. table.insert(self.timerRemoveTasks,k)
  56. if v.funcOnFinish~=nil then
  57. v.funcOnFinish();--循环方法结束回调
  58. end
  59. --有效任务
  60. else
  61. --满足触发条件
  62. if v.startTime < Time.time then
  63. v.startTime=v.startTime+v.loopDelay;--设置下一次触发时间
  64. if v.funcLoop~=nil then
  65. v.funcLoop();--循环方法
  66. end
  67. end
  68. end
  69. end
  70. for k, v in pairs(self.timerRemoveTasks) do
  71. self:Remove(v)
  72. end
  73. end
  74. --撤销任务
  75. function TimerFunc:Remove(id)
  76. if self.timerTasks[id] then
  77. self.delayPool:Push(self.timerTasks[id])
  78. self.timerTasks[id].isTimerFuncStop = true
  79. self.timerTasks[id] = nil
  80. end
  81. if self.timerLoopTasks[id] then
  82. self.timerLoopTasks[id].isTimerFuncStop = true
  83. self.delayPool:Push(self.timerLoopTasks[id])
  84. self.timerLoopTasks[id] = nil
  85. end
  86. --for k,v in pairs(self.timerTasks) do
  87. -- if k==id then
  88. -- self.timerTasks[id]=nil;
  89. -- return;
  90. -- end
  91. --end
  92. --for k,v in pairs(self.timerLoopTasks) do
  93. -- if k==id then
  94. -- self.timerLoopTasks[id]=nil;
  95. -- return;
  96. -- end
  97. --end
  98. end
  99. function TimerFunc:IsStoped(id)
  100. if self.timerTasks[id] then
  101. return self.timerTasks[id].isTimerFuncStop
  102. end
  103. if self.timerLoopTasks[id] then
  104. return self.timerLoopTasks[id].isTimerFuncStop
  105. end
  106. return true
  107. end
  108. --清理
  109. function TimerFunc:Clear()
  110. for k, v in pairs(self.timerTasks) do
  111. self.timerTasks[k] = nil;
  112. end
  113. for k, v in pairs(self.timerLoopTasks) do
  114. self.timerLoopTasks[k] = nil;
  115. end
  116. self.taskIndex=1;
  117. end