--国战PVP 匹配界面 local UICountryMatchPanel = UIViewClass() local ReadyState = { Ready = 0, --准备好了 Cancel = 1, --拒绝了 Unknown = 2,--待定 } --region 生命周期方法 function UICountryMatchPanel:OnOpened(context) AuxUtil.StopAllTimeline() self:RegistSystemEvent(EventID.UI_TeamMatch_MemberStateChanged,self.RefreshMemberHeadInfoReadyState) self.time = context.time --倒计时 self:Init() -- 打开界面时停止自动寻路 NotSyncBattleSetter.StopAutoFightPathInTown() --停止现在的寻路 end --endregion function UICountryMatchPanel:Init() self.cellData = {} --缓存匹配数据 --攻击方、受击方国家 local attackCountryIDS = CTL.Country.GetCountryNameIDS(CTL.Team.GetAttackerCountry()) local beAttackCountryIDS = CTL.Country.GetCountryNameIDS(CTL.Team.GetBeAttackerCountry()) UIUtils.SetLabel(self.group_MyInfo.txt_Attack, string.format("%s:%s",UIUtils.GetLocalizedTxt(Const_IDS.IDS_CountryPVP_Team_FightTeam1),UIUtils.GetLocalizedTxt(attackCountryIDS))) --攻击方 UIUtils.SetLabel(self.group_EnemyInfo.txt_Attack,string.format("%s:%s",UIUtils.GetLocalizedTxt(Const_IDS.IDS_CountryPVP_Team_FightTeam2),UIUtils.GetLocalizedTxt(beAttackCountryIDS)))-- 受击方 --攻击方 local attackers,beAttackers = CTL.Team.GetAttackMembersAndBeAttackMembers() for i, v in ipairs(self.group_MyInfo.group_Heads) do self:RefreshMemberHeadInfo(attackers[i], v) if attackers[i] then local data = {switch = v.state_Switch,isAttacker = true,state = attackers[i].state and ReadyState.Ready or ReadyState.Unknown} self.cellData[attackers[i].PlayerName] = data end end --受击方 for i, v in ipairs(self.group_EnemyInfo.group_Heads) do self:RefreshMemberHeadInfo(beAttackers[i], v) if beAttackers[i] then local data = {switch = v.state_Switch,isAttacker = false,state = beAttackers[i].state and ReadyState.Ready or ReadyState.Unknown} self.cellData[beAttackers[i].PlayerName] = data end end --几秒后进入战场 local timeStr = UIUtils.GetLocalizedTxt(Const_IDS.IDS_CountryPVP_Team_Timer_Enter) self.group_ExitTimer:ResetAndBeginCustomTimer(false, self.time, 0, timeStr) self.slider_ProgressBar.value = 1 self:StartRepeatFunc(self.OnUpdateFun,0,-1) self:StartRepeatFunc(self.OnExitFunc,self.time,1) self:CheckAllReady() end function UICountryMatchPanel:OnExitFunc(deltaTime, timeSinceUpdate) self:CloseView() end function UICountryMatchPanel:OnUpdateFun(deltaTime, timeSinceUpdate) self.passTime = timeSinceUpdate self.slider_ProgressBar.value = 1- self.passTime/self.time end function UICountryMatchPanel:RefreshMemberHeadInfo(memberInfo,cell) if not memberInfo then UIUtils.SetActive(cell.gameObject,false) return end UIUtils.SetActive(cell.gameObject,true) UIUtils.SetLabel(cell.name,memberInfo.PlayerName) local isMy = memberInfo.PlayerName == BattleDataGetter.GetPlayerName() if isMy then cell.nameColor_State:SetState(1) else cell.nameColor_State:SetState(0) end CTL.Character.SetPortraitAndFrame(cell.head, memberInfo.PortraitId, memberInfo.FrameId, memberInfo.PlayerLevel) UIUtils.SetLabel(cell.name,memberInfo.PlayerName) UIUtils.SetLabel(cell.txt_BR,memberInfo.gs) --准备状态 cell.state_Switch:SetState(memberInfo.state and ReadyState.Ready or ReadyState.Unknown) --将确认勾选先默认隐藏 UIUtils.SetActive(cell.img_Ready, false) UIUtils.SetActive(cell.img_Refuse, false) --势力 UIUtils.SetLabel(cell.txt_GuildName,memberInfo.guildName) UIUtils.SetLabel(cell.txt_GuildNameInitiate,memberInfo.emblemContent) if memberInfo.emblemFrame > 0 then UTL.Item.SetAtlasSprite(cell.img_GuildIcon, "UI_Guild", DataSheetManager.GuildEmblem:GetDataByID(memberInfo.emblemFrame).Image) end UIUtils.SetActive(cell.txt_GuildNameInitiate, true) UIUtils.SetActive(cell.img_GuildIcon, true) end function UICountryMatchPanel:RefreshMemberHeadInfoReadyState(ready,name) for i,v in pairs(self.cellData) do if i == name then if ready then self.cellData[i].switch:SetState(ReadyState.Ready) self.cellData[i].state = ReadyState.Ready else self.cellData[i].switch:SetState(ReadyState.Cancel) self.cellData[i].state = ReadyState.Cancel end end end self:CheckAllReady() end --受击方是否全部准备完成 function UICountryMatchPanel:IsBeAttackersAllReady() for i,v in pairs(self.cellData) do if not self.cellData[i].isAttacker and self.cellData[i].state == ReadyState.Unknown then return false end end return true end --攻击方是否全部准备完成 function UICountryMatchPanel:IsAttackersAllReady() for i,v in pairs(self.cellData) do if self.cellData[i].isAttacker and self.cellData[i].state == ReadyState.Unknown then return false end end return true end function UICountryMatchPanel:CheckAllReady() local isBeAttackAllReady = self:IsBeAttackersAllReady() local isAttackAllReady = self:IsAttackersAllReady() --各自集结状态刷新 self.group_MyInfo.state_Gather:SetState(isAttackAllReady and 1 or 0) if isAttackAllReady then UIUtils.SetLabelText(self.group_MyInfo.txt_State,Const_IDS.IDS_CountryPVP_Team_Finish) else UIUtils.SetLabelText(self.group_MyInfo.txt_State,Const_IDS.IDS_CountryPVP_Team_Waiting) end self.group_EnemyInfo.state_Gather:SetState(isBeAttackAllReady and 1 or 0) if isBeAttackAllReady then UIUtils.SetLabelText(self.group_EnemyInfo.txt_State,Const_IDS.IDS_CountryPVP_Team_Finish) else UIUtils.SetLabelText(self.group_EnemyInfo.txt_State,Const_IDS.IDS_CountryPVP_Team_Waiting) end --双方全部集结 if isBeAttackAllReady and isAttackAllReady then self.group_ExitTimer:EndTimer() self.group_ExitTimer:SetCDLabel(UIUtils.GetLocalizedTxt(Const_IDS.IDS_CountryPVP_Team_AllReady)) UIUtils.SetActive(self.slider_ProgressBar,false) self:StopRepeatFunc(self.OnUpdateFun) end end return UICountryMatchPanel