c1_lua/lua/app/ui/common/task_toast.lua
2023-05-11 18:20:10 +08:00

182 lines
4.7 KiB
Lua

local TaskToastManager = class("TaskToastManager", BaseModule)
function TaskToastManager:ctor()
self.toastList = {}
end
function TaskToastManager:clear()
end
function TaskToastManager:checkOnOpenUI()
if #self.toastList <= 0 then
return
end
local topUIObj = UIManager:getTopUIObj()
if topUIObj then
if self:checkUnshowUI(topUIObj) then
self:closeToast()
end
end
end
function TaskToastManager:checkUnshowUI(uiObj)
local uiIndex = uiObj:getUIIndex()
if uiIndex == UIManager.UI_PATH.BATTLE_UI then
return true
end
return false
end
function TaskToastManager:showToast(id, taskId, from, to)
local topUIObj = UIManager:getTopUIObj()
if topUIObj then
if self:checkUnshowUI(topUIObj) then
return
end
end
local params = {
id = id,
taskId = taskId,
from = from,
to = to
}
table.insert(self.toastList, params)
if #self.toastList == 1 then
self:_showToast()
end
end
function TaskToastManager:_showToast()
local params = self.toastList[1]
if params == nil then
return
end
UIManager:getTaskToast(function(prefabObject)
local uiMap = prefabObject:genAllChildren()
local lockBg = uiMap["task_toast.lock_bg"]
local icon = uiMap["task_toast.icon"]
local nameTx = uiMap["task_toast.name_tx"]
local progressComp = uiMap["task_toast.progress_bg.progress"]:getComponent(GConst.TYPEOF_UNITY_CLASS.BF_SLIDER)
local progressTx = uiMap["task_toast.progress_bg.progress_tx"]
local rewardCellComp = uiMap["task_toast.reward_cell"]:addLuaComponent(GConst.TYPEOF_LUA_CLASS.REWARD_CELL)
local dailyTaskInfo = ConfigManager:getConfig("task_daily")[params.id]
if dailyTaskInfo == nil then
return self:onFinish()
end
if dailyTaskInfo.bounty then
lockBg:setVisible(true)
else
lockBg:setVisible(false)
end
local taskInfo = ConfigManager:getConfig("task")[params.taskId]
if taskInfo == nil then
return self:onFinish()
end
icon:setSprite(GConst.ATLAS_PATH.ICON_TASK, taskInfo.icon)
local taskI18NInfo = I18N:getConfig("task")[params.taskId]
if taskI18NInfo == nil then
return self:onFinish()
end
nameTx:setText(taskI18NInfo.desc)
local reward = taskInfo.reward
if reward and reward[1] then
rewardCellComp:refreshByConfig(reward[1])
end
if self.sliderSequence then
self.sliderSequence:Kill()
end
self.sliderSequence = DOTweenManager:createSeqWithIntId()
local curProgress = 0
local from = params.from
local to = params.to
local last = to - from
local startPercent = params.from / params.to
local lastPercent = 1 - startPercent
progressComp.value = from / to
progressTx:setText(from .. "/" .. to)
local tween = DOTweenManager:createDOTweenTo(
function()
return curProgress
end,
function(value)
curProgress = value
progressComp.value = startPercent + lastPercent*curProgress
progressTx:setText(from + math.floor(last*curProgress) .. "/" .. to)
end,
1, 1)
self.sliderSequence:Append(tween)
self.sliderSequence:AppendCallback(function()
self.sliderSequence = nil
end)
local notchHeight = SafeAreaManager:getNotchScreenHeight()
prefabObject:setAnchoredPositionY(-notchHeight)
prefabObject:getComponent(GConst.TYPEOF_UNITY_CLASS.CANVAS).enabled = true
if self.toastSequence == nil then
self.toastSequence = DOTweenManager:createSeqWithIntId()
self.toastSequence:AppendInterval(2)
self.toastSequence:AppendCallback(function()
self:onFinish()
end)
self.toastSequence:SetAutoKill(false)
else
self.toastSequence:Restart()
end
end)
end
function TaskToastManager:refreshText()
if #self.toastList <= 0 then
return
end
if self.toastSequence then
self.toastSequence:Pause()
end
if self.sliderSequence then
self.sliderSequence:Kill()
self.sliderSequence = nil
end
self:onFinish()
end
function TaskToastManager:closeToast()
if #self.toastList <= 0 then
return
end
if self.toastSequence then
self.toastSequence:Pause()
end
if self.sliderSequence then
self.sliderSequence:Kill()
self.sliderSequence = nil
end
UIManager:getTaskToast(function(prefabObject)
prefabObject:getComponent(GConst.TYPEOF_UNITY_CLASS.CANVAS).enabled = false
end)
for i = 1, #self.toastList do
table.remove(self.toastList)
end
end
function TaskToastManager:onFinish()
if #self.toastList <= 0 then
UIManager:getTaskToast(function(prefabObject)
prefabObject:getComponent(GConst.TYPEOF_UNITY_CLASS.CANVAS).enabled = false
end)
return
end
table.remove(self.toastList, 1)
if #self.toastList > 0 then
self:_showToast()
else
UIManager:getTaskToast(function(prefabObject)
prefabObject:getComponent(GConst.TYPEOF_UNITY_CLASS.CANVAS).enabled = false
end)
end
end
return TaskToastManager