local XUiMoeWarVote = XLuaUiManager.Register(XLuaUi, "UiMoeWarVote") local XUiPanelPlayerVote = require("XUi/XUiMoeWar/SubPage/XUiPanelPlayerVote") local tableInsert = table.insert local Vector2 = CS.UnityEngine.Vector2 local TipTextContentPos = {[1] = Vector2(0,231),[2] = Vector2(-260,231),[3] = Vector2(460,231)} local TipTextContentPosL = {[1] = Vector2(0,231),[2] = Vector2(-600,231),[3] = Vector2(0,231),[4] = Vector2(600,231)} function XUiMoeWarVote:OnStart(defaultSelectIndex) if defaultSelectIndex then self.SelectIndex = self:ConvertIndexToSelectIndex(defaultSelectIndex) else self.SelectIndex = self:ConvertIndexToSelectIndex(XDataCenter.MoeWarManager.GetDefaultSelect()) end self.IsPlayAnimation = false if self:IsFinalSession() and XDataCenter.MoeWarManager.GetCurMatch():GetType() == XMoeWarConfig.MatchType.Publicity then self.IsSkip = false else self.IsSkip = XDataCenter.MoeWarManager.IsSelectSkip() end if self.IsSkip then self.BtnShield:SetButtonState(CS.UiButtonState.Select) end self.BtnTabGoList = {} self.BtnObjDic = {} self:RegisterButtonEvent() self:InitSceneRoot() self:InitVotePanel() self.LastMatchType = XDataCenter.MoeWarManager.GetCurMatch():GetSessionId() self.PairList = XDataCenter.MoeWarManager.GetCurMatch():GetPairList() self:InitButtonGroup() self:UpdateMatchName() self:UpdatePanelState() self:UpdateMatchTime() if self.PanelSpecialTool then self.ActInfo = XDataCenter.MoeWarManager.GetActivityInfo() self.AssetActivityPanel = XUiPanelActivityAsset.New(self.PanelSpecialTool) self.AssetActivityPanel:Refresh(self.ActInfo.CurrencyId) for i = 1,#self.ActInfo.CurrencyId do XDataCenter.ItemManager.AddCountUpdateListener(self.ActInfo.CurrencyId[i], function() self.AssetActivityPanel:Refresh(self.ActInfo.CurrencyId) end, self.AssetActivityPanel) end end self.BtnRank:SetName(CS.XTextManager.GetText("MoeWarRankName")) self.BtnRole:SetName(CS.XTextManager.GetText("MoeWarIntroduceName")) self.BtnSchedule:SetName(CS.XTextManager.GetText("MoeWarGameName")) XEventManager.AddEventListener(XEventId.EVENT_MOE_WAR_PLAY_SCREEN_RECORD_ANIMATION,self.PlayScreenRecordAnimation,self) self.AfterHandler = function(evt,ui) self:AfterUiOpen(ui) end end function XUiMoeWarVote:OnEnable() CS.XGameEventManager.Instance:RegisterEvent(CS.XEventId.EVENT_UI_ALLOWOPERATE,self.AfterHandler) XLuaUiManager.Remove("UiMoeWarGroupList") self.PairList = XDataCenter.MoeWarManager.GetCurMatch():GetPairList() self:PlaySwitchAnimation() self:UpdateAllPanel() self:StartTimer() end function XUiMoeWarVote:OnDisable() if self.PlayingCv then self.PlayingCv:Stop() end if self.AnimationTimer then self.IsPlayAnimation = false CS.XScheduleManager.UnSchedule(self.AnimationTimer) end self:StopTimer() self:ClearPanelBulletCache() CS.XGameEventManager.Instance:RemoveEvent(CS.XEventId.EVENT_UI_ALLOWOPERATE,self.AfterHandler) end function XUiMoeWarVote:OnDestroy() XEventManager.RemoveEventListener(XEventId.EVENT_MOE_WAR_PLAY_SCREEN_RECORD_ANIMATION,self.PlayScreenRecordAnimation,self) end function XUiMoeWarVote:OnGetEvents() return { XEventId.EVENT_MOE_WAR_UPDATE, XEventId.EVENT_MOE_WAR_PLAY_THANK_ANIMATION, XEventId.EVENT_MOE_WAR_VOTE_PANEL_UPDATE, XEventId.EVENT_MOE_WAR_ACTIVITY_END, } end function XUiMoeWarVote:OnNotify(event, ...) local args = { ... } if event == XEventId.EVENT_MOE_WAR_UPDATE then local match = XDataCenter.MoeWarManager.GetCurMatch() self.PairList = match:GetPairList() if self:CheckIsNeedPop() then return end self:UpdateAllPanel() if match:GetType() == XMoeWarConfig.MatchType.Publicity then XLuaUiManager.Close("UiMoeWarPollTips") local saveKey if match:GetSessionId() == XMoeWarConfig.SessionType.Game3In1 then saveKey = string.format("%s_%s_%d_%d","MOE_WAR_VOTE_ANIMATION_RECORD",tostring(XPlayer.Id),match:GetSessionId(),1) else saveKey = string.format("%s_%s_%d_%d","MOE_WAR_VOTE_ANIMATION_RECORD",tostring(XPlayer.Id),match:GetSessionId(),self:ConvertSelectIndexToIndex(self.SelectIndex)) end if saveKey then XSaveTool.SaveData(saveKey,1) end self:PlayRunAnimation(self.IsSkip) end elseif event == XEventId.EVENT_MOE_WAR_PLAY_THANK_ANIMATION then self:PlayThankAnimation(args[1]) elseif event == XEventId.EVENT_MOE_WAR_VOTE_PANEL_UPDATE then self:UpdateAllPanel() elseif event == XEventId.EVENT_MOE_WAR_ACTIVITY_END then XUiManager.TipText("MoeWarActivityOver") XLuaUiManager.RunMain() end end function XUiMoeWarVote:AfterUiOpen(ui) if ui then if ui[0].UiData.UiName ~= self.Name then return end end local match = XDataCenter.MoeWarManager.GetCurMatch() if match:GetType() == XMoeWarConfig.MatchType.Publicity and match:GetSessionId() == XMoeWarConfig.SessionType.Game3In1 then local saveKey = string.format("%s_%s_%d_%d", XMoeWarConfig.MOE_WAR_VOTE_ANIMATION_RECORD, tostring(XPlayer.Id), match:GetSessionId(), 1) local isShow = XSaveTool.GetData(saveKey) if not isShow then self:PlayRunAnimation(self.IsSkip) XSaveTool.SaveData(saveKey, 1) else self:PlayWinnerAnimation() end elseif match:GetType() == XMoeWarConfig.MatchType.Publicity then local saveKey = string.format("%s_%s_%d_%d", XMoeWarConfig.MOE_WAR_VOTE_ANIMATION_RECORD, tostring(XPlayer.Id), match:GetSessionId(), self:ConvertSelectIndexToIndex(self.SelectIndex)) local isShow = XSaveTool.GetData(saveKey) if not isShow then self:PlayRunAnimation(self.IsSkip) XSaveTool.SaveData(saveKey, 1) else self:PlayWinnerAnimation() end end self:CheckIsNeedPop() end function XUiMoeWarVote:PlayModelAnimation(playerEntity,playerModel,type) self.IsPlayAnimation = true playerModel:PlayAnima(playerEntity:GetAnim(type)) --self.PlayingCv = XSoundManager.PlaySoundByType(playerEntity:GetCv(type),XSoundManager.SoundType.CV) --海外萌战由于语音不全所以屏蔽语音加入显示弹幕 self.content = XFavorabilityConfigs.GetCvContent(playerEntity:GetCv(type)) self.TxtContent.text = self.content self.PanelLayout.gameObject:SetActiveEx(true) self:SetTextContentPosWithId(playerEntity.Id) if self.AnimationTimer then CS.XScheduleManager.UnSchedule(self.AnimationTimer) end self.AnimationTimer = CS.XScheduleManager.ScheduleOnce(function() self.IsPlayAnimation = false self.PanelLayout.gameObject:SetActiveEx(false) end,math.floor(playerEntity:GetLength(type) * 1000)) end function XUiMoeWarVote:PlayThankAnimation(playerId) local playerModel = self:GetPlayAnimationPlayer(playerId) local playerEntity = XDataCenter.MoeWarManager.GetPlayer(playerId) local panelList = self:IsFinalSession() and self.ThreeVotePanel or self.TwoVotePanel for i = 1, #panelList do panelList[i]:PlayVoteChangeEffect() end self:PlayModelAnimation(playerEntity, playerModel, XMoeWarConfig.ActionType.Thank) end function XUiMoeWarVote:PlayRunAnimation(isSkip) if isSkip then return end if self:IsFinalSession() then if self.PairList[1] then XDataCenter.MoeWarManager.EnterAnimation(self.PairList[1]) end else local realIndex = self:ConvertSelectIndexToIndex(self.SelectIndex) if self.PairList[realIndex] then XDataCenter.MoeWarManager.EnterAnimation(self.PairList[realIndex]) end end end function XUiMoeWarVote:PlayScreenRecordAnimation(playerId) if self.IsPlayAnimation then return end local playerModel = self:GetPlayAnimationPlayer(playerId) local playerEntity = XDataCenter.MoeWarManager.GetPlayer(playerId) playerModel:PlayAnima(playerEntity:GetAnim(XMoeWarConfig.ActionType.Thank)) end function XUiMoeWarVote:PlayWinnerAnimation() local playerModel,playerEntity,pairConfig if not self:IsFinalSession() then pairConfig = self.PairList[self:ConvertSelectIndexToIndex(self.SelectIndex)] else pairConfig = self.PairList[1] end if not pairConfig then return end if self.EffectVictory then self.EffectVictory.gameObject:SetActiveEx(false) self.EffectVictory.gameObject:SetActiveEx(true) end playerEntity = XDataCenter.MoeWarManager.GetPlayer(pairConfig.WinnerId) for i = 1, #pairConfig.Players do if pairConfig.Players[i] == pairConfig.WinnerId then if self:IsFinalSession() then playerModel = self.ThreeCharacterModel[i] else playerModel = self.TwoCharacterModel[i] end end end if not playerModel then return end self:PlayModelAnimation(playerEntity,playerModel,XMoeWarConfig.ActionType.Thank) end function XUiMoeWarVote:OnClickBtnShield() self.IsSkip = self.BtnShield:GetToggleState() XDataCenter.MoeWarManager.SetIsSelectSkip(self.IsSkip) XDataCenter.MoeWarManager.ClearAllScreenRecord() end function XUiMoeWarVote:OnClickPlayRecord() self:PlayRunAnimation(false) end function XUiMoeWarVote:OnClickRankList() XLuaUiManager.Open("UiMoeWarRankingList") end function XUiMoeWarVote:OnClickBtnRole() XLuaUiManager.Open("UiMoeWarMessage") end function XUiMoeWarVote:OnClickBtnSchedule() XLuaUiManager.Open("UiMoeWarSchedule",self:GetCurrSelectGroup(self.SelectIndex)) end function XUiMoeWarVote:OnClickModel(eventData,index) if self.IsPlayAnimation then return end local match = XDataCenter.MoeWarManager.GetCurMatch() local playerEntity,playerModel if match:GetSessionId() == XMoeWarConfig.SessionType.Game3In1 then local playerId = match:GetPairList()[1].Players[index] playerEntity = XDataCenter.MoeWarManager.GetPlayer(playerId) playerModel = self.ThreeCharacterModel[index] else local realIndex = self:ConvertSelectIndexToIndex(self.SelectIndex) local playerId = self.PairList[realIndex].Players[index] playerEntity = XDataCenter.MoeWarManager.GetPlayer(playerId) playerModel = self.TwoCharacterModel[index] end if playerEntity and playerModel then self:PlayModelAnimation(playerEntity,playerModel,XMoeWarConfig.ActionType.Intro) end end function XUiMoeWarVote:SetTextContentPosWithId(curPlayerId) local match = XDataCenter.MoeWarManager.GetCurMatch() local index = 0 local pos = nil if match:GetSessionId() == XMoeWarConfig.SessionType.Game3In1 then pos = TipTextContentPosL for i = 1, 3 do local playerId = match:GetPairList()[1].Players[i] if playerId == curPlayerId then index = i break end end else pos = TipTextContentPos local realIndex = self:ConvertSelectIndexToIndex(self.SelectIndex) for i = 1, 2 do local playerId = self.PairList[realIndex].Players[i] if playerId == curPlayerId then index = i break end end end index = index + 1 if pos then if pos[index] then self.PanelChat.anchoredPosition = pos[index] else self.PanelChat.anchoredPosition = pos[1] end else self.PanelChat.anchoredPosition = TipTextContentPos[1] end end function XUiMoeWarVote:RegisterButtonEvent() self.BtnBack.CallBack = function() XLuaUiManager.Close("UiMoeWarVote") end self.BtnMainUi.CallBack = function() XLuaUiManager.RunMain() end self.BtnRank.CallBack = function() self:OnClickRankList() end self.BtnRole.CallBack = function() self:OnClickBtnRole() end self.BtnSchedule.CallBack = function() self:OnClickBtnSchedule() end self.BtnVideo.CallBack = function() self:OnClickPlayRecord() end self.BtnShield.CallBack = function() self:OnClickBtnShield() end if self.BtnHelp then local voteHelpId = XMoeWarConfig.GetVoteHelpId() self.BtnHelp.CallBack = function () if voteHelpId > 0 then local template = XHelpCourseConfig.GetHelpCourseTemplateById(voteHelpId) XUiManager.ShowHelpTip(template.Function) end end self.BtnHelp.gameObject:SetActiveEx(voteHelpId > 0) end end function XUiMoeWarVote:InitVotePanel() self.TwoVotePanel = {} self.TwoVoteResultImgList = {} for i = 1, 2 do local panel = XUiPanelPlayerVote.New(self.Panel01:FindTransform("PanelVote" .. i).gameObject) tableInsert(self.TwoVotePanel, panel) local img = self.Panel01:FindTransform("ImgIconResult"..i):GetComponent("Image") tableInsert(self.TwoVoteResultImgList,img) end self.ThreeVotePanel = {} self.ThreeVoteResultImgList = {} for i = 1, 3 do local panel = XUiPanelPlayerVote.New(self.Panel02:FindTransform("PanelVote" .. i).gameObject) tableInsert(self.ThreeVotePanel, panel) local img = self.Panel02:FindTransform("ImgIconResult"..i):GetComponent("Image") tableInsert(self.ThreeVoteResultImgList,img) end end function XUiMoeWarVote:InitButtonGroup() local match = XDataCenter.MoeWarManager.GetCurMatch() if not match or match:GetSessionId() == XMoeWarConfig.SessionType.Game3In1 then return end self.PairList = match:GetPairList() local groups = XDataCenter.MoeWarManager.GetActivityInfo() local currParentIndex = 0 for i = 1, #(groups.GroupName) do local children = match:GetPairListByGroupId(i) local obj = CS.UnityEngine.GameObject.Instantiate(self.BtnFirst, self.PanelTitleBtnContent) ---@type XUiComponent.XUiButton local btnComponent = obj:GetComponent("XUiButton") btnComponent:SetNameByGroup(1, groups.GroupName[i]) btnComponent:SetNameByGroup(2, groups.GroupSecondName[i]) currParentIndex = #self.BtnTabGoList + 1 tableInsert(self.BtnTabGoList, btnComponent) for j = 1, #children do local currIndex = (i - 1)*#children + j local childObj = nil if self.BtnObjDic[currIndex] then childObj = self.BtnObjDic[currIndex] else childObj = CS.UnityEngine.GameObject.Instantiate(self.BtnChild, self.PanelTitleBtnContent) self.BtnObjDic[currIndex] = childObj end ---@type XUiComponent.XUiButton local childBtnComponent = childObj:GetComponent("XUiButton") childBtnComponent.SubGroupIndex = currParentIndex tableInsert(self.BtnTabGoList, childBtnComponent) local playerA = XDataCenter.MoeWarManager.GetPlayer(children[j].Players[1]) local playerB = XDataCenter.MoeWarManager.GetPlayer(children[j].Players[2]) local imgLeftHead = childObj.transform:Find("Head1/StandIcon"):GetComponent("RawImage") local imgRightHead = childObj.transform:Find("Head2/StandIcon"):GetComponent("RawImage") imgLeftHead:SetRawImage(playerA:GetCircleHead()) imgRightHead:SetRawImage(playerB:GetCircleHead()) if match:GetType() == XMoeWarConfig.MatchType.Publicity then local imgLeftLose = childObj.transform:Find("Head1/ImgLose") local imgRightLose = childObj.transform:Find("Head2/ImgLose") imgLeftLose.gameObject:SetActiveEx(children[j].WinnerId ~= children[j].Players[1]) imgRightLose.gameObject:SetActiveEx(children[j].WinnerId ~= children[j].Players[2]) end end end for i = 1, #(groups.GroupName) do local children = match:GetPairListByGroupId(i) for j = #children + 1, (#self.BtnTabGoList / 3) - 1 do local currIndex = (i - 1) * #children + j + i if self.BtnObjDic[currIndex] then self.BtnObjDic[currIndex].gameObject:SetActiveEx(false) end end end self.BtnFirst.gameObject:SetActiveEx(false) self.BtnChild.gameObject:SetActiveEx(false) self.PanelTitleBtnGroup:Init(self.BtnTabGoList, function(index) self:OnSelectToggle(index) end) self.PanelTitleBtnGroup:SelectIndex(self.SelectIndex) end function XUiMoeWarVote:OnSelectToggle(index) self.SelectIndex = index local realIndex = self:ConvertSelectIndexToIndex(index) self:UpdateCurrModel(realIndex) self:UpdateVotePanel(realIndex) self.PanelLayout.gameObject:SetActiveEx(false) local match = XDataCenter.MoeWarManager.GetCurMatch() self:PlaySwitchAnimation() if match:GetType() == XMoeWarConfig.MatchType.Publicity then local saveKey = string.format("%s_%s_%d_%d","MOE_WAR_VOTE_ANIMATION_RECORD",tostring(XPlayer.Id),match:GetSessionId(),realIndex) local data = XSaveTool.GetData(saveKey) if not data then if not self.IsSkip then XDataCenter.MoeWarManager.EnterAnimation(self.PairList[realIndex]) else self:PlayWinnerAnimation() end XSaveTool.SaveData(saveKey, 1) else self:PlayWinnerAnimation() end self:UpdateResultIcon() end end function XUiMoeWarVote:InitSceneRoot() local root = self.UiModelGo.transform self.TwoCharacterPanel = root:FindTransform("Panel01") self.ThreeCharacterPanel = root:FindTransform("Panel02") self.TwoCharacterTransform = {} self.TwoCharacterModel = {} self.TwoCharacterEffect = {} self.TwoCharacterTransform[1] = self.TwoCharacterPanel:FindTransform("PanelModelCase1") self.TwoCharacterTransform[2] = self.TwoCharacterPanel:FindTransform("PanelModelCase2") for i = 1, #self.TwoCharacterTransform do self.TwoCharacterEffect[i] = self.TwoCharacterPanel:Find("PanelModelCase"..i.."/ImgEffectHuanren1").gameObject self.TwoCharacterModel[i] = XUiPanelRoleModel.New(self.TwoCharacterTransform[i], self.Name, nil, true, nil, true) local inputHandler = self.TwoCharacterTransform[i]:GetComponent(typeof(CS.XGoInputHandler)) if not inputHandler then inputHandler = self.TwoCharacterTransform[i].gameObject:AddComponent(typeof(CS.XGoInputHandler)) end local index = i inputHandler:AddPointerClickListener(function(eventData) self:OnClickModel(eventData,index) end) end self.ThreeCharacterTransform = {} self.ThreeCharacterModel = {} self.ThreeCharacterEffect = {} self.ThreeCharacterTransform[1] = self.ThreeCharacterPanel:FindTransform("PanelModelCase1") self.ThreeCharacterTransform[2] = self.ThreeCharacterPanel:FindTransform("PanelModelCase2") self.ThreeCharacterTransform[3] = self.ThreeCharacterPanel:FindTransform("PanelModelCase3") for i = 1, #self.ThreeCharacterTransform do self.ThreeCharacterEffect[i] = self.ThreeCharacterPanel:Find("PanelModelCase"..i.."/ImgEffectHuanren1").gameObject self.ThreeCharacterModel[i] = XUiPanelRoleModel.New(self.ThreeCharacterTransform[i], self.Name, nil, true, nil, true) local inputHandler = self.ThreeCharacterTransform[i]:GetComponent(typeof(CS.XGoInputHandler)) if not inputHandler then inputHandler = self.ThreeCharacterTransform[i].gameObject:AddComponent(typeof(CS.XGoInputHandler)) end local index = i inputHandler:AddPointerClickListener(function(eventData) self:OnClickModel(eventData,index) end) end end function XUiMoeWarVote:UpdateAllPanel() self:UpdateTabGroup() self:UpdateVotePanel(self:ConvertSelectIndexToIndex(self.SelectIndex)) self:UpdateMatchName() self:UpdatePanelState() self:UpdateMatchTime() self:UpdateResultIcon() self:UpdateCurrModel(self:ConvertSelectIndexToIndex(self.SelectIndex)) end function XUiMoeWarVote:UpdateTabGroup() local match = XDataCenter.MoeWarManager.GetCurMatch() if not match or match:GetSessionId() == XMoeWarConfig.SessionType.Game3In1 then return end self.PairList = match:GetPairList() local groups = XDataCenter.MoeWarManager.GetActivityInfo() local currParentIndex = 0 for i = 1, #(groups.GroupName) do local children = match:GetPairListByGroupId(i) ---@type XUiComponent.XUiButton currParentIndex = #self.BtnTabGoList + 1 for j = 1, #children do local currIndex = (i - 1)*#children + j local childObj = nil if self.BtnObjDic[currIndex] then childObj = self.BtnObjDic[currIndex] else childObj = CS.UnityEngine.GameObject.Instantiate(self.BtnChild, self.PanelTitleBtnContent) self.BtnObjDic[currIndex] = childObj end self:UpdatePairGroup(children[j],childObj) end end end function XUiMoeWarVote:UpdatePairGroup(pairConfig,obj) local match = XDataCenter.MoeWarManager.GetCurMatch() local playerA = XDataCenter.MoeWarManager.GetPlayer(pairConfig.Players[1]) local playerB = XDataCenter.MoeWarManager.GetPlayer(pairConfig.Players[2]) local imgLeftHead = obj.transform:Find("Head1/StandIcon"):GetComponent("RawImage") local imgRightHead = obj.transform:Find("Head2/StandIcon"):GetComponent("RawImage") imgLeftHead:SetRawImage(playerA:GetCircleHead()) imgRightHead:SetRawImage(playerB:GetCircleHead()) if match:GetType() == XMoeWarConfig.MatchType.Publicity then local imgLeftLose = obj.transform:Find("Head1/ImgLose") local imgRightLose = obj.transform:Find("Head2/ImgLose") imgLeftLose.gameObject:SetActiveEx(pairConfig.WinnerId ~= pairConfig.Players[1]) imgRightLose.gameObject:SetActiveEx(pairConfig.WinnerId ~= pairConfig.Players[2]) end end function XUiMoeWarVote:UpdateCurrModel(index) if self:IsFinalSession() then for _, pairInfo in pairs(self.PairList) do for i = 1, #(pairInfo.Players) do local playerEntity = XDataCenter.MoeWarManager.GetPlayer(pairInfo.Players[i]) self.ThreeCharacterModel[i]:UpdateRoleModel(playerEntity:GetModel(), self.ThreeCharacterTransform[i], XModelManager.MODEL_UINAME.XUiMoeWarVote, function(model) model.gameObject:SetActiveEx(true) local animator = model:GetComponent("Animator") animator.applyRootMotion = false end,nil, true, true) end end else local pairConfig = self.PairList[index] local leftPlayer = XDataCenter.MoeWarManager.GetPlayer(pairConfig.Players[1]) local rightPlayer = XDataCenter.MoeWarManager.GetPlayer(pairConfig.Players[2]) self.TwoCharacterModel[1]:UpdateRoleModel(leftPlayer:GetModel(), self.TwoCharacterTransform[1], XModelManager.MODEL_UINAME.XUiMoeWarVote,function(model) model.gameObject:SetActiveEx(true) local animator = model:GetComponent("Animator") animator.applyRootMotion = false end, nil, true, true) self.TwoCharacterModel[2]:UpdateRoleModel(rightPlayer:GetModel(), self.TwoCharacterTransform[2], XModelManager.MODEL_UINAME.XUiMoeWarVote,function(model) model.gameObject:SetActiveEx(true) local animator = model:GetComponent("Animator") animator.applyRootMotion = false end, nil, true, true) end end function XUiMoeWarVote:UpdateVotePanel(index) if self:IsFinalSession() then for i = 1, #self.PairList do for j = 1, #(self.PairList[i].Players) do self.ThreeVotePanel[j]:Refresh(self.PairList[i].Players[j]) end end else local pairConfig = self.PairList[index] for i = 1, #(pairConfig.Players) do self.TwoVotePanel[i]:Refresh(pairConfig.Players[i]) end end end function XUiMoeWarVote:UpdateResultIcon() local match = XDataCenter.MoeWarManager.GetCurMatch() if match:GetType() ~= XMoeWarConfig.MatchType.Publicity then return end local iconList = XMoeWarConfig.GetIconList(match:GetSessionId()) if self:IsFinalSession() then local pairList = match:GetPairList() for i = 1,#pairList do for j = 1,#(pairList[i].Players) do if pairList[i].Players[j] == pairList[i].WinnerId then self:SetUiSprite(self.ThreeVoteResultImgList[j],iconList[1]) elseif pairList[i].Players[j] == pairList[i].SecondId then self:SetUiSprite(self.ThreeVoteResultImgList[j],iconList[2]) else self:SetUiSprite(self.ThreeVoteResultImgList[j],iconList[3]) end end end else local index = self:ConvertSelectIndexToIndex(self.SelectIndex) local pair = self.PairList[index] for i = 1, #(pair.Players) do if pair.Players[i] == pair.WinnerId then self:SetUiSprite(self.TwoVoteResultImgList[i],iconList[1]) self.TwoVoteResultImgList[i].gameObject:SetActiveEx(true) else self.TwoVoteResultImgList[i].gameObject:SetActiveEx(false) end end end end function XUiMoeWarVote:UpdatePanelState() self.Panel01.gameObject:SetActiveEx(not self:IsFinalSession()) self.Panel02.gameObject:SetActiveEx(self:IsFinalSession()) self.TwoCharacterPanel.gameObject:SetActiveEx(not self:IsFinalSession()) self.ThreeCharacterPanel.gameObject:SetActiveEx(self:IsFinalSession()) local match = XDataCenter.MoeWarManager.GetCurMatch() local type = match:GetType() self.BtnShield.gameObject:SetActiveEx(not (self:IsFinalSession() and type == XMoeWarConfig.MatchType.Publicity)) self.BtnShield:SetName(type == XMoeWarConfig.MatchType.Publicity and CS.XTextManager.GetText("MoeWarSkipAnimation") or CS.XTextManager.GetText("MoeWarSkipGift")) self.BtnVideo.gameObject:SetActiveEx(type == XMoeWarConfig.MatchType.Publicity) for i = 1, #self.TwoVoteResultImgList do self.TwoVoteResultImgList[i].gameObject:SetActiveEx(type == XMoeWarConfig.MatchType.Publicity) end for i = 1, #self.ThreeVoteResultImgList do self.ThreeVoteResultImgList[i].gameObject:SetActiveEx(type == XMoeWarConfig.MatchType.Publicity) end end function XUiMoeWarVote:UpdateMatchName() local match = XDataCenter.MoeWarManager.GetCurMatch() if match then self.TxtTitle.text = match:GetName() end if self.RImgIcon then local desc = match:GetDesc() self.RImgIcon:SetRawImage(match:GetCoverImg()) if match:GetType() == XMoeWarConfig.MatchType.Publicity and match:GetSessionId() == XMoeWarConfig.SessionType.Game3In1 then self.TxtRefresh.text = match:GetDesc()[3] self.TxtTimeTitle.gameObject:SetActiveEx(false) self.TxtTime.gameObject:SetActiveEx(false) self.RImgIcon:SetRawImage(match:GetFinalImg()) else self.TxtRefresh.text = match:GetRefreshVoteText() self.TxtTimeTitle.gameObject:SetActiveEx(true) end self.TxtTimeTitle.text = desc[2] end end function XUiMoeWarVote:UpdateMatchTime() local match = XDataCenter.MoeWarManager.GetCurMatch() if not match then return end local endTime = match:GetEndTime() local now = XTime.GetServerNowTimestamp() local offset = endTime - now if XDataCenter.MoeWarManager.IsInStatistics() then self.TxtRefresh.text = CS.XTextManager.GetText("MoeWarMatchVoteNoResult") self.TxtTimeTitle.gameObject:SetActiveEx(false) else self.TxtTime.text = XUiHelper.GetTime(offset, XUiHelper.TimeFormatType.CHALLENGE) end end function XUiMoeWarVote:StartTimer() if self.Timer then self:StopTimer() end self.Timer = CS.XScheduleManager.ScheduleForever(function() if XTool.UObjIsNil(self.TxtTime) then self:StopTimer() return end self:UpdateVotePanel(self:ConvertSelectIndexToIndex(self.SelectIndex)) self:UpdateMatchTime() end, CS.XScheduleManager.SECOND, 0) end function XUiMoeWarVote:StopTimer() if self.Timer then CS.XScheduleManager.UnSchedule(self.Timer) self.Timer = nil end end function XUiMoeWarVote:ConvertIndexToSelectIndex(index) return math.ceil(index / XDataCenter.MoeWarManager.GetMatchPerGroupCount()) + index end function XUiMoeWarVote:ConvertSelectIndexToIndex(index) return index - math.ceil(index / (XDataCenter.MoeWarManager.GetMatchPerGroupCount() + 1)) end function XUiMoeWarVote:GetCurrSelectGroup(selectIndex) local realIndex = self:ConvertSelectIndexToIndex(selectIndex) return math.ceil(realIndex / XDataCenter.MoeWarManager.GetMatchPerGroupCount()) end function XUiMoeWarVote:IsFinalSession() local match = XDataCenter.MoeWarManager.GetCurMatch() if not match then return false end return match:GetSessionId() == XMoeWarConfig.SessionType.Game3In1 end function XUiMoeWarVote:GetPlayAnimationPlayer(playerId) if self:IsFinalSession() then for i = 1, #self.PairList do for j = 1, #(self.PairList[i].Players) do if self.PairList[i].Players[j] == playerId then return self.ThreeCharacterModel[j] end end end else local pairConfig = self.PairList[self:ConvertSelectIndexToIndex(self.SelectIndex)] for i = 1, #(pairConfig.Players) do if pairConfig.Players[i] == playerId then return self.TwoCharacterModel[i] end end end end function XUiMoeWarVote:PlaySwitchAnimation() local match = XDataCenter.MoeWarManager.GetCurMatch() local sessionId = match:GetSessionId() local animName = sessionId == XMoeWarConfig.SessionType.Game3In1 and "Panel02QieHuan" or "Panel01QieHuan" local effects = sessionId == XMoeWarConfig.SessionType.Game3In1 and self.ThreeCharacterEffect or self.TwoCharacterEffect for i = 1, #effects do effects[i]:SetActiveEx(false) effects[i]:SetActiveEx(true) end self:PlayAnimation(animName) end function XUiMoeWarVote:CheckIsNeedPop() local match = XDataCenter.MoeWarManager.GetCurMatch() if match:GetSessionId() ~= self.LastMatchType then XUiManager.TipText("MoeWarMatchEnd") XLuaUiManager.Close("UiMoeWarVote") XLuaUiManager.Close("UiMoeWarPollTips") return true else self.LastMatchType = match:GetSessionId() return false end end function XUiMoeWarVote:ClearPanelBulletCache() for i = 1,#self.TwoVotePanel do self.TwoVotePanel[i]:ClearBulletCache() end for i = 1,#self.ThreeVotePanel do self.ThreeVotePanel[i]:ClearBulletCache() end end return XUiMoeWarVote