powerfun-unity/Assets/Scripts/Scenes/VideoRide/ElevationBarDataFeed.cs

144 lines
4.9 KiB
C#
Raw Normal View History

using ChartAndGraph;
2022-03-31 18:40:19 +08:00
using System;
using System.Linq;
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-31 18:40:19 +08:00
GameObject headPanel { get; set; }
void Start()
{
head = transform.Find("HeadPanel").gameObject;
manager= FindObjectOfType<VideoGameManager>();
2022-03-30 18:41:06 +08:00
BarChart barChart = GetComponent<BarChart>();
2022-03-30 18:41:06 +08:00
barChart.DataSource.ClearCategories();
barChart.DataSource.ClearValues();
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-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-31 18:40:19 +08:00
headPanel = Resources.Load<GameObject>("UI/Prefab/AR/HeadPanel");
}
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();
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>();
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;
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();
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
}
//删除离线的人
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;
}
}
}