AR继续骑和断线重连继续骑

This commit is contained in:
lishuo committed 2022-12-08 19:17:34 +08:00
1 parent ae58f4d461
commit 9e2e778e12
34 files changed
+3828 -497977

No files matched your search

@@ -0,0 +1,108 @@
using System;
using System.Collections.Generic;
using System.Linq;
using Assets.Scenes.Ride.Scripts.Model.RiderModels;
using Assets.Scripts.Apis.Models;
namespace Assets.Scenes.Ride.Scripts.Model.CyclingModels
{
public class ARSingleModel : BaseCycling
{
public ARSingleModel(Route route,RouteResultParam param)
: base(route, CyclingModel.Single)
{
this.IsRecord = true;
recorderData = new RecorderDataModel()
{
CurrentUser = App.CurrentUser,
Competitionid = 0,
ContinueIndex = 0,
ContinueMark = Guid.NewGuid().ToString(),
EndDistance = 0,
IsCompleted = false,
IsNeedRanking = true,
CyclingState = CyclingStateEnum.Prepare,
CurrentRoute = route,
CurrentRouteStartDistance = 0,
StartTime = DateTime.Now,//UIManager.Now.GetDateTime(),//DateTime.Now
selectParam = param
};
if (param != null)
{
recorderData.EndDistance = param.EndDistance;
recorderData.CurrentRouteStartDistance = param.EndDistance;
if (!string.IsNullOrWhiteSpace(param.ContinueMark))
{
recorderData.ContinueMark = param.ContinueMark;
}
else
{
param.ContinueMark = recorderData.ContinueMark;
}
recorderData.ContinueIndex = param.ContinueIndex.GetValueOrDefault(0);
}
recorderData.PreDistance = recorderData.EndDistance;
riders = new List<BaseRider>();
}
public override void Run(TargetData targetData)
{
#region 获取当前路线在线用户
riders.Clear();
var onlineUsers = MapUDPService.GetOnlineUsers(recorderData.CurrentRoute.RouteInstance.Id).ToList();
foreach (var item in onlineUsers)
{
riders.Add(new OnlineRiderModel()
{
NickName = item.Name,
UserId = item.Id,
WxHeadImg = item.HeadImage,
Point = new GeoJSON.Net.Geometry.GeographicPosition(item.Point[0], item.Point[1]),
EndDistance = item.EndDistance,
PreDistance = item.PreDistance,
WeightKg = item.WeightKg,
Sex = item.Sex,
FrameRate = item.FrameRate,
Speed = item.Speed,
});
}
#endregion
SendUserPositionToServer();
}
protected override void SendUserPositionToServer()
{
try
{
if (recorderData.RiderDatas.Any())
{
var lastData = recorderData.RiderDatas.Last();
var preDistance = recorderData.PreDistance;
var weightKg = Math.Round(lastData._Power / recorderData.CurrentUser.Weight, 2);
MapUDPService.Send(route.RouteInstance.Id, recorderData.BelongUserId,
new double[] { lastData._Lat, lastData._Lon },
recorderData.IsCompleted, false, recorderData.EndDistance,
true, 1, lastData._Speed, false, preDistance, weightKg, competitionId: recorderData.Competitionid, recorderData.Saved, 0, lastData._Power, lastData._Cadence, lastData.Ticks, (lastData._FrameRate ?? 0), roomId: recorderData.RoomId);
}
else if (recorderData.EndDistance > 0)//没有骑,但是有初始位置的情况
{
var point = _turfHelper.Along(recorderData.EndDistance);
MapUDPService.Send(route.RouteInstance.Id, recorderData.BelongUserId, new double[] { point.Latitude, point.Longitude }, endDistance: recorderData.EndDistance, preDistance: recorderData.EndDistance, competitionId: recorderData.Competitionid);
}
else
{
MapUDPService.Send(route.RouteInstance.Id, recorderData.BelongUserId, route.Point.First().Reverse().ToArray(), competitionId: recorderData.Competitionid, roomId: recorderData.RoomId);
}
}
catch (Exception)
{
}
}
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 13f9e4cb9b08f5f4facbb08cd5eb9d65
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -81,16 +81,14 @@ namespace Assets.Scenes.Ride.Scripts.Model.CyclingModels
/// <param name="data"></param>
public virtual void Run(TargetData targetData)
{
//将当前用户的位置发送到udf服务
SendUserPositionToServer();
//OutModel outData = GetSelfTargetData(targetData);
BeforeRunAfterPakcData();//执行前的函数
SendUserPositionToServer();//将当前用户的位置发送到udf服务
BeforeRunAfterPakcData();
}
/// <summary>
/// =>发送用户的位置信息到服务端
/// </summary>
private void SendUserPositionToServer()
protected virtual void SendUserPositionToServer()
{
try
{
@@ -131,7 +129,6 @@ namespace Assets.Scenes.Ride.Scripts.Model.CyclingModels
protected double SpeedToDistance(double speed)
{
return Math.Round(speed / 3600, 5, MidpointRounding.AwayFromZero);
//return 0.08;
}
}
}
@@ -62,9 +62,8 @@ namespace Assets.Scenes.Ride.Scripts.Model.CyclingModels
public override void Run(TargetData targetData)
{
#region 获取当前路线在线用户
riders.RemoveAll(r => r.IsSelf == false);
var onlineUsers = MapUDPService.GetOnlineUsers(recorderData.CurrentRoute.RouteInstance.Id, recorderData.RoomId).Where(d => d.IsSelf == false)
.ToList();
riders.Clear();
var onlineUsers = MapUDPService.GetOnlineUsers(recorderData.CurrentRoute.RouteInstance.Id, recorderData.RoomId).ToList();
foreach (var item in onlineUsers)
{
riders.Add(new OnlineRiderModel()
@@ -47,6 +47,14 @@ namespace Assets.Scenes.Ride.Scripts.Model
/// 最后骑行的距离
/// </summary>
public double EndDistance { get; set; }
public double RouteDistance
{
get
{
return this.EndDistance * 1000;
}
}
/// <summary>
/// 是否是当前登陆人
/// </summary>
@@ -68,5 +76,7 @@ namespace Assets.Scenes.Ride.Scripts.Model
}
}
public bool IsFinished { get; set; }
}
}
@@ -12,6 +12,10 @@ namespace Assets.Scripts.Scenes.VideoRide
{
public abstract class AbstractVideoPlayer : MonoBehaviour, IRider
{
public double Diff { get;set; }
protected int frames;
protected int currentFrame { get; set; }
protected double preTime;
protected Animator animator;
public GameObject head { get; set; }
protected Image ftpImage { get; set; }
@@ -41,35 +45,23 @@ namespace Assets.Scripts.Scenes.VideoRide
public int currentIndex;
public float bearing = 0f;
protected MapDataModel mapData;
private float timer = 1f;
private float timer = 0f;
protected bool start = true;
protected Sequence sequence;
protected VideoGameManager manager { get; set; }
private Camera camera { get; set; }
float currenPlayerHeight;
Transform bone_bottle_2 { get; set; }
Vector3 current { get; set; }
Vector3 forward { get; set; }
public double Weight { get => this.weight; }
public double BicycleWeight { get => this.bicycleWeight; }
public double Speed { get => this.speed; }
public double Power { get => this.power; }
public double Elevation { get => this.elevation; }
public double Cadance { get => this.cadance; }
public double Wkg { get => this.wkg; }
public int? HeartRate { get => this.heartRate; }
public double TotalDistance { get => this.totalDistance; }
public double CurrentSlope { get => this.currentSlope; }
public double CurrentSlopeDistance { get => this.currentSlopeDistance; }
public double NextSlope { get => this.nextSlope; }
public double NextSlopeDistance { get => this.nextSlopeDistance; }
public double Distance { get => this.distance; }
public double TotalClimb => this.totalClimb;
public double Speed { get; set; }
public double StartDistance { get; set; }
public double PreDistance { get; set; }
public double EndDistance { get; set; }
public double OnlineSpeed { get; set; }
public int UserId => this.userId;
public string UserName => this.userName;
public bool IsStart = false;
protected virtual void Start()
{
animator = GetComponent<Animator>();
@@ -84,36 +76,33 @@ namespace Assets.Scripts.Scenes.VideoRide
{
animator.Play("idle");
}
camera = Camera.main;
//bone_bottle_2
bone_bottle_2 = transform.Find("bone_cable_20");
//var config = manager.mockDirection;
//pre = config[0];
//next = config[0];
}
protected virtual void Update()
{
timer -= Time.deltaTime;
CreateHeadImage();
//Turn();
while (timer <= 0)
{
try
{
ComputeNextSlope();//计算下一个坡度
if (GetStart())
if (manager.IsStart())
{
ticks++;
ComputePlayer();//计算人物属性
Forward();
ComputeRecord();
ComputeVideo();
ComputeAnimator();//控制动画
}
ComputeAnimator();//控制动画
else
{
animator.Play("idle");
}
timer += 1f;
}
catch (Exception e)
@@ -124,10 +113,6 @@ namespace Assets.Scripts.Scenes.VideoRide
}
}
}
protected virtual bool GetStart()
{
return true;
}
//动画状态机
protected virtual void ComputeAnimator()
{
@@ -158,7 +143,6 @@ namespace Assets.Scripts.Scenes.VideoRide
{
return manager.GetCurrentFrame();
}
protected float t { get; set; }
protected Vector3 currentRotation;
//计算人物当前属性
protected virtual void ComputePlayer()
@@ -281,6 +265,10 @@ namespace Assets.Scripts.Scenes.VideoRide
}
}
}
private void OnDisable()
{
head?.SetActive(false);
}
//显示人物海拔图的头像
protected virtual void CreateHeadImage()
{
@@ -314,5 +302,12 @@ namespace Assets.Scripts.Scenes.VideoRide
head?.Destroy();
gameObject.Destroy();
}
//设置当前玩家属性
public abstract void SetPlayer(string name, double speed, double preDistance, double endDistance, double cadance, double heartRate, double wkg, int userId, double power, double currentPlayerDistance, int frame);
public void SetStartDistance(double distance)
{
this.StartDistance = distance *1000;
}
}
}
@@ -5,8 +5,6 @@ namespace Assets.Scripts.Scenes.VideoRide
{
public class OnlineVideoPlayer : AbstractVideoPlayer
{
public double diff;
public int frames;
protected override void Start()
{
@@ -23,8 +21,6 @@ namespace Assets.Scripts.Scenes.VideoRide
}
private Dictionary<int, float> ydic = new Dictionary<int, float>();
private int currentFrame { get; set; }
protected override void ComputeAnimator()
{
base.ComputeAnimator();
@@ -40,13 +36,11 @@ namespace Assets.Scripts.Scenes.VideoRide
protected override void CreateHeadImage()
{
base.CreateHeadImage();
if (diff < 0)
if (Diff < 0)
((RectTransform)head.transform).anchoredPosition = new Vector2(((RectTransform)head.transform).anchoredPosition.x, -800f);
}
private double preTime;
//设置当前玩家属性
public void SetPlayer(string name, double distance, double totalDistance, double cadance,double heartRate, double wkg, int userId,double power,double currentPlayerDistance,int frame)
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)
{
@@ -57,13 +51,17 @@ namespace Assets.Scripts.Scenes.VideoRide
this.wkg = wkg;
this.userName = name;
this.cadance = cadance;
this.totalDistance = totalDistance;
this.totalDistance = endDistance;
this.heartRate = (int?)heartRate;
this.userId = userId;
this.power = power;
this.speed = distance * 3600;
this.diff = totalDistance - currentPlayerDistance;
this.speed = speed;
this.Speed = speed/3.6;
this.Diff = endDistance - currentPlayerDistance;
this.currentFrame = frame;
this.PreDistance = preDistance * 1000;
this.EndDistance = endDistance * 1000;
this.OnlineSpeed = speed / 3.6;
}
}
}
@@ -37,7 +37,7 @@ namespace Assets.Scripts.Scenes.VideoRide
private bool isStart { get; set; }
private Route route { get; set; }
public MapRoute mapRoute { get; set; }
public RouteResultParam selectParamModel;
public RouteResultParam selectParamModel { get; set; }
public RouteResult routeResult;
public string recordId { get; set; }
public DateTime startTime { get; set; }
@@ -115,6 +115,7 @@ namespace Assets.Scripts.Scenes.VideoRide
RouteId = routeId
};
}
Debug.Log("start");
endDistance = 0;
videoLoading = FindObjectOfType<VideoLoading>();
}
@@ -158,7 +159,7 @@ namespace Assets.Scripts.Scenes.VideoRide
return rankingList;
}
List<AbstractVideoPlayer> visibleRiders = new List<AbstractVideoPlayer>();//当前线路上的人
public List<AbstractVideoPlayer> visibleRiders = new List<AbstractVideoPlayer>();//当前线路上的人
private const int limits = 5;//在线的其他人数
private double MaxVisibleDistance = 200d;//最大显示距离
//创建当前线路其他选手
@@ -166,11 +167,15 @@ namespace Assets.Scripts.Scenes.VideoRide
{
if (list == null || list.Count == 0)
{
var currentList = FindObjectsOfType<RiderRenderer>();
foreach (var item in currentList)
{
item.Speed = 0;
item.Paused = true;
}
return;
}
CreateCurrentPlayer(list);//如果是观察者模式创建观察主人工
var onlinelist = MapUDPService.GetOnlineUsers(App.RouteIdParam);//最新列表
var currentPlayerInfo = onlinelist.Where(c => c.Id == CurrentPlayer.UserId).FirstOrDefault();
var trainController = GetComponent<ARTrainingController>();
//移除退出的选手
var players = FindObjectsOfType<OnlineVideoPlayer>();
foreach (var item in players)
@@ -180,11 +185,11 @@ namespace Assets.Scripts.Scenes.VideoRide
{
rideObjs.Remove(item);
visibleRiders.Remove(item);
//item.Destroy();//TODO:
//trainController.RemoveRider(item.UserId);
}
}
var needUpdateList = list.Where(c=>Math.Abs(c.EndDistance-CurrentPlayer.totalDistance)*1000 <= MaxVisibleDistance).Take(limits).ToList();
var currentPlayerInfo = list.Where(c => c.IsSelf).FirstOrDefault();
var needUpdateList = list.OrderByDescending(c=>c.IsSelf).ToList();
foreach (var item in needUpdateList)
{
var onlineRider = item as OnlineRiderModel;
@@ -192,17 +197,18 @@ namespace Assets.Scripts.Scenes.VideoRide
//更新
if (visibleItem != null)
{
var online = visibleItem as OnlineVideoPlayer;
online.SetPlayer(onlineRider.NickName, onlineRider.EndDistance - onlineRider.PreDistance, onlineRider.EndDistance, item.Cadence, item.HeartRate, onlineRider.WeightKg, item.UserId, onlineRider.Power, currentPlayerInfo.EndDistance, onlineRider.FrameRate.Value);
visibleItem.SetPlayer(onlineRider.NickName, onlineRider.Speed, onlineRider.PreDistance, onlineRider.EndDistance, item.Cadence, item.HeartRate, onlineRider.WeightKg, item.UserId, onlineRider.Power, currentPlayerInfo.EndDistance, onlineRider.FrameRate.Value);
}
else
{
if (currentPlayerInfo != null)
if (currentPlayerInfo == null)
return;
var diff = item.EndDistance % mapData.TotalDistance - currentPlayerInfo.EndDistance % mapData.TotalDistance;
if (Math.Abs(diff * 1000) <= MaxVisibleDistance)
{
var diff = item.EndDistance % mapData.TotalDistance - currentPlayerInfo.EndDistance % mapData.TotalDistance;
if (Math.Abs(diff * 1000) <= MaxVisibleDistance)
GameObject obj = null;
if (!item.IsSelf)
{
GameObject obj;
if (onlineRider.Sex == 1)
{
obj = Instantiate(OnlinePlayer, transform);
@@ -211,43 +217,44 @@ namespace Assets.Scripts.Scenes.VideoRide
{
obj = Instantiate(OnlinePlayer_NV, transform);
}
var online = obj.GetComponentInChildren<OnlineVideoPlayer>();
var rideObj = obj.GetComponentInChildren<RiderRenderer>();
rideObjs.Add(online,rideObj);
online.SetStartDistance(item.EndDistance);
rideObj.Distance = (float)online.StartDistance;
rideObj.RouteDistance = rideObj.Distance;
rideObjs.Add(online, rideObj);
visibleRiders.Add(online);
online.SetPlayer(onlineRider.NickName, onlineRider.EndDistance - onlineRider.PreDistance, onlineRider.EndDistance, item.Cadence, item.HeartRate, onlineRider.WeightKg, item.UserId, onlineRider.Power, currentPlayerInfo.EndDistance, onlineRider.FrameRate.Value);
trainController.AddRider(onlineRider);
online.SetPlayer(onlineRider.NickName, onlineRider.Speed, onlineRider.PreDistance, onlineRider.EndDistance, item.Cadence, item.HeartRate, onlineRider.WeightKg, item.UserId, onlineRider.Power, currentPlayerInfo.EndDistance, onlineRider.FrameRate.Value);
}
else
{
if (App.CurrentUser.Sex == 1)
{
var playerprefab = Resources.Load<GameObject>("UI/Prefab/AR/VidePlayer");
videoPlayer = Instantiate(playerprefab, transform);
}
else
{
var playerprefabNV = Resources.Load<GameObject>("UI/Prefab/AR/VidePlayer_NV");
videoPlayer = Instantiate(playerprefabNV, transform);
}
CurrentPlayer = videoPlayer.GetComponent<AbstractVideoPlayer>();
var vv = videoPlayer.GetComponent<VideoPlayer>();
vv.SetEndDistance(item.EndDistance);
CurrentPlayer.SetStartDistance(item.EndDistance);
var rideObj = videoPlayer.GetComponent<RiderRenderer>();
rideObj.Distance = (float)CurrentPlayer.StartDistance;
rideObj.RouteDistance = rideObj.Distance;
rideObjs.Add(CurrentPlayer, rideObj);
visibleRiders.Add(CurrentPlayer);
CurrentPlayer.SetPlayer(onlineRider.NickName, onlineRider.Speed, onlineRider.PreDistance, onlineRider.EndDistance, item.Cadence, item.HeartRate, onlineRider.WeightKg, item.UserId, onlineRider.Power, currentPlayerInfo.EndDistance, onlineRider.FrameRate.Value);
}
}
}
}
}
//观察者模式随机选择当前骑行的人作为观察对象
private void CreateCurrentPlayer(List<BaseRider> list)
{
if (_aRMode == ARMode.INSPECT && CurrentPlayer == null)
{
var currentPlayer = list.FirstOrDefault();
if (currentPlayer != null)
{
var onlineRider = currentPlayer as OnlineRiderModel;
GameObject obj;
if (onlineRider.Sex == 1)
{
obj = Instantiate(OnlinePlayer, transform);
}
else
{
obj = Instantiate(OnlinePlayer_NV, transform);
}
var online = obj.GetComponent<OnlineVideoPlayer>();
online.SetPlayer(onlineRider.NickName, onlineRider.EndDistance - onlineRider.PreDistance, onlineRider.EndDistance, onlineRider.Cadence, onlineRider.HeartRate, onlineRider.TotalTicks, onlineRider.UserId, onlineRider.Power, onlineRider.EndDistance, onlineRider.FrameRate.Value);
obj.transform.DOMoveX(0, 1);
ChangePlayer(currentPlayer.UserId);
CurrentPlayer = online;
}
}
}
//设置当前是骑行模式还是观察模式
public void SetCurrentMode(ARMode aRMode)
{
@@ -256,7 +263,8 @@ namespace Assets.Scripts.Scenes.VideoRide
uimanager.SetCurrentMode(aRMode);
if (_aRMode != ARMode.INSPECT)
{
InitCurrentPlayer();
//InitCurrentPlayer();
Debug.Log("ContinueAsync");
ContinueAsync();
}
else
@@ -267,21 +275,6 @@ namespace Assets.Scripts.Scenes.VideoRide
public GameObject videoPlayer;
public GameObject target;
//初始化人物模型
public void InitCurrentPlayer()
{
if (App.CurrentUser.Sex == 1)
{
var playerprefab = Resources.Load<GameObject>("UI/Prefab/AR/VidePlayer");
videoPlayer = Instantiate(playerprefab, transform);
}
else
{
var playerprefabNV = Resources.Load<GameObject>("UI/Prefab/AR/VidePlayer_NV");
videoPlayer = Instantiate(playerprefabNV, transform);
}
CurrentPlayer = videoPlayer.GetComponent<AbstractVideoPlayer>();
}
//切换人物 TODO:替换写法
public void ChangePlayer(int userId)
{
@@ -298,7 +291,7 @@ namespace Assets.Scripts.Scenes.VideoRide
var onlineRider = currentPlayer as OnlineRiderModel;
var obj = Instantiate(OnlinePlayer, transform);
var online = obj.GetComponent<OnlineVideoPlayer>();
online.SetPlayer(onlineRider.NickName, onlineRider.EndDistance-onlineRider.PreDistance, onlineRider.EndDistance, onlineRider.Cadence, onlineRider.HeartRate, 0, onlineRider.UserId, onlineRider.Power, onlineRider.EndDistance, onlineRider.FrameRate.Value);
online.SetPlayer(onlineRider.NickName, onlineRider.Speed,onlineRider.PreDistance, onlineRider.EndDistance, onlineRider.Cadence, onlineRider.HeartRate, 0, onlineRider.UserId, onlineRider.Power, onlineRider.EndDistance, onlineRider.FrameRate.Value);
CurrentPlayer = online;
}
var clearList = players.Where(c => c.UserId != userId);
@@ -314,7 +307,7 @@ namespace Assets.Scripts.Scenes.VideoRide
{
return infoPanel;
}
//骑行记录
//继续骑行
public void ContinueAsync()
{
//骑行结果
@@ -322,23 +315,22 @@ namespace Assets.Scripts.Scenes.VideoRide
{
routeResult = App.routeResult;
selectParamModel = App.routeResult.ContinueCyclingParam;
Debug.Log("selectParamModel"+ selectParamModel.ContinueMark);
SetCyclingModel(CyclingModel.Single);
endDistance = routeResult.EndDistance;
//TODO:继续骑行
mediaPlayer.Control.SeekToFrame(routeResult.LastFrame ?? 0);
var v = FindObjectOfType<VideoPlayer>();
v.SetEndDistance(endDistance);
//mediaPlayer.Control.SeekToFrame(routeResult.LastFrame ?? 0);
}
}
//设置骑行模式
public void SetCyclingModel(CyclingModel mode)
{
startTime = UIManager.Now.GetDateTime();
Debug.Log("SetCyclingModel" + selectParamModel.ContinueMark);
this.cyclingModel = mode;
switch (cyclingModel)
{
case CyclingModel.Single:
cyclingController = new SingleModel(route, selectParamModel);
cyclingController = new ARSingleModel(route, selectParamModel);
break;
case CyclingModel.GameRoom:
cyclingController = new GameModel(route, selectParamModel);
@@ -367,7 +359,6 @@ namespace Assets.Scripts.Scenes.VideoRide
//设置视频源文件
public void SetMedia(string path)
{
return;
if (mediaPlayer != null)
{
mediaPlayer.OpenMedia(new MediaPath(path,MediaPathType.AbsolutePathOrURL),false);
@@ -378,8 +369,6 @@ namespace Assets.Scripts.Scenes.VideoRide
{
return isStop;
}
double preframe = 0;
double preDistance = 0;
//暂停
public void Pause()
@@ -400,11 +389,7 @@ namespace Assets.Scripts.Scenes.VideoRide
{
return mediaPlayer.Control.GetCurrentTimeFrames();
}
Vector3 currentCameraRotation = Vector3.zero;
Vector3 mVelocity;
float prePos = 0f;
public float ratio = 111.676f;
public float startOffset = 0f;
//获取AR骑行配置信息
@@ -498,7 +483,6 @@ namespace Assets.Scripts.Scenes.VideoRide
return new Vector2d(0, 0);
}
}
private void OnDestroy()
{
App.gameRoomDetail = null;
@@ -225,7 +225,17 @@ namespace Assets.Scripts.Scenes.VideoRide
return;
startBtnLock = true;
var ui = manager.GetCanvasTransform();
InitAR();
canvasGroup.DOFade(0, 1).onComplete += () => {
gameObject.SetActive(false);
manager.StartGame();
manager.SetCyclingModel(Assets.Scenes.Ride.Scripts.Model.CyclingModel.Single);
manager.SetCurrentMode(VideoGameManager.ARMode.RIDE);
};
}
public async void InitAR()
{
//加载本地文件
var route = manager.mapRoute;
var arDataPath = $"{PFConstants.ARFolder}/{route.Id}/{route.Id}.json";
@@ -237,20 +247,14 @@ namespace Assets.Scripts.Scenes.VideoRide
await Task.Run<ARData>((Func<ARData>)(() => aRData = ARData.LoadFromFile(arDataPath)));
await Task.Run<RouteDetailData>((Func<RouteDetailData>)(() => routeDetailData = RouteDetailData.LoadFromFile(videoRoute)));
var arController = FindObjectOfType<ARTrainingController>();
arController.Initialize(aRData, routeDetailData);
canvasGroup.DOFade(0, 1).onComplete += () => {
gameObject.SetActive(false);
manager.StartGame();
manager.SetCyclingModel(Assets.Scenes.Ride.Scripts.Model.CyclingModel.Single);
manager.SetCurrentMode(VideoGameManager.ARMode.RIDE);
};
arController.Initialize(aRData, routeDetailData);
}
public void StartRide(int seconds)
{
var ui = manager.GetCanvasTransform();
InitAR();
canvasGroup.DOFade(0, 0).onComplete += () => {
gameObject.SetActive(false);
manager.SetCyclingModel(CyclingModel.GameRoom);
@@ -259,6 +263,8 @@ namespace Assets.Scripts.Scenes.VideoRide
};
UIManager.ShowGameRoomCountDownPanel(seconds,()=> {
manager.StartGame();
manager.SetCyclingModel(Assets.Scenes.Ride.Scripts.Model.CyclingModel.Single);
manager.SetCurrentMode(VideoGameManager.ARMode.RIDE);
});
}
+15 -11
View File
@@ -1,21 +1,12 @@
using Assets.AR;
using Assets.Scenes.Ride.Scripts;
using Assets.Scenes.Ride.Scripts.Model;
using Assets.Scenes.Ride.Scripts.Model;
using Assets.Scenes.Ride.Scripts.Model.CyclingModels;
using DG.Tweening;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Text;
using UnityEngine;
namespace Assets.Scripts.Scenes.VideoRide
{
public class VideoPlayer : AbstractVideoPlayer
{
public double EndDistance => totalDistance;
private bool isSingle = true;
protected override void Start()
{
@@ -25,7 +16,7 @@ namespace Assets.Scripts.Scenes.VideoRide
userName = App.CurrentUser.Nickname;
}
protected override bool GetStart()
protected bool GetStart()
{
return manager.IsStart();
}
@@ -43,6 +34,8 @@ namespace Assets.Scripts.Scenes.VideoRide
public void SetEndDistance(double distance)
{
this.totalDistance = distance;
this.PreDistance = distance * 1000;
this.EndDistance = PreDistance;
}
public void Complete()
@@ -153,5 +146,16 @@ namespace Assets.Scripts.Scenes.VideoRide
manager.Save(totalDistance);
}
}
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;
this.OnlineSpeed = speed / 3.6;
}
}
}