2023-07-14 19:35:33 +00:00
|
|
|
|
local CSXTextManagerGetText = CS.XTextManager.GetText
|
|
|
|
|
local XUiPanelRoleModel = require("XUi/XUiCharacter/XUiPanelRoleModel")
|
|
|
|
|
|
|
|
|
|
local TabBtnIndex = {
|
|
|
|
|
Normal = 1,
|
|
|
|
|
Isomer = 2,
|
|
|
|
|
Robot = 3,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
local CharacterTypeConvert = {
|
|
|
|
|
[TabBtnIndex.Normal] = XCharacterConfigs.CharacterType.Normal,
|
|
|
|
|
[TabBtnIndex.Isomer] = XCharacterConfigs.CharacterType.Isomer,
|
|
|
|
|
[TabBtnIndex.Robot] = XCharacterConfigs.CharacterType.Robot,
|
|
|
|
|
}
|
|
|
|
|
local TabBtnIndexConvert = {
|
|
|
|
|
[XCharacterConfigs.CharacterType.Normal] = TabBtnIndex.Normal,
|
|
|
|
|
[XCharacterConfigs.CharacterType.Isomer] = TabBtnIndex.Isomer,
|
|
|
|
|
[XCharacterConfigs.CharacterType.Robot] = TabBtnIndex.Robot,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
local stagePass = false
|
|
|
|
|
|
|
|
|
|
local XUiRoomCharacter = XLuaUiManager.Register(XLuaUi, "UiRoomCharacter")
|
|
|
|
|
|
|
|
|
|
function XUiRoomCharacter:OnAwake()
|
|
|
|
|
self:InitAutoScript()
|
|
|
|
|
self:InitDynamicTable()
|
|
|
|
|
|
|
|
|
|
local root = self.UiModelGo
|
|
|
|
|
self.PanelRoleModel = root:FindTransform("PanelRoleModel")
|
|
|
|
|
self.ImgEffectHuanren = root:FindTransform("ImgEffectHuanren")
|
|
|
|
|
self.ImgEffectHuanren1 = root:FindTransform("ImgEffectHuanren1")
|
|
|
|
|
|
|
|
|
|
self.TagCacheDic = {}
|
|
|
|
|
self.SortFunction = {}
|
|
|
|
|
self.SortFunction[XRoomCharFilterTipsConfigs.EnumSortTag.Default] = function(a, b)
|
|
|
|
|
local AIsInTeam = self:IsInTeam(a)
|
|
|
|
|
local BIsInTeam = self:IsInTeam(b)
|
|
|
|
|
|
|
|
|
|
if AIsInTeam ~= BIsInTeam then
|
|
|
|
|
return AIsInTeam
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
if self:IsWorldBossType() or self:IsNewCharType() then
|
|
|
|
|
local AAbility = self:GetAbility(a)
|
|
|
|
|
local BAbility = self:GetAbility(b)
|
|
|
|
|
local AIsRobot = XRobotManager.CheckIsRobotId(a)
|
|
|
|
|
local BIsRobot = XRobotManager.CheckIsRobotId(b)
|
|
|
|
|
|
|
|
|
|
if AIsRobot ~= BIsRobot then
|
|
|
|
|
return AIsRobot
|
|
|
|
|
else
|
|
|
|
|
return AAbility > BAbility
|
|
|
|
|
end
|
|
|
|
|
elseif self:IsChessPursuitType() then
|
|
|
|
|
local AAbility = self:GetAbility(a)
|
|
|
|
|
local BAbility = self:GetAbility(b)
|
|
|
|
|
if AAbility ~= BAbility then
|
|
|
|
|
return AAbility > BAbility
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local ACharId = self:GetCharacterId(a)
|
|
|
|
|
local BCharId = self:GetCharacterId(b)
|
|
|
|
|
if ACharId ~= BCharId then
|
|
|
|
|
return ACharId > BCharId
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local AIsRobot = XRobotManager.CheckIsRobotId(a)
|
|
|
|
|
local BIsRobot = XRobotManager.CheckIsRobotId(b)
|
|
|
|
|
if AIsRobot ~= BIsRobot then
|
|
|
|
|
return BIsRobot
|
|
|
|
|
end
|
|
|
|
|
return false
|
|
|
|
|
elseif self:IsActivityBossSingle() then
|
|
|
|
|
local AAbility = self:GetAbility(a)
|
|
|
|
|
local BAbility = self:GetAbility(b)
|
|
|
|
|
if AAbility ~= BAbility then
|
|
|
|
|
return AAbility > BAbility
|
|
|
|
|
end
|
|
|
|
|
else
|
|
|
|
|
local ACharId = self:GetCharacterId(a)
|
|
|
|
|
local BCharID = self:GetCharacterId(b)
|
|
|
|
|
local ALevel = self:GetLevel(a)
|
|
|
|
|
local BLevel = self:GetLevel(b)
|
|
|
|
|
local AQuality = self:GetQuality(a)
|
|
|
|
|
local BQuality = self:GetQuality(b)
|
|
|
|
|
|
|
|
|
|
if ALevel ~= BLevel then
|
|
|
|
|
return ALevel > BLevel
|
|
|
|
|
end
|
|
|
|
|
if AQuality ~= BQuality then
|
|
|
|
|
return AQuality > BQuality
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local priorityA = XCharacterConfigs.GetCharacterPriority(ACharId)
|
|
|
|
|
local priorityB = XCharacterConfigs.GetCharacterPriority(BCharID)
|
|
|
|
|
if priorityA ~= priorityB then
|
|
|
|
|
return priorityA < priorityB
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
return ACharId > BCharID
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
self.SortFunction[XRoomCharFilterTipsConfigs.EnumSortTag.Quality] = function(a, b)
|
|
|
|
|
local AQuality = self:GetQuality(a)
|
|
|
|
|
local BQuality = self:GetQuality(b)
|
|
|
|
|
if AQuality ~= BQuality then
|
|
|
|
|
return AQuality > BQuality
|
|
|
|
|
end
|
|
|
|
|
return self.SortFunction[XRoomCharFilterTipsConfigs.EnumSortTag.Default](a, b)
|
|
|
|
|
end
|
|
|
|
|
self.SortFunction[XRoomCharFilterTipsConfigs.EnumSortTag.Level] = function(a, b)
|
|
|
|
|
local ALevel = self:GetLevel(a)
|
|
|
|
|
local BLevel = self:GetLevel(b)
|
|
|
|
|
if ALevel ~= BLevel then
|
|
|
|
|
return ALevel > BLevel
|
|
|
|
|
end
|
|
|
|
|
return self.SortFunction[XRoomCharFilterTipsConfigs.EnumSortTag.Default](a, b)
|
|
|
|
|
end
|
|
|
|
|
self.SortFunction[XRoomCharFilterTipsConfigs.EnumSortTag.Ability] = function(a, b)
|
|
|
|
|
local AAbility = self:GetAbility(a)
|
|
|
|
|
local BAbility = self:GetAbility(b)
|
|
|
|
|
if AAbility ~= BAbility then
|
|
|
|
|
return AAbility > BAbility
|
|
|
|
|
end
|
|
|
|
|
return self.SortFunction[XRoomCharFilterTipsConfigs.EnumSortTag.Default](a, b)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
self.AssetPanel = XUiPanelAsset.New(self, self.PanelAsset, XDataCenter.ItemManager.ItemId.FreeGem, XDataCenter.ItemManager.ItemId.ActionPoint, XDataCenter.ItemManager.ItemId.Coin)
|
|
|
|
|
self.GridCharacter.gameObject:SetActiveEx(false)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XUiRoomCharacter:OnStart(teamCharIdMap, teamSelectPos, cb, stageType, characterLimitType, data)
|
|
|
|
|
self.TeamCharIdMap = teamCharIdMap
|
|
|
|
|
self.TeamSelectPos = teamSelectPos
|
|
|
|
|
self.TeamResultCb = cb
|
|
|
|
|
self.StageType = stageType or 0
|
|
|
|
|
self.CharacterLimitType = characterLimitType or XFubenConfigs.CharacterLimitType.All
|
|
|
|
|
|
|
|
|
|
-- data可能包含的参数:
|
|
|
|
|
if data then
|
|
|
|
|
self.LimitBuffId = data.LimitBuffId
|
|
|
|
|
self.TeamBuffId = data.TeamBuffId
|
|
|
|
|
self.RobotIdList = data.RobotIdList
|
|
|
|
|
self.ChallengeId = data.ChallengeId
|
|
|
|
|
self.SelectCharacterType = data.SelectCharacterType
|
|
|
|
|
self.IsHideQuitButton = data.IsHideQuitButton
|
|
|
|
|
self.NotReset = data.NotReset
|
|
|
|
|
self.MapId = data.MapId
|
|
|
|
|
self.TeamGridIndex = data.TeamGridIndex
|
|
|
|
|
self.SceneUiType = data.SceneUiType
|
|
|
|
|
self.IsRobotOnly = data.IsRobotOnly
|
|
|
|
|
self.RobotAndCharacter = data.RobotAndCharacter
|
|
|
|
|
self.StageId = data.StageId
|
|
|
|
|
self.IsRobotCorrespondCharacter = data.IsRobotCorrespondCharacter --是否只根据RobotIdList显示已拥有的角色
|
|
|
|
|
end
|
|
|
|
|
self.Proxy = XUiRoomCharacterProxy.ProxyDic[self.StageType]
|
|
|
|
|
|
|
|
|
|
self.RoleModelPanel = XUiPanelRoleModel.New(self.PanelRoleModel, self.Name, nil, true)
|
|
|
|
|
self.CharacterGrids = {}
|
|
|
|
|
self:InitRequireCharacterInfo()
|
|
|
|
|
self:InitCharacterTypeBtns()
|
|
|
|
|
self:HideJump()
|
|
|
|
|
self:InitEffectPositionInfo()
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XUiRoomCharacter:OnEnable()
|
|
|
|
|
self:UpdateInfo()
|
|
|
|
|
|
|
|
|
|
self.DynamicTable:ReloadDataASync()
|
|
|
|
|
CS.XGraphicManager.UseUiLightDir = true
|
|
|
|
|
XEventManager.AddEventListener(XEventId.EVENT_ARENAONLINE_WEEK_REFRESH, self.OnArenaOnlineWeekRefrsh, self)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XUiRoomCharacter:OnGetEvents()
|
|
|
|
|
return { XEventId.EVENT_ACTIVITY_ON_RESET }
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XUiRoomCharacter:OnNotify(evt, ...)
|
|
|
|
|
local args = { ... }
|
|
|
|
|
if evt == XEventId.EVENT_ACTIVITY_ON_RESET then
|
|
|
|
|
self:OnResetEvent(args[1])
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XUiRoomCharacter:OnDisable()
|
|
|
|
|
CS.XGraphicManager.UseUiLightDir = false
|
|
|
|
|
XEventManager.RemoveEventListener(XEventId.EVENT_ARENAONLINE_WEEK_REFRESH, self.OnArenaOnlineWeekRefrsh, self)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XUiRoomCharacter:HideJump()
|
|
|
|
|
if self.StageType ~= XDataCenter.FubenManager.StageType.ArenaOnline then
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
if self.AssetPanel.BtnBuyJump1 then
|
|
|
|
|
self.AssetPanel.BtnBuyJump1.gameObject:SetActiveEx(false)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
if self.AssetPanel.BtnBuyJump2 then
|
|
|
|
|
self.AssetPanel.BtnBuyJump2.gameObject:SetActiveEx(false)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
if self.AssetPanel.BtnBuyJump3 then
|
|
|
|
|
self.AssetPanel.BtnBuyJump3.gameObject:SetActiveEx(false)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
-- auto
|
|
|
|
|
-- Automatic generation of code, forbid to edit
|
|
|
|
|
function XUiRoomCharacter:InitAutoScript()
|
|
|
|
|
self:AutoInitUi()
|
|
|
|
|
self:AutoAddListener()
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XUiRoomCharacter:AutoInitUi()
|
|
|
|
|
self.BtnBack = self.Transform:Find("SafeAreaContentPane/Top/BtnBack"):GetComponent("Button")
|
|
|
|
|
self.BtnJoinTeam = self.Transform:Find("SafeAreaContentPane/CharList/TeamBtn/BtnJoinTeam"):GetComponent("Button")
|
|
|
|
|
self.BtnQuitTeam = self.Transform:Find("SafeAreaContentPane/CharList/TeamBtn/BtnQuitTeam"):GetComponent("Button")
|
|
|
|
|
self.BtnTeaching = self.Transform:Find("SafeAreaContentPane/BtnTeaching"):GetComponent("XUiButton")
|
|
|
|
|
self.SViewCharacterList = self.Transform:Find("SafeAreaContentPane/CharList/CharInfo/Left/SViewCharacterList"):GetComponent("ScrollRect")
|
|
|
|
|
self.PanelRoleContent = self.Transform:Find("SafeAreaContentPane/CharList/CharInfo/Left/SViewCharacterList/Viewport/PanelRoleContent")
|
|
|
|
|
self.GridCharacter = self.Transform:Find("SafeAreaContentPane/CharList/CharInfo/Left/SViewCharacterList/Viewport/PanelRoleContent/GridCharacter")
|
|
|
|
|
self.PanelRoleModel = self.Transform:Find("SafeAreaContentPane/ModelRoot/NearRoot/PanelRoleModel")
|
|
|
|
|
self.PanelDrag = self.Transform:Find("SafeAreaContentPane/CharList/CharInfo/PanelDrag"):GetComponent("XDrag")
|
|
|
|
|
self.TxtRequireAbility = self.Transform:Find("SafeAreaContentPane/CharList/TeamBtn/PanelTxt/TxtRequireAbility"):GetComponent("Text")
|
|
|
|
|
self.PanelAsset = self.Transform:Find("SafeAreaContentPane/PanelAsset")
|
|
|
|
|
self.BtnMainUi = self.Transform:Find("SafeAreaContentPane/Top/BtnMainUi"):GetComponent("Button")
|
|
|
|
|
self.PanelRequireCharacter = self.Transform:Find("SafeAreaContentPane/CharList/TeamBtn/PanelTxt/PanelRequireCharacter")
|
|
|
|
|
self.ImgRequireCharacter = self.Transform:Find("SafeAreaContentPane/CharList/TeamBtn/PanelTxt/PanelRequireCharacter/Image/ImgRequireCharacter"):GetComponent("Image")
|
|
|
|
|
self.TxtRequireCharacter = self.Transform:Find("SafeAreaContentPane/CharList/TeamBtn/PanelTxt/PanelRequireCharacter/TxtRequireCharacter"):GetComponent("Text")
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XUiRoomCharacter:AutoAddListener()
|
|
|
|
|
self:RegisterClickEvent(self.BtnBack, self.OnBtnBackClick)
|
|
|
|
|
self:RegisterClickEvent(self.BtnJoinTeam, self.OnBtnJoinTeamClick)
|
|
|
|
|
self:RegisterClickEvent(self.BtnQuitTeam, self.OnBtnQuitTeamClick)
|
|
|
|
|
self:RegisterClickEvent(self.BtnMainUi, self.OnBtnMainUiClick)
|
|
|
|
|
|
|
|
|
|
self.BtnConsciousness.CallBack = function() self:OnBtnConsciousnessClick() end
|
|
|
|
|
self.BtnFashion.CallBack = function() self:OnBtnFashionClick() end
|
|
|
|
|
self.BtnWeapon.CallBack = function() self:OnBtnWeaponClick() end
|
|
|
|
|
self.BtnPartner.CallBack = function() self:OnCarryPartnerClick() end
|
|
|
|
|
|
|
|
|
|
self.BtnTeaching.CallBack = function () self:OnBtnBtnTeachingClick() end
|
|
|
|
|
self.BtnFilter.CallBack = function() self:OnBtnFilterClick() end
|
|
|
|
|
self.BtnTeaching.CallBack = function () self:OnBtnBtnTeachingClick() end
|
|
|
|
|
end
|
|
|
|
|
-- auto
|
|
|
|
|
function XUiRoomCharacter:OnBtnWeaponClick()
|
2024-09-01 20:49:41 +00:00
|
|
|
|
XMVCA:GetAgency(ModuleId.XEquip):OpenUiEquipReplace(self.CurCharacter.Id, nil, true)
|
2023-07-14 19:35:33 +00:00
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XUiRoomCharacter:OnBtnConsciousnessClick()
|
2024-09-01 20:49:41 +00:00
|
|
|
|
XMVCA:GetAgency(ModuleId.XEquip):OpenUiEquipAwareness(self.CurCharacter.Id)
|
2023-07-14 19:35:33 +00:00
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XUiRoomCharacter:OnBtnMainUiClick()
|
|
|
|
|
XLuaUiManager.RunMain()
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XUiRoomCharacter:OnCarryPartnerClick()
|
|
|
|
|
XDataCenter.PartnerManager.GoPartnerCarry(self.CurCharacter.Id, false)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XUiRoomCharacter:OnBtnFilterClick()
|
|
|
|
|
local characterType = CharacterTypeConvert[self.SelectTabBtnIndex]
|
|
|
|
|
XLuaUiManager.Open("UiRoomCharacterFilterTips",
|
|
|
|
|
self,
|
|
|
|
|
XRoomCharFilterTipsConfigs.EnumFilterType.Common,
|
|
|
|
|
XRoomCharFilterTipsConfigs.EnumSortType.Common,
|
|
|
|
|
characterType)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--初始化音效
|
|
|
|
|
function XUiRoomCharacter:InitBtnSound()
|
|
|
|
|
self.SpecialSoundMap[self:GetAutoKey(self.BtnBack, "onClick")] = XSoundManager.UiBasicsMusic.Return
|
|
|
|
|
self.SpecialSoundMap[self:GetAutoKey(self.BtnEquip, "onClick")] = XSoundManager.UiBasicsMusic.Fuben_UiMainLineRoomCharacter_Equip
|
|
|
|
|
self.SpecialSoundMap[self:GetAutoKey(self.BtnFashion, "onClick")] = XSoundManager.UiBasicsMusic.Fuben_UiMainLineRoomCharacter_Fashion
|
|
|
|
|
self.SpecialSoundMap[self:GetAutoKey(self.BtnJoinTeam, "onClick")] = XSoundManager.UiBasicsMusic.Fuben_UiMainLineRoomCharacter_JoinTeam
|
|
|
|
|
self.SpecialSoundMap[self:GetAutoKey(self.BtnQuitTeam, "onClick")] = XSoundManager.UiBasicsMusic.Fuben_UiMainLineRoomCharacter_QuitTeam
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XUiRoomCharacter:InitRequireCharacterInfo()
|
|
|
|
|
local characterLimitType = self.CharacterLimitType
|
|
|
|
|
|
|
|
|
|
if not XFubenConfigs.IsStageCharacterLimitConfigExist(characterLimitType) then
|
|
|
|
|
self.PanelRequireCharacter.gameObject:SetActiveEx(false)
|
|
|
|
|
return
|
|
|
|
|
else
|
|
|
|
|
self.PanelRequireCharacter.gameObject:SetActiveEx(true)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local icon = XFubenConfigs.GetStageCharacterLimitImageTeamEdit(characterLimitType)
|
|
|
|
|
self.ImgRequireCharacter:SetSprite(icon)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XUiRoomCharacter:InitEffectPositionInfo()
|
|
|
|
|
if self.StageType ~= XDataCenter.FubenManager.StageType.InfestorExplore then
|
|
|
|
|
self.PanelEffectPosition.gameObject:SetActiveEx(false)
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
self.TxtEffectPosition.text = XDataCenter.FubenInfestorExploreManager.GetBuffDes()
|
|
|
|
|
self.PanelEffectPosition.gameObject:SetActiveEx(true)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XUiRoomCharacter:RefreshCharacterTypeTips()
|
|
|
|
|
if self.Proxy and self.Proxy.RefreshCharacterTypeTips then
|
|
|
|
|
self.Proxy.RefreshCharacterTypeTips(self)
|
|
|
|
|
else
|
|
|
|
|
local limitBuffId = self.LimitBuffId
|
|
|
|
|
local characterType = self.CurCharacter and XCharacterConfigs.GetCharacterType(self.CurCharacter.Id)
|
|
|
|
|
local characterLimitType = self.CharacterLimitType
|
|
|
|
|
local text = XFubenConfigs.GetStageCharacterLimitTextSelectCharacter(characterLimitType, characterType, limitBuffId)
|
|
|
|
|
self.TxtRequireCharacter.text = text
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XUiRoomCharacter:ResetTeamData()
|
|
|
|
|
self.TeamCharIdMap = { 0, 0, 0 }
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XUiRoomCharacter:InitCharacterTypeBtns()
|
|
|
|
|
local tabBtns = { self.BtnTabGouzaoti, self.BtnTabShougezhe, self.BtnTabRobot }
|
|
|
|
|
self.PanelCharacterTypeBtns:Init(tabBtns, function(index) self:TrySelectCharacterType(index) end)
|
|
|
|
|
|
|
|
|
|
if self.Proxy and self.Proxy.InitCharacterTypeBtns then
|
|
|
|
|
self.Proxy.InitCharacterTypeBtns(self, self.TeamCharIdMap, TabBtnIndex)
|
|
|
|
|
else
|
|
|
|
|
self.BtnTabShougezhe.gameObject:SetActiveEx(not XFunctionManager.CheckFunctionFitter(XFunctionManager.FunctionName.Isomer))
|
|
|
|
|
|
|
|
|
|
local characterLimitType = self.CharacterLimitType
|
|
|
|
|
local lockGouzaoti = characterLimitType == XFubenConfigs.CharacterLimitType.Isomer
|
|
|
|
|
local lockShougezhe = not XFunctionManager.JudgeOpen(XFunctionManager.FunctionName.Isomer) or characterLimitType == XFubenConfigs.CharacterLimitType.Normal
|
|
|
|
|
self.BtnTabGouzaoti:SetDisable(lockGouzaoti)
|
|
|
|
|
self.BtnTabShougezhe:SetDisable(lockShougezhe)
|
|
|
|
|
|
|
|
|
|
if self.BtnTabRobot then
|
|
|
|
|
self.BtnTabRobot.gameObject:SetActiveEx(false)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--检查选择角色类型是否和副本限制类型冲突
|
|
|
|
|
local characterType = XDataCenter.FubenManager.GetDefaultCharacterTypeByCharacterLimitType(self.CharacterLimitType)
|
|
|
|
|
|
|
|
|
|
-- 优先使用SelectCharacterType自定义要选择的角色类型,否则根据队伍的角色类型来判断选择的角色类型
|
|
|
|
|
local tempCharacterType
|
|
|
|
|
if self.SelectCharacterType then
|
|
|
|
|
tempCharacterType = self.SelectCharacterType
|
|
|
|
|
else
|
|
|
|
|
tempCharacterType = self:GetTeamCharacterType()
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
-- tempCharacterType为上锁的角色类型时,不更新characterType,使用默认的角色类型
|
|
|
|
|
if tempCharacterType and not (tempCharacterType == XCharacterConfigs.CharacterType.Normal and lockGouzaoti
|
|
|
|
|
or tempCharacterType == XCharacterConfigs.CharacterType.Isomer and lockShougezhe) then
|
|
|
|
|
characterType = tempCharacterType
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--授格者页签未开启,默认选中构造体
|
|
|
|
|
if characterType == XCharacterConfigs.CharacterType.Isomer and not XFunctionManager.JudgeOpen(XFunctionManager.FunctionName.Isomer) then
|
|
|
|
|
characterType = XCharacterConfigs.CharacterType.Normal
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
self:InitBtnTabIsClick()
|
|
|
|
|
self.PanelCharacterTypeBtns:SelectIndex(TabBtnIndexConvert[characterType])
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XUiRoomCharacter:InitDynamicTable()
|
|
|
|
|
self.DynamicTable = XDynamicTableNormal.New(self.SViewCharacterList)
|
|
|
|
|
self.DynamicTable:SetProxy(XUiGridCharacter, self)
|
|
|
|
|
self.DynamicTable:SetDelegate(self)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XUiRoomCharacter:TrySelectCharacterType(index)
|
|
|
|
|
local characterType = CharacterTypeConvert[index]
|
|
|
|
|
if characterType == XCharacterConfigs.CharacterType.Isomer and not XFunctionManager.DetectionFunction(XFunctionManager.FunctionName.Isomer) then return end
|
|
|
|
|
|
|
|
|
|
if not self:IsCanClickBtnTab(characterType) then
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local characterLimitType = self.CharacterLimitType
|
|
|
|
|
if characterLimitType == XFubenConfigs.CharacterLimitType.Normal then
|
|
|
|
|
if characterType == XCharacterConfigs.CharacterType.Isomer then
|
|
|
|
|
XUiManager.TipText("TeamSelectCharacterTypeLimitTipNormal")
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
elseif characterLimitType == XFubenConfigs.CharacterLimitType.Isomer then
|
|
|
|
|
if characterType == XCharacterConfigs.CharacterType.Normal then
|
|
|
|
|
XUiManager.TipText("TeamSelectCharacterTypeLimitTipIsomer")
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
-- elseif characterLimitType == XFubenConfigs.CharacterLimitType.IsomerDebuff then
|
|
|
|
|
-- if characterType == XCharacterConfigs.CharacterType.Isomer then
|
|
|
|
|
-- local buffDes = XFubenConfigs.GetBuffDes(self.LimitBuffId)
|
|
|
|
|
-- local content = CSXTextManagerGetText("TeamSelectCharacterTypeLimitTipIsomerDebuff", buffDes)
|
|
|
|
|
-- local sureCallBack = function()
|
|
|
|
|
-- self:OnSelectCharacterType(index)
|
|
|
|
|
-- end
|
|
|
|
|
-- local closeCallback = function()
|
|
|
|
|
-- self.PanelCharacterTypeBtns:SelectIndex(TabBtnIndexConvert[XCharacterConfigs.CharacterType.Normal])
|
|
|
|
|
-- end
|
|
|
|
|
-- XUiManager.DialogTip(nil, content, XUiManager.DialogType.Normal, closeCallback, sureCallBack)
|
|
|
|
|
-- return
|
|
|
|
|
-- end
|
|
|
|
|
-- elseif characterLimitType == XFubenConfigs.CharacterLimitType.NormalDebuff then
|
|
|
|
|
-- if characterType == XCharacterConfigs.CharacterType.Normal then
|
|
|
|
|
-- local buffDes = XFubenConfigs.GetBuffDes(self.LimitBuffId)
|
|
|
|
|
-- local content = CSXTextManagerGetText("TeamSelectCharacterTypeLimitTipNormalDebuff", buffDes)
|
|
|
|
|
-- local sureCallBack = function()
|
|
|
|
|
-- self:OnSelectCharacterType(index)
|
|
|
|
|
-- end
|
|
|
|
|
-- local closeCallback = function()
|
|
|
|
|
-- self.PanelCharacterTypeBtns:SelectIndex(TabBtnIndexConvert[XCharacterConfigs.CharacterType.Isomer])
|
|
|
|
|
-- end
|
|
|
|
|
-- XUiManager.DialogTip(nil, content, XUiManager.DialogType.Normal, closeCallback, sureCallBack)
|
|
|
|
|
-- return
|
|
|
|
|
-- end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
self:OnSelectCharacterType(index)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XUiRoomCharacter:OnSelectCharacterType(index)
|
|
|
|
|
if self.SelectTabBtnIndex == index then return end
|
|
|
|
|
self.SelectTabBtnIndex = index
|
|
|
|
|
local characterType = CharacterTypeConvert[index]
|
|
|
|
|
self.CharIdList = {}
|
|
|
|
|
self.AllCharIdList = {}
|
|
|
|
|
XDataCenter.RoomCharFilterTipsManager.Reset()
|
|
|
|
|
|
|
|
|
|
if characterType == XCharacterConfigs.CharacterType.Robot then
|
|
|
|
|
self.CharIdList = self.RobotIdList and XTool.Clone(self.RobotIdList) or {}
|
|
|
|
|
elseif self:IsWorldBossType() then
|
|
|
|
|
self.CharIdList = XDataCenter.CharacterManager.GetRobotAndCharacterIdList(self.RobotIdList, characterType)
|
|
|
|
|
elseif self:IsChessPursuitType() then
|
|
|
|
|
if self.SceneUiType == XChessPursuitCtrl.SCENE_UI_TYPE.BOSS_ROUND then
|
|
|
|
|
for _, charId in pairs(self.TeamCharIdMap) do
|
|
|
|
|
if charId > 0 then
|
|
|
|
|
table.insert(self.CharIdList, charId)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
else
|
|
|
|
|
self.CharIdList = XDataCenter.CharacterManager.GetRobotAndCharacterIdList(self.RobotIdList, characterType)
|
|
|
|
|
end
|
|
|
|
|
elseif self.IsRobotOnly then
|
|
|
|
|
self.CharIdList = XRobotManager.GetRobotIdFilterListByCharacterType(self.RobotIdList, characterType)
|
|
|
|
|
elseif self.RobotAndCharacter then
|
|
|
|
|
self.CharIdList = XDataCenter.CharacterManager.GetRobotAndCharacterIdList(self.RobotIdList, characterType)
|
|
|
|
|
elseif self.IsRobotCorrespondCharacter then
|
|
|
|
|
self.CharIdList = XDataCenter.CharacterManager.GetRobotCorrespondCharacterIdList(self.RobotIdList, characterType)
|
|
|
|
|
else
|
|
|
|
|
self.CharIdList = XDataCenter.CharacterManager.GetCharacterIdListInTeam(characterType)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
if self.Proxy and self.Proxy.SortList then
|
|
|
|
|
self.AllCharIdList = self.Proxy.SortList(self, self.CharIdList)
|
|
|
|
|
else
|
|
|
|
|
table.sort(self.CharIdList, self.SortFunction[XRoomCharFilterTipsConfigs.EnumSortTag.Default])
|
|
|
|
|
self.AllCharIdList = self.CharIdList
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
self:UpdateCharacterList(index)
|
|
|
|
|
self:RefreshCharacterTypeTips()
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--初始化部分功能,当前队伍中无某个类型,则不可点击标签按钮切换
|
|
|
|
|
function XUiRoomCharacter:InitBtnTabIsClick()
|
|
|
|
|
if not self:CheckBtnTabIsClick() then
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local isClickNormal, isClickOmer = false, false
|
|
|
|
|
local characterType
|
|
|
|
|
for _, charId in ipairs(self.TeamCharIdMap) do
|
|
|
|
|
if charId > 0 then
|
|
|
|
|
characterType = XCharacterConfigs.GetCharacterType(charId)
|
|
|
|
|
if characterType == XCharacterConfigs.CharacterType.Normal and not isClickNormal then
|
|
|
|
|
isClickNormal = true
|
|
|
|
|
elseif characterType == XCharacterConfigs.CharacterType.Isomer and not isClickOmer then
|
|
|
|
|
isClickOmer = true
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
self.IsClickNormal = isClickNormal
|
|
|
|
|
self.IsClickOmer = isClickOmer
|
|
|
|
|
self.BtnTabGouzaoti:SetDisable(not isClickNormal)
|
|
|
|
|
self.BtnTabShougezhe:SetDisable(not isClickOmer)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XUiRoomCharacter:CheckBtnTabIsClick()
|
|
|
|
|
if self:IsChessPursuitType() and self.SceneUiType == XChessPursuitCtrl.SCENE_UI_TYPE.BOSS_ROUND then
|
|
|
|
|
return true
|
|
|
|
|
end
|
|
|
|
|
return false
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XUiRoomCharacter:IsCanClickBtnTab(characterType)
|
|
|
|
|
if not self.CharIdList then
|
|
|
|
|
return true
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
if not self:CheckBtnTabIsClick() then
|
|
|
|
|
return true
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
if characterType == XCharacterConfigs.CharacterType.Normal and self.IsClickNormal then
|
|
|
|
|
return true
|
|
|
|
|
end
|
|
|
|
|
if characterType == XCharacterConfigs.CharacterType.Isomer and self.IsClickOmer then
|
|
|
|
|
return true
|
|
|
|
|
end
|
|
|
|
|
return false
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XUiRoomCharacter:SetPanelEmptyList(isEmpty)
|
|
|
|
|
if self.Proxy and self.Proxy.SetPanelEmptyList then
|
|
|
|
|
self.Proxy.SetPanelEmptyList(self, isEmpty)
|
|
|
|
|
else
|
|
|
|
|
local curCharIsRobot = self.CurCharacter and XRobotManager.CheckIsRobotId(self.CurCharacter.Id) or false
|
|
|
|
|
|
|
|
|
|
self.BtnQuitTeam.gameObject:SetActiveEx(false)
|
|
|
|
|
self.BtnJoinTeam.gameObject:SetActiveEx(false)
|
|
|
|
|
|
|
|
|
|
self.BtnConsciousness.gameObject:SetActiveEx(not isEmpty and not curCharIsRobot)
|
|
|
|
|
self.BtnFashion.gameObject:SetActiveEx(not isEmpty and not curCharIsRobot)
|
|
|
|
|
self.BtnWeapon.gameObject:SetActiveEx(not isEmpty and not curCharIsRobot)
|
|
|
|
|
self.BtnPartner.gameObject:SetActiveEx(not isEmpty and not curCharIsRobot)
|
|
|
|
|
|
|
|
|
|
self.PanelRoleModel.gameObject:SetActiveEx(not isEmpty)
|
|
|
|
|
self.PanelRoleContent.gameObject:SetActiveEx(not isEmpty)
|
|
|
|
|
self.PanelEmptyList.gameObject:SetActiveEx(isEmpty)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XUiRoomCharacter:UpdatePanelEmptyList()
|
|
|
|
|
if self.Proxy and self.Proxy.UpdatePanelEmptyList then
|
|
|
|
|
self.Proxy.UpdatePanelEmptyList(self, self.CurCharacter.Id)
|
|
|
|
|
else
|
|
|
|
|
local curCharIsRobot = self.CurCharacter and XRobotManager.CheckIsRobotId(self.CurCharacter.Id) or false
|
|
|
|
|
|
|
|
|
|
self.BtnConsciousness.gameObject:SetActiveEx(not curCharIsRobot)
|
|
|
|
|
self.BtnFashion.gameObject:SetActiveEx(not curCharIsRobot)
|
|
|
|
|
self.BtnWeapon.gameObject:SetActiveEx(not curCharIsRobot)
|
|
|
|
|
self.BtnPartner.gameObject:SetActiveEx(not curCharIsRobot)
|
|
|
|
|
|
|
|
|
|
self.BtnJoinTeam.gameObject:SetActiveEx(self.NeedShowBtnJoinTeam and not self:IsRogueLikeAndLock())
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XUiRoomCharacter:CenterToGrid(grid)
|
|
|
|
|
-- local normalizedPosition
|
|
|
|
|
-- local count = self.SViewCharacterList.content.transform.childCount
|
|
|
|
|
-- local index = grid.Transform:GetSiblingIndex()
|
|
|
|
|
-- if index > count / 2 then
|
|
|
|
|
-- normalizedPosition = (index + 1) / count
|
|
|
|
|
-- else
|
|
|
|
|
-- normalizedPosition = (index - 1) / count
|
|
|
|
|
-- end
|
|
|
|
|
-- self.SViewCharacterList.verticalNormalizedPosition = math.max(0, math.min(1, (1 - normalizedPosition)))
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XUiRoomCharacter:UpdateCharacterList(index)
|
|
|
|
|
stagePass = XDataCenter.RoomManager.CheckPlayerStagePass() or XDataCenter.ArenaOnlineManager.CheckStagePass(self.ChallengeId)
|
|
|
|
|
local characterType = CharacterTypeConvert[index]
|
|
|
|
|
local teamCharIdMap = self.TeamCharIdMap
|
|
|
|
|
local selectId = teamCharIdMap[self.TeamSelectPos]
|
|
|
|
|
|
|
|
|
|
if not next(self.CharIdList) then
|
|
|
|
|
self:SetPanelEmptyList(true)
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
self:SetPanelEmptyList(false)
|
|
|
|
|
|
|
|
|
|
self.CurIndex = nil
|
|
|
|
|
self.CharacterIdToIndex = {}
|
|
|
|
|
local useDefaultIndex = true
|
|
|
|
|
if selectId and selectId ~= 0 and (characterType == XCharacterConfigs.CharacterType.Robot or characterType == XCharacterConfigs.GetCharacterType(selectId)) then
|
|
|
|
|
useDefaultIndex = false
|
|
|
|
|
end
|
|
|
|
|
for i, id in ipairs(self.CharIdList) do
|
|
|
|
|
self.CharacterIdToIndex[id] = i
|
|
|
|
|
if self.CurIndex == nil and id == selectId and not useDefaultIndex then
|
|
|
|
|
self.CurIndex = i
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
self.CurIndex = self.CurIndex or 1
|
|
|
|
|
|
|
|
|
|
local charInfo = self:GetCharInfo(self.CurIndex)
|
|
|
|
|
self:UpdateInfo(charInfo)
|
|
|
|
|
|
|
|
|
|
self.DynamicTable:SetDataSource(self.CharIdList)
|
|
|
|
|
self.DynamicTable:ReloadDataASync()
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XUiRoomCharacter:OnDynamicTableEvent(event, index, grid)
|
|
|
|
|
local characterId = self.CharIdList[index]
|
|
|
|
|
if event == DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_ATINDEX then
|
|
|
|
|
if index < 0 or index > #self.CharIdList then return end
|
|
|
|
|
local char = self:GetCharInfo(index)
|
|
|
|
|
grid:UpdateGrid(char, self.StageType)
|
|
|
|
|
|
|
|
|
|
local showTeamBuff = XFubenConfigs.IsCharacterFitTeamBuff(self.TeamBuffId, characterId)
|
|
|
|
|
grid:SetTeamBuff(showTeamBuff)
|
|
|
|
|
|
|
|
|
|
if self.StageType == XDataCenter.FubenManager.StageType.BossSingle then
|
|
|
|
|
local maxStamina = XDataCenter.FubenBossSingleManager.GetMaxStamina()
|
|
|
|
|
local curStamina = maxStamina - XDataCenter.FubenBossSingleManager.GetCharacterChallengeCount(characterId)
|
|
|
|
|
grid:UpdateStamina(curStamina, maxStamina)
|
|
|
|
|
elseif self.StageType == XDataCenter.FubenManager.StageType.Explore then
|
|
|
|
|
local maxStamina = XDataCenter.FubenExploreManager.GetMaxEndurance(XDataCenter.FubenExploreManager.GetCurChapterId())
|
|
|
|
|
local curStamina = maxStamina - XDataCenter.FubenExploreManager.GetEndurance(XDataCenter.FubenExploreManager.GetCurChapterId(), characterId)
|
|
|
|
|
grid:UpdateStamina(curStamina, maxStamina)
|
|
|
|
|
elseif self.StageType == XDataCenter.FubenManager.StageType.ArenaOnline then
|
|
|
|
|
if not stagePass then
|
|
|
|
|
local maxStamina = XArenaOnlineConfigs.MAX_NAILI
|
|
|
|
|
local curStamina = maxStamina - XDataCenter.ArenaOnlineManager.GetCharEndurance(characterId)
|
|
|
|
|
grid:UpdateStamina(curStamina, maxStamina)
|
|
|
|
|
end
|
|
|
|
|
local isShow = XDataCenter.ArenaOnlineManager.CheckActiveBuffOnByCharId(characterId)
|
|
|
|
|
grid:SetTeamBuff(isShow)
|
|
|
|
|
elseif self.StageType == XDataCenter.FubenManager.StageType.InfestorExplore and XDataCenter.FubenInfestorExploreManager.IsInSectionOne() then
|
|
|
|
|
local hpPercent = XDataCenter.FubenInfestorExploreManager.GetCharacterHpPrecent(char.Id)
|
|
|
|
|
grid:UpdateStaminaByPercent(hpPercent)
|
|
|
|
|
elseif self:IsRogueLikeType() then
|
|
|
|
|
grid:SetArrowUp(XDataCenter.FubenRogueLikeManager.IsTeamEffectCharacter(characterId))
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
grid:SetSelect(self.CurIndex == index)
|
|
|
|
|
grid:SetInTeam(false)
|
|
|
|
|
for pos, id in pairs(self.TeamCharIdMap) do
|
|
|
|
|
if id > 0 and self.CharacterIdToIndex[id] == index then
|
|
|
|
|
grid:SetInTeam(true, CSXTextManagerGetText("CommonInTheTeam"), pos)
|
|
|
|
|
break
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--追击玩法
|
|
|
|
|
if self:IsChessPursuitType() then
|
|
|
|
|
local inTeam, gridId = self:CheckIsInChessPursuit(characterId)
|
|
|
|
|
if inTeam then
|
|
|
|
|
grid:SetInTeam(inTeam, CSXTextManagerGetText("BfrtFightEchelonTitleSimple", gridId))
|
|
|
|
|
end
|
|
|
|
|
if self:IsSameCharIdInTeam(characterId) then
|
|
|
|
|
grid:SetSameRoleTag(true)
|
|
|
|
|
end
|
|
|
|
|
elseif self:IsCoutpleCombatType() then
|
|
|
|
|
--分光双星
|
2024-09-01 20:49:41 +00:00
|
|
|
|
grid:UpdateRecommendTag(self.StageId)
|
2023-07-14 19:35:33 +00:00
|
|
|
|
if XDataCenter.FubenCoupleCombatManager.CheckCharacterUsed(self.StageId, characterId) then
|
|
|
|
|
grid:SetSameRoleTag(true, CSXTextManagerGetText("CoupleCombatRobotUsed"))
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
grid.Transform:SetAsLastSibling()
|
|
|
|
|
elseif event == DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_TOUCHED then
|
|
|
|
|
self.CurIndex = index
|
|
|
|
|
self:UpdateInfo(grid.Character)
|
|
|
|
|
self.DynamicTable:ReloadDataSync()
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XUiRoomCharacter:GetCharInfo(index)
|
|
|
|
|
local charId = self.CharIdList[index]
|
|
|
|
|
if self.Proxy and self.Proxy.GetCharInfo then
|
|
|
|
|
return self.Proxy.GetCharInfo(self, charId)
|
|
|
|
|
else
|
|
|
|
|
local charInfo = {}
|
|
|
|
|
if XRobotManager.CheckIsRobotId(charId) then
|
|
|
|
|
charInfo.Id = charId
|
|
|
|
|
charInfo.IsRobot = true
|
|
|
|
|
else
|
|
|
|
|
charInfo = XDataCenter.CharacterManager.GetCharacter(charId)
|
|
|
|
|
end
|
|
|
|
|
return charInfo
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XUiRoomCharacter:UpdateInfo(character)
|
|
|
|
|
if character then
|
|
|
|
|
self.CurCharacter = character
|
|
|
|
|
end
|
|
|
|
|
if not self.CurCharacter then return end
|
|
|
|
|
|
|
|
|
|
self:UpdateTeamBtn()
|
|
|
|
|
self:UpdateRoleModel()
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XUiRoomCharacter:UpdateTeamBtn()
|
|
|
|
|
if self.Proxy and self.Proxy.UpdateTeamBtn then
|
|
|
|
|
self.Proxy.UpdateTeamBtn(self, self.CurCharacter.Id)
|
|
|
|
|
else
|
|
|
|
|
if not (self.TeamCharIdMap and next(self.TeamCharIdMap)) then
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
local id = self.CurCharacter.Id
|
|
|
|
|
local isRobot = XRobotManager.CheckIsRobotId(id)
|
|
|
|
|
local useFashion = true
|
|
|
|
|
if isRobot then
|
|
|
|
|
useFashion = XRobotManager.CheckUseFashion(id)
|
|
|
|
|
end
|
|
|
|
|
self.BtnPartner:SetDisable(isRobot, not isRobot)
|
|
|
|
|
self.BtnFashion:SetDisable(not useFashion, useFashion)
|
|
|
|
|
self.BtnConsciousness:SetDisable(isRobot, not isRobot)
|
|
|
|
|
self.BtnWeapon:SetDisable(isRobot, not isRobot)
|
|
|
|
|
|
|
|
|
|
--在当前操作的队伍中
|
|
|
|
|
local isInTeam = self:IsInTeam(self.CurCharacter.Id)
|
|
|
|
|
|
|
|
|
|
self.NeedShowBtnJoinTeam = not isInTeam
|
|
|
|
|
|
|
|
|
|
self.BtnQuitTeam.gameObject:SetActiveEx(isInTeam and not self.IsHideQuitButton)
|
|
|
|
|
self.BtnJoinTeam.gameObject:SetActiveEx(false)
|
|
|
|
|
|
|
|
|
|
-- 爬塔玩法、并且角色被锁定、不能编入、卸下队伍
|
|
|
|
|
if self:IsRogueLikeAndLock() then
|
|
|
|
|
self.BtnQuitTeam.gameObject:SetActiveEx(false)
|
|
|
|
|
self.BtnJoinTeam.gameObject:SetActiveEx(false)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XUiRoomCharacter:IsInTeam(id)
|
|
|
|
|
if not (self.TeamCharIdMap and next(self.TeamCharIdMap)) then
|
|
|
|
|
return false
|
|
|
|
|
end
|
|
|
|
|
for _, v in pairs(self.TeamCharIdMap) do
|
|
|
|
|
if id == v then
|
|
|
|
|
return true
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
return false
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
-- 区域联机周刷新
|
|
|
|
|
function XUiRoomCharacter:OnArenaOnlineWeekRefrsh()
|
|
|
|
|
if self.StageType == XDataCenter.FubenManager.StageType.ArenaOnline then
|
|
|
|
|
XDataCenter.ArenaOnlineManager.RunMain()
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XUiRoomCharacter:IsRogueLikeType()
|
|
|
|
|
return self.StageType == XDataCenter.FubenManager.StageType.RogueLike
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XUiRoomCharacter:IsRogueLikeAndLock()
|
|
|
|
|
return self:IsRogueLikeType() and XDataCenter.FubenRogueLikeManager.IsRogueLikeCharacterLock()
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XUiRoomCharacter:IsWorldBossType()
|
|
|
|
|
return self.StageType == XDataCenter.FubenManager.StageType.WorldBoss
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XUiRoomCharacter:IsChessPursuitType()
|
|
|
|
|
return self.StageType == XDataCenter.FubenManager.StageType.ChessPursuit
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XUiRoomCharacter:IsCoutpleCombatType()
|
|
|
|
|
return self.StageType == XDataCenter.FubenManager.StageType.CoupleCombat
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XUiRoomCharacter:IsNewCharType()
|
|
|
|
|
return self.StageType == XDataCenter.FubenManager.StageType.NewCharAct
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XUiRoomCharacter:IsHackType()
|
|
|
|
|
return self.StageType == XDataCenter.FubenManager.StageType.Hack
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XUiRoomCharacter:IsSummerEpisodePhotoType()
|
|
|
|
|
return XDataCenter.FubenSpecialTrainManager.IsPhotoStage(self.StageId)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XUiRoomCharacter:IsActivityBossSingle()
|
|
|
|
|
return self.StageType == XDataCenter.FubenManager.StageType.ActivityBossSingle
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XUiRoomCharacter:UpdateRoleModel()
|
|
|
|
|
local characterId = self.CurCharacter and self.CurCharacter.Id
|
|
|
|
|
if not characterId then return end
|
|
|
|
|
local targetPanelRole = self.PanelRoleModel
|
|
|
|
|
local targetUiName = self.Name
|
|
|
|
|
local func = function()
|
|
|
|
|
self:UpdatePanelEmptyList()
|
|
|
|
|
end
|
|
|
|
|
local characterFunc = function(model)
|
|
|
|
|
if not model then
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
self.PanelDrag.Target = model.transform
|
|
|
|
|
if self.SelectTabBtnIndex == TabBtnIndex.Normal then
|
|
|
|
|
self.ImgEffectHuanren.gameObject:SetActiveEx(true)
|
|
|
|
|
elseif self.SelectTabBtnIndex == TabBtnIndex.Isomer then
|
|
|
|
|
self.ImgEffectHuanren1.gameObject:SetActiveEx(true)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
self.ImgEffectHuanren.gameObject:SetActiveEx(false)
|
|
|
|
|
self.ImgEffectHuanren1.gameObject:SetActiveEx(false)
|
|
|
|
|
|
|
|
|
|
if XRobotManager.CheckIsRobotId(self.CurCharacter.Id) then
|
|
|
|
|
local robotId = self.CurCharacter.Id
|
|
|
|
|
characterId = XRobotManager.GetCharacterId(robotId)
|
|
|
|
|
local isOwn = XDataCenter.CharacterManager.IsOwnCharacter(characterId)
|
|
|
|
|
|
|
|
|
|
if isOwn and XRobotManager.CheckUseFashion(robotId) then
|
|
|
|
|
local character = XDataCenter.CharacterManager.GetCharacter(characterId)
|
|
|
|
|
local viewModel = character:GetCharacterViewModel()
|
|
|
|
|
self.RoleModelPanel:UpdateCharacterModel(characterId, targetPanelRole, targetUiName, characterFunc, func, viewModel:GetFashionId())
|
|
|
|
|
else
|
|
|
|
|
local robotCfg = XRobotManager.GetRobotTemplate(robotId)
|
|
|
|
|
self.RoleModelPanel:UpdateRobotModel(robotId, characterId, func, robotCfg.FashionId, robotCfg.WeaponId, characterFunc)
|
|
|
|
|
end
|
|
|
|
|
else
|
|
|
|
|
self.RoleModelPanel:UpdateCharacterModel(self.CurCharacter.Id, targetPanelRole, targetUiName, characterFunc, func)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XUiRoomCharacter:OnBtnBackClick()
|
|
|
|
|
if self.TeamResultCb then
|
|
|
|
|
self.TeamResultCb(self.TeamCharIdMap)
|
|
|
|
|
end
|
|
|
|
|
self:Close()
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XUiRoomCharacter:OnBtnJoinTeamClick()
|
|
|
|
|
local id = self.CurCharacter.Id
|
|
|
|
|
if self.StageType == XDataCenter.FubenManager.StageType.BossSingle then
|
|
|
|
|
local challengeCount = XDataCenter.FubenBossSingleManager.GetCharacterChallengeCount(id)
|
|
|
|
|
if challengeCount >= XDataCenter.FubenBossSingleManager.GetMaxStamina() then
|
|
|
|
|
XUiManager.TipCode(XCode.FubenBossSingleCharacterPointsNotEnough)
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
elseif self.StageType == XDataCenter.FubenManager.StageType.ArenaOnline then
|
|
|
|
|
local stagePass = XDataCenter.RoomManager.CheckPlayerStagePass() or XDataCenter.ArenaOnlineManager.CheckStagePass(self.ChallengeId)
|
|
|
|
|
if not stagePass then
|
|
|
|
|
local cost = XDataCenter.ArenaOnlineManager.GetStageEndurance(self.ChallengeId)
|
|
|
|
|
local cur = XArenaOnlineConfigs.MAX_NAILI - XDataCenter.ArenaOnlineManager.GetCharEndurance(id)
|
|
|
|
|
if cost > cur then
|
|
|
|
|
XUiManager.TipText("ArenaOnlineCharEnduranceTip", XUiManager.UiTipType.Tip)
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local joinFunc = function(isReset)
|
|
|
|
|
if isReset then
|
|
|
|
|
self:ResetTeamData()
|
|
|
|
|
else
|
|
|
|
|
for k, v in pairs(self.TeamCharIdMap) do
|
|
|
|
|
if XRobotManager.CheckIsRobotId(v) and not XRobotManager.CheckIsRobotId(id) then
|
|
|
|
|
local robotTemplate = XRobotManager.GetRobotTemplate(v)
|
|
|
|
|
local charId = robotTemplate and robotTemplate.CharacterId or 0
|
|
|
|
|
if charId == id then
|
|
|
|
|
self.TeamCharIdMap[k] = 0
|
|
|
|
|
break
|
|
|
|
|
end
|
|
|
|
|
elseif not XRobotManager.CheckIsRobotId(v) and XRobotManager.CheckIsRobotId(id) then
|
|
|
|
|
local robotTemplate = XRobotManager.GetRobotTemplate(id)
|
|
|
|
|
local charId = robotTemplate and robotTemplate.CharacterId or 0
|
|
|
|
|
if v == charId then
|
|
|
|
|
self.TeamCharIdMap[k] = 0
|
|
|
|
|
break
|
|
|
|
|
end
|
|
|
|
|
else
|
|
|
|
|
if v == id then
|
|
|
|
|
self.TeamCharIdMap[k] = 0
|
|
|
|
|
break
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
self.TeamCharIdMap[self.TeamSelectPos] = id
|
|
|
|
|
|
|
|
|
|
if self.TeamResultCb then
|
|
|
|
|
self.TeamResultCb(self.TeamCharIdMap)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
self:Close()
|
|
|
|
|
end
|
|
|
|
|
local isSpecialStage = XFubenSpecialTrainConfig.IsSpecialTrainStage(self.StageId, XFubenSpecialTrainConfig.StageType.Photo) or
|
|
|
|
|
XFubenSpecialTrainConfig.IsSpecialTrainStage(self.StageId, XFubenSpecialTrainConfig.StageType.Music) or
|
|
|
|
|
XFubenSpecialTrainConfig.IsSpecialTrainStage(self.StageId, XFubenSpecialTrainConfig.StageType.Rhythm)
|
|
|
|
|
if not self.NotReset and (not isSpecialStage) then
|
|
|
|
|
-- 角色类型不一致拦截
|
|
|
|
|
local inTeamCharacterType = self:GetTeamCharacterType()
|
|
|
|
|
if inTeamCharacterType then
|
|
|
|
|
local characterType = id and id ~= 0 and XCharacterConfigs.GetCharacterType(id)
|
|
|
|
|
if characterType and characterType ~= inTeamCharacterType then
|
|
|
|
|
local content = CSXTextManagerGetText("TeamCharacterTypeNotSame")
|
|
|
|
|
local sureCallBack = function()
|
|
|
|
|
local isReset = true
|
|
|
|
|
joinFunc(isReset)
|
|
|
|
|
end
|
|
|
|
|
XUiManager.DialogTip(nil, content, XUiManager.DialogType.Normal, nil, sureCallBack)
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
if self:IsChessPursuitType() then
|
|
|
|
|
local isIn, gridId, teamDataIndex = self:CheckIsInChessPursuit(id)
|
|
|
|
|
if isIn then
|
|
|
|
|
local content = CSXTextManagerGetText("ChessPursuitDeploySwitchTipsContent", gridId)
|
|
|
|
|
local sureCallBack = function()
|
|
|
|
|
if not XDataCenter.ChessPursuitManager.CheckIsSwapTeamPos(gridId, teamDataIndex, self.TeamGridIndex, self.TeamSelectPos) then
|
|
|
|
|
XUiManager.TipText("ChessPursuitNotSwitchCharacter")
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
joinFunc()
|
|
|
|
|
end
|
|
|
|
|
XUiManager.DialogTip(nil, content, XUiManager.DialogType.Normal, nil, sureCallBack)
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
joinFunc()
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XUiRoomCharacter:OnBtnQuitTeamClick()
|
|
|
|
|
local count = 0
|
|
|
|
|
for _, v in pairs(self.TeamCharIdMap) do
|
|
|
|
|
if v > 0 then
|
|
|
|
|
count = count + 1
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local id = self.CurCharacter.Id
|
|
|
|
|
for k, v in pairs(self.TeamCharIdMap) do
|
|
|
|
|
if v == id then
|
|
|
|
|
self.TeamCharIdMap[k] = 0
|
|
|
|
|
break
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
if self.TeamResultCb then
|
|
|
|
|
self.TeamResultCb(self.TeamCharIdMap)
|
|
|
|
|
end
|
|
|
|
|
self:Close()
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XUiRoomCharacter:OnBtnFashionClick()
|
|
|
|
|
local id = self.CurCharacter.Id
|
|
|
|
|
local isRobot = XRobotManager.CheckIsRobotId(id)
|
|
|
|
|
if isRobot and XRobotManager.CheckUseFashion(id) then
|
|
|
|
|
local characterId = XRobotManager.GetCharacterId(id)
|
|
|
|
|
local isOwn = XDataCenter.CharacterManager.IsOwnCharacter(characterId)
|
|
|
|
|
if not isOwn then
|
|
|
|
|
XUiManager.TipText("CharacterLock")
|
|
|
|
|
return
|
|
|
|
|
else
|
|
|
|
|
XLuaUiManager.Open("UiFashion", characterId, nil, nil, XUiConfigs.OpenUiType.RobotFashion)
|
|
|
|
|
end
|
|
|
|
|
else
|
|
|
|
|
XLuaUiManager.Open("UiFashion", id)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XUiRoomCharacter:OnBtnBtnTeachingClick()
|
|
|
|
|
local id = self.CurCharacter.Id
|
|
|
|
|
XDataCenter.PracticeManager.OpenUiFubenPractice(id, true)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XUiRoomCharacter:GetTeamCharacterType()
|
|
|
|
|
for k, v in pairs(self.TeamCharIdMap) do
|
|
|
|
|
if v ~= 0 then
|
|
|
|
|
return XCharacterConfigs.GetCharacterType(v)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XUiRoomCharacter:GetCharacterId(id)
|
|
|
|
|
if XRobotManager.CheckIsRobotId(id) then
|
|
|
|
|
return XRobotManager.GetRobotTemplate(id).CharacterId
|
|
|
|
|
else
|
|
|
|
|
return id
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XUiRoomCharacter:GetAbility(id)
|
|
|
|
|
if XRobotManager.CheckIsRobotId(id) then
|
|
|
|
|
return XRobotManager.GetRobotAbility(id)
|
|
|
|
|
else
|
|
|
|
|
return XDataCenter.CharacterManager.GetCharacter(id).Ability
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XUiRoomCharacter:GetLevel(id)
|
|
|
|
|
if XRobotManager.CheckIsRobotId(id) then
|
|
|
|
|
return XRobotManager.GetRobotTemplate(id).CharacterLevel
|
|
|
|
|
else
|
|
|
|
|
return XDataCenter.CharacterManager.GetCharacter(id).Level
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XUiRoomCharacter:GetQuality(id)
|
|
|
|
|
if XRobotManager.CheckIsRobotId(id) then
|
|
|
|
|
return XRobotManager.GetRobotTemplate(id).CharacterQuality
|
|
|
|
|
else
|
|
|
|
|
return XDataCenter.CharacterManager.GetCharacter(id).Quality
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XUiRoomCharacter:Filter(selectTagGroupDic, sortTagId, isThereFilterDataCb)
|
|
|
|
|
|
|
|
|
|
local judgeCb = function(groupId, tagValue, characterId)
|
|
|
|
|
local char = {}
|
|
|
|
|
if XRobotManager.CheckIsRobotId(characterId) then
|
|
|
|
|
char.Id = characterId
|
|
|
|
|
char.IsRobot = true
|
|
|
|
|
else
|
|
|
|
|
char = XDataCenter.CharacterManager.GetCharacter(characterId)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local compareValue
|
|
|
|
|
local detailConfig
|
|
|
|
|
if char.IsRobot then
|
|
|
|
|
local robotTemplate = XRobotManager.GetRobotTemplate(char.Id)
|
|
|
|
|
detailConfig = XCharacterConfigs.GetCharDetailTemplate(robotTemplate.CharacterId)
|
|
|
|
|
else
|
|
|
|
|
detailConfig = XCharacterConfigs.GetCharDetailTemplate(char.Id)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
if groupId == XRoomCharFilterTipsConfigs.EnumFilterTagGroup.Career then
|
|
|
|
|
compareValue = detailConfig.Career
|
|
|
|
|
if compareValue == tagValue then
|
|
|
|
|
-- 当前角色满足该标签
|
|
|
|
|
return true
|
|
|
|
|
end
|
|
|
|
|
elseif groupId == XRoomCharFilterTipsConfigs.EnumFilterTagGroup.Element then
|
|
|
|
|
compareValue = detailConfig.ObtainElementList
|
|
|
|
|
for _, element in pairs(compareValue) do
|
|
|
|
|
if element == tagValue then
|
|
|
|
|
-- 当前角色满足该标签
|
|
|
|
|
return true
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
else
|
|
|
|
|
XLog.Error(string.format("XUiRoomCharacter:Filter函数错误,没有处理排序组:%s的逻辑", groupId))
|
|
|
|
|
return false
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
XDataCenter.RoomCharFilterTipsManager.Filter(self.TagCacheDic, selectTagGroupDic, self.AllCharIdList, judgeCb,
|
|
|
|
|
function(filteredData)
|
|
|
|
|
self:FilterRefresh(filteredData, sortTagId)
|
|
|
|
|
end,
|
|
|
|
|
isThereFilterDataCb)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XUiRoomCharacter:FilterRefresh(filteredData, sortTagId)
|
|
|
|
|
self.CharIdList = filteredData
|
|
|
|
|
|
|
|
|
|
if not next(filteredData) then
|
|
|
|
|
self:SetPanelEmptyList(true)
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
self:SetPanelEmptyList(false)
|
|
|
|
|
|
|
|
|
|
if self.SortFunction[sortTagId] then
|
|
|
|
|
table.sort(filteredData, self.SortFunction[sortTagId])
|
|
|
|
|
else
|
|
|
|
|
XLog.Error(string.format("XUiRoomCharacter:FilterRefresh函数错误,没有定义标签:%s的排序函数", sortTagId))
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
self.CharacterIdToIndex = {}
|
|
|
|
|
for index, id in ipairs(filteredData) do
|
|
|
|
|
self.CharacterIdToIndex[id] = index
|
|
|
|
|
end
|
|
|
|
|
self.CurIndex = 1
|
|
|
|
|
|
|
|
|
|
local charInfo = self:GetCharInfo(self.CurIndex)
|
|
|
|
|
self:UpdateInfo(charInfo)
|
|
|
|
|
|
|
|
|
|
self.DynamicTable:SetDataSource(filteredData)
|
|
|
|
|
self.DynamicTable:ReloadDataASync()
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XUiRoomCharacter:CheckIsInChessPursuit(characterId)
|
|
|
|
|
if not self:IsChessPursuitType() then
|
|
|
|
|
return false
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local isIn, gridId, teamDataIndex = XDataCenter.ChessPursuitManager.CheckIsInChessPursuit(self.MapId, characterId, self.TeamGridIndex)
|
|
|
|
|
return isIn, gridId, teamDataIndex
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XUiRoomCharacter:ShowChessPursuitDialogTip(characterId, sureCallBack)
|
|
|
|
|
local name = XCharacterConfigs.GetCharacterName(characterId)
|
|
|
|
|
local title = CSXTextManagerGetText("BfrtDeployTipTitle")
|
|
|
|
|
local content = CSXTextManagerGetText("ChessPursuitReplaceCharacterTip", name)
|
|
|
|
|
XUiManager.DialogTip(title, content, XUiManager.DialogType.Normal, nil, sureCallBack)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XUiRoomCharacter:IsSameCharIdInTeam(characterId)
|
|
|
|
|
if self:IsInTeam(characterId) then
|
|
|
|
|
return false
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
characterId = XRobotManager.CheckIdToCharacterId(characterId)
|
|
|
|
|
local inTeamCharId
|
|
|
|
|
for _, charId in pairs(self.TeamCharIdMap) do
|
|
|
|
|
inTeamCharId = XRobotManager.CheckIdToCharacterId(charId)
|
|
|
|
|
if characterId == inTeamCharId then
|
|
|
|
|
return true
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
return false
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--================
|
|
|
|
|
--接受到活动重置或结束消息时
|
|
|
|
|
--================
|
|
|
|
|
function XUiRoomCharacter:OnResetEvent(stageType)
|
|
|
|
|
if self.StageType ~= stageType then return end
|
|
|
|
|
if self.Proxy.OnResetEvent then self.Proxy.OnResetEvent(self) end
|
|
|
|
|
end
|