290 lines
10 KiB
Lua
290 lines
10 KiB
Lua
local RollToastManager = class("RollToastManager", BaseModule)
|
|
|
|
local HUNDRED_PIXEL_TIME = 0.4
|
|
local MIN_SPACING = 100
|
|
local SECONDS_PRE_MINUTE = 60
|
|
local THREE_MINITE_SECOND = 180
|
|
local FOUR_MINITE_SECOND = 240
|
|
local FIVE_MINITE_SECOND = 300
|
|
local TEN_MINITE_SECOND = 600
|
|
local FIFTEEN_MINITE_SECOND = 900
|
|
|
|
function RollToastManager:ctor()
|
|
self.curIndex = 0
|
|
self.toastList = {}
|
|
end
|
|
|
|
function RollToastManager:clear(dontClearUpdateContent)
|
|
self.curIndex = 0
|
|
self.toastList = {}
|
|
if not dontClearUpdateContent then
|
|
self.updateContent = nil
|
|
end
|
|
self:clearSeq()
|
|
end
|
|
|
|
function RollToastManager:showToast(str)
|
|
if self.updateContent then
|
|
return
|
|
end
|
|
|
|
local mainUIOn = false
|
|
local uiList = UIManager:getUIList()
|
|
for _, uiObj in ipairs(uiList) do
|
|
if uiObj:getUIIndex() == UIManager.UI_PATH.MAINCITY_UI then
|
|
mainUIOn = uiObj:isVisible()
|
|
break
|
|
end
|
|
end
|
|
|
|
if not mainUIOn then
|
|
return
|
|
end
|
|
|
|
if not self.curIndex or not self.toastList or self.curIndex >= #self.toastList then
|
|
self.toastList = {}
|
|
self.curIndex = 0
|
|
end
|
|
|
|
table.insert(self.toastList, str)
|
|
|
|
self:tryShowToast(true)
|
|
end
|
|
|
|
function RollToastManager:tryShowToast(ignoreMainUI)
|
|
if not ignoreMainUI then
|
|
local mainUIOn = false
|
|
local uiList = UIManager:getUIList()
|
|
for _, uiObj in ipairs(uiList) do
|
|
if uiObj:getUIIndex() == UIManager.UI_PATH.MAINCITY_UI then
|
|
mainUIOn = uiObj:isVisible()
|
|
break
|
|
end
|
|
end
|
|
|
|
if not mainUIOn then
|
|
return
|
|
end
|
|
end
|
|
|
|
if not self.curIndex or not self.toastList or self.curIndex >= #self.toastList then
|
|
self.toastList = {}
|
|
self.curIndex = 0
|
|
end
|
|
|
|
if self.updateContent then
|
|
self:_showToast(self.updateContent, true)
|
|
self.toastList = {}
|
|
self.curIndex = 0
|
|
return -- 有维护更新时,强制显示更新,并且清除所有缓存
|
|
end
|
|
|
|
local index = self.curIndex + 1
|
|
if self.toastList[index] then
|
|
self:_showToast(self.toastList[index])
|
|
end
|
|
end
|
|
|
|
function RollToastManager:_showToast(str, isUpdateConetnt)
|
|
UIManager:getRollToast(function(prefabObject)
|
|
prefabObject:getComponent(GConst.TYPEOF_UNITY_CLASS.CANVAS).enabled = true
|
|
local seq, content = self:getIdleSeq(prefabObject)
|
|
if seq then
|
|
if not isUpdateConetnt then
|
|
self.curIndex = self.curIndex + 1
|
|
end
|
|
content:setText(str)
|
|
content:setSizeDeltaX(content:getComponent(GConst.TYPEOF_UNITY_CLASS.UI_TEXT_MESH_PRO).preferredWidth)
|
|
content:setAnchoredPositionX(0)
|
|
local targetPos = prefabObject:getSizeDeltaX() + content:getSizeDeltaX()
|
|
local tryShowNextPosX = content:getSizeDeltaX() + MIN_SPACING
|
|
|
|
seq:Append(content:getTransform():DOAnchorPosX(-targetPos, (targetPos / 100) * HUNDRED_PIXEL_TIME):SetEase(CS.DG.Tweening.Ease.Linear))
|
|
seq:InsertCallback((tryShowNextPosX / 100) * HUNDRED_PIXEL_TIME, function()
|
|
self:tryShowToast()
|
|
end)
|
|
end
|
|
end)
|
|
end
|
|
|
|
function RollToastManager:getIdleSeq(rollToastObj)
|
|
local uiMap = rollToastObj:genAllChildren()
|
|
local content1 = uiMap["roll_toast.content_1"]
|
|
local content2 = uiMap["roll_toast.content_2"]
|
|
if not self.seq1 then
|
|
local canCreate = true
|
|
if self.seq2 and (content2:getAnchoredPosition().x + content2:getSizeDeltaX() > -MIN_SPACING) then
|
|
canCreate = false
|
|
end
|
|
if canCreate then
|
|
self.seq1 = content1:createBindTweenSequence()
|
|
self.seq1:OnComplete(function()
|
|
self.seq1 = nil
|
|
self:tryShowToast()
|
|
self:tryHide()
|
|
end)
|
|
if not self.seq2 then
|
|
content2:setText(GConst.EMPTY_STRING)
|
|
end
|
|
return self.seq1, content1
|
|
end
|
|
end
|
|
|
|
if not self.seq2 then
|
|
local canCreate = true
|
|
if self.seq1 and (content1:getAnchoredPosition().x + content1:getSizeDeltaX() > -MIN_SPACING) then
|
|
canCreate = false
|
|
end
|
|
if canCreate then
|
|
self.seq2 = content2:createBindTweenSequence()
|
|
self.seq2:OnComplete(function()
|
|
self.seq2 = nil
|
|
self:tryShowToast()
|
|
self:tryHide()
|
|
end)
|
|
if not self.seq1 then
|
|
content1:setText(GConst.EMPTY_STRING)
|
|
end
|
|
return self.seq2, content2
|
|
end
|
|
end
|
|
end
|
|
|
|
function RollToastManager:tryHide()
|
|
if self.curIndex >= #self.toastList and not self.updateContent and not self.seq1 and not self.seq2 then
|
|
UIManager:getRollToast(function(prefabObject)
|
|
prefabObject:getComponent(GConst.TYPEOF_UNITY_CLASS.CANVAS).enabled = false
|
|
end)
|
|
end
|
|
end
|
|
|
|
function RollToastManager:clearSeq()
|
|
if self.seq1 then
|
|
self.seq1:Kill()
|
|
self.seq1 = nil
|
|
end
|
|
if self.seq2 then
|
|
self.seq2:Kill()
|
|
self.seq2 = nil
|
|
end
|
|
end
|
|
|
|
function RollToastManager:showUpdateToast(cd)
|
|
UIManager:getRollToast(function(prefabObject)
|
|
prefabObject:getComponent(GConst.TYPEOF_UNITY_CLASS.CANVAS).enabled = false
|
|
|
|
if prefabObject._updateToastSequence then
|
|
prefabObject._updateToastSequence:Kill()
|
|
prefabObject._updateToastSequence = nil
|
|
end
|
|
|
|
prefabObject._updateToastSequence = prefabObject:createBindTweenSequence()
|
|
prefabObject._updateToastSequence:SetUpdate(CS.DG.Tweening.UpdateType.Normal, true)
|
|
|
|
self.updateContent = nil
|
|
if cd >= FIFTEEN_MINITE_SECOND - SECONDS_PRE_MINUTE then -- 大于等于14分钟
|
|
local intervalTime = cd - FIFTEEN_MINITE_SECOND + SECONDS_PRE_MINUTE
|
|
if cd >= FIFTEEN_MINITE_SECOND then -- 大于等于15分钟
|
|
prefabObject._updateToastSequence:AppendInterval(cd - FIFTEEN_MINITE_SECOND)
|
|
intervalTime = SECONDS_PRE_MINUTE
|
|
end
|
|
|
|
-- 15分钟
|
|
local minute = math.floor(FIFTEEN_MINITE_SECOND / SECONDS_PRE_MINUTE)
|
|
if cd < FIFTEEN_MINITE_SECOND then
|
|
self.updateContent = I18N:getGlobalText(I18N.GlobalConst.UPDATE_TOAST_TXT, minute)
|
|
end
|
|
prefabObject._updateToastSequence:AppendCallback(function()
|
|
self.updateContent = I18N:getGlobalText(I18N.GlobalConst.UPDATE_TOAST_TXT, minute)
|
|
self:tryShowToast()
|
|
DataManager.ChatData:getChatSystem():addMaintenanceMsg(minute)
|
|
end)
|
|
prefabObject._updateToastSequence:AppendInterval(intervalTime)
|
|
prefabObject._updateToastSequence:AppendCallback(function()
|
|
self.updateContent = nil
|
|
end)
|
|
prefabObject._updateToastSequence:AppendInterval(FOUR_MINITE_SECOND)
|
|
|
|
cd = TEN_MINITE_SECOND
|
|
end
|
|
|
|
if cd >= TEN_MINITE_SECOND - SECONDS_PRE_MINUTE then -- 大于等于9分钟
|
|
local intervalTime = cd - TEN_MINITE_SECOND + SECONDS_PRE_MINUTE
|
|
if cd >= TEN_MINITE_SECOND then
|
|
prefabObject._updateToastSequence:AppendInterval(cd - TEN_MINITE_SECOND)
|
|
intervalTime = SECONDS_PRE_MINUTE
|
|
end
|
|
|
|
-- 10分钟
|
|
local minute = math.floor(TEN_MINITE_SECOND / SECONDS_PRE_MINUTE)
|
|
if cd < TEN_MINITE_SECOND then
|
|
self.updateContent = I18N:getGlobalText(I18N.GlobalConst.UPDATE_TOAST_TXT, minute)
|
|
end
|
|
prefabObject._updateToastSequence:AppendCallback(function()
|
|
self.updateContent = I18N:getGlobalText(I18N.GlobalConst.UPDATE_TOAST_TXT, minute)
|
|
self:tryShowToast()
|
|
DataManager.ChatData:getChatSystem():addMaintenanceMsg(minute)
|
|
end)
|
|
prefabObject._updateToastSequence:AppendInterval(intervalTime)
|
|
prefabObject._updateToastSequence:AppendCallback(function()
|
|
self.updateContent = nil
|
|
end)
|
|
prefabObject._updateToastSequence:AppendInterval(FOUR_MINITE_SECOND)
|
|
|
|
cd = FIVE_MINITE_SECOND
|
|
end
|
|
|
|
if cd >= FIVE_MINITE_SECOND - SECONDS_PRE_MINUTE then -- 大于等于4分钟
|
|
local intervalTime = cd - FIVE_MINITE_SECOND + SECONDS_PRE_MINUTE
|
|
if cd >= FIVE_MINITE_SECOND then
|
|
prefabObject._updateToastSequence:AppendInterval(cd - FIVE_MINITE_SECOND)
|
|
intervalTime = SECONDS_PRE_MINUTE
|
|
end
|
|
|
|
-- 5分钟
|
|
local minute = math.floor(FIVE_MINITE_SECOND / SECONDS_PRE_MINUTE)
|
|
if cd < FIVE_MINITE_SECOND then
|
|
self.updateContent = I18N:getGlobalText(I18N.GlobalConst.UPDATE_TOAST_TXT, minute)
|
|
end
|
|
prefabObject._updateToastSequence:AppendCallback(function()
|
|
self.updateContent = I18N:getGlobalText(I18N.GlobalConst.UPDATE_TOAST_TXT, minute)
|
|
self:tryShowToast()
|
|
DataManager.ChatData:getChatSystem():addMaintenanceMsg(minute)
|
|
end)
|
|
prefabObject._updateToastSequence:AppendInterval(intervalTime)
|
|
prefabObject._updateToastSequence:AppendCallback(function()
|
|
self.updateContent = nil
|
|
end)
|
|
prefabObject._updateToastSequence:AppendInterval(THREE_MINITE_SECOND)
|
|
|
|
cd = SECONDS_PRE_MINUTE
|
|
end
|
|
|
|
if cd >= 0 then -- 最后几分钟
|
|
local intervalTime = cd
|
|
if cd >= SECONDS_PRE_MINUTE then
|
|
prefabObject._updateToastSequence:AppendInterval(cd - SECONDS_PRE_MINUTE)
|
|
intervalTime = SECONDS_PRE_MINUTE
|
|
end
|
|
|
|
-- 1分钟
|
|
local minute = math.floor(SECONDS_PRE_MINUTE / SECONDS_PRE_MINUTE)
|
|
if cd < SECONDS_PRE_MINUTE then
|
|
self.updateContent = I18N:getGlobalText(I18N.GlobalConst.UPDATE_TOAST_TXT, minute)
|
|
end
|
|
prefabObject._updateToastSequence:AppendCallback(function()
|
|
self.updateContent = I18N:getGlobalText(I18N.GlobalConst.UPDATE_TOAST_TXT, minute)
|
|
self:tryShowToast()
|
|
DataManager.ChatData:getChatSystem():addMaintenanceMsg(minute)
|
|
end)
|
|
prefabObject._updateToastSequence:AppendInterval(intervalTime)
|
|
prefabObject._updateToastSequence:OnComplete(function()
|
|
self.updateContent = nil
|
|
end)
|
|
end
|
|
|
|
self:tryShowToast()
|
|
end)
|
|
end
|
|
|
|
return RollToastManager |