c1_lua/lua/app/tools/progress_bar.lua
2023-04-03 10:59:13 +08:00

80 lines
1.7 KiB
Lua

local ProgressBar = class("ProgressBar")
function ProgressBar:runBar(params)
local oldLv = params.oldLv
local newLv = params.newLv
local beginPer = params.beginPer
local endPer = params.endPer
local time = params.time or 0
local endCallback = params.endCallback
local perStep = params.perStep or 0.1
if not params.ui then
return
end
local function endSchedule(onlyClear)
if self.scheduleId then
params.ui:unscheduleGlobal(self.scheduleId)
self.scheduleId = nil
end
if not onlyClear and endCallback then
endCallback()
end
end
local function runAddBar()
beginPer = beginPer + perStep
if beginPer > 1 then
oldLv = oldLv + 1
beginPer = beginPer - 1
end
if oldLv > newLv or (oldLv == newLv and beginPer >= endPer) then
if params.callback then
params.callback(newLv, endPer)
end
endSchedule()
return
else
if params.callback then
params.callback(oldLv, beginPer)
end
end
end
local function runSubBar()
beginPer = beginPer - perStep
if beginPer < 0 then
oldLv = oldLv - 1
beginPer = beginPer + 1
end
if oldLv < newLv or (oldLv == newLv and beginPer <= endPer) then
if params.callback then
params.callback(newLv, endPer)
end
endSchedule()
return
else
if params.callback then
params.callback(oldLv, beginPer)
end
end
end
local function runBar()
if newLv > oldLv or (newLv == oldLv and endPer >= beginPer) then
runAddBar()
elseif newLv < oldLv or (newLv == oldLv and endPer < beginPer) then
runSubBar()
else
self:endSchedule()
end
end
endSchedule(true)
self.scheduleId = params.ui:scheduleGlobal(function ()
runBar()
end, time)
runBar()
end
return ProgressBar