PGRData/Script/matrix/xui/xuifuben/XUiNewFuben.lua

267 lines
9.2 KiB
Lua
Raw Normal View History

2024-09-01 22:49:41 +02:00
local XUiNewFuben = XLuaUiManager.Register(XLuaUi, "UiNewFuben")
function XUiNewFuben:OnAwake()
self.IsRebackFight = true
self.FubenManagerEx = XDataCenter.FubenManagerEx
self.MainUiTabConfigs = self.FubenManagerEx.GetMainUiTabConfigs()
-- 提审服屏蔽主线外的关卡
if XUiManager.IsHideFunc then
for k, v in pairs(self.MainUiTabConfigs) do
local result = {}
if v.UiParentName == "PanelMainLine" then
table.insert(result, v)
self.MainUiTabConfigs = result
end
end
end
self.ChildPanelInfoDic = {}
self.TimerId = nil
self.SelectedIndex = nil
self.MainUiFirstIndexArgsDic = {}
self.IsInited = false
self.RefreshTimeId = XFubenConfigs.GetMainPanelTimeId()
self:RegisterUiEvents()
end
function XUiNewFuben:OnStart(chapterType)
if chapterType then -- 根据chapterType检测要打开的子界面不传默认打开第一个
local firstTag, secondTagIndex = XDataCenter.FubenManagerEx.GetTagConfigByChapterType(chapterType)
if firstTag and not self:GetMainUiFirstIndexArgs(firstTag) then
self.SelectedIndex = firstTag
if secondTagIndex then
self:SetMainUiFirstIndexArgs(firstTag, secondTagIndex)
end
end
end
-- 初始化下方页签按钮
self:InitBottomTabs()
end
function XUiNewFuben:TimeUpdate()
local currentPanel = self.ChildPanelInfoDic[self.PanelTabGroup.CurSelectId]
if currentPanel and currentPanel.InstanceProxy and currentPanel.InstanceProxy.TimeUpdate then
currentPanel.InstanceProxy:TimeUpdate()
end
self:RefreshBg()
end
function XUiNewFuben:OnEnable()
-- 刷新按钮红点
local childPanelInfo = nil
local btnTab = nil
for i = 1, self.PanelTabGroup.TabBtnList.Count do
childPanelInfo = self:GetChildPanelInfo(i)
btnTab = self.PanelTabGroup:GetButtonByIndex(i)
if childPanelInfo and childPanelInfo.Proxy.CheckHasRedPoint then
btnTab:ShowReddot(childPanelInfo.Proxy.CheckHasRedPoint(childPanelInfo))
else
btnTab:ShowReddot(false)
end
end
-- 刷新活动界面需要用到的背景图,会覆盖其他二级标签的背景图
self.RImgFestivalBg:SetRawImage(XFubenConfigs.GetMainFestivalBg())
self:RefreshBg()
self:InitBg()
self:OnChildPanelEnable()
if self.TimerId then
XScheduleManager.UnSchedule(self.TimerId)
end
self.TimerId = XScheduleManager.ScheduleForeverEx(handler(self, self.TimeUpdate), 1000, 1000)
end
function XUiNewFuben:OnChildPanelEnable()
local currentPanel = self.ChildPanelInfoDic[self.PanelTabGroup.CurSelectId]
if currentPanel and currentPanel.InstanceProxy and currentPanel.InstanceProxy.OnEnable then
currentPanel.InstanceProxy:OnEnable()
end
end
function XUiNewFuben:OnDisable()
if self.TimerId then
XScheduleManager.UnSchedule(self.TimerId)
end
end
function XUiNewFuben:OnDestroy()
for _, panel in pairs(self.ChildPanelInfoDic) do
if panel and panel.InstanceProxy and panel.InstanceProxy.OnDestroy then
panel.InstanceProxy:OnDestroy()
end
end
end
--######################## 私有方法 ########################
function XUiNewFuben:RegisterUiEvents()
XUiHelper.RegisterClickEvent(self, self.BtnBack, self.Close)
XUiHelper.RegisterClickEvent(self, self.BtnMainUi, function() XLuaUiManager.RunMain() end)
end
function XUiNewFuben:InitBottomTabs()
local buttons = {}
XUiHelper.RefreshCustomizedList(self.PanelTabGroup.transform, self.BtnTab, #self.MainUiTabConfigs, function(index, go)
local button = go:GetComponent("XUiButton")
local config = self.MainUiTabConfigs[index]
go.name = "BtnTab"..config.UiParentName
button:SetNameByGroup(0, config.Name)
button:SetRawImage(config.IconPath)
button:SetDisable(not self.FubenManagerEx.CheckHasOpenByFirstTagId(index))
table.insert(buttons, button)
end)
self.PanelTabGroup:Init(buttons, function(index) self:OnBtnBottomTabClicked(index) end)
if XUiManager.IsHideFunc then
self.SelectedIndex = nil
end
self.PanelTabGroup:SelectIndex(self.SelectedIndex or 1)
end
-- 刷新战斗面板每期活动图
function XUiNewFuben:RefreshBg()
if XUiManager.IsHideFunc then
return
end
local inTime = XFunctionManager.CheckInTimeByTimeId(self.RefreshTimeId)
if self.BgNone then -- 防打包
self.BgNone.gameObject:SetActiveEx(not inTime)
end
if self.BgSpine then
self.BgSpine.gameObject:SetActiveEx(inTime and not XFubenConfigs.GetIsMainHaveVideoBg())
end
if self.BgVideo then
self.BgVideo.gameObject:SetActiveEx(inTime and XFubenConfigs.GetIsMainHaveVideoBg())
end
end
function XUiNewFuben:InitBg()
if XUiManager.IsHideFunc then
return
end
-- v2.0 支持视频背景
if XFubenConfigs.GetIsMainHaveVideoBg() and self.VideoPlayer then
self.VideoPlayer:SetVideoFromRelateUrl(XFubenConfigs.GetMainVideoBgUrl())
self.VideoPlayer:Prepare()
end
-- v1.31 支持3D场景
if XFubenConfigs.GetIsMainHave3DBg() then
self:LoadUiScene(XFubenConfigs.GetMain3DBgPrefab(), XFubenConfigs.GetMain3DCameraPrefab(), nil, false)
end
end
-- 根据二级标签切换底板背景图
function XUiNewFuben:ChangeBgBySecondTag(bgPath)
if not bgPath then
self.RImgMainStoryBg.gameObject:SetActiveEx(false)
return
end
self.RImgMainStoryBg:SetRawImage(bgPath)
self.RImgMainStoryBg.gameObject:SetActiveEx(true)
end
-- 刷新背景图
function XUiNewFuben:ShowOrHideBgByConfig(config)
self.Bg.gameObject:SetActiveEx(config.UiParentName == "PanelMain")
self.RImgMainStoryBg.gameObject:SetActiveEx(config.UiParentName ~= "PanelMain")
self.BgNewCommonBai.gameObject:SetActiveEx(config.UiParentName ~= "PanelMain")
end
function XUiNewFuben:OnBtnBottomTabClicked(index)
if not self.IsRebackFight and self.SelectedIndex == index then -- 从战斗返回时会强行调用这个如果这里return调的话就会不播放动画导致一片空白
return
end
self.IsRebackFight = false
if not self.FubenManagerEx.CheckHasOpenByFirstTagId(index) then -- 如果没开放
XUiManager.TipError(self.MainUiTabConfigs[index].ConditionDesc)
return
end
local childPanelData = self:GetChildPanelInfo(index)
self:ShowOrHideBgByConfig(childPanelData)
if childPanelData == nil then return end
-- 隐藏其他的子面板
for key, data in pairs(self.ChildPanelInfoDic) do
data.UiParent.gameObject:SetActiveEx(key == index)
if key ~= index and data.InstanceProxy and data.InstanceProxy.OnDisable then
data.InstanceProxy:OnDisable()
end
end
-- 加载子面板实体
local instanceGo = childPanelData.InstanceGo
if instanceGo == nil then
instanceGo = childPanelData.UiParent:LoadPrefab(childPanelData.AssetPath)
childPanelData.InstanceGo = instanceGo
end
-- 加载子面板代理
local instanceProxy = childPanelData.InstanceProxy
if instanceProxy == nil then
instanceProxy = childPanelData.Proxy.New(instanceGo, self, childPanelData)
childPanelData.InstanceProxy = instanceProxy
if CheckClassSuper(instanceProxy, XSignalData) then
instanceProxy:ConnectSignal("SetMainUiFirstIndexArgs", self, self.SetMainUiFirstIndexArgs)
end
end
instanceProxy:SetData(index, self:GetMainUiFirstIndexArgs(index))
if self.IsInited then
self:OnChildPanelEnable()
end
self.IsInited = true
self.SelectedIndex = index
end
function XUiNewFuben:GetChildPanelInfo(index)
local result = self.ChildPanelInfoDic[index]
if result == nil then
local config = XTool.Clone(self.MainUiTabConfigs[index])
if config == nil then return nil end
if config.UiParentName == nil then
config.UiParent = self.PanelContent
else
config.UiParent = self[config.UiParentName]
end
config.Proxy = require(config.ProxyPath)
self.ChildPanelInfoDic[index] = config
result = config
end
return result
end
function XUiNewFuben:SetOperationActive(value)
self.PanelBottom.gameObject:SetActiveEx(value)
self.BtnBack.gameObject:SetActiveEx(value)
self.BtnMainUi.gameObject:SetActiveEx(value)
end
function XUiNewFuben:SetMainUiFirstIndexArgs(firstIndex, ...)
self.MainUiFirstIndexArgsDic[firstIndex] = { ... }
end
function XUiNewFuben:GetMainUiFirstIndexArgs(firstIndex)
local result = self.MainUiFirstIndexArgsDic[firstIndex]
if result then
return table.unpack(result)
end
end
-- 记录作战前底部页签选择的Id
function XUiNewFuben:OnReleaseInst()
return {
SelectedIndex = self.SelectedIndex,
MainUiFirstIndexArgsDic = self.MainUiFirstIndexArgsDic
}
end
function XUiNewFuben:OnResume(data)
if XLuaUiManager.IsUiLoad("UiMain") then -- 如果是从uimain打开
return
end
data = data or {}
self.IsRebackFight = true -- 是否从战斗结束后打开的
self.SelectedIndex = data.SelectedIndex or 1
self.MainUiFirstIndexArgsDic = data.MainUiFirstIndexArgsDic or {}
end
return XUiNewFuben