miduo_client/Assets/ManagedResources/~Lua/Modules/Common/CountDownTimer.lua

103 lines
2.4 KiB
Lua

---
--- Generated by EmmyLua(https://github.com/EmmyLua)
--- Created by Administrator.
--- DateTime: 2019/5/16 11:21
---
--[[
local CountDownTimer = {}
local this = CountDownTimer
function this.New(textNode, deltaTime, doneFunc)
if not textNode or not deltaTime then
Log("CountDownTimer creat error!! params can not be nil!!!")
return
end
local o = {}
this.__index = this
setmetatable(o, this)
o.node = textNode
o.deltaTime = deltaTime
o.doneFunc = doneFunc
return o
end
-- 开始计时
function this:Start()
if self.TimeCounter then return self end
if not self.deltaTime then return end
-- 计算时分秒
self:ResetTime(self.deltaTime)
-- 计算时间显示的方法
local function CountShow()
-- 判断计时是否结束
if self.IsOver then return end
--
self._sec = self._sec - 1
if self._sec < 0 then
self._sec = 59
self._min = self._min - 1
if self._min < 0 then
self._min = 59
self._hour = self._hour - 1
if self._hour < 0 then
self._sec = 0
self._min = 0
self._hour = 0
self.IsOver = true
if self.doneFunc then
self.doneFunc()
end
end
end
end
if self.node then
self.node:GetComponent("Text").text = string.format("%2d:%02d:%02d", self._hour, self._min, self._sec)
end
end
-- 计时开始
CountShow()
self.TimeCounter = Timer.New(CountShow, 1, -1, true)
self.TimeCounter:Start()
return self
end
-- 重置时间显示节点
function this:ResetNode(node)
if not node then return end
self.node = node
end
-- 重置时间
function this:ResetTime(deltaTime)
if not deltaTime or deltaTime < 0 then return end
self.deltaTime = deltaTime
self._sec = self.deltaTime % 60
local allMin = math.floor(self.deltaTime / 60)
self._min = allMin % 60
self._hour = math.floor(allMin / 60)
-- 计时器开始
self.IsOver = false
end
-- 完成回调
function this:ResetDoneFunc(func)
self.doneFunc = func
end
-- 记得销毁
function this:Destroy()
self.node = nil
if self.TimeCounter then
self.TimeCounter:Stop()
self.TimeCounter = nil
end
self = nil
end
return this
]]