|
|
- --
- -- Author: ZensYue
- -- Date: 2017-10-25 17:51:21
- --
- TimeManager = TimeManager or BaseClass()
-
- function TimeManager:__init()
- TimeManager.Instance = self
- self:Reset()
- end
-
- function TimeManager:Reset()
- self.time_list = {}
- end
-
- function TimeManager.GetInstance()
- if TimeManager.Instance == nil then
- TimeManager.Instance = TimeManager.New()
- end
- return TimeManager.Instance
- end
-
- --[[
- =================================
- @Author: ZensYue
- @DateTime: 2017-10-25 18:05:23
- @Description: 不外部调用
- =================================
- ]]
- function TimeManager:SetTimeID(update_type,info)
- self.time_list[update_type] = info
- end
-
- --获取活动定时器ID
- function TimeManager:GetTimeID(update_type)
- return self.time_list[update_type]
- end
-
- --取消活动定时器
- function TimeManager:CancelTime(update_type)
- local info = self:GetTimeID(update_type)
- if not info then
- return
- end
- if info.time_id then
- GlobalTimerQuest:CancelQuest(info.time_id)
- end
- info.time_id = nil
- info.next_update_time = 0
- self:SetTimeID(update_type,info)
- end
-
- --[[
- =================================
- @Author: ZensYue
- @DateTime: 2017-10-25 17:54:00
- @param: update_type 更新类型 ps:背包... 直接用模块名就好,不用额外加配置
- @param: time 几秒后执行(内部转成毫秒)
- @param: callback 执行回调
- @return bool 是否在保护时间内
- =================================
- ]]
- function TimeManager:StartTime(update_type,time,callback)
- local info = self:GetTimeID(update_type)
- local cur_time = TimeUtil:getClientTimeMs()
- --当前次还未执行,不做处理
- if info and info.next_update_time and info.next_update_time - cur_time > 0 then
- info.count = info.count or 0
- info.count = info.count + 1
- return true
- end
- --记录转成毫秒 更准确
- local next_update_time = cur_time + time*1000
- self:CancelTime(update_type)
- local function func()
- local info = self:GetTimeID(update_type)
- --期间有需要刷新,当前次结束再执行一次
- if info and info.count and info.count > 0 then
- if info.callback then
- info.callback()
- end
- info.last_time = TimeUtil:getClientTimeMs()
- info.count = 0
- end
- self:CancelTime(update_type)
- end
- local time_id = GlobalTimerQuest:AddPeriodQuest(func,time,1)
- --如果第一次或者连续多次超过间隔时间马上执行
- --或者极端情况下,上次的还未执行 info.time_id还存在
- local count = 1
- if not info or info.time_id or not info.last_time or not info.interval or cur_time - info.last_time > info.interval then
- if callback then
- callback()
- end
- --如果之前的定时器未关,先关掉
- if info and info.time_id then
- self:CancelTime(update_type)
- end
- count = 0
- end
- info = {
- time_id = time_id, --定时器ID
- next_update_time = next_update_time, --下次执行的时间
- interval = time*1000, --间隔时间
- count = count, --间隔时间内需要执行的数量
- callback = callback --回调函数
- }
- self:SetTimeID(update_type,info)
- return false
- end
-
-
- --[[
- =================================
- --一定时间内只刷一次
- @param: update_type 更新类型 ps:背包... 直接用模块名就好,不用额外加配置
- @param: time 几秒后执行(内部转成毫秒)
- @param: callback 执行回调
- @return bool 是否在保护时间内
- =================================
- ]]
- function TimeManager:StartDalayTime(update_type,time,callback)
- local info = self:GetTimeID(update_type)
- local cur_time = TimeUtil:getClientTimeMs()
- --当前次还未执行,不做处理
- if info and info.next_update_time and info.next_update_time - cur_time > 0 then
- info.count = info.count or 0
- info.count = info.count + 1
- return true
- end
- --记录转成毫秒 更准确
- local next_update_time = cur_time + time*1000
- self:CancelTime(update_type)
- local function func()
- local info = self:GetTimeID(update_type)
- --期间有需要刷新,当前次结束再执行一次
- if info then
- if info.callback then
- info.callback()
- end
- info.last_time = TimeUtil:getClientTimeMs()
- info.count = 0
- end
- self:CancelTime(update_type)
- end
- local time_id = GlobalTimerQuest:AddPeriodQuest(func,time,1)
- --如果第一次或者连续多次超过间隔时间马上执行
- --或者极端情况下,上次的还未执行 info.time_id还存在
- local count = 1
- if not info or info.time_id or not info.last_time or not info.interval or cur_time - info.last_time > info.interval then
- --如果之前的定时器未关,先关掉
- if info and info.time_id then
- self:CancelTime(update_type)
- end
- count = 0
- end
- info = {
- time_id = time_id, --定时器ID
- next_update_time = next_update_time, --下次执行的时间
- interval = time*1000, --间隔时间
- count = count, --间隔时间内需要执行的数量
- callback = callback --回调函数
- }
- self:SetTimeID(update_type,info)
- return false
- end
-
- function TimeManager:__delete()
- end
|