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