PGRData/Resources/Scripts/XUi/XUiNewRoomSingle/XUiBattleRoleRoom.lua
2022-12-26 14:06:01 +05:30

425 lines
No EOL
16 KiB
Lua
Raw 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 CsXTextManager = CS.XTextManager
local XUiBattleRoleRoomDefaultProxy = require("XUi/XUiNewRoomSingle/XUiBattleRoleRoomDefaultProxy")
local XUiBattleRoleRoom = XLuaUiManager.Register(XLuaUi, "UiBattleRoleRoom")
local MAX_ROLE_COUNT = 3
local LONG_TIMER = 1
function XUiBattleRoleRoom:OnAwake()
-- 重定义 begin
self.FirstEnterBtnGroup = self.PanelTabCaptain
self.PanelFirstEnterTag1 = self.PanelFirstRole1
self.PanelFirstEnterTag2 = self.PanelFirstRole2
self.PanelFirstEnterTag3 = self.PanelFirstRole3
self.UiObjPartner1 = self.CharacterPets1
self.UiObjPartner2 = self.CharacterPets2
self.UiObjPartner3 = self.CharacterPets3
self.UiPointerCharacter1 = self.BtnChar1:GetComponent("XUiPointer")
self.UiPointerCharacter2 = self.BtnChar2:GetComponent("XUiPointer")
self.UiPointerCharacter3 = self.BtnChar3:GetComponent("XUiPointer")
-- 重定义 end
-- XTeam
self.Team = nil
self.StageId = nil
self.Proxy = nil
self.UiPanelRoleModels = nil
self.LongClickTime = 0
self.Camera = nil
self.ChildPanelData = nil
self:InitUiPanelRoleModels()
self:RegisterUiEvents()
end
-- team : XTeam
function XUiBattleRoleRoom:OnStart(team, stageId, proxy)
self.Camera = self.Transform:GetComponent("Canvas").worldCamera
if proxy == nil then proxy = XUiBattleRoleRoomDefaultProxy end
self.Team = team
self.StageId = stageId
self.Proxy = proxy.New()
local isStop = self.Proxy:AOPOnStartBefore(self)
if isStop then return end
-- 关卡名字刷新
self:RefreshStageName()
self.BtnShowInfoToggle:SetButtonState(self.Team:GetIsShowRoleDetailInfo()
and XUiButtonState.Select or XUiButtonState.Normal)
-- 注册自动关闭
local openAutoClose, autoCloseEndTime, callback = self.Proxy:GetAutoCloseInfo()
if openAutoClose then
self:SetAutoCloseInfo(autoCloseEndTime, callback)
end
self.Proxy:AOPOnStartAfter(self)
end
function XUiBattleRoleRoom:OnEnable()
XUiBattleRoleRoom.Super.OnEnable(self)
-- 刷新角色模型
self:RefreshRoleModels()
-- 刷新角色特效
self:RefreshRoleEffects()
-- 刷新伙伴
self:RefreshPartners()
-- 刷新队长信息
self:RefreshCaptainPosInfo()
-- 设置首出信息
self.FirstEnterBtnGroup:SelectIndex(self.Team:GetFirstFightPos())
-- 刷新角色详细信息
self:RefreshRoleDetalInfo()
-- 角色限制提示
self:RefreshRoleLimitTip()
-- 设置子面板配置
self.ChildPanelData = self.Proxy:GetChildPanelData()
self:LoadChildPanelInfo()
self:RegisterListeners()
end
function XUiBattleRoleRoom:OnDisable()
XUiBattleRoleRoom.Super.OnDisable(self)
end
function XUiBattleRoleRoom:OnDestory()
self:UnRegisterListeners()
end
--######################## 私有方法 ########################
function XUiBattleRoleRoom:RegisterUiEvents()
self.BtnBack.CallBack = function() self:Close() end
self.BtnMainUi.CallBack = function() XLuaUiManager.RunMain() end
self.BtnEnterFight.CallBack = function() self:OnBtnEnterFightClicked() end
self.BtnShowInfoToggle.CallBack = function(val) self:OnBtnShowInfoToggleClicked(val) end
self.BtnLeader.CallBack = function() self:OnBtnLeaderClicked() end
-- 首出按钮组
local firstTabGroup = { self.BtnRed, self.BtnBlue, self.BtnYellow }
self.FirstEnterBtnGroup:Init(firstTabGroup, function(tabIndex) self:OnEnterSortBtnGroupClicked(tabIndex) end)
-- 角色拖动相关
XUiButtonLongClick.New(self.UiPointerCharacter1, 10, self, nil, self.OnBtnCharacter1LongClicked, self.OnBtnCharacter1LongClickUp, false)
XUiButtonLongClick.New(self.UiPointerCharacter2, 10, self, nil, self.OnBtnCharacter2LongClicked, self.OnBtnCharacter2LongClickUp, false)
XUiButtonLongClick.New(self.UiPointerCharacter3, 10, self, nil, self.OnBtnCharacter3LongClicked, self.OnBtnCharacter3LongClickUp, false)
-- 角色点击
self:RegisterClickEvent(self.BtnChar1, self.OnBtnChar1Clicked)
self:RegisterClickEvent(self.BtnChar2, self.OnBtnChar2Clicked)
self:RegisterClickEvent(self.BtnChar3, self.OnBtnChar3Clicked)
self.BtnTeamPrefab.CallBack = function() self:OnBtnTeamPrefabClicked() end
-- 宠物加号点击
local uiObjPartner
for pos = 1, MAX_ROLE_COUNT do
uiObjPartner = self["UiObjPartner" .. pos]
uiObjPartner:GetObject("BtnClick").CallBack = function()
self[string.format("OnBtnChar%sClicked", pos)](self)
end
end
end
function XUiBattleRoleRoom:RegisterListeners()
XEventManager.AddEventListener(XEventId.EVENT_FIGHT_BEGIN_PLAYMOVIE, self.OnBeginBattleAutoRemove, self)
XEventManager.AddEventListener(XEventId.EVENT_FIGHT_LOADINGFINISHED, self.OnBeginBattleAutoRemove, self)
XEventManager.AddEventListener(XEventId.EVENT_TEAM_PREFAB_SELECT, self.OnTeamPrefabSelect, self)
end
function XUiBattleRoleRoom:UnRegisterListeners()
XEventManager.RemoveEventListener(XEventId.EVENT_FIGHT_BEGIN_PLAYMOVIE, self.OnBeginBattleAutoRemove, self)
XEventManager.RemoveEventListener(XEventId.EVENT_FIGHT_LOADINGFINISHED, self.OnBeginBattleAutoRemove, self)
-- XEventManager.RemoveEventListener(XEventId.EVENT_TEAM_PREFAB_SELECT, self.OnTeamPrefabSelect, self)
end
function XUiBattleRoleRoom:OnBtnTeamPrefabClicked()
XLuaUiManager.Open("UiRoomTeamPrefab", self.Team:GetCaptainPos()
, self.Team:GetFirstFightPos()
, self.Team:GetCharacterLimitType())
end
function XUiBattleRoleRoom:OnTeamPrefabSelect(teamData)
self.Team:UpdateFromTeamData(teamData)
end
function XUiBattleRoleRoom:OnBeginBattleAutoRemove()
self:Remove()
end
function XUiBattleRoleRoom:OnBtnLeaderClicked()
local characterViewModelDic = {}
local viewModel = nil
for pos, entityId in ipairs(self.Team:GetEntityIds()) do
characterViewModelDic[pos] = self.Proxy:GetCharacterViewModelByEntityId(entityId)
end
XLuaUiManager.Open("UiBattleRoleRoomCaptain", characterViewModelDic, self.Team:GetCaptainPos(), function(newCaptainPos)
self.Team:UpdateCaptianPos(newCaptainPos)
self:RefreshCaptainPosInfo()
end)
end
-- val : 1 or 0 , 1是开启0是关闭
function XUiBattleRoleRoom:OnBtnShowInfoToggleClicked(val)
self.Team:SaveIsShowRoleDetailInfo(val)
self:RefreshRoleDetalInfo(val == 1)
end
function XUiBattleRoleRoom:OnBtnChar1Clicked()
self:OnBtnCharacterClicked(1)
end
function XUiBattleRoleRoom:OnBtnChar2Clicked()
self:OnBtnCharacterClicked(2)
end
function XUiBattleRoleRoom:OnBtnChar3Clicked()
self:OnBtnCharacterClicked(3)
end
function XUiBattleRoleRoom:OnBtnCharacter1LongClicked(time)
self:OnBtnCharacterLongClick(1, time)
end
function XUiBattleRoleRoom:OnBtnCharacter2LongClicked(time)
self:OnBtnCharacterLongClick(2, time)
end
function XUiBattleRoleRoom:OnBtnCharacter3LongClicked(time)
self:OnBtnCharacterLongClick(3, time)
end
function XUiBattleRoleRoom:OnBtnCharacter1LongClickUp()
self:OnBtnCharacterLongClickUp(1)
end
function XUiBattleRoleRoom:OnBtnCharacter2LongClickUp()
self:OnBtnCharacterLongClickUp(2)
end
function XUiBattleRoleRoom:OnBtnCharacter3LongClickUp()
self:OnBtnCharacterLongClickUp(3)
end
function XUiBattleRoleRoom:OnBtnCharacterLongClick(index, time)
-- 无实体直接不处理
if self.Team:GetEntityIdByTeamPos(index) == 0 then return end
self.LongClickTime = self.LongClickTime + time / 1000
if self.LongClickTime > LONG_TIMER then
self.ImgRoleRepace.gameObject:SetActiveEx(true)
self.ImgRoleRepace.transform.localPosition = self:GetClickPosition()
end
end
function XUiBattleRoleRoom:OnBtnCharacterLongClickUp(index)
-- 未激活不处理
if not self.ImgRoleRepace.gameObject.activeSelf then return end
self.LongClickTime = 0
self.ImgRoleRepace.gameObject:SetActiveEx(false)
local transformWidth = self.Transform.rect.width
local targetX = math.floor(self:GetClickPosition().x + transformWidth / 2)
local targetIndex
if targetX <= transformWidth / 3 then
targetIndex = 2
elseif targetX > transformWidth / 3 and targetX <= transformWidth / 3 * 2 then
targetIndex = 1
else
targetIndex = 3
end
-- 相同直接不处理
if index == targetIndex then return end
self.Team:SwitchEntityPos(index, targetIndex)
-- 刷新角色信息
self:RefreshRoleInfos()
self:LoadChildPanelInfo()
self:RefreshPartners()
self:RefreshRoleDetalInfo()
end
function XUiBattleRoleRoom:OnBtnCharacterClicked(index)
XLuaUiManager.Open("UiBattleRoomRoleDetail"
, self.StageId
, self.Team
, index
, self.Proxy:GetRoleDetailProxy(), self.StageId)
end
function XUiBattleRoleRoom:OnBtnEnterFightClicked()
local canEnterFight, errorTip = self.Proxy:GetIsCanEnterFight(self.Team)
if not canEnterFight then
XUiManager.TipError(errorTip)
return
end
self.Proxy:EnterFight(self.Team, self.StageId)
end
function XUiBattleRoleRoom:OnEnterSortBtnGroupClicked(index)
self.Team:UpdateFirstFightPos(index)
self:RefreshFirstFightInfo()
end
function XUiBattleRoleRoom:InitUiPanelRoleModels()
local uiModelRoot = self.UiModelGo.transform
self.UiPanelRoleModels = {}
for i = 1, MAX_ROLE_COUNT do
self.UiPanelRoleModels[i] = XUiPanelRoleModel.New(uiModelRoot:FindTransform("PanelRoleModel" .. i)
, self.Name, nil, true, nil, true, true)
end
end
function XUiBattleRoleRoom:RefreshRoleModels()
local characterViewModel
local entityId
local sourceEntityId
local uiPanelRoleModel
-- local finishedCallback = function()
-- end
for pos = 1, MAX_ROLE_COUNT do
uiPanelRoleModel = self.UiPanelRoleModels[pos]
entityId = self.Team:GetEntityIdByTeamPos(pos)
characterViewModel = self.Proxy:GetCharacterViewModelByEntityId(entityId)
self["ImgAdd" .. pos].gameObject:SetActiveEx(characterViewModel == nil)
if characterViewModel then
sourceEntityId = characterViewModel:GetSourceEntityId()
if XRobotManager.CheckIsRobotId(sourceEntityId) then
local robotConfig = XRobotManager.GetRobotTemplate(sourceEntityId)
uiPanelRoleModel:UpdateRobotModel(sourceEntityId, robotConfig.CharacterId
, nil, robotConfig.FashionId, robotConfig.WeaponId)
else
uiPanelRoleModel:UpdateCharacterModel(sourceEntityId, nil, nil, nil, nil, characterViewModel:GetFashionId())
end
uiPanelRoleModel:ShowRoleModel()
else
uiPanelRoleModel:HideRoleModel()
end
end
end
function XUiBattleRoleRoom:RefreshPartners()
local entityId = 0
local partner = nil
local characterViewModel = nil
local uiObjPartner
local rImgParnetIcon = nil
for pos = 1, MAX_ROLE_COUNT do
entityId = self.Team:GetEntityIdByTeamPos(pos)
partner = self.Proxy:GetPartnerByEntityId(entityId)
characterViewModel = self.Proxy:GetCharacterViewModelByEntityId(entityId)
uiObjPartner = self["UiObjPartner" .. pos]
uiObjPartner.gameObject:SetActiveEx(characterViewModel ~= nil)
rImgParnetIcon = uiObjPartner:GetObject("RImgType")
rImgParnetIcon.gameObject:SetActiveEx(partner ~= nil)
if partner then
rImgParnetIcon:SetRawImage(partner:GetIcon())
end
end
end
function XUiBattleRoleRoom:RefreshRoleEffects()
local uiModelRoot = self.UiModelGo.transform
local panelRoleBGEffectGo
local teamConfig
local isLoadRoleBGEffect = self.Proxy:GetIsShowRoleBGEffect()
for i = 1, MAX_ROLE_COUNT do
-- 加载背景特效
if isLoadRoleBGEffect then
teamConfig = XTeamConfig.GetTeamCfgById(i)
panelRoleBGEffectGo = uiModelRoot:FindTransform("PanelRoleEffect" .. i).gameObject
panelRoleBGEffectGo:LoadPrefab(teamConfig.EffectPath, false)
end
end
end
function XUiBattleRoleRoom:RefreshFirstFightInfo()
for i = 1, MAX_ROLE_COUNT do
self["PanelFirstEnterTag" .. i].gameObject:SetActiveEx(self.Team:GetFirstFightPos() == i)
end
end
function XUiBattleRoleRoom:RefreshCaptainPosInfo()
local captainPos = self.Team:GetCaptainPos()
local entityId = self.Team:GetEntityIdByTeamPos(captainPos)
local characterViewModel = self.Proxy:GetCharacterViewModelByEntityId(entityId)
self.RImgCapIcon.gameObject:SetActiveEx(characterViewModel ~= nil)
self.TxtSkillDesc.gameObject:SetActiveEx(characterViewModel ~= nil)
if characterViewModel then
local captainSkillInfo = characterViewModel:GetCaptainSkillInfo()
self.RImgCapIcon:SetRawImage(characterViewModel:GetSmallHeadIcon())
self.TxtSkillName.text = captainSkillInfo.Name
self.TxtSkillDesc.text = captainSkillInfo.Level > 0 and
captainSkillInfo.Intro or CsXTextManager.GetText("CaptainSkillLock")
else
self.TxtSkillName.text = CsXTextManager.GetText("TeamDoNotChooseCaptain")
end
end
function XUiBattleRoleRoom:RefreshRoleInfos()
-- 刷新角色模型
self:RefreshRoleModels()
-- 刷新角色特效
self:RefreshRoleEffects()
-- 刷新伙伴
self:RefreshPartners()
-- 刷新队长信息
self:RefreshCaptainPosInfo()
end
function XUiBattleRoleRoom:LoadChildPanelInfo()
if not self.ChildPanelData then return end
local childPanelData = self.ChildPanelData
-- 加载panel asset
local instanceGo = childPanelData.instanceGo
if XTool.UObjIsNil(instanceGo) then
instanceGo = self.PanelExtraUiInfo:LoadPrefab(childPanelData.assetPath)
childPanelData.instanceGo = instanceGo
-- 加载panel proxy
childPanelData.instanceProxy = childPanelData.proxy.New(instanceGo)
end
-- 加载proxy参数
local proxyArgs = {}
if childPanelData.proxyArgs then
for _, argName in ipairs(childPanelData.proxyArgs) do
if type(argName) == "string" then
proxyArgs[#proxyArgs + 1] = self[argName]
else
proxyArgs[#proxyArgs + 1] = argName
end
end
end
childPanelData.instanceProxy:SetData(table.unpack(proxyArgs))
end
function XUiBattleRoleRoom:RefreshRoleLimitTip()
-- XFubenConfigs.CharacterLimitType
local limitType = XFubenConfigs.GetStageCharacterLimitType(self.StageId)
local isShow = XFubenConfigs.IsStageCharacterLimitConfigExist(limitType)
self.PanelCharacterLimit.gameObject:SetActiveEx(isShow)
if not isShow then return end
-- 图标
self.ImgCharacterLimit:SetSprite(XFubenConfigs.GetStageCharacterLimitImageTeamEdit(limitType))
-- 文案
local limitBuffId = XFubenConfigs.GetStageCharacterLimitBuffId(self.StageId)
self.TxtCharacterLimit.text = XFubenConfigs.GetStageCharacterLimitTextTeamEdit(limitType
, self.Team:GetCharacterType(), limitBuffId)
end
function XUiBattleRoleRoom:RefreshStageName()
local chapterName, stageName = XDataCenter.FubenManager.GetFubenNames(self.StageId)
self.TxtChapterName.text = chapterName
self.TxtStageName.text = stageName
end
function XUiBattleRoleRoom:RefreshRoleDetalInfo(isShow)
if isShow == nil then isShow = self.Team:GetIsShowRoleDetailInfo() end
local entityId
local characterViewModel
for pos = 1, 3 do
self["CharacterInfo" .. pos].gameObject:SetActiveEx(isShow)
if isShow then
entityId = self.Team:GetEntityIdByTeamPos(pos)
characterViewModel = self.Proxy:GetCharacterViewModelByEntityId(entityId)
if characterViewModel then
self["TxtFight" .. pos].text = self.Proxy:GetRoleAbility(entityId)
self["RImgType" .. pos]:SetRawImage(characterViewModel:GetProfessionIcon())
else
self["CharacterInfo" .. pos].gameObject:SetActiveEx(false)
end
end
end
end
function XUiBattleRoleRoom:GetClickPosition()
return XUiHelper.GetScreenClickPosition(self.Transform, self.Camera)
end
return XUiBattleRoleRoom