320 lines
8.4 KiB
Lua
320 lines
8.4 KiB
Lua
|
|
local uiCtrl = require_ex('UI/Panels/Base/UICtrl')
|
|
local PANEL_ID = PanelId.AchievementToast
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
AchievementToastCtrl = HL.Class('AchievementToastCtrl', uiCtrl.UICtrl)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
AchievementToastCtrl.s_messages = HL.StaticField(HL.Table) << {
|
|
|
|
}
|
|
|
|
|
|
|
|
AchievementToastCtrl.RequestAchievementToasts = HL.StaticMethod(HL.Any) << function(arg)
|
|
if not Utils.isSystemUnlocked(GEnums.UnlockSystemType.Achievement) then
|
|
return
|
|
end
|
|
if arg == nil then
|
|
return
|
|
end
|
|
local bundles = unpack(arg)
|
|
local ctrl = AchievementToastCtrl.AutoOpen(PANEL_ID, nil, false)
|
|
ctrl:_RequestToasts(bundles)
|
|
end
|
|
|
|
|
|
AchievementToastCtrl.EnableAchievementToastByLoading = HL.StaticMethod() << function()
|
|
AchievementToastCtrl._EnableByKey(UIConst.ACHIEVEMENT_TOAST_DISABLE_KEY.Loading)
|
|
end
|
|
|
|
|
|
AchievementToastCtrl.DisableAchievementToastByLoading = HL.StaticMethod() << function()
|
|
AchievementToastCtrl._DisableByKey(UIConst.ACHIEVEMENT_TOAST_DISABLE_KEY.Loading)
|
|
end
|
|
|
|
|
|
|
|
AchievementToastCtrl.EnableAchievementToast = HL.StaticMethod(HL.Any) << function(arg)
|
|
AchievementToastCtrl._EnableByKey(arg)
|
|
end
|
|
|
|
|
|
|
|
AchievementToastCtrl.DisableAchievementToast = HL.StaticMethod(HL.Any) << function(arg)
|
|
AchievementToastCtrl._DisableByKey(arg)
|
|
end
|
|
|
|
|
|
|
|
AchievementToastCtrl._EnableByKey = HL.StaticMethod(HL.String) << function(key)
|
|
if string.isEmpty(key) then
|
|
logger.error("Achievement disable status is setting without key, pls check.")
|
|
return
|
|
end
|
|
AchievementToastCtrl.s_disableByKey[key] = nil
|
|
end
|
|
|
|
|
|
|
|
AchievementToastCtrl._DisableByKey = HL.StaticMethod(HL.String) << function(key)
|
|
if string.isEmpty(key) then
|
|
logger.error("Achievement disable status is setting without key, pls check.")
|
|
return
|
|
end
|
|
AchievementToastCtrl.s_disableByKey[key] = true
|
|
end
|
|
|
|
|
|
AchievementToastCtrl._CheckIsDisable = HL.StaticMethod().Return(HL.Boolean) << function()
|
|
for key, flag in pairs(AchievementToastCtrl.s_disableByKey) do
|
|
if flag == true then
|
|
return true
|
|
end
|
|
end
|
|
return false
|
|
end
|
|
|
|
|
|
AchievementToastCtrl.m_updateKey = HL.Field(HL.Number) << -1
|
|
|
|
|
|
AchievementToastCtrl.m_requestQueue = HL.Field(HL.Forward("Queue"))
|
|
|
|
|
|
AchievementToastCtrl.m_showTween = HL.Field(HL.Any) << nil
|
|
|
|
|
|
AchievementToastCtrl.m_achievementToastTimer = HL.Field(HL.Number) << 0
|
|
|
|
|
|
AchievementToastCtrl.s_disableByKey = HL.StaticField(HL.Table) << {}
|
|
|
|
|
|
|
|
|
|
|
|
AchievementToastCtrl.OnCreate = HL.Override(HL.Any) << function(self, arg)
|
|
local switchBuilder = CS.Beyond.UI.UIAnimationSwitchTween.Builder()
|
|
local tweenOptions = CS.Beyond.UI.UISwitchTween.Options()
|
|
tweenOptions.onShown = function()
|
|
self:_OnToastShown()
|
|
end
|
|
tweenOptions.onHiden = function()
|
|
self:_OnToastHidden()
|
|
end
|
|
switchBuilder.animWrapper = self.animationWrapper
|
|
switchBuilder.dontDisableGameObject = true
|
|
self.m_showTween = switchBuilder:Build()
|
|
self.m_showTween:Reset(false)
|
|
self.m_showTween:SetOptions(tweenOptions)
|
|
self.m_requestQueue = require_ex("Common/Utils/DataStructure/Queue")()
|
|
self.m_updateKey = LuaUpdate:Add("Tick", function()
|
|
self:_Update()
|
|
end, true)
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
AchievementToastCtrl.OnClose = HL.Override() << function(self)
|
|
if self.m_achievementToastTimer > 0 then
|
|
self:_ClearTimer(self.m_achievementToastTimer)
|
|
end
|
|
self.m_updateKey = LuaUpdate:Remove(self.m_updateKey)
|
|
self.m_showTween:Clear()
|
|
self.m_showTween = nil
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
AchievementToastCtrl._RequestToasts = HL.Method(HL.Any) << function(self, bundles)
|
|
if bundles == nil then
|
|
return
|
|
end
|
|
for _, bundle in pairs(bundles) do
|
|
if bundle ~= nil and not string.isEmpty(bundle.achievementId) then
|
|
self:_RequestToast(bundle)
|
|
end
|
|
end
|
|
end
|
|
|
|
|
|
|
|
|
|
AchievementToastCtrl._RequestToast = HL.Method(HL.Any) << function(self, achieveBundle)
|
|
self.m_requestQueue:Push(achieveBundle)
|
|
end
|
|
|
|
|
|
|
|
AchievementToastCtrl._Update = HL.Method() << function(self)
|
|
if AchievementToastCtrl._CheckIsDisable() then
|
|
return
|
|
end
|
|
if self.m_achievementToastTimer > 0 or self.m_requestQueue:Count() <= 0 then
|
|
return
|
|
end
|
|
local bundle = self.m_requestQueue:Pop()
|
|
while not self:_ShowToast(bundle) and self.m_requestQueue:Count() > 0 do
|
|
bundle = self.m_requestQueue:Pop()
|
|
end
|
|
end
|
|
|
|
|
|
|
|
|
|
AchievementToastCtrl._ShowToast = HL.Method(HL.Any).Return(HL.Boolean) << function(self, achieveBundle)
|
|
self.m_showTween:Reset(false)
|
|
local achievementData = Tables.achievementTable[achieveBundle.achievementId]
|
|
local achievementSystem = GameInstance.player.achievementSystem
|
|
local hasPlayerAchievement, playerAchievement = achievementSystem.achievementData.achievementInfos:TryGetValue(achieveBundle.achievementId)
|
|
if achievementData == nil then
|
|
return false
|
|
end
|
|
local isPlated = false
|
|
if hasPlayerAchievement then
|
|
isPlated = playerAchievement.isPlated
|
|
end
|
|
local duration = self.m_requestQueue:Count() > 0 and self.view.config.SHORT_TOAST_DURATION or self.view.config.NORMAL_TOAST_DURATION
|
|
self.m_showTween.isShow = true
|
|
self:_RenderToast(achieveBundle, achievementData, isPlated)
|
|
self.m_achievementToastTimer = TimerManager:StartTimer(duration, function()
|
|
self:_HideToast()
|
|
end)
|
|
return true
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
AchievementToastCtrl._RenderToast = HL.Method(HL.Any, HL.Any, HL.Boolean) << function(self, achieveBundle, achievementData, isPlated)
|
|
local isRare = achievementData.applyRareEffect and achieveBundle.toLevel > Tables.achievementConst.levelDisplayEffect
|
|
self.view.toMedal:InitMedal({
|
|
achievementId = achieveBundle.achievementId,
|
|
level = achieveBundle.toLevel,
|
|
isPlated = isPlated,
|
|
isRare = achievementData.applyRareEffect
|
|
})
|
|
self.view.name.text = achievementData.name
|
|
self.view.stateCtrl:SetState(isRare and "IsQualify" or "NoQualify")
|
|
self:_ResetUpgradeAnim()
|
|
if achieveBundle.fromLevel <= 0 or (achieveBundle.toLevel == achievementData.initLevel and not achieveBundle.isPlating) then
|
|
self.view.fromMedal:InitMedal(nil)
|
|
self.view.title.text = I18nUtils.GetText("ui_achv_toast_obtain")
|
|
else
|
|
local upgradeAnimName = ''
|
|
self.view.fromMedal:InitMedal({
|
|
achievementId = achieveBundle.achievementId,
|
|
level = achieveBundle.fromLevel,
|
|
isPlated = not achieveBundle.isPlating and isPlated,
|
|
isRare = achievementData.applyRareEffect
|
|
})
|
|
if achieveBundle.isPlating then
|
|
if achieveBundle.toLevel == UIConst.ACHIEVEMENT_MEDAL_UPGRADE_LEVEL.Silver then
|
|
upgradeAnimName = self.view.config.UPGRADE_PLATING_SILVER_ANIM_NAME
|
|
elseif achieveBundle.toLevel == UIConst.ACHIEVEMENT_MEDAL_UPGRADE_LEVEL.Gold then
|
|
upgradeAnimName = self.view.config.UPGRADE_PLATING_GOLD_ANIM_NAME
|
|
end
|
|
self.view.title.text = I18nUtils.GetText("ui_achv_toast_plating")
|
|
else
|
|
if achieveBundle.toLevel == UIConst.ACHIEVEMENT_MEDAL_UPGRADE_LEVEL.Silver then
|
|
upgradeAnimName = self.view.config.UPGRADE_SILVER_ANIM_NAME
|
|
elseif achieveBundle.toLevel == UIConst.ACHIEVEMENT_MEDAL_UPGRADE_LEVEL.Gold then
|
|
upgradeAnimName = self.view.config.UPGRADE_GOLD_ANIM_NAME
|
|
end
|
|
self.view.title.text = I18nUtils.GetText("ui_achv_toast_evolute")
|
|
end
|
|
self:_PlayUpgradeAnim(upgradeAnimName)
|
|
end
|
|
end
|
|
|
|
|
|
|
|
AchievementToastCtrl._ResetUpgradeAnim = HL.Method() << function(self)
|
|
if not string.isEmpty(self.view.config.UPGRADE_RESET_SAMPLE_ANIM_NAME) then
|
|
self.view.animationNode:SampleClipAtPercent(self.view.config.UPGRADE_RESET_SAMPLE_ANIM_NAME, 0)
|
|
else
|
|
self.view.animationNode:ClearTween()
|
|
end
|
|
end
|
|
|
|
|
|
|
|
|
|
AchievementToastCtrl._PlayUpgradeAnim = HL.Method(HL.String) << function(self, animName)
|
|
if not string.isEmpty(animName) then
|
|
self.view.animationNode:PlayWithTween(animName)
|
|
end
|
|
end
|
|
|
|
|
|
|
|
|
|
AchievementToastCtrl._HideToast = HL.Method(HL.Opt(HL.Boolean)) << function(self, fastMode)
|
|
self.m_showTween.isShow = false
|
|
end
|
|
|
|
|
|
|
|
AchievementToastCtrl._OnToastEnd = HL.Method() << function(self)
|
|
self:_ClearTimer(self.m_achievementToastTimer)
|
|
self.m_achievementToastTimer = 0
|
|
end
|
|
|
|
|
|
|
|
AchievementToastCtrl._OnToastShown = HL.Method() << function(self)
|
|
|
|
end
|
|
|
|
|
|
|
|
AchievementToastCtrl._OnToastHidden = HL.Method() << function(self)
|
|
self:_OnToastEnd()
|
|
end
|
|
|
|
HL.Commit(AchievementToastCtrl)
|