PGRData/Script/matrix/xui/xuitheatre/XUiTheatrePlayMain.lua

321 lines
No EOL
13 KiB
Lua
Raw Permalink 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.

--######################## XUiTheatreNode ########################
local XUiTheatreNode = XClass(nil, "XUiTheatreNode")
local NodeRewardMaxShowCount = 1
function XUiTheatreNode:Ctor(ui, rootUi)
XUiHelper.InitUiClass(self, ui)
self.Node = nil
self.RootUi = rootUi
XUiHelper.RegisterClickEvent(self, self.BtnConfirm, self.OnBtnComfirmClicked)
end
-- node : XANode
function XUiTheatreNode:SetData(node)
self.Node = node
-- 类型图标
self.RImgIcon:SetRawImage(node:GetNodeTypeIcon())
-- 节点显示名字
self.TxtName.text = node:GetNodeTypeName()
local nodeType = node:GetNodeType()
local isBattleType = node:GetIsBattle()
self.TxtPowerNumber.gameObject:SetActiveEx(isBattleType)
self.TxtTeamNumber.gameObject:SetActiveEx(isBattleType)
self.PanelPower.gameObject:SetActiveEx(isBattleType)
self.ImgWarning.gameObject:SetActiveEx(isBattleType)
if isBattleType then
local suggestPower = node:GetSuggestPower()
-- 战力警告
self.ImgWarning.gameObject:SetActiveEx(
suggestPower > XDataCenter.TheatreManager.GetCurrentAdventureManager():GeRoleAveragePower())
-- 更新推荐战力
self.TxtPowerNumber.text = suggestPower
-- 多队伍数量
self.TxtTeamNumber.text = XUiHelper.GetText("TheatreTeamCountTip", node:GetTeamCount())
end
-- 节点详情
local simpleDesc = node:GetNodeTypeDesc()
self.TxtDetail.gameObject:SetActiveEx(simpleDesc ~= nil)
if simpleDesc ~= nil then
self.TxtDetail.text = simpleDesc
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 uiObject = child:GetComponent("UiObject")
-- 选择技能和升级特殊处理
if showData.rewardType == XTheatreConfigs.AdventureRewardType.SelectSkill
or showData.rewardType == XTheatreConfigs.AdventureRewardType.LevelUp then
XUiGridCommon.New(self.RootUi, child):Refresh(1) -- hack 避免重复创建导致错误状态
uiObject:GetObject("RImgIcon"):SetRawImage(showData.showIcon)
XUiHelper.RegisterClickEvent(self, uiObject:GetObject("BtnClick"), function()
self:OnRewardClicked(showData)
end)
if uiObject:GetObject("ImgQuality") then
uiObject:GetObject("ImgQuality").gameObject:SetActiveEx(false)
end
else -- 好感度,装修点,奖励
local itemId = nil
local needCustomClick = false
if showData.rewardType == XTheatreConfigs.AdventureRewardType.PowerFavor then
itemId = XTheatreConfigs.TheatreFavorCoin
elseif showData.rewardType == XTheatreConfigs.AdventureRewardType.Decoration then
itemId = XTheatreConfigs.TheatreDecorationCoin
elseif showData.rewardType == XTheatreConfigs.AdventureRewardType.RewardId then
itemId = XEntityHelper.GetRewardItemId(showData.rewardId)
needCustomClick = true
end
XUiGridCommon.New(self.RootUi, child):Refresh(itemId)
if needCustomClick then
XUiHelper.RegisterClickEvent(self, uiObject:GetObject("BtnClick"), function()
self:OnRewardClicked(showData)
end)
end
end
end
return self
end
function XUiTheatreNode:OnRewardClicked(data)
if data.rewardType == XTheatreConfigs.AdventureRewardType.RewardId then
XUiManager.OpenUiTipRewardByRewardId(data.rewardId)
return
end
local configNname
if data.rewardType == XTheatreConfigs.AdventureRewardType.SelectSkill then
configNname = "SelectSkillDetail"
elseif data.rewardType == XTheatreConfigs.AdventureRewardType.LevelUp then
configNname = "LevelUpDetail"
end
local name = XTheatreConfigs.GetRewardTypeName(data.rewardType, data.powerId)
local icon = XTheatreConfigs.GetClientConfig(configNname, 1)
local title = XTheatreConfigs.GetClientConfig(configNname, 2)
local content = XTheatreConfigs.GetClientConfig(configNname, 3)
if data.rewardType == XTheatreConfigs.AdventureRewardType.SelectSkill then
icon = string.format(icon, XTheatreConfigs.GetClientConfig("SelectSkillDetailIcon", data.powerId))
content = string.format(content, XTheatreConfigs.GetClientConfig("SelectSkillDetailDesc", data.powerId))
end
XLuaUiManager.Open("UiTheatreGroupTip", icon, name, title, content
, data.rewardType == XTheatreConfigs.AdventureRewardType.SelectSkill)
end
function XUiTheatreNode:OnBtnComfirmClicked()
self.Node:Trigger()
end
function XUiTheatreNode:PlaySelectAnim()
self.AnimSelect:Play()
end
function XUiTheatreNode:StopSelectAnim()
self.AnimSelect:Stop()
self.AnimSelect:Evaluate()
end
--######################## XUiTheatrePlayMain ########################
local CORE_SKILL_COUNT = 4
local XUiTheatreSkillGrid = require("XUi/XUiTheatre/XUiTheatreSkillGrid")
local XUiTheatrePlayMain = XLuaUiManager.Register(XLuaUi, "UiTheatrePlayMain")
function XUiTheatrePlayMain:OnAwake()
self.TheatreManager = XDataCenter.TheatreManager
self.AdventureManager = self.TheatreManager.GetCurrentAdventureManager()
self.CurrentChapter = self.AdventureManager:GetCurrentChapter()
-- 注册资源面板
XUiHelper.NewPanelActivityAsset(self.TheatreManager.GetAdventureAssetItemIds(), self.PanelAssetitems)
self:RegisterUiEvents()
-- 当前节点 XUiTheatreNode
self.CurrentNodeItems = {}
self.BuffGrids = {}
self.TxtNone = XUiHelper.TryGetComponent(self.Transform, "SafeAreaContentPane/PanelDown/PanelKeepsake/TxtNone")
end
function XUiTheatrePlayMain:OnEnable()
self.Super.OnEnable(self)
self:Refresh()
-- 处理下一个操作
self.AdventureManager:ShowNextOperation(function()
-- 特殊处理,有剧情节点时直接播放剧情到达下一步
for _, node in ipairs(self.CurrentChapter:GetCurrentNodes()) do
if node:GetNodeType() == XTheatreConfigs.NodeType.Movie
and not node:GetIsPlayed()
and self.CurrentChapter:GetIsReady() then
XDataCenter.MovieManager.PlayMovie(node:GetStoryId())
node:RequestEnd(function()
if XLuaUiManager.IsUiShow("UiTheatrePlayMain") and self.GameObject then
self:Refresh()
end
end)
break
end
end
end)
end
function XUiTheatrePlayMain:OnDisable()
XDataCenter.TheatreManager.SetSceneActive(false)
end
--######################## 私有方法 ########################
function XUiTheatrePlayMain:RegisterUiEvents()
self.BtnMainUi.CallBack = function() XLuaUiManager.RunMain() end
XUiHelper.RegisterClickEvent(self, self.BtnBack, self.Close)
XUiHelper.RegisterHelpButton(self.BtnHelp, self.TheatreManager.GetHelpKey())
XUiHelper.RegisterHelpButton(self.BtnReopenTip, self.TheatreManager.GetReopenHelpKey())
XUiHelper.RegisterClickEvent(self, self.BtnTeam, self.OnBtnTeamClicked)
XUiHelper.RegisterClickEvent(self, self.BtnBuff, self.OnBtnBuffClicked)
XUiHelper.RegisterClickEvent(self, self.BtnKeepsake, self.OnBtnKeepsakeClicked)
end
function XUiTheatrePlayMain:OnBtnTeamClicked()
XLuaUiManager.Open("UiTheatreMainMassage")
end
function XUiTheatrePlayMain:OnBtnBuffClicked()
XLuaUiManager.Open("UiTheatreFieldGuide")
end
function XUiTheatrePlayMain:OnBtnKeepsakeClicked()
local defaultTabIndex = XTheatreConfigs.FieldGuideIds.Item
XLuaUiManager.Open("UiTheatreFieldGuide", nil, nil, defaultTabIndex)
end
function XUiTheatrePlayMain: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.CurrentChapter: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() ~= XTheatreConfigs.NodeType.Movie)
button = child:GetComponent("XUiButton")
button:SetDisable(node:GetIsDisable())
table.insert(buttons, button)
table.insert(self.CurrentNodeItems, XUiTheatreNode.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 XUiTheatrePlayMain:RefreshCoreSkills()
local coreSkills, additionalSkillCount = self.AdventureManager:GetCoreSkills()
for i = 1, CORE_SKILL_COUNT do
local grid = self.BuffGrids[i]
if not grid then
local gridObj = i == 1 and self.GridBuff or XUiHelper.Instantiate(self.GridBuff, self.PanelBuffList)
grid = XUiTheatreSkillGrid.New(gridObj)
self.BuffGrids[i] = grid
end
local data = self.AdventureManager:GetCoreSkillByPos(i)
grid:SetData(data, nil, i)
if not data then
grid:SetLevel(1) --未激活的技能显示等级1
end
end
self.TxtAdditionSkillCount.text = additionalSkillCount
end
function XUiTheatrePlayMain:OnNodeClicked(index)
if self.CurrentChapter: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
function XUiTheatrePlayMain:UpdateSceneUrl()
XDataCenter.TheatreManager.UpdateSceneUrl(self)
XScheduleManager.ScheduleOnce(function()
XDataCenter.TheatreManager.ShowRoleModelCamera(self, "FarCameraPlayMain", "NearCameraPlayMain", true)
end, 1)
end
function XUiTheatrePlayMain:Refresh()
-- 标题
self.TxtTitle.text = self.CurrentChapter:GetTitle()
-- 选择难度的图标
self.RImgDifficultyIcon:SetRawImage(
self.AdventureManager:GetCurrentDifficulty():GetTitleIcon())
-- 当前可重开的次数
self.TxtReopenCount.text = self.AdventureManager:GetPlayableCount()
-- 刷新当前节点
self:RefreshCurrentNodes()
-- 成员数量
self.TxtRoleNumber.text = #self.AdventureManager:GetCurrentRoles(false)
-- 成员等级
self.TxtRoleLevel.text = self.AdventureManager:GetCurrentLevel()
-- 成员平均战力
self.TxtRolePower.text = self.AdventureManager:GeRoleAveragePower()
-- 刷新信物
local currentToken = self.AdventureManager:GetCurrentToken()
self.GridToken.gameObject:SetActiveEx(currentToken ~= nil)
self.TxtNone.gameObject:SetActiveEx(currentToken == nil)
if currentToken then
self.RImgTokenIcon:SetRawImage(currentToken:GetIcon())
self.ImgTokenQuality:SetSprite(currentToken:GetItemQualityIcon())
end
-- 刷新核心技能
self:RefreshCoreSkills()
XDataCenter.TheatreManager.CheckUnlockOwnRole()
-- 更新当前通过的节点数量
if self.TxtCurrentPassNodeCount then
self.TxtCurrentPassNodeCount.text = self.CurrentChapter:GetCurrentPassNodeCount()
end
--背景图片
local chapterId = self.CurrentChapter:GetCurrentChapterId()
if self.RImgBgA then
local bgA = XTheatreConfigs.GetChapterBgA(chapterId)
self.RImgBgA:SetRawImage(bgA)
end
if self.RImgBgB then
local bgB = XTheatreConfigs.GetChapterBgB(chapterId)
self.RImgBgB:SetRawImage(bgB)
end
self:UpdateSceneUrl()
XDataCenter.TheatreManager.SetSceneActive(true)
end
return XUiTheatrePlayMain