PGRData/Script/matrix/xui/xuibiancatheatre/XUiBiancaTheatrePlayMain.lua

442 lines
18 KiB
Lua
Raw Normal View History

2024-09-01 20:49:41 +00:00
-- XPanelPsionicVisionOff 肉鸽玩法2.1 灵视栏
-- ================================================================================
local XPanelPsionicVisionOff = XClass(nil, "XPanelPsionicVisionOff")
function XPanelPsionicVisionOff:Ctor(ui, rootUi)
XUiHelper.InitUiClass(self, ui)
self.RootUi = rootUi
self.IconBg = self.IconBg.gameObject:GetComponent("RawImage")
XUiHelper.RegisterClickEvent(self, self.ImgProgress, self.OnOpenClick)
XUiHelper.RegisterClickEvent(self, self.ImgJD, self.OnOpenClick)
XUiHelper.RegisterClickEvent(self, self.ImgJiantou, self.OnOpenClick)
end
function XPanelPsionicVisionOff:RefreshVision()
local visionValue = XDataCenter.BiancaTheatreManager.GetCurrentAdventureManager():GetVisionValue()
local visionId = XBiancaTheatreConfigs.GetVisionIdByValue(visionValue)
if self.IconBg then self.IconBg:SetRawImage(XBiancaTheatreConfigs.GetVisionIcon(visionId)) end
self.ImgProgress.fillAmount = visionValue / 100
self.TxtJD.text = visionId
self.TxtNum.text = visionValue
end
function XPanelPsionicVisionOff:OnOpenClick()
self.RootUi:SetVisionActive(true)
end
function XPanelPsionicVisionOff:SetActive(active)
self.GameObject:SetActiveEx(active)
if active then
self:RefreshVision()
end
end
-- XPanelPsionicVisionOn 肉鸽玩法2.1 灵视面板
-- ================================================================================
local XPanelPsionicVisionOn = XClass(nil, "XPanelPsionicVisionOn")
function XPanelPsionicVisionOn:Ctor(ui, rootUi)
XUiHelper.InitUiClass(self, ui)
self.RootUi = rootUi
self.IconBg = self.IconBg.gameObject:GetComponent("RawImage")
XUiHelper.RegisterClickEvent(self, self.BtnCloseDetail, self.OnCloseClick)
XUiHelper.RegisterClickEvent(self, self.ImgProgress, self.OnCloseClick)
end
function XPanelPsionicVisionOn:RefreshVision()
local visionValue = XDataCenter.BiancaTheatreManager.GetCurrentAdventureManager():GetVisionValue()
local visionId = XBiancaTheatreConfigs.GetVisionIdByValue(visionValue)
if self.IconBg then self.IconBg:SetRawImage(XBiancaTheatreConfigs.GetVisionIcon(visionId)) end
self.ImgProgress.fillAmount = visionValue / 100
self.TxtJD.text = visionId
self.TxtNum.text = visionValue
self.TxtDesc.gameObject:SetActiveEx(false)
self.TxtRecord.gameObject:SetActiveEx(false)
self:RefreshTxtShake(visionId)
end
function XPanelPsionicVisionOn:RefreshTxtShake(visionId)
local chapterId = XDataCenter.BiancaTheatreManager.GetCurrentAdventureManager():GetCurrentChapter():GetCurrentChapterId()
local descGroupId = XBiancaTheatreConfigs.GetVisionDescShakeGroupId(visionId)
local recordGroupId = XBiancaTheatreConfigs.GetVisionRecordDescShakeGroupId(visionId)
local descTxtList = XBiancaTheatreConfigs.GetVisionShakeIdListByGroupId(descGroupId, chapterId)
local recordTxtList = XBiancaTheatreConfigs.GetVisionShakeIdListByGroupId(recordGroupId, chapterId)
if not XTool.IsTableEmpty(descTxtList) then
for index, config in ipairs(descTxtList) do
if self["TxtDesc"..index] then
self:RefreshTextMeshEffect(self["TxtDesc"..index], config)
end
end
end
if not XTool.IsTableEmpty(descTxtList) then
for index, config in ipairs(recordTxtList) do
if self["TxtRecord"..index] then
self:RefreshTextMeshEffect(self["TxtRecord"..index], config)
end
end
end
end
function XPanelPsionicVisionOn:RefreshTextMeshEffect(textComponent, config)
local textMeshEffect = textComponent.gameObject:GetComponent(typeof(CS.TextMeshEffect))
textComponent.text = config.Txt
textMeshEffect.startIndex = config.StartIndex
textMeshEffect.endIndex = config.EndIndex
textMeshEffect.textHorizontalShakeType = config.HShakeType
textMeshEffect.shakeHorizontalStrength = config.Hstrength
textMeshEffect.shakeHorizontalSpeed = config.HSpeed
textMeshEffect.shakeHorizontalDensity = config.HoriDensity
textMeshEffect.textVerticalShakeType = config.VShakeType
textMeshEffect.shakeVerticalStrength = config.VStrength
textMeshEffect.shakeVerticalSpeed = config.VSpeed
textMeshEffect.shakeVerticalDensity = config.VDensity
textComponent.gameObject:SetActiveEx(true)
end
function XPanelPsionicVisionOn:OnCloseClick()
self.RootUi:SetVisionActive(false)
end
function XPanelPsionicVisionOn:SetActive(active)
self.GameObject:SetActiveEx(active)
if active then
self:RefreshVision()
end
end
-- XUiBiancaTheatreNode 肉鸽玩法2.1 选择节点
-- ================================================================================
local XUiRewardGrid = require("XUi/XUiBiancaTheatre/Common/XUiRewardGrid")
local XUiBiancaTheatreNode = XClass(nil, "XUiBiancaTheatreNode")
local NodeRewardMaxShowCount = 1
function XUiBiancaTheatreNode:Ctor(ui, rootUi)
XUiHelper.InitUiClass(self, ui)
self.Node = nil
self.RootUi = rootUi
XUiHelper.RegisterClickEvent(self, self.BtnSelect, self.OnBtnComfirmClicked)
self.ItemGridList = {}
end
-- node : XANode
function XUiBiancaTheatreNode:SetData(node)
self.Node = node
-- 类型图标
self.RImgIcon:SetRawImage(node:GetNodeTypeIcon())
-- 节点小图标
local icon = node:GetNodeTypeSmallIcon()
if icon then
self.Icon:SetRawImage(icon)
end
self.Icon.gameObject:SetActiveEx(icon and true or false)
-- 节点显示名字
self.TxtName.text = node:GetNodeTypeName()
self.TxtTeamNumber.gameObject:SetActiveEx(false)
-- 节点详情
local simpleDesc = node:GetNodeTypeDesc()
self.TxtDetail.gameObject:SetActiveEx(simpleDesc ~= nil)
if simpleDesc ~= nil then
self.TxtDetail.text = string.gsub(simpleDesc, "\\n", "\n")
end
-- 是否已被禁用
self.PanelDisable.gameObject:SetActiveEx(node:GetIsDisable())
-- 底下图标显示显示
local childCount = self.PanelReward.childCount
for i = 0, childCount - 1 do
self.PanelReward:GetChild(i).gameObject:SetActiveEx(false)
end
local showDatas = node:GetShowDatas()
for i = 1, #showDatas do
local showData = showDatas[i]
local child = nil
if i > NodeRewardMaxShowCount then break end
if i > childCount then
child = XUiHelper.Instantiate(self.GridReward.gameObject, self.PanelReward)
else
child = self.PanelReward:GetChild(i - 1)
end
child.gameObject:SetActiveEx(true)
local itemGrid = self.ItemGridList[i]
if not itemGrid then
itemGrid = XUiRewardGrid.New(self.GridReward)
self.ItemGridList[i] = itemGrid
end
itemGrid:Refresh(showData.rewardNode)
end
-- 灵视特效
self:UpdateNodeEffect(node)
return self
end
-- 更新节点特效
function XUiBiancaTheatreNode:UpdateNodeEffect(node)
local effectUrl = node:GetNodeTypeEffectUrl()
if not string.IsNilOrEmpty(effectUrl) then
self.Effect.gameObject:LoadUiEffect(effectUrl)
self.Effect.gameObject:SetActiveEx(true)
else
self.Effect.gameObject:SetActiveEx(false)
end
end
function XUiBiancaTheatreNode:OnRewardClicked(data)
if data.rewardType == XBiancaTheatreConfigs.AdventureRewardType.RewardId then
XUiManager.OpenUiTipRewardByRewardId(data.rewardId)
return
end
local configNname
if data.rewardType == XBiancaTheatreConfigs.AdventureRewardType.SelectSkill then
configNname = "SelectSkillDetail"
elseif data.rewardType == XBiancaTheatreConfigs.AdventureRewardType.LevelUp then
configNname = "LevelUpDetail"
end
local icon = XBiancaTheatreConfigs.GetClientConfig(configNname, 1)
local content = XBiancaTheatreConfigs.GetClientConfig(configNname, 3)
if data.rewardType == XBiancaTheatreConfigs.AdventureRewardType.SelectSkill then
icon = string.format(icon, XBiancaTheatreConfigs.GetClientConfig("SelectSkillDetailIcon", data.powerId))
content = string.format(content, XBiancaTheatreConfigs.GetClientConfig("SelectSkillDetailDesc", data.powerId))
end
end
function XUiBiancaTheatreNode:OnBtnComfirmClicked()
self.Node:Trigger()
end
function XUiBiancaTheatreNode:PlaySelectAnim()
self.AnimSelect:Play()
end
function XUiBiancaTheatreNode:StopSelectAnim()
self.AnimSelect:Stop()
self.AnimSelect:Evaluate()
end
-- XUiBiancaTheatrePlayMain 肉鸽玩法2.1 内循环玩法主界面
-- ================================================================================
local XUiBiancaTheatrePanelDown = require("XUi/XUiBiancaTheatre/Common/XUiBiancaTheatrePanelDown")
local XUiBiancaTheatrePanelFetters = require("XUi/XUiBiancaTheatre/Common/XUiBiancaTheatrePanelFetters")
local XUiPanelItemChange = require("XUi/XUiBiancaTheatre/Common/XUiPanelItemChange")
local XUiBiancaTheatrePlayMain = XLuaUiManager.Register(XLuaUi, "UiBiancaTheatrePlayMain")
function XUiBiancaTheatrePlayMain:OnAwake()
self.TheatreManager = XDataCenter.BiancaTheatreManager
self.AdventureManager = self.TheatreManager.GetCurrentAdventureManager()
self.CurrentChapter = self.AdventureManager:GetCurrentChapter()
-- 注册资源面板
XUiHelper.NewPanelActivityAsset(self.TheatreManager.GetAdventureAssetItemIds(), self.PanelAssetitems, nil, XDataCenter.BiancaTheatreManager.AdventureAssetItemOnBtnClick)
self:RegisterUiEvents()
-- 当前节点 XUiBiancaTheatreNode
self.CurrentNodeItems = {}
self.BuffGrids = {}
self.DownPanel = XUiBiancaTheatrePanelDown.New(self.PanelDown)
self.FettersPanel = XUiBiancaTheatrePanelFetters.New(self.PanelFetters)
self.VisionActive = false
self.PanelVisionOff = XPanelPsionicVisionOff.New(self.PanelPsionicVisionOff, self)
self.PanelVisionOn = XPanelPsionicVisionOn.New(self.PanelPsionicVisionOn, self)
self:InitItemChange()
end
function XUiBiancaTheatrePlayMain:OnEnable()
self.Super.OnEnable(self)
XDataCenter.BiancaTheatreManager.CheckBgmPlay()
self:Refresh()
XDataCenter.BiancaTheatreManager.UpdateChapterBg(self.Bg)
-- 处理下一个操作
self.AdventureManager:ShowNextOperation(function()
-- 特殊处理,有剧情节点时直接播放剧情到达下一步
for _, node in ipairs(self.CurStep:GetCurrentNodes()) do
if node:GetNodeType() == XBiancaTheatreConfigs.NodeType.Movie
and not node:GetIsPlayed()
and self.CurrentChapter:GetIsReady() then
XDataCenter.MovieManager.PlayMovie(node:GetStoryId())
node:RequestEnd(function()
if XLuaUiManager.IsUiShow("UiBiancaTheatrePlayMain") and self.GameObject then
self:Refresh()
end
end)
break
end
end
end)
-- 音效滤镜界限恢复
XDataCenter.BiancaTheatreManager.StartAudioFilter()
XEventManager.AddEventListener(XEventId.EVENT_BIANCA_THEATRE_VISION_OPEN, self.RefreshVision, self)
XEventManager.AddEventListener(XEventId.EVENT_BIANCA_THEATRE_VISION_CHANGE, self.RefreshVision, self)
end
function XUiBiancaTheatrePlayMain:OnDisable()
XEventManager.RemoveEventListener(XEventId.EVENT_BIANCA_THEATRE_VISION_OPEN, self.RefreshVision, self)
XEventManager.RemoveEventListener(XEventId.EVENT_BIANCA_THEATRE_VISION_CHANGE, self.RefreshVision, self)
end
function XUiBiancaTheatrePlayMain:OnDestroy()
self.FettersPanel:Delete()
end
-- 按钮相关
--------------------------------------------------------------------------------
function XUiBiancaTheatrePlayMain:RegisterUiEvents()
self.BtnMainUi.CallBack = function() XDataCenter.BiancaTheatreManager.RunMain() end
XUiHelper.RegisterClickEvent(self, self.BtnBack, function ()
XDataCenter.BiancaTheatreManager.ResetAudioFilter()
self:Close()
end)
XUiHelper.RegisterHelpButton(self.BtnHelp, self.TheatreManager.GetHelpKey())
XUiHelper.RegisterClickEvent(self, self.BtnTeam, self.OnBtnTeamClicked)
end
--货币点击方法
function XUiBiancaTheatrePlayMain:OnBtnClick(index)
XLuaUiManager.Open("UiBiancaTheatreTips", XBiancaTheatreConfigs.TheatreInnerCoin)
end
function XUiBiancaTheatrePlayMain:OnBtnTeamClicked()
XLuaUiManager.Open("UiBiancaTheatreMainMassage")
end
--------------------------------------------------------------------------------
-- 灵视相关
--------------------------------------------------------------------------------
function XUiBiancaTheatrePlayMain:SetVisionActive(active)
self.VisionActive = active
self:RefreshVision()
end
--------------------------------------------------------------------------------
-- 节点相关
--------------------------------------------------------------------------------
function XUiBiancaTheatrePlayMain:RefreshCurrentNodes()
self.GridStage.gameObject:SetActiveEx(false)
local child
local childCount = self.PanelChooseStage.transform.childCount
for i = 0, childCount - 1 do
child = self.PanelChooseStage.transform:GetChild(i)
child.gameObject:SetActiveEx(false)
end
local button
local buttons = {}
local nodes = self.CurStep:GetCurrentNodes()
local node = nil
self.CurrentNodeItems = {}
for i = 1, #nodes do
node = nodes[i]
if i > childCount then
child = XUiHelper.Instantiate(self.GridStage, self.PanelChooseStage.transform)
else
child = self.PanelChooseStage.transform:GetChild(i - 1)
end
child.gameObject:SetActiveEx(node:GetNodeType() ~= XBiancaTheatreConfigs.NodeType.Movie)
button = child:GetComponent("XUiButton")
button:SetDisable(node:GetIsDisable())
table.insert(buttons, button)
table.insert(self.CurrentNodeItems, XUiBiancaTheatreNode.New(child, self):SetData(node))
-- 默认恢复已选中的状态
if node:GetIsSelected() then
button:SetButtonState(CS.UiButtonState.Select)
self.CurrentNodeItems[i]:PlaySelectAnim()
else
self.CurrentNodeItems[i]:StopSelectAnim()
end
end
self.PanelChooseStage:Init(buttons, function(index)
self:OnNodeClicked(index)
end)
end
function XUiBiancaTheatrePlayMain:OnNodeClicked(index)
if self.CurStep:GetCurrentNodes()[index]:GetIsDisable() then
return
end
for i, v in ipairs(self.CurrentNodeItems) do
if index == i then
self.CurrentNodeItems[i]:PlaySelectAnim()
else
self.CurrentNodeItems[i]:StopSelectAnim()
end
end
end
--------------------------------------------------------------------------------
-- Ui刷新相关
--------------------------------------------------------------------------------
function XUiBiancaTheatrePlayMain:Refresh()
local chapterId = self.CurrentChapter:GetCurrentChapterId()
self.CurStep = self.CurrentChapter:GetCurStep()
-- 当前章节名
self.TextTitle.text = self.CurrentChapter:GetTitle()
-- 完成度
self:UpdatePercent(chapterId)
-- 刷新当前节点
self:RefreshCurrentNodes()
-- 灵视
self:RefreshVision()
-- 货币特效恢复
self:RefreshItemChange()
self.DownPanel:Refresh()
self.FettersPanel:Refresh()
end
function XUiBiancaTheatrePlayMain:UpdatePercent(chapterId)
local totalCount = XBiancaTheatreConfigs.GetChapterNodeTotalCount(chapterId)
local passNodeCount = self.CurrentChapter:GetCurrentPassNodeCount()
local percent = XTool.IsNumberValid(totalCount) and math.floor(passNodeCount / totalCount * 100) or 0
if percent > 100 then
percent = 100
XLog.Warning(string.format("【肉鸽二期】当前章节的通关进度百分比超过了100章节Id%s当前通关节点数%s总节点数%s", chapterId, passNodeCount, totalCount))
end
self.TextPercent.text = string.format(XBiancaTheatreConfigs.GetClientConfig("PercentTitle"), percent)
end
function XUiBiancaTheatrePlayMain:RefreshVision()
local adventureManager = XDataCenter.BiancaTheatreManager.GetCurrentAdventureManager()
local visionValue = adventureManager:GetVisionValue() or 0
local visionId = XBiancaTheatreConfigs.GetVisionIdByValue(visionValue)
local isVisionOpen = XDataCenter.BiancaTheatreManager.CheckVisionIsOpen()
if isVisionOpen then
XDataCenter.GuideManager.CheckGuideOpen()
end
if self.EffectVision then
self.EffectVision.gameObject:LoadUiEffect(XBiancaTheatreConfigs.GetVisionUiEffectUrl(visionId))
self.EffectVision.gameObject:SetActiveEx(isVisionOpen)
end
self.PanelVisionOff:SetActive(isVisionOpen and not self.VisionActive)
self.PanelVisionOn:SetActive(isVisionOpen and self.VisionActive)
end
---货币栏位特效
function XUiBiancaTheatrePlayMain:RefreshItemChange()
for index, _ in ipairs(XDataCenter.BiancaTheatreManager.GetAdventureAssetItemIds()) do
if self["ItemChange" .. index] then
self["ItemChange" .. index]:Refresh()
end
end
end
function XUiBiancaTheatrePlayMain:InitItemChange()
self.PanelEnergyChange = XUiHelper.TryGetComponent(self.Transform, "SafeAreaContentPane/PanelEnergyChange")
self.PanelEnergyChange2 = XUiHelper.TryGetComponent(self.Transform, "SafeAreaContentPane/PanelEnergyChange2")
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
--------------------------------------------------------------------------------
return XUiBiancaTheatrePlayMain