forked from endernon/PGRData
273 lines
9 KiB
Lua
273 lines
9 KiB
Lua
|
local CSXTextManagerGetText = CS.XTextManager.GetText
|
||
|
|
||
|
XUiPanelMatch = XClass(nil, "XUiPanelMatch")
|
||
|
|
||
|
function XUiPanelMatch:Ctor(ui, parent)
|
||
|
self.GameObject = ui.gameObject
|
||
|
self.Transform = ui.transform
|
||
|
XTool.InitUiObject(self)
|
||
|
|
||
|
XUiHelper.RegisterClickEvent(self, self.BtnInfo, self.OnBtnInfoClick)
|
||
|
XUiHelper.RegisterClickEvent(self, self.BtnCreateRoom, self.OnBtnCreateRoomClick)
|
||
|
XUiHelper.RegisterClickEvent(self, self.BtnMatch, self.OnBtnMatchClick)
|
||
|
XUiHelper.RegisterClickEvent(self, self.BtnMatching, self.OnBtnMatchingClick)
|
||
|
XUiHelper.RegisterClickEvent(self, self.BtnBossInfo, self.OnBtnBossInfoClick)
|
||
|
|
||
|
self.ArmsTips = {
|
||
|
self.RImgArms1,
|
||
|
self.RImgArms2,
|
||
|
self.RImgArms3,
|
||
|
}
|
||
|
self.Parent = parent
|
||
|
self.GridList = {}
|
||
|
self.GridCommon.gameObject:SetActive(false)
|
||
|
self.BtnMatching.interactable = false
|
||
|
self.StageDescs = {}
|
||
|
self.TxtDes.text = ""
|
||
|
end
|
||
|
|
||
|
function XUiPanelMatch:OnBtnInfoClick()
|
||
|
local itemId = XDataCenter.FubenManager.GetFlopConsumeItemId(self.SectionCfg.StageId)
|
||
|
local item = XDataCenter.ItemManager.GetItem(itemId)
|
||
|
XLuaUiManager.Open("UiTip", item)
|
||
|
end
|
||
|
|
||
|
function XUiPanelMatch:Refresh(sectionCfg)
|
||
|
self:ResetState()
|
||
|
sectionCfg = sectionCfg or self.SectionCfg
|
||
|
local stageCfg = XDataCenter.FubenManager.GetStageCfg(sectionCfg.StageId)
|
||
|
self.SectionCfg = sectionCfg
|
||
|
self.CurStageCfg = stageCfg
|
||
|
self.TxtBossName.text = stageCfg.Name
|
||
|
self.TxtDesc.text = stageCfg.Description
|
||
|
local itemId = XDataCenter.FubenManager.GetFlopConsumeItemId(sectionCfg.StageId)
|
||
|
local item = XDataCenter.ItemManager.GetItem(itemId)
|
||
|
local count = 0
|
||
|
if item ~= nil and item:GetCount() >= 0 then
|
||
|
count = item:GetCount()
|
||
|
end
|
||
|
if itemId > 0 then
|
||
|
self.PanelScavenger.gameObject:SetActive(true)
|
||
|
local icon = XDataCenter.ItemManager.GetItemIcon(itemId)
|
||
|
self.RImgIcon:SetRawImage(icon)
|
||
|
self.TxtCount.text = count
|
||
|
self.TxtATNums.text = XDataCenter.FubenManager.GetStageActionPointConsume(sectionCfg.StageId)
|
||
|
else
|
||
|
self.PanelScavenger.gameObject:SetActive(false)
|
||
|
end
|
||
|
|
||
|
local leastPlayer = stageCfg.OnlinePlayerLeast <= 0 and 1 or stageCfg.OnlinePlayerLeast
|
||
|
self.TxtPeople.text = leastPlayer
|
||
|
|
||
|
for i, _ in ipairs(self.StageDescs) do
|
||
|
if self.StageDescs[i] then
|
||
|
self.StageDescs[i].gameObject:SetActive(false)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
for i, v in ipairs(sectionCfg.Description) do
|
||
|
local textTemp
|
||
|
|
||
|
if self.StageDescs[i] then
|
||
|
textTemp = self.StageDescs[i]
|
||
|
|
||
|
else
|
||
|
local obj = CS.UnityEngine.Object.Instantiate(self.TxtDes.gameObject)
|
||
|
obj.transform:SetParent(self.PanelLineupTips, false)
|
||
|
textTemp = obj:GetComponent("Text")
|
||
|
self.StageDescs[i] = textTemp
|
||
|
end
|
||
|
textTemp.text = v
|
||
|
textTemp.gameObject:SetActive(true)
|
||
|
end
|
||
|
|
||
|
self:UpdateArmsTips()
|
||
|
self:UpdateRewards()
|
||
|
end
|
||
|
|
||
|
function XUiPanelMatch:UpdateArmsTips()
|
||
|
local stage = self.CurStageCfg
|
||
|
|
||
|
for index = 1, 3 do
|
||
|
local arms = stage.NeedJobType[index]
|
||
|
if arms then
|
||
|
self.ArmsTips[index].gameObject:SetActive(true)
|
||
|
self.ArmsTips[index]:SetRawImage(XCharacterConfigs.GetNpcTypeIconTranspose(arms))
|
||
|
else
|
||
|
self.ArmsTips[index].gameObject:SetActive(false)
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function XUiPanelMatch:UpdateRewards()
|
||
|
local stage = self.CurStageCfg
|
||
|
local stageInfo = XDataCenter.FubenManager.GetStageInfo(stage.StageId)
|
||
|
|
||
|
-- 是否首通奖励显示
|
||
|
local firstDrop = false
|
||
|
if not stageInfo.Passed then
|
||
|
local cfg = XDataCenter.FubenManager.GetStageLevelControl(stage.StageId)
|
||
|
if cfg and cfg.FirstRewardShow > 0 or stage.FirstRewardShow > 0 then
|
||
|
firstDrop = true
|
||
|
end
|
||
|
end
|
||
|
self.TxtFirstDrop.gameObject:SetActive(firstDrop)
|
||
|
self.TxtDrop.gameObject:SetActive(not firstDrop)
|
||
|
|
||
|
-- 获取显示奖励Id
|
||
|
local rewardId = 0
|
||
|
local cfg = XDataCenter.FubenManager.GetStageLevelControl(stage.StageId)
|
||
|
if not stageInfo.Passed then
|
||
|
rewardId = cfg and cfg.FirstRewardShow or stage.FirstRewardShow
|
||
|
end
|
||
|
if rewardId == 0 then
|
||
|
rewardId = cfg and cfg.FinishRewardShow or stage.FinishRewardShow
|
||
|
end
|
||
|
if rewardId == 0 then
|
||
|
for j = 1, #self.GridList do
|
||
|
self.GridList[j].GameObject:SetActive(false)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
local rewards = {}
|
||
|
if rewardId > 0 then
|
||
|
rewards = XRewardManager.GetRewardList(rewardId)
|
||
|
end
|
||
|
|
||
|
--显示的奖励
|
||
|
if XDataCenter.FubenManager.CheckCanFlop(stage.StageId) then
|
||
|
local showRewards = XRewardManager.GetRewardList(XDataCenter.FubenManager.GetFlopShowId(stage.StageId))
|
||
|
rewards = XTool.MergeArray(showRewards, rewards)
|
||
|
end
|
||
|
|
||
|
--关卡掉落
|
||
|
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.Parent, ui)
|
||
|
grid.Transform:SetParent(self.PanelDropContent, false)
|
||
|
self.GridList[i] = grid
|
||
|
end
|
||
|
grid:Refresh(item)
|
||
|
grid.GameObject:SetActive(true)
|
||
|
end
|
||
|
|
||
|
for j = 1, #self.GridList do
|
||
|
if j > #rewards then
|
||
|
self.GridList[j].GameObject:SetActive(false)
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function XUiPanelMatch:OnBtnBossInfoClick()
|
||
|
self.Parent:OnShowBossInfo(self.SectionCfg)
|
||
|
self:Refresh(self.SectionCfg)
|
||
|
end
|
||
|
|
||
|
|
||
|
function XUiPanelMatch:OnBtnMatchingClick()
|
||
|
|
||
|
end
|
||
|
|
||
|
function XUiPanelMatch:OnBtnCreateRoomClick()
|
||
|
if XDataCenter.FubenBossOnlineManager.CheckOnlineBossTimeOut() then
|
||
|
XUiManager.TipMsg(CS.XTextManager.GetText("OnlineBossTimeOut"))
|
||
|
return
|
||
|
end
|
||
|
|
||
|
local enterFunc = function()
|
||
|
if XDataCenter.FubenManager.CheckCanFlop(self.CurStageCfg.StageId) then
|
||
|
XDataCenter.FubenManager.RequestCreateRoom(self.CurStageCfg)
|
||
|
else
|
||
|
XUiManager.DialogTip(CS.XTextManager.GetText("TipTitle"), CS.XTextManager.GetText("BossOnlineConsumeTips"), XUiManager.DialogType.Normal, nil, function()
|
||
|
XDataCenter.FubenManager.RequestCreateRoom(self.CurStageCfg)
|
||
|
end)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
local pass, requireAbility = self:CheckLevelControl()
|
||
|
if not pass then
|
||
|
local title = CSXTextManagerGetText("OnlineBossEnterConfirmTitle")
|
||
|
local content = CSXTextManagerGetText("OnlineBossEnterConfirmContent", requireAbility)
|
||
|
XUiManager.DialogTip(title, content, XUiManager.DialogType.Normal, nil, enterFunc)
|
||
|
else
|
||
|
enterFunc()
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function XUiPanelMatch:OnBtnMatchClick()
|
||
|
if XDataCenter.FubenBossOnlineManager.CheckOnlineBossTimeOut() then
|
||
|
XUiManager.TipMsg(CS.XTextManager.GetText("OnlineBossTimeOut"))
|
||
|
return
|
||
|
end
|
||
|
|
||
|
if XDataCenter.RoomManager.Matching then
|
||
|
return
|
||
|
end
|
||
|
|
||
|
local enterFunc = function()
|
||
|
if XDataCenter.FubenManager.CheckCanFlop(self.CurStageCfg.StageId) then
|
||
|
self:Match()
|
||
|
else
|
||
|
XUiManager.DialogTip(CS.XTextManager.GetText("TipTitle"), CS.XTextManager.GetText("BossOnlineConsumeTips"), XUiManager.DialogType.Normal, nil, handler(self, self.Match))
|
||
|
end
|
||
|
end
|
||
|
|
||
|
local pass, requireAbility = self:CheckLevelControl()
|
||
|
if not pass then
|
||
|
local title = CSXTextManagerGetText("OnlineBossEnterConfirmTitle")
|
||
|
local content = CSXTextManagerGetText("OnlineBossEnterConfirmContent", requireAbility)
|
||
|
XUiManager.DialogTip(title, content, XUiManager.DialogType.Normal, nil, enterFunc)
|
||
|
else
|
||
|
enterFunc()
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function XUiPanelMatch:Match()
|
||
|
XDataCenter.FubenManager.RequestMatchRoom(self.CurStageCfg, function()--匹配房间
|
||
|
self:RefreshMatching()
|
||
|
self.BtnCreateRoom.interactable = false
|
||
|
self.BtnMatch.gameObject:SetActive(false)
|
||
|
self.BtnMatching.gameObject:SetActive(true)
|
||
|
end)
|
||
|
end
|
||
|
|
||
|
-- 检测超频-普通难度战力限制
|
||
|
function XUiPanelMatch:CheckLevelControl()
|
||
|
if self.Parent.CurDifficult ~= XDataCenter.FubenBossOnlineManager.OnlineBossDifficultLevel.NightMare then
|
||
|
return true
|
||
|
end
|
||
|
|
||
|
local levelControl = XDataCenter.FubenManager.GetStageMultiplayerLevelControl(self.CurStageCfg.StageId, 1)
|
||
|
local requireAbility = levelControl and levelControl.RecommendAbility
|
||
|
if not requireAbility then
|
||
|
return true
|
||
|
end
|
||
|
|
||
|
local maxAbility = XDataCenter.CharacterManager.GetMaxOwnCharacterAbility()
|
||
|
return maxAbility >= requireAbility, requireAbility
|
||
|
end
|
||
|
|
||
|
function XUiPanelMatch:RefreshMatching()
|
||
|
if XDataCenter.RoomManager.Matching then
|
||
|
XLuaUiManager.Open("UiOnLineMatching", self.CurStageCfg)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function XUiPanelMatch:OnCancelMatch()
|
||
|
self.BtnCreateRoom.interactable = true
|
||
|
self.BtnMatch.gameObject:SetActive(true)
|
||
|
self.BtnMatching.gameObject:SetActive(false)
|
||
|
end
|
||
|
|
||
|
|
||
|
function XUiPanelMatch:ResetState()
|
||
|
self.BtnMatch.gameObject:SetActive(true)
|
||
|
self.BtnMatching.gameObject:SetActive(false)
|
||
|
self.BtnCreateRoom.interactable = true
|
||
|
end
|
||
|
|
||
|
return XUiPanelMatch
|