先接入这个类中的循环,然后调用这个接口TimerCounter.CreateTimer(时间(按秒传入),function()end)
module("TimerCounter", package.seeall )
local _timerDict = {}
local quest_list = {}
TimerData = {}
function TimerData:new(t, func, arg, unscale)
local self = {}
setmetatable( self, {__index = TimerData} )
self.time = t
self.callfunc = func
self.args = arg
self.unscale = unscale
return self
end
function CreateTimer(t, func, arg, unscale)
local timer = TimerData:new(t, func, arg, unscale)
_timerDict[timer] = 0
return timer
end
function StopTimer(timer)
_timerDict[timer] = nil
end
function TimerCounter:AddTimesTimer(callback, delay_time, times)
local t = {callback, delay_time, UnityEngine.Time.unscaledTime + delay_time, times}
quest_list[t] = t
return t
end
function TimerCounter:AddDelayTimer(callback, delay_time)
return self:AddTimesTimer(callback, delay_time, 1)
end
function TimerCounter:AddRunQuest(callback, delay_time)
return self:AddTimesTimer(callback, delay_time, 999999999)
end
function TimerCounter:CancelQuest(quest)
if quest == nil then return end
quest_list[quest] = nil
end
function TimerCounter:UpdateQuest()
local callback_list = {}
for k, v in pairs(quest_list) do
if v[4] <= 0 then
quest_list[k] = nil
else
if v[3] <= UnityEngine.Time.unscaledTime then
table.insert(callback_list, k)
v[3] = UnityEngine.Time.unscaledTime
v[3] = v[3] + v[2]
v[4] = v[4] - 1
end
end
end
local quest = nil
for k, v in pairs(callback_list) do
quest = quest_list[v]
if nil ~= quest then
quest[1]()
end
end
end
function Update(deltime, unscaledDeltaTime)
for i, v in pairs(_timerDict) do
local t
if i.unscale then
t = v + unscaledDeltaTime
else
t = v + deltime
end
if t >= i.time then
i.callfunc(i.args)
_timerDict[i] = nil
else
_timerDict[i] = t
end
end
UpdateQuest()
end
949

被折叠的 条评论
为什么被折叠?



