213 lines
No EOL
9 KiB
Lua
213 lines
No EOL
9 KiB
Lua
local XUiGridSimulationChallenge = require("XUi/XUiFuben/XUiFubenSimulation/XUiGridSimulationChallenge") -- Chapter列表Grid
|
||
local XUiGridSimulationChallengeTab = require("XUi/XUiFuben/XUiFubenSimulation/XUiGridSimulationChallengeTab") -- 左侧边栏Grid
|
||
local XUiFubenSideDynamicTable = require("XUi/XUiFuben/UiDynamicList/XUiFubenSideDynamicTable") --左侧边栏动态列表
|
||
|
||
local XUiPanelSimulationChallenge = XClass(XSignalData, "XUiPanelSimulationChallenge")
|
||
|
||
function XUiPanelSimulationChallenge.CheckHasRedPoint(config)
|
||
if not config or not XTool.IsNumberValid(config.Id) then return end
|
||
local allSecondTag = XFubenConfigs.GetSecondTagConfigsByFirstTagId(config.Id)
|
||
for _, secondTagconfig in pairs(allSecondTag) do
|
||
for k, chapterType in pairs(secondTagconfig.ChapterType) do
|
||
for k, manager in pairs(XDataCenter.FubenManagerEx.GetManagers(chapterType)) do
|
||
if manager:ExCheckIsShowRedPoint() then return true end
|
||
end
|
||
end
|
||
end
|
||
return false
|
||
end
|
||
|
||
--- func desc
|
||
---@param config 一级标签的数据
|
||
-- 模拟挑战 主界面(副本入口翻新)
|
||
function XUiPanelSimulationChallenge:Ctor(ui, parent, config)
|
||
self.RootUi = parent
|
||
self.Config = config
|
||
XUiHelper.InitUiClass(self, ui)
|
||
|
||
self:InitData() -- 基础数据,包括加载标签数据,标签对应的管理器数据
|
||
self:InitLeftTabBtn() -- 初始化侧边栏
|
||
self:InitDynamicTable() -- 初始化副本入口动态列表
|
||
self:SetupDynamicTable()
|
||
end
|
||
|
||
function XUiPanelSimulationChallenge:SetData(firstTagId, secondTagIndex)
|
||
self.CurrentLeftTabIndex = secondTagIndex or self.CurrentLeftTabIndex or self.FisrtUnlockTagIndex
|
||
self.BtnTabGroupDyn:RefreshList(self.AllSecondTag, self.CurrentLeftTabIndex - 1) -- 侧边栏下标从0,lua下标从1开始
|
||
self:RefreshDataByLeftTabChange(self.CurrentLeftTabIndex) -- tab的刷新并不会调用点击切页的回调,所以要手动调
|
||
-- 背景底图刷新
|
||
self.RootUi:ChangeBgBySecondTag(self.AllSecondTag[self.CurrentLeftTabIndex].Bg)
|
||
|
||
XEventManager.AddEventListener(XEventId.EVENT_FUBEN_DAILY_REFRESH, self.SetupDynamicTable, self)
|
||
XEventManager.AddEventListener(XEventId.EVENT_URGENTEVENT_SYNC, self.SetupDynamicTable, self)
|
||
XEventManager.AddEventListener(XEventId.EVENT_FUBEN_SINGLE_BOSS_SYNC, self.SetupDynamicTable, self)
|
||
end
|
||
|
||
function XUiPanelSimulationChallenge:OnEnable()
|
||
for i = 1, #self.CurrentChanllengeManagers do
|
||
local grid = self.DynamicTable:GetGridByIndex(i)
|
||
if grid then
|
||
grid:RefreshRedPoint()
|
||
grid:RefreshProgress()
|
||
end
|
||
end
|
||
|
||
local gridDic = self.BtnTabGroupDyn:GetGridDic()
|
||
for _, grid in pairs(gridDic) do
|
||
grid:RefreshRedPoint()
|
||
end
|
||
-- 播放grid的Enable动画
|
||
self:SetGridPlayAnimHasPlay(false)
|
||
self:PlayGridEnableAnime()
|
||
end
|
||
|
||
function XUiPanelSimulationChallenge:InitData()
|
||
XDataCenter.FubenManager.EnterChallenge()
|
||
|
||
self.FirstTagId = self.Config.Id
|
||
self.AllSecondTag = XFubenConfigs.GetSecondTagConfigsByFirstTagId(self.FirstTagId) -- 拿到该模式下所有的二级标签
|
||
self.TagManagerDic = {} -- k = 周常(二级tagId), v = { 战区,囚笼... }, k = 特殊挑战, v = {宣叙妄想... }
|
||
local fisrtUnlockTagIndex = nil
|
||
for _, secondTagconfig in pairs(self.AllSecondTag) do
|
||
if not fisrtUnlockTagIndex and XDataCenter.FubenManagerEx.CheckHasOpenBySecondTagId(secondTagconfig.Id) then
|
||
fisrtUnlockTagIndex = secondTagconfig.Order -- 第一个已解锁的标签
|
||
end
|
||
|
||
if not self.TagManagerDic[secondTagconfig.Id] then
|
||
self.TagManagerDic[secondTagconfig.Id] = {}
|
||
end
|
||
for k, chapterType in pairs(secondTagconfig.ChapterType) do
|
||
for k, manager in pairs(XDataCenter.FubenManagerEx.GetManagers(chapterType)) do
|
||
if manager:ExCheckInTime() and manager:OverseaActive() then
|
||
table.insert(self.TagManagerDic[secondTagconfig.Id], manager) -- 根据2级标签拿到所有manager
|
||
end
|
||
end
|
||
end
|
||
table.sort(self.TagManagerDic[secondTagconfig.Id], function (managerA, managerB)
|
||
return managerA:ExGetConfig().Priority < managerB:ExGetConfig().Priority
|
||
end)
|
||
end
|
||
self.FisrtUnlockTagIndex = fisrtUnlockTagIndex
|
||
end
|
||
|
||
function XUiPanelSimulationChallenge:InitDynamicTable()
|
||
self.DynamicTable = XDynamicTableNormal.New(self.PanelChapterList)
|
||
self.DynamicTable:SetProxy(XUiGridSimulationChallenge)
|
||
self.DynamicTable:SetDelegate(self)
|
||
self.GridChallengeBanner.gameObject:SetActive(false)
|
||
self.CurrentChanllengeManagers = self.TagManagerDic[self.AllSecondTag[1].Id] -- 默认使用第一个标签的managerList
|
||
end
|
||
|
||
function XUiPanelSimulationChallenge:InitLeftTabBtn()
|
||
self.BtnTabGroupDyn = XUiFubenSideDynamicTable.New(self.PanelSideList, XUiGridSimulationChallengeTab
|
||
, handler(self, self.OnClickTabCallBack))
|
||
self.BtnTabGroupDyn:ConnectSignal("DYNAMIC_TWEEN_OVER", self, self.OnSideDynamicTableTweenOver)
|
||
end
|
||
|
||
function XUiPanelSimulationChallenge:OnClickTabCallBack(index)
|
||
if self.BtnTabGroupDyn:GetCurrentSelectedIndex() == index then
|
||
return
|
||
end
|
||
self.BtnTabGroupDyn:TweenToIndex(index)
|
||
|
||
-- 根据点击的二级标签拿到当前的挑战副本类型列表
|
||
self:RefreshDataByLeftTabChange(index + 1)
|
||
end
|
||
|
||
function XUiPanelSimulationChallenge:OnSideDynamicTableTweenOver(index)
|
||
-- 滑动回调也要判断锁定
|
||
local tagId = self.AllSecondTag[index + 1].Id
|
||
local isOpen, lockTip = XDataCenter.FubenManagerEx.CheckHasOpenBySecondTagId(tagId)
|
||
if not isOpen then
|
||
XUiManager.TipMsg(lockTip)
|
||
-- 回弹
|
||
local backIndex = XDataCenter.FubenManagerEx.GetUnLockMostNearSecondTagIndex(tagId) -- (lua下标)
|
||
self.BtnTabGroupDyn:TweenToIndex(backIndex - 1)
|
||
return
|
||
end
|
||
-- 背景底图刷新
|
||
local currClickTag = self.AllSecondTag[index + 1]
|
||
self.RootUi:ChangeBgBySecondTag(currClickTag.Bg)
|
||
self:RefreshDataByLeftTabChange(index + 1, self.CurrentLeftTabIndex - 1 == index) -- cs下标偏移
|
||
end
|
||
|
||
function XUiPanelSimulationChallenge:RefreshDataByLeftTabChange(index, isClicked)
|
||
if isClicked then --如果是通过点击切换的,则滑动切换的回调就不执行了
|
||
return
|
||
end
|
||
|
||
local tagId = self.AllSecondTag[index].Id
|
||
self.CurrentChanllengeManagers = self.TagManagerDic[tagId]
|
||
-- 切页后重置可播放
|
||
self:SetGridPlayAnimHasPlay(false)
|
||
-- 再刷新数据
|
||
self:SetupDynamicTable()
|
||
--当前选择的侧边栏index
|
||
self.CurrentLeftTabIndex = index
|
||
-- 缓存记录选择的标签
|
||
self:EmitSignal("SetMainUiFirstIndexArgs", self.FirstTagId, self.CurrentLeftTabIndex)
|
||
end
|
||
|
||
--动态列表事件
|
||
function XUiPanelSimulationChallenge:OnDynamicTableEvent(event, index, grid)
|
||
if event == DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_ATINDEX then
|
||
grid:UpdateGrid(self.CurrentChanllengeManagers[index], index, self.DynamicTable:GetFirstUseGridIndexAndUseCount())
|
||
elseif event == DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_TOUCHED then
|
||
self:OnClickChapterGrid(self.CurrentChanllengeManagers[index], grid)
|
||
elseif event == DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_RECYCLE then
|
||
grid:OnDestroy()
|
||
end
|
||
end
|
||
|
||
--设置动态列表
|
||
function XUiPanelSimulationChallenge:SetupDynamicTable(bReload)
|
||
self.DynamicTable:SetDataSource(self.CurrentChanllengeManagers)
|
||
self.DynamicTable:ReloadDataSync(bReload and 1 or -1)
|
||
end
|
||
|
||
function XUiPanelSimulationChallenge:SetGridPlayAnimHasPlay(flag)
|
||
for index, grid in pairs(self.DynamicTable:GetGrids()) do
|
||
grid:SetHasPlay(flag)
|
||
end
|
||
end
|
||
|
||
-- 播放动态列表动画
|
||
function XUiPanelSimulationChallenge:PlayGridEnableAnime()
|
||
-- 先找到使用中的grid里序号最小的
|
||
local minIndex, useNum = self.DynamicTable:GetFirstUseGridIndexAndUseCount()
|
||
local allUseGird = self.DynamicTable:GetGrids()
|
||
|
||
local playOrder = 1 -- 播放顺序
|
||
for i = minIndex, minIndex + useNum - 1 do
|
||
local grid = allUseGird[i]
|
||
grid:PlayEnableAnime(playOrder)
|
||
playOrder = playOrder + 1
|
||
end
|
||
end
|
||
|
||
-- 周常入口由各自的manger管理,manger里有格子的数据
|
||
function XUiPanelSimulationChallenge:OnClickChapterGrid(manager, grid)
|
||
if grid and grid.OnClickSelf then
|
||
grid:OnClickSelf()
|
||
return
|
||
end
|
||
local doneCb = function ()
|
||
manager:ExOpenMainUi()
|
||
end
|
||
XDataCenter.DlcManager.CheckDownloadForEntry(XDlcConfig.EntryType.Challenge, manager:ExGetConfig().Type, doneCb)
|
||
end
|
||
|
||
function XUiPanelSimulationChallenge:PlaySwithChapterListAnim()
|
||
end
|
||
|
||
function XUiPanelSimulationChallenge:OnDestroy()
|
||
if self.BtnTabGroupDyn and self.BtnTabGroupDyn.OnDestroy then
|
||
self.BtnTabGroupDyn:OnDestroy()
|
||
end
|
||
|
||
XEventManager.RemoveEventListener(XEventId.EVENT_FUBEN_DAILY_REFRESH, self.SetupDynamicTable, self)
|
||
XEventManager.RemoveEventListener(XEventId.EVENT_URGENTEVENT_SYNC, self.SetupDynamicTable, self)
|
||
XEventManager.RemoveEventListener(XEventId.EVENT_FUBEN_SINGLE_BOSS_SYNC, self.SetupDynamicTable, self)
|
||
end
|
||
|
||
return XUiPanelSimulationChallenge |