643 lines
29 KiB
C#
643 lines
29 KiB
C#
using UnityEngine;
|
|
using UnityEngine.UI;
|
|
using System.Linq;
|
|
using Mapbox.Unity.Map;
|
|
using DG.Tweening;
|
|
using System;
|
|
using Assets.Scenes.Ride.Scripts.Model;
|
|
using UnityEngine.SceneManagement;
|
|
using System.Collections.Generic;
|
|
using UnityEngine.EventSystems;
|
|
using ChartAndGraph;
|
|
using Assets.Scripts;
|
|
|
|
namespace Assets.Scenes.Ride.Scripts
|
|
{
|
|
|
|
public class SingleUIManager : MonoBehaviour
|
|
{
|
|
#region UI control
|
|
GameObject target;
|
|
GameObject nearByPanel;//附近的人列表
|
|
GameObject leftPanel;//伴侣骑行列表
|
|
GameObject nextSlopePanel;//下一个坡度面板
|
|
GameObject currentSlopePanel;//当前坡度面板
|
|
GameObject selectPanel;//骑行模式选择
|
|
GameObject selectPlayer;//伴侣骑行选择窗口
|
|
GameObject reviewPanel;
|
|
GameObject titlePanel;
|
|
GameObject quitPanel;//退出界面
|
|
|
|
Text nextSlopeText;//下一个坡度
|
|
Text nextSlopeDistanceText;//下一个坡度距离
|
|
Text currentSlopeText;//当前坡度
|
|
Text currentSlopeDistanceText;//当前坡度已骑行距离
|
|
Text currentSlopeToatalDistanceText;//当前坡度总距离
|
|
Text speedTxt;//当前速度
|
|
Text powerTxt;//功率
|
|
Text timerTxt;//计时器
|
|
Text ditance;//当前骑行距离
|
|
Text totalDistance;//当前骑行距离
|
|
Text candance;//踏频
|
|
Text heartRate;//心率
|
|
Text countDownTxt;//倒计时5s
|
|
Text mapName;//路书名称
|
|
Text fps;//fps
|
|
Text totalClimb;
|
|
|
|
Button startBtn;//开始按钮
|
|
Button simpleBtn;//进入简约模式按钮
|
|
Button pauseButton;//暂停按钮
|
|
Button settingButton;//设置那妞
|
|
Button deviceButton;//设备按钮
|
|
Button viewButton;//视角按钮
|
|
Button exitButton;//退出按钮
|
|
Button singleButton;//单人骑行按钮
|
|
Button shadowButton;//影子选手按钮
|
|
Button addButton;//添加伴侣骑行
|
|
Button saveButton;//退出panel保存按钮
|
|
Button cancelQuitButton;//退出panel取消按钮
|
|
Button closeQuitButton;//退出panel关闭按钮
|
|
|
|
RawImage head;//海拔图头像
|
|
RawImage miniMap;//小地图
|
|
RawImage altitudeGraph;//海拔图
|
|
Image leftImage;
|
|
Image rightImage;
|
|
#endregion
|
|
|
|
#region 控制器
|
|
|
|
public PlayerController playerController;//当前用户
|
|
public CyclingController mainController;//主控制器
|
|
|
|
#endregion
|
|
|
|
private float timeRemaining = 1f;
|
|
private int count = 0;
|
|
Image arrow;
|
|
AbstractMap map;
|
|
Transform t;
|
|
GameObject alertPanel;
|
|
Button alertBtn;
|
|
Button alertCloseBtn;
|
|
Text preSlopeText;
|
|
GameObject startPanel;
|
|
GameObject headPanel;
|
|
GameObject settingPanel;
|
|
Button abandonButton;
|
|
GameObject singleArea;
|
|
Sprite downhill1;
|
|
Sprite uphill1;
|
|
Sprite straight;
|
|
|
|
Sprite downhill1Small;
|
|
Sprite uphill1Small;
|
|
Sprite straightSmall;
|
|
|
|
Image nextSlopeImage;
|
|
Image currentSlopeImage;
|
|
|
|
void Awake()
|
|
{
|
|
#region 控件获取与事件绑定
|
|
fps = transform.Find("Panel/FPS").GetComponent<Text>();
|
|
arrow = transform.Find("Panel/Arrow").GetComponent<Image>();
|
|
map = transform.parent.Find("Map").GetComponent<AbstractMap>();
|
|
leftPanel = transform.Find("Panel/ReviewPanel").gameObject;
|
|
nearByPanel = transform.Find("Panel/NearPanel").gameObject;
|
|
startPanel = transform.Find("Panel/StartPanel").gameObject;
|
|
startBtn = transform.Find("Panel/StartPanel/StartButton").GetComponent<Button>();
|
|
simpleBtn = transform.Find("Panel/SimpleButton").GetComponent<Button>();
|
|
ditance = transform.Find("Panel/ComputerPanel/Distance").GetComponent<Text>();
|
|
titlePanel = transform.Find("Panel/TitlePanel").gameObject;
|
|
totalDistance = transform.Find("Panel/TitlePanel/TotalDistance").GetComponent<Text>();
|
|
candance = transform.Find("Panel/PowerPanel/Cadance").GetComponent<Text>();
|
|
heartRate = transform.Find("Panel/PowerPanel/Hrv").GetComponent<Text>();
|
|
nextSlopePanel = transform.Find("Panel/NextSlopePanel").gameObject;
|
|
currentSlopePanel = transform.Find("Panel/CurrentSlopePanel").gameObject;
|
|
nextSlopeText = transform.Find("Panel/NextSlopePanel/NextSlopeText").GetComponent<Text>();
|
|
nextSlopeDistanceText = transform.Find("Panel/NextSlopePanel/NextSlopeDistance").GetComponent<Text>();
|
|
currentSlopeText = transform.Find("Panel/CurrentSlopePanel/CurrentSlopeText").GetComponent<Text>();
|
|
currentSlopeDistanceText = transform.Find("Panel/CurrentSlopePanel/CurrentSlopeDistance").GetComponent<Text>();
|
|
currentSlopeToatalDistanceText = transform.Find("Panel/CurrentSlopePanel/TotalSlopeDistance").GetComponent<Text>();
|
|
speedTxt = transform.Find("Panel/ComputerPanel/Speed").GetComponent<Text>();
|
|
powerTxt = transform.Find("Panel/PowerPanel/Power").GetComponent<Text>();
|
|
timerTxt = transform.Find("Panel/ComputerPanel/Timer").GetComponent<Text>();
|
|
countDownTxt = transform.Find("Panel/CountDown").GetComponent<Text>();
|
|
mapName = transform.Find("Panel/TitlePanel/MapName").GetComponent<Text>();
|
|
totalClimb = transform.Find("Panel/ComputerPanel/TotalClimb").GetComponent<Text>();
|
|
//img = transform.Find("Panel/ElevationChart/HeadImage").GetComponent<RawImage>();
|
|
head = transform.Find("Panel/GraphChart/HeadPanel/Head").GetComponent<RawImage>();
|
|
headPanel = transform.Find("Panel/GraphChart/HeadPanel").gameObject;
|
|
t = transform.Find("Panel/GraphChart/Button");
|
|
miniMap = transform.Find("Panel/MiniMap").GetComponent<RawImage>();
|
|
|
|
alertPanel = transform.Find("Panel/Alert").gameObject;
|
|
|
|
selectPanel = transform.Find("Panel/SelectPanel").gameObject;
|
|
selectPlayer = transform.Find("Panel/SelectPlayer").gameObject;
|
|
reviewPanel = transform.Find("Panel/ReviewPanel").gameObject;
|
|
quitPanel = transform.Find("Panel/QuitPanel").gameObject;
|
|
|
|
pauseButton = transform.Find("Panel/ToolBarPanel/StartOrPauseButton").GetComponent<Button>();
|
|
settingButton = transform.Find("Panel/ToolBarPanel/SettingButton").GetComponent<Button>();
|
|
deviceButton = transform.Find("Panel/ToolBarPanel/DeviceButton").GetComponent<Button>();
|
|
exitButton = transform.Find("Panel/ToolBarPanel/ExitButton").GetComponent<Button>();
|
|
|
|
singleButton = transform.Find("Panel/SelectPanel/SingleButton").GetComponent<Button>();
|
|
shadowButton = transform.Find("Panel/SelectPanel/ShadowButton").GetComponent<Button>();
|
|
|
|
singleArea = transform.Find("Panel/ReviewPanel/SingleArea").gameObject;
|
|
addButton = transform.Find("Panel/ReviewPanel/SingleArea/AddButton").GetComponent<Button>();
|
|
|
|
saveButton = transform.Find("Panel/QuitPanel/QuitPanel/SaveButton").GetComponent<Button>();
|
|
cancelQuitButton = transform.Find("Panel/QuitPanel/QuitPanel/CancelButton").GetComponent<Button>();
|
|
closeQuitButton = transform.Find("Panel/QuitPanel/QuitPanel/CloseButton").GetComponent<Button>();
|
|
abandonButton = transform.Find("Panel/QuitPanel/QuitPanel/AbandonButton").GetComponent<Button>();
|
|
|
|
viewButton =transform.Find("Panel/ViewButton").GetComponent<Button>();
|
|
altitudeGraph = transform.Find("Panel/TitlePanel/AltitudeGraph").GetComponent<RawImage>();
|
|
leftImage = transform.Find("Panel/TitlePanel/Left").GetComponent<Image>();
|
|
rightImage = transform.Find("Panel/TitlePanel/Right").GetComponent<Image>();
|
|
settingPanel = transform.Find("Panel/SettingPanel").gameObject;
|
|
preSlopeText = transform.Find("Panel/PreSlopePanel/PreSlopeText").GetComponent<Text>();
|
|
|
|
nextSlopeImage = transform.Find("Panel/NextSlopePanel/NextSlopeImage").GetComponent<Image>();
|
|
currentSlopeImage = transform.Find("Panel/CurrentSlopePanel/Image").GetComponent<Image>();
|
|
|
|
//加载坡度图片
|
|
downhill1 = Resources.Load<Sprite>("Images/Ride/downhill 1");
|
|
uphill1 = Resources.Load<Sprite>("Images/Ride/uphill 1");
|
|
straight = Resources.Load<Sprite>("Images/Ride/straight");
|
|
|
|
downhill1Small = Resources.Load<Sprite>("Images/Ride/downhill-small");
|
|
uphill1Small = Resources.Load<Sprite>("Images/Ride/uphill-small");
|
|
straightSmall = Resources.Load<Sprite>("Images/Ride/straight-small");
|
|
|
|
target = transform.parent.Find("Target").gameObject;
|
|
|
|
UIManager.AddEvent(startBtn.gameObject, UnityEngine.EventSystems.EventTriggerType.PointerClick, StartRide);
|
|
UIManager.AddEvent(simpleBtn.gameObject, UnityEngine.EventSystems.EventTriggerType.PointerClick, ClearPanel);
|
|
UIManager.AddEvent(pauseButton.gameObject, UnityEngine.EventSystems.EventTriggerType.PointerClick, PauseRide);
|
|
UIManager.AddEvent(settingButton.gameObject, UnityEngine.EventSystems.EventTriggerType.PointerClick, ShowSettingPanel);
|
|
UIManager.AddEvent(deviceButton.gameObject, UnityEngine.EventSystems.EventTriggerType.PointerClick, ShowDevicePanel);
|
|
UIManager.AddEvent(exitButton.gameObject, UnityEngine.EventSystems.EventTriggerType.PointerClick, StopRide);
|
|
UIManager.AddEvent(singleButton.gameObject, UnityEngine.EventSystems.EventTriggerType.PointerClick, SingleRide);
|
|
UIManager.AddEvent(shadowButton.gameObject, UnityEngine.EventSystems.EventTriggerType.PointerClick, ShadowRide);
|
|
UIManager.AddEvent(addButton.gameObject, UnityEngine.EventSystems.EventTriggerType.PointerClick, ShowSelectPlayer);
|
|
UIManager.AddEvent(saveButton.gameObject, UnityEngine.EventSystems.EventTriggerType.PointerClick, SaveRide);
|
|
UIManager.AddEvent(abandonButton.gameObject, UnityEngine.EventSystems.EventTriggerType.PointerClick, CancelQuit);
|
|
UIManager.AddEvent(closeQuitButton.gameObject, UnityEngine.EventSystems.EventTriggerType.PointerClick, CloseQuit);
|
|
UIManager.AddEvent(cancelQuitButton.gameObject, UnityEngine.EventSystems.EventTriggerType.PointerClick, CloseQuit);
|
|
UIManager.AddEvent(viewButton.gameObject, UnityEngine.EventSystems.EventTriggerType.PointerClick, ChangeView);
|
|
UIManager.AddEvent(singleButton.gameObject, UnityEngine.EventSystems.EventTriggerType.PointerEnter, OnPointEnter);
|
|
UIManager.AddEvent(shadowButton.gameObject, UnityEngine.EventSystems.EventTriggerType.PointerEnter, OnPointEnter);
|
|
UIManager.AddEvent(singleButton.gameObject, UnityEngine.EventSystems.EventTriggerType.PointerExit, OnPointExit);
|
|
UIManager.AddEvent(shadowButton.gameObject, UnityEngine.EventSystems.EventTriggerType.PointerExit, OnPointExit);
|
|
|
|
|
|
#endregion
|
|
}
|
|
|
|
float? localY;
|
|
void OnPointEnter(BaseEventData pointerEventData)
|
|
{
|
|
var button = ((PointerEventData)pointerEventData).pointerEnter.GetComponent<Button>();
|
|
if (button != null)
|
|
{
|
|
var enterTransform = button.transform;
|
|
if (localY == null)
|
|
{
|
|
localY = enterTransform.localPosition.y;
|
|
}
|
|
enterTransform.DOLocalMoveY(localY.Value + 5f, 0.5f);
|
|
}
|
|
}
|
|
void OnPointExit(BaseEventData pointerEventData)
|
|
{
|
|
var button =((PointerEventData)pointerEventData).pointerEnter.GetComponent<Button>();
|
|
if (button != null)
|
|
{
|
|
var enterTransform = button.transform;
|
|
enterTransform.DOLocalMoveY(localY.Value, 0.5f);
|
|
}
|
|
}
|
|
void Start()
|
|
{
|
|
Init();
|
|
RenderChart();
|
|
//ContinueRide();//继续骑行
|
|
}
|
|
// Update is called once per frame
|
|
float time = 1f;
|
|
void Update()
|
|
{
|
|
time -= Time.deltaTime;
|
|
while (time < 0) {
|
|
MoveChartMarkPoint();
|
|
BindDataSource();
|
|
fps.text = (1 / Time.deltaTime).ToString();
|
|
time = 1;
|
|
}
|
|
CountDown();
|
|
MoveCamera();
|
|
}
|
|
private void Init()
|
|
{
|
|
playerController = FindObjectOfType<PlayerController>();
|
|
mainController = FindObjectOfType<CyclingController>();
|
|
|
|
var route = mainController.GetRoute();
|
|
mapName.text = route.RouteInstance.Name;
|
|
totalDistance.text = Math.Round(mainController.GetMapData().TotalDistance, 1).ToString() + "KM";//总里程
|
|
Utils.DisplayImage(StartCoroutine, altitudeGraph, route.RouteInstance.AltitudeGraph);//渲染海拔图
|
|
|
|
if (mainController.mapRouteRankingList == null || mainController.mapRouteRankingList.Count == 0)
|
|
{
|
|
shadowButton.image.sprite = Resources.Load<Sprite>("Images/Ride/Shadow Mode_no");
|
|
shadowButton.enabled = false;
|
|
shadowButton.interactable = false;
|
|
}
|
|
else
|
|
{
|
|
shadowButton.enabled = true;
|
|
shadowButton.interactable = true;
|
|
}
|
|
|
|
//标记3d的地图可以用
|
|
if (!route.RouteInstance.Enable3D)
|
|
{
|
|
viewButton.enabled = false;
|
|
viewButton.interactable = false;
|
|
}
|
|
}
|
|
//继续骑行如果有伴侣就自动进入伴侣骑行
|
|
public void ContinueRide()
|
|
{
|
|
if (mainController.routeResult != null)
|
|
{
|
|
if (mainController.routeResult.Mode == CyclingModel.Review.ToString())
|
|
{
|
|
mainController.SetCyclingModel(CyclingModel.Review);
|
|
selectPanel.SetActive(false);
|
|
var reviewFactory = reviewPanel.transform.GetComponent<ReviewFactory>();
|
|
reviewFactory.Refresh();
|
|
}
|
|
else if (mainController.routeResult.Mode == CyclingModel.Single.ToString())
|
|
{
|
|
mainController.SetCyclingModel(CyclingModel.Single);
|
|
selectPanel.SetActive(false);
|
|
}
|
|
//显示附近的人面板
|
|
nearByPanel.SetActive(true);
|
|
}
|
|
}
|
|
//移动摄像头和箭头位置
|
|
private void MoveCamera()
|
|
{
|
|
if (target != null)
|
|
{
|
|
target.transform.position = playerController.transform.position; //new Vector3((float)Math.Round(player.transform.position.x,1), 0, (float)Math.Round(player.transform.position.z,1));
|
|
if (!mainController.Is3dView)
|
|
{ //target.transform.rotation = playerController.transform.rotation;//new Quaternion(playerController.transform.rotation.x, playerController.transform.rotation.y +1f, playerController.transform.rotation.z, playerController.transform.rotation.w);
|
|
target.transform.eulerAngles = new Vector3(0, playerController.transform.eulerAngles.y + 160f, 0);
|
|
}
|
|
else
|
|
{
|
|
target.transform.eulerAngles = new Vector3(0, -65f, 0);
|
|
}
|
|
//控制照片移动
|
|
((RectTransform)arrow.transform).position = Camera.main.WorldToScreenPoint(target.transform.position);
|
|
if (playerController.Speed > 0 && mainController.isStart)
|
|
{
|
|
arrow.transform.Find("bg").gameObject.SetActive(true);
|
|
}
|
|
else
|
|
{
|
|
arrow.transform.Find("bg").gameObject.SetActive(false);
|
|
}
|
|
}
|
|
}
|
|
//倒计时
|
|
private void CountDown()
|
|
{
|
|
if (count > 0)
|
|
{
|
|
timeRemaining -= Time.deltaTime;
|
|
if (timeRemaining <= 0)//定时器
|
|
{
|
|
count--;
|
|
if (count == 0)
|
|
{
|
|
mainController.SetStart();
|
|
countDownTxt.gameObject.SetActive(false);
|
|
}
|
|
if (count == 1 && mainController.cyclingModel == CyclingModel.Single)
|
|
{
|
|
reviewPanel.GetComponent<CanvasGroup>().DOFade(0, 1);
|
|
//附近的人
|
|
// nearByPanel.GetComponent<CanvasGroup>().DOFade(0, 1);
|
|
}
|
|
timeRemaining = 1.0f;
|
|
}
|
|
}
|
|
countDownTxt.text = count.ToString();
|
|
}
|
|
private void BindDataSource()
|
|
{
|
|
//获取当前选中玩家绑定当前UI
|
|
if (playerController != null)
|
|
{
|
|
speedTxt.text = $"{Math.Round(playerController.Speed, 1)}";
|
|
powerTxt.text = $"{playerController.Power}";
|
|
timerTxt.text = Helper.FormatTicks(playerController.TotalTicks);
|
|
ditance.text = Math.Round(playerController.TotalDistance, 1).ToString("f1");
|
|
heartRate.text = $"{Math.Round(playerController.HeartRate, 0)}";
|
|
candance.text = $"{Math.Round(playerController.Cadance, 0)}";
|
|
preSlopeText.text = $"{Math.Round(playerController.PreSlope, 1)}%";
|
|
currentSlopeToatalDistanceText.text = $"Total:{Math.Round(playerController.CurrentDistance, 0)}M";
|
|
//坡度相关数据
|
|
nextSlopeText.text = Math.Round(playerController.NextSlope, 1).ToString() + "%";
|
|
//nextSlopeDistanceText.GetComponent<NumberDotween>().AnimateNum((float)playerController.NextSlopeDistance, 0, "-{0}M");
|
|
nextSlopeDistanceText.text = $"{Math.Round(playerController.NextSlopeTotalDistance, 0)}M";
|
|
currentSlopeText.text = Math.Round(playerController.CurrentSlope, 1).ToString() + "%";
|
|
currentSlopeDistanceText.GetComponent<NumberDotween>().AnimateNum((float)playerController.CurrentSlopeDistance, Math.Round(playerController.CurrentDistance, 0), playerController.CurrentIndex, 0, "{0}M");
|
|
totalClimb.text = Math.Round(playerController.TotalClimb, 0).ToString();
|
|
//动态改变坡度图片
|
|
if (playerController.CurrentSlope >= 1 )
|
|
{
|
|
currentSlopeImage.sprite = uphill1;
|
|
}
|
|
else if(playerController.CurrentSlope > -1|| playerController.CurrentSlope<1)
|
|
{
|
|
currentSlopeImage.sprite = straight;
|
|
}
|
|
else
|
|
{
|
|
currentSlopeImage.sprite = downhill1;
|
|
}
|
|
//下一个坡度
|
|
if (playerController.NextSlope >= 1)
|
|
{
|
|
nextSlopeImage.sprite = uphill1Small;
|
|
}
|
|
else if (playerController.NextSlope > -1 || playerController.NextSlope < 1)
|
|
{
|
|
nextSlopeImage.sprite = straightSmall;
|
|
}
|
|
else
|
|
{
|
|
nextSlopeImage.sprite = downhill1Small;
|
|
}
|
|
|
|
}
|
|
}
|
|
//重置游戏
|
|
public void Reset()
|
|
{
|
|
mainController.isStart = false;
|
|
mainController.isPause = false;
|
|
mainController.isQuit = false;
|
|
count = 0;
|
|
countDownTxt.gameObject.SetActive(false);
|
|
}
|
|
private void SingleRide(BaseEventData baseEventData)
|
|
{
|
|
selectPanel.SetActive(false);
|
|
mainController.SetCyclingModel(CyclingModel.Single);
|
|
//显示单人骑行列表
|
|
reviewPanel.SetActive(true);
|
|
//显示附近的人列表
|
|
nearByPanel.SetActive(true);
|
|
}
|
|
private void ShadowRide(BaseEventData baseEventData)
|
|
{
|
|
//mainController.SetCyclingModel(CyclingModel.Review);
|
|
selectPanel.SetActive(false);
|
|
//显示影子选手骑行列表
|
|
selectPlayer.SetActive(true);
|
|
//显示附近的人列表
|
|
nearByPanel.SetActive(true);
|
|
}
|
|
private void ShowSelectPlayer(BaseEventData baseEventData)
|
|
{
|
|
Reset();
|
|
selectPlayer.SetActive(true);
|
|
}
|
|
|
|
public void StartRide(BaseEventData baseEventData)
|
|
{
|
|
var antConnected = mainController.CheckAnt();//初始化ant+设备
|
|
#if UNITY_EDITOR
|
|
antConnected = true;
|
|
#endif
|
|
if (!antConnected)
|
|
{
|
|
alertPanel.SetActive(true);
|
|
}
|
|
else {
|
|
//加个5秒钟倒计时
|
|
count = 5;
|
|
startPanel.SetActive(false);
|
|
startBtn.gameObject.SetActive(false);
|
|
countDownTxt.gameObject.SetActive(true);
|
|
countDownTxt.text = count.ToString();
|
|
}
|
|
}
|
|
//暂停游戏
|
|
private void PauseRide(BaseEventData baseEventData)
|
|
{
|
|
mainController.SetPause();
|
|
count = 0;
|
|
countDownTxt.gameObject.SetActive(false);
|
|
startBtn.gameObject.SetActive(true);
|
|
startPanel.SetActive(true);
|
|
}
|
|
private void SaveRide(BaseEventData baseEventData)
|
|
{
|
|
if (playerController.TotalTicks > 0 && !mainController.isQuit )
|
|
{
|
|
mainController.SetQuit();
|
|
playerController.Upload();
|
|
quitPanel.SetActive(false);
|
|
}
|
|
else
|
|
{
|
|
SceneManager.LoadScene("MainScene");
|
|
}
|
|
}
|
|
private void CancelQuit(BaseEventData baseEventData)
|
|
{
|
|
quitPanel.SetActive(false);
|
|
SceneManager.LoadScene("MainScene");
|
|
}
|
|
|
|
private void CloseQuit(BaseEventData baseEventData)
|
|
{
|
|
quitPanel.SetActive(false);
|
|
}
|
|
//切换到3d视角
|
|
private void ChangeView(BaseEventData baseEventData)
|
|
{
|
|
mainController.ChangeMapImageStyle(arrow.gameObject);
|
|
}
|
|
//结束游戏
|
|
private void StopRide(BaseEventData baseEventData)
|
|
{
|
|
if (playerController.TotalTicks > 0)
|
|
{
|
|
quitPanel.SetActive(true);
|
|
}
|
|
else
|
|
{
|
|
SceneManager.LoadScene("MainScene");
|
|
}
|
|
}
|
|
//显示设备连接
|
|
private void ShowDevicePanel(BaseEventData baseEventData)
|
|
{
|
|
UIManager.Show(UIManager.Instance.DevicePanel, transform.Find("Panel").GetComponent<PFUIPanel>());
|
|
}
|
|
//显示设置
|
|
private void ShowSettingPanel(BaseEventData baseEventData)
|
|
{
|
|
settingPanel.SetActive(true);
|
|
}
|
|
int isSimple = 1;
|
|
private bool clearLock = true;
|
|
private void ClearPanel(BaseEventData baseEventData)
|
|
{
|
|
if (clearLock)
|
|
{
|
|
clearLock = false;
|
|
leftPanel.transform.DOLocalMove(new Vector3(leftPanel.transform.localPosition.x + isSimple * 430f, leftPanel.transform.localPosition.y, leftPanel.transform.localPosition.z), 1);
|
|
titlePanel.transform.DOLocalMove(new Vector3(titlePanel.transform.localPosition.x, titlePanel.transform.localPosition.y + isSimple * 200f, titlePanel.transform.localPosition.z), 1);
|
|
miniMap.transform.DOLocalMove(new Vector3(miniMap.transform.localPosition.x , miniMap.transform.localPosition.y + isSimple * 260f, miniMap.transform.localPosition.z), 1);
|
|
nextSlopePanel.transform.DOLocalMove(new Vector3(nextSlopePanel.transform.localPosition.x, nextSlopePanel.transform.localPosition.y + isSimple * 260f, nextSlopePanel.transform.localPosition.z), 1);
|
|
currentSlopePanel.transform.DOLocalMove(new Vector3(currentSlopePanel.transform.localPosition.x, currentSlopePanel.transform.localPosition.y + isSimple * 80f, currentSlopePanel.transform.localPosition.z), 1);
|
|
|
|
nearByPanel.transform.DOLocalMove(new Vector3(nearByPanel.transform.localPosition.x + isSimple * -330f, nearByPanel.transform.localPosition.y, nearByPanel.transform.localPosition.z), 1).onComplete += () =>
|
|
{
|
|
clearLock = true;
|
|
isSimple *= -1;
|
|
simpleBtn.transform.GetComponent<Image>().sprite = isSimple == -1 ? Resources.Load<Sprite>("Images/Ride/full") : Resources.Load<Sprite>("Images/Ride/simple");
|
|
|
|
};
|
|
}
|
|
}
|
|
|
|
GraphChartBase graph;
|
|
ChartDataSourceScript chartDataSourceScript;
|
|
//初始化海拔图
|
|
void RenderChart()
|
|
{
|
|
var mapData = mainController.GetMapData();
|
|
double x = 0;
|
|
Dictionary<double, double> dataSource = new Dictionary<double, double>();
|
|
List<double> dd = new List<double>();
|
|
var one = mapData.List.Where(c => c.Distance == 0).Count();
|
|
foreach (var item in mapData.List)
|
|
{
|
|
x += item.Distance;
|
|
if (!dataSource.ContainsKey(x))
|
|
{
|
|
dataSource.Add(x, item.Elevation);
|
|
}
|
|
dd.Add(item.Elevation);
|
|
}
|
|
chartDataSourceScript = transform.Find("Panel/GraphChart").GetComponent<ChartDataSourceScript>();
|
|
graph = transform.Find("Panel/GraphChart").GetComponent<GraphChartBase>();
|
|
chartDataSourceScript.SetDataSource(dd.ToArray());
|
|
|
|
if (App.CurrentUser != null)
|
|
{
|
|
Utils.DisplayImage(StartCoroutine, head, App.CurrentUser.WxHeadImg);
|
|
}
|
|
}
|
|
|
|
//挪到人物脚本中处理
|
|
void MoveChartMarkPoint()
|
|
{
|
|
//if (mainController.isStart)
|
|
{
|
|
MoverCurrentUserHead();
|
|
MoveOtherHeads();
|
|
MoveElevationImage();
|
|
}
|
|
}
|
|
//移动当前用户头像
|
|
private void MoverCurrentUserHead()
|
|
{
|
|
Vector3 prePos = headPanel.transform.position;
|
|
int nextIndex = playerController.CurrentIndex +1;
|
|
var viewIndex = chartDataSourceScript.GetViewIndex(nextIndex);
|
|
if (!mainController.isStart && !mainController.isPause && !mainController.isQuit)//未开始未暂停未结束
|
|
{
|
|
viewIndex = 0;
|
|
}
|
|
|
|
var n = graph.DataSource.GetPoint("Player 2", viewIndex);
|
|
graph.PointToWorldSpace(out Vector3 nextPosition, n.x, n.y, "Player 2");
|
|
nextPosition.x -= 14f;
|
|
nextPosition.y += 5f;
|
|
//人物移动 停止条件 到中间且线未加载完
|
|
if (chartDataSourceScript.ReachMid(viewIndex) && !chartDataSourceScript.ReachEnd())
|
|
{
|
|
var currentDistance = playerController.CurrentDistance;
|
|
var distance = playerController.Distance;
|
|
var offset = currentDistance > 0 ? distance * 1000 / currentDistance : 1;
|
|
graph.HorizontalScrolling += offset;
|
|
headPanel.transform.DOMove(new Vector3(prePos.x, nextPosition.y, 0), 1);
|
|
}
|
|
else
|
|
{
|
|
headPanel.transform.DOMove(new Vector3(nextPosition.x , nextPosition.y, 0), 1);
|
|
}
|
|
headPanel.transform.SetSiblingIndex(999);
|
|
}
|
|
//移动其他骑手头像
|
|
private void MoveOtherHeads()
|
|
{
|
|
var others = FindObjectsOfType<OtherPlayerController>();
|
|
foreach (var item in others)
|
|
{
|
|
var itemIndex = chartDataSourceScript.GetViewIndex(item.CurrentIndex) + 1;
|
|
if (!mainController.isStart && !mainController.isPause && !mainController.isQuit)//未开始未暂停未结束
|
|
{
|
|
itemIndex = 0;
|
|
}
|
|
var m = graph.DataSource.GetPoint("Player 2", itemIndex);
|
|
graph.PointToWorldSpace(out Vector3 itemPosition, m.x, m.y, "Player 2");
|
|
itemPosition.x -= 12f;
|
|
itemPosition.y += 5f;
|
|
item.MoveHead(graph.transform, itemPosition);
|
|
}
|
|
}
|
|
//移动总海拔图范围
|
|
private void MoveElevationImage()
|
|
{
|
|
if (chartDataSourceScript.mData.Count <= chartDataSourceScript.targetPoints)
|
|
{
|
|
leftImage.gameObject.SetActive(false);
|
|
rightImage.gameObject.SetActive(false);
|
|
altitudeGraph.gameObject.SetActive(false);
|
|
}
|
|
else
|
|
{
|
|
var start = chartDataSourceScript.GetRealTimeStart();
|
|
var end = chartDataSourceScript.GetRealTimeEnd();
|
|
|
|
var originWith = Screen.width / 1600D * 30D;
|
|
var with = Screen.width / 1600D * 286D;
|
|
|
|
var left = start * with + originWith;
|
|
var right = end * with + originWith;
|
|
|
|
leftImage.transform.DOMoveX((float)left, 1);
|
|
rightImage.transform.DOMoveX((float)right, 1);
|
|
}
|
|
}
|
|
}
|
|
}
|