08b515afd9
EN: 2.0.0.143 CN: 2.0.0.142 JP: 2.0.0.145 KR: 2.0.0.150
281 lines
10 KiB
Lua
281 lines
10 KiB
Lua
local SoldierLevelSelectCtrl = class("SoldierLevelSelectCtrl", BaseCtrl)
|
|
local WwiseAudioMgr = CS.WwiseAudioManager.Instance
|
|
SoldierLevelSelectCtrl._mapNodeConfig = {
|
|
topbar = {
|
|
sNodeName = "TopBarPanel",
|
|
sCtrlName = "Game.UI.TopBarEx.TopBarCtrl"
|
|
},
|
|
ScrollView = {
|
|
sComponentName = "LoopScrollView"
|
|
},
|
|
snapScrollView = {
|
|
sNodeName = "ScrollView",
|
|
sComponentName = "LoopScrollSnap",
|
|
callback = "OnGridSelect_Center"
|
|
},
|
|
rtGridTest = {
|
|
sComponentName = "RectTransform"
|
|
},
|
|
txtTestDesc = {nCount = 2, sComponentName = "TMP_Text"},
|
|
txt_Experience = {
|
|
sComponentName = "TMP_Text",
|
|
sLanguageId = "Soldier_LevelSelect_Experience"
|
|
},
|
|
txt_ExperienceNum = {sComponentName = "TMP_Text"},
|
|
txt_Tech = {
|
|
sComponentName = "TMP_Text",
|
|
sLanguageId = "Soldier_LevelSelect_Tech"
|
|
},
|
|
txt_TechNum = {sComponentName = "TMP_Text"},
|
|
btnSearch = {
|
|
sComponentName = "UIButton",
|
|
callback = "OnBtnClick_Search"
|
|
},
|
|
btnRewardWindow = {
|
|
sComponentName = "UIButton",
|
|
callback = "OnBtnClick_RewardWindow"
|
|
},
|
|
txtRewardTitle = {
|
|
sComponentName = "TMP_Text",
|
|
sLanguageId = "Soldier_LevelSelect_RewardTitle"
|
|
},
|
|
txt_TechTree = {
|
|
sComponentName = "TMP_Text",
|
|
sLanguageId = "Soldier_LevelSelect_TechTree"
|
|
},
|
|
btn_BackToHighest = {
|
|
sComponentName = "UIButton",
|
|
callback = "OnBtnClick_BackToHighest"
|
|
},
|
|
txt_Back = {
|
|
sComponentName = "TMP_Text",
|
|
sLanguageId = "Soldier_LevelSelect_BackToHighest"
|
|
},
|
|
btn_Start = {
|
|
sComponentName = "UIButton",
|
|
callback = "OnBtnClick_Start"
|
|
},
|
|
txt_Start = {
|
|
sComponentName = "TMP_Text",
|
|
sLanguageId = "Soldier_LevelSelect_Start"
|
|
},
|
|
txtRankDifficulty = {
|
|
sComponentName = "TMP_Text",
|
|
sLanguageId = "Soldier_LevelSelect_RankDifficulty"
|
|
},
|
|
txtPhaseTitle = {
|
|
sComponentName = "TMP_Text",
|
|
sLanguageId = "Soldier_LevelSelect_PhaseTitle"
|
|
},
|
|
txtPhaseLevel = {sComponentName = "TMP_Text"},
|
|
txtEnemyDifficulty = {
|
|
sComponentName = "TMP_Text",
|
|
sLanguageId = "Soldier_LevelSelect_EnemyDifficulty"
|
|
},
|
|
txtEnemyDifficultyNum = {sComponentName = "TMP_Text"},
|
|
rtRankRewardPopup = {},
|
|
goRewardWindow = {},
|
|
goBlurRankReward = {},
|
|
animRewardWindow = {
|
|
sNodeName = "goRewardWindow",
|
|
sComponentName = "Animator"
|
|
},
|
|
btnRewardCloseBg = {
|
|
sComponentName = "UIButton",
|
|
callback = "OnBtnClick_CloseRewardPopup"
|
|
},
|
|
btnRankRewardClose = {
|
|
sComponentName = "UIButton",
|
|
callback = "OnBtnClick_CloseRewardPopup"
|
|
},
|
|
txtRankReward = {
|
|
sComponentName = "TMP_Text",
|
|
sLanguageId = "Soldier_LevelSelect_RankReward"
|
|
},
|
|
txtCurRank = {
|
|
sComponentName = "TMP_Text",
|
|
sLanguageId = "Soldier_LevelSelect_CurRank"
|
|
},
|
|
txtRankName = {sComponentName = "TMP_Text"},
|
|
txtRankLevel = {sComponentName = "TMP_Text"},
|
|
txtExpReward = {sComponentName = "TMP_Text"},
|
|
txtExpRewardDetail = {sComponentName = "TMP_Text"},
|
|
txtTechReward = {sComponentName = "TMP_Text"},
|
|
txtTechRewardDetail = {sComponentName = "TMP_Text"}
|
|
}
|
|
SoldierLevelSelectCtrl._mapEventConfig = {}
|
|
SoldierLevelSelectCtrl._mapRedDotConfig = {}
|
|
function SoldierLevelSelectCtrl:Awake()
|
|
end
|
|
function SoldierLevelSelectCtrl:OnEnable()
|
|
self._mapNode.rtRankRewardPopup.gameObject:SetActive(false)
|
|
self:RefreshGradeChallenge()
|
|
end
|
|
function SoldierLevelSelectCtrl:OnDisable()
|
|
for k, v in pairs(self.tbGridCtrl or {}) do
|
|
self:UnbindCtrlByNode(v)
|
|
self.tbGridCtrl[k] = nil
|
|
end
|
|
self.tbGridCtrl = nil
|
|
end
|
|
function SoldierLevelSelectCtrl:RefreshGradeChallenge()
|
|
if self.tbGradeChallenge == nil or self.tbGridHeight == nil then
|
|
self.tbGradeChallenge = {}
|
|
ForEachTableLine(DataTable.SoldierGradeChallenge, function(mapLineData)
|
|
table.insert(self.tbGradeChallenge, mapLineData)
|
|
end)
|
|
table.sort(self.tbGradeChallenge, function(a, b)
|
|
return a.Id > b.Id
|
|
end)
|
|
self.tbGridHeight = {}
|
|
for _, v in ipairs(self.tbGradeChallenge) do
|
|
local sText = orderedFormat(ConfigTable.GetUIText("Soldier_LevelSelect_InitialHp"), v.InitialHp)
|
|
NovaAPI.SetTMPText(self._mapNode.txtTestDesc[1], sText)
|
|
local sOppoAttrAddShow = math.floor(tonumber(v.OppoAttrAddShow) * 100) .. "%"
|
|
sText = orderedFormat(ConfigTable.GetUIText("Soldier_LevelSelect_OppoAttrAddShow"), sOppoAttrAddShow)
|
|
NovaAPI.SetTMPText(self._mapNode.txtTestDesc[2], sText)
|
|
CS.UnityEngine.UI.LayoutRebuilder.ForceRebuildLayoutImmediate(self._mapNode.rtGridTest)
|
|
local nHeight = self._mapNode.rtGridTest.sizeDelta.y
|
|
table.insert(self.tbGridHeight, nHeight)
|
|
end
|
|
end
|
|
self.nHighestChallengeId = PlayerData.SoldierData:GetHighestChallengeId()
|
|
self.nSelectedChallenge = self.nHighestChallengeId
|
|
self.curChallengeData = ConfigTable.GetData("SoldierGradeChallenge", self.nHighestChallengeId)
|
|
self.nCenterGridIndex = nil
|
|
self.tbUnlock = {}
|
|
self._mapNode.ScrollView:InitEx(self.tbGridHeight, self, self.OnGridRefresh, self.OnGridBtnClick, false)
|
|
self:ScrollToHighest(0)
|
|
self._mapNode.ScrollView:ForceRefresh()
|
|
end
|
|
function SoldierLevelSelectCtrl:OnGridRefresh(goGrid, nGridIndex)
|
|
local nIndex = nGridIndex + 1
|
|
local mapData = self.tbGradeChallenge[nIndex]
|
|
local nInstanceId = goGrid:GetInstanceID()
|
|
if self.tbGridCtrl == nil then
|
|
self.tbGridCtrl = {}
|
|
end
|
|
if self.tbGridCtrl[nInstanceId] == nil then
|
|
self.tbGridCtrl[nInstanceId] = self:BindCtrlByNode(goGrid, "Game.UI.Soldier.SoldierLevelSelectItemCtrl")
|
|
end
|
|
local bUnlock = self.nHighestChallengeId >= mapData.Id
|
|
self.tbUnlock[mapData.Id] = bUnlock
|
|
self.tbGridCtrl[nInstanceId]:SetData(mapData, bUnlock)
|
|
if self.nHighestChallengeId == mapData.Id then
|
|
self.nAutoSelectIndex = nGridIndex
|
|
end
|
|
self.tbGridCtrl[nInstanceId]:SetSelect(nGridIndex == self.nCenterGridIndex)
|
|
if nGridIndex == self.nCenterGridIndex then
|
|
self.nSelectedChallenge = self.tbGridCtrl[nInstanceId]:GetChallengeId()
|
|
end
|
|
end
|
|
function SoldierLevelSelectCtrl:OnGridSelect_Center(_, goGrid)
|
|
local nGridIndex = tonumber(goGrid.name)
|
|
if nGridIndex == nil or self.nCenterGridIndex == nGridIndex then
|
|
return
|
|
end
|
|
self.nCenterGridIndex = nGridIndex
|
|
for _, objGridCtrl in pairs(self.tbGridCtrl or {}) do
|
|
local goGridObj = objGridCtrl.gameObject
|
|
if goGridObj ~= nil then
|
|
objGridCtrl:SetSelect(tonumber(goGridObj.name) == nGridIndex)
|
|
end
|
|
end
|
|
local nNewChallengeId = self.tbGridCtrl[goGrid:GetInstanceID()]:GetChallengeId()
|
|
self.nSelectedChallenge = nNewChallengeId and nNewChallengeId or self.nSelectedChallenge
|
|
self._mapNode.btn_BackToHighest.gameObject:SetActive(self.nSelectedChallenge ~= self.nHighestChallengeId)
|
|
local mapGrade = ConfigTable.GetData("SoldierGradeChallenge", self.nSelectedChallenge)
|
|
if mapGrade ~= nil then
|
|
NovaAPI.SetTMPText(self._mapNode.txt_ExperienceNum, "+" .. mapGrade.Score)
|
|
NovaAPI.SetTMPText(self._mapNode.txt_TechNum, "+" .. mapGrade.TechPoint)
|
|
end
|
|
WwiseAudioMgr:PostEvent("mode_900001_chess_rankLevel_drag")
|
|
end
|
|
function SoldierLevelSelectCtrl:RefreshRewardWindow()
|
|
local mapCurGrade = ConfigTable.GetData("SoldierGradeChallenge", self.nSelectedChallenge)
|
|
if mapCurGrade == nil then
|
|
return
|
|
end
|
|
local sExpNum = orderedFormat(ConfigTable.GetUIText("Soldier_LevelSelect_ExpRewardNum"), mapCurGrade.Score)
|
|
NovaAPI.SetTMPText(self._mapNode.txtExpReward, sExpNum)
|
|
local sExpDetail = orderedFormat(ConfigTable.GetUIText("Soldier_LevelSelect_ExpRewardDesc"), mapCurGrade.Score)
|
|
NovaAPI.SetTMPText(self._mapNode.txtExpRewardDetail, sExpDetail)
|
|
local sTechNum = orderedFormat(ConfigTable.GetUIText("Soldier_LevelSelect_TechRewardNum"), mapCurGrade.TechPoint)
|
|
NovaAPI.SetTMPText(self._mapNode.txtTechReward, sTechNum)
|
|
local sTechDetail = orderedFormat(ConfigTable.GetUIText("Soldier_LevelSelect_TechRewardDesc"), mapCurGrade.TechPoint)
|
|
NovaAPI.SetTMPText(self._mapNode.txtTechRewardDetail, sTechDetail)
|
|
NovaAPI.SetTMPText(self._mapNode.txtRankLevel, mapCurGrade.Name)
|
|
local mapKeyGrade = ConfigTable.GetData("SoldierKeyGrade", mapCurGrade.KeyGradeId)
|
|
if mapKeyGrade ~= nil then
|
|
NovaAPI.SetTMPText(self._mapNode.txtRankName, mapKeyGrade.Name)
|
|
end
|
|
end
|
|
function SoldierLevelSelectCtrl:ClosePanel()
|
|
EventManager.Hit(EventId.ClosePanel, PanelId.SoldierLevelSelectPanel)
|
|
end
|
|
function SoldierLevelSelectCtrl:OnBtnClick_Challenge(nIndex)
|
|
self:EnterSoldier(nIndex)
|
|
end
|
|
function SoldierLevelSelectCtrl:OnBtnClick_Continue(nIndex)
|
|
self:EnterSoldier(nIndex)
|
|
end
|
|
function SoldierLevelSelectCtrl:OnBtnClick_Search()
|
|
EventManager.Hit(EventId.OpenPanel, PanelId.SoldierTechPreviewPanel)
|
|
end
|
|
function SoldierLevelSelectCtrl:OnBtnClick_RewardWindow()
|
|
self._mapNode.rtRankRewardPopup.gameObject:SetActive(true)
|
|
self._mapNode.goRewardWindow.gameObject:SetActive(false)
|
|
self._mapNode.goBlurRankReward.gameObject:SetActive(false)
|
|
self:RefreshRewardWindow()
|
|
local wait = function()
|
|
self._mapNode.goBlurRankReward.gameObject:SetActive(true)
|
|
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
|
|
self._mapNode.goRewardWindow.gameObject:SetActive(true)
|
|
self._mapNode.animRewardWindow:Play("t_window_04_t_in")
|
|
end
|
|
cs_coroutine.start(wait)
|
|
end
|
|
function SoldierLevelSelectCtrl:OnBtnClick_CloseRewardPopup()
|
|
self._mapNode.animRewardWindow:Play("t_window_04_t_out")
|
|
self:AddTimer(1, 0.2, function()
|
|
self._mapNode.rtRankRewardPopup.gameObject:SetActive(false)
|
|
end, true, true, true)
|
|
end
|
|
function SoldierLevelSelectCtrl:OnBtnClick_BackToHighest()
|
|
self:ScrollToHighest(0.25)
|
|
end
|
|
function SoldierLevelSelectCtrl:ScrollToHighest(nTime)
|
|
if self.tbGradeChallenge == nil or self.tbGridHeight == nil then
|
|
return
|
|
end
|
|
self.nHighestChallengeId = PlayerData.SoldierData:GetHighestChallengeId()
|
|
local nTargetIndex = 0
|
|
for k, v in pairs(self.tbGradeChallenge) do
|
|
if v.Id == self.nHighestChallengeId then
|
|
nTargetIndex = k
|
|
break
|
|
end
|
|
end
|
|
if nTargetIndex == 0 then
|
|
return
|
|
end
|
|
if 0 < nTime then
|
|
WwiseAudioMgr:PostEvent("mode_900001_chess_rankLevel")
|
|
self:AddTimer(1, nTime, function()
|
|
WwiseAudioMgr:PostEvent("mode_900001_chess_rankLevel_stop")
|
|
end, true, true, true)
|
|
end
|
|
self._mapNode.ScrollView:SetScrollGridPosEx(self.tbGridHeight, nTargetIndex, nTime, 0)
|
|
end
|
|
function SoldierLevelSelectCtrl:OnBtnClick_Start()
|
|
local callback = function()
|
|
self:ClosePanel()
|
|
end
|
|
if not self.tbUnlock[self.nSelectedChallenge] then
|
|
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("Soldier_LevelSelect_Locked"))
|
|
return
|
|
end
|
|
PlayerData.SoldierData:EnterSoldier(self.nSelectedChallenge, callback)
|
|
end
|
|
return SoldierLevelSelectCtrl
|