111 lines
3.7 KiB
C#

using Assets.Scenes.Ride.Scripts;
using Assets.Scenes.Ride.Scripts.Model;
using System;
using UnityEngine;
namespace Assets.Scripts.Scenes.VideoRide
{
public class VideoPlayer : AbstractVideoPlayer
{
protected override void Start()
{
base.Start();
animator.Play("idle");
}
protected override void Update()
{
base.Update();
}
public void SetPower(double power)
{
this.power = power;
}
public void SetEndDistance(double distance)
{
this.totalDistance = distance;
}
public void Complete()
{
start = false;
manager.Save(totalDistance);
}
protected override void ComputePlayer()
{
heartRate = manager.UpDateHeart();
//power = manager.UpdatePower();
cadance = manager.UpdateCadence();
weight = App.CurrentUser.Weight;
bicycleWeight = App.CurrentUser.BicycleWeight;
//发送阻力
manager.TrackResistance(currentSlope);
if (power > 0)
{
preSpeed = speed;
speed = Helper.CalculateSpeed(elevation, currentSlope, power, weight, bicycleWeight);
distance = Math.Round(speed / 3600, 5, MidpointRounding.AwayFromZero);
totalDistance += distance;
currentlatLon = manager.Along(totalDistance);
}
else
{
speed = 0;
distance = 0;
}
}
//控制视频播放速度
protected override void ComputeVideo()
{
mapData = manager.GetMapData();
float ratio = 1;
if (currentIndex + 1 < mapData.List.Count)
{
ratio = (float)(speed / mapData.List[currentIndex + 1].Speed);
}
else
{
ratio = (float)(speed / mapData.List[currentIndex].Speed);
}
manager.Play(ratio);
if (totalDistance >= mapData.TotalDistance)
{
start = false;
manager.Pause();//暂停视频
}
}
protected override void ComputeRecord()
{
var mapData = manager.GetMapData();
Debug.Log($"ticks:{ticks}-{manager.GetCurrentFrame()}-endistance:{totalDistance}-totalDistance:{mapData.TotalDistance}-index:{currentIndex}-speed:{speed}-currentSlope:{currentSlope}-GetCurrentFrame:{manager.GetCurrentFrame()}-currentlatLon:{bearing}");
//记录骑行数据
var recorderData = manager.cyclingController.recorderData;
var targetData = new TargetData
{
Ticks = ticks,
_Power = power,
_Speed = speed,
_Distance = totalDistance > mapData.TotalDistance ? mapData.TotalDistance : totalDistance,
_Cadence = cadance,
_HeartRate = heartRate,
_Lat = currentlatLon.x,
_Lon = currentlatLon.y,
_TotalClimb = totalClimb,
};
var preDistance = totalDistance >= mapData.TotalDistance ? targetData._Distance : targetData._Distance - distance;
recorderData.PreDistance = Math.Round(preDistance, 6, MidpointRounding.AwayFromZero);
recorderData.EndDistance = Math.Round(targetData._Distance, 6, MidpointRounding.AwayFromZero);
recorderData.RiderDatas.Add(targetData);
if (totalDistance >= mapData.TotalDistance)
{
start = false;
manager.Save(totalDistance);
}
}
}
}