using UnityEngine; using DG.Tweening; using Assets.Scenes.Ride.Scripts.Model; using UnityEngine.EventSystems; using UnityEngine.UI; using UnityEngine.SceneManagement; using Assets.Scenes.Ride.Scripts.Model.CyclingModels; using System; namespace Assets.Scenes.Ride.Scripts { public class GameRoomUIManager : BaseUIManager { protected override void Awake() { base.Awake(); } GameObject countDownPanel { get; set; } Text title { get; set; } Text timer { get; set; } GameObject raceViewBtn { get; set; } GameObject timerIcon { get; set; } GameModel model { get; set; } Text gameTimerText { get; set; } protected override void Start() { base.Start(); reviewPanel.SetActive(false); //隐藏单人骑行时间 var spilitLineH2 = uipanel.transform.Find("ComputerPanel/SpilitLineH2").gameObject; raceViewBtn = uipanel.transform.Find("RaceViewButton").gameObject; #if UNITY_IOS || UNITY_ANDROID timerIcon = uipanel.transform.Find("ComputerPanel/TimerIcon").gameObject; timerIcon.SetActive(false); #else viewButton.gameObject.SetActive(false); #endif UIManager.AddEvent(raceViewBtn, UnityEngine.EventSystems.EventTriggerType.PointerClick, ChangeView); spilitLineH2.SetActive(false); timerTxt.gameObject.SetActive(false); gameTimerText = uipanel.transform.Find("ComputerPanel/GameTimer").GetComponent(); gameTimerText.gameObject.SetActive(true); //timerTxtTitle.gameObject.SetActive(false); //观察者模式隐藏坡度 if (mainController.isWatch) { nextSlopePanel.SetActive(false); currentSlopePanel.SetActive(false); } altitudeGraph.gameObject.SetActive(false); //暂停按钮禁用 pauseButton.interactable = false; InitGameObject(); } protected override void Update() { base.Update(); CountDown(); } //开始游戏触发事件 public void StartRide(BaseEventData baseEventData) { this.StartRide(); } public void StartRide(int seconds) { mainController.SetCyclingModel(CyclingModel.GameRoom); startPanel.SetActive(false); startBtn.gameObject.SetActive(false); //如果是重新连接的话就不需要倒计时 var ss = mainController.cyclingController.recorderData.RiderDatas; if (ss.Count > 0) { count = 0; startUI(0); countDownTxt.gameObject.SetActive(true); countDownTxt.text = count.ToString(); } else { count = seconds; countDownTxt.gameObject.SetActive(true); countDownTxt.text = count.ToString(); } } bool canStart = false; GameObject watchPanel { get; set; } //开始骑行-加个5秒钟倒计时 public override void StartRide() { } public void InitGameObject() { miniMap.SetActive(false); //隐藏小地图 #if UNITY_IOS || UNITY_ANDROID countDownPanel = Instantiate(Resources.Load("UI/Prefab/Match/Mobile/CountDownPanel"), uipanel.transform); title = countDownPanel.transform.Find("Title").GetComponent(); timer = countDownPanel.transform.Find("Timer").GetComponent(); competitionRankingList = Instantiate(Resources.Load("UI/Prefab/Match/Mobile/CompetitionRankingPanel"), uipanel.transform); topRankPanel = Instantiate(Resources.Load("UI/Prefab/Match/Mobile/TopRankPanel"), uipanel.transform); watchPanel = Instantiate(Resources.Load("UI/Prefab/Match/Mobile/WatcherPanel"), uipanel.transform); #else //countDownPanel = Instantiate(Resources.Load("UI/Prefab/Match/CountDownPanel"), uipanel.transform); //title = countDownPanel.transform.Find("Title").GetComponent(); //timer = countDownPanel.transform.Find("Timer").GetComponent(); competitionRankingList = Instantiate(Resources.Load("UI/Prefab/GameRoom/GameRoomRankingPanel"), uipanel.transform); topRankPanel = Instantiate(Resources.Load("UI/Prefab/Match/TopRankPanel"), uipanel.transform); //watchPanel = Instantiate(Resources.Load("UI/Prefab/Match/WatcherPanel"), uipanel.transform); #endif } private void CountDown() { //倒计时开始对战 if (count > 0) { timeRemaining -= Time.deltaTime; if (timeRemaining <= 0)//定时器 { count--; startUI(count); timeRemaining += 1.0f; } } if (mainController.isStart) { var ticks = playerController.TotalTicks; gameTimerText.text = Helper.FormatTicks(ticks); } countDownTxt.text = count <= 0 ? App.GetLocalString("GO!") : count.ToString(); model = mainController.cyclingController as GameModel; //第一名诞生开始倒计时,倒计时结束自动保存 if (model != null && model.FirstEndTime.HasValue && !FirstCompleted && App.CurrentUser.Id != model.FirstUserId) { FirstCompleted = true; var gap = model.FirstEndTime.Value - UIManager.Now.GetDateTime(); var seconds = Math.Floor(gap.TotalSeconds); UIManager.ShowGameRoomCountDownPanel((int)seconds, () => { SaveRide(null); }, true); } if (mainController.isQuit && !Saved) { Saved = true; UIManager.CloseGameRoomCountDownPanel(); ShowResultList(); } } private void startUI(int num) { if (num <= 0) { mainController.SetStart(); var canvasGroup = countDownTxt.transform.GetComponent(); canvasGroup.DOFade(0, 1).onComplete += () => { countDownTxt.gameObject.SetActive(false); canvasGroup.alpha = 1; }; } if (num == 1 && mainController.cyclingModel == CyclingModel.Single) { reviewPanel.GetComponent().DOFade(0, 1).onComplete += () => { reviewPanel.gameObject.SetActive(false); }; } countDownTxt.transform.DOPunchScale(new Vector3(1.2f, 1.2f, 1.2f), 1, 1, 1); countDownTxt.text = num <= 0 ? App.GetLocalString("GO!") : num.ToString(); model = mainController.cyclingController as GameModel; } private bool FirstCompleted; private bool Saved; public override void SaveRide(BaseEventData baseEventData) { //观察者退出 if (mainController.isWatch) { SceneManager.LoadScene("MainScene"); return; } //参赛者保存并弹出赛事结果 if (!mainController.isQuit) { mainController.SetQuit(); playerController.Upload(); quitPanel.SetActive(false); transform.Find("ModalPanel").gameObject.SetActive(false); } ShowResultList();//保存显示当前排名 } public override void ContinueRide() { //mainController.SetCyclingModel(CyclingModel.GameRoom); } public override void PauseRide(BaseEventData baseEventData) { return; } //实时显示当前比赛排名 GameObject competitionRankingList; public void ShowCurrentRanking() { if (competitionRankingList == null) { #if UNITY_IOS || UNITY_ANDROID competitionRankingList = Instantiate(Resources.Load("UI/Prefab/Match/Mobile/CompetitionRankingPanel"), uipanel.transform); #else competitionRankingList = Instantiate(Resources.Load("UI/Prefab/GameRoom/GameRoomRankingPanel"), uipanel.transform); #endif } if (topRankPanel == null) { #if UNITY_IOS || UNITY_ANDROID topRankPanel = Instantiate(Resources.Load("UI/Prefab/Match/Mobile/TopRankPanel"), uipanel.transform); #else topRankPanel = Instantiate(Resources.Load("UI/Prefab/Match/TopRankPanel"), uipanel.transform); #endif } } GameObject competitionResultPanel; GameObject topRankPanel; //实时刷新显示比赛结果 public void ShowResultList() { if (competitionResultPanel == null) { #if UNITY_IOS || UNITY_ANDROID competitionResultPanel = Instantiate(Resources.Load("UI/Prefab/Match/Mobile/GameRoomResultPanel"), uipanel.transform); #else competitionResultPanel = Instantiate(Resources.Load("UI/Prefab/GameRoom/GameRoomResultPanel"), uipanel.transform); #endif } } //极简模式 public override void ClearPanel(BaseEventData baseEventData) { if (clearLock) { base.ClearPanel(baseEventData); //countDownPanel.transform.DOLocalMove(new Vector3(countDownPanel.transform.localPosition.x + isSimple * -430f, countDownPanel.transform.localPosition.y, countDownPanel.transform.localPosition.z), 1); topRankPanel.transform.DOLocalMove(new Vector3(topRankPanel.transform.localPosition.x + isSimple * -430f, topRankPanel.transform.localPosition.y, topRankPanel.transform.localPosition.z), 1); competitionRankingList.transform.DOLocalMove(new Vector3(competitionRankingList.transform.localPosition.x + isSimple * 430f, competitionRankingList.transform.localPosition.y, competitionRankingList.transform.localPosition.z), 1); //watchPanel.transform.DOLocalMove(new Vector3(watchPanel.transform.localPosition.x, watchPanel.transform.localPosition.y + isSimple * 260f, watchPanel.transform.localPosition.z), 1); } } public void SetMobileViewButton(bool enabled) { #if UNITY_IOS || UNITY_ANDROID //viewButton.enabled = enabled; viewButton.interactable = enabled; #endif } protected override void StopRide(BaseEventData baseEventData) { if (mainController.isWatch) { UIManager.ShowConfirm("Quit", "Do you want to quit?", async () => { SceneManager.LoadScene("MainScene"); UIManager.CloseConfirm(); }); } //参赛者:提醒是否退出并保存赛事结果 else { base.StopRide(baseEventData); } } } }