280 lines
8.0 KiB
Lua
280 lines
8.0 KiB
Lua
local UIWidgetBase = require_ex('Common/Core/UIWidgetBase')
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
TrainingEntryTab = HL.Class('TrainingEntryTab', UIWidgetBase)
|
|
|
|
|
|
TrainingEntryTab.m_seriesId = HL.Field(HL.String) << ""
|
|
|
|
|
|
TrainingEntryTab.m_tableCfg = HL.Field(HL.Any)
|
|
|
|
|
|
TrainingEntryTab.m_info = HL.Field(HL.Table)
|
|
|
|
|
|
TrainingEntryTab.m_index = HL.Field(HL.Number) << 0
|
|
|
|
|
|
TrainingEntryTab.m_genRewardCells = HL.Field(HL.Forward("UIListCache"))
|
|
|
|
|
|
TrainingEntryTab.m_onClickGotoBtnFunc = HL.Field(HL.Function)
|
|
|
|
|
|
|
|
|
|
TrainingEntryTab._OnFirstTimeInit = HL.Override() << function(self)
|
|
self.m_genRewardCells = UIUtils.genCellCache(self.view.rewardCell)
|
|
|
|
self.view.goToBtn.onClick:RemoveAllListeners()
|
|
self.view.goToBtn.onClick:AddListener(function()
|
|
self:_OnClickGoToBtn()
|
|
end)
|
|
self.view.rewardListNaviGroup.onIsFocusedChange:AddListener(function(isFocused)
|
|
if not isFocused then
|
|
Notify(MessageConst.HIDE_ITEM_TIPS)
|
|
end
|
|
end)
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
TrainingEntryTab.InitTrainingEntryTab = HL.Method(HL.Boolean, HL.Opt(HL.String, HL.Number, HL.Function))
|
|
<< function(self, isEmptyState, dungeonSeriesId, index, onClickGotoBtnFunc)
|
|
self:_FirstTimeInit()
|
|
|
|
if isEmptyState then
|
|
self.view.cellState:SetState("Empty")
|
|
return
|
|
end
|
|
|
|
local hasCfg = false
|
|
if dungeonSeriesId then
|
|
hasCfg, self.m_tableCfg = Tables.dungeonSeriesTable:TryGetValue(dungeonSeriesId)
|
|
end
|
|
if not hasCfg then
|
|
logger.error("[Dungeon Series Table] missing, id = " .. dungeonSeriesId)
|
|
self.view.cellState:SetState("Empty")
|
|
return
|
|
end
|
|
|
|
self.m_seriesId = dungeonSeriesId
|
|
self.m_index = index
|
|
self.m_onClickGotoBtnFunc = onClickGotoBtnFunc
|
|
self:_UpdateData()
|
|
self:_RefreshAllUI()
|
|
|
|
self.view.redDot:InitRedDot("DungeonReadNormal", self.m_tableCfg.includeDungeonIds)
|
|
end
|
|
|
|
|
|
|
|
TrainingEntryTab._UpdateData = HL.Method() << function(self)
|
|
local curPassNum = 0
|
|
for _, id in pairs(self.m_tableCfg.includeDungeonIds) do
|
|
if GameInstance.dungeonManager:IsDungeonPassed(id) then
|
|
curPassNum = curPassNum + 1
|
|
end
|
|
end
|
|
self.m_info = {
|
|
seriesId = self.m_tableCfg.id,
|
|
titleName = self.m_tableCfg.name,
|
|
curNum = curPassNum,
|
|
maxNum = #self.m_tableCfg.includeDungeonIds,
|
|
rewardInfos = self:_GetDungeonSeriesRewardInfosOverride(self.m_tableCfg),
|
|
}
|
|
end
|
|
|
|
|
|
|
|
TrainingEntryTab._GetDungeonSeriesRewardInfos = HL.StaticMethod(HL.Any).Return(HL.Table) << function(seriesCfg)
|
|
local rewards = {}
|
|
for _, v in pairs(seriesCfg.includeDungeonIds) do
|
|
TrainingEntryTab._ProcessDungeonRewards(v, rewards)
|
|
end
|
|
local rewardList = {}
|
|
for _, v in pairs(rewards) do
|
|
table.insert(rewardList, v)
|
|
end
|
|
table.sort(rewardList, Utils.genSortFunction({ "rarity", "type" }))
|
|
return rewardList
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
TrainingEntryTab._GetDungeonSeriesRewardInfosOverride = HL.Method(HL.Any).Return(HL.Table) << function(self, seriesCfg)
|
|
local rewardId
|
|
if self.m_index == 1 then
|
|
rewardId = Tables.GlobalConst.adventureBookTrainingCellRewardId_dung_group_chartrial01
|
|
else
|
|
rewardId = Tables.GlobalConst.adventureBookTrainingCellRewardId_dung_group_train01
|
|
end
|
|
|
|
if rewardId == nil then
|
|
return TrainingEntryTab._GetDungeonSeriesRewardInfos(seriesCfg)
|
|
end
|
|
local rewards = {}
|
|
TrainingEntryTab._MergeRewards(rewardId, rewards)
|
|
local rewardList = {}
|
|
for _, v in pairs(rewards) do
|
|
table.insert(rewardList, v)
|
|
end
|
|
table.sort(rewardList, Utils.genSortFunction({ "rarity", "type" }))
|
|
return rewardList
|
|
end
|
|
|
|
|
|
|
|
|
|
TrainingEntryTab._ProcessDungeonRewards = HL.StaticMethod(HL.String, HL.Table) << function(dungeonId, rewards)
|
|
local hasCfg, gameMechanicCfg = Tables.gameMechanicTable:TryGetValue(dungeonId)
|
|
if not hasCfg then
|
|
logger.error("[Game Mechanic Table] missing, id = " .. dungeonId)
|
|
return
|
|
end
|
|
|
|
|
|
local hasFirstReward = not string.isEmpty(gameMechanicCfg.firstPassRewardId)
|
|
if hasFirstReward then
|
|
TrainingEntryTab._MergeRewards(gameMechanicCfg.firstPassRewardId, rewards)
|
|
end
|
|
|
|
|
|
local hasRecycleReward = not string.isEmpty(gameMechanicCfg.rewardId)
|
|
if hasRecycleReward then
|
|
TrainingEntryTab._MergeRewards(gameMechanicCfg.rewardId, rewards)
|
|
end
|
|
|
|
|
|
local hasExtraReward = not string.isEmpty(gameMechanicCfg.extraRewardId)
|
|
if hasExtraReward then
|
|
TrainingEntryTab._MergeRewards(gameMechanicCfg.extraRewardId, rewards)
|
|
end
|
|
end
|
|
|
|
|
|
|
|
|
|
TrainingEntryTab._MergeRewards = HL.StaticMethod(HL.String, HL.Table) << function(rewardId, rewards)
|
|
local hasCfg, rewardsCfg = Tables.rewardTable:TryGetValue(rewardId)
|
|
if not hasCfg then
|
|
logger.error("[Reward Table] missing, id = " .. rewardId)
|
|
return
|
|
end
|
|
|
|
for _, itemBundle in pairs(rewardsCfg.itemBundles) do
|
|
local reward = rewards[itemBundle.id]
|
|
if not reward then
|
|
local itemCfg
|
|
hasCfg, itemCfg = Tables.itemTable:TryGetValue(itemBundle.id)
|
|
if hasCfg then
|
|
reward = {
|
|
id = itemBundle.id,
|
|
rarity = itemCfg.rarity,
|
|
type = itemCfg.type:ToInt(),
|
|
}
|
|
rewards[itemBundle.id] = reward
|
|
else
|
|
logger.error("[Item Table] missing, id = " .. itemBundle.id)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
|
|
|
|
TrainingEntryTab._RefreshAllUI = HL.Method() << function(self)
|
|
local info = self.m_info
|
|
local isAllComplete = info.curNum >= info.maxNum
|
|
local prog = info.curNum / info.maxNum
|
|
|
|
if self.m_index < 10 then
|
|
self.view.levelNumTxt.text = "0"..self.m_index
|
|
self.view.shadowText.text = "0"..self.m_index
|
|
else
|
|
self.view.levelNumTxt.text = self.m_index
|
|
self.view.shadowText.text = self.m_index
|
|
end
|
|
self.view.levelTitleTxt.text = info.titleName
|
|
if isAllComplete then
|
|
self.view.cellState:SetState("AllComplete")
|
|
else
|
|
self.view.cellState:SetState("Normal")
|
|
end
|
|
|
|
self.view.progressBar.fillAmount = prog
|
|
self.view.curProgTxt.text = info.curNum
|
|
self.view.maxProgTxt.text = info.maxNum
|
|
if self.m_index == 1 then
|
|
self.view.levelNode:SetState("Green")
|
|
elseif self.m_index == 2 then
|
|
self.view.levelNode:SetState("Blue")
|
|
end
|
|
|
|
self.m_genRewardCells:Refresh(#info.rewardInfos, function(rewardCell, rewardLuaIndex)
|
|
rewardCell:InitItem(info.rewardInfos[rewardLuaIndex], function()
|
|
UIUtils.showItemSideTips(rewardCell)
|
|
end)
|
|
rewardCell:SetExtraInfo({ isSideTips = DeviceInfo.usingController })
|
|
|
|
end)
|
|
end
|
|
|
|
|
|
|
|
TrainingEntryTab._OnClickGoToBtn = HL.Method() << function(self)
|
|
local enterDungeonCallback
|
|
local panelId = self:GetPanelId()
|
|
if panelId == PanelId.AdventureTraining then
|
|
enterDungeonCallback = function(enterDungeonId)
|
|
LuaSystemManager.uiRestoreSystem:AddRequest(enterDungeonId, function()
|
|
PhaseManager:OpenPhaseFast(PhaseId.AdventureBook, { panelId = "AdventureTraining" })
|
|
PhaseManager:OpenPhaseFast(PhaseId.DungeonEntry, {
|
|
dungeonId = enterDungeonId,
|
|
enterDungeonCallback = enterDungeonCallback })
|
|
end)
|
|
end
|
|
elseif panelId == PanelId.DungeonTrainOverview then
|
|
|
|
enterDungeonCallback = function(enterDungeonId)
|
|
LuaSystemManager.uiRestoreSystem:AddRequest(enterDungeonId, function()
|
|
PhaseManager:OpenPhaseFast(PhaseId.DungeonEntry, {
|
|
dungeonId = enterDungeonId,
|
|
enterDungeonCallback = enterDungeonCallback })
|
|
end, function()
|
|
return GameInstance.mode.modeType == GEnums.GameModeType.SpaceShip
|
|
end)
|
|
end
|
|
end
|
|
Notify(MessageConst.ON_OPEN_DUNGEON_ENTRY_PANEL, { self.m_seriesId, enterDungeonCallback })
|
|
|
|
if self.m_onClickGotoBtnFunc then
|
|
self.m_onClickGotoBtnFunc()
|
|
end
|
|
end
|
|
|
|
HL.Commit(TrainingEntryTab)
|
|
return TrainingEntryTab
|