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 totalDistance;//当前骑行距离 [SerializeField] Text candance;//踏频 [SerializeField] Text heartRate;//心率 [SerializeField] GameObject rightPanel;//右边列表 [SerializeField] GameObject leftPanel;//左边列表 [SerializeField] GameObject nextSlopePanel;//下一个坡度面板 [SerializeField] GameObject currentSlopePanel;//当前坡度面板 [SerializeField] Text nextSlopeText;//下一个坡度 [SerializeField] Text nextSlopeDistanceText;//下一个坡度距离 [SerializeField] Text currentSlopeText;//当前坡度 [SerializeField] Text currentSlopeDistanceText;//当前坡度距离 [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(); totalDistance.text = "/"+Math.Round(mainController.GetMapData().TotalDistance,2).ToString() + "KM"; } void Start() { RenderChart(); } // 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).ToString("f2")+"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(); //坡度相关数据 nextSlopeText.text = Math.Round(playerController.NextSlope, 1).ToString() + "%"; nextSlopeDistanceText.text ="-" + Math.Round(playerController.NextSlopeDistance, 0).ToString()+"M"; currentSlopeText.text = Math.Round(playerController.CurrentSlope, 1).ToString() + "%"; currentSlopeDistanceText.text = Math.Round(playerController.CurrentSlopeDistance, 0).ToString() + "M"; //移动海拔图头像 TODO:移动所有人的头像 MoveChartMarkPoint(); } } //根据不同的骑行模式渲染不同的UI界面 void InitUI(CyclingModel cyclingModel) { } 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; } //初始化海拔图 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; } } } }