Files
Endfield-Data/LuaScripts/UI/Panels/ActivityChallengeDungeon/ActivityChallengeDungeonCtrl.lua
2025-12-02 20:37:18 +07:00

127 lines
3.4 KiB
Lua

local uiCtrl = require_ex('UI/Panels/Base/UICtrl')
local PANEL_ID = PanelId.ActivityChallengeDungeon
ActivityChallengeDungeonCtrl = HL.Class('ActivityChallengeDungeonCtrl', uiCtrl.UICtrl)
ActivityChallengeDungeonCtrl.s_messages = HL.StaticField(HL.Table) << {
}
ActivityChallengeDungeonCtrl.m_activityId = HL.Field(HL.String) << ''
ActivityChallengeDungeonCtrl.m_info = HL.Field(HL.Table)
ActivityChallengeDungeonCtrl.OnCreate = HL.Override(HL.Any) << function(self, arg)
self.view.activityCommonInfo:InitActivityCommonInfo(arg)
self:_InitData(arg)
self:_UpdateData()
self:_RefreshAllUI()
self.view.activityCommonInfo.view.gotoNode.btnDetailRedDot:InitRedDot("ActivityNormalChallengeGotoDetailBtn", self.m_info.activityId)
end
ActivityChallengeDungeonCtrl._InitData = HL.Method(HL.Any) << function(self, arg)
self.m_activityId = arg.activityId
self.m_info = {
activityId = arg.activityId,
perfectCompleteSeriesCount = 0,
totalSeriesCount = 0,
seriesBg = "",
}
end
ActivityChallengeDungeonCtrl._UpdateData = HL.Method() << function(self)
local activitySystem = GameInstance.player.activitySystem
local dungeonManager = GameInstance.dungeonManager
local activityId = self.m_info.activityId
local activityData = activitySystem:GetActivity(activityId)
local _, activitySeriesCfg = Tables.activityGameEntranceSeriesTable:TryGetValue(activityId)
self.m_info.perfectCompleteSeriesCount = 0
self.m_info.totalSeriesCount = 0
local seriesCfgList = {}
for seriesId, seriesCfg in pairs(activitySeriesCfg.seriesMap) do
local _, activityGameCfg = Tables.activityGameEntranceGameTable:TryGetValue(seriesId)
self.m_info.totalSeriesCount = self.m_info.totalSeriesCount + 1
local allPerfectComplete = true
for _, gameSingleCfg in pairs(activityGameCfg.gameList) do
local isPerfectComplete = DungeonUtils.isDungeonPerfectComplete(gameSingleCfg.gameId)
if not isPerfectComplete then
allPerfectComplete = false
break
end
end
if allPerfectComplete then
self.m_info.perfectCompleteSeriesCount = self.m_info.perfectCompleteSeriesCount + 1
end
table.insert(seriesCfgList, {seriesId = seriesId, seriesCfg = seriesCfg})
end
table.sort(seriesCfgList, function(a, b)
return a.sortId > b.sortId
end)
for _, seriesInfo in pairs(seriesCfgList) do
local isUnlock = activitySystem:IsGameEntranceSeriesUnlock(seriesInfo.seriesId)
if isUnlock then
local seriesCfg = seriesInfo.seriesCfg
self.m_info.seriesBg = seriesCfg.bgImg
break
end
end
local seriesName = activitySeriesCfg.seriesMap[seriesCfgList[1].seriesId].name
self.view.regionTxt.text = string.format(Language.LUA_ACTIVITY_CHALLENGE_DUNGEON_SERIES_TEXT, seriesName)
end
ActivityChallengeDungeonCtrl._RefreshAllUI = HL.Method() << function(self)
self.view.completeProgressNode.gameObject:SetActive(ActivityUtils.hasIntroMissionAndComplete(self.m_activityId))
self.view.completeNumTxt.text = self.m_info.perfectCompleteSeriesCount
self.view.totalNumTxt.text = '/' .. self.m_info.totalSeriesCount
self.view.bg:LoadSprite(UIConst.UI_SPRITE_ACTIVITY, self.m_info.seriesBg)
end
HL.Commit(ActivityChallengeDungeonCtrl)