PGRData/Resources/Scripts/XUi/XUiSuperTower/Room/XUiSuperTowerBattleRoomRoleDetail.lua

208 lines
9 KiB
Lua
Raw Normal View History

2022-12-26 08:36:01 +00:00
local CsGetText = CS.XTextManager.GetText
local XUiBattleRoomRoleGrid = require("XUi/XUiNewRoomSingle/XUiBattleRoomRoleGrid")
--######################## XUiSuperTowerBattleRoomRoleGrid ########################
local XUiSuperTowerBattleRoomRoleGrid = XClass(XUiBattleRoomRoleGrid, "XUiSuperTowerBattleRoomRoleGrid")
-- superTowerRole : XSuperTowerRole
-- team : XTeam
function XUiSuperTowerBattleRoomRoleGrid:SetData(superTowerRole, team, stageId)
XUiSuperTowerBattleRoomRoleGrid.Super.SetData(self, superTowerRole)
local superTowerManager = XDataCenter.SuperTowerManager
self.TxtPower.text = superTowerRole:GetAbility()
-- 超限等级
self.TxtSuperLevel.text = superTowerRole:GetSuperLevel()
local isOpenTransfinite = superTowerManager.CheckFunctionUnlockByKey(superTowerManager.FunctionName.Transfinite)
self.PanelSuperLevel.gameObject:SetActiveEx(isOpenTransfinite)
-- 试玩
self.PanelTry.gameObject:SetActiveEx(superTowerRole:GetIsRobot())
-- 是否上阵了同一角色
local isInTeam = team:GetEntityIdIsInTeam(superTowerRole:GetId())
local isHasSameCharacterInTeam = team:CheckHasSameCharacterId(superTowerRole:GetId())
if not isInTeam and isHasSameCharacterInTeam then
self.PanelSameRole.gameObject:SetActiveEx(true)
else
self.PanelSameRole.gameObject:SetActiveEx(false)
end
-- 特典
local isOpenBonusChara = superTowerManager.CheckFunctionUnlockByKey(superTowerManager.FunctionName.BonusChara)
self.PanelRogueLikeTheme.gameObject:SetActiveEx(isOpenBonusChara and superTowerRole:GetIsInDult())
-- 其他梯队信息
local targetStage = superTowerManager.GetTargetStageByStageId(stageId)
if targetStage then
local index = superTowerManager.GetTeamManager():CheckMemberIsInTeam(
superTowerManager.TeamId[targetStage:GetStageType()]
, XSuperTowerConfigs.MaxMultiTeamCount
, superTowerRole:GetId())
self.PanelTeamSupport.gameObject:SetActiveEx(index > 0)
if index > 0 then
self.TxtEchelonIndex.text = CsGetText("STMultiTeamInHint", index)
end
else
self.PanelTeamSupport.gameObject:SetActiveEx(false)
end
end
function XUiSuperTowerBattleRoomRoleGrid:SetInTeamStatus(value)
self.ImgInTeam.gameObject:SetActiveEx(value)
if value then
self.PanelTeamSupport.gameObject:SetActiveEx(false)
end
end
--######################## XUiSuperTowerBattleRoomRoleDetail ########################
local XUiBattleRoomRoleDetailDefaultProxy = require("XUi/XUiNewRoomSingle/XUiBattleRoomRoleDetailDefaultProxy")
local XUiSuperTowerBattleRoomRoleDetail = XClass(XUiBattleRoomRoleDetailDefaultProxy, "XUiSuperTowerBattleRoomRoleDetail")
-- characterType : XCharacterConfigs.CharacterType
function XUiSuperTowerBattleRoomRoleDetail:GetEntities(characterType)
return XDataCenter.SuperTowerManager.GetRoleManager():GetCanFightRoles(characterType)
end
function XUiSuperTowerBattleRoomRoleDetail:GetFilterJudge()
return XDataCenter.SuperTowerManager.GetRoleManager():GetFilterJudge()
end
function XUiSuperTowerBattleRoomRoleDetail:GetGridProxy()
return XUiSuperTowerBattleRoomRoleGrid
end
function XUiSuperTowerBattleRoomRoleDetail:GetChildPanelData()
if self.ChildPanelData == nil then
self.ChildPanelData = {
assetPath = XUiConfigs.GetComponentUrl("UiSuperTowerBattleRoomRoleDetail"),
proxy = require("XUi/XUiSuperTower/Room/XUiSuperTowerBattleRoomChildPanel"),
proxyArgs = { "Team", "StageId", "CurrentEntityId" }
}
end
return self.ChildPanelData
end
function XUiSuperTowerBattleRoomRoleDetail:GetCharacterViewModelByEntityId(entityId)
return XDataCenter.SuperTowerManager.GetRoleManager():GetRole(entityId):GetCharacterViewModel()
end
-- team : XTeam
-- sortTagType : XRoomCharFilterTipsConfigs.EnumSortTag
function XUiSuperTowerBattleRoomRoleDetail:SortEntitiesWithTeam(team, entities, sortTagType)
if sortTagType == nil then
entities = XUiSuperTowerBattleRoomRoleDetail.Super.SortEntitiesWithTeam(self, team, entities)
else
entities = XDataCenter.SuperTowerManager.GetRoleManager():SortRoles(entities, sortTagType, true)
local roleManager = XDataCenter.SuperTowerManager.GetRoleManager()
local role, entityId
local entityIds = team:GetEntityIds()
for pos = XEntityHelper.TEAM_MAX_ROLE_COUNT, 1, -1 do
entityId = entityIds[pos]
role = roleManager:GetRole(entityId)
if role then
local index = table.indexof(entities, role)
if index ~= false then
table.remove(entities, index)
table.insert(entities, 1, role)
end
end
end
end
return entities
end
function XUiSuperTowerBattleRoomRoleDetail:GetAutoCloseInfo()
return true, XDataCenter.SuperTowerManager.GetActivityEndTime(), function(isClose)
if isClose then
XDataCenter.SuperTowerManager.HandleActivityEndTime()
end
end
end
function XUiSuperTowerBattleRoomRoleDetail:GetRoleDynamicGrid(rootUi)
return rootUi.GridCharacterSupertower
end
-- return { [XRoomCharFilterTipsConfigs.EnumSortTag.xxx] = true } 即为隐藏
function XUiBattleRoomRoleDetailDefaultProxy:GetHideSortTagDic()
local superTowerManager = XDataCenter.SuperTowerManager
local isOpen = superTowerManager.CheckFunctionUnlockByKey(superTowerManager.FunctionName.Transfinite)
return { [XRoomCharFilterTipsConfigs.EnumSortTag.SuperLevel] = not isOpen }
end
--######################## AOP ########################
function XUiSuperTowerBattleRoomRoleDetail:AOPOnStartBefore(rootUi)
rootUi.PanelAsset.gameObject:SetActiveEx(false)
end
function XUiSuperTowerBattleRoomRoleDetail:AOPOnStartAfter(rootUi)
end
function XUiSuperTowerBattleRoomRoleDetail:AOPOnBtnJoinTeamClickedBefore(rootUi)
local currentEntityId = rootUi.CurrentEntityId
local targetStage = XDataCenter.SuperTowerManager.GetTargetStageByStageId(rootUi.StageId)
if not targetStage then return end
if targetStage:GetStageType() ~= XDataCenter.SuperTowerManager.StageType.MultiTeamMultiWave then
return
end
-- 多队伍情况下不能上阵同一个角色
local teams = XDataCenter.SuperTowerManager.GetTeamManager():GetTeamsByIdAndCount(
XDataCenter.SuperTowerManager.TeamId[targetStage:GetStageType()], XSuperTowerConfigs.MaxMultiTeamCount)
local exchangeTeam = nil
local exchangePos = nil
for teamIndex, team in ipairs(teams) do
if team:GetId() ~= rootUi.Team:GetId() then
local hasSame, pos = team:CheckHasSameCharacterId(currentEntityId)
if hasSame then
exchangeTeam = team
exchangePos = pos
break
end
end
end
-- 其他队伍有相同的角色
if exchangeTeam ~= nil then
-- 如果该角色的实体id不在任何一个队伍里弹特殊提示
local teamIndex = XDataCenter.SuperTowerManager.GetTeamManager():CheckMemberIsInTeam(
XDataCenter.SuperTowerManager.TeamId[targetStage:GetStageType()]
, XSuperTowerConfigs.MaxMultiTeamCount
, currentEntityId)
if teamIndex <= 0 then
XUiManager.TipError(CsGetText("STSameCharacterNotInTeamTip"))
return true
end
local finishedCallback = function()
local characterName = XDataCenter.SuperTowerManager:GetRoleManager():GetRole(currentEntityId):GetCharacterViewModel():GetName()
local currentTeamIndex = nil
for teamIndex, team in ipairs(teams) do
if team:GetId() == rootUi.Team:GetId() then
currentTeamIndex = teamIndex
break
end
end
CsXUiManager.Instance:Open("UiDialog", CsGetText("ExchangeTeamMemberTitle")
, CsGetText("ExchangeTeamMemberContent", characterName, CsGetText("BattleTeamTitle", teamIndex), CsGetText("BattleTeamTitle", currentTeamIndex))
, XUiManager.DialogType.Normal, nil, function()
local currentTeam = rootUi.Team
local currentPos = rootUi.Pos
local currentPosEntityId = currentTeam:GetEntityIdByTeamPos(currentPos)
exchangeTeam:UpdateEntityTeamPos(currentPosEntityId, exchangePos, true)
rootUi.Team:UpdateEntityTeamPos(currentEntityId, currentPos, true)
rootUi:Close()
end)
end
if rootUi:CheckCanJoin(currentEntityId, finishedCallback) then
finishedCallback()
end
return true
end
-- 当前的实体是否在其他梯队中
self.__AOP_OtherTeam = exchangeTeam
end
function XUiSuperTowerBattleRoomRoleDetail:AOPOnBtnJoinTeamClickedAfter(rootUi)
local team = self.__AOP_OtherTeam
if not team then return nil end
if team:GetId() == rootUi.Team:GetId() then return nil end
team:UpdateEntityTeamPos(rootUi.CurrentEntityId, nil, false)
self.__AOP_OtherTeam = nil
end
return XUiSuperTowerBattleRoomRoleDetail