304 lines
8.2 KiB
Lua
304 lines
8.2 KiB
Lua
local uiCtrl = require_ex('UI/Panels/Base/UICtrl')
|
|
local PANEL_ID = PanelId.DomainUpgrade
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
DomainUpgradeCtrl = HL.Class('DomainUpgradeCtrl', uiCtrl.UICtrl)
|
|
|
|
local MAIN_HUD_TOAST_TYPE = "DomainUpgrade"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
DomainUpgradeCtrl.s_messages = HL.StaticField(HL.Table) << {
|
|
|
|
[MessageConst.INTERRUPT_MAIN_HUD_ACTION_QUEUE] = 'InterruptMainHudActionQueue',
|
|
}
|
|
|
|
|
|
|
|
|
|
DomainUpgradeCtrl.m_levelUpInfoQueue = HL.Field(HL.Forward("Queue"))
|
|
|
|
|
|
DomainUpgradeCtrl.m_aniPlayInfo = HL.Field(HL.Table)
|
|
|
|
|
|
DomainUpgradeCtrl.m_domainInfo = HL.Field(HL.Table)
|
|
|
|
|
|
DomainUpgradeCtrl.m_showToastInfo = HL.Field(HL.Table)
|
|
|
|
|
|
DomainUpgradeCtrl.IsWaitOpen = HL.StaticField(HL.Boolean) << false
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
DomainUpgradeCtrl.OnCreate = HL.Override(HL.Any) << function(self, arg)
|
|
self.m_levelUpInfoQueue = require_ex("Common/Utils/DataStructure/Queue")()
|
|
end
|
|
|
|
|
|
|
|
DomainUpgradeCtrl.OnClose = HL.Override() << function(self)
|
|
if self.m_showToastInfo ~= nil then
|
|
Notify(MessageConst.ON_SHOW_DOMAIN_TOAST, self.m_showToastInfo)
|
|
self.m_showToastInfo = nil
|
|
end
|
|
end
|
|
|
|
|
|
|
|
DomainUpgradeCtrl.ShowUpgrade = HL.StaticMethod(HL.Any) << function(arg)
|
|
if DomainUpgradeCtrl.IsWaitOpen then
|
|
|
|
return
|
|
end
|
|
if not Utils.isSystemUnlocked(GEnums.UnlockSystemType.DomainDevelopment) then
|
|
return
|
|
end
|
|
DomainUpgradeCtrl.IsWaitOpen = true
|
|
local domainId, preLv, preExp = unpack(arg)
|
|
LuaSystemManager.mainHudActionQueue:AddRequest(MAIN_HUD_TOAST_TYPE, function()
|
|
local self = UIManager:AutoOpen(PANEL_ID)
|
|
self:_StartShow(domainId, preLv, preExp)
|
|
DomainUpgradeCtrl.IsWaitOpen = false
|
|
end)
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
DomainUpgradeCtrl._StartShow = HL.Method(HL.String, HL.Number, HL.Number) << function(self, domainId, preLv, preExp)
|
|
self:_UpdateData(domainId, preLv, preExp)
|
|
self.view.domainIconImg:LoadSprite(UIConst.UI_SPRITE_SETTLEMENT_ICON_BIG, self.m_domainInfo.domainIcon)
|
|
self:_TryPlayUpgrade()
|
|
end
|
|
|
|
|
|
|
|
DomainUpgradeCtrl.InterruptMainHudActionQueue = HL.Method() << function(self)
|
|
self.animationWrapper:ClearTween(false)
|
|
self:_ClearCache()
|
|
self:Close()
|
|
DomainUpgradeCtrl.IsWaitOpen = false
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
DomainUpgradeCtrl._UpdateData = HL.Method(HL.String, HL.Number, HL.Number) << function(self, domainId, preLv, preExp)
|
|
|
|
local _, domainData = GameInstance.player.domainDevelopmentSystem.domainDevDataDic:TryGetValue(domainId)
|
|
local totalTargetLv = domainData.lv
|
|
local totalTargetExp = domainData.exp
|
|
local _, domainCfg = Tables.domainDataTable:TryGetValue(domainId)
|
|
local domainLvCfg = domainCfg.domainDevelopmentLevel[preLv - 1]
|
|
local preLvMaxExp = domainLvCfg.levelUpExp
|
|
|
|
self.m_domainInfo = {
|
|
domainIcon = domainCfg.domainIcon,
|
|
domainName = domainCfg.domainName,
|
|
domainColor = UIUtils.getColorByString(domainCfg.domainColor),
|
|
|
|
audKeyUpToastNotLevelUpEnhance = domainCfg.audKeyUpToastNotLevelUpEnhance,
|
|
audKeyUpToastLevelUpPreEnhance = domainCfg.audKeyUpToastLevelUpPreEnhance,
|
|
audKeyUpToastLevelUpMoment = domainCfg.audKeyUpToastLevelUpMoment,
|
|
audKeyUpToastLevelUpAfterEnhance = domainCfg.audKeyUpToastLevelUpAfterEnhance,
|
|
}
|
|
|
|
local info = {
|
|
curLv = preLv,
|
|
targetLv = totalTargetLv,
|
|
curExp = preExp,
|
|
targetExp = totalTargetExp,
|
|
maxExp = preLvMaxExp,
|
|
totalAddExp = totalTargetExp - preExp,
|
|
}
|
|
if preLv == totalTargetLv then
|
|
|
|
info.isLevelUp = false
|
|
info.levelUpMode = false
|
|
self.m_levelUpInfoQueue:Push(info)
|
|
self.m_showToastInfo = nil
|
|
else
|
|
|
|
info.isLevelUp = true
|
|
info.levelUpMode = true
|
|
info.targetExp = info.maxExp
|
|
self.m_levelUpInfoQueue:Push(info)
|
|
self.m_levelUpInfoQueue:Push({
|
|
curLv = totalTargetLv,
|
|
targetLv = totalTargetLv,
|
|
curExp = preLvMaxExp,
|
|
targetExp = totalTargetExp,
|
|
maxExp = domainData.curLevelData.levelUpExp,
|
|
totalAddExp = -1,
|
|
|
|
isLevelUp = false,
|
|
levelUpMode = true,
|
|
})
|
|
|
|
self.m_showToastInfo = {
|
|
domainId = domainId,
|
|
preLv = preLv,
|
|
}
|
|
end
|
|
end
|
|
|
|
|
|
|
|
DomainUpgradeCtrl._ClearCache = HL.Method() << function(self)
|
|
if self.m_aniPlayInfo and self.m_aniPlayInfo.tween then
|
|
self.m_aniPlayInfo.tween:Kill()
|
|
end
|
|
|
|
self.m_aniPlayInfo = nil
|
|
self.m_levelUpInfoQueue:Clear()
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
DomainUpgradeCtrl._StartPlayUpgradeAni = HL.Method() << function(self)
|
|
local info = self.m_aniPlayInfo.basicInfo
|
|
local upgradeNode = self.view.upgradeNode
|
|
local maxExp = info.maxExp > 0 and info.maxExp or 1
|
|
|
|
self.view.levelUpStateCtrl:SetState(info.levelUpMode and "LevelUp" or "NotLevelUp")
|
|
self.view.curExpTxt.text = info.curExp
|
|
self.view.curExpBar.value = info.curExp / maxExp
|
|
self.view.targetExpTxt.text = info.maxExp > 0 and "/" .. info.maxExp or "/-"
|
|
self.view.targetExpBar.value = info.targetExp / maxExp
|
|
if info.isLevelUp then
|
|
upgradeNode.descTxtStateCtrl:SetState("LevelUp")
|
|
upgradeNode.descTxt.text = string.format(Language.LUA_DOMAIN_UPGRADE_DESC, self.m_domainInfo.domainName)
|
|
else
|
|
upgradeNode.descTxtStateCtrl:SetState("NotLevelUp")
|
|
end
|
|
|
|
upgradeNode.InitialStateCtrl:SetState("InitialState")
|
|
upgradeNode.curLvTxt.text = info.curLv
|
|
upgradeNode.targetLvTxt.text = info.targetLv
|
|
upgradeNode.diffExpTxt.text = "+" .. info.totalAddExp
|
|
upgradeNode.diffExpNode.gameObject:SetActive(info.totalAddExp > 0)
|
|
|
|
local color = self.m_domainInfo.domainColor
|
|
self.view.colorImage1.color = color
|
|
self.view.colorImage2.color = color
|
|
self.view.upgradeNode.arrowColorImage1.color = color
|
|
self.view.upgradeNode.arrowColorImage2.color = color
|
|
|
|
|
|
local inAniName
|
|
if info.levelUpMode == false or info.isLevelUp == true then
|
|
|
|
inAniName = "domainupgrade_up"
|
|
else
|
|
inAniName = "domainupgrade_levelup_become_up_next"
|
|
end
|
|
|
|
|
|
local audKey = info.isLevelUp and self.m_domainInfo.audKeyUpToastLevelUpPreEnhance or self.m_domainInfo.audKeyUpToastLevelUpAfterEnhance
|
|
AudioAdapter.PostEvent(audKey)
|
|
|
|
self.view.animationWrapper:Play(inAniName,
|
|
function()
|
|
self.m_aniPlayInfo.tween = DOTween.To(
|
|
function()
|
|
return info.curExp
|
|
end,
|
|
function(value)
|
|
value = math.floor(value)
|
|
if not self.view or IsNull(self.view.curExpTxt) then
|
|
return
|
|
end
|
|
self.view.curExpTxt.text = value
|
|
self.view.curExpBar.value = value / maxExp
|
|
end,
|
|
info.targetExp,
|
|
self.view.config.PROGRESS_INCREASE_ANI_DURATION
|
|
)
|
|
|
|
AudioAdapter.PostEvent(self.m_domainInfo.audKeyUpToastNotLevelUpEnhance)
|
|
if info.isLevelUp then
|
|
self.m_aniPlayInfo.tween:OnComplete(function()
|
|
AudioAdapter.PostEvent(self.m_domainInfo.audKeyUpToastLevelUpMoment)
|
|
self.view.animationWrapper:Play("domainupgrade_levelup", function()
|
|
self.view.animationWrapper:Play("domainupgrade_levelup_become_up_pre", function()
|
|
self:_TryPlayUpgrade()
|
|
end)
|
|
end)
|
|
end)
|
|
else
|
|
self.m_aniPlayInfo.tween:OnComplete(function()
|
|
self:_TryPlayUpgrade()
|
|
end)
|
|
end
|
|
end
|
|
)
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
DomainUpgradeCtrl._TryPlayUpgrade = HL.Method() << function(self)
|
|
if self.m_levelUpInfoQueue:Count() <= 0 then
|
|
self:_CompleteCloseSelf()
|
|
return
|
|
end
|
|
|
|
local lvUpInfo = self.m_levelUpInfoQueue:Pop()
|
|
self.m_aniPlayInfo = {
|
|
basicInfo = lvUpInfo,
|
|
tween = nil,
|
|
}
|
|
|
|
self:_StartPlayUpgradeAni()
|
|
end
|
|
|
|
|
|
|
|
DomainUpgradeCtrl._CompleteCloseSelf = HL.Method() << function(self)
|
|
self.view.animationWrapper:PlayOutAnimation(function()
|
|
self:_ClearCache()
|
|
self:Close()
|
|
Notify(MessageConst.ON_ONE_MAIN_HUD_ACTION_FINISHED, MAIN_HUD_TOAST_TYPE)
|
|
end)
|
|
end
|
|
|
|
|
|
HL.Commit(DomainUpgradeCtrl)
|