2022-03-25 09:57:30 +08:00

277 lines
12 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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<PFUIPanel>());
manager = FindObjectOfType<VideoGameManager>();
videoPlayer = FindObjectOfType<VideoPlayer>();
button = transform.Find("Panel/Button").gameObject;
Init();
RenderChart();
}
private void Init()
{
power = transform.Find("Panel/ComputerPanel/Power").GetComponent<Text>();
cadance = transform.Find("Panel/ComputerPanel/Cadance").GetComponent<Text>();
heartRate = transform.Find("Panel/ComputerPanel/Hr").GetComponent<Text>();
speed = transform.Find("Panel/ComputerPanel/Speed").GetComponent<Text>();
left = transform.Find("Panel/ComputerPanel/Left").GetComponent<Image>();
right = transform.Find("Panel/ComputerPanel/Right").GetComponent<Image>();
//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<Text>();
distance = transform.Find("Panel/MiniMap/MiniMap/Panel/Distance").GetComponent<Text>();
//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>();
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<double, double> dataSource = new Dictionary<double, double>();
List<double> dd = new List<double>();
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<ChartDataSourceScript>();
Graph = GraphChart.GetComponent<GraphChartBase>();
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<Text>();
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<NearByItemScript>();
// 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<NearByItemScript>();
// 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<NearByItemScript>();
// 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");
//}
}
}