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

132 lines
4.4 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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;
}
}
}