forked from endernon/PGRData
255 lines
No EOL
9 KiB
Lua
255 lines
No EOL
9 KiB
Lua
---@class XUiBattleRoomRoleDetailDefaultProxy
|
||
local XUiBattleRoomRoleDetailDefaultProxy = XClass(nil, "XUiBattleRoomRoleDetailDefaultProxy")
|
||
|
||
-- 获取实体数据
|
||
-- characterType : XCharacterConfigs.CharacterType 参数为空时要返回所有实体
|
||
-- return : { ... }
|
||
function XUiBattleRoomRoleDetailDefaultProxy:GetEntities(characterType)
|
||
return XMVCA.XCharacter:GetOwnCharacterList(characterType)
|
||
end
|
||
|
||
function XUiBattleRoomRoleDetailDefaultProxy:GetFilterJudge()
|
||
return function(groupId, tagValue, entity)
|
||
if not entity.GetCharacterViewModel then return false end
|
||
local characterViewModel = entity:GetCharacterViewModel()
|
||
-- 职业筛选
|
||
if groupId == XRoomCharFilterTipsConfigs.EnumFilterTagGroup.Career then
|
||
if tagValue == characterViewModel:GetCareer() then
|
||
return true
|
||
end
|
||
-- 能量元素筛选
|
||
elseif groupId == XRoomCharFilterTipsConfigs.EnumFilterTagGroup.Element then
|
||
local obtainElementList = characterViewModel:GetObtainElements()
|
||
for _, element in pairs(obtainElementList) do
|
||
if element == tagValue then
|
||
return true
|
||
end
|
||
end
|
||
else
|
||
XLog.Error(string.format("XUiBattleRoomRoleDetailDefaultProxy:Filter函数错误,没有处理排序组:%s的逻辑", groupId))
|
||
return false
|
||
end
|
||
end
|
||
end
|
||
|
||
-- 获取左边角色格子代理,默认为XUiBattleRoomRoleGrid
|
||
-- 如果只是做一些简单的显示,比如等级读取自定义,可以直接使用AOPOnDynamicTableEventAfter接口去处理也可以
|
||
-- return : 继承自XUiBattleRoomRoleGrid的类
|
||
function XUiBattleRoomRoleDetailDefaultProxy:GetGridProxy()
|
||
return nil
|
||
end
|
||
|
||
---用于某种特殊玩法需要给grid传特殊参数
|
||
---V2.6PS:据点用上了,代码坐标XUiGridEchelonMember:GetProxyInstance(viewData) by 标仔
|
||
---@return table 传的必须是table
|
||
function XUiBattleRoomRoleDetailDefaultProxy:GetGridExParams()
|
||
return {}
|
||
end
|
||
|
||
-- 获取子面板数据,主要用来增加编队界面自身玩法信息,就不用污染通用的预制体
|
||
--[[
|
||
return : {
|
||
assetPath : 资源路径
|
||
proxy : 子面板代理
|
||
proxyArgs : 子面板SetData传入的参数列表
|
||
}
|
||
]]
|
||
function XUiBattleRoomRoleDetailDefaultProxy:GetChildPanelData()
|
||
return nil
|
||
end
|
||
|
||
-- 根据实体id获取角色视图数据
|
||
-- return : XCharacterViewModel
|
||
function XUiBattleRoomRoleDetailDefaultProxy:GetCharacterViewModelByEntityId(id)
|
||
if id > 0 then
|
||
local entity = nil
|
||
if XEntityHelper.GetIsRobot(id) then
|
||
entity = XRobotManager.GetRobotById(id)
|
||
else
|
||
entity = XMVCA.XCharacter:GetCharacter(id)
|
||
end
|
||
if entity == nil then
|
||
XLog.Error(string.format("找不到id%s的角色", id))
|
||
return
|
||
end
|
||
return entity:GetCharacterViewModel()
|
||
end
|
||
return nil
|
||
end
|
||
|
||
-- 根据实体id获取角色类型
|
||
-- return : XCharacterConfigs.CharacterType
|
||
function XUiBattleRoomRoleDetailDefaultProxy:GetCharacterType(entityId)
|
||
local viewModel = self:GetCharacterViewModelByEntityId(entityId)
|
||
if viewModel then
|
||
return viewModel:GetCharacterType()
|
||
end
|
||
return XCharacterConfigs.CharacterType.Normal
|
||
end
|
||
|
||
--==============================
|
||
---@desc 默认选中机体类型页签
|
||
---@return number 机体类型
|
||
--==============================
|
||
function XUiBattleRoomRoleDetailDefaultProxy:GetDefaultCharacterType()
|
||
return XCharacterConfigs.CharacterType.Normal
|
||
end
|
||
|
||
-- 检查队伍里是否有相同的角色
|
||
function XUiBattleRoomRoleDetailDefaultProxy:CheckTeamHasSameCharacterId(team, checkEntityId)
|
||
local checkCharacterId = self:GetCharacterViewModelByEntityId(checkEntityId):GetId()
|
||
local viewModel = nil
|
||
for _, entityId in pairs(team:GetEntityIds()) do
|
||
if entityId > 0 then
|
||
viewModel = self:GetCharacterViewModelByEntityId(entityId)
|
||
if viewModel == nil then
|
||
XLog.Error(string.format("队伍数据中存在找不到找到ViewModel的Id : %s, 请合理检查是否逻辑存在问题", entityId))
|
||
elseif viewModel:GetId() == checkCharacterId then
|
||
return true
|
||
end
|
||
end
|
||
end
|
||
return false
|
||
end
|
||
|
||
-- 排序算法,默认队伍>XDataCenter.RoomCharFilterTipsManager.GetSort
|
||
-- team : XTeam
|
||
-- sortTagType : XRoomCharFilterTipsConfigs.EnumSortTag
|
||
function XUiBattleRoomRoleDetailDefaultProxy:SortEntitiesWithTeam(team, entities, sortTagType)
|
||
local inTeamEntities = {}
|
||
for i = #entities, 1, -1 do
|
||
if team:GetEntityIdIsInTeam(entities[i]:GetId()) then
|
||
table.insert(inTeamEntities, entities[i])
|
||
table.remove(entities, i)
|
||
end
|
||
end
|
||
table.sort(entities, function(entityA, entityB)
|
||
local aCharacterViewModel = self:GetCharacterViewModelByEntityId(entityA:GetId())
|
||
local bCharacterViewModel = self:GetCharacterViewModelByEntityId(entityB:GetId())
|
||
return XDataCenter.RoomCharFilterTipsManager.GetSort(aCharacterViewModel:GetId()
|
||
, bCharacterViewModel:GetId(), nil, false, sortTagType)
|
||
end)
|
||
table.sort(inTeamEntities, function(entityA, entityB)
|
||
local aCharacterViewModel = self:GetCharacterViewModelByEntityId(entityA:GetId())
|
||
local bCharacterViewModel = self:GetCharacterViewModelByEntityId(entityB:GetId())
|
||
return XDataCenter.RoomCharFilterTipsManager.GetSort(aCharacterViewModel:GetId()
|
||
, bCharacterViewModel:GetId(), nil, false, sortTagType)
|
||
end)
|
||
for i = #inTeamEntities, 1, -1 do
|
||
table.insert(entities, 1, inTeamEntities[i])
|
||
end
|
||
return entities
|
||
end
|
||
|
||
-- return : bool 是否开启自动关闭检查, number 自动关闭的时间戳(秒), function 每秒更新的回调 function(isClose) isClose标志是否到达结束时间
|
||
function XUiBattleRoomRoleDetailDefaultProxy:GetAutoCloseInfo()
|
||
return false
|
||
end
|
||
|
||
-- 获取自定义的角色格子实体,可在通用界面直接追加,可参考XUiSuperTowerBattleRoomRoleDetail
|
||
-- return : GameObject
|
||
function XUiBattleRoomRoleDetailDefaultProxy:GetRoleDynamicGrid()
|
||
|
||
end
|
||
|
||
-- 隐藏筛选指定标签
|
||
-- return { [XRoomCharFilterTipsConfigs.EnumSortTag.xxx] = true } 即为隐藏
|
||
function XUiBattleRoomRoleDetailDefaultProxy:GetHideSortTagDic()
|
||
return nil
|
||
end
|
||
|
||
-- 设置筛选过滤类型和排序类型
|
||
-- return1 : XRoomCharFilterTipsConfigs.EnumFilterType
|
||
-- return2 : XRoomCharFilterTipsConfigs.EnumSortType
|
||
function XUiBattleRoomRoleDetailDefaultProxy:GetFilterTypeAndSortType()
|
||
return XRoomCharFilterTipsConfigs.EnumFilterType.Common, XRoomCharFilterTipsConfigs.EnumSortType.Common
|
||
end
|
||
|
||
-- 检查实体是否为机器人
|
||
function XUiBattleRoomRoleDetailDefaultProxy:CheckIsRobot(entityId)
|
||
return XRobotManager.CheckIsRobotId(self:GetCharacterViewModelByEntityId(entityId):GetSourceEntityId())
|
||
end
|
||
|
||
-- 获取是否显示右上角角色详情
|
||
function XUiBattleRoomRoleDetailDefaultProxy:GetIsShowRoleDetail()
|
||
return true
|
||
end
|
||
|
||
-- 各自玩法可以重写这里限定编进队伍的条件
|
||
function XUiBattleRoomRoleDetailDefaultProxy:CheckCustomLimit(entityId)
|
||
return false
|
||
end
|
||
|
||
-- 获取角色战力
|
||
function XUiBattleRoomRoleDetailDefaultProxy:GetRoleAbility(entityId)
|
||
local viewModel = self:GetCharacterViewModelByEntityId(entityId)
|
||
if not viewModel then
|
||
---@type XCharacterAgency
|
||
local ag = XMVCA:GetAgency(ModuleId.XCharacter)
|
||
return ag:GetCharacterHaveRobotAbilityById(entityId)
|
||
end
|
||
return viewModel:GetAbility()
|
||
end
|
||
|
||
--######################## AOP ########################
|
||
|
||
function XUiBattleRoomRoleDetailDefaultProxy:AOPOnStartBefore(rootUi)
|
||
|
||
end
|
||
|
||
function XUiBattleRoomRoleDetailDefaultProxy:AOPOnStartAfter(rootUi)
|
||
|
||
end
|
||
|
||
function XUiBattleRoomRoleDetailDefaultProxy:AOPOnBtnJoinTeamClickedBefore(rootUi)
|
||
|
||
end
|
||
|
||
function XUiBattleRoomRoleDetailDefaultProxy:AOPOnBtnJoinTeamClickedAfter(rootUi)
|
||
|
||
end
|
||
|
||
function XUiBattleRoomRoleDetailDefaultProxy:AOPSetJoinBtnIsActiveAfter(rootUi)
|
||
|
||
end
|
||
|
||
function XUiBattleRoomRoleDetailDefaultProxy:AOPOnDynamicTableEventAfter(rootUi, event, index, grid)
|
||
|
||
end
|
||
|
||
function XUiBattleRoomRoleDetailDefaultProxy:AOPCloseBefore(rootUi)
|
||
|
||
end
|
||
|
||
function XUiBattleRoomRoleDetailDefaultProxy:AOPOnCharacterClickBefore(rootUi, index)
|
||
|
||
end
|
||
|
||
function XUiBattleRoomRoleDetailDefaultProxy:AOPRefreshOperationBtnsBefore()
|
||
return false
|
||
end
|
||
|
||
--截断自定义模型显示逻辑
|
||
function XUiBattleRoomRoleDetailDefaultProxy:AOPRefreshModelBefore(rootUi,characterViewModel,sourceEntityId,finishedCallback)
|
||
|
||
end
|
||
|
||
function XUiBattleRoomRoleDetailDefaultProxy:CheckIsNeedPractice()
|
||
return true
|
||
end
|
||
|
||
function XUiBattleRoomRoleDetailDefaultProxy:GetFilterControllerConfig(rootUi)
|
||
return nil
|
||
end
|
||
|
||
-- 覆写排序算法的table
|
||
function XUiBattleRoomRoleDetailDefaultProxy:GetFilterSortOverrideFunTable()
|
||
return nil
|
||
end
|
||
|
||
-- 该界面是否启用q版模型 默认用愚人节检测
|
||
function XUiBattleRoomRoleDetailDefaultProxy:CheckUseCuteModel()
|
||
return XDataCenter.AprilFoolDayManager.IsInCuteModelTime()
|
||
end
|
||
|
||
return XUiBattleRoomRoleDetailDefaultProxy |