215 lines
9.1 KiB
C#
215 lines
9.1 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 (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>();
|
|
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
|
|
|
|
}
|
|
} |