5e0d58cfad
EN: 1.2.0.60 CN: 1.2.0.61 JP: 1.2.0.63 KR: 1.2.0.67
354 lines
13 KiB
Lua
354 lines
13 KiB
Lua
local FixedRoguelikeLevelCtrl = class("FixedRoguelikeLevelCtrl", BaseCtrl)
|
|
local Actor2DManager = require("Game.Actor2D.Actor2DManager")
|
|
local mapToggle = {
|
|
[1] = GameEnum.diffculty.Diffculty_1,
|
|
[2] = GameEnum.diffculty.Diffculty_2,
|
|
[3] = GameEnum.diffculty.Diffculty_3,
|
|
[4] = GameEnum.diffculty.Diffculty_4
|
|
}
|
|
FixedRoguelikeLevelCtrl._mapNodeConfig = {
|
|
bgLevelInfo = {sNodeName = "----Bg----"},
|
|
rawImgActor2D = {
|
|
sNodeName = "----Actor2D----",
|
|
sComponentName = "RawImage"
|
|
},
|
|
rt_RoguelkeSelect = {},
|
|
rt_RoguelkeInfo = {},
|
|
btnGo = {
|
|
sComponentName = "UIButton",
|
|
callback = "OnBtnClick_Go"
|
|
},
|
|
svRogulike = {
|
|
sComponentName = "LoopScrollView"
|
|
},
|
|
imgElementInfo = {sComponentName = "Image", nCount = 3},
|
|
TMPRoguelikeDesc = {sComponentName = "TMP_Text"},
|
|
TMPRoguelikeName = {sComponentName = "TMP_Text"},
|
|
txtRecommendLevel = {sComponentName = "TMP_Text"},
|
|
ImgRoguelikeInfo = {sComponentName = "Image"},
|
|
item = {
|
|
sCtrlName = "Game.UI.TemplateEx.TemplateItemCtrl",
|
|
nCount = 6
|
|
},
|
|
ItemBtn = {
|
|
sComponentName = "UIButton",
|
|
nCount = 6,
|
|
callback = "OnBtnClick_RewardItem"
|
|
},
|
|
tog = {
|
|
sComponentName = "UIButton",
|
|
nCount = 4,
|
|
callback = "OnBtnClick_Tog"
|
|
},
|
|
imgLockMask = {
|
|
sComponentName = "Button",
|
|
callback = "OnBtnClick_TogTips",
|
|
nCount = 4
|
|
},
|
|
togCtrl = {
|
|
sNodeName = "tog",
|
|
sCtrlName = "Game.UI.TemplateEx.TemplateToggleCtrl",
|
|
nCount = 4
|
|
},
|
|
TopBarPanel = {
|
|
sCtrlName = "Game.UI.TopBarEx.TopBarCtrl"
|
|
},
|
|
AnimCtrl = {
|
|
sComponentName = "Animator",
|
|
sNodeName = "----SafeAreaRoot----"
|
|
},
|
|
goEnemyInfo = {
|
|
sCtrlName = "Game.UI.MainlineEx.MainlineMonsterInfoCtrl"
|
|
},
|
|
goRewardList = {
|
|
sCtrlName = "Game.UI.MainlineEx.RewardListCtrl"
|
|
},
|
|
btnEnemyInfo = {
|
|
sComponentName = "UIButton",
|
|
callback = "OnBtnClick_EnemyInfo"
|
|
},
|
|
btnAllReward = {
|
|
sComponentName = "UIButton",
|
|
callback = "OnBtnClick_RewardList"
|
|
},
|
|
txtEnergyCount = {sComponentName = "TMP_Text"}
|
|
}
|
|
FixedRoguelikeLevelCtrl._mapEventConfig = {
|
|
[EventId.UIHomeConfirm] = "OnEvent_Home",
|
|
[EventId.UIBackConfirm] = "OnEvent_Back"
|
|
}
|
|
function FixedRoguelikeLevelCtrl:Awake()
|
|
self:RefreshTogText()
|
|
end
|
|
function FixedRoguelikeLevelCtrl:FadeIn()
|
|
end
|
|
function FixedRoguelikeLevelCtrl:FadeOut()
|
|
end
|
|
function FixedRoguelikeLevelCtrl:OnEnable()
|
|
local tbParam = self:GetPanelParam()
|
|
if 0 < #tbParam then
|
|
if tbParam[3] == nil then
|
|
end
|
|
self.bJumpto = tbParam[3]
|
|
self.nJumptoHard = tbParam[1] == nil and 0 or tbParam[1]
|
|
self.nJumptoGroup = tbParam[2] == nil and 0 or tbParam[2]
|
|
end
|
|
self._mapNode.rt_RoguelkeSelect:SetActive(true)
|
|
self._mapNode.rt_RoguelkeInfo:SetActive(false)
|
|
self._mapNode.bgLevelInfo:SetActive(false)
|
|
self._mapNode.rawImgActor2D.gameObject:SetActive(true)
|
|
self.curState = 1
|
|
self.curRogueHard = GameEnum.diffculty.Diffculty_1
|
|
self.nCurGroupId = 0
|
|
self.mapAllRoguelike = {}
|
|
self.tbRoguelikeGroup = {}
|
|
local forEachRoguelike = function(mapData)
|
|
if self.mapAllRoguelike[mapData.GroupId] == nil then
|
|
self.mapAllRoguelike[mapData.GroupId] = {}
|
|
table.insert(self.tbRoguelikeGroup, mapData.GroupId)
|
|
end
|
|
self.mapAllRoguelike[mapData.GroupId][mapData.Difficulty] = mapData
|
|
end
|
|
ForEachTableLine(DataTable.FixedRoguelike, forEachRoguelike)
|
|
local sortGroup = function(a, b)
|
|
local mapDataA = ConfigTable.GetData("FixedRoguelikeGroup", a)
|
|
local mapDataB = ConfigTable.GetData("FixedRoguelikeGroup", b)
|
|
return mapDataA.Sort < mapDataB.Sort
|
|
end
|
|
table.sort(self.tbRoguelikeGroup, sortGroup)
|
|
self._mapNode.svRogulike:Init(#self.tbRoguelikeGroup, self, self.RefreshGrid, self.OnBtnClick_Grid)
|
|
if self.nJumptoGroup ~= 0 and self.nJumptoGroup ~= nil then
|
|
if self.nJumptoHard ~= 0 and self.nJumptoHard ~= nil then
|
|
self:OpenJumptoHard()
|
|
else
|
|
self:OpenJumptoGroup()
|
|
end
|
|
end
|
|
Actor2DManager.SetBoardNPC2D(self:GetPanelId(), self._mapNode.rawImgActor2D, 9102)
|
|
end
|
|
function FixedRoguelikeLevelCtrl:OnDisable()
|
|
Actor2DManager.UnsetBoardNPC2D()
|
|
end
|
|
function FixedRoguelikeLevelCtrl:OnDestroy()
|
|
end
|
|
function FixedRoguelikeLevelCtrl:OnRelease()
|
|
end
|
|
function FixedRoguelikeLevelCtrl:RefreshTogText()
|
|
for k, v in pairs(mapToggle) do
|
|
self._mapNode.togCtrl[k]:SetText(ConfigTable.GetUIText("Diffculty_" .. k))
|
|
end
|
|
end
|
|
function FixedRoguelikeLevelCtrl:RefreshGrid(goGrid, gridIndex)
|
|
local nIdx = gridIndex + 1
|
|
local mapRoguelikeGroupId = self.tbRoguelikeGroup[nIdx]
|
|
local mapRoguelike = self.mapAllRoguelike[mapRoguelikeGroupId][GameEnum.diffculty.Diffculty_1]
|
|
local mapRoguelikeGroup = ConfigTable.GetData("FixedRoguelikeGroup", mapRoguelikeGroupId)
|
|
if mapRoguelike == nil then
|
|
return
|
|
end
|
|
local tmpName = goGrid.transform:Find("btnGrid/AnimRoot/TMPRogelikeName"):GetComponent("TMP_Text")
|
|
local imgLevelImage = goGrid.transform:Find("btnGrid/AnimRoot/imgLevelImage"):GetComponent("Image")
|
|
local goLockMask = goGrid.transform:Find("btnGrid/AnimRoot/goMask").gameObject
|
|
local bLock = PlayerData.PlayerFixedRoguelikeData:IsRoguelikeUnlock(mapRoguelike.Id)
|
|
goLockMask:SetActive(not bLock)
|
|
NovaAPI.SetTMPText(tmpName, mapRoguelikeGroup.Name)
|
|
self:SetPngSprite(imgLevelImage, mapRoguelikeGroup.Episode)
|
|
for i = 1, 3 do
|
|
local sRtName = "imgElement" .. i
|
|
local imgElement = goGrid.transform:Find("btnGrid/AnimRoot/rtElements/" .. sRtName):GetComponent("Image")
|
|
if mapRoguelikeGroup.EET == nil or mapRoguelikeGroup.EET[i] == nil then
|
|
imgElement.gameObject:SetActive(false)
|
|
else
|
|
imgElement.gameObject:SetActive(true)
|
|
self:SetAtlasSprite(imgElement, "12_rare", AllEnum.ElementIconType.Icon .. mapRoguelikeGroup.EET[i])
|
|
end
|
|
end
|
|
end
|
|
function FixedRoguelikeLevelCtrl:OpenJumptoGroup()
|
|
self.curState = 2
|
|
self._mapNode.AnimCtrl:Play("rougelikelevelselect_go_info")
|
|
self._mapNode.bgLevelInfo:SetActive(true)
|
|
self._mapNode.rawImgActor2D.gameObject:SetActive(false)
|
|
self.nCurGroupId = self.nJumptoGroup
|
|
for index, hardBtn in ipairs(self._mapNode.tog) do
|
|
local bActive = self.mapAllRoguelike[self.nCurGroupId][mapToggle[index]] ~= nil
|
|
hardBtn.gameObject:SetActive(bActive)
|
|
if bActive then
|
|
local nRoguelikeId = self.mapAllRoguelike[self.nCurGroupId][mapToggle[index]].Id
|
|
local bLock = PlayerData.PlayerFixedRoguelikeData:IsRoguelikeUnlock(nRoguelikeId)
|
|
hardBtn.interactable = bLock
|
|
self._mapNode.imgLockMask[index].gameObject:SetActive(not bLock)
|
|
self._mapNode.imgLockMask[index].interactable = not bLock
|
|
end
|
|
end
|
|
self:RefreshRoguelikeInfo(self.nCurGroupId, GameEnum.diffculty.Diffculty_1)
|
|
end
|
|
function FixedRoguelikeLevelCtrl:OpenJumptoHard()
|
|
self.curState = 2
|
|
self._mapNode.AnimCtrl:Play("rougelikelevelselect_go_info")
|
|
self._mapNode.bgLevelInfo:SetActive(true)
|
|
self._mapNode.rawImgActor2D.gameObject:SetActive(false)
|
|
self.nCurGroupId = self.nJumptoGroup
|
|
local nJumptoRoguelikeId = self.mapAllRoguelike[self.nCurGroupId][self.nJumptoHard].Id
|
|
if not PlayerData.PlayerFixedRoguelikeData:IsRoguelikeUnlock(nJumptoRoguelikeId) then
|
|
self.nJumptoHard = GameEnum.diffculty.Diffculty_1
|
|
end
|
|
for index, hardBtn in ipairs(self._mapNode.tog) do
|
|
local bActive = self.mapAllRoguelike[self.nCurGroupId][mapToggle[index]] ~= nil
|
|
hardBtn.gameObject:SetActive(bActive)
|
|
if bActive then
|
|
local nRoguelikeId = self.mapAllRoguelike[self.nCurGroupId][mapToggle[index]].Id
|
|
local bLock = PlayerData.PlayerFixedRoguelikeData:IsRoguelikeUnlock(nRoguelikeId)
|
|
hardBtn.interactable = bLock
|
|
self._mapNode.imgLockMask[index].gameObject:SetActive(not bLock)
|
|
self._mapNode.imgLockMask[index].interactable = not bLock
|
|
end
|
|
end
|
|
self:RefreshRoguelikeInfo(self.nCurGroupId, self.nJumptoHard)
|
|
end
|
|
function FixedRoguelikeLevelCtrl:OnBtnClick_Grid(goGrid, gridIndex)
|
|
local nIdx = gridIndex + 1
|
|
local nRoguelikeGroupId = self.tbRoguelikeGroup[nIdx]
|
|
local mapRoguelike = self.mapAllRoguelike[nRoguelikeGroupId][GameEnum.diffculty.Diffculty_1]
|
|
local bGridUnlock = PlayerData.PlayerFixedRoguelikeData:IsRoguelikeUnlock(mapRoguelike.Id)
|
|
if not bGridUnlock then
|
|
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("LevelSelect_NotOpen"))
|
|
return
|
|
end
|
|
self.curState = 2
|
|
self._mapNode.AnimCtrl:Play("rougelikelevelselect_go_info")
|
|
self._mapNode.bgLevelInfo:SetActive(true)
|
|
self._mapNode.rawImgActor2D.gameObject:SetActive(false)
|
|
self.nCurGroupId = nRoguelikeGroupId
|
|
self._panel._tbParam[2] = nRoguelikeGroupId
|
|
local nHard = PlayerData.PlayerFixedRoguelikeData:GetMaxDifficult(self.nCurGroupId)
|
|
for index, hardBtn in ipairs(self._mapNode.tog) do
|
|
local bActive = self.mapAllRoguelike[nRoguelikeGroupId][mapToggle[index]] ~= nil
|
|
hardBtn.gameObject:SetActive(bActive)
|
|
if bActive then
|
|
local nRoguelikeId = self.mapAllRoguelike[self.nCurGroupId][mapToggle[index]].Id
|
|
local bLock = PlayerData.PlayerFixedRoguelikeData:IsRoguelikeUnlock(nRoguelikeId)
|
|
hardBtn.interactable = bLock
|
|
self._mapNode.imgLockMask[index].gameObject:SetActive(not bLock)
|
|
self._mapNode.imgLockMask[index].interactable = not bLock
|
|
end
|
|
end
|
|
self:RefreshRoguelikeInfo(nRoguelikeGroupId, nHard)
|
|
end
|
|
function FixedRoguelikeLevelCtrl:RefreshRoguelikeInfo(nGroupId, nHard)
|
|
for i = 1, 4 do
|
|
self._mapNode.togCtrl[i]:SetDefault(i == nHard)
|
|
end
|
|
self.curRogueHard = nHard
|
|
self._panel._tbParam[1] = self.curRogueHard
|
|
local mapRoguelike = self.mapAllRoguelike[nGroupId][nHard]
|
|
self.curRoguelikeId = mapRoguelike.Id
|
|
if mapRoguelike == nil then
|
|
return
|
|
end
|
|
NovaAPI.SetTMPText(self._mapNode.TMPRoguelikeName, mapRoguelike.Name)
|
|
NovaAPI.SetTMPText(self._mapNode.TMPRoguelikeDesc, mapRoguelike.Desc)
|
|
self:SetPngSprite(self._mapNode.ImgRoguelikeInfo, mapRoguelike.Image)
|
|
local nRequire = mapRoguelike.NeedEnergy
|
|
local nHas = PlayerData.Base:GetCurEnergy()
|
|
NovaAPI.SetTMPText(self._mapNode.txtEnergyCount, nRequire)
|
|
NovaAPI.SetTMPColor(self._mapNode.txtEnergyCount, nRequire > nHas.nEnergy and Red_Unable or Blue_Normal)
|
|
for i = 1, 3 do
|
|
if mapRoguelike.EET == nil or mapRoguelike.EET[i] == nil then
|
|
self._mapNode.imgElementInfo[i].gameObject:SetActive(false)
|
|
else
|
|
self._mapNode.imgElementInfo[i].gameObject:SetActive(true)
|
|
self:SetAtlasSprite(self._mapNode.imgElementInfo[i], "12_rare", AllEnum.ElementIconType.Icon .. mapRoguelike.EET[i])
|
|
end
|
|
end
|
|
local tbReward = decodeJson(mapRoguelike.RewardPreview)
|
|
self.tbReward = tbReward
|
|
for index = 1, 6 do
|
|
self._mapNode.ItemBtn[index].interactable = self.tbAfterReward[index] ~= nil
|
|
if tbReward[index] ~= nil then
|
|
self._mapNode.item[index]:SetItem(tbReward[index][1], nil, nil, nil, tbReward[index][3] == 1, tbReward[index][3] == 2)
|
|
else
|
|
self._mapNode.item[index]:SetItem(nil)
|
|
end
|
|
end
|
|
NovaAPI.SetTMPText(self._mapNode.txtRecommendLevel, mapRoguelike.Recommend)
|
|
end
|
|
function FixedRoguelikeLevelCtrl:OnEvent_Back(nPanelId)
|
|
if self._panel._nPanelId ~= nPanelId then
|
|
return
|
|
end
|
|
if self.bJumpto then
|
|
EventManager.Hit(EventId.CloesCurPanel)
|
|
return
|
|
end
|
|
if self.curState == 1 then
|
|
EventManager.Hit(EventId.CloesCurPanel)
|
|
else
|
|
self._mapNode.AnimCtrl:Play("rougelikelevelselect_go_list")
|
|
self._mapNode.bgLevelInfo:SetActive(false)
|
|
self._mapNode.rawImgActor2D.gameObject:SetActive(true)
|
|
self.curRogueHard = GameEnum.diffculty.Diffculty_1
|
|
self.nCurGroupId = 0
|
|
self.curState = 1
|
|
self._panel._tbParam[2] = 0
|
|
self._panel._tbParam[1] = 0
|
|
end
|
|
end
|
|
function FixedRoguelikeLevelCtrl:OnEvent_Home(nPanelId)
|
|
if self._panel._nPanelId ~= nPanelId then
|
|
return
|
|
end
|
|
PanelManager.Home()
|
|
end
|
|
function FixedRoguelikeLevelCtrl:OnBtnClick_Go()
|
|
local mapRoguelike = self.mapAllRoguelike[self.nCurGroupId][self.curRogueHard]
|
|
local nNeedEnergy = mapRoguelike.NeedEnergy
|
|
local nCurEnergy = PlayerData.Base:GetCurEnergy().nEnergy
|
|
local OpenPanel = function()
|
|
EventManager.Hit(EventId.OpenPanel, PanelId.MainlineFormation, AllEnum.FormationEnterType.FixedRoguelike, self.curRoguelikeId)
|
|
end
|
|
if nNeedEnergy <= nCurEnergy then
|
|
EventManager.Hit(EventId.SetTransition, 2, OpenPanel)
|
|
else
|
|
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("MainlineData_Energy"))
|
|
end
|
|
end
|
|
function FixedRoguelikeLevelCtrl:OnBtnClick_Tog(btn)
|
|
local nHard = table.indexof(self._mapNode.tog, btn:GetComponent("UIButton"))
|
|
local togIdx = table.indexof(self._mapNode.tog, btn)
|
|
if nHard == nil then
|
|
return
|
|
end
|
|
if self.curRogueHard ~= nHard then
|
|
for idx, value in pairs(mapToggle) do
|
|
if value == self.curRogueHard then
|
|
self._mapNode.togCtrl[idx]:SetTrigger(false)
|
|
end
|
|
end
|
|
self._mapNode.togCtrl[togIdx]:SetTrigger(true)
|
|
self:RefreshRoguelikeInfo(self.nCurGroupId, nHard)
|
|
end
|
|
end
|
|
function FixedRoguelikeLevelCtrl:OnBtnClick_EnemyInfo(btn)
|
|
EventManager.Hit("OpenFixedRoguelikeMonsterInfo", self.curRoguelikeId)
|
|
end
|
|
function FixedRoguelikeLevelCtrl:OnBtnClick_RewardList(btn)
|
|
local mapLevel = ConfigTable.GetData("FixedRoguelike", self.curRoguelikeId)
|
|
local tbReward = decodeJson(mapLevel.RewardPreview)
|
|
self._mapNode.goRewardList:OpenPanel(tbReward)
|
|
end
|
|
function FixedRoguelikeLevelCtrl:OnBtnClick_RewardItem(btn)
|
|
local nIdx = table.indexof(self._mapNode.ItemBtn, btn)
|
|
local mapLevel = ConfigTable.GetData("FixedRoguelike", self.curRoguelikeId)
|
|
local tbReward = decodeJson(mapLevel.RewardPreview)
|
|
local rtBtn = btn.transform:Find("AnimRoot")
|
|
if tbReward[nIdx] ~= nil then
|
|
local nTid = tbReward[nIdx][1]
|
|
UTILS.ClickItemGridWithTips(nTid, rtBtn, false, true, false)
|
|
end
|
|
end
|
|
function FixedRoguelikeLevelCtrl:OnBtnClick_TogTips(btn)
|
|
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("FixedRoguelike_LimitTips"))
|
|
end
|
|
return FixedRoguelikeLevelCtrl
|