277 lines
12 KiB
C#
277 lines
12 KiB
C#
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");
|
||
|
||
//}
|
||
}
|
||
} |