PGRData/Script/matrix/xui/xuibiancatheatre/choice/XUiBiancaTheatreChoice.lua

244 lines
10 KiB
Lua
Raw Permalink Normal View History

2024-09-01 22:49:41 +02:00
local XUiChoiceDifficultyPanel = require("XUi/XUiBiancaTheatre/Choice/XUiChoiceDifficultyPanel")
local XUiChoiceTeamPanel = require("XUi/XUiBiancaTheatre/Choice/XUiChoiceTeamPanel")
local XUiChoiceRecruitTicketPanel = require("XUi/XUiBiancaTheatre/Choice/XUiChoiceRecruitTicketPanel")
local XUiChoiceRewardPanel = require("XUi/XUiBiancaTheatre/Choice/XUiChoiceRewardPanel")
local XUiChoiceExRewardPanel = require("XUi/XUiBiancaTheatre/Choice/XUiChoiceExRewardPanel")
local XUiChoiceFightRewardPanel = require("XUi/XUiBiancaTheatre/Choice/XUiChoiceFightRewardPanel")
local XUiBiancaTheatrePanelDown = require("XUi/XUiBiancaTheatre/Common/XUiBiancaTheatrePanelDown")
local XUiPanelItemChange = require("XUi/XUiBiancaTheatre/Common/XUiPanelItemChange")
--不显示“下一步”按钮的UI类型
local NotShowNextBtnUiType = {
[XBiancaTheatreConfigs.UiChoiceType.Reward] = true,
[XBiancaTheatreConfigs.UiChoiceType.ExReward] = true,
}
--UI类型对应的标题和小方块下标
local ShowPanelBtUiType = {
[XBiancaTheatreConfigs.UiChoiceType.Difficulty] = 1,
[XBiancaTheatreConfigs.UiChoiceType.TeamSelect] = 2,
[XBiancaTheatreConfigs.UiChoiceType.RecruitTicket] = 3,
--只有前3个枚举才有小方块
[XBiancaTheatreConfigs.UiChoiceType.FightReward] = 4,
}
--不显示分队和道具按钮的UI类型
local NotShowBtnDetailsUiType = {
[XBiancaTheatreConfigs.UiChoiceType.Difficulty] = true,
[XBiancaTheatreConfigs.UiChoiceType.TeamSelect] = true,
}
--不显示已招募角色列表按钮的UI类型
local NotShowBtnTeamUiType = {
[XBiancaTheatreConfigs.UiChoiceType.Difficulty] = true,
[XBiancaTheatreConfigs.UiChoiceType.TeamSelect] = true,
[XBiancaTheatreConfigs.UiChoiceType.RecruitTicket] = true,
[XBiancaTheatreConfigs.UiChoiceType.ExReward] = true,
}
--显示奖励背景的UI类型
local ShowRewardBg = {
[XBiancaTheatreConfigs.UiChoiceType.Reward] = true,
[XBiancaTheatreConfigs.UiChoiceType.ExReward] = true,
}
--显示资源栏的UI类型
local ShowPanelSpecialToolUiType = {
[XBiancaTheatreConfigs.UiChoiceType.FightReward] = true,
}
--UI类型对应的UI名功能引导用
local UiTypeToChoiceUiName = {
[XBiancaTheatreConfigs.UiChoiceType.TeamSelect] = "PanelTeamSelect",
[XBiancaTheatreConfigs.UiChoiceType.RecruitTicket] = "PanelRecruitTicket",
}
--步骤类型转UI类型
local StpeTypeToUiType = {
[XBiancaTheatreConfigs.XStepType.ExtraItemReward] = XBiancaTheatreConfigs.UiChoiceType.ExReward,
[XBiancaTheatreConfigs.XStepType.ItemReward] = XBiancaTheatreConfigs.UiChoiceType.Reward,
[XBiancaTheatreConfigs.XStepType.SelectRecruitTicket] = XBiancaTheatreConfigs.UiChoiceType.RecruitTicket,
[XBiancaTheatreConfigs.XStepType.FightReward] = XBiancaTheatreConfigs.UiChoiceType.FightReward
}
--小方块的最大数量
local GRID_DOT_MAX_COUTN = 3
--######################## XUiBiancaTheatreChoice 选择难度、其他选择布局合一的界面 ########################
local XUiBiancaTheatreChoice = XLuaUiManager.Register(XLuaUi, "UiBiancaTheatreChoice")
function XUiBiancaTheatreChoice:OnAwake()
self:NewPanel()
-- XAdventureManager 当前冒险管理器
self.CurrentAdventureManager = XDataCenter.BiancaTheatreManager.GetCurrentAdventureManager()
-- XAdventureDifficulty 当前选择的难度
self.CurrentDifficulty = nil
-- 灵视特效
self.EffectVision = XUiHelper.TryGetComponent(self.Transform, "FullScreenBackground/EffectVision")
if self.EffectVision then self.EffectVision.gameObject:SetActiveEx(false) end
self:RegisterUiEvents()
self:InitItemChange()
XUiHelper.NewPanelActivityAsset(XDataCenter.BiancaTheatreManager.GetAdventureAssetItemIds(), self.PanelSpecialTool, nil, XDataCenter.BiancaTheatreManager.AdventureAssetItemOnBtnClick)
end
function XUiBiancaTheatreChoice:OnStart(data)
self.UiType = data and data.UiType --要显示的布局类型 XBiancaTheatreConfigs.UiChoiceType
self.CurStep = self.CurrentAdventureManager and self.CurrentAdventureManager:GetCurrentChapter():GetCurStep() --XAdventureStep
if not self.UiType then
local curStep = self.CurStep
local stepType = curStep and curStep:GetStepType()
self.UiType = StpeTypeToUiType[stepType]
end
self:InitPanel(self.UiType)
end
function XUiBiancaTheatreChoice:OnEnable()
XDataCenter.BiancaTheatreManager.CheckBgmPlay()
self:Refresh()
XDataCenter.BiancaTheatreManager.UpdateChapterBg(self.BiancaTheatreBg)
-- 音效滤镜界限恢复
XDataCenter.BiancaTheatreManager.StartAudioFilter()
XEventManager.AddEventListener(XEventId.EVENT_BIANCA_THEATRE_SELECT_TEAM_UPGRADE, self.RefreshPanelDown, self)
end
function XUiBiancaTheatreChoice:OnDisable()
XEventManager.RemoveEventListener(XEventId.EVENT_BIANCA_THEATRE_SELECT_TEAM_UPGRADE, self.RefreshPanelDown, self)
end
--######################## 私有方法 ########################
function XUiBiancaTheatreChoice:RegisterUiEvents()
self.BtnMainUi.CallBack = function() XDataCenter.BiancaTheatreManager.RunMain() end
XUiHelper.RegisterClickEvent(self, self.BtnBack, self.Close)
end
function XUiBiancaTheatreChoice:NewPanel()
--下方通用显示面板
self.PanelDown = XUiBiancaTheatrePanelDown.New(self.Transform)
--难度选择
self.ChoiceDifficultyPanel = XUiChoiceDifficultyPanel.New(self.PanelDifficulty, self)
--分队选择
self.ChoiceTeamPanel = XUiChoiceTeamPanel.New(self.PanelChapterLis, self)
--招募券选择
self.ChoiceRecruitTicketPanel = XUiChoiceRecruitTicketPanel.New(self.PanelChapterLis, self)
--奖励选择
self.ChoiceRewardPanel = XUiChoiceRewardPanel.New(self.PanelReward, self)
--额外奖励选择
self.ChoiceExRewardPanel = XUiChoiceExRewardPanel.New(self.PanelReward, self)
--战斗奖励选择
self.ChoiceFightRewardPanel = XUiChoiceFightRewardPanel.New(self.PanelChapterLis, self)
--UiChoiceType 对应的 Panel类对象
self.PanelClass = {
[XBiancaTheatreConfigs.UiChoiceType.Difficulty] = self.ChoiceDifficultyPanel,
[XBiancaTheatreConfigs.UiChoiceType.TeamSelect] = self.ChoiceTeamPanel,
[XBiancaTheatreConfigs.UiChoiceType.RecruitTicket] = self.ChoiceRecruitTicketPanel,
[XBiancaTheatreConfigs.UiChoiceType.Reward] = self.ChoiceRewardPanel,
[XBiancaTheatreConfigs.UiChoiceType.ExReward] = self.ChoiceExRewardPanel,
[XBiancaTheatreConfigs.UiChoiceType.FightReward] = self.ChoiceFightRewardPanel,
}
end
function XUiBiancaTheatreChoice:InitPanel(uiChoiceType)
self.PanelDifficulty.gameObject:SetActiveEx(false)
self.PanelChapterLis.gameObject:SetActiveEx(false)
self.PanelReward.gameObject:SetActiveEx(false)
if not uiChoiceType then
return
end
local panelClass = self.PanelClass[uiChoiceType]
if panelClass and panelClass.Init then
panelClass:Init()
end
self:SetPanelNoneActive(false)
--标题和小方块
local index = ShowPanelBtUiType[uiChoiceType]
if index then
local gridDotNor, gridDotSelect
self.TextTitle.text = XBiancaTheatreConfigs.GetClientConfig("StartViewTitle", index)
if index > GRID_DOT_MAX_COUTN then
self.PanleDot.gameObject:SetActiveEx(false)
else
--3个小方块
for i = 1, GRID_DOT_MAX_COUTN do
gridDotNor = XUiHelper.TryGetComponent(self["GridDian" .. i], "Nor")
gridDotSelect = XUiHelper.TryGetComponent(self["GridDian" .. i], "Select")
if gridDotNor then
gridDotNor.gameObject:SetActiveEx(index ~= i)
end
if gridDotSelect then
gridDotSelect.gameObject:SetActiveEx(index == i)
end
end
end
end
self.PanelBt.gameObject:SetActiveEx(index and true or false)
self.PanelLeftInformation.gameObject:SetActiveEx(not NotShowBtnDetailsUiType[uiChoiceType])
self.PanelTeam.gameObject:SetActiveEx(not NotShowBtnTeamUiType[uiChoiceType])
self.BtnNextStep.gameObject:SetActiveEx(not NotShowNextBtnUiType[uiChoiceType])
self.PanelSpecialTool.gameObject:SetActiveEx(ShowPanelSpecialToolUiType[uiChoiceType] or false)
--背景
self.PanelRewardBg.gameObject:SetActiveEx(ShowRewardBg[uiChoiceType])
self.BiancaTheatreBg.gameObject:SetActiveEx(not ShowRewardBg[uiChoiceType])
--选择的布局节点名
local uiName = UiTypeToChoiceUiName[uiChoiceType]
if uiName then
self.PanelChapterLis.gameObject.name = uiName
end
end
function XUiBiancaTheatreChoice:Refresh()
local panelClass = self.PanelClass[self.UiType]
if panelClass and panelClass.Refresh then
panelClass:Refresh()
end
self:RefreshPanelDown()
self:UpdateVisionEffect()
self:RefreshItemChange(not ShowPanelSpecialToolUiType[self.UiType])
end
function XUiBiancaTheatreChoice:RefreshPanelDown()
self.PanelDown:Refresh()
end
function XUiBiancaTheatreChoice:UpdateVisionEffect()
if self.EffectVision then
local adventureManager = XDataCenter.BiancaTheatreManager.GetCurrentAdventureManager()
local visionValue = adventureManager:GetVisionValue() or 0
local visionId = XBiancaTheatreConfigs.GetVisionIdByValue(visionValue)
local isVisionOpen = XDataCenter.BiancaTheatreManager.CheckVisionIsOpen()
self.EffectVision.gameObject:LoadUiEffect(XBiancaTheatreConfigs.GetVisionUiEffectUrl(visionId))
self.EffectVision.gameObject:SetActiveEx(isVisionOpen)
end
end
function XUiBiancaTheatreChoice:InitItemChange()
local panelEnergyChangeList = {
self.PanelEnergyChange2,
self.PanelEnergyChange,
}
for index, itemId in ipairs(XDataCenter.BiancaTheatreManager.GetAdventureAssetItemIds()) do
if panelEnergyChangeList[index] then
self["ItemChange" .. index] = XUiPanelItemChange.New(panelEnergyChangeList[index], itemId)
end
end
end
function XUiBiancaTheatreChoice:RefreshItemChange(isClose)
for index, _ in ipairs(XDataCenter.BiancaTheatreManager.GetAdventureAssetItemIds()) do
if self["ItemChange" .. index] then
self["ItemChange" .. index]:Refresh(isClose)
end
end
end
function XUiBiancaTheatreChoice:Close()
self.Super.Close(self)
end
function XUiBiancaTheatreChoice:SetPanelNoneActive(isActive)
self.PanelNone.gameObject:SetActiveEx(isActive)
end
return XUiBiancaTheatreChoice