using UnityEngine; using UnityEngine.UI; using XCharts; using XUGL; using System.Linq; using System.Collections; using Mapbox.Unity.Map; using DG.Tweening; using System; using Assets.Scenes.Ride.Scripts.Model; namespace Assets.Scenes.Ride.Scripts { public class UIManager : MonoBehaviour { #region UI control [SerializeField] Button startBtn;//开始按钮 [SerializeField] Button simpleBtn;//进入简约模式按钮 [SerializeField] Text ditance;//当前骑行距离 [SerializeField] Text candance;//踏频 [SerializeField] Text heartRate;//心率 [SerializeField] GameObject rightPanel;//右边列表 [SerializeField] GameObject leftPanel;//左边列表 [SerializeField] Text speedTxt;//当前速度 [SerializeField] Text powerTxt;//功率 [SerializeField] Text timerTxt;//计时器 [SerializeField] Text countDownTxt;//倒计时5s [SerializeField] LineChart elevationChart;//海拔图 [SerializeField] Image img;//当前用户头像 [SerializeField] Button StartOrPauseButton;//暂停按钮 [SerializeField] Button SettingButton;//设置那妞 [SerializeField] Button DeviceButton;//设备按钮 [SerializeField] Button ExitButton;//退出按钮 #endregion #region 控制器 PlayerController playerController;//当前用户 CyclingController mainController;//主控制器 #endregion private float timeRemaining = 1f; private int count = 0; void Awake() { startBtn.onClick.AddListener(StartRide); simpleBtn.onClick.AddListener(ClearPanel); StartOrPauseButton.onClick.AddListener(PauseRide); SettingButton.onClick.AddListener(ShowSettingPanel); DeviceButton.onClick.AddListener(ShowDevicePanel); ExitButton.onClick.AddListener(StopRide); playerController = FindObjectOfType(); mainController = FindObjectOfType(); } //根据不同的骑行模式渲染不同的UI界面 void InitUI(CyclingModel cyclingModel) { } void Start() { RenderChart(); } private void StartRide() { //加个5秒钟倒计时 count = 5; startBtn.gameObject.SetActive(false); countDownTxt.gameObject.SetActive(true); countDownTxt.text = count.ToString(); } //暂停游戏 private void PauseRide() { playerController.SetPause(); startBtn.gameObject.SetActive(true); } //结束游戏 private void StopRide() { } //显示设备连接 private void ShowDevicePanel() { } //显示设置 private void ShowSettingPanel() { } int isSimple = 1; //TODO:简约模式 private void ClearPanel() { leftPanel.transform.DOLocalMove(new Vector3(leftPanel.transform.localPosition.x + isSimple * -430f, leftPanel.transform.localPosition.y, leftPanel.transform.localPosition.z), 1); rightPanel.transform.DOLocalMove(new Vector3(rightPanel.transform.localPosition.x+ isSimple* 330f, rightPanel.transform.localPosition.y, rightPanel.transform.localPosition.z), 1); //elevationChart.transform.DOMoveX(elevationChart.transform.position.x + isSimple * 286.1764f, 1); isSimple *= -1; } // Update is called once per frame void Update() { //获取当前选中玩家绑定当前UI if (playerController != null) { //绑定UI speedTxt.text = $"{playerController.Speed}"; powerTxt.text = $"{playerController.Power}"; timerTxt.text = Helper.FormatTicks(playerController.TotalTicks); ditance.text = $"{Math.Round(playerController.TotalDistance,2)}KM"; heartRate.text = $"{Math.Round(playerController.HeartRate, 0)}"; candance.text = $"{Math.Round(playerController.Cadance, 0)}"; //倒计时 if (count > 0) { timeRemaining -= Time.deltaTime; if (timeRemaining <= 0)//定时器 { count--; if (count == 0) { playerController.SetStart(); countDownTxt.gameObject.SetActive(false); } timeRemaining = 1.0f; } } countDownTxt.text = count.ToString(); //移动海拔图头像 TODO:移动所有人的头像 MoveChartMarkPoint(); } } //初始化海拔图 void RenderChart() { elevationChart.ClearData(); var elevationArr = mainController.GetLineChartData(); foreach (var elevation in elevationArr) { elevationChart.AddData(0, elevation); } } void MoveChartMarkPoint() { var dataPoints = elevationChart.series.list[0].dataPoints.OrderBy(c=>c.x).ToList(); if (dataPoints.Count > 0) { var pinLoction = dataPoints[playerController.CurrentIndex]; pinLoction.y += 10; img.transform.localPosition = pinLoction; } } } }