using UnityEngine; using Assets.Scenes.Ride.Scripts.Model; using UnityEngine.SceneManagement; using System.Collections.Generic; using System.Linq; using Assets.Scenes.Ride.Scripts.Model.RiderModels; namespace Assets.Scenes.Ride.Scripts { public class PlayerController : AbstractPlayer { #region 骑行逻辑 TrailRenderer trail; protected override void Init() { base.Init(); totalDistance = mainController.selectParamModel.EndDistance; currentlatlong = mainController.GetCenterCoordinate(); trail = FindObjectOfType(); trail.startWidth = 1f; trail.endWidth = 1f; trail.startColor = new Color(0.9764706f, 0.1882353f, 0.5254902f, 1f); trail.endColor = new Color(0.9764706f, 0.1882353f, 0.5254902f, 1f); //var color7 = Resources.Load("UI/Material/color7"); //var Graph2 = Resources.Load("UI/Material/3dGraph2"); //trail.materials = new Material[] { color7}; trail.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off; trail.allowOcclusionWhenDynamic = false; trail.textureMode = LineTextureMode.Tile; trail.motionVectorGenerationMode = MotionVectorGenerationMode.ForceNoMotion; trail.receiveShadows = false; trail.rayTracingMode = UnityEngine.Experimental.Rendering.RayTracingMode.Off; } TargetData targetData; /// /// 计算数据,父类会在此方法后处理动画 /// protected override void Compute() { //计算数据 //speed = mainController.UpDateSpeed(); heartRate = mainController.UpDateHeart() ?? 0; power = mainController.UpdatePower(); cadance = mainController.UpdateCadence(); weight = App.CurrentUser.Weight; bicycleWeight = App.CurrentUser.BicycleWeight; #if UNITY_EDITOR power = 500;//测试功率 #endif mainController.TrackResistance(currentSlope * App.rideSetting.sensitivity / 100); if (power > 0) { speed = Helper.CalculateSpeed(elevation, currentSlope, power, weight, bicycleWeight); distance = mainController.UpdateDistance(speed); totalDistance += distance; } //计算累计爬升 if (CurrentIndex > 0) { totalClimb = 0; for (int i = 1; i <= CurrentIndex; i++) { var diff = mapData.List[i].Elevation - mapData.List[i - 1].Elevation; if (diff > 0) { totalClimb += diff; } } } if (!stopRecord) { //记录骑行数据 currentlatlong = mainController.Along(totalDistance);//下一个坐标 var recorderData = mainController.cyclingController.recorderData; targetData = new TargetData { Ticks = ticks, _Power = power, _Speed = speed, _Distance = totalDistance > mapData.TotalDistance ? mapData.TotalDistance : totalDistance, _Cadence = cadance, _HeartRate = heartRate, _Lat = currentlatlong.x, _Lon = currentlatlong.y, _TotalClimb = totalClimb, }; recorderData.PreDistance = TotalDistance - Distance; recorderData.EndDistance = TotalDistance; recorderData.RiderDatas.Add(targetData); } } protected override void BeforeRun() { if (mainController != null) { mainController.TcpHandler(); } } //上传数据 public override void Upload() { mainController.Save(TotalDistance); } #endregion } }