--大秘境层结算界面 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