PGRData/Script/matrix/xui/xuicommon/XUiMultClickHelper.lua

113 lines
No EOL
2.7 KiB
Lua

local XUiMultClickHelper = {}
local MultClickState = {
NORMAL = 0,
CLICKING = 1,
COOLING = 2
}
function XUiMultClickHelper.New(delegate, interval, maxClickLimit)
local helper = {}
--初始化
function helper:Init(tmpDelegate, tmpInterval, tmpMaxClickLimit)
self.Delegate = tmpDelegate
self.Interval = tmpInterval --点击间隔
self.LastClickTime = -1 -- 上次的点击时间
self.LastFinishTime = -1
self.ClickTimes = 0 --当前点击次数
self.ClickTimesLimit = tmpMaxClickLimit --点击次数限制
self.CoolTime = 0 --冷却时间秒
self.Status = MultClickState.NORMAL
self.Time = 0
end
--点击
function helper:Click()
if self.Status == MultClickState.COOLING then
return
end
if self.ClickTimesLimit <= self.ClickTimes then
return
end
self.LastClickTime = self.Time
self.ClickTimes = self.ClickTimes + 1
self.Status = MultClickState.CLICKING
end
--更新
function helper:Update(deltaTime)
self.Time = self.Time + deltaTime
if not self:IsActive() then
return
end
if self.Status == MultClickState.NORMAL then
return
end
--如果是CD中
if self.Status == MultClickState.COOLING and self.Time < self.LastFinishTime + self.CoolTime then
return
end
--CD完
if self.Status ~= MultClickState.CLICKING then
self:Reset()
end
if self.Status == MultClickState.CLICKING and self.Time >= self.LastClickTime + self.Interval then
self:OnFinishMultClick()
end
end
--完成回调
function helper:OnFinishMultClick()
if self.Delegate and self.ClickTimes > 0 then
self.Delegate:OnMultClick(self.ClickTimes)
end
self.LastClickTime = -1 -- 上次的点击时间
self.ClickTimes = 0
self.Status = MultClickState.COOLING
self.LastFinishTime = self.Time
end
--重置
function helper:Reset()
self.LastClickTime = -1 -- 上次的点击时间
self.ClickTimes = 0
self.Status = MultClickState.NORMAL
end
---生命周期----------------------------------------------
function helper:IsActive()
return self.Active
end
function helper:OnEnable()
self.Active = true
end
function helper:OnDisable()
self.Active = false
end
function helper:OnDestroy()
self.Delegate = nil
end
helper:Init(delegate, interval, maxClickLimit)
return helper
end
return XUiMultClickHelper