ro-table/Asstes/Resources/Script/FrameWork/GUI/view/Pvp/TeamPwsPreparePopUp.txt
2025-06-04 05:02:57 +08:00

203 lines
6.7 KiB
Plaintext

-- TeamPws and FreeBattle
autoImport("BaseView")
autoImport("TeamPwsPrepareCell")
TeamPwsPreparePopUp = class("TeamPwsPreparePopUp", BaseView);
TeamPwsPreparePopUp.ViewType = UIViewType.PopUpLayer
TeamPwsPreparePopUp.Instance = nil
TeamPwsPreparePopUp.Anchor = nil -- MainView/TeamPwsMatchBtn.transform
function TeamPwsPreparePopUp.Show(pvpType)
if (not TeamPwsPreparePopUp.Instance) then
GameFacade.Instance:sendNotification(UIEvent.JumpPanel, {view = PanelConfig.TeamPwsPreparePopUp, viewdata = {pvptype = pvpType}})
return
end
if (TeamPwsPreparePopUp.Instance.isShow) then
return
end
if (TeamPwsPreparePopUp.Anchor and TeamPwsPreparePopUp.Anchor.gameObject.activeInHierarchy) then
TeamPwsPreparePopUp.Instance.gameObject.transform.localScale = Vector3.zero
TeamPwsPreparePopUp.Instance.gameObject.transform.position = TeamPwsPreparePopUp.Anchor.position
TweenPosition.Begin(TeamPwsPreparePopUp.Instance.gameObject, 0.2, Vector3.zero)
TweenScale.Begin(TeamPwsPreparePopUp.Instance.gameObject, 0.2, Vector3.one)
else
TeamPwsPreparePopUp.Instance.gameObject.transform.localPosition = Vector3.zero
TeamPwsPreparePopUp.Instance.gameObject.transform.localScale = Vector3.one
end
if (pvpType) then
TeamPwsPreparePopUp.Instance.pvpType = pvpType
end
TeamPwsPreparePopUp.Instance:OnShow()
TeamPwsPreparePopUp.Instance.isShow = true
end
function TeamPwsPreparePopUp.Hide()
if (not TeamPwsPreparePopUp.Instance or not TeamPwsPreparePopUp.Instance.isShow) then
return
end
if (TeamPwsPreparePopUp.Anchor and TeamPwsPreparePopUp.Anchor.gameObject.activeInHierarchy) then
TweenPosition.Begin(TeamPwsPreparePopUp.Instance.gameObject, 0.2, TeamPwsPreparePopUp.Anchor.position).worldSpace = true
end
TweenScale.Begin(TeamPwsPreparePopUp.Instance.gameObject, 0.2, Vector3.zero)
TeamPwsPreparePopUp.Instance:OnHide()
TeamPwsPreparePopUp.Instance.isShow = false
end
function TeamPwsPreparePopUp:Init()
if (TeamPwsPreparePopUp.Instance) then
self:CloseSelf()
return
end
TeamPwsPreparePopUp.Instance = self
self:FindObj()
self:AddButtonEvt()
self:AddViewEvt()
TeamPwsPreparePopUp.Show(self.viewdata.viewdata.pvptype)
end
function TeamPwsPreparePopUp:FindObj()
local gridMyTeam = self:FindComponent("gridMyTeam", UIGrid)
self.listMyTeam = UIGridListCtrl.new(gridMyTeam, TeamPwsPrepareCell, "TeamPwsPrepareCell")
local gridEnemyTeam = self:FindComponent("gridEnemyTeam", UIGrid)
self.listEnemyTeam = UIGridListCtrl.new(gridEnemyTeam, TeamPwsPrepareCell, "TeamPwsPrepareCell")
self.sliderCountDown = self:FindComponent("SliderCountDown", UISlider)
self.labCountDown = self:FindComponent("labCountDown", UILabel)
self.objBtnPrepare = self:FindGO("BtnPrepare")
self.objPrepared = self:FindGO("labPrepared")
end
function TeamPwsPreparePopUp:AddButtonEvt()
self:AddClickEvent(self.objBtnPrepare, function() self:ClickButtonPrepare() end)
self:AddClickEvent(self:FindGO("BtnMin"), function() TeamPwsPreparePopUp.Hide() end)
end
function TeamPwsPreparePopUp:AddViewEvt()
self:AddListenEvt(ServiceEvent.MatchCCmdNtfMatchInfoCCmd, self.HandleNtfMatchInfo)
self:AddListenEvt(ServiceEvent.MatchCCmdUpdatePreInfoMatchCCmd, self.HandleUpdatePreInfoMatchCCmd)
self:AddListenEvt(PVPEvent.TeamPws_Launch, self.HandleClose)
end
function TeamPwsPreparePopUp:InitData()
if (not self.data) then
LogUtility.Error("未找到準備數據!")
self:CloseSelf()
return
end
if (self.data.type ~= self.pvpType) then
LogUtility.Warning(string.format("界面pvp型別(%s)與數據pvp型別(%s)不一致,以數據型別為準。", self.pvpType, self.data.type))
self.pvpType = self.data.type
end
local myCharID = Game.Myself.data.id
local datas = self.data.myTeam
if (datas) then
for i = 1, #datas do
local data = datas[i]
if (myCharID == data.charID) then
self.objBtnPrepare:SetActive(not data.isReady)
self.objPrepared:SetActive(data.isReady)
break
end
end
end
local config = self.pvpType == PvpProxy.Type.TeamPws and GameConfig.PvpTeamRaid or GameConfig.PvpTeamRaid_Relax
self.maxTeamPwsPrepareTime = config.MaxPrepareTime
self.startPrepareTime = PvpProxy.Instance:GetTeamPwsPreStartTime()
self.listMyTeam:ResetDatas(self.data.myTeam)
self.listEnemyTeam:ResetDatas(self.data.enemyTeam)
self.listMyTeam:Layout()
self.listEnemyTeam:Layout()
if (self.startPrepareTime) then
TimeTickManager.Me():CreateTick(0, 33, self.UpdateCountDown, self, 1)
else
self.labCountDown.text = string.format("%ss", 0)
self.sliderCountDown.value = 0
end
end
function TeamPwsPreparePopUp:UpdateCountDown()
local curTime = (ServerTime.CurServerTime() - self.startPrepareTime) / 1000
local leftTime = math.max(self.maxTeamPwsPrepareTime - curTime, 0)
self.labCountDown.text = string.format("%ss", math.ceil(leftTime))
self.sliderCountDown.value = leftTime / self.maxTeamPwsPrepareTime
if (leftTime == 0) then
TimeTickManager.Me():ClearTick(self, 1)
end
end
function TeamPwsPreparePopUp:HandleNtfMatchInfo(note)
if (note.body and note.body.etype == self.pvpType) then
self:CloseSelf()
end
end
function TeamPwsPreparePopUp:HandleUpdatePreInfoMatchCCmd(note) -- 重新整理列表訊息
if (not self.data) then return end
if (note.body.etype ~= self.pvpType and note.body.etype ~= 0) then
LogUtility.Error(string.format("更新準備的pvp型別(%s)與目前數據pvp型別(%s)不一致", note.body.etype, self.pvpType))
return
end
local charID = note.body.charid
if (not self:TryUpdateData(charID, self.listMyTeam)) then
self:TryUpdateData(charID, self.listEnemyTeam)
end
end
function TeamPwsPreparePopUp:HandleClose()
PvpProxy.Instance:ClearTeamPwsPreInfo()
PvpProxy.Instance:ClearTeamPwsMatchInfo()
self:CloseSelf()
end
function TeamPwsPreparePopUp:TryUpdateData(charID, list)
local cell
local cells = list:GetCells()
for i = 1, #cells do
cell = cells[i]
if (cell.charID == charID) then
cell:Prepared()
if (charID == Game.Myself.data.id) then
self.objBtnPrepare:SetActive(false)
self.objPrepared:SetActive(true)
end
return true
end
end
return false
end
function TeamPwsPreparePopUp:ClickButtonPrepare()
if (self.disableClick) then return end
ServiceMatchCCmdProxy.Instance:CallUpdatePreInfoMatchCCmd(nil, self.pvpType)
self.disableClick = true
self.ltDisableClick = LeanTween.delayedCall(3, function()
self.disableClick = false
self.ltDisableClick = nil
end)
end
function TeamPwsPreparePopUp:OnShow()
self.super.OnShow(self)
self.data = PvpProxy.Instance:GetTeamPwsPreInfo()
self:InitData()
end
function TeamPwsPreparePopUp:OnHide()
TimeTickManager.Me():ClearTick(self, 1)
self.super.OnHide(self)
end
function TeamPwsPreparePopUp:OnExit()
TimeTickManager.Me():ClearTick(self, 1)
if (self.ltDisableClick) then
self.ltDisableClick:cancel()
self.ltDisableClick = nil
end
TeamPwsPreparePopUp.Instance = nil
self.super.OnExit(self)
end