PGRData/Script/matrix/xui/xuibfrt/XUiBfrtRoomCharacter.lua

679 lines
27 KiB
Lua
Raw Normal View History

local XUiGridBfrtCharacter = require("XUi/XUiBfrt/XUiGridBfrtCharacter")
local XUiPanelRoleModel = require("XUi/XUiCharacter/XUiPanelRoleModel")
local CSXTextManagerGetText = CS.XTextManager.GetText
local ANIMATION_OPEN = "AniBfrtRoomCharacterBegin"
local CONDITION_HEX_COLOR = {
[true] = "000000FF",
[false] = "BC0F23FF",
}
local TabBtnIndex = {
Normal = 1,
Isomer = 2,
}
local CharacterTypeConvert = {
[TabBtnIndex.Normal] = XCharacterConfigs.CharacterType.Normal,
[TabBtnIndex.Isomer] = XCharacterConfigs.CharacterType.Isomer,
}
local TabBtnIndexConvert = {
[XCharacterConfigs.CharacterType.Normal] = TabBtnIndex.Normal,
[XCharacterConfigs.CharacterType.Isomer] = TabBtnIndex.Isomer,
}
local XUiBfrtRoomCharacter = XLuaUiManager.Register(XLuaUi, "UiBfrtRoomCharacter")
function XUiBfrtRoomCharacter:OnAwake()
self:InitAutoScript()
self:InitComponentState()
local root = self.UiModelGo.transform
self.PanelRoleModel = root:FindTransform("PanelRoleModel")
self.ImgEffectHuanren = root:FindTransform("ImgEffectHuanren")
self.ImgEffectHuanren1 = root:FindTransform("ImgEffectHuanren1")
self.RoleModelPanel = XUiPanelRoleModel.New(self.PanelRoleModel, self.Name, nil, true, nil, true)
self.GridIndex = {}
self.TagCacheDic = {}
self.SortFunction = {}
self.SortFunction[XRoomCharFilterTipsConfigs.EnumSortTag.Default] = function(leftCharacter, rightCharacter)
local leftNotInTeam = not self:CheckCharacterInTeam(leftCharacter.Id)
local leftNotInTeamList = self.CheckIsInTeamListCb(leftCharacter.Id) == nil
local leftAbility = leftCharacter.Ability
local leftLevel = leftCharacter.Level
local leftQuality = leftCharacter.Quality
local leftPriority = XCharacterConfigs.GetCharacterPriority(leftCharacter.Id)
local rightNotInTeam = not self:CheckCharacterInTeam(rightCharacter.Id)
local rightNotInTeamList = self.CheckIsInTeamListCb(rightCharacter.Id) == nil
local rightAbility = rightCharacter.Ability
local rightLevel = rightCharacter.Level
local rightQuality = rightCharacter.Quality
local rightPriority = XCharacterConfigs.GetCharacterPriority(rightCharacter.Id)
if leftNotInTeam ~= rightNotInTeam then
return leftNotInTeam
end
if leftNotInTeamList ~= rightNotInTeamList then
return leftNotInTeamList
end
if leftAbility ~= rightAbility then
return leftAbility > rightAbility
end
if leftLevel ~= rightLevel then
return leftLevel > rightLevel
end
if leftQuality ~= rightQuality then
return leftQuality > rightQuality
end
return leftPriority < rightPriority
end
self.SortFunction[XRoomCharFilterTipsConfigs.EnumSortTag.Quality] = function(leftCharacter, rightCharacter)
local leftQuality = leftCharacter.Quality
local rightQuality = rightCharacter.Quality
if leftQuality ~= rightQuality then
return leftQuality > rightQuality
end
return self.SortFunction[XRoomCharFilterTipsConfigs.EnumSortTag.Default](leftCharacter, rightCharacter)
end
self.SortFunction[XRoomCharFilterTipsConfigs.EnumSortTag.Level] = function(leftCharacter, rightCharacter)
local leftLevel = leftCharacter.Level
local rightLevel = rightCharacter.Level
if leftLevel ~= rightLevel then
return leftLevel > rightLevel
end
return self.SortFunction[XRoomCharFilterTipsConfigs.EnumSortTag.Default](leftCharacter, rightCharacter)
end
self.SortFunction[XRoomCharFilterTipsConfigs.EnumSortTag.Ability] = function(leftCharacter, rightCharacter)
local leftAbility = leftCharacter.Ability
local rightAbility = rightCharacter.Ability
if leftAbility ~= rightAbility then
return leftAbility > rightAbility
end
return self.SortFunction[XRoomCharFilterTipsConfigs.EnumSortTag.Default](leftCharacter, rightCharacter)
end
self.CharacterGrids = {}
end
function XUiBfrtRoomCharacter:OnStart(viewData)
self:UpdateViewData(viewData)
self:UpdateTxtRequireAbility()
self:PlayAnimation(ANIMATION_OPEN)
XEventManager.AddEventListener(XEventId.EVENT_TEAM_PREFAB_SELECT, self.UpdateTeamPrefab, self)
end
function XUiBfrtRoomCharacter:OnDestroy()
XEventManager.RemoveEventListener(XEventId.EVENT_TEAM_PREFAB_SELECT, self.UpdateTeamPrefab, self)
end
function XUiBfrtRoomCharacter:OnEnable()
CS.XGraphicManager.UseUiLightDir = true
self:UpdateCurCharacterGrid()
end
function XUiBfrtRoomCharacter:OnDisable()
CS.XGraphicManager.UseUiLightDir = false
end
function XUiBfrtRoomCharacter:InitComponentState()
self.GridBfrtCharacter.gameObject:SetActiveEx(false)
self.BtnJoinTeam.gameObject:SetActiveEx(false)
self.AssetPanel = XUiPanelAsset.New(self, self.PanelAsset, XDataCenter.ItemManager.ItemId.FreeGem, XDataCenter.ItemManager.ItemId.ActionPoint, XDataCenter.ItemManager.ItemId.Coin)
end
function XUiBfrtRoomCharacter:UpdateViewData(viewData)
if not viewData.TeamCharacterIdList or not viewData.TeamSelectPos then
XLog.Error("XUiBfrtRoomCharacter:UpdateViewData error: TeamCharacterIdList or TeamSelectPos do not exist!")
return
end
self.EchelonId = viewData.EchelonId
self.GroupId = viewData.BfrtGroupId
self.StageId = viewData.StageId
self.RequireAbility = viewData.RequireAbility
self.TeamCharacterIdList = viewData.TeamCharacterIdList
self.TeamSelectPos = viewData.TeamSelectPos
self.EchelonIndex = viewData.EchelonIndex
self.EchelonType = viewData.EchelonType
self.CheckIsInTeamListCb = viewData.CheckIsInTeamListCb
self.CharacterSwapEchelonCb = viewData.CharacterSwapEchelonCb
self.TeamResultCb = viewData.TeamResultCb
self.EchelonRequireCharacterNum = viewData.EchelonRequireCharacterNum
self.CharacterLimitType = XFubenConfigs.GetStageCharacterLimitType(self.StageId)
self.LimitBuffId = XFubenConfigs.GetStageCharacterLimitBuffId(self.StageId)
self:InitRequireCharacterInfo()
self:InitCharacterTypeBtns()
end
function XUiBfrtRoomCharacter: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 XUiBfrtRoomCharacter:ResetTeamData()
self.TeamCharacterIdList = { 0, 0, 0 }
end
function XUiBfrtRoomCharacter:RefreshCharacterTypeTips()
local limitBuffId = self.LimitBuffId
local characterType = CharacterTypeConvert[self.SelectTabBtnIndex]
local characterLimitType = self.CharacterLimitType
local text = XFubenConfigs.GetStageCharacterLimitTextSelectCharacter(characterLimitType, characterType, limitBuffId)
self.TxtRequireCharacter.text = text
end
function XUiBfrtRoomCharacter:InitCharacterTypeBtns()
self.BtnTabShougezhe.gameObject:SetActiveEx(not XFunctionManager.CheckFunctionFitter(XFunctionManager.FunctionName.Isomer))
local tabBtns = { self.BtnTabGouzaoti, self.BtnTabShougezhe }
self.PanelCharacterTypeBtns:Init(tabBtns, function(index) self:TrySelectCharacterType(index) end)
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)
--检查选择角色类型是否和副本限制类型冲突
local characterType = XDataCenter.FubenManager.GetDefaultCharacterTypeByCharacterLimitType(self.CharacterLimitType)
local tempCharacterType = self:GetTeamCharacterType()
if tempCharacterType and not (tempCharacterType == XCharacterConfigs.CharacterType.Normal and lockGouzaoti
or tempCharacterType == XCharacterConfigs.CharacterType.Isomer and lockShougezhe) then
characterType = tempCharacterType
end
self.PanelCharacterTypeBtns:SelectIndex(TabBtnIndexConvert[characterType])
end
function XUiBfrtRoomCharacter:TrySelectCharacterType(index)
local characterType = CharacterTypeConvert[index]
if characterType == XCharacterConfigs.CharacterType.Isomer and not XFunctionManager.DetectionFunction(XFunctionManager.FunctionName.Isomer) 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 XUiBfrtRoomCharacter:OnSelectCharacterType(index)
if self.SelectTabBtnIndex == index then return end
self.SelectTabBtnIndex = index
XDataCenter.RoomCharFilterTipsManager.Reset()
local characterType = CharacterTypeConvert[index]
local charlist = XDataCenter.CharacterManager.GetOwnCharacterList(characterType)
table.sort(charlist, self.SortFunction[XRoomCharFilterTipsConfigs.EnumSortTag.Default])
self:RefreshCharacterTypeTips()
self:UpdateCharacterList(charlist)
end
function XUiBfrtRoomCharacter:UpdateCharacterList(charlist)
if not next(charlist) then
self:SetPanelEmptyList(true)
return
end
self:SetPanelEmptyList(false)
for _, item in pairs(self.CharacterGrids) do
item.GameObject:SetActiveEx(false)
end
local charDic = {}
for i = 1, #charlist do
local character = charlist[i]
local characterId = character.Id
charDic[characterId] = character
local grid = self.CharacterGrids[characterId]
if not grid then
local item = CS.UnityEngine.Object.Instantiate(self.GridBfrtCharacter)
grid = XUiGridBfrtCharacter.New(self, item, character)
grid.Transform:SetParent(self.PanelRoleContent, false)
self.GridIndex[i] = grid
else
self.GridIndex[i]:Refresh(character)
end
self.CharacterGrids[characterId] = self.GridIndex[i]
self.CharacterGrids[characterId]:SetInTeam(self.CheckIsInTeamListCb(characterId))
end
local characterType = CharacterTypeConvert[self.SelectTabBtnIndex]
local teamCharIdMap = self.TeamCharacterIdList
local teamSelectPos = self.TeamSelectPos
local selectId = teamCharIdMap[teamSelectPos]
if not selectId or selectId == 0
or not self.CharacterGrids[selectId]
or characterType ~= XCharacterConfigs.GetCharacterType(selectId)
or not charDic[selectId]
then
selectId = charlist[1].Id
end
self:OnSelectCharacter(selectId)
end
function XUiBfrtRoomCharacter:SetPanelEmptyList(isEmpty)
self.BtnQuitTeam.gameObject:SetActiveEx(false)
self.BtnJoinTeam.gameObject:SetActiveEx(false)
self.BtnConsciousness.gameObject:SetActiveEx(not isEmpty)
self.BtnFashion.gameObject:SetActiveEx(not isEmpty)
self.BtnWeapon.gameObject:SetActiveEx(not isEmpty)
self.BtnPartner.gameObject:SetActiveEx(not isEmpty)
self.PanelRoleModel.gameObject:SetActiveEx(not isEmpty)
self.PanelRoleContent.gameObject:SetActiveEx(not isEmpty)
self.PanelEmptyList.gameObject:SetActiveEx(isEmpty)
end
function XUiBfrtRoomCharacter: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 XUiBfrtRoomCharacter:OnSelectCharacter(selectId)
if not selectId then
return
end
self.CurCharacterId = selectId
if self.CurCharacterGrid then
self.CurCharacterGrid:SetSelect(false)
end
self.CurCharacterGrid = self.CharacterGrids[self.CurCharacterId]
self.CurCharacterGrid:SetSelect(true)
self:CenterToGrid(self.CurCharacterGrid)
self:UpdateCurCharacterGrid()
end
function XUiBfrtRoomCharacter:UpdateCurCharacterGrid()
local character = XDataCenter.CharacterManager.GetCharacter(self.CurCharacterId)
self.CurCharacterGrid:Refresh(character)
self:UpdateTeamBtn()
self:UpdateTxtRequireAbilityColor()
self:UpdateRoleModel()
end
function XUiBfrtRoomCharacter:UpdateTeamBtn()
if not (self.TeamCharacterIdList and next(self.TeamCharacterIdList)) then
return
end
local isInTeam = self:CheckCharacterInTeam(self.CurCharacterId)
self.BtnQuitTeam.gameObject:SetActiveEx(isInTeam)
self.BtnJoinTeam.gameObject:SetActiveEx(not isInTeam)
end
function XUiBfrtRoomCharacter:UpdateTxtRequireAbility()
self.TxtRequireAbility.text = self.RequireAbility
self.TxtEchelonName.text = XDataCenter.BfrtManager.GetEchelonNameTxt(self.EchelonType, self.EchelonIndex)
end
function XUiBfrtRoomCharacter:UpdateTxtRequireAbilityColor()
local curCharacter = XDataCenter.CharacterManager.GetCharacter(self.CurCharacterId)
local passed = curCharacter and curCharacter.Ability >= self.RequireAbility or false
self.TxtRequireAbility.color = XUiHelper.Hexcolor2Color(CONDITION_HEX_COLOR[passed])
end
function XUiBfrtRoomCharacter:UpdateRoleModel()
local characterId = self.CurCharacterId
if not characterId then return end
local targetPanelRole = self.PanelRoleModel
local targetUiName = self.Name
local charaterFunc = 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)
self.RoleModelPanel:UpdateCharacterModel(self.CurCharacterId, targetPanelRole, targetUiName, charaterFunc)
end
function XUiBfrtRoomCharacter:InitAutoScript()
self:AutoInitUi()
self:AutoAddListener()
end
function XUiBfrtRoomCharacter:AutoInitUi()
self.BtnFashion = self.Transform:Find("SafeAreaContentPane/CharList/TeamBtn/BtnFashion"):GetComponent("Button")
self.BtnConsciousness = self.Transform:Find("SafeAreaContentPane/CharList/TeamBtn/BtnConsciousness"):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.GridBfrtCharacter = self.Transform:Find("SafeAreaContentPane/CharList/CharInfo/Left/SViewCharacterList/Viewport/PanelRoleContent/GridBfrtCharacter")
self.PanelDrag = self.Transform:Find("SafeAreaContentPane/CharList/CharInfo/PanelDrag"):GetComponent("XDrag")
self.PanelAsset = self.Transform:Find("SafeAreaContentPane/PanelAsset")
self.BtnBack = self.Transform:Find("SafeAreaContentPane/Top/BtnBack"):GetComponent("Button")
self.BtnMainUi = self.Transform:Find("SafeAreaContentPane/Top/BtnMainUi"):GetComponent("Button")
self.BtnWeapon = self.Transform:Find("SafeAreaContentPane/CharList/TeamBtn/BtnWeapon"):GetComponent("Button")
end
function XUiBfrtRoomCharacter:AutoAddListener()
self:RegisterClickEvent(self.BtnFashion, self.OnBtnFashionClick)
self:RegisterClickEvent(self.BtnConsciousness, self.OnBtnConsciousnessClick)
self:RegisterClickEvent(self.BtnJoinTeam, self.OnBtnJoinTeamClick)
self:RegisterClickEvent(self.BtnQuitTeam, self.OnBtnQuitTeamClick)
self:RegisterClickEvent(self.BtnBack, self.OnBtnBackClick)
self:RegisterClickEvent(self.BtnMainUi, self.OnBtnMainUiClick)
self:RegisterClickEvent(self.BtnWeapon, self.OnBtnWeaponClick)
self:RegisterClickEvent(self.BtnTeamPrefab, self.OnBtnTeamPrefabClick)
self.BtnPartner.CallBack = function()
self:OnBtnPartnerClick()
end
self.BtnFilter.CallBack = function()
self:OnBtnFilterClick()
end
self.BtnTeaching.CallBack = function () self:OnBtnBtnTeachingClick() end
end
function XUiBfrtRoomCharacter:OnBtnTeamPrefabClick()
local stageId = self.StageId
local limitBuffId = self.LimitBuffId
local characterLimitType = self.CharacterLimitType
local stageInfos = XDataCenter.FubenManager.GetStageInfo(stageId)
local stageType = stageInfos and stageInfos.Type
local closeCallback = function()
self:CheckJoinTeamPrefab()
end
XLuaUiManager.Open("UiRoomTeamPrefab", nil, nil, characterLimitType, limitBuffId, stageType, nil, closeCallback, stageId)
end
function XUiBfrtRoomCharacter:OnBtnConsciousnessClick()
2024-09-01 20:49:41 +00:00
XMVCA:GetAgency(ModuleId.XEquip):OpenUiEquipAwareness(self.CurCharacterId)
end
function XUiBfrtRoomCharacter:OnBtnBtnTeachingClick()
local id = self.CurCharacterId
XDataCenter.PracticeManager.OpenUiFubenPractice(id, true)
end
function XUiBfrtRoomCharacter:OnBtnWeaponClick()
2024-09-01 20:49:41 +00:00
XMVCA:GetAgency(ModuleId.XEquip):OpenUiEquipReplace(self.CurCharacterId, nil, true)
end
function XUiBfrtRoomCharacter:OnBtnFashionClick()
XLuaUiManager.Open("UiFashion", self.CurCharacterId)
end
function XUiBfrtRoomCharacter:UpdateTeamPrefab(team)
self.TeamDataPrefab = team.TeamData
self.TeamDataIndex = 1
XDataCenter.BfrtManager.SetTeamCaptainPos(self.EchelonId, team.CaptainPos)
XDataCenter.BfrtManager.SetTeamFirstFightPos(self.EchelonId, team.FirstFightPos)
end
function XUiBfrtRoomCharacter:CheckJoinTeamPrefab()
if not self.TeamDataIndex or not self.TeamDataPrefab then
return
end
local index = self.TeamDataIndex
local characterId = self.TeamDataPrefab[index]
if not characterId then
XUiManager.TipText("SCRoleSkillUploadSuccess")
self:Close()
return
end
local joinFunc = function()
self.TeamDataIndex = self.TeamDataIndex + 1
self:CheckJoinTeamPrefab()
end
self:OnJoinTeam(characterId, index, true, joinFunc, true)
end
function XUiBfrtRoomCharacter:OnJoinTeam(characterId, teamSelectPos, isNotClose, cb, isSkipTip)
local callback = cb --成功或取消加入编队回调
local teamSelectPos = teamSelectPos or self.TeamSelectPos
if teamSelectPos > self.EchelonRequireCharacterNum then
if callback then
callback()
end
return
end
local characterId = characterId
local isNotClose = isNotClose --是否不关闭本界面
local isSkipTip = isSkipTip --是否跳过二次弹窗确认
local joinFunc = function(isReset)
local echelonIndex, echelonType = self.CheckIsInTeamListCb(characterId)
if echelonIndex and echelonType then
local sureCallback = function()
if isReset then
self:ResetTeamData()
end
self.CharacterSwapEchelonCb(characterId, self.TeamCharacterIdList[teamSelectPos])
self.TeamCharacterIdList[teamSelectPos] = characterId
if not isNotClose then
self:Close()
elseif callback then
callback()
end
end
if isSkipTip then
sureCallback()
return
end
local title = CS.XTextManager.GetText("BfrtDeployTipTitle")
local characterName = XCharacterConfigs.GetCharacterName(characterId)
local oldEchelon = XDataCenter.BfrtManager.GetEchelonNameTxt(echelonType, echelonIndex)
local newEchelon = XDataCenter.BfrtManager.GetEchelonNameTxt(self.EchelonType, self.EchelonIndex)
local content = CS.XTextManager.GetText("BfrtDeployTipContent", characterName, oldEchelon, newEchelon)
XUiManager.DialogTip(title, content, XUiManager.DialogType.Normal, callback, sureCallback)
else
if isReset then
self:ResetTeamData()
end
self:QuitTeam(characterId)
self.TeamCharacterIdList[teamSelectPos] = characterId
if not isNotClose then
self:Close()
elseif callback then
callback()
end
end
end
-- 角色类型不一致拦截
local inTeamCharacterType = self:GetTeamCharacterType()
if inTeamCharacterType then
local characterType = characterId and characterId ~= 0 and XCharacterConfigs.GetCharacterType(characterId)
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
joinFunc()
end
function XUiBfrtRoomCharacter:OnBtnJoinTeamClick()
local characterId = self.CurCharacterId
self:OnJoinTeam(characterId)
end
function XUiBfrtRoomCharacter:OnBtnQuitTeamClick()
self:QuitTeam(self.CurCharacterId)
self:Close()
end
function XUiBfrtRoomCharacter:OnBtnBackClick()
self:Close()
end
function XUiBfrtRoomCharacter:OnBtnMainUiClick()
XLuaUiManager.RunMain()
end
function XUiBfrtRoomCharacter:OnBtnFilterClick()
local characterType = CharacterTypeConvert[self.SelectTabBtnIndex]
XLuaUiManager.Open("UiRoomCharacterFilterTips",
self,
XRoomCharFilterTipsConfigs.EnumFilterType.Bfrt,
XRoomCharFilterTipsConfigs.EnumSortType.Bfrt,
characterType)
end
function XUiBfrtRoomCharacter:OnBtnPartnerClick()
XDataCenter.PartnerManager.GoPartnerCarry(self.CurCharacterId, false)
end
function XUiBfrtRoomCharacter:QuitTeam(characterId)
for index, existCharacterId in pairs(self.TeamCharacterIdList) do
if characterId == existCharacterId then
self.TeamCharacterIdList[index] = 0
return
end
end
end
function XUiBfrtRoomCharacter:Close()
if self.TeamResultCb then
self.TeamResultCb(self.TeamCharacterIdList)
end
XUiBfrtRoomCharacter.Super.Close(self)
end
function XUiBfrtRoomCharacter:CheckCharacterInTeam(checkCharacterId)
for _, characterId in pairs(self.TeamCharacterIdList) do
if checkCharacterId == characterId then
return true
end
end
return false
end
function XUiBfrtRoomCharacter:GetTeamCharacterType()
for k, v in pairs(self.TeamCharacterIdList) do
if v ~= 0 then
return XCharacterConfigs.GetCharacterType(v)
end
end
end
function XUiBfrtRoomCharacter:Filter(selectTagGroupDic, sortTagId, isThereFilterDataCb)
local judgeCb = function(groupId, tagValue, character)
local detailConfig = XCharacterConfigs.GetCharDetailTemplate(character.Id)
local compareValue
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("XUiBfrtRoomCharacter:Filter函数错误没有处理排序组%s的逻辑", groupId))
return false
end
end
local allChar = XDataCenter.CharacterManager.GetOwnCharacterList(CharacterTypeConvert[self.SelectTabBtnIndex])
XDataCenter.RoomCharFilterTipsManager.Filter(self.TagCacheDic, selectTagGroupDic, allChar, judgeCb,
function(filteredData)
self:FilterRefresh(filteredData, sortTagId)
end,
isThereFilterDataCb)
end
function XUiBfrtRoomCharacter:FilterRefresh(filteredData, sortTagId)
if self.SortFunction[sortTagId] then
table.sort(filteredData, self.SortFunction[sortTagId])
else
XLog.Error(string.format("XUiBfrtRoomCharacter:FilterRefresh函数错误没有定义标签%s的排序函数", sortTagId))
return
end
self:UpdateCharacterList(filteredData)
end