589 lines
28 KiB
C#
589 lines
28 KiB
C#
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;
|
||
using UnityEngine.SceneManagement;
|
||
using System.Collections.Generic;
|
||
using Assets.Cyp.Common;
|
||
using System.Threading.Tasks;
|
||
using UnityEngine.EventSystems;
|
||
using ChartAndGraph;
|
||
|
||
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关闭按钮
|
||
|
||
LineChart elevationChart;//海拔图
|
||
RawImage img;//海拔图头像
|
||
RawImage miniMap;//小地图
|
||
RawImage altitudeGraph;//海拔图
|
||
#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;
|
||
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;
|
||
startBtn = transform.Find("Panel/StartButton").GetComponent<Button>();
|
||
simpleBtn = transform.Find("Panel/SimpleButton").GetComponent<Button>();
|
||
ditance = transform.Find("Panel/ComputerPanel/DistanceView/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/SpeedView/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/TotalClimbView/TotalClimb").GetComponent<Text>();
|
||
elevationChart = transform.Find("Panel/ElevationChart").GetComponent<LineChart>();
|
||
//img = transform.Find("Panel/ElevationChart/HeadImage").GetComponent<RawImage>();
|
||
img = transform.Find("Panel/GraphChart/Head").GetComponent<RawImage>();
|
||
t = transform.Find("Panel/GraphChart/Button");
|
||
miniMap = transform.Find("Panel/MiniMap").GetComponent<RawImage>();
|
||
|
||
alertPanel = transform.Find("Panel/Alert").gameObject;
|
||
alertBtn = transform.Find("Panel/Alert/SaveButton").GetComponent<Button>();
|
||
alertCloseBtn = transform.Find("Panel/Alert/CloseButton").GetComponent<Button>();
|
||
UIManager.AddEvent(alertBtn.gameObject, UnityEngine.EventSystems.EventTriggerType.PointerClick, AlertOk);
|
||
UIManager.AddEvent(alertCloseBtn.gameObject, UnityEngine.EventSystems.EventTriggerType.PointerClick, AlertClose);
|
||
|
||
|
||
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>();
|
||
addButton = transform.Find("Panel/ReviewPanel/SingleArea/AddButton").GetComponent<Button>();
|
||
saveButton = transform.Find("Panel/QuitPanel/SaveButton").GetComponent<Button>();
|
||
cancelQuitButton = transform.Find("Panel/QuitPanel/CancelButton").GetComponent<Button>();
|
||
closeQuitButton = transform.Find("Panel/QuitPanel/CloseButton").GetComponent<Button>();
|
||
viewButton =transform.Find("Panel/ViewButton").GetComponent<Button>();
|
||
altitudeGraph = transform.Find("Panel/TitlePanel/AltitudeGraph").GetComponent<RawImage>();
|
||
|
||
preSlopeText = transform.Find("Panel/PreSlopePanel/PreSlopeText").GetComponent<Text>();
|
||
|
||
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(cancelQuitButton.gameObject, UnityEngine.EventSystems.EventTriggerType.PointerClick, CancelQuit);
|
||
UIManager.AddEvent(closeQuitButton.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()
|
||
{
|
||
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);//渲染海拔图
|
||
RenderChart();
|
||
startIndex = playerController.CurrentIndex;
|
||
//继续骑行如果有伴侣就自动进入伴侣骑行
|
||
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);
|
||
}
|
||
}
|
||
// Update is called once per frame
|
||
float tt = 1f;
|
||
void Update()
|
||
{
|
||
tt -= Time.deltaTime;
|
||
while (tt < 0) {
|
||
fps.text = (1 / Time.deltaTime).ToString();
|
||
MoveChartMarkPoint();
|
||
tt = 1;
|
||
}
|
||
//获取当前选中玩家绑定当前UI
|
||
if (playerController != null)
|
||
{
|
||
//绑定UI
|
||
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)}%";
|
||
//倒计时
|
||
if (count > 0)
|
||
{
|
||
timeRemaining -= Time.deltaTime;
|
||
if (timeRemaining <= 0)//定时器
|
||
{
|
||
count--;
|
||
if (count == 0)
|
||
{
|
||
mainController.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";
|
||
totalClimb.text = Math.Round(playerController.TotalClimb, 0).ToString();
|
||
//动态显示当前人物移动动画
|
||
|
||
//移动海拔图头像 TODO:移动所有人的头像
|
||
|
||
//MoveChartMarkPoint();
|
||
}
|
||
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 + 155f, 0);
|
||
}
|
||
else
|
||
{
|
||
target.transform.eulerAngles = new Vector3(0, -65f, 0);
|
||
}
|
||
//控制照片移动
|
||
((RectTransform)arrow.transform).position = Camera.main.WorldToScreenPoint(target.transform.position);
|
||
if (playerController.Distance > 0 && mainController.isStart)
|
||
{
|
||
arrow.transform.Find("bg").gameObject.SetActive(true);
|
||
}
|
||
else
|
||
{
|
||
arrow.transform.Find("bg").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)
|
||
{
|
||
selectPlayer.SetActive(true);
|
||
}
|
||
public void AlertOk(BaseEventData baseEventData)
|
||
{
|
||
alertPanel.SetActive(false);
|
||
UIManager.Show(UIManager.Instance.DevicePanel, transform.Find("Panel").GetComponent<PFUIPanel>());
|
||
}
|
||
public void AlertClose(BaseEventData baseEventData)
|
||
{
|
||
alertPanel.SetActive(false);
|
||
}
|
||
public void StartRide(BaseEventData baseEventData)
|
||
{
|
||
var antConnected = mainController.CheckAnt();//初始化ant+设备
|
||
#if !UNITY_EDITOR
|
||
if (!antConnected)
|
||
{
|
||
alertPanel.SetActive(true);
|
||
}
|
||
#endif
|
||
//加个5秒钟倒计时
|
||
count = 5;
|
||
startBtn.gameObject.SetActive(false);
|
||
countDownTxt.gameObject.SetActive(true);
|
||
countDownTxt.text = count.ToString();
|
||
}
|
||
//暂停游戏
|
||
private void PauseRide(BaseEventData baseEventData)
|
||
{
|
||
mainController.SetPause();
|
||
startBtn.gameObject.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)
|
||
{
|
||
}
|
||
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 * 180f, 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);
|
||
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.targetGraphic = simpleBtn.image;
|
||
simpleBtn.image.sprite = isSimple == -1? Resources.Load<Sprite>("Images/Ride/full") : Resources.Load<Sprite>("Images/Ride/simple");
|
||
};
|
||
}
|
||
}
|
||
|
||
private int maxCacheDataNumber = 100;//海拔图最大点数
|
||
private int totalCount;//路线实际点数
|
||
private int startIndex;//选中玩家起始索引
|
||
private int interval = 50;//选中玩家移动索引个数
|
||
private float[] elevationList;
|
||
GraphChartBase graph;
|
||
//初始化海拔图
|
||
void RenderChart()
|
||
{
|
||
|
||
|
||
//elevationChart.ClearData();
|
||
//elevationList = mainController.GetLineChartData();
|
||
//totalCount = elevationList.Length;
|
||
//maxCacheDataNumber = Math.Min(totalCount, maxCacheDataNumber);
|
||
//elevationChart.SetMaxCache(maxCacheDataNumber);
|
||
////for (int i = 0; i < maxCacheDataNumber; i++)
|
||
////{
|
||
//// elevationChart.AddData(0, elevationList[i]);
|
||
////}
|
||
////elevationChart.RefreshChart();
|
||
//ElevationToScreenPoint();
|
||
//var endIndex = playerController.CurrentIndex;
|
||
//var s = endIndex / maxCacheDataNumber;
|
||
//var v = endIndex % maxCacheDataNumber;
|
||
|
||
//maxCacheDataNumber = Math.Min(totalCount-s* maxCacheDataNumber, maxCacheDataNumber);
|
||
|
||
//for (int i = 0; i < maxCacheDataNumber; i++)
|
||
//{
|
||
// initCount++;
|
||
// if (initCount > maxCacheDataNumber) break;
|
||
// AddOneData(s * maxCacheDataNumber + v + i);
|
||
//}
|
||
|
||
//elevationChart.RefreshChart();
|
||
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);
|
||
}
|
||
var sc = transform.Find("Panel/GraphChart").GetComponent<ChartDataSourceScript>();
|
||
|
||
graph = transform.Find("Panel/GraphChart").GetComponent<GraphChartBase>();
|
||
|
||
sc.SetDataSource(dd.ToArray());
|
||
|
||
if (App.CurrentUser != null)
|
||
{
|
||
Utils.DisplayImage(StartCoroutine, img, App.CurrentUser.WxHeadImg);
|
||
}
|
||
|
||
|
||
}
|
||
//长路线动态更新chart
|
||
private int initCount;
|
||
private float updateTime;
|
||
private int lastIndex;
|
||
private int chartAddNum;
|
||
void UpdateRealTimeChart()
|
||
{
|
||
var endIndex = playerController.CurrentIndex;
|
||
updateTime += Time.deltaTime;
|
||
if (updateTime >= 1)
|
||
{
|
||
int delta = endIndex - lastIndex;
|
||
if (delta >0 && initCount < totalCount)
|
||
{
|
||
lastIndex = endIndex;
|
||
AddOneData(initCount);
|
||
initCount++;
|
||
updateTime = 0;
|
||
chartAddNum++;
|
||
}
|
||
var v = (endIndex - chartAddNum) % maxCacheDataNumber;
|
||
//MoveChartMarkPoint(v);
|
||
App.CurrentUserHeadTexture = img.texture;
|
||
}
|
||
}
|
||
void AddOneData(int index)
|
||
{
|
||
string category = index.ToString();
|
||
|
||
elevationChart.AddData(0, elevationList[index]);
|
||
//elevationChart.AddXAxisData(category);
|
||
//elevationChart.AddXAxisData(index.ToString(), index);
|
||
|
||
}
|
||
private Dictionary<int, Vector2> pointMap = new Dictionary<int, Vector2>();
|
||
void ElevationToScreenPoint()
|
||
{
|
||
|
||
var xUnit =(float) Math.Round(854f * (Screen.width/1600f) / elevationList.Length);//x单位
|
||
var maxelev = (float)elevationList.Max();
|
||
var yUnit =(float)Math.Round(46f * (Screen.height / 900f) / maxelev);//y单位
|
||
var xoffset = 373f * (Screen.width / 1600f);
|
||
var yoffset = 175f * (Screen.height / 900f);
|
||
for (int i = 0; i < elevationList.Length; i++)
|
||
{
|
||
var c = new Vector2(i*xUnit+ xoffset, elevationList[i]*yUnit + yoffset);
|
||
pointMap.Add(i, c);
|
||
}
|
||
}
|
||
public GameObject testButton;
|
||
//挪到人物脚本中处理
|
||
void MoveChartMarkPoint()
|
||
{
|
||
Vector3 prePosition = img.transform.position;
|
||
int nextIndex = playerController.CurrentIndex+1;
|
||
double ditance = playerController.Distance;//当前移动距离
|
||
double currentDistance = playerController.CurrentDistance;//当前区间距离
|
||
var t = currentDistance != 0 ? ditance*1000 / currentDistance : 0;
|
||
var n = graph.DataSource.GetPoint("Player 2", nextIndex);
|
||
|
||
graph.PointToWorldSpace(out Vector3 nextPosition, n.x, n.y, "Player 2");
|
||
|
||
var currentPos = Vector3.Lerp(prePosition, nextPosition, (float)t);
|
||
img.transform.DOMove(currentPos, 1);
|
||
var ss = graph.GetComponentInChildren<ChartDataSourceScript>();
|
||
var q = ss.pageStartThreshold;
|
||
var p = ss.pageEndThreshold;
|
||
var diff = currentPos.x - prePosition.x;
|
||
var s = graph.ScrollableData;
|
||
var sss = s.GetMaxValue(0, true);
|
||
Debug.Log(sss);
|
||
//graph.HorizontalScrolling += diff / graph.TotalWidth;
|
||
//人物移动到中间的时候,线开始向左边平滑移动
|
||
//int del = (int)Math.Round(graph.DataSource.HorizontalViewSize / 2, 0);
|
||
//if (playerController.CurrentIndex % del == 0)
|
||
//{
|
||
// graph.HorizontalScrolling += 1;
|
||
//}
|
||
|
||
#region 注释
|
||
//var dataPoints = elevationChart.series.list[0].dataPoints.OrderBy(c => c.x).ToList();
|
||
//if (dataPoints.Count > 0)
|
||
//{
|
||
// var pinLoction = dataPoints[index];
|
||
// pinLoction.y = img.transform.localPosition.y;
|
||
// img.transform.localPosition = pinLoction;
|
||
//}
|
||
|
||
//if (pointMap.ContainsKey(playerController.CurrentIndex-1) )
|
||
//{
|
||
|
||
|
||
// Vector3 mousePos;
|
||
// //testButton.transform.localPosition = new Vector3(pointMap[playerController.CurrentIndex - 1].x, pointMap[playerController.CurrentIndex - 1].y, 0);
|
||
// //RectTransformUtility.ScreenPointToLocalPointInRectangle(transform.parent.GetComponent<RectTransform>(), new Vector3(pointMap[playerController.CurrentIndex - 1].x , pointMap[playerController.CurrentIndex - 1].y, 0), null, out mousePos);
|
||
// ((RectTransform)testButton.transform).position = new Vector3(pointMap[playerController.CurrentIndex - 1].x, pointMap[playerController.CurrentIndex - 1].y, 0);
|
||
// //testButton.transform.position = new Vector3( pointMap[index].x, 229f, 0);
|
||
// //testButton.transform.position = new Vector3(pointMap[playerController.CurrentIndex-1].x, pointMap[playerController.CurrentIndex-1].y, 0);
|
||
// //testButton.transform.DOMove(new Vector3(pointMap[playerController.CurrentIndex].x, pointMap[playerController.CurrentIndex].y,0),1).on;
|
||
// //testButton.transform.DOLocalMove(new Vector3(pointMap[playerController.CurrentIndex - 1].x-Screen.width/2, pointMap[playerController.CurrentIndex - 1].y, 0),0.5f);
|
||
// //pointMap.Remove(playerController.CurrentIndex - 1);
|
||
//}
|
||
#endregion
|
||
}
|
||
}
|
||
}
|