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 (videoPlayer != null && manager != null) { //infoText.text = $"帧数:{manager.GetCurrentFrame()}"; power.text = Math.Round(videoPlayer.power).ToString(); speed.text = Math.Round(videoPlayer.speed).ToString(); heartRate.text = Math.Round((videoPlayer.heartRate ?? 0d)).ToString(); cadance.text = Math.Round(videoPlayer.cadance).ToString(); playerTimer.text = Helper.FormatTicks(videoPlayer.ticks); distance.text = Math.Round((videoPlayer.totalDistance)).ToString(); if (App.CurrentUser != null) { left.fillAmount = (float)(Math.Round(videoPlayer.power) / MAXPOWER_RATE); right.fillAmount = (float)(Math.Round((videoPlayer.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 //private int pageIndex = 0; //private int pageSize = 15; //private int bufferSize = 15; //protected override void CreateList() //{ // //OnlineUserNum.text = " " + MapUDPService.GetNearRiderCount().ToString(); // //LayoutRebuilder.ForceRebuildLayoutImmediate(OnlineUserNum.rectTransform); // var nearList = MapUDPService.GetOnlineUsers(App.RouteIdParam); // if (nearList == null) // return; // var mod = MapUDPService.GetNearRiderCount() % pageSize; // var pages = MapUDPService.GetNearRiderCount() / pageSize; // //totalPages = mod > 0 ? pages + 1 : pages; // //删除 // var currentNearList = FindObjectsOfType(); // foreach (var item in currentNearList) // { // var e = nearList.Where(c => c.Id == item.UserId).FirstOrDefault(); // if (e == null) // { // //item.transform.gameObject.SetActive(false); // item.Dispose(); // bufferSize--; // } // } // for (int i = 0; i < nearList.Count(); i++) // { // Create(nearList[i], currentNearList); // } //} //private void Create(OnlineUser item, NearByItemScript[] rankingList) //{ // //var rankingList = FindObjectsOfType(); // var nearByItemscript = rankingList.Where(c => c.UserId == item.Id).FirstOrDefault(); // //如果当前有这个用户则更新没有则创建并setslibingindex // if (nearByItemscript == null) // { // //创建 // if (bufferSize < pageSize) // { // //情况一:还有足够的buffer,直接创建 // GameObject prefabItem = item.IsSelf ? nearByMajorItem : nearByItem; // GameObject newObj = (GameObject)Instantiate(prefabItem, parent); // nearByItemscript = newObj.GetComponent(); // bufferSize++; // } // else // { // //情况二:没有足够的buffer,找到要被淘汰的buffer()最后一名 // nearByItemscript = rankingList.OrderByDescending(c => c.distance).FirstOrDefault(); // } // } // nearByItemscript.setUserId(item.Id); // nearByItemscript.setName(item.Name); // nearByItemscript.setRatio(item.KGWeight + "W/KG"); // nearByItemscript.setSpeed(item.Speed.ToString() + "KM/H"); // nearByItemscript.setDistance(item.Near.ToString() + "KM"); //} } }