132 lines
4.4 KiB
C#
132 lines
4.4 KiB
C#
using ChartAndGraph;
|
||
using System;
|
||
using System.Linq;
|
||
using UnityEngine;
|
||
|
||
namespace Assets.Scripts.Scenes.VideoRide
|
||
{
|
||
public class ElevationBarDataFeed : MonoBehaviour
|
||
{
|
||
VideoGameManager manager { get; set; }
|
||
[SerializeField]
|
||
Material _lightColor;
|
||
[SerializeField]
|
||
Material _mediumColor;
|
||
[SerializeField]
|
||
Material _hardColor;
|
||
[SerializeField]
|
||
Material _heavyColor;
|
||
|
||
GameObject headPanel { get; set; }
|
||
|
||
void Start()
|
||
{
|
||
manager= FindObjectOfType<VideoGameManager>();
|
||
|
||
BarChart barChart = GetComponent<BarChart>();
|
||
barChart.DataSource.ClearCategories();
|
||
barChart.DataSource.ClearValues();
|
||
if (barChart != null)
|
||
{
|
||
var list = manager.GetMapData().List;
|
||
for (int i = 0; i < list.Count; i++)
|
||
{
|
||
barChart.DataSource.AddCategory($"Player {i}", getChartMaterial(list[i].Grade));
|
||
barChart.DataSource.SetValue($"Player {i}", "Group 1", list[i].Elevation);
|
||
}
|
||
}
|
||
headPanel = Resources.Load<GameObject>("UI/Prefab/AR/HeadPanel");
|
||
}
|
||
|
||
float timer = 1f;
|
||
private void Update()
|
||
{
|
||
timer -= Time.deltaTime;
|
||
while (timer < 0)
|
||
{
|
||
|
||
timer += 0.5f;
|
||
}
|
||
MoveOnlinePlayerHead();
|
||
}
|
||
|
||
//移动海拔线上人物位置
|
||
private void MoveOnlinePlayerHead()
|
||
{
|
||
if (manager.cyclingController == null)
|
||
return;
|
||
var players = manager.cyclingController.riders;
|
||
var headList = FindObjectsOfType<HeadScript>();
|
||
var videoPlayer = manager.CurrentPlayer;
|
||
foreach (var item in players)
|
||
{
|
||
BarChart barChart = GetComponent<BarChart>();
|
||
Vector3 vector3 = Vector3.back;
|
||
var distance = item.EndDistance; //% manager.mapRoute.Distance;
|
||
|
||
var currentIndex = Mathf.Clamp((float)(distance / manager.mapRoute.Distance * manager.GetMapData().List.Count),0, manager.GetMapData().List.Count-1);
|
||
barChart.GetBarTrackPosition($"Player {Math.Round(currentIndex,0)}", "Group 1", out vector3);
|
||
|
||
var currentHead = headList.Where(c => c.UserId == item.UserId).FirstOrDefault();
|
||
if (currentHead == null)
|
||
{
|
||
var onlineHead = Instantiate(headPanel, transform);
|
||
onlineHead.GetComponent<HeadScript>().UserId = item.UserId;
|
||
onlineHead.transform.position = vector3;
|
||
if (item.IsSelf)
|
||
{
|
||
onlineHead.transform.Find("Main").gameObject.SetActive(true);
|
||
onlineHead.transform.SetAsLastSibling();
|
||
}
|
||
else
|
||
{
|
||
onlineHead.transform.SetAsFirstSibling();
|
||
}
|
||
}
|
||
else
|
||
{
|
||
currentHead.transform.position = vector3;
|
||
}
|
||
}
|
||
//删除离线的人
|
||
foreach (var item in headList)
|
||
{
|
||
if (item.UserId != 0)
|
||
{
|
||
var player = players.Where(c => c.UserId == item.UserId).FirstOrDefault();
|
||
if (player == null)
|
||
{
|
||
item.gameObject.Destroy();
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
private ChartDynamicMaterial getChartMaterial(double grade = 0d)
|
||
{
|
||
//1: ≥7°坡 红色
|
||
//2: 3°~7°坡 橙色
|
||
//3: 0°~3°坡 黄色
|
||
//4: ≤0°坡 绿色
|
||
ChartDynamicMaterial chartDynamicMaterial;
|
||
if (grade > 7)
|
||
{
|
||
chartDynamicMaterial = new ChartDynamicMaterial(_heavyColor);
|
||
}
|
||
else if (grade > 3)
|
||
{
|
||
chartDynamicMaterial = new ChartDynamicMaterial(_hardColor);
|
||
}
|
||
else if (grade > 0)
|
||
{
|
||
chartDynamicMaterial = new ChartDynamicMaterial(_mediumColor);
|
||
}
|
||
else
|
||
{
|
||
chartDynamicMaterial = new ChartDynamicMaterial(_lightColor);
|
||
}
|
||
return chartDynamicMaterial;
|
||
}
|
||
}
|
||
}
|