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

254 lines
No EOL
10 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.

--大秘境层结算界面
local XUiRiftSettleWin = XLuaUiManager.Register(XLuaUi, "UiRiftSettleWin")
local XUiGridRiftSettlePlugin = require("XUi/XUiRift/Grid/XUiGridRiftSettlePlugin")
function XUiRiftSettleWin:OnAwake()
self:InitButton()
self:InitDynamicTable()
self.GridRewardList = {}
end
function XUiRiftSettleWin:InitButton()
self:RegisterClickEvent(self.BtnClose, self.OnBtnCloseClick)
self:RegisterClickEvent(self.BtnAgain, self.OnBtnAgainClick)
self:RegisterClickEvent(self.BtnNext, self.OnBtnNextClick)
self:RegisterClickEvent(self.BtnJump, self.OnBtnJumpClick)
self:RegisterClickEvent(self.BtnMopup, self.OnBtnMopupClick) -- 派遣(扫荡)
end
function XUiRiftSettleWin:InitDynamicTable()
-- 选择作战层的滑动列表
self.DynamicTable = XDynamicTableNormal.New(self.PanelPluginScrollView)
self.DynamicTable:SetProxy(XUiGridRiftSettlePlugin, self)
self.DynamicTable:SetDelegate(self)
end
function XUiRiftSettleWin:OnStart(layerId, riftSettleResult, ignoreNextBtn, isMopUp)
-- 只有正常战斗流程打完作战层才会有settleData
self.Data = riftSettleResult
self.LayerId = layerId
self.IgnoreNextBtn = ignoreNextBtn
self.IsMopUp = isMopUp
end
function XUiRiftSettleWin:OnEnable()
self:Refresh()
-- 打开层结算界面,说明层作战结束,清除关卡数据, 在刷新ui之后清除因为清除数据要在数据展示之后
XDataCenter.RiftManager.ClearStageGroupRelationshipChain()
end
function XUiRiftSettleWin:Refresh()
local riftSettleResult = self.Data
local currXFightLayer = XDataCenter.RiftManager.GetEntityFightLayerById(self.LayerId)
self.CurrXFightLayer = currXFightLayer
self.TxtName.text = CS.XTextManager.GetText("RiftDepthSettle", currXFightLayer:GetId())
self.TxtStageTime.text = XUiHelper.GetTime(math.floor(currXFightLayer:GetTotalStagePassTime()))
local isFirst = nil
if riftSettleResult then
-- 跃升相关
local isZoom = currXFightLayer:GetType() == XRiftConfig.LayerType.Zoom
self.PanelPointHistory.gameObject:SetActiveEx(isZoom)
self.PanelPointNow.gameObject:SetActiveEx(isZoom)
if isZoom then
self.TxtPointHistory.text = currXFightLayer:GetId()
local jumpToLayerId = currXFightLayer:GetId() + riftSettleResult.JumpLayerRecord.AddOrderMax
self.TxtPointNow.text = jumpToLayerId
self.JumpToLayerId = jumpToLayerId
end
-- 首通奖励
isFirst = riftSettleResult.RewardedLayerIds and riftSettleResult.RewardedLayerIds[1]
if isFirst then
local rewardId = currXFightLayer:GetConfig().RewardId
local rewards = {}
if rewardId > 0 then
rewards = XRewardManager.GetRewardList(rewardId)
end
if rewards then
for i, item in ipairs(rewards) do
local grid
if self.GridRewardList[i] then
grid = self.GridRewardList[i]
else
local ui = CS.UnityEngine.Object.Instantiate(self.GridCommonFirst, self.GridCommonFirst.parent)
grid = XUiGridCommon.New(self, ui)
self.GridRewardList[i] = grid
end
grid:Refresh(item)
grid.GameObject:SetActive(true)
end
end
self.GridCommonFirst.gameObject:SetActive(false)
end
end
self.PanelFirstPass.gameObject:SetActive(isFirst)
if isFirst then -- 设置首通提示Trigger
XDataCenter.RiftManager.SetFirstPassChapterTrigger(currXFightLayer:GetId())
end
-- 金币
self.GridCommonPass:Find("PanelTxt/TxtCount"):GetComponent("Text").text = currXFightLayer:GetConfig().CoinCount
local gridCommonPass = XUiGridCommon.New(self, self.GridCommonPass)
local data =
{
Count = currXFightLayer:GetConfig().CoinCount,
TemplateId = XDataCenter.ItemManager.ItemId.RiftGold,
RewardType = 1
}
gridCommonPass:Refresh(data)
-- 分解插件
self:RefreshDynamicTable(currXFightLayer)
self:ShowFuncUnlockPanel()
-- 底部按钮状态
local nextLayerId = self.CurrXFightLayer:GetId() + 1
local nextFightLayer = XDataCenter.RiftManager.GetEntityFightLayerById(nextLayerId)
self.NextXFightLayer = nextFightLayer
local isShowBtnNext = nextFightLayer and not nextFightLayer:CheckHasLock() and not self.CurrXFightLayer:CheckIsLastLayerInChapter()
self.BtnNext.gameObject:SetActiveEx(isShowBtnNext and not self.JumpToLayerId and not self.IgnoreNextBtn)
self.BtnJump.gameObject:SetActiveEx(self.JumpToLayerId and not self.IgnoreNextBtn)
self.BtnAgain.gameObject:SetActiveEx(not self.IsMopUp)
self.BtnMopup.gameObject:SetActiveEx(self.IsMopUp)
self.BtnMopup:SetNameByGroup(0, CS.XTextManager.GetText("RiftMopup", XDataCenter.RiftManager.GetSweepLeftTimes(), XDataCenter.RiftManager.GetCurrentConfig().DailySweepTimes))
end
function XUiRiftSettleWin:RefreshDynamicTable(currXFightLayer)
self.RecordDropPluginList = currXFightLayer:GetRecordPluginDrop()
self.DynamicTable:SetDataSource(self.RecordDropPluginList)
self.DynamicTable:ReloadDataSync(1)
end
function XUiRiftSettleWin:OnDynamicTableEvent(event, index, grid)
if event == DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_ATINDEX then
grid:Refresh(self.RecordDropPluginList[index], index)
end
end
-- 显示功能解锁界面
function XUiRiftSettleWin:ShowFuncUnlockPanel()
if self.Data == nil or self.Data.RewardedLayerIds == nil or #self.Data.RewardedLayerIds == 0 then
return
end
local showItemDic = {}
-- 通关层解锁
local funcUnlockCfgs = XRiftConfig.GetAllConfigs(XRiftConfig.TableKey.RiftFuncUnlock)
for _, unlockCfg in ipairs(funcUnlockCfgs) do
local isUnlock = XConditionManager.CheckCondition(unlockCfg.Condition)
if isUnlock then
local conditionCfg = XConditionManager.GetConditionTemplate(unlockCfg.Condition)
local layerId = conditionCfg.Params[2]
for _, passLayerId in ipairs(self.Data.RewardedLayerIds) do
if passLayerId == layerId then
local itemId = unlockCfg.ItemId
if showItemDic[itemId] then
showItemDic[itemId].Count = showItemDic[itemId].Count + 1
else
showItemDic[itemId] = { TemplateId = itemId, Count = 1 }
end
end
end
end
end
-- 服务器下发奖励道具
for _, layerId in pairs(self.Data.RewardedLayerIds) do
local xFightLayer = XDataCenter.RiftManager.GetEntityFightLayerById(layerId)
local rewardId = xFightLayer:GetConfig().RewardId
local rewards = XRewardManager.GetRewardList(rewardId)
if rewards then
for _, item in ipairs(rewards) do
if item.TemplateId == XDataCenter.ItemManager.ItemId.RiftLoadLimit or item.TemplateId == XDataCenter.ItemManager.ItemId.RiftAttributeLimit then
local itemId = item.TemplateId
if showItemDic[itemId] then
showItemDic[itemId].Count = showItemDic[itemId].Count + item.Count
else
showItemDic[itemId] = { TemplateId = itemId, Count = item.Count }
end
end
end
end
end
if next(showItemDic) then
local showItemList = {}
for _, item in pairs(showItemDic) do
table.insert(showItemList, item)
end
XLuaUiManager.Open("UiRiftFuncUnlockTips", showItemList)
end
end
function XUiRiftSettleWin:OnBtnAgainClick()
local doFun = function ()
if self.CurrXFightLayer:CheckIsOwnFighting() then
XLog.Error("数据错误,没有层结算完毕就再次请求刷新作战层数据 ")
return
end
CS.XFight.ExitForClient(true)
-- 直接再进入战斗关闭界面会在退出战斗前通过remove移除
XDataCenter.RiftManager.RiftStartLayerRequest(self.CurrXFightLayer:GetId(), function ()
local firstStageGroup = self.CurrXFightLayer:GetAllStageGroups()[1]
XDataCenter.RiftManager.SetCurrSelectRiftStage(firstStageGroup)
XDataCenter.RiftManager.EnterFight()
end)
end
local xChapter = self.CurrXFightLayer:GetParent()
XDataCenter.RiftManager.CheckDayTipAndDoFun(xChapter, doFun)
end
function XUiRiftSettleWin:OnBtnNextClick()
if self.NextXFightLayer and not self.NextXFightLayer:CheckHasLock() then
XDataCenter.RiftManager.SetNewLayerTrigger(self.NextXFightLayer:GetId()) -- 设置自动定位层级的trigger
end
self:Close()
end
function XUiRiftSettleWin:OnBtnJumpClick()
if self.JumpToLayerId then
XDataCenter.RiftManager.SetNewLayerTrigger(self.JumpToLayerId) -- 设置自动定位层级的trigger
end
self:Close()
end
function XUiRiftSettleWin:OnBtnCloseClick()
self:Close()
end
function XUiRiftSettleWin:OnBtnMopupClick()
if XDataCenter.RiftManager.GetSweepLeftTimes() <= 0 then
XUiManager.TipError(CS.XTextManager.GetText("RiftSweepTimesLimit"))
return
end
if not self.CurrXFightLayer:CheckHasPassed() then
XUiManager.TipError(CS.XTextManager.GetText("RiftSweepFirstPassLimit"))
return
end
if self.CurrXFightLayer:CheckIsOwnFighting() then
XUiManager.TipError(CS.XTextManager.GetText("RiftSweepDataLimit"))
return
end
local title = CS.XTextManager.GetText("TipTitle")
local content = CS.XTextManager.GetText("RiftSweepConfirm")
local sureCallback = function ()
self:Close()
-- 必须要先进入战斗才能再次扫荡
XDataCenter.RiftManager.RiftStartLayerRequest(self.CurrXFightLayer:GetId(), function ()
XDataCenter.RiftManager.RiftSweepLayerRequest(self.CurrXFightLayer:GetId())
end)
end
XLuaUiManager.Open("UiDialog", title, content, XUiManager.DialogType.Normal, nil, sureCallback)
end
function XUiRiftSettleWin:OnDestroy()
CS.XFight.ExitForClient(true)
end
return XUiRiftSettleWin