2021-04-01 11:01:29 +08:00
|
|
|
|
using UnityEngine;
|
2021-03-30 17:15:16 +08:00
|
|
|
|
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-05-24 10:16:35 +08:00
|
|
|
|
using ChartAndGraph;
|
|
|
|
|
|
using DG.Tweening;
|
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
|
|
|
|
{
|
2021-03-30 17:15:16 +08:00
|
|
|
|
#region 骑行逻辑
|
2021-05-07 18:41:37 +08:00
|
|
|
|
TrailRenderer trail;
|
2021-03-25 16:22:09 +08:00
|
|
|
|
|
2021-05-07 18:41:37 +08:00
|
|
|
|
protected override void Init()
|
2021-05-08 18:36:59 +08:00
|
|
|
|
{
|
|
|
|
|
|
base.Init();
|
|
|
|
|
|
|
2021-04-19 14:38:31 +08:00
|
|
|
|
totalDistance = mainController.selectParamModel.EndDistance;
|
|
|
|
|
|
currentlatlong = mainController.GetCenterCoordinate();
|
2021-05-07 18:41:37 +08:00
|
|
|
|
trail = FindObjectOfType<TrailRenderer>();
|
2021-04-21 14:08:45 +08:00
|
|
|
|
trail.startWidth = 1f;
|
|
|
|
|
|
trail.endWidth = 1f;
|
2021-05-07 18:41:37 +08:00
|
|
|
|
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};
|
2021-05-10 18:13:27 +08:00
|
|
|
|
|
|
|
|
|
|
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-05-24 10:16:35 +08:00
|
|
|
|
|
|
|
|
|
|
headPanel = transform.parent.Find("SingleUI/Panel/GraphChart/HeadPanel").gameObject;
|
2021-04-01 11:01:29 +08:00
|
|
|
|
}
|
2021-04-12 17:35:56 +08:00
|
|
|
|
TargetData targetData;
|
2021-04-02 19:17:23 +08:00
|
|
|
|
/// <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
|
|
|
|
//计算数据
|
2021-04-02 19:17:23 +08:00
|
|
|
|
//speed = mainController.UpDateSpeed();
|
2021-05-20 15:55:27 +08:00
|
|
|
|
try
|
|
|
|
|
|
{
|
|
|
|
|
|
heartRate = mainController.UpDateHeart() ?? 0;
|
|
|
|
|
|
power = mainController.UpdatePower();
|
|
|
|
|
|
cadance = mainController.UpdateCadence();
|
|
|
|
|
|
weight = App.CurrentUser.Weight;
|
|
|
|
|
|
bicycleWeight = App.CurrentUser.BicycleWeight;
|
2021-05-24 10:16:35 +08:00
|
|
|
|
//#if UNITY_EDITOR
|
2021-05-20 15:55:27 +08:00
|
|
|
|
System.Random rd = new System.Random();
|
2021-05-25 18:13:59 +08:00
|
|
|
|
power = 1000; //rd.Next(150, 300);//测试功率
|
2021-05-24 10:16:35 +08:00
|
|
|
|
//#endif
|
2021-05-20 15:55:27 +08:00
|
|
|
|
mainController.TrackResistance(currentSlope * App.rideSetting.sensitivity / 100);
|
|
|
|
|
|
}
|
|
|
|
|
|
catch (Exception)
|
|
|
|
|
|
{
|
|
|
|
|
|
heartRate = 0;
|
|
|
|
|
|
power = 0;
|
|
|
|
|
|
cadance = 0;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2021-05-13 17:48:28 +08:00
|
|
|
|
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;
|
2021-05-13 17:48:28 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//计算累计爬升
|
|
|
|
|
|
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-20 19:56:17 +08:00
|
|
|
|
|
|
|
|
|
|
recorderData.PreDistance = targetData._Distance - Distance;
|
|
|
|
|
|
recorderData.EndDistance = targetData._Distance;
|
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
|
|
|
|
}
|
2021-05-10 18:13:27 +08:00
|
|
|
|
protected override void BeforeRun()
|
2021-05-08 18:36:59 +08:00
|
|
|
|
{
|
2021-05-10 18:13:27 +08:00
|
|
|
|
if (mainController != null)
|
2021-04-19 14:38:31 +08:00
|
|
|
|
{
|
2021-05-10 18:13:27 +08:00
|
|
|
|
mainController.TcpHandler();
|
2021-05-08 18:36:59 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2021-04-07 17:22:45 +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);
|
2021-03-25 16:22:09 +08:00
|
|
|
|
}
|
2021-04-02 19:17:23 +08:00
|
|
|
|
#endregion
|
2021-05-24 10:16:35 +08:00
|
|
|
|
|
|
|
|
|
|
public void InitGraph(int index)
|
|
|
|
|
|
{
|
|
|
|
|
|
chartDataSourceScript.InitHorizontalScrolling(index);
|
|
|
|
|
|
}
|
|
|
|
|
|
//移动海拔图头像
|
|
|
|
|
|
protected override void MoveGraphHead()
|
|
|
|
|
|
{
|
|
|
|
|
|
Vector3 oldPos = headPanel.transform.position;
|
|
|
|
|
|
int nextIndex = CurrentIndex;
|
|
|
|
|
|
var viewIndex = chartDataSourceScript.GetViewIndex(nextIndex);
|
|
|
|
|
|
|
|
|
|
|
|
var n = graph.DataSource.GetPoint("Player 2", viewIndex);
|
|
|
|
|
|
graph.PointToWorldSpace(out Vector3 nextPosition, n.x, n.y, "Player 2");
|
|
|
|
|
|
nextPosition.x -= 14f;
|
|
|
|
|
|
nextPosition.y += 5f;
|
|
|
|
|
|
//人物移动 停止条件 到中间且线未加载完
|
|
|
|
|
|
if ( GetStart() && chartDataSourceScript.ReachMid(viewIndex) && !chartDataSourceScript.ReachEnd())
|
|
|
|
|
|
{
|
|
|
|
|
|
var currentDistance = CurrentDistance;
|
|
|
|
|
|
var distance = Distance;
|
|
|
|
|
|
var offset = currentDistance > 0 ? distance * 1000 / currentDistance : 1;
|
|
|
|
|
|
graph.HorizontalScrolling += offset;
|
|
|
|
|
|
headPanel.transform.DOMove(new Vector3(oldPos.x, nextPosition.y, 0), 1);
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
headPanel.transform.DOMove(new Vector3(nextPosition.x, nextPosition.y, 0), 1);
|
|
|
|
|
|
}
|
|
|
|
|
|
headPanel.transform.SetSiblingIndex(999);
|
|
|
|
|
|
}
|
2021-04-02 19:17:23 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|