forked from endernon/PGRData
239 lines
No EOL
10 KiB
Lua
239 lines
No EOL
10 KiB
Lua
local XUiGridResourceCollection = require("XUi/XUiFuben/ResourceCollection/XUiGridResourceCollection") -- Chapter列表Grid
|
||
local XUiGridResourceCollectionTab = require("XUi/XUiFuben/ResourceCollection/XUiGridResourceCollectionTab") -- 左侧边栏Grid
|
||
local XUiFubenSideDynamicTable = require("XUi/XUiFuben/UiDynamicList/XUiFubenSideDynamicTable") --左侧边栏动态列表
|
||
|
||
local XUiPanelResourceCollection = XClass(XSignalData, "XUiPanelResourceCollection")
|
||
-- 资源收集 主界面(副本入口翻新)
|
||
|
||
function XUiPanelResourceCollection.CheckHasRedPoint(config)
|
||
if not config or config.Id then return end
|
||
-- 资源收集界面没有红点
|
||
return false
|
||
end
|
||
|
||
function XUiPanelResourceCollection:Ctor(ui, parent, config)
|
||
self.RootUi = parent
|
||
self.Config = config
|
||
XUiHelper.InitUiClass(self, ui)
|
||
XUiHelper.RegisterClickEvent(self, self.BtnFilter, self.OnBtnFilterClick)
|
||
|
||
self:InitData() -- 基础数据,包括加载标签数据,标签对应的管理器数据
|
||
self:InitLeftTabBtn() -- 初始化侧边栏
|
||
self:InitDynamicTable() -- 初始化副本入口动态列表
|
||
self:SetupDynamicTable(nil, self.CurrentLeftTabIndex or 0)
|
||
end
|
||
|
||
function XUiPanelResourceCollection: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)
|
||
self:AddTimer()
|
||
end
|
||
|
||
function XUiPanelResourceCollection:OnEnable()
|
||
-- 播放grid的Enable动画,onenable强制播放
|
||
self:SetGridPlayAnimHasPlay(false)
|
||
self:PlayGridEnableAnime()
|
||
end
|
||
|
||
function XUiPanelResourceCollection:InitData()
|
||
self.FirstTagId = self.Config.Id
|
||
self.AllSecondTag = XFubenConfigs.GetSecondTagConfigsByFirstTagId(self.FirstTagId) -- 拿到该模式下所有的二级标签 k = 1(二级tag表的id), v = 常规挑战 (tagName)
|
||
-- 根据二级tag分类索引到对应的manager,
|
||
self.TagManagerDic = {} -- k = secondTagId, v = {XManager1, XManager2 ... } ...
|
||
local fisrtUnlockTagIndex = nil
|
||
for _, secondTagconfig in pairs(self.AllSecondTag) do
|
||
if not fisrtUnlockTagIndex and XDataCenter.FubenManagerEx.CheckHasOpenBySecondTagId(secondTagconfig.Id) then
|
||
fisrtUnlockTagIndex = secondTagconfig.Order -- 第一个已解锁的标签
|
||
end
|
||
for k, chapterType in pairs(secondTagconfig.ChapterType) do
|
||
self.TagManagerDic[secondTagconfig.Id] = XDataCenter.FubenManagerEx.GetManager(chapterType) -- 根据二级标签查找到对应的manager(这个标签只配置一个manager)
|
||
end
|
||
end
|
||
self.FisrtUnlockTagIndex = fisrtUnlockTagIndex
|
||
end
|
||
|
||
function XUiPanelResourceCollection:InitDynamicTable()
|
||
-- 该界面是一个标签对应一个table
|
||
self.DynamicTableList = {}
|
||
for index, v in ipairs(self.AllSecondTag) do
|
||
local dyGo = self["PanelList"..index]
|
||
local dynamicTable = XDynamicTableNormal.New(dyGo)
|
||
self.DynamicTableList[index] = dynamicTable
|
||
dynamicTable:SetProxy(XUiGridResourceCollection)
|
||
dynamicTable:SetDelegate(self)
|
||
dyGo.transform:Find("Viewport/GridBanner").gameObject:SetActiveEx(false)
|
||
end
|
||
|
||
self.CurrManager = self.TagManagerDic[self.AllSecondTag[1].Id] -- 默认使用第一个标签的managerList
|
||
self.ChapterViewModels = self.CurrManager:ExGetChapterViewModels()
|
||
end
|
||
|
||
function XUiPanelResourceCollection:InitLeftTabBtn()
|
||
self.BtnTabGroupDyn = XUiFubenSideDynamicTable.New(self.PanelSideList, XUiGridResourceCollectionTab
|
||
, handler(self, self.OnClickTabCallBack))
|
||
self.BtnTabGroupDyn:ConnectSignal("DYNAMIC_TWEEN_OVER", self, self.OnSideDynamicTableTweenOver)
|
||
end
|
||
|
||
function XUiPanelResourceCollection:OnClickTabCallBack(index) -- 点击切换的回调
|
||
if self.BtnTabGroupDyn:GetCurrentSelectedIndex() == index then
|
||
return
|
||
end
|
||
self.BtnTabGroupDyn:TweenToIndex(index)
|
||
|
||
-- 根据点击的二级标签拿到当前的挑战副本类型列表
|
||
self:RefreshDataByLeftTabChange(index + 1)
|
||
end
|
||
|
||
function XUiPanelResourceCollection: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)
|
||
end
|
||
|
||
function XUiPanelResourceCollection:RefreshDataByLeftTabChange(index, isClicked) -- 根据左侧栏变化刷新数据
|
||
if isClicked then --如果是通过点击切换的,则滑动切换的回调就不执行了
|
||
return
|
||
end
|
||
local tagId = self.AllSecondTag[index].Id
|
||
self.CurrManager = self.TagManagerDic[tagId] -- 决定列表显示的List
|
||
self.ChapterViewModels = self.CurrManager:ExGetChapterViewModels() -- 当前类型下的所有chapter, eg:{作战补给,后勤保养 ...}
|
||
-- 切页后重置可播放
|
||
self:SetGridPlayAnimHasPlay(false)
|
||
-- 再刷新数据
|
||
self:SetupDynamicTable(nil, index)
|
||
--当前选择的侧边栏index
|
||
self.CurrentLeftTabIndex = index
|
||
-- 缓存记录选择的标签
|
||
self:EmitSignal("SetMainUiFirstIndexArgs", self.FirstTagId, self.CurrentLeftTabIndex)
|
||
end
|
||
|
||
--动态列表事件
|
||
function XUiPanelResourceCollection:OnDynamicTableEvent(event, index, grid)
|
||
if event == DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_INIT then
|
||
elseif event == DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_ATINDEX then
|
||
grid:UpdateGrid(self:GetUseModelView()[index], index, self.DynamicTableList[self.CurrentLeftTabIndex]:GetFirstUseGridIndexAndUseCount())
|
||
elseif event == DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_TOUCHED then
|
||
self:OnClickChapterGrid(self:GetUseModelView()[index])
|
||
end
|
||
end
|
||
|
||
--设置动态列表
|
||
function XUiPanelResourceCollection:SetupDynamicTable(bReload, targetTabIndex)
|
||
for index, dynamicTable in pairs(self.DynamicTableList) do -- tab的index对应自己的动态列表
|
||
if index == targetTabIndex then -- cs下标从0开始,这里偏移+1
|
||
dynamicTable:SetDataSource(self:GetUseModelView()) -- 如果有缓存的筛选列表则用缓存的
|
||
dynamicTable:ReloadDataSync(bReload and 1 or -1)
|
||
dynamicTable.Imp.gameObject:SetActiveEx(true)
|
||
else
|
||
dynamicTable.Imp.gameObject:SetActiveEx(false) --其他不显示的则隐藏,且格子也要隐藏(alpha设为0)
|
||
for index, grid in pairs(dynamicTable:GetGrids()) do
|
||
grid:SetAlphaZero()
|
||
end
|
||
end
|
||
end
|
||
end
|
||
|
||
--获取当前使用的列表
|
||
function XUiPanelResourceCollection:GetUseModelView()
|
||
return self.CurrManager.GetCharacterListIdByChapterViewModels and self.FinalFiltraedOrSortedList or self.ChapterViewModels
|
||
end
|
||
|
||
function XUiPanelResourceCollection:SetGridPlayAnimHasPlay(flag)
|
||
local dynamicTable = self.DynamicTableList[self.CurrentLeftTabIndex]
|
||
for index, grid in pairs(dynamicTable:GetGrids()) do
|
||
grid:SetHasPlay(flag)
|
||
end
|
||
end
|
||
|
||
-- 播放动态列表动画
|
||
function XUiPanelResourceCollection:PlayGridEnableAnime()
|
||
-- 先找到使用中的grid里序号最小的
|
||
local dynamicTable = self.DynamicTableList[self.CurrentLeftTabIndex]
|
||
local allUseGird = dynamicTable:GetGrids()
|
||
local minIndex, useNum = dynamicTable:GetFirstUseGridIndexAndUseCount()
|
||
|
||
local playOrder = 1 -- 播放顺序
|
||
for i = minIndex, minIndex + useNum - 1 do
|
||
local grid = allUseGird[i]
|
||
grid:PlayEnableAnime(playOrder)
|
||
playOrder = playOrder + 1
|
||
end
|
||
end
|
||
|
||
function XUiPanelResourceCollection:OnClickChapterGrid(ChapterViewModel)
|
||
if ChapterViewModel:GetIsLocked() then
|
||
XUiManager.TipError(ChapterViewModel:GetLockTip())
|
||
return
|
||
end
|
||
|
||
if ChapterViewModel:IsDayLock() then
|
||
XUiManager.TipError(CS.XTextManager.GetText("FubenDailyOpenHint",
|
||
ChapterViewModel:GetOpenDayString()))
|
||
return
|
||
end
|
||
|
||
ChapterViewModel:OpenUi()
|
||
end
|
||
|
||
-- 角色筛选
|
||
function XUiPanelResourceCollection:OnBtnFilterClick()
|
||
if not self.CurrManager or not self.CurrManager.GetCharacterListIdByChapterViewModels then
|
||
return
|
||
end
|
||
|
||
-- 转换构造体列表
|
||
local charaList = self.CurrManager:GetCharacterListIdByChapterViewModels()
|
||
|
||
-- 打开筛选器
|
||
XLuaUiManager.Open("UiCommonCharacterFilterTipsOptimization", charaList, self.GameObject.name, function (afterFiltList)
|
||
self.FinalFiltraedOrSortedList = self.CurrManager:SortModelViewByCharacterList(afterFiltList)
|
||
local currDynamicTable = self.DynamicTableList[self.CurrentLeftTabIndex]
|
||
currDynamicTable:SetDataSource(self.FinalFiltraedOrSortedList)
|
||
currDynamicTable:ReloadDataSync(-1)
|
||
end, CharacterFilterGroupType.Fragment)
|
||
end
|
||
|
||
function XUiPanelResourceCollection:AddTimer()
|
||
local checkpointTime = XDataCenter.PrequelManager.GetNextCheckPointTime()
|
||
local remainTime = checkpointTime - XTime.GetServerNowTimestamp()
|
||
if remainTime > 0 then
|
||
XCountDown.CreateTimer(self.GameObject.name, remainTime)
|
||
XCountDown.BindTimer(self.GameObject, self.GameObject.name, function(v)
|
||
self.TextTime.text = CS.XTextManager.GetText("PrequelFragmentTimeReset", XUiHelper.GetTime(v, XUiHelper.TimeFormatType.SHOP))
|
||
if v == 0 then self:RemoveTimer() end
|
||
end)
|
||
end
|
||
end
|
||
|
||
function XUiPanelResourceCollection:RemoveTimer()
|
||
XCountDown.RemoveTimer(self.GameObject.name)
|
||
end
|
||
|
||
function XUiPanelResourceCollection:OnDestroy()
|
||
self:RemoveTimer()
|
||
self.FinalFiltraedOrSortedList = nil -- 筛选或排序后的缓存列表
|
||
XDataCenter.CommonCharacterFiltManager.ClearCacheData() --清除筛选缓存数据
|
||
if self.BtnTabGroupDyn and self.BtnTabGroupDyn.OnDestroy then
|
||
self.BtnTabGroupDyn:OnDestroy()
|
||
end
|
||
end
|
||
|
||
function XUiPanelResourceCollection:PlaySwithChapterListAnim()
|
||
end
|
||
|
||
|
||
return XUiPanelResourceCollection |