179 lines
5.7 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 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<PlayerController>();
mainController = FindObjectOfType<CyclingController>();
}
//根据不同的骑行模式渲染不同的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;
}
}
}
}