forked from endernon/PGRData
321 lines
No EOL
13 KiB
Lua
321 lines
No EOL
13 KiB
Lua
--######################## 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 |