2022-03-29 18:41:32 +08:00
|
|
|
|
using ChartAndGraph;
|
2022-03-31 18:40:19 +08:00
|
|
|
|
using System;
|
|
|
|
|
|
using System.Linq;
|
2022-03-29 18:41:32 +08:00
|
|
|
|
using UnityEngine;
|
|
|
|
|
|
|
|
|
|
|
|
namespace Assets.Scripts.Scenes.VideoRide
|
|
|
|
|
|
{
|
|
|
|
|
|
public class ElevationBarDataFeed : MonoBehaviour
|
|
|
|
|
|
{
|
|
|
|
|
|
GameObject head { get; set; }
|
|
|
|
|
|
VideoGameManager manager { get; set; }
|
|
|
|
|
|
[SerializeField]
|
|
|
|
|
|
Material _lightColor;
|
|
|
|
|
|
[SerializeField]
|
|
|
|
|
|
Material _mediumColor;
|
|
|
|
|
|
[SerializeField]
|
|
|
|
|
|
Material _hardColor;
|
2022-03-30 18:41:06 +08:00
|
|
|
|
[SerializeField]
|
|
|
|
|
|
Material _heavyColor;
|
2022-03-29 18:41:32 +08:00
|
|
|
|
|
2022-03-31 18:40:19 +08:00
|
|
|
|
GameObject headPanel { get; set; }
|
|
|
|
|
|
|
2022-03-29 18:41:32 +08:00
|
|
|
|
void Start()
|
|
|
|
|
|
{
|
|
|
|
|
|
head = transform.Find("HeadPanel").gameObject;
|
|
|
|
|
|
manager= FindObjectOfType<VideoGameManager>();
|
2022-03-30 18:41:06 +08:00
|
|
|
|
|
2022-03-29 18:41:32 +08:00
|
|
|
|
BarChart barChart = GetComponent<BarChart>();
|
2022-03-30 18:41:06 +08:00
|
|
|
|
barChart.DataSource.ClearCategories();
|
|
|
|
|
|
barChart.DataSource.ClearValues();
|
2022-03-29 18:41:32 +08:00
|
|
|
|
if (barChart != null)
|
|
|
|
|
|
{
|
2022-03-30 18:41:06 +08:00
|
|
|
|
var list = manager.GetMapData().List;
|
|
|
|
|
|
for (int i = 0; i < list.Count; i++)
|
2022-03-29 18:41:32 +08:00
|
|
|
|
{
|
2022-03-30 18:41:06 +08:00
|
|
|
|
barChart.DataSource.AddCategory($"Player {i}", getChartMaterial(list[i].Grade));
|
|
|
|
|
|
barChart.DataSource.SetValue($"Player {i}", "Group 1", list[i].Grade);
|
2022-03-29 18:41:32 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
2022-03-31 18:40:19 +08:00
|
|
|
|
|
|
|
|
|
|
headPanel = Resources.Load<GameObject>("UI/Prefab/AR/HeadPanel");
|
2022-03-29 18:41:32 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
float timer = 1f;
|
|
|
|
|
|
private void Update()
|
|
|
|
|
|
{
|
|
|
|
|
|
timer -= Time.deltaTime;
|
|
|
|
|
|
while (timer < 0)
|
|
|
|
|
|
{
|
2022-03-30 18:41:06 +08:00
|
|
|
|
MoveCurrentPlayerHead();
|
2022-03-31 18:40:19 +08:00
|
|
|
|
MoveOnlinePlayerHead();
|
2022-03-29 18:41:32 +08:00
|
|
|
|
timer += 1f;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2022-03-30 18:41:06 +08:00
|
|
|
|
//移动当前骑行者头像
|
|
|
|
|
|
private void MoveCurrentPlayerHead()
|
|
|
|
|
|
{
|
|
|
|
|
|
var videoPlayer = manager.CurrentPlayer;
|
|
|
|
|
|
var index = videoPlayer != null ? videoPlayer.currentIndex : 0;
|
|
|
|
|
|
BarChart barChart = GetComponent<BarChart>();
|
|
|
|
|
|
Vector3 vector3 = Vector3.back;
|
|
|
|
|
|
barChart.GetBarTrackPosition($"Player {index}", "Group 1", out vector3);
|
|
|
|
|
|
head.transform.position = vector3;
|
|
|
|
|
|
}
|
|
|
|
|
|
//移动当前线上其他人头像
|
|
|
|
|
|
private void MoveOnlinePlayerHead()
|
|
|
|
|
|
{
|
2022-05-10 19:24:07 +08:00
|
|
|
|
if (manager.cyclingController == null)
|
|
|
|
|
|
return;
|
2022-03-31 18:40:19 +08:00
|
|
|
|
var players = manager.cyclingController.riders;
|
|
|
|
|
|
var headList = FindObjectsOfType<HeadScript>();
|
2022-04-15 18:14:55 +08:00
|
|
|
|
var videoPlayer = manager.CurrentPlayer;
|
2022-03-31 18:40:19 +08:00
|
|
|
|
foreach (var item in players)
|
2022-03-30 18:41:06 +08:00
|
|
|
|
{
|
|
|
|
|
|
BarChart barChart = GetComponent<BarChart>();
|
|
|
|
|
|
Vector3 vector3 = Vector3.back;
|
2022-04-15 18:14:55 +08:00
|
|
|
|
var distance = item.EndDistance % manager.mapRoute.Distance;
|
|
|
|
|
|
|
|
|
|
|
|
var currentIndex = Math.Round(distance / manager.mapRoute.Distance * manager.GetMapData().List.Count);
|
2022-03-31 18:40:19 +08:00
|
|
|
|
barChart.GetBarTrackPosition($"Player {currentIndex}", "Group 1", out vector3);
|
|
|
|
|
|
|
|
|
|
|
|
var currentHead = headList.Where(c => c.UserId == item.UserId).FirstOrDefault();
|
|
|
|
|
|
|
2022-04-15 18:14:55 +08:00
|
|
|
|
if (videoPlayer != null)
|
|
|
|
|
|
{
|
|
|
|
|
|
var diff = distance - videoPlayer.totalDistance % manager.mapRoute.Distance;
|
|
|
|
|
|
if (diff < 0)
|
|
|
|
|
|
{
|
|
|
|
|
|
vector3.y = -800f;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2022-03-31 18:40:19 +08:00
|
|
|
|
if (currentHead == null)
|
|
|
|
|
|
{
|
|
|
|
|
|
var onlineHead = Instantiate(headPanel, transform);
|
|
|
|
|
|
onlineHead.GetComponent<HeadScript>().UserId = item.UserId;
|
|
|
|
|
|
onlineHead.transform.position = vector3;
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
currentHead.transform.position = vector3;
|
|
|
|
|
|
}
|
2022-03-30 18:41:06 +08:00
|
|
|
|
}
|
2022-04-15 18:14:55 +08:00
|
|
|
|
//删除离线的人
|
|
|
|
|
|
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();
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2022-03-30 18:41:06 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
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;
|
|
|
|
|
|
}
|
2022-03-29 18:41:32 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|