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

137 lines
4.8 KiB
C#
Raw Normal View History

using ChartAndGraph;
2022-03-31 18:40:19 +08:00
using System;
using System.Linq;
using UnityEngine;
2023-01-31 18:22:15 +08:00
using Assets.Scenes.Ride.Scripts.Model.RiderModels;
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-31 18:40:19 +08:00
GameObject headPanel { get; set; }
void Start()
{
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));
2023-01-13 10:45:42 +08:00
barChart.DataSource.SetValue($"Player {i}", "Group 1", list[i].Elevation);
}
}
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)
{
2023-01-13 10:45:42 +08:00
timer += 0.5f;
}
2023-01-13 10:45:42 +08:00
MoveOnlinePlayerHead();
}
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>();
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;
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
}
//删除离线的人
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;
}
}
}