PGRData/Script/matrix/xui/xuifuben/XUiNewFuben.lua
2024-09-01 22:49:41 +02:00

267 lines
No EOL
9.2 KiB
Lua
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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