|
|
-
- CreateClass("UniTimerClass")
- CreateClass("UniEventClass")
-
-
- function NewUniTimerClass(callback, msec, ...)
- local timer = {
- nextmsec=unitimer.now,
- callback = callback,
- tick = msec,
- params = arg,
- }
- UniTimerClass:New(timer)
- return timer
- end
- function NewUniTimerRandomClass(callback, msec, ...)
- local timer = {
- nextmsec=unitimer.now+math.random(msec/2,msec),
- callback = callback,
- tick = msec,
- params = arg,
- }
- UniTimerClass:New(timer)
- return timer
- end
- function NewUniEventClass(callback, msec,maxtimes, ...)
- local event = {
- nextmsec=unitimer.now+msec,
- callback = callback,
- tick = msec,
- maxtimes = maxtimes,
- params = arg,
- }
- UniEventClass:New(event)
- return event
- end
- function UniTimerClass:GetId()
- return self.tick
- end
- function UniTimerClass:GetName()
- return self.tick
- end
- function UniTimerClass:Stop()
- self.stop = true
- unitimer.removetimer(self)
- end
- function UniTimerClass:Check(now,force)
- if self.nextmsec <= now or force then
- --unilight.error("UniEventClass:"..unpack(self.params))
- self.nextmsec = now + self.tick --如果callback脚本报错,会悲剧,WHJ,似乎没人用,先提前试试
- self.callback(unpack(self.params))
- return true
- end
- --duaration=0
- --first=true
- --pause=false
- --stop=false
- return false
- end
- function UniEventClass:GetId()
- return self.tick
- end
- function UniEventClass:GetName()
- return self.maxtimes
- end
- function UniEventClass:Check(now,force)
- --if (self.nextmsec <= now or force) and self.tick > 0 then
- if (self.maxtimes > 0 and self.nextmsec <= now) or force then
- self.nextmsec = now + self.tick --如果callback脚本报错,会悲剧,WHJ,似乎没人用,先提前试试
- self.maxtimes = self.maxtimes - 1 --计数可以提前,时间不能提前,有可能逻辑里要用时间,提前的目的是防止Check报错后就悲剧
- self.callback(unpack(self.params))
- return true
- end
- return false
- end
- function UniEventClass:Stop()
- unitimer.removeevent(self)
- end
- unitimer={
- timermap={},
- eventmap={},
- }
- function unitimer.init(msec) --最小精度的定时器
- unitimer.now = go.time.Msec()
- if unitimer.ticktimer ~= nil then
- unilight.error("unitimer.init已经初始化过了:"..unitimer.tickmsec)
- return false
- end
- unitimer.tickmsec = msec --保存最小精度
- unitimer.ticktimer = unilight.addtimermsec("unitimer.loop", msec)
- return true
- end
- function unitimer.loop()
- local timer = unitimer
- timer.now = go.time.Msec()
- for k,v in pairs(timer.timermap) do
- if v:Check(timer.now) == true then
- if v.stop == true then
- timer.removetimer(v)
- end
- end
- end
- for k,v in pairs(timer.eventmap) do
- if v:Check(timer.now) == true then
- if v.maxtimes <= 0 then
- --v:Debug("事件结束")
- v:Stop()
- end
- end
- end
- end
- function unitimer.addtimermsec(callback, msec, ...)
- local timer = NewUniTimerClass(callback, msec, ...)
- --timer:Debug("unitimer.addtimermsec:")
- unitimer.timermap[timer]=timer
- return timer
- end
- function unitimer.addtimer(callback, msec, ...)
- return unitimer.addtimermsec(callback, msec*1000, ...)
- end
- function unitimer.removetimer(timer)
- --timer:Debug("unitimer.removetimer:")
- unitimer.timermap[timer] = nil
- end
- function unitimer.addevent(callback, msec,maxtimes, ...)
- return unitimer.addeventmsec(callback, msec*1000,maxtimes, ...)
- end
- function unitimer.addeventmsec(callback, msec,maxtimes, ...)
- maxtime = maxtimes or 1
- local event = NewUniEventClass(callback, msec,maxtimes, ...)
- --event:Debug("设置事件:"..msec)
- unitimer.eventmap[event]=event
- return event
- end
- function unitimer.removeevent(event)
- unitimer.eventmap[event] = nil
- end
|