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

282 lines
No EOL
9.5 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.

-- v1.32 关卡介绍
--====================================================================
local XGridStageDesc = XClass(nil, "XGridStageDesc")
function XGridStageDesc:Ctor(ui, featureId, clickCB)
self.Ui = ui
self.FeatureId = featureId
self.ClickCB = clickCB
XUiHelper.InitUiClass(self, ui)
self:AddClickListener()
end
function XGridStageDesc:AddClickListener()
XUiHelper.RegisterClickEvent(self, self.RImgIcon, self.Click)
end
function XGridStageDesc:Refresh(desc, featureId)
self.FeatureId = featureId
if XTool.IsNumberValid(featureId) then
self.RImgIcon:SetRawImage(XFubenCoupleCombatConfig.GetFeatureIcon(featureId))
end
self.TxtDesc.text = desc
end
function XGridStageDesc:Click()
if self.ClickCB then
self.ClickCB(self.FeatureId)
end
end
function XGridStageDesc:SetActive(active)
self.GameObject:SetActiveEx(active)
end
--====================================================================
local XUiGridStageBuff = require("XUi/XUiFubenCoupleCombat/ChildItem/XUiGridStageBuff")
local XUiFubenCoupleCombatDetail = XLuaUiManager.Register(XLuaUi, "UiFubenCoupleCombatDetail")
function XUiFubenCoupleCombatDetail:OnAwake()
self:AutoAddListener()
self.GridBuffList = {}
self.GridBuff.gameObject:SetActiveEx(false)
end
function XUiFubenCoupleCombatDetail:OnStart(rootUi)
self.GridList = {}
self.DescList = {}
self.RootUi = rootUi
self.AssetPanel = XUiPanelAsset.New(self, self.PanelAsset, XDataCenter.ItemManager.ItemId.FreeGem, XDataCenter.ItemManager.ItemId.ActionPoint, XDataCenter.ItemManager.ItemId.Coin)
end
function XUiFubenCoupleCombatDetail:OnEnable()
self.IsOpen = true
end
function XUiFubenCoupleCombatDetail:OnDisable()
self.IsOpen = false
end
function XUiFubenCoupleCombatDetail:SetStageDetail(stageId)
self.StageId = stageId
self.StageCfg = XDataCenter.FubenManager.GetStageCfg(self.StageId)
self.StageInfo = XDataCenter.FubenManager.GetStageInfo(self.StageId)
self.StageInterInfo = XFubenCoupleCombatConfig.GetStageInfo(self.StageId)
self.IsPassed = self.StageInfo and self.StageInfo.Passed
if not self.StageInterInfo then return end
local showReset = false
local useList = XDataCenter.FubenCoupleCombatManager.GetStageUsedCharacter(self.StageId)
if useList and next(useList) then
showReset = true
end
self.BtnEnter.gameObject:SetActiveEx(not showReset)
self.BtnReset.gameObject:SetActiveEx(showReset)
self:UpdateDesc()
self:UpdateCommon()
self:UpdateRewards()
self:UpdateFeature()
--self:UpdateStageFightControl()--更新战力限制提示
end
function XUiFubenCoupleCombatDetail:InitStarPanels()
self.GridStarList = {}
for i = 1, 3 do
local ui = self.Transform:Find("SafeAreaContentPane/PanelDetail/PanelTargetList/GridStageStar" .. i)
ui.gameObject:SetActive(true)
local grid = XUiGridStageStar.New(ui)
self.GridStarList[i] = grid
end
end
function XUiFubenCoupleCombatDetail:UpdateDesc()
self.Skill.gameObject:SetActiveEx(false)
for i, desc in ipairs(self.StageInterInfo.Intro) do
local featureId = self.StageInterInfo.Feature[i]
if not self.DescList[i] then
self.DescList[i] = XGridStageDesc.New(XUiHelper.Instantiate(self.Skill, self.DescContent), featureId, function(id) self:ShowInfo(id) end)
end
self.DescList[i]:Refresh(desc, featureId)
self.DescList[i]:SetActive(true)
end
-- 隐藏多余
for i = #self.StageInterInfo.Intro + 1, #self.DescList do
self.DescList[i]:SetActive(false)
end
CS.UnityEngine.UI.LayoutRebuilder.ForceRebuildLayoutImmediate(self.DescContent)
end
function XUiFubenCoupleCombatDetail:ShowInfo(featureId)
if not XTool.IsNumberValid(featureId) then
return
end
local name = XFubenCoupleCombatConfig.GetFeatureName(featureId)
local desc = XFubenCoupleCombatConfig.GetFeatureDescription(featureId)
XUiManager.UiFubenDialogTip(name, desc)
end
function XUiFubenCoupleCombatDetail:AutoAddListener()
self.BtnEnter.CallBack = function() self:OnBtnEnterClick() end
self.BtnReset.CallBack = function() self:OnBtnResetClick() end
self.BtnCloseDetail.CallBack = function() self:OnBtnCloseDetailClick() end
end
-- auto
function XUiFubenCoupleCombatDetail:OnBtnResetClick()
XUiManager.DialogTip(nil, CSXTextManagerGetText("CoupleCombatResetStageTip"), XUiManager.DialogType.Normal, nil, function()
XDataCenter.FubenCoupleCombatManager.ResetStage(self.StageId, function()
XUiManager.TipText("CoupleCombatResetStageSucc")
self:Hide()
end)
end)
end
function XUiFubenCoupleCombatDetail:OnBtnCloseDetailClick()
self:Hide()
end
function XUiFubenCoupleCombatDetail:OnBtnEnterClick()
if self.IsPlaying then
return
end
if XDataCenter.FubenManager.CheckPreFight(self.StageCfg) then
XEventManager.DispatchEvent(XEventId.EVENT_FUBEN_CLOSE_FUBENSTAGEDETAIL)
CsXGameEventManager.Instance:Notify(XEventId.EVENT_FUBEN_COUPLECOMBAT_UPDATE)
-- 如果有第五期请务必转移到UiBattleRoleRoom
XLuaUiManager.Open("UiNewRoomSingle", self.StageId)
self:Close()
end
end
function XUiFubenCoupleCombatDetail:Hide()
if self.IsPlaying or not self.IsOpen then
return
end
self.IsPlaying = true
self:PlayAnimation("AnimEnd", handler(self, function()
if XTool.UObjIsNil(self.GameObject) then
return
end
self.IsPlaying = false
self:Close()
XEventManager.DispatchEvent(XEventId.EVENT_FUBEN_CLOSE_FUBENSTAGEDETAIL)
end))
end
function XUiFubenCoupleCombatDetail:UpdateCommon()
local stageId = self.StageId
local stageCfg = XDataCenter.FubenManager.GetStageCfg(stageId)
local stageInfo = XDataCenter.FubenManager.GetStageInfo(stageId)
self.TxtTitle.text = stageCfg.Name
self.TxtATNums.text = XDataCenter.FubenManager.GetRequireActionPoint(stageId)
local firstDrop = false
if not stageInfo.Passed then
local cfg = XDataCenter.FubenManager.GetStageLevelControl(stageId)
if cfg and cfg.FirstRewardShow > 0 or stageCfg.FirstRewardShow > 0 then
firstDrop = true
end
end
self.TxtFirstDrop.gameObject:SetActive(firstDrop)
self.TxtDrop.gameObject:SetActive(not firstDrop)
end
function XUiFubenCoupleCombatDetail:UpdateFeature()
local stageId = self.StageId
local showFightEventIds = XFubenCoupleCombatConfig.GetStageShowFightEventIds(stageId)
local gridBuff
for i, eventId in ipairs(showFightEventIds) do
gridBuff = self.GridBuffList[i]
if not gridBuff then
local grid = i == 1 and self.GridBuff or CS.UnityEngine.Object.Instantiate(self.GridBuff.gameObject, self.PanelBuff)
gridBuff = XUiGridStageBuff.New(self, grid)
self.GridBuffList[i] = gridBuff
end
gridBuff:Refresh(eventId)
gridBuff.GameObject:SetActiveEx(true)
end
local showFightEventIdsCount = #showFightEventIds
for i = showFightEventIdsCount + 1, #self.GridBuffList do
self.GridBuffList[i].GameObject:SetActiveEx(false)
end
if self.PanelBuffList then
self.PanelBuffList.gameObject:SetActiveEx(XTool.IsNumberValid(showFightEventIdsCount))
end
end
function XUiFubenCoupleCombatDetail:UpdateRewards()
self.GridCommon.gameObject:SetActiveEx(false)
local stageInfo = XDataCenter.FubenManager.GetStageInfo(self.StageId)
-- 获取显示奖励Id
local rewardId = 0
local IsFirst = false
local cfg = XDataCenter.FubenManager.GetStageLevelControl(self.StageId)
if not stageInfo.Passed then
rewardId = cfg and cfg.FirstRewardShow or self.StageCfg.FirstRewardShow
if cfg and cfg.FirstRewardShow > 0 or self.StageCfg.FirstRewardShow > 0 then
IsFirst = true
end
end
if rewardId == 0 then
rewardId = cfg and cfg.FinishRewardShow or self.StageCfg.FinishRewardShow
end
if rewardId == 0 then
for j = 1, #self.GridList do
self.GridList[j].GameObject:SetActive(false)
end
return
end
local rewards = IsFirst and XRewardManager.GetRewardList(rewardId) or XRewardManager.GetRewardListNotCount(rewardId)
if rewards then
for i, item in ipairs(rewards) do
local grid
if self.GridList[i] then
grid = self.GridList[i]
else
local ui = CS.UnityEngine.Object.Instantiate(self.GridCommon)
grid = XUiGridCommon.New(self, ui)
grid.Transform:SetParent(self.PanelDropContent, false)
self.GridList[i] = grid
end
grid:Refresh(item)
grid.GameObject:SetActive(true)
end
end
local rewardsCount = 0
if rewards then
rewardsCount = #rewards
end
for j = 1, #self.GridList do
if j > rewardsCount then
self.GridList[j].GameObject:SetActive(false)
end
end
end
function XUiFubenCoupleCombatDetail:UpdateStageFightControl()
local stageInfo = XDataCenter.FubenManager.GetStageInfo(self.StageId)
if self.StageFightControl == nil then
self.StageFightControl = XUiStageFightControl.New(self.PanelStageFightControl, self.StageCfg.FightControlId)
end
if not stageInfo.Passed and stageInfo.Unlock then
self.StageFightControl.GameObject:SetActive(true)
self.StageFightControl:UpdateInfo(self.StageCfg.FightControlId)
else
self.StageFightControl.GameObject:SetActive(false)
end
end