123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- ---@class TimerFunc
- TimerFunc ={
- timerTasks={};--延时任务
- timerLoopTasks={};--延时循环任务
- timerRemoveTasks = {};
- taskIndex=1;--任务编号
- loopPool = TablePool();
- delayPool = TablePool();
- };
- local this = TimerFunc
- --设置延时循环函数 id,初次延时,循环后间隔延时,循环时间,循环函数,结束时回调函数
- function TimerFunc:SetDelayLoopFunction(delayTime, delayTime1, loopTime, funcLoop,funcOnFinish)
- if self.timerLoopTasks[self.taskIndex] == nil then
- self.timerLoopTasks[self.taskIndex] = self.loopPool:Pop()
- end
- self.timerLoopTasks[self.taskIndex].startTime=Time.time+delayTime;--触发时机
- self.timerLoopTasks[self.taskIndex].loopDelay=delayTime1;--每次循环的间隔
- self.timerLoopTasks[self.taskIndex].overTime=Time.time+loopTime+delayTime;--循环持续时间
- self.timerLoopTasks[self.taskIndex].funcLoop=funcLoop;--循环函数
- self.timerLoopTasks[self.taskIndex].funcOnFinish=funcOnFinish;--结束时回调函数
- self.timerLoopTasks[self.taskIndex].isTimerFuncStop = false
- self.taskIndex=self.taskIndex+1;
- return self.taskIndex-1;
- end
- --延时函数 id,延时时间,触发方法
- function TimerFunc:SetDelayFunction(delayTime, func)
- if self.timerTasks[self.taskIndex] == nil then
- self.timerTasks[self.taskIndex] = self.delayPool:Pop()
- end
- self.timerTasks[self.taskIndex].func = func;
- self.timerTasks[self.taskIndex].startTime = Time.time + delayTime;
- self.timerTasks[self.taskIndex].isTimerFuncStop = false
- self.taskIndex=self.taskIndex+1;
- return self.taskIndex-1;
- end
- --更新
- function TimerFunc:Update()
- table.clear(self.timerRemoveTasks)
- for k, v in pairs(self.timerTasks) do
- --满足延时条件 触发
- if v.startTime < Time.time then
- v.isTimerFuncStop = true
- --self.timerTasks[k]=nil;--回收任务
- table.insert(self.timerRemoveTasks,k)
- if v.func~=nil then
- v.func();--延时方法
- end
- end
- end
- for k,v in pairs(self.timerLoopTasks) do
- --过期任务
- if v.overTime < Time.time then
- v.isTimerFuncStop = true
- --self.timerLoopTasks[k]=nil;--回收任务
- table.insert(self.timerRemoveTasks,k)
- if v.funcOnFinish~=nil then
- v.funcOnFinish();--循环方法结束回调
- end
- --有效任务
- else
- --满足触发条件
- if v.startTime < Time.time then
- v.startTime=v.startTime+v.loopDelay;--设置下一次触发时间
- if v.funcLoop~=nil then
- v.funcLoop();--循环方法
- end
- end
- end
- end
- for k, v in pairs(self.timerRemoveTasks) do
- self:Remove(v)
- end
- end
- --撤销任务
- function TimerFunc:Remove(id)
- if self.timerTasks[id] then
- self.delayPool:Push(self.timerTasks[id])
- self.timerTasks[id].isTimerFuncStop = true
- self.timerTasks[id] = nil
- end
- if self.timerLoopTasks[id] then
- self.timerLoopTasks[id].isTimerFuncStop = true
- self.delayPool:Push(self.timerLoopTasks[id])
- self.timerLoopTasks[id] = nil
- end
- --for k,v in pairs(self.timerTasks) do
- -- if k==id then
- -- self.timerTasks[id]=nil;
- -- return;
- -- end
- --end
- --for k,v in pairs(self.timerLoopTasks) do
- -- if k==id then
- -- self.timerLoopTasks[id]=nil;
- -- return;
- -- end
- --end
- end
- function TimerFunc:IsStoped(id)
- if self.timerTasks[id] then
- return self.timerTasks[id].isTimerFuncStop
- end
- if self.timerLoopTasks[id] then
- return self.timerLoopTasks[id].isTimerFuncStop
- end
- return true
- end
- --清理
- function TimerFunc:Clear()
- for k, v in pairs(self.timerTasks) do
- self.timerTasks[k] = nil;
- end
- for k, v in pairs(self.timerLoopTasks) do
- self.timerLoopTasks[k] = nil;
- end
- self.taskIndex=1;
- end
|