PGRData/Script/matrix/xui/xuimultidim/XUiMultiDimMainDetail.lua

302 lines
12 KiB
Lua
Raw Normal View History

local XUiMultiDimMainDetail = XClass(nil, "XUiMultiDimMainDetail")
function XUiMultiDimMainDetail:Ctor(ui, rootUi)
self.GameObject = ui.gameObject
self.Transform = ui.transform
self.RootUi = rootUi
XTool.InitUiObject(self)
self:RegisterUiEvents()
self:InitView()
self.RewardGridList = {}
self.CareerGridList = {}
end
function XUiMultiDimMainDetail:InitView()
self.BtnMatching.gameObject:SetActiveEx(false)
self.Grid256New.gameObject:SetActiveEx(false)
XEventManager.AddEventListener(XEventId.EVENT_ROOM_ENTER_ROOM, self.OnCancelMatch, self)
XEventManager.AddEventListener(XEventId.EVENT_ROOM_CANCEL_MATCH, self.OnCancelMatch, self)
XEventManager.AddEventListener(XEventId.EVENT_ROOM_MATCH_PLAYERS, self.OnMatchPlayers, self)
end
function XUiMultiDimMainDetail:OnDestroy()
XEventManager.RemoveEventListener(XEventId.EVENT_ROOM_ENTER_ROOM, self.OnCancelMatch, self)
XEventManager.RemoveEventListener(XEventId.EVENT_ROOM_CANCEL_MATCH, self.OnCancelMatch, self)
XEventManager.RemoveEventListener(XEventId.EVENT_ROOM_MATCH_PLAYERS, self.OnMatchPlayers, self)
end
--region 按钮相关
function XUiMultiDimMainDetail:RegisterUiEvents()
XUiHelper.RegisterClickEvent(self, self.BtnPreset, self.OnBtnPresetClick)
XUiHelper.RegisterClickEvent(self, self.BtnMatch, self.OnBtnMatchClick)
XUiHelper.RegisterClickEvent(self, self.BtnCreateRoom, self.OnBtnCreateRoomClick)
XUiHelper.RegisterClickEvent(self, self.BtnDifficultySelect, self.OnBtnDifficultySelectClick)
XUiHelper.RegisterClickEvent(self, self.BtnBossInfo, self.OnBtnBossInfoClick)
end
-- 预设
function XUiMultiDimMainDetail:OnBtnPresetClick()
XLuaUiManager.Open("UiMultiDimPresetRoleTip", self.StageId)
end
-- 快速匹配
function XUiMultiDimMainDetail:OnBtnMatchClick()
self:CheckNetworkDelay(function()
if not XDataCenter.MultiDimManager.CheckTeamIsOpen(true) then
return
end
self:Match(true)
end)
end
-- 创建房间
function XUiMultiDimMainDetail:OnBtnCreateRoomClick()
self:CheckNetworkDelay(function()
if not XDataCenter.MultiDimManager.CheckTeamIsOpen(true) then
return
end
XLuaUiManager.Open("UiMultiDimCreateRoomTip", self.StageId)
end)
end
-- 难度选择
function XUiMultiDimMainDetail:OnBtnDifficultySelectClick()
XLuaUiManager.Open("UiMultiDimSelectDifficult", self.CurrentThemeId, self.CurrentDifficulty, handler(self, self.RefreshDifficulty))
end
-- 查看机制
function XUiMultiDimMainDetail:OnBtnBossInfoClick()
XLuaUiManager.Open("UiMultiDimDetails", self.StageId)
end
function XUiMultiDimMainDetail:CheckNetworkDelay(callBack)
-- 检测用户当前网速若网速不佳延迟100ms出现弹窗提示
local pingTime = XTime.GetPingTime() -- 网络延时 单位ms
local delay = XMultiDimConfig.GetMultiDimConfigValue("NetworkDelay") -- 配置延迟时间 单位ms
if pingTime > tonumber(delay) then
local title = CSXTextManagerGetText("MultiDimTeamNetworkPingTitle")
local content = CSXTextManagerGetText("MultiDimTeamNetworkPingContent")
XUiManager.DialogTip(title, content, XUiManager.DialogType.Normal,
nil, function()
if callBack then
callBack()
end
end)
else
if callBack then
callBack()
end
end
end
function XUiMultiDimMainDetail:SelectCareerRequest(careerId, cb)
local difficultyInfo = XMultiDimConfig.GetMultiDimDifficultyStageData(self.StageId)
-- 发送所选的职业
XDataCenter.MultiDimManager.MultiDimSelectCareerRequest(difficultyInfo.Id, careerId, function()
if cb then
cb()
end
end)
end
function XUiMultiDimMainDetail:OnBeginMatch()
self.BtnMatching.gameObject:SetActiveEx(true)
self.BtnMatch.gameObject:SetActiveEx(false)
self.Mask.gameObject:SetActiveEx(true)
end
function XUiMultiDimMainDetail:OnCancelMatch()
self.BtnMatching.gameObject:SetActiveEx(false)
self.BtnMatch.gameObject:SetActiveEx(true)
self.Mask.gameObject:SetActiveEx(false)
end
function XUiMultiDimMainDetail:Match(needMatchCountCheck)
XDataCenter.RoomManager.Match(self.StageId, function()
self:OnBeginMatch()
XLuaUiManager.Open("UiOnLineMatching")
end, needMatchCountCheck)
end
--匹配人数过多
function XUiMultiDimMainDetail:OnMatchPlayers()
self:OnCancelMatch()
XUiManager.DialogTip(CS.XTextManager.GetText("MultiDimMainDetailMatchTipTitle"), CS.XTextManager.GetText("MultiDimMainDetailMatchTipContent"), XUiManager.DialogType.Normal,
function()
self:Match(false)
end, function()
--根据服务端下发的id创建房间
XLuaUiManager.Open("UiMultiDimCreateRoomTip", self.StageId)
end)
end
function XUiMultiDimMainDetail:RefreshDifficulty(currentDifficulty)
self:Refresh(self.CurrentThemeId, currentDifficulty)
end
--endregion
function XUiMultiDimMainDetail:Refresh(currentThemeId, currentDifficulty)
self.CurrentDifficulty = currentDifficulty or 1
self.CurrentThemeId = currentThemeId
-- 选择难度
local difficultyInfoDetail = XDataCenter.MultiDimManager.GetDifficultyDetailInfo(self.CurrentThemeId, self.CurrentDifficulty)
self.BtnDifficultySelect:SetNameAndColorByGroup(0, CSXTextManagerGetText("MultiDimThemeSelectDifficultyText"), XUiHelper.Hexcolor2Color(difficultyInfoDetail.Color))
self.BtnDifficultySelect:SetNameAndColorByGroup(1, difficultyInfoDetail.Name, XUiHelper.Hexcolor2Color(difficultyInfoDetail.Color))
-- 关卡信息
self.StageId = XDataCenter.MultiDimManager.GetDifficultyStageId(self.CurrentThemeId, self.CurrentDifficulty)
local stageCfg = XDataCenter.FubenManager.GetStageCfg(self.StageId)
-- 名称
self.TxtBossName.text = stageCfg.Name
-- 建议
self.TxtRecommend.text = stageCfg.Description
-- 推荐人数
local leastPlayer = stageCfg.OnlinePlayerLeast <= 0 and 1 or stageCfg.OnlinePlayerLeast
self.TxtTeamNumber.text = CSXTextManagerGetText("MultiDimMainDetailTeamNumber", leastPlayer)
-- 排行和最高分只有最高难度才显示
local isOnRank = XMultiDimConfig.GetDifficultIsOnRank(self.CurrentThemeId, self.CurrentDifficulty)
self.PanelIntegral.gameObject:SetActiveEx(isOnRank == 1)
if isOnRank == 1 then
-- 排行
self.TxtRank.gameObject:SetActiveEx(false)
self.TxtNoneRank.gameObject:SetActiveEx(true)
-- 获取排行信息
XDataCenter.MultiDimManager.MultiDimOpenRankRequest(XMultiDimConfig.RANK_MODEL.SINGLE_RANK, self.CurrentThemeId, function()
local isActive, text = XDataCenter.MultiDimManager.GetCurrentRankMsg(XMultiDimConfig.RANK_MODEL.SINGLE_RANK, self.CurrentThemeId)
self.TxtRank.text = text
self.TxtRank.gameObject:SetActiveEx(isActive)
self.TxtNoneRank.gameObject:SetActiveEx(not isActive)
end)
-- 历史最高
local point = XDataCenter.MultiDimManager.GetFightRecordPoint(self.CurrentThemeId)
local isPointShow = XTool.IsNumberValid(point)
self.TxtTopNumber.text = point
self.TxtTopNumber.gameObject:SetActiveEx(isPointShow)
self.TxtNonePoint.gameObject:SetActiveEx(not isPointShow)
end
-- 首通奖励
self:RefreshRewards()
-- 选择职业
self:RefreshCareer()
end
function XUiMultiDimMainDetail:RefreshRewards()
local rewardId = XDataCenter.MultiDimManager.GetDifficultyFirstPassReward(self.CurrentThemeId, self.CurrentDifficulty)
local rewards = XRewardManager.GetRewardList(rewardId)
if XTool.IsTableEmpty(rewards) then
for i = 1, #self.RewardGridList do
self.RewardGridList[i].GameObject:SetActiveEx(false)
end
return
end
local difficultyInfo = XMultiDimConfig.GetMultiDimDifficultyStageData(self.StageId)
local isPass = XDataCenter.MultiDimManager.CheckTodayIsPass(difficultyInfo.Id)
for i = 1, #rewards do
local panel = self.RewardGridList[i]
if not panel then
local go = #self.RewardGridList == 0 and self.Grid256New or XUiHelper.Instantiate(self.Grid256New, self.PanelDropContent)
panel = XUiGridCommon.New(self.RootUi, go)
table.insert(self.RewardGridList, panel)
end
panel:Refresh(rewards[i])
panel:SetReceived(isPass)
end
for i = #rewards + 1, #self.RewardGridList do
self.RewardGridList[i].GameObject:SetActiveEx(false)
end
end
function XUiMultiDimMainDetail:RefreshCareer()
self.CareerIds = {}
local multiDimCareerInfo = XDataCenter.MultiDimManager.GetMultiDimCareerInfo()
local typeGroup = {}
for i = 1, #multiDimCareerInfo do
local careerConfig = multiDimCareerInfo[i]
local btn = self.CareerGridList[i]
if not btn then
local go = #self.CareerGridList == 0 and self.BtnType or XUiHelper.Instantiate(self.BtnType, self.PanelList.transform)
btn = go:GetComponent("XUiButton")
table.insert(self.CareerGridList, btn)
end
btn:SetRawImage(careerConfig.Icon)
typeGroup[i] = btn
self.CareerIds[i] = careerConfig.Career
end
for i = #typeGroup + 1, #self.CareerGridList do
self.CareerGridList[i].GameObject:SetActiveEx(false)
end
self.PanelList:Init(typeGroup, function(typeIndex)
self:OnClickTypeCallBack(typeIndex)
end)
-- 记录玩家上一次的选择
local defaultCareerId = self:GetDefaultCareerId()
self.CurrentType = table.indexof(self.CareerIds, defaultCareerId)
self.PanelList:SelectIndex(self.CurrentType or 1)
end
-- 获取默认的职业 如果已有保存的职业返回保存的职业
--[[
a.
b.
c.idid较小者
]]
function XUiMultiDimMainDetail:GetDefaultCareerId()
local difficultyInfo = XMultiDimConfig.GetMultiDimDifficultyStageData(self.StageId)
local presetCareerId = XDataCenter.MultiDimManager.GetPresetCareerId(difficultyInfo.Id)
if XTool.IsNumberValid(presetCareerId) then
return presetCareerId -- 返回已保存的
end
local defaultCareerInfo = {}
for _, careerId in pairs(self.CareerIds) do
local data = {}
data.CareerId = careerId
-- 获取天赋点数
local talentPoint = XDataCenter.MultiDimManager.GetTalentPoint(careerId)
data.TalentPoint = talentPoint
-- 最高战力
local highAbility = XDataCenter.MultiDimManager.GetHighAbility(careerId)
data.HighAbility = highAbility
table.insert(defaultCareerInfo, data)
end
table.sort(defaultCareerInfo, function(a, b)
-- 天赋点数
if a.TalentPoint ~= b.TalentPoint then
return a.TalentPoint > b.TalentPoint
end
-- 最高战力
if a.HighAbility ~= b.HighAbility then
return a.HighAbility > b.HighAbility
end
-- 职业id
return a.CareerId < b.CareerId
end)
-- 获取到默认的职业时通知服务端
local careerId = defaultCareerInfo[1].CareerId
self:SelectCareerRequest(careerId)
return careerId
end
function XUiMultiDimMainDetail:OnClickTypeCallBack(typeIndex)
if self.CurrentType and self.CurrentType == typeIndex then
return
end
self.CurrentType = typeIndex
local careerId = self.CareerIds[typeIndex]
-- 切换职业时通知服务端
self:SelectCareerRequest(careerId, function()
-- 点击后选中并淡出提示:“选择进攻/装甲/辅助型进行匹配”
local typeName = XDataCenter.MultiDimManager.GetMultiDimCareerName(careerId)
local msg = CSXTextManagerGetText("MultiDimMainDetailNeedJobTypeTip", typeName)
XUiManager.TipMsg(msg)
end)
end
return XUiMultiDimMainDetail