eafd8f4088
EN: 1.9.0.107 CN: 1.9.0.108 JP: 1.9.0.112 KR: 1.9.0.112
362 lines
13 KiB
Lua
362 lines
13 KiB
Lua
local InfinityTowerPauseCtrl = class("InfinityTowerPauseCtrl", BaseCtrl)
|
|
local AdventureModuleHelper = CS.AdventureModuleHelper
|
|
local GamepadUIManager = require("GameCore.Module.GamepadUIManager")
|
|
local LayoutRebuilder = CS.UnityEngine.UI.LayoutRebuilder
|
|
InfinityTowerPauseCtrl._mapNodeConfig = {
|
|
aniBlur = {sComponentName = "Animator"},
|
|
btnBlur = {
|
|
sNodeName = "snapshot",
|
|
sComponentName = "Button",
|
|
callback = "OnBtnClick_Close"
|
|
},
|
|
safeAreaRoot = {
|
|
sNodeName = "----SafeAreaRoot----"
|
|
},
|
|
aniWindow = {sNodeName = "--Window--", sComponentName = "Animator"},
|
|
txtWindowTitle = {
|
|
sComponentName = "TMP_Text",
|
|
sLanguageId = "MainBattle_Pause"
|
|
},
|
|
btnClose = {
|
|
sComponentName = "UIButton",
|
|
callback = "OnBtnClick_Close"
|
|
},
|
|
btnGiveUp = {
|
|
sComponentName = "NaviButton",
|
|
callback = "OnBtnClick_End",
|
|
sAction = "Giveup",
|
|
sActionIconType = "Dark"
|
|
},
|
|
btnBack = {
|
|
sComponentName = "NaviButton",
|
|
callback = "OnBtnClick_Close",
|
|
sAction = "Back",
|
|
sActionIconType = "Dark"
|
|
},
|
|
btnSettings = {
|
|
sComponentName = "NaviButton",
|
|
callback = "OnBtnClick_Settings"
|
|
},
|
|
btnPopSkill = {
|
|
sComponentName = "NaviButton",
|
|
callback = "OnBtnClick_Skill"
|
|
},
|
|
ActionBar = {
|
|
sCtrlName = "Game.UI.ActionBar.ActionBarCtrl"
|
|
},
|
|
txtGiveUp = {
|
|
nCount = 2,
|
|
sComponentName = "TMP_Text",
|
|
sLanguageId = "Pause_Btn_EndBattle"
|
|
},
|
|
txtBack = {
|
|
nCount = 2,
|
|
sComponentName = "TMP_Text",
|
|
sLanguageId = "Pause_Btn_ContinueBattle"
|
|
},
|
|
txtBtnSkill = {
|
|
sComponentName = "TMP_Text",
|
|
sLanguageId = "StarTowerMap_Btn_Skill"
|
|
},
|
|
txtBtnSettings = {
|
|
sComponentName = "TMP_Text",
|
|
sLanguageId = "StarTowerMap_Btn_Settings"
|
|
},
|
|
txtTime = {
|
|
sComponentName = "TMP_Text",
|
|
sLanguageId = "MainBattle_Time"
|
|
},
|
|
txtTarget = {
|
|
sComponentName = "TMP_Text",
|
|
sLanguageId = "MainBattle_Task"
|
|
},
|
|
texAffix = {
|
|
sComponentName = "TMP_Text",
|
|
sLanguageId = "InfinityTower_Affix"
|
|
},
|
|
texMonsterPre = {
|
|
sComponentName = "TMP_Text",
|
|
sLanguageId = "InfinityTower_Monster_Preview"
|
|
},
|
|
texTask1 = {
|
|
sComponentName = "TMP_Text",
|
|
sLanguageId = "InfinityTower_Task_Target"
|
|
},
|
|
texNone = {
|
|
sComponentName = "TMP_Text",
|
|
sLanguageId = "InfinityTower_EnemyInfo_None"
|
|
},
|
|
texTimeCount = {sComponentName = "TMP_Text"},
|
|
affixSCRoot = {sComponentName = "Transform"},
|
|
affix_ItemList = {},
|
|
monSV = {
|
|
sComponentName = "LoopScrollView"
|
|
}
|
|
}
|
|
InfinityTowerPauseCtrl._mapEventConfig = {
|
|
show_Infinity_Pause = "OnEvent_ShowInfinityPause",
|
|
GamepadUIReopen = "OnEvent_Reopen"
|
|
}
|
|
function InfinityTowerPauseCtrl:Awake()
|
|
self._mapNode.safeAreaRoot:SetActive(false)
|
|
self.tbGamepadUINode = self:GetGamepadUINode()
|
|
local tbConfig = {
|
|
{
|
|
sAction = "Skill",
|
|
sLang = "StarTowerMap_Btn_Skill"
|
|
},
|
|
{
|
|
sAction = "Settings",
|
|
sLang = "StarTowerMap_Btn_Settings"
|
|
}
|
|
}
|
|
self._mapNode.ActionBar:InitActionBar(tbConfig)
|
|
end
|
|
function InfinityTowerPauseCtrl:FadeIn()
|
|
end
|
|
function InfinityTowerPauseCtrl:FadeOut()
|
|
end
|
|
function InfinityTowerPauseCtrl:OnEnable()
|
|
end
|
|
function InfinityTowerPauseCtrl:OnDisable()
|
|
end
|
|
function InfinityTowerPauseCtrl:OnDestroy()
|
|
end
|
|
function InfinityTowerPauseCtrl:OnRelease()
|
|
end
|
|
function InfinityTowerPauseCtrl:OnEvent_ShowInfinityPause(runTime, tbChar)
|
|
self.tbChar = tbChar
|
|
EventManager.Hit(EventId.BattleDashboardVisible, false)
|
|
PanelManager.InputDisable()
|
|
local lvId = PlayerData.InfinityTower:GetCurrentLv()
|
|
local lvData = ConfigTable.GetData("InfinityTowerLevel", lvId)
|
|
local flId = lvData.FloorId
|
|
local flData = ConfigTable.GetData("InfinityTowerFloor", flId)
|
|
self:ShowPanelMonsterList(flData.PreviewMonsterGroupId)
|
|
self:ShowAffixItem(lvId)
|
|
self:PlayInAni()
|
|
self:ShowRunTime(runTime)
|
|
GamepadUIManager.EnableGamepadUI("InfinityTowerPauseCtrl", self.tbGamepadUINode)
|
|
end
|
|
function InfinityTowerPauseCtrl:ShowRunTime(runTime)
|
|
local min = math.floor(runTime / 60)
|
|
local sec = runTime - min * 60
|
|
local strMin = tostring(min)
|
|
if min < 10 then
|
|
strMin = "0" .. strMin
|
|
end
|
|
local strSec = tostring(sec)
|
|
if sec < 10 then
|
|
strSec = "0" .. strSec
|
|
end
|
|
NovaAPI.SetTMPText(self._mapNode.texTimeCount, string.format("%s:%s", strMin, strSec))
|
|
end
|
|
function InfinityTowerPauseCtrl:PlayInAni()
|
|
self._mapNode.aniBlur.gameObject:SetActive(true)
|
|
local wait = function()
|
|
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
|
|
self._mapNode.safeAreaRoot:SetActive(true)
|
|
self._mapNode.aniWindow:Play("t_window_04_t_in")
|
|
EventManager.Hit(EventId.TemporaryBlockInput, 0.3)
|
|
end
|
|
cs_coroutine.start(wait)
|
|
end
|
|
function InfinityTowerPauseCtrl:ShowAffixItem(levelId)
|
|
local childCount = self._mapNode.affixSCRoot.childCount
|
|
for i = 1, childCount do
|
|
self._mapNode.affixSCRoot:GetChild(i - 1).gameObject:SetActive(false)
|
|
end
|
|
local lvData = ConfigTable.GetData("InfinityTowerLevel", levelId)
|
|
local flData = ConfigTable.GetData("InfinityTowerFloor", lvData.FloorId)
|
|
local tabAffixId = flData.AffixId
|
|
local indexAffix = 1
|
|
if lvData.EntryCond ~= 0 then
|
|
local obj
|
|
if indexAffix + 1 > self._mapNode.affixSCRoot.childCount then
|
|
obj = instantiate(self._mapNode.affix_ItemList, self._mapNode.affixSCRoot)
|
|
else
|
|
obj = self._mapNode.affixSCRoot:GetChild(indexAffix).gameObject
|
|
end
|
|
self:ShowAffixItemMsg(obj, 0, false, false, lvData.EntryCond, lvData.EntryCondParam)
|
|
indexAffix = indexAffix + 1
|
|
end
|
|
for i = 1, #tabAffixId do
|
|
local obj
|
|
if indexAffix + 1 > self._mapNode.affixSCRoot.childCount then
|
|
obj = instantiate(self._mapNode.affix_ItemList, self._mapNode.affixSCRoot)
|
|
else
|
|
obj = self._mapNode.affixSCRoot:GetChild(indexAffix).gameObject
|
|
end
|
|
local affixId = 0
|
|
if tabAffixId[i] ~= nil then
|
|
affixId = tabAffixId[i]
|
|
end
|
|
self:ShowAffixItemMsg(obj, affixId, true, false, nil, nil)
|
|
indexAffix = indexAffix + 1
|
|
end
|
|
if indexAffix < 5 then
|
|
local tmpIndex = indexAffix + 1
|
|
for i = tmpIndex, 5 do
|
|
local obj
|
|
if indexAffix + 1 > self._mapNode.affixSCRoot.childCount then
|
|
obj = instantiate(self._mapNode.affix_ItemList, self._mapNode.affixSCRoot)
|
|
else
|
|
obj = self._mapNode.affixSCRoot:GetChild(indexAffix).gameObject
|
|
end
|
|
self:ShowAffixItemMsg(obj, 0, false, true, nil, nil)
|
|
indexAffix = indexAffix + 1
|
|
end
|
|
end
|
|
LayoutRebuilder.ForceRebuildLayoutImmediate(self._mapNode.affixSCRoot.gameObject:GetComponent("RectTransform"))
|
|
end
|
|
function InfinityTowerPauseCtrl:ShowAffixItemMsg(obj, affixId, isAffix, isEmpty, entryCond, entryCondParam)
|
|
obj:SetActive(true)
|
|
local goNextMsg_affix_Item_1 = obj.transform:Find("lvmsgBot_affix_Item_1").gameObject
|
|
local goNextMsg_affix_Item_2 = obj.transform:Find("lvmsgBot_affix_Item_2").gameObject
|
|
local goNextMsg_affix_Item_3 = obj.transform:Find("lvmsgBot_affix_Item_3").gameObject
|
|
local goNextMsg_affix_Item_4 = obj.transform:Find("lvmsgBot_affix_Item_4").gameObject
|
|
goNextMsg_affix_Item_1:SetActive(false)
|
|
goNextMsg_affix_Item_2:SetActive(false)
|
|
goNextMsg_affix_Item_3:SetActive(false)
|
|
goNextMsg_affix_Item_4:SetActive(false)
|
|
if isAffix then
|
|
goNextMsg_affix_Item_1:SetActive(true)
|
|
local tex_1 = goNextMsg_affix_Item_1.transform:Find("tex_lvmsgBot_affix_Item_1"):GetComponent("TMP_Text")
|
|
local dataAffix = ConfigTable.GetData("InfinityTowerAffix", affixId)
|
|
local sDesc = orderedFormat(ConfigTable.GetUIText("InfinityTowerAffix_Desc"), dataAffix.Name, dataAffix.Desc)
|
|
NovaAPI.SetTMPText(tex_1, UTILS.ParseParamDesc(sDesc, dataAffix))
|
|
elseif isEmpty then
|
|
goNextMsg_affix_Item_4:SetActive(true)
|
|
else
|
|
goNextMsg_affix_Item_2:SetActive(true)
|
|
local tex_2Title = goNextMsg_affix_Item_2.transform:Find("tex_lvmsgBot_affix_Item_2/Image/tex_lvmsgBot_affix_Item_2Title"):GetComponent("TMP_Text")
|
|
NovaAPI.SetTMPText(tex_2Title, ConfigTable.GetUIText("InfinityTower_Limit_March"))
|
|
local tex_2 = goNextMsg_affix_Item_2.transform:Find("tex_lvmsgBot_affix_Item_2"):GetComponent("TMP_Text")
|
|
local strElement = ConfigTable.GetUIText("ELEMENT_" .. entryCondParam[1])
|
|
if entryCond == GameEnum.InfinityTowerCond.MasterCharactersWithSpecificElementType then
|
|
NovaAPI.SetTMPText(tex_2, orderedFormat(ConfigTable.GetUIText("InfinityTower_Cond_SpecificElementType"), strElement))
|
|
elseif entryCond == GameEnum.InfinityTowerCond.ElementTypeWithSpecificQuantityNoLessThanQuantity then
|
|
NovaAPI.SetTMPText(tex_2, orderedFormat(ConfigTable.GetUIText("InfinityTower_Cond_SpecificQuantityNoLessThanQuantity"), strElement, entryCondParam[2]))
|
|
elseif entryCond == GameEnum.InfinityTowerCond.ElementTypeWithSpecificQuantityNoMoreThanQuantity then
|
|
NovaAPI.SetTMPText(tex_2, orderedFormat(ConfigTable.GetUIText("InfinityTower_Cond_SpecificQuantityNoMoreThanQuantity"), strElement, entryCondParam[2]))
|
|
end
|
|
end
|
|
end
|
|
function InfinityTowerPauseCtrl:ShowPanelMonsterList(nPreviewMonsterGroupId)
|
|
local tbMonsterGroup = ConfigTable.GetData("PreviewMonsterGroup", nPreviewMonsterGroupId)
|
|
if tbMonsterGroup == nil then
|
|
return
|
|
end
|
|
self.tbMonster = tbMonsterGroup.MonsterIds
|
|
if self.tbMonster == nil or #self.tbMonster == 0 then
|
|
return
|
|
end
|
|
local bOpen = true
|
|
for _, v in ipairs(self.tbMonster) do
|
|
local monsterCfg = ConfigTable.GetData("Monster", v)
|
|
if nil == monsterCfg then
|
|
printError("读取PreviewMonsterList配置失败!!!monsterId = " .. v.PreviewMonsterListId)
|
|
bOpen = false
|
|
end
|
|
end
|
|
if not bOpen then
|
|
return
|
|
end
|
|
local comp = function(a, b)
|
|
local monsterA = ConfigTable.GetData("Monster", a)
|
|
local monsterB = ConfigTable.GetData("Monster", b)
|
|
if monsterA == nil or monsterB == nil then
|
|
return
|
|
end
|
|
if monsterA.EpicLv ~= monsterB.EpicLv then
|
|
return monsterA.EpicLv < monsterB.EpicLv
|
|
else
|
|
return a < b
|
|
end
|
|
end
|
|
table.sort(self.tbMonster, comp)
|
|
if #self.tbMonster > 0 then
|
|
self._mapNode.monSV:Init(#self.tbMonster, self, self.RefreshMonsterGrid)
|
|
end
|
|
self._mapNode.texNone.gameObject:SetActive(#self.tbMonster == 0)
|
|
end
|
|
function InfinityTowerPauseCtrl:RefreshMonsterGrid(goGrid, gridIndex)
|
|
local index = gridIndex + 1
|
|
local nMonsterId = self.tbMonster[index]
|
|
if nMonsterId == 0 then
|
|
return
|
|
end
|
|
local imgIcon = goGrid.transform:Find("btnGrid/AnimRoot/tc_head_01/--Basic--/imgIcon"):GetComponent("Image")
|
|
local goSelect = goGrid.transform:Find("btnGrid/AnimRoot/tc_head_01/--Common--").gameObject
|
|
local goBoss = goGrid.transform:Find("btnGrid/AnimRoot/tc_head_01/--Monster--/goBoss").gameObject
|
|
local goLeader = goGrid.transform:Find("btnGrid/AnimRoot/tc_head_01/--Monster--/goLeader").gameObject
|
|
local goElite = goGrid.transform:Find("btnGrid/AnimRoot/tc_head_01/--Monster--/goElite").gameObject
|
|
local btn = goGrid.transform:Find("btnGrid"):GetComponent("UIButton")
|
|
local mData = ConfigTable.GetData("Monster", nMonsterId)
|
|
btn.onClick:RemoveAllListeners()
|
|
local _strLv = ""
|
|
local clickCb = function()
|
|
local mapData = {nTid = nMonsterId, strLv = _strLv}
|
|
EventManager.Hit(EventId.OpenPanel, PanelId.MonsterTips, btn.gameObject, mapData)
|
|
end
|
|
btn.onClick:AddListener(clickCb)
|
|
local mSkin = ConfigTable.GetData("MonsterSkin", mData.FAId)
|
|
if nil == mSkin then
|
|
printError("读取MonsterSkin配置失败!!!skinId = " .. mData.FAId)
|
|
return
|
|
end
|
|
local mManual = ConfigTable.GetData("MonsterManual", mSkin.MonsterManual)
|
|
if nil == mManual then
|
|
printError("读取MonsterSkin配置失败!!!MonsterManualId = " .. mSkin.MonsterManual)
|
|
return
|
|
end
|
|
if nil ~= mData then
|
|
self:SetPngSprite(imgIcon, mManual.Icon)
|
|
goSelect:SetActive(self.curSelect == index)
|
|
goBoss:SetActive(mData.EpicLv == GameEnum.monsterEpicType.LORD)
|
|
goLeader:SetActive(mData.EpicLv == GameEnum.monsterEpicType.LEADER)
|
|
goElite:SetActive(mData.EpicLv == GameEnum.monsterEpicType.ELITE)
|
|
end
|
|
end
|
|
function InfinityTowerPauseCtrl:OnBtnClick_End()
|
|
self:PlayCloseAni(true)
|
|
end
|
|
function InfinityTowerPauseCtrl:OnBtnClick_Close()
|
|
self:PlayCloseAni(false)
|
|
end
|
|
function InfinityTowerPauseCtrl:PlayCloseAni(bGiveUp)
|
|
self._mapNode.aniWindow:Play("t_window_04_t_out")
|
|
self._mapNode.aniBlur:SetTrigger("tOut")
|
|
EventManager.Hit(EventId.TemporaryBlockInput, 0.2)
|
|
self:AddTimer(1, 0.2, "OnPanelClose", true, true, true, bGiveUp)
|
|
end
|
|
function InfinityTowerPauseCtrl:OnPanelClose(_, bGiveUp)
|
|
PanelManager.InputEnable()
|
|
GamepadUIManager.DisableGamepadUI("InfinityTowerPauseCtrl")
|
|
EventManager.Hit(EventId.BattleDashboardVisible, true)
|
|
self._mapNode.aniBlur.gameObject:SetActive(false)
|
|
self._mapNode.safeAreaRoot:SetActive(false)
|
|
if bGiveUp then
|
|
EventManager.Hit(EventId.AbandonBattle)
|
|
end
|
|
end
|
|
function InfinityTowerPauseCtrl:OnBtnClick_Skill(btn)
|
|
EventManager.Hit(EventId.OpenPanel, PanelId.PopupSkillPanel, self.tbChar, true)
|
|
self._mapNode.ActionBar.gameObject:SetActive(false)
|
|
end
|
|
function InfinityTowerPauseCtrl:OnBtnClick_Settings(btn)
|
|
EventManager.Hit(EventId.OpenPanel, PanelId.BattleSettings)
|
|
self._mapNode.ActionBar.gameObject:SetActive(false)
|
|
end
|
|
function InfinityTowerPauseCtrl:OnEvent_Reopen(sName)
|
|
if sName ~= "InfinityTowerPauseCtrl" then
|
|
return
|
|
end
|
|
local nUIType = GamepadUIManager.GetCurUIType()
|
|
if nUIType == AllEnum.GamepadUIType.Other then
|
|
return
|
|
end
|
|
self._mapNode.ActionBar.gameObject:SetActive(true)
|
|
end
|
|
return InfinityTowerPauseCtrl
|