Files
SL1900 7363298dc1 Update - 1.15.0.134
EN: 1.15.0.134
CN: 1.15.0.133
JP: 1.15.0.137
KR: 1.15.0.139
2026-09-08 12:00:00 +09:00

176 lines
6.4 KiB
Lua

local TraceHuntLevelCtrl = class("TraceHuntLevelCtrl", BaseCtrl)
local GridNormalHeight = 77
local MaxEffectCount = 5
local LayoutRebuilder = CS.UnityEngine.UI.LayoutRebuilder
TraceHuntLevelCtrl._mapNodeConfig = {
goBlur = {
sNodeName = "t_fullscreen_blur_blue",
sComponentName = "GameObject"
},
txtWindowTitle = {
sComponentName = "TMP_Text",
sLanguageId = "TraceHunt_Level_Title"
},
txtLevelTitle = {
sComponentName = "TMP_Text",
sLanguageId = "TraceHunt_Level_CurLevel"
},
btnSnapshot = {
sNodeName = "snapshot",
sComponentName = "Button",
callback = "OnBtn_ClickClose"
},
aniRoot = {sNodeName = "goWindow", sComponentName = "Animator"},
btnClose = {
sNodeName = "btnClose",
sComponentName = "UIButton",
callback = "OnBtn_ClickClose"
},
goCountRewardInfo_ = {nCount = 5},
txtRewardInfoCount = {nCount = 5, sComponentName = "TMP_Text"},
goCountLine_ = {nCount = 4},
goCountHeight = {
sComponentName = "RectTransform"
},
svReward = {
sComponentName = "LoopScrollView"
},
txtLevelCount = {sComponentName = "TMP_Text"},
txtLevelProgress = {sComponentName = "TMP_Text"},
txtLevelReset = {
sComponentName = "TMP_Text",
sLanguageId = "TraceHunt_Level_Reset"
},
imgLevelProgress = {sComponentName = "Image"}
}
TraceHuntLevelCtrl._mapEventConfig = {}
function TraceHuntLevelCtrl:RefreshContent()
self:RefreshData()
self:RefreshList()
self:RefreshInfo()
end
function TraceHuntLevelCtrl:RefreshData()
self.tbHeight = {}
self.tbLevel = {}
local nMaxLevel = PlayerData.TraceHunt:GetTraceHuntMaxLevel()
for i = 1, nMaxLevel do
local mapLevel = PlayerData.TraceHunt:GetTraceHuntLevelData(i)
local tbEffect = PlayerData.TraceHunt:GetLevelDisplayEffects(i)
local nCount = math.min(#tbEffect, MaxEffectCount)
for j = 1, MaxEffectCount do
self._mapNode.goCountRewardInfo_[j]:SetActive(j <= nCount)
if j <= nCount then
NovaAPI.SetTMPText(self._mapNode.txtRewardInfoCount[j], tbEffect[j].sText)
end
end
for j = 1, MaxEffectCount - 1 do
self._mapNode.goCountLine_[j]:SetActive(j < nCount)
end
if 0 < nCount then
LayoutRebuilder.ForceRebuildLayoutImmediate(self._mapNode.goCountHeight)
local nH = self._mapNode.goCountHeight.rect.height + GridNormalHeight
table.insert(self.tbHeight, nH)
table.insert(self.tbLevel, mapLevel)
end
end
end
function TraceHuntLevelCtrl:RefreshList()
local nLevel, _ = PlayerData.TraceHunt:GetTraceHuntLevel()
local nMax = #self.tbLevel
local nSelect
for k, v in ipairs(self.tbLevel) do
if v.Level == nLevel then
nSelect = k
break
elseif nLevel < v.Level then
nSelect = k - 1
break
end
end
if nSelect == nil then
nSelect = nMax
end
nSelect = nSelect == 0 and 1 or nSelect
self._mapNode.svReward.gameObject:SetActive(0 < nMax)
if 0 < nMax then
self._mapNode.svReward:SetAnim(0.07)
self._mapNode.svReward:InitEx(self.tbHeight, self, self.OnGridRefresh)
self._mapNode.svReward:SetScrollGridPosEx(self.tbHeight, nSelect, 0.1, 0)
end
end
function TraceHuntLevelCtrl:OnGridRefresh(goGrid, gridIndex)
local index = gridIndex + 1
local nCurLevel, _ = PlayerData.TraceHunt:GetTraceHuntLevel()
local nLevel = self.tbLevel[index].Level
local mapLevel = PlayerData.TraceHunt:GetTraceHuntLevelData(nLevel)
local trans = goGrid.transform:Find("AnimRoot")
local goTitle = trans:Find("goTitle")
local goUnlock = goTitle:Find("goUnlock")
local goLock = goTitle:Find("goLock")
local txtLevel = goUnlock:Find("txtLevel"):GetComponent("TMP_Text")
local txtLevelName1 = goUnlock:Find("txtLevelName"):GetComponent("TMP_Text")
local txtLevel_Lock = goLock:Find("txtLevelName/txtLevel_Lock"):GetComponent("TMP_Text")
local txtLevelName2 = goLock:Find("txtLevelName"):GetComponent("TMP_Text")
local txtLevelLimit = goLock:Find("txtLevelLimit"):GetComponent("TMP_Text")
NovaAPI.SetTMPText(txtLevelName1, ConfigTable.GetUIText("TraceHunt_Level_LevelName"))
NovaAPI.SetTMPText(txtLevelName2, ConfigTable.GetUIText("TraceHunt_Level_LevelName"))
NovaAPI.SetTMPText(txtLevel, nLevel)
NovaAPI.SetTMPText(txtLevel_Lock, nLevel)
txtLevelLimit.gameObject:SetActive(mapLevel.DisplayWorldClass > 0)
if mapLevel.DisplayWorldClass > 0 then
NovaAPI.SetTMPText(txtLevelLimit, orderedFormat(ConfigTable.GetUIText("TraceHunt_Level_NeedWorldClass"), mapLevel.DisplayWorldClass))
end
goLock.gameObject:SetActive(nCurLevel < nLevel)
goUnlock.gameObject:SetActive(nCurLevel >= nLevel)
local goRewardRoot = trans:Find("goRewardInfoList")
local tbEffect = PlayerData.TraceHunt:GetLevelDisplayEffects(nLevel)
local nCount = math.min(#tbEffect, MaxEffectCount)
local nAlpha = nCurLevel < nLevel and 0.4 or 1
for i = 1, MaxEffectCount do
local goReward = goRewardRoot:Find("goRewardInfo_" .. i)
goReward.gameObject:SetActive(i <= nCount)
if i <= nCount then
local cgGoReward = goReward:GetComponent("CanvasGroup")
local txtRewardInfo = goReward:Find("txtRewardInfo"):GetComponent("TMP_Text")
local imgRewardIcon1 = goReward:Find("goReward/imgRewardIcon1").gameObject
local imgRewardIcon2 = goReward:Find("goReward/imgRewardIcon2").gameObject
NovaAPI.SetTMPText(txtRewardInfo, tbEffect[i].sText)
imgRewardIcon1:SetActive(tbEffect[i].bIcon1)
imgRewardIcon2:SetActive(not tbEffect[i].bIcon1)
NovaAPI.SetCanvasGroupAlpha(cgGoReward, nAlpha)
end
end
for i = 1, MaxEffectCount - 1 do
goRewardRoot:Find("goLine_" .. i).gameObject:SetActive(i < nCount)
end
end
function TraceHuntLevelCtrl:RefreshInfo()
local nLevel, nExp = PlayerData.TraceHunt:GetTraceHuntLevel()
local mapLevel = PlayerData.TraceHunt:GetTraceHuntLevelData(nLevel)
NovaAPI.SetTMPText(self._mapNode.txtLevelCount, nLevel)
NovaAPI.SetImageFillAmount(self._mapNode.imgLevelProgress, nExp / mapLevel.Exp)
NovaAPI.SetTMPText(self._mapNode.txtLevelProgress, orderedFormat(ConfigTable.GetUIText("TraceHunt_Level_Progress"), nExp, mapLevel.Exp))
end
function TraceHuntLevelCtrl:FadeIn()
end
function TraceHuntLevelCtrl:Awake()
end
function TraceHuntLevelCtrl:OnEnable()
self._mapNode.aniRoot:Play("t_window_04_t_in")
self._mapNode.goBlur:SetActive(true)
self:RefreshContent()
end
function TraceHuntLevelCtrl:OnDisable()
end
function TraceHuntLevelCtrl:OnDestroy()
end
function TraceHuntLevelCtrl:OnBtn_ClickClose()
self._mapNode.aniRoot:Play("t_window_04_t_out")
self._mapNode.goBlur:SetActive(false)
self:AddTimer(1, 0.3, "OnCloseAnimFinish", true, true, true)
end
function TraceHuntLevelCtrl:OnCloseAnimFinish()
EventManager.Hit(EventId.ClosePanel, PanelId.TraceHuntLevel)
end
return TraceHuntLevelCtrl