AR第二个视频发布

This commit is contained in:
lishuo committed 2023-04-28 20:23:37 +08:00
1 parent 573aa2ff4c
commit 431d128ad8
19 files changed
+3813 -2975

No files matched your search

@@ -63,6 +63,8 @@ namespace Assets.Scripts.Scenes.VideoRide
private static readonly int AnimatorSpeed = Animator.StringToHash("speed");
private static readonly int Grade = Animator.StringToHash("grade");
private static readonly int Power = Animator.StringToHash("power");
private Camera mainCamera;
protected virtual void Start()
{
@@ -71,6 +73,7 @@ namespace Assets.Scripts.Scenes.VideoRide
mapData = manager.GetMapData();
ComputeNextSlope();//初始化坡度等
bone_bottle_2 = transform.Find("bone_cable_20");
mainCamera = Camera.main;
}
protected virtual void Update()
{
@@ -247,19 +250,34 @@ namespace Assets.Scripts.Scenes.VideoRide
headWkg = head.transform.Find("wkg").GetComponent<Text>();
}
}
if (head != null)
{
//它们的乘积就是高度
Vector3 worldPosition = new Vector3(bone_bottle_2.position.x, bone_bottle_2.position.y+1.0f, bone_bottle_2.position.z);
var playerScreenPos = Camera.main.WorldToScreenPoint(worldPosition);
head.transform.position = playerScreenPos;
ftpImage.fillAmount = (float)(wkg / 6);
headName.text = UserName;
headWkg.text = $"{wkg}W/KG";
head.SetActive(bone_bottle_2.position.z > 0);
}
UpdateHead();
}
private void UpdateHead()
{
if (head == null) return;
//update position
var position = bone_bottle_2.position;
var worldPosition = new Vector3(position.x, position.y + transform.localScale.y, position.z);
var playerScreenPos = mainCamera.WorldToScreenPoint(worldPosition);
playerScreenPos.y += 16f;
head.transform.position = playerScreenPos;
//update info
ftpImage.fillAmount = (float)(wkg / 6);
headName.text = UserName;
headWkg.text = $"{wkg}W/KG";
}
private void OnBecameInvisible()
{
head.SetActive(false);
}
private void OnBecameVisible()
{
head.SetActive(true);
}
public void SetStartDistance(double distance)
{
this.StartDistance = distance *1000;
@@ -65,10 +65,12 @@ namespace Assets.Scripts.Scenes.VideoRide
public Dictionary<IRider, PlayerRenderer> rideObjs = new Dictionary<IRider, PlayerRenderer>();
private VideoUIManager _uiManager { get; set; }
protected override void Awake()
{
base.Awake();
_uiManager = FindObjectOfType<VideoUIManager>();
trainingController = GetComponent<ARTrainingController>();
mediaPlayer = FindObjectOfType<MediaPlayer>();
DeviceCache.Init(PFConstants.DeviceCacheFolder);
@@ -192,19 +194,19 @@ namespace Assets.Scripts.Scenes.VideoRide
var players = FindObjectsOfType<OnlineVideoPlayer>();
foreach (var item in players)
{
var currentItem = list.Where(c => c.UserId == item.UserId).FirstOrDefault();
var currentItem = list.FirstOrDefault(c => c.UserId == item.UserId);
if (currentItem == null)
{
rideObjs.Remove(item);
visibleRiders.Remove(item);
}
}
var currentPlayerInfo = list.Where(c => c.IsSelf).FirstOrDefault();
var currentPlayerInfo = list.FirstOrDefault(c => c.IsSelf);
var needUpdateList = list.OrderByDescending(c => c.IsSelf).ToList();
//如果当前为观察者模式且currentPlayerInfo为null随机选择以为用户观察
if (currentPlayerInfo == null)
{
currentPlayerInfo = needUpdateList.Where(c => c.UserId == CurrentUserId).FirstOrDefault();
currentPlayerInfo = needUpdateList.FirstOrDefault(c => c.UserId == CurrentUserId);
if(currentPlayerInfo == null)
currentPlayerInfo = needUpdateList.FirstOrDefault();
}
@@ -212,7 +214,7 @@ namespace Assets.Scripts.Scenes.VideoRide
foreach (var item in needUpdateList)
{
var onlineRider = item as OnlineRiderModel;
var visibleItem = visibleRiders.Where(c => c.UserId == item.UserId).FirstOrDefault();
var visibleItem = visibleRiders.FirstOrDefault(c => c.UserId == item.UserId);
if (visibleItem != null)
{
visibleItem.SetPlayer(onlineRider.NickName, onlineRider.Speed, onlineRider.PreDistance, onlineRider.EndDistance, item.Cadence, item.HeartRate, onlineRider.WeightKg, item.UserId, onlineRider.Power, currentPlayerInfo.EndDistance, onlineRider.FrameRate.Value);
@@ -267,6 +269,7 @@ namespace Assets.Scripts.Scenes.VideoRide
CurrentUserId = App.CurrentUser.Id;
CurrentPlayer = videoPlayer.GetComponent<AbstractVideoPlayer>();
var vp = videoPlayer.GetComponent<VideoPlayer>();
vp.SetEndDistance(item.EndDistance);
CurrentPlayer.SetStartDistance(item.EndDistance);
@@ -290,8 +293,7 @@ namespace Assets.Scripts.Scenes.VideoRide
public void SetCurrentMode(ARMode aRMode)
{
_aRMode = aRMode;
var uimanager = FindObjectOfType<VideoUIManager>();
uimanager.SetCurrentMode(aRMode);
_uiManager.SetCurrentMode(aRMode);
if (_aRMode != ARMode.INSPECT)
{
CurrentUserId = App.CurrentUser.Id;
@@ -422,6 +424,13 @@ namespace Assets.Scripts.Scenes.VideoRide
}
return mapRoute;
}
public void ShowUpRemainTime(double remain)
{
_uiManager.ShowUpRemainTime(remain);
}
//保存骑行记录
public void SaveData(double totalDistance)
{
+16 -7
View File
@@ -1,18 +1,22 @@
using Assets.Scenes.Ride.Scripts.Model;
using Assets.Scenes.Ride.Scripts.Model.CyclingModels;
using System;
using System.Collections;
using UnityEngine;
namespace Assets.Scripts.Scenes.VideoRide
{
public class VideoPlayer : AbstractVideoPlayer
{
private bool isSingle = true;
VideoUIManager _uimanager;
protected override void Start()
{
base.Start();
animator.Play("idle");
userId = App.CurrentUser.Id;
userName = App.CurrentUser.Nickname;
_uimanager= FindObjectOfType<VideoUIManager>();
}
public void SetEndDistance(double distance)
@@ -25,12 +29,14 @@ namespace Assets.Scripts.Scenes.VideoRide
public void Complete()
{
start = false;
StartCoroutine(ShowResult());
}
private IEnumerator ShowResult()
{
yield return new WaitForSeconds(2f);
UIManager.CloseGameRoomCountDownPanel();
var uimanager= FindObjectOfType<VideoUIManager>();
if (uimanager!= null)
{
uimanager.SaveAndShowResult();
}
_uimanager?.SaveAndShowResult();
}
public override void ComputePlayer()
@@ -42,8 +48,8 @@ namespace Assets.Scripts.Scenes.VideoRide
if (mockpower > 0)
{
power = mockpower;
cadance = 50;
heartRate = 160;
// cadance = 50;
// heartRate = 160;
}
//#endif
weight = App.CurrentUser.Weight;
@@ -102,6 +108,7 @@ namespace Assets.Scripts.Scenes.VideoRide
recorderData.PreDistance = Math.Round(preDistance, 6, MidpointRounding.AwayFromZero);
recorderData.EndDistance = Math.Round(targetData._Distance, 6, MidpointRounding.AwayFromZero);
recorderData.RiderDatas.Add(targetData);
//默认启用多圈
if (isSingle && totalDistance >= mapData.TotalDistance)
{
@@ -109,6 +116,8 @@ namespace Assets.Scripts.Scenes.VideoRide
}
}
private double RemainingDistance => Math.Round((mapData.TotalDistance - totalDistance) * 1000);
public override void Forward()
{
base.Forward();
@@ -166,7 +166,7 @@ namespace Assets.Scripts.Scenes.VideoRide
avHeatrate.text = record.RiderDatas.Average(c => c._HeartRate.GetValueOrDefault(0)).ToString("f0");
avSpeed.text = record.RiderDatas.Average(c => c._Speed).ToString("f1");
maxSpeed.text = record.RiderDatas.Max(c => c._Speed).ToString("f1");
//wkgText.text = Math.Round(power / record.CurrentUser.Weight, 2).ToString();
wkgText.text = Math.Round(power / record.CurrentUser.Weight, 2).ToString();
avCadence.text = record.RiderDatas.Average(c => c._Cadence).GetValueOrDefault(0).ToString("f0");
DNF.gameObject.SetActive(!record.IsCompleted);
@@ -14,6 +14,7 @@ namespace Assets.Scripts.Scenes.VideoRide
public class VideoUIManager : MonoBehaviour
{
GameObject button;
GameObject remainTime;
VideoGameManager manager;
VideoPlayer videoPlayer;
const float MAXPOWER = 450f;
@@ -92,6 +93,29 @@ namespace Assets.Scripts.Scenes.VideoRide
}
}
}
public void ShowUpRemainTime(double remain)
{
if (remain > 110) return;
remain -= 20;
var canvas = remainTime.GetComponent<CanvasGroup>();
if (remain <= 0)
{
if (canvas.alpha == 1)
canvas.DOFade(0, 1).onComplete = () => { remainTime.SetActive(false); };
}
else
{
remainTime.SetActive(true);
remainTime.transform.Find("Bg/Distance").GetComponent<Text>().text = remain.ToString().PadLeft(2,'0');
if (canvas.alpha == 0)
canvas.DOFade(1, 1f);
}
}
private const float MAX_HEART_RATIO = 0.9f;
private float ComputeHearRateRatio(int heartRate)
{
@@ -124,6 +148,7 @@ namespace Assets.Scripts.Scenes.VideoRide
GameObject explosive { get; set; }
private void Init()
{
remainTime = transform.Find("Panel/Remain").gameObject;
infoText = transform.Find("InfoText").GetComponentInChildren<Text>();
ComputerPanel = transform.Find("Panel/ComputerPanel").gameObject;
WatchPanel = transform.Find("Panel/WatchPanel").gameObject;