local UISceneQuizBattleInfo = UIViewClass() local EventSystem = require('Event/EventSystem') function UISceneQuizBattleInfo:OnCreated() UIUtils.SetActive(self.img_Occupy, false) UIUtils.SetActive(self.group_Answer, false) UIUtils.SetActive(self.mask_Punish, false) end function UISceneQuizBattleInfo:OnOpened(context) self.activityId = MDL.SceneQuiz.CurActivityID if self.context then self.isWatchPattern = self.context.isWatchPattern else self.isWatchPattern = false end self.constSceneQuizData = DataSheetManager.SceneQuizData:GetDataByModeTypeID(1) self:RegistSystemEvent(EventID.UI_SceneQuiz_QuizModuleInfoRefresh, self.RefreshInfo) self:RegistSystemEvent(EventID.UI_SceneQuiz_MyInfoRefresh, self.RefreshInfo) self:RegistSystemEvent(EventID.UI_SceneQuiz_UpdateOccupyState, self.UpdateOccupyDesc) self:RegistSystemEvent(EventID.UI_SceneQuiz_ExitWatch, self.OnExitWatch) self:RegistSystemEvent(EventID.UI_SceneQuiz_ShowPunishMsg, self.ShowPunishMsg) self:UpdateBulletState(MDL.SceneQuiz.GetIsFinalsBulletOpen()) MDL.SceneQuiz.SceneQuizGetInfoReq() end function UISceneQuizBattleInfo:RefreshInfo() local info = MDL.SceneQuiz.GetCurStageQuizInfo() UIUtils.SetActive(self.mask_Punish, false) self:StopRepeatFunc(self.RefreshQuizData) if BattleDataGetter.GetIsSceneQuizWatch() then UIUtils.SetActive(self.group_Player, false) if self.isWatchPattern == false then -- 只有在刷新的时候处理 private.watchEmptyEntity,防止是因为重连回来导致的空 CTL.SceneQuiz.ClearWatchEmptyEntity() self:SwitchToWatchPattern() end else if self.isWatchPattern == false then if MDL.SceneQuiz.GetIsFailInFinals() then UIUtils.SetActive(self.btn_View, true) else UIUtils.SetActive(self.btn_View, false) end UIUtils.SetActive(self.group_Player, true) end end local curStage = MDL.SceneQuiz.GetCurStage() if curStage == MDL.SceneQuiz.ScheduleStage.Finals then --决赛 local stageState = MDL.SceneQuiz.GetStageState() if stageState == MDL.SceneQuiz.StageState.Prepare then --赛前准备 UIUtils.SetActive(self.group_Answer, false) local stateEndTime = MDL.SceneQuiz.GetCurStageQuizInfo().stateEndTime local curTime = UTL.Time.GetServerTimestamp() if curTime < stateEndTime then local offset = stateEndTime - curTime self.timer_Waitting:ResetAndBeginCustomTimer(false, offset, 0, UIUtils.GetLocalizedTxt(Const_IDS.IDS_SceneQuiz_SenceHint_1) .. "...{0}:{1}", 1) else logging.error(LTAG.ERROR, "stageState not match time", stageState, stateEndTime) self.timer_Waitting:EndTimer() end else self.timer_Waitting:EndTimer() self:RefreshQuizData() end elseif curStage == MDL.SceneQuiz.ScheduleStage.FinalsExtraTime then --加时赛 self.timer_Waitting:EndTimer() self:RefreshQuizData() end end function UISceneQuizBattleInfo:RefreshQuizData() UIUtils.SetActive(self.group_Out, false) local info = MDL.SceneQuiz.GetCurStageQuizInfo() if info then local quizIndex, quizId, quizStartTime, quizEndTime = info.quizIndex, info.quizId, info.quizStartTime, info.quizEndTime UIUtils.SetActive(self.group_Answer, true) --真正开始 = startTime + x秒倒计时 quizStartTime = quizStartTime + self.constSceneQuizData.FinalCountdown local curTime = UTL.Time.GetServerTimestamp() if curTime < quizStartTime then --答题倒计时 local offset = quizStartTime - curTime if quizIndex == 1 then --第一道题倒计时加个特殊表现 UIUtils.SetActive(self.group_Answer, false) if MDL.SceneQuiz.GetCurStage() == MDL.SceneQuiz.ScheduleStage.FinalsExtraTime then UIManager.OpenView(Const_UI_Lua.UIEnum.UIBattleCountDownCasualPanel, { offset, "IDS_SceneQuiz_SenceHint_12", true }) else UIManager.OpenView(Const_UI_Lua.UIEnum.UIBattleCountDownCasualPanel, { offset, "IDS_SceneQuiz_SenceHint_2", true }) end self:StartRepeatFunc(self.RefreshQuizData, offset, 1) else UIUtils.SetActive(self.group_Now, false) UIUtils.SetActive(self.group_Next, true) self.timer_Next:ResetAndBeginCustomTimer(false, offset, 0, "{0}", 1) self:StartRepeatFunc(self.RefreshQuizData, offset, 1) end elseif curTime >= quizStartTime and curTime < quizEndTime then UIUtils.SetActive(self.group_Now, true) UIUtils.SetActive(self.group_Next, false) self.timer_Next:EndTimer() if MDL.SceneQuiz.GetCurStage() == MDL.SceneQuiz.ScheduleStage.Finals then self.txt_Title.text = string.FormatByIdsId(Const_IDS.IDS_SceneQuiz_SenceHint_3, quizIndex, self.constSceneQuizData.FinalQuestionNum) else self.txt_Title.text = string.FormatByIdsId(Const_IDS.IDS_SceneQuiz_SenceHint_11, quizIndex) end local quizData = DataSheetManager.SceneQuizQuestionBank:GetDataByID(quizId) if quizData then UIUtils.SetLabelText(self.txt_Question, Const_IDS[quizData.QuestionText]) --颠倒题 if info.isOverturn then UIUtils.SetLabelText(self.txt_QuestionInfo, Const_IDS.IDS_SceneQuiz_SenceHint_10) else self.txt_QuestionInfo.text = nil end UIUtils.SetLabelText(self.lab_Right, Const_IDS[quizData.Group_Table[info.answer[1]].Answer]) UIUtils.SetLabelText(self.lab_wrong, Const_IDS[quizData.Group_Table[info.answer[2]].Answer]) end local leftTime = quizEndTime - curTime if leftTime > 0 then self.txt_Tme:ResetAndBeginCustomTimer(false, leftTime, 0, "{0}s", 1) else self.txt_Tme:SetCDLabel("") end end end end function UISceneQuizBattleInfo:ShowPunishMsg(msg) if BattleDataGetter.GetIsSceneQuizWatch() == false then UIUtils.SetActive(self.mask_Punish, true) end UIUtils.SetActive(self.group_Now, false) UIUtils.SetActive(self.group_Next, false) self.timer_Next:EndTimer() UIUtils.SetActive(self.group_Out, true) UIUtils.SetLabelText(self.txt_Punishment, Const_IDS[msg]) end function UISceneQuizBattleInfo:OnButtonClicked(comp) if comp == self.btn_Exit then CTL.Setting.BackToTown() elseif comp == self.btn_Setting then UIManager.OpenView(Const_UI_Lua.UIEnum.UISettingMainPanel) elseif comp == self.btn_BGM then local state = MDL.SceneQuiz.GetIsFinalsBulletOpen() MDL.SceneQuiz.SetIsFinalsBulletOpen(not state) self:UpdateBulletState(not state) elseif comp == self.btn_View then --切换到观战模式 self:SwitchToWatchPattern() end end function UISceneQuizBattleInfo:SwitchToWatchPattern() self.isWatchPattern = true if UIManager.IsViewOpened(Const_UI_Lua.UIEnum.UISceneQuizWatch) then return end CTL.SceneQuiz.SetWatchCamera() UIUtils.SetActive(self.group_Player, false) UIManager.CloseView(Const_UI_Lua.UIEnum.UIChannelChatGlobalChatDlg) EventSystem.Dispatch(EventID.UI_HomeMain_ChangeDontMergeView, Const_UI_Lua.UIEnum.UIVirtualController, false) UIManager.OpenView(Const_UI_Lua.UIEnum.UISceneQuizWatch, nil, "Battle/UIInBattleWatchView") end function UISceneQuizBattleInfo:OnExitWatch() self.isWatchPattern = false UIUtils.SetActive(self.group_Player, true) if MDL.SceneQuiz.GetIsFailInFinals() then BattleDataGetter.ExpSetSelfEntity() EventSystem.Dispatch(EventID.UI_HomeMain_ChangeDontMergeView, Const_UI_Lua.UIEnum.UIVirtualController, true) EventSystem.Dispatch(EventID.UI_HomeMain_UpdateChangeRootUI, Const_UI_Lua.UIEnum.UIChannelChatGlobalChatDlg, true) end end function UISceneQuizBattleInfo:UpdateBulletState(value) if value then UIUtils.SetActive(self.BGM_Close, false) UIUtils.SetActive(self.BGM_Open, true) else UIUtils.SetActive(self.BGM_Close, true) UIUtils.SetActive(self.BGM_Open, false) end end function UISceneQuizBattleInfo:UpdateOccupyDesc(state, isOccupiedByOthers) if state then UIUtils.SetActive(self.img_Occupy, true) if isOccupiedByOthers then UIUtils.SetLabelText(self.txt_Tip, Const_IDS.IDS_SceneQuiz_SenceHint_8) self.uistate:SetState(0) else UIUtils.SetLabelText(self.txt_Tip, Const_IDS.IDS_SceneQuiz_SenceHint_7) self.uistate:SetState(1) end else UIUtils.SetActive(self.img_Occupy, false) end end function UISceneQuizBattleInfo:OnClosed() self.context = { isWatchPattern = self.isWatchPattern } end return UISceneQuizBattleInfo