111 lines
2.6 KiB
Lua
111 lines
2.6 KiB
Lua
local LongPressEvent = {}
|
|
|
|
function LongPressEvent:ctor(go)
|
|
self.go = go
|
|
self.isTriggerPoint = false
|
|
self.triggerTime = 0
|
|
self.triggerBeatTime = 0
|
|
self.isInvoke = false
|
|
|
|
self.trigger = Util.GetEventTriggerListener(self.go.gameObject)
|
|
self.trigger.onPointerDown = self.trigger.onPointerDown + function()
|
|
self:onPointerDown()
|
|
end
|
|
self.trigger.onPointerUp = self.trigger.onPointerUp + function()
|
|
self:onPointerUp()
|
|
end
|
|
self.trigger.onPointerExit = self.trigger.onPointerExit + function()
|
|
self:onPointerUp()
|
|
end
|
|
end
|
|
|
|
function LongPressEvent:SetPressStartFunc(func)
|
|
self.onPressStart = func
|
|
end
|
|
function LongPressEvent:SetPressEndFunc(func)
|
|
self.onPressEnd = func
|
|
end
|
|
function LongPressEvent:SetPressTime(pressTime)
|
|
self.pressTime = pressTime
|
|
end
|
|
function LongPressEvent:SetPressBeatFunc(func)
|
|
self.onPressBeat = func
|
|
end
|
|
function LongPressEvent:SetPressBeatTime(beatTime)
|
|
self.beatTime = beatTime
|
|
end
|
|
|
|
|
|
function LongPressEvent:onPointerDown()
|
|
self.isTriggerPoint = true
|
|
self.triggerTime = Time.time
|
|
end
|
|
function LongPressEvent:onPointerUp()
|
|
self.isTriggerPoint = false
|
|
-- 触发过开始就触发结束
|
|
if self.isInvoke then
|
|
if self.onPressEnd then
|
|
self.onPressEnd()
|
|
end
|
|
self.isInvoke = false
|
|
end
|
|
end
|
|
|
|
function LongPressEvent:Update()
|
|
|
|
if self.isTriggerPoint then
|
|
-- 没触发过start
|
|
if not self.isInvoke then
|
|
-- 触发开始事件
|
|
if self.pressTime and Time.time - self.triggerTime > self.pressTime then
|
|
if self.onPressStart then
|
|
self.onPressStart()
|
|
end
|
|
self.isInvoke = true
|
|
--
|
|
self.triggerBeatTime = 0
|
|
end
|
|
else
|
|
-- 长按连续触发事件
|
|
if self.beatTime and Time.time - self.triggerBeatTime > self.beatTime then
|
|
if self.onPressBeat then
|
|
self.onPressBeat()
|
|
end
|
|
self.triggerBeatTime = Time.time
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
function LongPressEvent:Destroy()
|
|
-- 清除原来的事件
|
|
if self.trigger then
|
|
self.trigger:Destroy()
|
|
end
|
|
end
|
|
|
|
|
|
|
|
|
|
LongPressManager = {}
|
|
local list = {}
|
|
local function update()
|
|
for go, o in pairs(list) do
|
|
o:Update()
|
|
end
|
|
end
|
|
UpdateBeat:Add(update, LongPressManager)
|
|
|
|
|
|
function LongPressManager.New(go)
|
|
if list[go] then
|
|
list[go]:Destroy()
|
|
list[go] = nil
|
|
end
|
|
local o = {}
|
|
setmetatable(o, {__index = LongPressEvent})
|
|
o:ctor(go)
|
|
list[go] = o
|
|
return o
|
|
end
|