using Assets.Scenes.Ride.Scripts; using Assets.Scenes.Ride.Scripts.Model; using DG.Tweening; using System; using System.Linq; using UnityEngine; namespace Assets.Scripts.Scenes.VideoRide { public class VideoPlayer : AbstractVideoPlayer { public double EndDistance => totalDistance; protected override void Start() { base.Start(); animator.Play("idle"); UserId = App.CurrentUser.Id; UserName = App.CurrentUser.Nickname; } protected override bool GetStart() { return manager.IsStart(); } 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 ComputeAnimator() { base.ComputeAnimator(); } protected override void ComputePlayer() { heartRate = manager.UpDateHeart(); power = manager.UpdatePower(); cadance = manager.UpdateCadence(); //#if UNITY_EDITOR power = 50; cadance = 150; heartRate = 160; //#endif weight = App.CurrentUser.Weight; bicycleWeight = App.CurrentUser.BicycleWeight; wkg = Math.Round(power / weight, 2); var mainFrame = manager.GetCurrentFrame(); var result = manager.mockDirection.Where(c => c.Start < mainFrame && c.End > mainFrame).FirstOrDefault(); bearing = result?.Value ?? 0; //发送阻力 manager.TrackResistance(currentSlope); base.ComputePlayer(); } //控制视频播放速度 protected override void ComputeVideo() { base.ComputeVideo(); } 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,//totalDistance > mapData.TotalDistance ? mapData.TotalDistance : totalDistance, _Cadence = cadance, _HeartRate = heartRate, _Lat = currentlatLon.x, _Lon = currentlatLon.y, _TotalClimb = totalClimb, _FrameRate = manager.GetCurrentFrame() }; 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); //} } protected override void Forward() { base.Forward(); distance = Math.Round(speed / 3600, 5, MidpointRounding.AwayFromZero); totalDistance += distance; } //保存骑行记录 public void Upload() { if (manager.cyclingController.recorderData != null && !manager.cyclingController.recorderData.Saved)//处理重复上传的问题 { manager.Save(totalDistance); } } } }