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;
|
2023-01-31 18:22:15 +08:00
|
|
|
|
using Assets.Scenes.Ride.Scripts.Model.RiderModels;
|
2022-03-29 18:41:32 +08:00
|
|
|
|
|
|
|
|
|
|
namespace Assets.Scripts.Scenes.VideoRide
|
|
|
|
|
|
{
|
|
|
|
|
|
public class ElevationBarDataFeed : MonoBehaviour
|
|
|
|
|
|
{
|
|
|
|
|
|
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()
|
|
|
|
|
|
{
|
|
|
|
|
|
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));
|
2023-01-13 10:45:42 +08:00
|
|
|
|
barChart.DataSource.SetValue($"Player {i}", "Group 1", list[i].Elevation);
|
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)
|
|
|
|
|
|
{
|
2023-01-13 10:45:42 +08:00
|
|
|
|
|
|
|
|
|
|
timer += 0.5f;
|
2022-03-29 18:41:32 +08:00
|
|
|
|
}
|
2023-01-13 10:45:42 +08:00
|
|
|
|
MoveOnlinePlayerHead();
|
2022-03-29 18:41:32 +08:00
|
|
|
|
}
|
2023-01-13 10:45:42 +08:00
|
|
|
|
|
|
|
|
|
|
//移动海拔线上人物位置
|
2022-03-30 18:41:06 +08:00
|
|
|
|
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;
|
2023-01-31 18:22:15 +08:00
|
|
|
|
players = players.Where(c => ((OnlineRiderModel)c).IsWatcher == false).ToList();
|
2022-03-31 18:40:19 +08:00
|
|
|
|
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;
|
2023-01-13 10:45:42 +08:00
|
|
|
|
var distance = item.EndDistance; //% manager.mapRoute.Distance;
|
2022-04-15 18:14:55 +08:00
|
|
|
|
|
2023-01-13 10:45:42 +08:00
|
|
|
|
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);
|
2022-03-31 18:40:19 +08:00
|
|
|
|
|
|
|
|
|
|
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;
|
2023-01-31 18:22:15 +08:00
|
|
|
|
currentHead = onlineHead.GetComponent<HeadScript>();
|
2022-03-31 18:40:19 +08:00
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
currentHead.transform.position = vector3;
|
|
|
|
|
|
}
|
2023-01-31 18:22:15 +08:00
|
|
|
|
//控制海拔图头像
|
2023-02-07 18:35:16 +08:00
|
|
|
|
if (manager.CurrentUserId == item.UserId)
|
2023-01-31 18:22:15 +08:00
|
|
|
|
{
|
|
|
|
|
|
currentHead.transform.Find("Main").gameObject.SetActive(true);
|
|
|
|
|
|
currentHead.transform.SetAsLastSibling();
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
currentHead.transform.Find("Main").gameObject.SetActive(false);
|
|
|
|
|
|
currentHead.transform.SetAsFirstSibling();
|
|
|
|
|
|
}
|
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
|
|
|
|
}
|
|
|
|
|
|
}
|