using Assets.Scenes.Ride.Scripts; using Assets.Scenes.Ride.Scripts.Model; using ChartAndGraph; using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.SceneManagement; using UnityEngine.UI; using DG.Tweening; namespace Assets.Scripts.Scenes.VideoRide { public class VideoUIManager : MonoBehaviour { GameObject button; VideoGameManager manager; VideoPlayer videoPlayer; const float MAXPOWER = 450f; const float MAXPOWER_RATE = 600f; const float MAXHEARRATE = 200f; const float MAXWKG = 6f; private ChartDataSourceScript chartDataSourceScript; Text infoText { get; set; } //ComputerPanel Text power { get; set; } Text cadance { get; set; } Text heartRate { get; set; } Text speed { get; set; } Text totalDistance { get; set; } Text totalClimbed { get; set; } Text ridingTime { get; set; } Text mapName { get; set; } Image left { get; set; } Image right { get; set; } //ToolBarPanel GameObject pauseBtn { get; set; } GameObject deviceBtn { get; set; } GameObject changeViewBtn { get; set; } GameObject quitBtn { get; set; } //minimap Text playerTimer { get; set; } Text distance { get; set; } Text slope { get; set; } Transform wave { get; set; } Image waveimage { get; set; } //modal GameObject settingPanel { get; set; } GameObject resultPanel { get; set; } //ftp GameObject ftpPanel { get; set; } Image ftpImage { get; set; } Text wkg { get; set; } // Start is called before the first frame update void Start() { UIManager.SetModalPanel(transform.Find("ModalPanel").GetComponent()); manager = FindObjectOfType(); videoPlayer = FindObjectOfType(); button = transform.Find("Panel/Button").gameObject; Init(); } private void Init() { power = transform.Find("Panel/ComputerPanel/Power").GetComponent(); cadance = transform.Find("Panel/ComputerPanel/Cadance").GetComponent(); heartRate = transform.Find("Panel/ComputerPanel/Hr").GetComponent(); speed = transform.Find("Panel/ComputerPanel/Speed").GetComponent(); left = transform.Find("Panel/ComputerPanel/Left").GetComponent(); right = transform.Find("Panel/ComputerPanel/Right").GetComponent(); //ToolBarPanel pauseBtn = transform.Find("Panel/ToolBarPanel/StartOrPauseButton").gameObject; quitBtn = transform.Find("Panel/ToolBarPanel/ExitButton").gameObject; changeViewBtn = transform.Find("Panel/ToolBarPanel/ChangeView").gameObject; deviceBtn = transform.Find("Panel/ToolBarPanel/DeviceButton").gameObject; //minmap playerTimer = transform.Find("Panel/MiniMap/Panel/Timer").GetComponent(); distance = transform.Find("Panel/MiniMap/Panel/Distance").GetComponent(); mapName = transform.Find("Panel/MiniMap/Head/MapName").GetComponent(); slope = transform.Find("Panel/MiniMap/Panel/Circle/slope").GetComponent(); wave = transform.Find("Panel/MiniMap/Panel/Circle/wave"); waveimage = wave.GetComponent(); //FtpPanel ftpPanel = transform.Find("Panel/FtpPanel").gameObject; ftpImage = transform.Find("Panel/FtpPanel/ftp").GetComponent(); wkg = transform.Find("Panel/FtpPanel/wkg").GetComponent(); //modal settingPanel = transform.Find("Panel/SettingPanel").gameObject; resultPanel = transform.Find("Panel/ResultPanel").gameObject; //toolbar 事件注册 UIManager.AddEvent(pauseBtn, UnityEngine.EventSystems.EventTriggerType.PointerClick, PauseClick); UIManager.AddEvent(changeViewBtn, UnityEngine.EventSystems.EventTriggerType.PointerClick, ChangeViewClick); UIManager.AddEvent(deviceBtn, UnityEngine.EventSystems.EventTriggerType.PointerClick, DeviceClick); UIManager.AddEvent(quitBtn, UnityEngine.EventSystems.EventTriggerType.PointerClick, QuitClick); } // Update is called once per frame void Update() { if (manager != null && manager.CurrentPlayer != null) { //infoText.text = $"帧数:{manager.GetCurrentFrame()}"; power.text = Math.Round(manager.CurrentPlayer.power).ToString(); speed.text = Math.Round(manager.CurrentPlayer.speed).ToString(); heartRate.text = Math.Round((manager.CurrentPlayer.heartRate ?? 0d)).ToString(); cadance.text = Math.Round(manager.CurrentPlayer.cadance).ToString(); playerTimer.text = Helper.FormatTicks(videoPlayer.ticks); distance.text = $"{Math.Round((manager.CurrentPlayer.totalDistance))}KM"; mapName.text = manager.GetMapRoute().Name; left.fillAmount = (float)(Math.Round(manager.CurrentPlayer.power) / MAXPOWER_RATE); right.fillAmount = (float)(Math.Round((manager.CurrentPlayer.heartRate ?? 0f)) / MAXHEARRATE); slope.text = Math.Round(manager.CurrentPlayer.currentSlope,1).ToString(); wave.DORotate(new Vector3(0f, 0f, (float)manager.CurrentPlayer.currentSlope), 1f); SetWaveColor(manager.CurrentPlayer.currentSlope); //ftp ftpImage.fillAmount = (float)(manager.CurrentPlayer.wkg / MAXWKG); wkg.text = $"{manager.CurrentPlayer.wkg}w/kg"; } } private void SetWaveColor(double currentSlope) { if (currentSlope > 7) { waveimage.color = PFConstants.Red; } else if (currentSlope > 3) { waveimage.color = PFConstants.Orange; } else if (currentSlope > 0) { waveimage.color = PFConstants.Yellow; } else { waveimage.color = PFConstants.Green; } } private void PauseClick(BaseEventData e) { manager.Pause(); } private void DeviceClick(BaseEventData e) { UIManager.Show(UIManager.Instance.DevicePanel, null, true); } public enum ViewMode { THIRD, FIRST, } //当前是第一人称还是第三人称 public ViewMode _viewMode { get; set; } private void ChangeViewClick(BaseEventData e) { var videoPlayer = FindObjectOfType(); var nearByScript = FindObjectOfType(); var rankingScript = FindObjectOfType(); var currentPlayer = manager.CurrentPlayer == null ? videoPlayer.transform : manager.CurrentPlayer.transform; _viewMode = _viewMode == ViewMode.THIRD ? ViewMode.FIRST : ViewMode.THIRD; if (_viewMode == ViewMode.FIRST) { currentPlayer.DOMoveZ(-0.1f, 0f); currentPlayer.DOMoveY(-1.1f, 0f); ftpPanel.SetActive(true); nearByScript.Hidehandler(null); rankingScript.Hidehandler(null); } else { ftpPanel.SetActive(false); currentPlayer.DOMoveZ(4, 0f); currentPlayer.DOMoveY(-1f, 0f); nearByScript.Showhandler(null); rankingScript.Showhandler(null); } } private void QuitClick(BaseEventData e) { UIManager.ShowConfirm("Quit", "Do you want to keep the record?", () => { videoPlayer?.Upload(); UIManager.CloseConfirm(); //show result resultPanel.SetActive(true); resultPanel.transform.SetAsLastSibling(); var videoResultScript = resultPanel.GetComponent(); videoResultScript.InjectController(manager); videoResultScript.SetDataSource(manager.cyclingController.recorderData); }, 2, () => { UIManager.CloseConfirm(); } ); } #region private void EventHandler() { StringBuilder sb = new StringBuilder(); GameObject start = transform.Find("Panel/start").gameObject; GameObject stop = transform.Find("Panel/stop").gameObject; GameObject save = transform.Find("Panel/save").gameObject; GameObject left = transform.Find("Panel/left").gameObject; GameObject right = transform.Find("Panel/right").gameObject; GameObject continueBtn = transform.Find("Panel/continue").gameObject; GameObject change = transform.Find("Panel/change").gameObject; UIManager.AddEvent(change, UnityEngine.EventSystems.EventTriggerType.PointerClick, async (s) => { manager.ChangePlayer(-16379); }); UIManager.AddEvent(continueBtn, UnityEngine.EventSystems.EventTriggerType.PointerClick, async (s) => { await manager.ContinueAsync(); }); infoText = transform.Find("InfoText").GetComponent(); UIManager.AddEvent(button, UnityEngine.EventSystems.EventTriggerType.PointerClick, (s) => { UIManager.Show(UIManager.Instance.DevicePanel, null, true); }); UIManager.AddEvent(start, UnityEngine.EventSystems.EventTriggerType.PointerClick, (s) => { videoPlayer.SetPower(200); manager.StartGame(); }); UIManager.AddEvent(stop, UnityEngine.EventSystems.EventTriggerType.PointerClick, (s) => { sb.AppendLine($"{manager.GetCurrentFrame()}:{0}"); Debug.Log(sb.ToString()); videoPlayer.SetPower(0); manager.Pause();//暂停视频 }); UIManager.AddEvent(save, UnityEngine.EventSystems.EventTriggerType.PointerClick, (s) => { videoPlayer.Complete(); }); UIManager.AddEvent(left, UnityEngine.EventSystems.EventTriggerType.PointerClick, (s) => { sb.AppendLine($"{manager.GetCurrentFrame()}:{-5}"); }); UIManager.AddEvent(right, UnityEngine.EventSystems.EventTriggerType.PointerClick, (s) => { sb.AppendLine($"{manager.GetCurrentFrame()}:{5}"); }); } #endregion } }