PGRData/Script/matrix/xui/xuispecialtrainbreakthrough/XUiBattleRoomRoleDetailCute.lua
2024-09-01 22:49:41 +02:00

218 lines
7.5 KiB
Lua
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

local XUiBattleRoomRoleGridCute = require("XUi/XUiSpecialTrainBreakthrough/XUiBattleRoomRoleGridCute")
local XUiPanelRoleModel = require("XUi/XUiCharacter/XUiPanelRoleModel")
local XUiBattleRoomRoleDetailDefaultProxy = require("XUi/XUiNewRoomSingle/XUiBattleRoomRoleDetailDefaultProxy")
local XRobot = require("XEntity/XRobot/XRobot")
local XSpecialTrainActionRandom = require("XUi/XUiSpecialTrainBreakthrough/XSpecialTrainActionRandom")
---@class XUiBattleRoomRoleDetailCute:XLuaUi@因为cute与原版ui差别巨大所以不复用XUiBattleRoomRoleDetail
local XUiBattleRoomRoleDetailCute = XLuaUiManager.Register(XLuaUi, "UiBattleRoomRoleDetailCute")
function XUiBattleRoomRoleDetailCute:OnAwake()
---@type XUiBattleRoomRoleDetailDefaultProxy
self.DefaultProxy = XUiBattleRoomRoleDetailDefaultProxy.New()
self.Proxy = false
---@type XTeam
self.Team = nil
self.StageId = nil
self.Pos = nil
self.CurrentEntityId = nil
-- 角色列表
self.DynamicTable = XDynamicTableNormal.New(self.SViewCharacterList)
self.DynamicTable:SetProxy(XUiBattleRoomRoleGridCute)
self.DynamicTable:SetDelegate(self)
-- 模型初始化
self.PanelRoleModelGo = self.UiModelGo.transform:FindTransform("PanelRoleModel")
self.ImgEffectHuanren = self.UiModelGo.transform:FindTransform("ImgEffectHuanren")
self.ImgEffectHuanren1 = self.UiModelGo.transform:FindTransform("ImgEffectHuanren1")
self.ImgEffectHuanren1.gameObject:SetActiveEx(false)
self.UiPanelRoleModel = XUiPanelRoleModel.New(self.PanelRoleModelGo, self.Name, nil, true)
self:RegisterUiEvents()
self.SpecialTrainActionRandom = XSpecialTrainActionRandom.New()
end
function XUiBattleRoomRoleDetailCute:GetAutoCloseInfo()
local callback = function(isClose)
if isClose then
XDataCenter.FubenSpecialTrainManager.HandleActivityEndTime()
end
end
local endTime = XDataCenter.FubenSpecialTrainManager.GetActivityEndTime()
return endTime, callback
end
function XUiBattleRoomRoleDetailCute:OnStart(stageId, team, pos, proxy)
self.StageId = stageId
self.Team = team
self.Pos = pos
self.Proxy = proxy
self.DynamicTable:SetGrid(self.GridCharacterNew)
self.GridCharacterNew.gameObject:SetActiveEx(false)
-- 避免其他系统队伍数据错乱,预先清除
XEntityHelper.ClearErrorTeamEntityId(
team,
function(entityId)
return self.DefaultProxy:GetCharacterViewModelByEntityId(entityId) ~= nil
end
)
self:UpdateCurrentEntityId(self.Team:GetEntityIdByTeamPos(self.Pos))
-- 注册自动关闭
local autoCloseEndTime, callback = self:GetAutoCloseInfo()
if autoCloseEndTime then
self:SetAutoCloseInfo(autoCloseEndTime, callback)
end
end
function XUiBattleRoomRoleDetailCute:OnEnable()
XUiBattleRoomRoleDetailCute.Super.OnEnable(self)
self:InitRoleList()
end
function XUiBattleRoomRoleDetailCute:OnDisable()
XUiBattleRoomRoleDetailCute.Super.OnDisable(self)
self.SpecialTrainActionRandom:Stop()
end
function XUiBattleRoomRoleDetailCute:InitRoleList()
self:RefreshRoleList(self:GetEntities())
end
function XUiBattleRoomRoleDetailCute:RegisterUiEvents()
self:BindExitBtns()
self:RegisterClickEvent(
self.BtnEnterFight,
function()
if self:IsSameRole() then
return
end
self:JoinTeam()
end
)
end
function XUiBattleRoomRoleDetailCute:JoinTeam()
self.Team:UpdateEntityTeamPos(self.CurrentEntityId, self.Pos, true)
self:Close(true)
end
function XUiBattleRoomRoleDetailCute:QuitTeam()
self.Team:UpdateEntityTeamPos(self.CurrentEntityId, self.Pos, false)
self:Close(true)
end
function XUiBattleRoomRoleDetailCute:RefreshRoleList(roleEntities)
local searchEntityId = self.CurrentEntityId
local index = 1
if XTool.IsNumberValid(searchEntityId) then
for i, v in ipairs(roleEntities) do
if v:GetId() == searchEntityId then
index = i
break
end
end
end
self:UpdateCurrentEntityId(roleEntities[index]:GetId())
self.DynamicTable:SetDataSource(roleEntities)
self.DynamicTable:ReloadDataSync(index)
self:RefreshModel()
end
function XUiBattleRoomRoleDetailCute:OnDynamicTableEvent(event, index, grid)
if index <= 0 or index > #self.DynamicTable.DataSource then
return
end
local entity = self.DynamicTable:GetData(index)
if event == DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_ATINDEX then
grid:SetData(entity, self.Team, self.StageId, self.Pos)
grid:SetSelectStatus(self.CurrentEntityId == entity:GetId())
elseif event == DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_TOUCHED then
self:UpdateCurrentEntityId(entity:GetId())
for _, tmpGrid in pairs(self.DynamicTable:GetGrids()) do
tmpGrid:SetSelectStatus(false)
end
grid:SetSelectStatus(true)
self:RefreshModel()
end
end
function XUiBattleRoomRoleDetailCute:RefreshModel(robotId)
if robotId == nil then
robotId = self.CurrentEntityId
end
self.ImgEffectHuanren.gameObject:SetActiveEx(false)
self:OnModelLoadBegin()
local finishedCallback = function(model)
self.PanelDrag.Target = model.transform
self.ImgEffectHuanren.gameObject:SetActiveEx(true)
self:OnModelLoadCallback()
end
local characterViewModel = self.DefaultProxy:GetCharacterViewModelByEntityId(robotId)
local sourceEntityId = characterViewModel:GetSourceEntityId()
local robotConfig = XRobotManager.GetRobotTemplate(sourceEntityId)
local characterId = XRobotManager.GetCharacterId(robotId)
local needDisplayController = XCharacterCuteConfig.GetNeedDisplayController(self.StageId)
self.UiPanelRoleModel:UpdateCuteModel(
robotId,
characterId,
nil,
robotConfig.FashionId,
robotConfig.WeaponId,
finishedCallback,
needDisplayController,
self.PanelRoleModelGo,
self.Name
)
end
function XUiBattleRoomRoleDetailCute:UpdateCurrentEntityId(value)
self.CurrentEntityId = value
self.BtnEnterFight:SetDisable(self:IsSameRole())
end
function XUiBattleRoomRoleDetailCute:IsSameRole()
return self.CurrentEntityId == self.Team:GetEntityIdByTeamPos(self.Pos)
end
function XUiBattleRoomRoleDetailCute:Close(updated)
local isStop = self.Proxy:AOPCloseBefore(self)
if isStop then
return
end
if updated then
self:EmitSignal("UpdateEntityId", self.CurrentEntityId)
end
XUiBattleRoomRoleDetailCute.Super.Close(self)
end
function XUiBattleRoomRoleDetailCute:GetEntities()
local stageId = self.StageId
local stageInfo = XDataCenter.FubenManager.GetStageInfo(stageId)
local robotIdList = XFubenConfigs.GetStageTypeRobot(stageInfo.Type) or {}
local robots = {}
for _, robotId in ipairs(robotIdList) do
robots[#robots + 1] = XRobotManager.GetRobotById(robotId)
end
return robots
end
function XUiBattleRoomRoleDetailCute:OnModelLoadBegin()
self.SpecialTrainActionRandom:Stop()
end
function XUiBattleRoomRoleDetailCute:OnModelLoadCallback()
local needDisplayController = XCharacterCuteConfig.GetNeedDisplayController(self.StageId)
if not needDisplayController then
return
end
local actionArray = XCharacterCuteConfig.GetModelRandomAction(self.UiPanelRoleModel:GetCurRoleName())
self.SpecialTrainActionRandom:SetAnimator(self.UiPanelRoleModel:GetAnimator(), actionArray, self.UiPanelRoleModel)
self.SpecialTrainActionRandom:Play()
end
return XUiBattleRoomRoleDetailCute