powerfun-unity/Assets/Scenes/Ride/Scripts/PlayerController.cs

121 lines
3.4 KiB
C#
Raw Normal View History

2021-04-01 11:01:29 +08:00
using UnityEngine;
using Assets.Scenes.Ride.Scripts.Model;
2021-04-19 18:03:04 +08:00
using UnityEngine.SceneManagement;
2021-05-08 18:36:59 +08:00
using System.Collections.Generic;
using System.Linq;
using Assets.Scenes.Ride.Scripts.Model.RiderModels;
2021-05-14 19:26:15 +08:00
using System;
2021-03-22 19:20:51 +08:00
2021-03-23 16:07:31 +08:00
namespace Assets.Scenes.Ride.Scripts
2021-03-22 19:20:51 +08:00
{
2021-04-19 18:03:04 +08:00
public class PlayerController : AbstractPlayer
2021-03-22 19:20:51 +08:00
{
#region
TrailRenderer trail;
protected override void Init()
2021-05-08 18:36:59 +08:00
{
base.Init();
totalDistance = mainController.selectParamModel.EndDistance;
currentlatlong = mainController.GetCenterCoordinate();
trail = FindObjectOfType<TrailRenderer>();
2021-04-21 14:08:45 +08:00
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<Material>("UI/Material/color7");
//var Graph2 = Resources.Load<Material>("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;
2021-04-01 11:01:29 +08:00
}
2021-04-12 17:35:56 +08:00
TargetData targetData;
/// <summary>
/// 计算数据,父类会在此方法后处理动画
/// </summary>
2021-04-12 17:35:56 +08:00
protected override void Compute()
2021-05-08 18:36:59 +08:00
{
2021-04-01 11:01:29 +08:00
//计算数据
//speed = mainController.UpDateSpeed();
2021-05-08 18:36:59 +08:00
heartRate = mainController.UpDateHeart() ?? 0;
power = mainController.UpdatePower();
cadance = mainController.UpdateCadence();
2021-04-15 10:13:01 +08:00
weight = App.CurrentUser.Weight;
bicycleWeight = App.CurrentUser.BicycleWeight;
2021-04-30 17:25:28 +08:00
#if UNITY_EDITOR
2021-05-14 19:26:15 +08:00
System.Random rd = new System.Random();
power = 500; //rd.Next(150, 300);////测试功率
2021-04-30 17:25:28 +08:00
#endif
2021-05-08 18:36:59 +08:00
mainController.TrackResistance(currentSlope * App.rideSetting.sensitivity / 100);
if (power > 0)
{
speed = Helper.CalculateSpeed(elevation, currentSlope, power, weight, bicycleWeight);
distance = mainController.UpdateDistance(speed);
totalDistance += distance;
2021-05-14 19:26:15 +08:00
}
else
{
speed = 0;
distance = 0;
}
//计算累计爬升
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;
}
}
}
2021-05-08 18:36:59 +08:00
2021-04-27 20:28:03 +08:00
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,
};
2021-05-08 18:36:59 +08:00
recorderData.PreDistance = TotalDistance - Distance;
recorderData.EndDistance = TotalDistance;
2021-04-27 20:28:03 +08:00
recorderData.RiderDatas.Add(targetData);
}
2021-04-15 10:13:01 +08:00
2021-04-27 20:28:03 +08:00
}
protected override void BeforeRun()
2021-05-08 18:36:59 +08:00
{
if (mainController != null)
{
mainController.TcpHandler();
2021-05-08 18:36:59 +08:00
}
}
//上传数据
2021-04-15 10:13:01 +08:00
public override void Upload()
2021-04-01 11:01:29 +08:00
{
2021-04-19 18:03:04 +08:00
mainController.Save(TotalDistance);
}
#endregion
}
}