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; namespace Assets.Scripts.Scenes.VideoRide { public class VideoUIManager : MonoBehaviour { GameObject button; VideoGameManager manager; VideoPlayer videoPlayer; const float MAXPOWER = 450f; const float MAXPOWER_RATE = 6f; const float MAXHEARRATE = 200f; 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; } 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; } //modal GameObject settingPanel { get; set; } GameObject resultPanel { 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(); RenderChart(); } 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/MiniMap/Panel/Timer").GetComponent(); distance = transform.Find("Panel/MiniMap/MiniMap/Panel/Distance").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)).ToString(); if (App.CurrentUser != null) { left.fillAmount = (float)(Math.Round(manager.CurrentPlayer.power) / MAXPOWER_RATE); right.fillAmount = (float)(Math.Round((manager.CurrentPlayer.heartRate ?? 0f)) / MAXHEARRATE); } } } private void PauseClick(BaseEventData e) { manager.Pause(); } private void DeviceClick(BaseEventData e) { UIManager.Show(UIManager.Instance.DevicePanel, null, true); } private void ChangeViewClick(BaseEventData e) { manager.ChangeView(); } 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(); } ); } GameObject GraphChart { get; set; } GraphChartBase Graph { get; set; } private void RenderChart() { var mapData = manager.GetMapData(); double x = 0; Dictionary dataSource = new Dictionary(); List dd = new List(); foreach (var item in mapData.List) { if (!dataSource.ContainsKey(x)) { dataSource.Add(x, item.Elevation); } x += item.Distance; dd.Add(item.Elevation); } GraphChart = transform.Find("Panel/GraphChart").gameObject; chartDataSourceScript = GraphChart.GetComponent(); Graph = GraphChart.GetComponent(); chartDataSourceScript.SetDataSource(dd.ToArray()); } #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 } }