159 lines
5.2 KiB
C#
Raw Normal View History

2022-12-08 19:17:34 +08:00
using Assets.Scenes.Ride.Scripts.Model;
2022-05-25 18:40:47 +08:00
using Assets.Scenes.Ride.Scripts.Model.CyclingModels;
2022-03-10 18:32:53 +08:00
using System;
using UnityEngine;
namespace Assets.Scripts.Scenes.VideoRide
{
public class VideoPlayer : AbstractVideoPlayer
{
2022-08-05 15:10:09 +08:00
private bool isSingle = true;
2022-03-10 18:32:53 +08:00
protected override void Start()
{
base.Start();
animator.Play("idle");
2022-12-05 18:29:49 +08:00
userId = App.CurrentUser.Id;
userName = App.CurrentUser.Nickname;
2022-03-10 18:32:53 +08:00
}
protected override void Update()
{
base.Update();
}
2022-12-05 18:29:49 +08:00
2022-03-10 18:32:53 +08:00
public void SetEndDistance(double distance)
{
this.totalDistance = distance;
2022-12-08 19:17:34 +08:00
this.PreDistance = distance * 1000;
this.EndDistance = PreDistance;
2022-03-10 18:32:53 +08:00
}
2022-12-05 18:29:49 +08:00
2022-03-10 18:32:53 +08:00
public void Complete()
{
start = false;
2023-02-20 17:32:24 +08:00
UIManager.CloseGameRoomCountDownPanel();
2022-08-05 15:10:09 +08:00
var uimanager= FindObjectOfType<VideoUIManager>();
if (uimanager!= null)
{
uimanager.SaveAndShowResult();
}
2022-03-10 18:32:53 +08:00
}
2022-12-05 18:29:49 +08:00
public override void ComputeAnimator()
2022-03-24 09:36:59 +08:00
{
base.ComputeAnimator();
}
public override void ComputePlayer()
2022-03-10 18:32:53 +08:00
{
heartRate = manager.UpDateHeart();
2022-03-25 09:57:30 +08:00
power = manager.UpdatePower();
2022-03-10 18:32:53 +08:00
cadance = manager.UpdateCadence();
2023-01-13 10:45:42 +08:00
//#if UNITY_EDITOR
2023-01-17 18:07:49 +08:00
if (mockpower > 0)
{
power = mockpower;
cadance = 50;
2023-01-31 18:22:15 +08:00
heartRate = 160;
2023-01-17 18:07:49 +08:00
}
2022-10-08 13:26:38 +08:00
//#endif
2022-03-10 18:32:53 +08:00
weight = App.CurrentUser.Weight;
bicycleWeight = App.CurrentUser.BicycleWeight;
2022-03-31 18:40:19 +08:00
wkg = Math.Round(power / weight, 2);
2022-12-05 18:29:49 +08:00
2022-03-10 18:32:53 +08:00
//发送阻力
2022-08-24 18:43:43 +08:00
manager.TrackResistance(currentSlope * App.RideSetting.Sensitivity / 100);
2022-03-24 09:36:59 +08:00
base.ComputePlayer();
2022-08-05 15:10:09 +08:00
//比人先完成触发关门时间
2022-05-25 18:40:47 +08:00
HandleForGameRoom();
}
private bool gameRoomHandled { get; set; }
2022-08-05 15:10:09 +08:00
//房间倒计时保存
2022-05-25 18:40:47 +08:00
private void HandleForGameRoom()
{
var model = manager.cyclingController as GameModel;
2022-08-05 15:10:09 +08:00
if (model != null && model.FirstEndTime.HasValue && !gameRoomHandled && App.CurrentUser.Id != model.FirstUserId)
2022-05-25 18:40:47 +08:00
{
gameRoomHandled = true;
var gap = model.FirstEndTime.Value - UIManager.Now.GetDateTime();
var seconds = Math.Floor(gap.TotalSeconds);
UIManager.ShowGameRoomCountDownPanel((int)seconds, () => {
Upload();
var uiManager = FindObjectOfType<VideoUIManager>();
uiManager.ShowResultPanel();
2022-08-05 15:10:09 +08:00
},true);
2022-05-25 18:40:47 +08:00
}
2022-03-10 18:32:53 +08:00
}
public override void ComputeAnimatorSpeed()
2022-03-10 18:32:53 +08:00
{
base.ComputeAnimatorSpeed();
2022-03-10 18:32:53 +08:00
}
public override void ComputeRecord()
2022-03-10 18:32:53 +08:00
{
var mapData = manager.GetMapData();
//记录骑行数据
var recorderData = manager.cyclingController.recorderData;
var targetData = new TargetData
{
Ticks = ticks,
_Power = power,
_Speed = speed,
2022-08-05 15:10:09 +08:00
_Distance = totalDistance > mapData.TotalDistance ? mapData.TotalDistance : totalDistance,
2022-03-10 18:32:53 +08:00
_Cadence = cadance,
_HeartRate = heartRate,
_Lat = currentlatLon.x,
_Lon = currentlatLon.y,
_TotalClimb = totalClimb,
_FrameRate = manager.GetCurrentFrame()
2022-03-10 18:32:53 +08:00
};
2022-08-05 15:10:09 +08:00
var preDistance = totalDistance >= mapData.TotalDistance ? targetData._Distance : targetData._Distance - distance;
if (!isSingle)
{
preDistance = targetData._Distance - distance;
}
2022-03-10 18:32:53 +08:00
recorderData.PreDistance = Math.Round(preDistance, 6, MidpointRounding.AwayFromZero);
recorderData.EndDistance = Math.Round(targetData._Distance, 6, MidpointRounding.AwayFromZero);
recorderData.RiderDatas.Add(targetData);
2022-07-06 17:48:55 +08:00
//默认启用多圈
2022-08-05 15:10:09 +08:00
if (isSingle && totalDistance >= mapData.TotalDistance)
{
Complete();
}
2022-03-10 18:32:53 +08:00
}
public override void Forward()
{
base.Forward();
distance = Math.Round(speed / 3600, 5, MidpointRounding.AwayFromZero);
totalDistance += distance;
}
2022-03-25 09:57:30 +08:00
//保存骑行记录
public void Upload()
{
manager.SaveData(totalDistance);
2022-03-25 09:57:30 +08:00
}
2022-12-08 19:17:34 +08:00
public override void SetPlayer(string name, double speed, double preDistance, double endDistance, double cadance, double heartRate, double wkg, int userId, double power, double currentPlayerDistance, int frame)
{
if (manager == null)
{
manager = FindObjectOfType<VideoGameManager>();
}
this.PreDistance = preDistance * 1000;
this.EndDistance = endDistance * 1000;
2023-01-17 18:07:49 +08:00
2023-02-20 17:32:24 +08:00
this.Speed = speed;
2023-01-17 18:07:49 +08:00
if (manager.IsQuit())
{
this.OnlineSpeed = 0;
}
else
{
this.OnlineSpeed = speed / 3.6;
}
2022-12-08 19:17:34 +08:00
}
2022-03-10 18:32:53 +08:00
}
}