149 lines
4.7 KiB
Lua
149 lines
4.7 KiB
Lua
local ToastManager = class("ToastManager", BaseModule)
|
|
|
|
local TOAST_DURATION = 0.5
|
|
local TOAST_DEFAULT_SIZE_Y = 54
|
|
local TOAST_DEFAULT_FONT_SIZE = 30
|
|
local TOAST_BATTLE_SIZE_Y = 124
|
|
local TOAST_BATTLE_FONT_SIZE = 30
|
|
|
|
function ToastManager:ctor()
|
|
self.curIndex = 0
|
|
self.toastList = {}
|
|
end
|
|
|
|
function ToastManager:clear()
|
|
self.curIndex = 0
|
|
self.toastList = {}
|
|
end
|
|
|
|
function ToastManager:showToast(params)
|
|
if self.curIndex >= #self.toastList then
|
|
self.toastList = {}
|
|
self.curIndex = 0
|
|
end
|
|
table.insert(self.toastList, params)
|
|
|
|
if not self.toastSid then
|
|
self:_doImmediately()
|
|
self.toastSid = self:scheduleGlobal(function()
|
|
self:_doImmediately()
|
|
|
|
if self.curIndex >= #self.toastList then
|
|
self:pauseScheduleGlobal(self.toastSid)
|
|
self.toastSidPaused = true
|
|
end
|
|
end, TOAST_DURATION)
|
|
else
|
|
if self.toastSidPaused then
|
|
self:_doImmediately()
|
|
end
|
|
self.toastSidPaused = false
|
|
self:resumeScheduleGlobal(self.toastSid)
|
|
end
|
|
end
|
|
|
|
function ToastManager:_doImmediately()
|
|
local curIndex = self.curIndex + 1
|
|
if not self.toastList[curIndex] then
|
|
return
|
|
end
|
|
self.curIndex = curIndex
|
|
local curParams = self.toastList[self.curIndex]
|
|
self:_showToast(curParams)
|
|
end
|
|
|
|
function ToastManager:_showToast(params)
|
|
UIManager:getToast(function(prefabObject)
|
|
prefabObject._using = true
|
|
if prefabObject._toastSequence then
|
|
prefabObject._toastSequence:Kill()
|
|
prefabObject._toastSequence = nil
|
|
end
|
|
|
|
local childMap = prefabObject:genAllChildren()
|
|
local content = childMap["toast.content"]
|
|
local icon = childMap["toast.icon"]
|
|
local gotTx = childMap["toast.got_tx"]
|
|
local numTx = childMap["toast.num_tx"]
|
|
local cellWidth = 46
|
|
if type(params) == "table" and params.id then
|
|
content:setVisible(false)
|
|
gotTx:setVisible(true)
|
|
numTx:setVisible(true)
|
|
icon:setVisible(true)
|
|
|
|
gotTx:setText(I18N:getGlobalText(I18N.GlobalConst.GET))
|
|
local cfg = ConfigManager:getConfig("item")[params.id]
|
|
numTx:setText(params.str or "")
|
|
if params.type == GConst.REWARD_TYPE.ITEM then
|
|
icon:setSprite(GFunc.getIconRes(params.id))
|
|
elseif params.type == GConst.REWARD_TYPE.EQUIP then
|
|
icon:setSprite(GFunc.getEquipIconRes(params.id))
|
|
elseif params.type == GConst.REWARD_TYPE.JEWELRY then
|
|
icon:setSprite(GFunc.getJewelryIconRes(params.id))
|
|
end
|
|
local meshProComp = numTx:getComponent(GConst.TYPEOF_UNITY_CLASS.UI_TEXT_MESH_PRO)
|
|
local gotMeshProComp = gotTx:getComponent(GConst.TYPEOF_UNITY_CLASS.UI_TEXT_MESH_PRO)
|
|
local contentWidth = meshProComp.preferredWidth
|
|
local gotWidth = gotMeshProComp.preferredWidth
|
|
gotTx:setAnchoredPositionX(-(contentWidth + cellWidth)*0.5)
|
|
icon:setAnchoredPositionX(-(contentWidth - gotWidth)*0.5)
|
|
numTx:setAnchoredPositionX((gotWidth + cellWidth)*0.5)
|
|
elseif type(params) == "table" and params.battleToast then
|
|
content:setVisible(true)
|
|
gotTx:setVisible(false)
|
|
numTx:setVisible(false)
|
|
icon:setVisible(false)
|
|
content:setText(params.content)
|
|
local meshProComp = content:getComponent(GConst.TYPEOF_UNITY_CLASS.UI_TEXT_MESH_PRO)
|
|
meshProComp.fontSize = TOAST_BATTLE_FONT_SIZE
|
|
if meshProComp.preferredHeight > 100 then
|
|
prefabObject:setSizeDeltaY(meshProComp.preferredHeight + 22)
|
|
else
|
|
prefabObject:setSizeDeltaY(TOAST_BATTLE_SIZE_Y)
|
|
end
|
|
else
|
|
content:setVisible(true)
|
|
gotTx:setVisible(false)
|
|
numTx:setVisible(false)
|
|
icon:setVisible(false)
|
|
content:setText(params)
|
|
local meshProComp = content:getComponent(GConst.TYPEOF_UNITY_CLASS.UI_TEXT_MESH_PRO)
|
|
meshProComp.fontSize = TOAST_DEFAULT_FONT_SIZE
|
|
if meshProComp.preferredHeight > 40 then
|
|
prefabObject:setSizeDeltaY(meshProComp.preferredHeight + 22)
|
|
else
|
|
prefabObject:setSizeDeltaY(TOAST_DEFAULT_SIZE_Y)
|
|
end
|
|
end
|
|
|
|
prefabObject:setLocalPosition(0, 100, 0)
|
|
prefabObject:getComponent(GConst.TYPEOF_UNITY_CLASS.CANVAS).enabled = true
|
|
local canvasGroup = prefabObject:getComponent(GConst.TYPEOF_UNITY_CLASS.CANVAS_GROUP)
|
|
canvasGroup.alpha = 1
|
|
|
|
prefabObject._toastSequence = prefabObject:createBindTweenSequence()
|
|
local moveTween = prefabObject:getTransform():DOLocalMove(CS.UnityEngine.Vector3(0, 180, 0), 0.6)
|
|
prefabObject._toastSequence:Append(moveTween)
|
|
local fadeOutTween = canvasGroup:DOFade(0, 0.5)
|
|
prefabObject._toastSequence:Append(fadeOutTween)
|
|
prefabObject._toastSequence:OnComplete(function()
|
|
prefabObject:getComponent(GConst.TYPEOF_UNITY_CLASS.CANVAS).enabled = false
|
|
prefabObject._using = false
|
|
end)
|
|
end)
|
|
end
|
|
|
|
function ToastManager:refreshText()
|
|
local list = UIManager:getAllToast()
|
|
if list == nil then
|
|
return
|
|
end
|
|
for _, toastObj in ipairs(list) do
|
|
local childMap = toastObj:genAllChildren()
|
|
childMap["toast.content"]:setText("")
|
|
childMap["toast.got_tx"]:setText("")
|
|
end
|
|
end
|
|
|
|
return ToastManager |