AR继续骑和断线重连继续骑
This commit is contained in:
parent
ae58f4d461
commit
9e2e778e12
@ -7,7 +7,9 @@ namespace Assets.AR
|
|||||||
{
|
{
|
||||||
public Vector3 Lean { get; set; }//偏移量
|
public Vector3 Lean { get; set; }//偏移量
|
||||||
|
|
||||||
public int StartPosition;
|
public int StartPosition { get; set; }
|
||||||
|
|
||||||
|
public int StartRouteDistance { get; set; }
|
||||||
|
|
||||||
public bool IsAtFinish { get; set; }//是否到达终点
|
public bool IsAtFinish { get; set; }//是否到达终点
|
||||||
|
|
||||||
@ -23,6 +25,8 @@ namespace Assets.AR
|
|||||||
|
|
||||||
public float Speed { get; set; }//速度
|
public float Speed { get; set; }//速度
|
||||||
|
|
||||||
|
public float PreSpeed { get; set; }//速度
|
||||||
|
|
||||||
public float Curvature { get; set; }//转向
|
public float Curvature { get; set; }//转向
|
||||||
|
|
||||||
public float LaneChangingDirection { get; set; }//方向
|
public float LaneChangingDirection { get; set; }//方向
|
||||||
@ -33,8 +37,7 @@ namespace Assets.AR
|
|||||||
|
|
||||||
public float FrameIndexDistanceCorrection { get; set; }//位置纠正
|
public float FrameIndexDistanceCorrection { get; set; }//位置纠正
|
||||||
|
|
||||||
public double TestPower = 500;
|
public int TestPower { get; set; }
|
||||||
|
|
||||||
|
|
||||||
//重置碰撞检测参数
|
//重置碰撞检测参数
|
||||||
public void ResetCollisionDetectionParameters()
|
public void ResetCollisionDetectionParameters()
|
||||||
|
|||||||
@ -62,7 +62,7 @@ namespace Assets.AR
|
|||||||
}
|
}
|
||||||
|
|
||||||
public float DeltaDistance { get; set; }
|
public float DeltaDistance { get; set; }
|
||||||
public float PreDistance { get; set; }
|
public float NextDistance { get; set; }
|
||||||
|
|
||||||
public float Distance
|
public float Distance
|
||||||
{
|
{
|
||||||
|
|||||||
@ -6,6 +6,10 @@ using UnityEngine.UI;
|
|||||||
using RenderHeads.Media.AVProVideo;
|
using RenderHeads.Media.AVProVideo;
|
||||||
using Assets.Scripts.Scenes.VideoRide;
|
using Assets.Scripts.Scenes.VideoRide;
|
||||||
using Assets.Core;
|
using Assets.Core;
|
||||||
|
using Assets.Scenes.Ride.Scripts.Model;
|
||||||
|
using Assets.Scenes.Ride.Scripts.Model.RiderModels;
|
||||||
|
using DG.Tweening;
|
||||||
|
using System.Collections;
|
||||||
|
|
||||||
namespace Assets.AR
|
namespace Assets.AR
|
||||||
{
|
{
|
||||||
@ -15,20 +19,34 @@ namespace Assets.AR
|
|||||||
private ARData aRData;
|
private ARData aRData;
|
||||||
private RouteDetailData detail;
|
private RouteDetailData detail;
|
||||||
private VideoPointsSync videoPointsSync;
|
private VideoPointsSync videoPointsSync;
|
||||||
private int index = 1;
|
|
||||||
private readonly List<ARLaneObject> collisionList = new List<ARLaneObject>();
|
private readonly List<ARLaneObject> collisionList = new List<ARLaneObject>();
|
||||||
VideoPlayerControl VideoPlayerControl;
|
VideoPlayerControl VideoPlayerControl;
|
||||||
ARLaneObject[] rides;
|
ARLaneObject[] rides { get; set; }
|
||||||
public ARLaneObject mainObject { get; set; }
|
public ARLaneObject mainRiderObject { get; set; }
|
||||||
private Light arLight;
|
private Light arLight;
|
||||||
private Light arBackLight;
|
private Light arBackLight;
|
||||||
public RiderCameraDistance RiderCameraDistance { get; set; }
|
public RiderCameraDistance RiderCameraDistance { get; set; }
|
||||||
public VideoControlMode VideoControlMode { get; private set; }
|
public VideoControlMode VideoControlMode { get; private set; }
|
||||||
private float autoCameraSwitchTimeCounter = 80f;
|
private float autoCameraSwitchTimeCounter = 80f;
|
||||||
float timers = 1f;
|
float timers = 0f;
|
||||||
double weight = 70;
|
|
||||||
double bikeWeight = 20;
|
|
||||||
private VideoGameManager manager;
|
private VideoGameManager manager;
|
||||||
|
public int VisibleModels { get; private set; }
|
||||||
|
private int visibleModelsLimit = 20;
|
||||||
|
public int VisibleModelsLimit
|
||||||
|
{
|
||||||
|
get => this.visibleModelsLimit;
|
||||||
|
set => this.visibleModelsLimit = Mathf.Clamp(value, 20, 100);
|
||||||
|
}
|
||||||
|
private Dictionary<int, VisibleRiderItem> visibleRiders = new Dictionary<int, VisibleRiderItem>();
|
||||||
|
private Dictionary<int, OnlineRiderModel> riders = new Dictionary<int, OnlineRiderModel>();
|
||||||
|
//private Dictionary<int, UIRect> riderNameViews { get; set; } //= new Dictionary<int, UIRect>();
|
||||||
|
//private Dictionary<int, RiderValueView> riderValueViews = new Dictionary<int, RiderValueView>();
|
||||||
|
|
||||||
|
public GameObject BikerFemalePrefab => Resources.Load<GameObject>("UI/Prefab/AR/VidePlayer");
|
||||||
|
|
||||||
|
public GameObject BikerMalePrefab => Resources.Load<GameObject>("UI/Prefab/AR/VidePlayer_NV");
|
||||||
|
|
||||||
|
private bool paused { get; set; }
|
||||||
|
|
||||||
protected override void Start()
|
protected override void Start()
|
||||||
{
|
{
|
||||||
@ -40,22 +58,17 @@ namespace Assets.AR
|
|||||||
public void Initialize(ARData arData, RouteDetailData routeDetailData)
|
public void Initialize(ARData arData, RouteDetailData routeDetailData)
|
||||||
{
|
{
|
||||||
//ar数据加载本地,本地没有就下载
|
//ar数据加载本地,本地没有就下载
|
||||||
//var txt = Resources.Load<TextAsset>("UI/93824").text;
|
this.aRData = arData;
|
||||||
//var route = Resources.Load<TextAsset>("UI/route-93824").text;
|
this.detail = routeDetailData;
|
||||||
this.aRData = arData; //Newtonsoft.Json.JsonConvert.DeserializeObject<ARData>(txt);
|
|
||||||
this.detail = routeDetailData;//Newtonsoft.Json.JsonConvert.DeserializeObject<RouteDetailData>(route);
|
|
||||||
|
|
||||||
videoPointsSync = new VideoPointsSync(detail.VideoPoints.Select(c => new VideoPoint()
|
videoPointsSync = new VideoPointsSync(detail.VideoPoints.Select(c => new VideoPoint()
|
||||||
{
|
{
|
||||||
Distance = (float)c.Distance,
|
Distance = (float)c.Distance,
|
||||||
Time = (float)c.VideoTime
|
Time = (float)c.VideoTime
|
||||||
}));
|
}));
|
||||||
|
|
||||||
videoSync = videoPointsSync;
|
videoSync = videoPointsSync;
|
||||||
|
|
||||||
this.VideoPlayerControl = new VideoPlayerControl();
|
this.VideoPlayerControl = new VideoPlayerControl();
|
||||||
this.VideoPlayerControl.VideoSyncSource = videoSync;
|
this.VideoPlayerControl.VideoSyncSource = videoSync;
|
||||||
|
|
||||||
this.videoPlayer = new AVProVideoPlayer();
|
this.videoPlayer = new AVProVideoPlayer();
|
||||||
this.videoPlayer.videoPlayer = mediaPlayer;
|
this.videoPlayer.videoPlayer = mediaPlayer;
|
||||||
SetArRoute(new ARRoute(aRData.Route), videoSync, videoPlayer);
|
SetArRoute(new ARRoute(aRData.Route), videoSync, videoPlayer);
|
||||||
@ -72,13 +85,20 @@ namespace Assets.AR
|
|||||||
return;
|
return;
|
||||||
timers -= Time.deltaTime;
|
timers -= Time.deltaTime;
|
||||||
|
|
||||||
while (timers < 0)
|
while (timers <= 0)
|
||||||
{
|
{
|
||||||
|
//this.riderObjects.Clear();
|
||||||
foreach (var dic in manager.rideObjs)
|
foreach (var dic in manager.rideObjs)
|
||||||
{
|
{
|
||||||
|
|
||||||
var item = dic.Value;
|
var item = dic.Value;
|
||||||
item.Speed = (float)(dic.Key.Speed/3.6d);
|
if (dic.Key.UserId == App.CurrentUser.Id)
|
||||||
item.DeltaDistance = item.Speed;
|
{
|
||||||
|
mainRiderObject = item;
|
||||||
|
}
|
||||||
|
item.PreSpeed = item.Speed;
|
||||||
|
item.Speed = (float)dic.Key.OnlineSpeed;
|
||||||
|
item.DeltaDistance = (float)(dic.Key.EndDistance - dic.Key.PreDistance);
|
||||||
item.Route = Route;
|
item.Route = Route;
|
||||||
item.VideoSync = videoPointsSync;
|
item.VideoSync = videoPointsSync;
|
||||||
if(!this.arObjects.Contains(item))
|
if(!this.arObjects.Contains(item))
|
||||||
@ -86,47 +106,27 @@ namespace Assets.AR
|
|||||||
if (!this.riderObjects.ContainsKey(item.GetInstanceID()))
|
if (!this.riderObjects.ContainsKey(item.GetInstanceID()))
|
||||||
this.riderObjects.Add(item.GetInstanceID(), item);
|
this.riderObjects.Add(item.GetInstanceID(), item);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mainObject != null)
|
|
||||||
{
|
|
||||||
mainObject.Speed = (float)(manager.CurrentPlayer.Speed / 3.6d);
|
|
||||||
mainObject.DeltaDistance = mainObject.Speed;
|
|
||||||
if (!this.riderObjects.ContainsKey(mainObject.GetInstanceID()))
|
|
||||||
this.riderObjects.Add(mainObject.GetInstanceID(), mainObject);
|
|
||||||
}
|
|
||||||
|
|
||||||
timers += 1f;
|
timers += 1f;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mainObject == null)
|
if (mainRiderObject == null)
|
||||||
|
return;
|
||||||
|
var delta = Time.deltaTime;
|
||||||
|
foreach (var obj in this.riderObjects.Values)
|
||||||
{
|
{
|
||||||
mainObject = manager.CurrentPlayer.gameObject.GetComponent<RiderRenderer>();
|
var offset = obj.DeltaDistance * delta;
|
||||||
this.arObjects.Add(mainObject);
|
obj.Distance += offset;
|
||||||
mainObject.Speed = (float)(manager.CurrentPlayer.Speed / 3.6d);
|
obj.RouteDistance += offset;
|
||||||
mainObject.DeltaDistance = mainObject.Speed;
|
if (obj.Distance >= Route.GetTotalDistance())
|
||||||
mainObject.Route = Route;
|
|
||||||
mainObject.VideoSync = videoPointsSync;
|
|
||||||
if (!this.riderObjects.ContainsKey(mainObject.GetInstanceID()))
|
|
||||||
this.riderObjects.Add(mainObject.GetInstanceID(), mainObject);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
foreach (var item in this.riderObjects.Values)
|
|
||||||
{
|
|
||||||
item.Distance += item.DeltaDistance * Time.deltaTime;
|
|
||||||
item.RouteDistance += item.DeltaDistance * Time.deltaTime;
|
|
||||||
if (item.Distance >= Route.GetTotalDistance())
|
|
||||||
{
|
{
|
||||||
item.IsAtFinish = true;
|
obj.IsAtFinish = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
this.FrameIndexDistanceCorrection = this.VideoPlayerControl.FrameIndexDistanceCorrection;
|
this.FrameIndexDistanceCorrection = this.VideoPlayerControl.FrameIndexDistanceCorrection;
|
||||||
//mainObject = manager.CurrentPlayer;
|
|
||||||
//this.FollowedRiderId = mainObject.Id;
|
//this.FollowedRiderId = mainObject.Id;
|
||||||
this.UpdateCameraFollowDistance();
|
this.UpdateCameraFollowDistance();
|
||||||
VideoPlayerControl.UpdateVideoPlaybackSpeed(mainObject.Speed, mainObject.distance);
|
VideoPlayerControl.UpdateVideoPlaybackSpeed(mainRiderObject.PreSpeed, mainRiderObject.Distance);
|
||||||
base.Update();
|
base.Update();
|
||||||
this.UpdateRidersVisibility();
|
this.UpdateRidersVisibility();
|
||||||
this.UpdateRidersLean();
|
this.UpdateRidersLean();
|
||||||
@ -194,7 +194,7 @@ namespace Assets.AR
|
|||||||
protected override bool IsArObjectActive(ARObject arObject)
|
protected override bool IsArObjectActive(ARObject arObject)
|
||||||
{
|
{
|
||||||
bool flag = base.IsArObjectActive(arObject);
|
bool flag = base.IsArObjectActive(arObject);
|
||||||
if ((UnityEngine.Object)arObject != (UnityEngine.Object)this.mainObject)
|
if ((UnityEngine.Object)arObject != (UnityEngine.Object)this.mainRiderObject)
|
||||||
return flag;
|
return flag;
|
||||||
if ((double)this.VideoPlayerControl.CameraFollowDistance > 0.0 || this.AR360Version)
|
if ((double)this.VideoPlayerControl.CameraFollowDistance > 0.0 || this.AR360Version)
|
||||||
return flag;
|
return flag;
|
||||||
@ -208,7 +208,7 @@ namespace Assets.AR
|
|||||||
case RiderCameraDistance.FirstPerson:
|
case RiderCameraDistance.FirstPerson:
|
||||||
return 0.0f;
|
return 0.0f;
|
||||||
case RiderCameraDistance.Near:
|
case RiderCameraDistance.Near:
|
||||||
return 3f;
|
return 1.5f;
|
||||||
case RiderCameraDistance.Middle:
|
case RiderCameraDistance.Middle:
|
||||||
return 5f;
|
return 5f;
|
||||||
case RiderCameraDistance.Far:
|
case RiderCameraDistance.Far:
|
||||||
@ -217,59 +217,430 @@ namespace Assets.AR
|
|||||||
throw new ArgumentException("Unknown rider's camera distance.");
|
throw new ArgumentException("Unknown rider's camera distance.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
//添加骑手
|
||||||
|
public void AddRider(OnlineRiderModel rider)
|
||||||
|
{
|
||||||
|
if (this.riders.ContainsKey(rider.UserId))
|
||||||
|
return;
|
||||||
|
this.riders.Add(rider.UserId, rider);
|
||||||
|
}
|
||||||
|
//移除骑手
|
||||||
|
public void RemoveRider(int riderId)
|
||||||
|
{
|
||||||
|
if (!this.riders.ContainsKey(riderId))
|
||||||
|
return;
|
||||||
|
this.riders.Remove(riderId);
|
||||||
|
this.DestroyRider(riderId);
|
||||||
|
this.DestroyRiderTitle(riderId);
|
||||||
|
}
|
||||||
|
//创建人物
|
||||||
|
private BaseRenderer CreateRiderModel(OnlineRiderModel rider, float lane)
|
||||||
|
{
|
||||||
|
GameObject gameObject;
|
||||||
|
RiderRenderer riderModel;
|
||||||
|
if (rider.Sex == 1)
|
||||||
|
{
|
||||||
|
gameObject = UnityEngine.Object.Instantiate<GameObject>(this.BikerMalePrefab);
|
||||||
|
gameObject.name = "RiderMale " + rider.UserId.ToString();
|
||||||
|
riderModel = gameObject.AddComponent<RiderRenderer>();
|
||||||
|
riderModel.Initialize(true, false);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
gameObject = UnityEngine.Object.Instantiate<GameObject>(this.BikerFemalePrefab);
|
||||||
|
gameObject.name = "RiderFemale " + rider.UserId.ToString();
|
||||||
|
riderModel = gameObject.AddComponent<RiderRenderer>();
|
||||||
|
riderModel.Initialize(false, false);
|
||||||
|
}
|
||||||
|
gameObject.transform.parent = this.transform;
|
||||||
|
gameObject.transform.position = ARObjectsController.DefaultObjectPosition;
|
||||||
|
gameObject.layer = 9;
|
||||||
|
riderModel.Route = this.Route;
|
||||||
|
riderModel.VideoSync = this.videoSync;
|
||||||
|
//riderModel.VideoPlayer = this.videoPlayer;
|
||||||
|
//riderModel.ColorUser = rider.UserColor;
|
||||||
|
//riderModel.ColorSkin = rider.SkinColor;
|
||||||
|
// ModelTexturesList modelTextures = this.GetModelTextures(rider.JerseyId);
|
||||||
|
//riderModel.JerseyTexture = modelTextures.JerseyTexture;
|
||||||
|
//riderModel.HelmTexture = modelTextures.HelmTexture;
|
||||||
|
//riderModel.BikeTexture = modelTextures.BikeTexture;
|
||||||
|
if ((double)lane != -1.0)
|
||||||
|
riderModel.Lane = lane;
|
||||||
|
this.riderObjects.Add(rider.UserId, (ARLaneObject)riderModel);
|
||||||
|
this.arObjects.Add((ARObject)riderModel);
|
||||||
|
//是否
|
||||||
|
if (this.IsMainRider(rider))
|
||||||
|
this.mainRiderObject = (ARLaneObject)riderModel;
|
||||||
|
return (BaseRenderer)riderModel;
|
||||||
|
}
|
||||||
|
|
||||||
|
private ARLaneObject CreateRiderObject(OnlineRiderModel rider, float lane)
|
||||||
|
{
|
||||||
|
ARLaneObject riderObject = new GameObject("RiderObject " + rider.UserId.ToString())
|
||||||
|
{
|
||||||
|
transform = {
|
||||||
|
parent = this.transform
|
||||||
|
},
|
||||||
|
layer = 9
|
||||||
|
}.AddComponent<ARLaneObject>();
|
||||||
|
riderObject.Route = this.Route;
|
||||||
|
riderObject.VideoSync = this.videoSync;
|
||||||
|
//riderObject.VideoPlayer = this.videoPlayer;
|
||||||
|
if ((double)lane != -1.0)
|
||||||
|
riderObject.Lane = lane;
|
||||||
|
this.riderObjects.Add(rider.UserId, riderObject);
|
||||||
|
this.arObjects.Add((ARObject)riderObject);
|
||||||
|
if (this.IsMainRider(rider))
|
||||||
|
this.mainRiderObject = riderObject;
|
||||||
|
return riderObject;
|
||||||
|
}
|
||||||
|
//销毁骑手
|
||||||
|
private void DestroyRider(int riderId)
|
||||||
|
{
|
||||||
|
ARLaneObject arLaneObject;
|
||||||
|
if (!this.riderObjects.TryGetValue(riderId, out arLaneObject))
|
||||||
|
return;
|
||||||
|
this.arObjects.Remove((ARObject)arLaneObject);
|
||||||
|
this.riderObjects.Remove(riderId);
|
||||||
|
if ((UnityEngine.Object)arLaneObject == (UnityEngine.Object)this.mainRiderObject)
|
||||||
|
this.mainRiderObject = (ARLaneObject)null;
|
||||||
|
UnityEngine.Object.Destroy((UnityEngine.Object)arLaneObject.gameObject);
|
||||||
|
}
|
||||||
|
//创建骑行人员头顶的名字
|
||||||
|
private void CreateRiderTitle(OnlineRiderModel rider)
|
||||||
|
{
|
||||||
|
//RiderNameView riderNameView = UIRect.Create<RiderNameView>(this.transform, "Name " + rider.Id.ToString());
|
||||||
|
//riderNameView.RectTransform.pivot = new Vector2(0.5f, 0.5f);
|
||||||
|
//riderNameView.gameObject.layer = 9;
|
||||||
|
//riderNameView.NameLabel.Font = Fonts.WorkSansBlack;
|
||||||
|
//riderNameView.SetName(rider.NameShort);
|
||||||
|
//switch (rider)
|
||||||
|
//{
|
||||||
|
// case GhostRider _:
|
||||||
|
// riderNameView.SetAvatarResourceIcon(AvatarView.IconType.Ghost);
|
||||||
|
// riderNameView.SetAvatarBorderColor(rider.UserColor);
|
||||||
|
// riderNameView.SetAvatarBorderWidth(2f);
|
||||||
|
// break;
|
||||||
|
// case StravaRider stravaRider:
|
||||||
|
// switch (stravaRider.EffortType)
|
||||||
|
// {
|
||||||
|
// case EffortType.Kom:
|
||||||
|
// riderNameView.SetAvatarResourceIcon(AvatarView.IconType.StravaKom);
|
||||||
|
// break;
|
||||||
|
// case EffortType.Qom:
|
||||||
|
// riderNameView.SetAvatarResourceIcon(AvatarView.IconType.StravaQom);
|
||||||
|
// break;
|
||||||
|
// case EffortType.Pr:
|
||||||
|
// riderNameView.SetAvatarResourceIcon(AvatarView.IconType.StravaPr);
|
||||||
|
// break;
|
||||||
|
// }
|
||||||
|
// riderNameView.SetAvatarBorderColor(Color.clear);
|
||||||
|
// riderNameView.SetAvatarBorderWidth(0.0f);
|
||||||
|
// break;
|
||||||
|
// default:
|
||||||
|
// riderNameView.SetAvatarUrl(rider.AvatarUrl);
|
||||||
|
// riderNameView.SetAvatarBorderColor(rider.UserColor);
|
||||||
|
// riderNameView.SetAvatarBorderWidth(2f);
|
||||||
|
// break;
|
||||||
|
//}
|
||||||
|
//riderNameView.BackgroundColor = this.GetRiderTitleBackgroundColor(rider);
|
||||||
|
//riderNameView.SetCornerRadius(float.MaxValue);
|
||||||
|
//riderNameView.TrimSize();
|
||||||
|
//this.riderNameViews.Add(rider.Id, (UIRect)riderNameView);
|
||||||
|
//if (rider is StravaRider)
|
||||||
|
// return;
|
||||||
|
//RiderValueView riderValueView = UIRect.Create<RiderValueView>(this.transform, "Value " + rider.Id.ToString());
|
||||||
|
//riderValueView.RectTransform.pivot = new Vector2(0.5f, 0.5f);
|
||||||
|
//riderValueView.gameObject.layer = 9;
|
||||||
|
//this.riderValueViews.Add(rider.Id, riderValueView);
|
||||||
|
}
|
||||||
|
private void CreateRiderTitleObject(OnlineRiderModel rider)
|
||||||
|
{
|
||||||
|
//UIRect uiRect = UIRect.Create<UIRect>(this.transform, "TitleObject " + rider.Id.ToString());
|
||||||
|
//uiRect.Size = new Vector2(150f, 26f);
|
||||||
|
//uiRect.RectTransform.pivot = new Vector2(0.5f, 0.5f);
|
||||||
|
//uiRect.gameObject.layer = 9;
|
||||||
|
//uiRect.AddComponent<Canvas>().renderMode = RenderMode.WorldSpace;
|
||||||
|
//uiRect.AddComponent<BoxCollider>().size = (Vector3)uiRect.Size;
|
||||||
|
//this.riderNameViews.Add(rider.Id, uiRect);
|
||||||
|
}
|
||||||
|
private void DestroyRiderTitle(int riderId)
|
||||||
|
{
|
||||||
|
//UIRect uiRect;
|
||||||
|
//if (this.riderNameViews.TryGetValue(riderId, out uiRect))
|
||||||
|
//{
|
||||||
|
// this.riderNameViews.Remove(riderId);
|
||||||
|
// UnityEngine.Object.Destroy((UnityEngine.Object)uiRect.gameObject);
|
||||||
|
//}
|
||||||
|
//RiderValueView riderValueView;
|
||||||
|
//if (!this.riderValueViews.TryGetValue(riderId, out riderValueView))
|
||||||
|
// return;
|
||||||
|
//this.riderValueViews.Remove(riderId);
|
||||||
|
//UnityEngine.Object.Destroy((UnityEngine.Object)riderValueView.gameObject);
|
||||||
|
}
|
||||||
private void UpdateRidersVisibility()
|
private void UpdateRidersVisibility()
|
||||||
{
|
{
|
||||||
//if (!this.videoPlayer.Initialized)
|
if (!this.videoPlayer.Initialized)
|
||||||
// return;
|
return;
|
||||||
//this.UpdateVisibleRiders();
|
this.UpdateVisibleRiders();
|
||||||
////删除当前道路上应该消失的骑手
|
return;
|
||||||
//foreach (int num in this.riderObjects.Keys.ToArray<int>())
|
//删除当前道路上应该消失的骑手
|
||||||
//{
|
foreach (int num in this.riderObjects.Keys.ToArray<int>())
|
||||||
// if (!this.visibleRiders.ContainsKey(num))
|
{
|
||||||
// {
|
if (!this.visibleRiders.ContainsKey(num))
|
||||||
// ARLaneObject riderObject = this.riderObjects[num];
|
{
|
||||||
// if (!riderObject.IsAtFinish || (double)riderObject.VisibilityLevel <= 0.0)
|
ARLaneObject riderObject = this.riderObjects[num];
|
||||||
// {
|
if (!riderObject.IsAtFinish || (double)riderObject.VisibilityLevel <= 0.0)
|
||||||
// this.DestroyRider(num);
|
{
|
||||||
// this.DestroyRiderTitle(num);
|
this.DestroyRider(num);
|
||||||
// }
|
this.DestroyRiderTitle(num);
|
||||||
// }
|
}
|
||||||
//}
|
}
|
||||||
////新增应该显示的骑手
|
}
|
||||||
//foreach (TrainingARController.VisibleRiderItem visibleRiderItem in this.visibleRiders.Values)
|
//新增应该显示的骑手
|
||||||
//{
|
foreach (VisibleRiderItem visibleRiderItem in this.visibleRiders.Values)
|
||||||
// IRouteRider rider = visibleRiderItem.Rider;
|
{
|
||||||
// bool showModel = visibleRiderItem.ShowModel;
|
var rider = visibleRiderItem.Rider;
|
||||||
// ARLaneObject arLaneObject;
|
bool showModel = visibleRiderItem.ShowModel;
|
||||||
// //二次检查
|
ARLaneObject arLaneObject;
|
||||||
// if (this.riderObjects.TryGetValue(rider.Id, out arLaneObject))
|
//二次检查
|
||||||
// {
|
if (this.riderObjects.TryGetValue(rider.UserId, out arLaneObject))
|
||||||
// if (arLaneObject is BaseRenderer)
|
{
|
||||||
// {
|
if (arLaneObject is BaseRenderer)
|
||||||
// if (!showModel)
|
{
|
||||||
// {
|
if (!showModel)
|
||||||
// float lane = arLaneObject.Lane;
|
{
|
||||||
// this.DestroyRider(rider.Id);
|
float lane = arLaneObject.Lane;
|
||||||
// this.CreateRiderObject(rider, lane);
|
this.DestroyRider(rider.UserId);
|
||||||
// }
|
this.CreateRiderObject(rider, lane);
|
||||||
// }
|
}
|
||||||
// else if (showModel)
|
}
|
||||||
// {
|
else if (showModel)
|
||||||
// float lane = arLaneObject.Lane;
|
{
|
||||||
// this.DestroyRider(rider.Id);
|
float lane = arLaneObject.Lane;
|
||||||
// this.CreateRiderModel(rider, lane);
|
this.DestroyRider(rider.UserId);
|
||||||
// }
|
this.CreateRiderModel(rider, lane);
|
||||||
// }
|
}
|
||||||
// else
|
}
|
||||||
// {
|
else
|
||||||
// if (showModel)
|
{
|
||||||
// this.CreateRiderModel(rider, visibleRiderItem.Lane);
|
if (showModel)
|
||||||
// else
|
this.CreateRiderModel(rider, visibleRiderItem.Lane);
|
||||||
// this.CreateRiderObject(rider, visibleRiderItem.Lane);
|
else
|
||||||
// this.CreateRiderTitleObject(rider);
|
this.CreateRiderObject(rider, visibleRiderItem.Lane);
|
||||||
// }
|
this.CreateRiderTitleObject(rider);
|
||||||
//}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
public int VisibleRiderTitlesLimit => this.VisibleModelsLimit + 10;
|
||||||
|
private void UpdateVisibleRiders()
|
||||||
|
{
|
||||||
|
float visibilityModels = ARObject.MaxDistanceVisibilityModels;
|
||||||
|
float visibilityDistance = this.MaximumVisibilityDistance;
|
||||||
|
float routeDistance = this.CameraDistance;
|
||||||
|
bool flag = this.AllowStartOrder && (double)routeDistance < 200.0;
|
||||||
|
float num1 = flag ? visibilityModels : visibilityDistance;
|
||||||
|
float a1 = this.videoPlayer.IsRear ? visibilityDistance : 1f;
|
||||||
|
int riderTitlesLimit = this.VisibleRiderTitlesLimit;
|
||||||
|
int a2 = 5;
|
||||||
|
//if (this.SelectedPanorama != null && this.RouteVideo.Rider != null)
|
||||||
|
//{
|
||||||
|
// routeDistance = this.GetModelRouteDistance(this.RouteVideo.Rider.Id, (float)this.RouteVideo.Rider.LapDistance);
|
||||||
|
// a1 = flag ? visibilityModels : visibilityDistance;
|
||||||
|
// a2 = riderTitlesLimit / 2;
|
||||||
|
//}
|
||||||
|
float num2 = Mathf.Max(a1, this.GetOvertakingThreshold(routeDistance) + 1f);
|
||||||
|
float distance1 = routeDistance - num2;
|
||||||
|
float distance2 = routeDistance + num1;
|
||||||
|
float num3;
|
||||||
|
if (flag)
|
||||||
|
{
|
||||||
|
num3 = this.StartRegionRouteWidth;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
float videoFrameAtDistance1 = this.videoSync.GetVideoFrameAtDistance(distance1);
|
||||||
|
float videoFrameAtDistance2 = this.videoSync.GetVideoFrameAtDistance(distance2);
|
||||||
|
num3 = (float)(0.5 * ((double)(this.Route.GetLeftSideOffset(videoFrameAtDistance1) + this.Route.GetRightSideOffset(videoFrameAtDistance1)) + (double)(this.Route.GetLeftSideOffset(videoFrameAtDistance2) + this.Route.GetRightSideOffset(videoFrameAtDistance2))));
|
||||||
|
}
|
||||||
|
float num4 = num3 / 0.7f;
|
||||||
|
float num5 = this.paused ? 0.0f : 0.5f;
|
||||||
|
float maxLane = Math.Max(0.0f, num4 - num5);
|
||||||
|
List<VisibleRiderItem> visibleRiderItemList1 = new List<VisibleRiderItem>();
|
||||||
|
List<VisibleRiderItem> visibleRiderItemList2 = new List<VisibleRiderItem>();
|
||||||
|
//if (this.SelectedPanorama == null || this.RouteVideo.Rider == null || this.RouteVideo.Rider.Id != this.panoramaRidersPivotId)
|
||||||
|
//{
|
||||||
|
// this.panoramaRiders = (List<IRouteRider>)null;
|
||||||
|
// this.panoramaRidersPivotId = -1;
|
||||||
|
//}
|
||||||
|
//if (this.panoramaRidersPivotId != -1 && this.riderObjects.ContainsKey(this.panoramaRidersPivotId) && ((!(this.riderObjects[this.panoramaRidersPivotId] is BaseRenderer riderObject) ? 0 : (riderObject.Paused ? 1 : 0)) != 0 || this.riders[this.panoramaRidersPivotId].Speed == 0.0))
|
||||||
|
//{
|
||||||
|
// this.panoramaRiders = (List<IRouteRider>)null;
|
||||||
|
// this.panoramaRidersPivotId = -1;
|
||||||
|
//}
|
||||||
|
var routeRiders = this.riders.Values;
|
||||||
|
//if (this.SelectedPanorama != null && this.panoramaRiders != null)
|
||||||
|
// routeRiders = (IEnumerable<IRouteRider>)this.panoramaRiders;
|
||||||
|
foreach (var rider in routeRiders)
|
||||||
|
{
|
||||||
|
if (!rider.IsFinished)
|
||||||
|
{
|
||||||
|
float modelRouteDistance = this.GetModelRouteDistance(0, (float)rider.RouteDistance);
|
||||||
|
float num6 = modelRouteDistance - routeDistance;
|
||||||
|
if (this.IsMultilap)
|
||||||
|
{
|
||||||
|
if ((double)modelRouteDistance + this.lapLength >= (double)distance1 && (double)modelRouteDistance + this.lapLength <= (double)distance2)
|
||||||
|
num6 = modelRouteDistance + (float)this.lapLength - routeDistance;
|
||||||
|
else if ((double)modelRouteDistance - this.lapLength >= (double)distance1 && (double)modelRouteDistance - this.lapLength <= (double)distance2)
|
||||||
|
num6 = modelRouteDistance - (float)this.lapLength - routeDistance;
|
||||||
|
}
|
||||||
|
if ((double)num6 > -(double)num2 && (double)num6 < (double)num1)
|
||||||
|
{
|
||||||
|
float num7 = -1f;
|
||||||
|
ARLaneObject laneObject;
|
||||||
|
if (this.riderObjects.TryGetValue(rider.UserId, out laneObject))
|
||||||
|
{
|
||||||
|
if ((double)laneObject.Lane > (double)num4)
|
||||||
|
{
|
||||||
|
if (this.IsMainRider(rider))
|
||||||
|
{
|
||||||
|
laneObject.Lane = num4;
|
||||||
|
laneObject.DeltaLane = 0.0f;
|
||||||
|
this.UpdateRiderCurvature(laneObject, 0.0f, Time.deltaTime);
|
||||||
|
this.UpdateLaneChangingDirection(laneObject, 0.0f, Time.deltaTime);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
num7 = this.GetLane((float)rider.RouteDistance, modelRouteDistance);
|
||||||
|
if ((double)num7 > (double)maxLane)
|
||||||
|
{
|
||||||
|
if (this.IsMainRider(rider))
|
||||||
|
num7 = num4;
|
||||||
|
else
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
VisibleRiderItem visibleRiderItem = new VisibleRiderItem()
|
||||||
|
{
|
||||||
|
Rider = rider,
|
||||||
|
DeltaDistance = num6,
|
||||||
|
ModelDistance = modelRouteDistance,
|
||||||
|
Lane = num7
|
||||||
|
};
|
||||||
|
if ((double)num6 < 0.0)
|
||||||
|
visibleRiderItemList1.Add(visibleRiderItem);
|
||||||
|
else
|
||||||
|
visibleRiderItemList2.Add(visibleRiderItem);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
visibleRiderItemList1.Sort((Comparison<VisibleRiderItem>)((p1, p2) => p2.DeltaDistance.CompareTo(p1.DeltaDistance)));
|
||||||
|
visibleRiderItemList2.Sort((Comparison<VisibleRiderItem>)((p1, p2) => p1.DeltaDistance.CompareTo(p2.DeltaDistance)));
|
||||||
|
this.RemoveRidersOutside(visibleRiderItemList1, maxLane);
|
||||||
|
this.RemoveRidersOutside(visibleRiderItemList2, maxLane);
|
||||||
|
//if (this.GroupLeaderUserId > 0)
|
||||||
|
//{
|
||||||
|
// this.PrioritizeRider(visibleRiderItemList1, (Predicate<VisibleRiderItem>)(i => this.IsGroupLeader(i.Rider)));
|
||||||
|
// this.PrioritizeRider(visibleRiderItemList2, (Predicate<VisibleRiderItem>)(i => this.IsGroupLeader(i.Rider)));
|
||||||
|
//}
|
||||||
|
this.PrioritizeRider(visibleRiderItemList1, (Predicate<VisibleRiderItem>)(i => this.IsMainRider(i.Rider)));
|
||||||
|
this.PrioritizeRider(visibleRiderItemList2, (Predicate<VisibleRiderItem>)(i => this.IsMainRider(i.Rider)));
|
||||||
|
List<VisibleRiderItem> visibleRiderItemList3 = new List<VisibleRiderItem>();
|
||||||
|
if (!this.videoPlayer.IsRear)
|
||||||
|
{
|
||||||
|
int num8 = Mathf.Min(a2, visibleRiderItemList1.Count);
|
||||||
|
for (int index = 0; index < num8; ++index)
|
||||||
|
visibleRiderItemList3.Add(visibleRiderItemList1[index]);
|
||||||
|
int num9 = Mathf.Min(riderTitlesLimit - num8, visibleRiderItemList2.Count);
|
||||||
|
for (int index = 0; index < num9; ++index)
|
||||||
|
visibleRiderItemList3.Add(visibleRiderItemList2[index]);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
int num10 = Mathf.Min(a2, visibleRiderItemList2.Count);
|
||||||
|
for (int index = 0; index < num10; ++index)
|
||||||
|
visibleRiderItemList3.Add(visibleRiderItemList2[index]);
|
||||||
|
int num11 = Mathf.Min(riderTitlesLimit - num10, visibleRiderItemList1.Count);
|
||||||
|
for (int index = 0; index < num11; ++index)
|
||||||
|
visibleRiderItemList3.Add(visibleRiderItemList1[index]);
|
||||||
|
}
|
||||||
|
int num12 = 0;
|
||||||
|
this.visibleRiders.Clear();
|
||||||
|
foreach (VisibleRiderItem visibleRiderItem in visibleRiderItemList3)
|
||||||
|
{
|
||||||
|
var rider = visibleRiderItem.Rider;
|
||||||
|
float num13 = Mathf.Abs(visibleRiderItem.DeltaDistance);
|
||||||
|
if ((double)num13 < (double)visibilityModels - 5.0)
|
||||||
|
{
|
||||||
|
if (num12 < this.VisibleModelsLimit)
|
||||||
|
{
|
||||||
|
visibleRiderItem.ShowModel = true;
|
||||||
|
this.visibleRiders.Add(rider.UserId, visibleRiderItem);
|
||||||
|
++num12;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if ((double)num13 < (double)visibilityDistance - 5.0 && this.visibleRiders.Count < this.VisibleRiderTitlesLimit)
|
||||||
|
{
|
||||||
|
visibleRiderItem.ShowModel = false;
|
||||||
|
this.visibleRiders.Add(rider.UserId, visibleRiderItem);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this.VisibleModels = num12;
|
||||||
|
//if (this.SelectedPanorama == null || this.RouteVideo.Rider == null || this.panoramaRiders != null)
|
||||||
|
// return;
|
||||||
|
//this.panoramaRiders = new List<IRouteRider>();
|
||||||
|
//foreach (VisibleRiderItem visibleRiderItem in this.visibleRiders.Values)
|
||||||
|
// this.panoramaRiders.Add(visibleRiderItem.Rider);
|
||||||
|
//this.panoramaRidersPivotId = this.RouteVideo.Rider.Id;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void PrioritizeRider(
|
||||||
|
List<VisibleRiderItem> list,
|
||||||
|
Predicate<VisibleRiderItem> predicate)
|
||||||
|
{
|
||||||
|
int index = list.FindIndex(predicate);
|
||||||
|
if (index == -1)
|
||||||
|
return;
|
||||||
|
VisibleRiderItem visibleRiderItem = list[index];
|
||||||
|
list.RemoveAt(index);
|
||||||
|
list.Insert(0, visibleRiderItem);
|
||||||
|
}
|
||||||
|
private void RemoveRidersOutside(
|
||||||
|
List<VisibleRiderItem> sortedList,
|
||||||
|
float maxLane)
|
||||||
|
{
|
||||||
|
VisibleRiderItem visibleRiderItem = (VisibleRiderItem)null;
|
||||||
|
foreach (VisibleRiderItem sorted in sortedList)
|
||||||
|
{
|
||||||
|
//排除当前骑行的主人公和分区组长
|
||||||
|
if ((double)sorted.Lane != -1.0 && !this.IsMainRider(sorted.Rider))
|
||||||
|
{
|
||||||
|
if (visibleRiderItem == null)
|
||||||
|
{
|
||||||
|
visibleRiderItem = sorted;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
float routeDistance1 = (float)visibleRiderItem.Rider.RouteDistance;
|
||||||
|
float routeDistance2 = (float)sorted.Rider.RouteDistance;
|
||||||
|
float collisionParameter = ARLaneObjectsController.GetCollisionParameter(routeDistance1, routeDistance2, this.GetOvertakingThreshold(routeDistance1));
|
||||||
|
sorted.Lane += collisionParameter;
|
||||||
|
if ((double)sorted.Lane > (double)maxLane)
|
||||||
|
sorted.Lane = float.MaxValue;
|
||||||
|
else
|
||||||
|
visibleRiderItem = sorted;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
sortedList.RemoveAll((Predicate<VisibleRiderItem>)(i => (double)i.Lane == 3.4028234663852886E+38));
|
||||||
|
}
|
||||||
|
|
||||||
|
private bool IsMainRider(OnlineRiderModel rider) => rider.IsSelf;
|
||||||
|
|
||||||
//更新骑手的偏移角度
|
//更新骑手的偏移角度
|
||||||
private void UpdateRidersLean()
|
private void UpdateRidersLean()
|
||||||
{
|
{
|
||||||
@ -341,19 +712,19 @@ namespace Assets.AR
|
|||||||
// float t = this.GetValueViewAlpha(num1);
|
// float t = this.GetValueViewAlpha(num1);
|
||||||
// if ((double)t < 1.0 && (UnityEngine.Object)riderValueView != (UnityEngine.Object)null)
|
// if ((double)t < 1.0 && (UnityEngine.Object)riderValueView != (UnityEngine.Object)null)
|
||||||
// riderValueView.Alpha = t;
|
// riderValueView.Alpha = t;
|
||||||
// if (this.sportProfile == SportProfile.Running)
|
// //if (this.sportProfile == SportProfile.Running)
|
||||||
// {
|
// //{
|
||||||
// if ((UnityEngine.Object)riderValueView != (UnityEngine.Object)null)
|
// // if ((UnityEngine.Object)riderValueView != (UnityEngine.Object)null)
|
||||||
// riderValueView.Active = false;
|
// // riderValueView.Active = false;
|
||||||
// t = 0.0f;
|
// // t = 0.0f;
|
||||||
// }
|
// //}
|
||||||
// Vector3 vector3 = 5f * this.uiScale * Mathf.Max(0.1f, this.SelectedPanorama != null ? 1f : this.GetDistanceScale(num1));
|
// Vector3 vector3 = 5f * this.uiScale * Mathf.Max(0.1f, this.SelectedPanorama != null ? 1f : this.GetDistanceScale(num1));
|
||||||
// Quaternion rotation = this.UnityCamera.transform.rotation;
|
// Quaternion rotation = this.UnityCamera.transform.rotation;
|
||||||
// if (this.SelectedPanorama != null)
|
// //if (this.SelectedPanorama != null)
|
||||||
// {
|
// //{
|
||||||
// rotation = this.PanoramaCamera.transform.rotation;
|
// // rotation = this.PanoramaCamera.transform.rotation;
|
||||||
// }
|
// //}
|
||||||
// else
|
// //else
|
||||||
// {
|
// {
|
||||||
// if ((double)riderObject.Distance < (double)this.CameraDistance)
|
// if ((double)riderObject.Distance < (double)this.CameraDistance)
|
||||||
// rotation *= Quaternion.Euler(0.0f, 180f, 0.0f);
|
// rotation *= Quaternion.Euler(0.0f, 180f, 0.0f);
|
||||||
@ -377,5 +748,15 @@ namespace Assets.AR
|
|||||||
// }
|
// }
|
||||||
//}
|
//}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private class VisibleRiderItem
|
||||||
|
{
|
||||||
|
public OnlineRiderModel Rider;
|
||||||
|
public float ModelDistance;
|
||||||
|
public float DeltaDistance;
|
||||||
|
public bool ShowModel;
|
||||||
|
public float Lane;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -44,8 +44,6 @@ namespace Assets.AR
|
|||||||
|
|
||||||
protected virtual void Start()
|
protected virtual void Start()
|
||||||
{
|
{
|
||||||
this.SetupModels();
|
|
||||||
this.SetLayerRecursively(this.gameObject, 9);
|
|
||||||
this.animator.avatar = (Avatar)null;
|
this.animator.avatar = (Avatar)null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -54,9 +52,6 @@ namespace Assets.AR
|
|||||||
base.Update();
|
base.Update();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected abstract void SetupModels();
|
|
||||||
|
|
||||||
|
|
||||||
protected virtual void OnPause(bool paused)
|
protected virtual void OnPause(bool paused)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|||||||
@ -92,16 +92,15 @@ namespace Assets.AR
|
|||||||
protected override void Start()
|
protected override void Start()
|
||||||
{
|
{
|
||||||
base.Start();
|
base.Start();
|
||||||
this.PlanNextLook();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void Update()
|
protected override void Update()
|
||||||
{
|
{
|
||||||
if (this.route == null)
|
if (this.route == null)
|
||||||
return;
|
return;
|
||||||
this.UpdateDiffciulityLevel();
|
|
||||||
base.Update();
|
base.Update();
|
||||||
float num = this.Speed;
|
float num = this.Speed;
|
||||||
|
this.Paused = this.Speed == 0;
|
||||||
bool flag = this.Paused;
|
bool flag = this.Paused;
|
||||||
if (this.IsAtFinish)
|
if (this.IsAtFinish)
|
||||||
{
|
{
|
||||||
@ -175,42 +174,5 @@ namespace Assets.AR
|
|||||||
//this.wheelFront.transform.Rotate(Vector3.right, angle);
|
//this.wheelFront.transform.Rotate(Vector3.right, angle);
|
||||||
//this.wheelRear.transform.Rotate(Vector3.right, angle);
|
//this.wheelRear.transform.Rotate(Vector3.right, angle);
|
||||||
}
|
}
|
||||||
//设置模型
|
|
||||||
protected override void SetupModels()
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
private void PlanNextLook()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
//更新水平
|
|
||||||
private void UpdateDiffciulityLevel()
|
|
||||||
{
|
|
||||||
float num = this.PowerWinSum / 10f;
|
|
||||||
if ((double)Math.Abs(Time.time - this.lastPowerWinWrite) >= 1.0)
|
|
||||||
{
|
|
||||||
++this.lastPowerWinIndex;
|
|
||||||
this.lastPowerWinIndex %= 10;
|
|
||||||
this.PowerWinSum -= this.powerWindow[this.lastPowerWinIndex];
|
|
||||||
this.powerWindow[this.lastPowerWinIndex] = this.Power;
|
|
||||||
this.PowerWinSum += this.Power;
|
|
||||||
this.lastPowerWinWrite = Time.time;
|
|
||||||
num = this.PowerWinSum / 10f;
|
|
||||||
if ((double)this.Power > (double)num * 1.2000000476837158 && (double)this.Power / (double)this.Weight > 2.0)
|
|
||||||
++this.powerPeakSum;
|
|
||||||
else
|
|
||||||
this.powerPeakSum = 0;
|
|
||||||
}
|
|
||||||
if ((double)this.Power / (double)this.Weight > 8.0 || this.powerPeakSum > 2 || (double)this.Power > (double)num * 3.0 && (double)this.Power / (double)this.Weight > 2.0)
|
|
||||||
this.lastPowerPeak = Time.time;
|
|
||||||
if ((double)Math.Abs(Time.time - this.lastPowerPeak) < 2.0)
|
|
||||||
this.DifficultyLevel = 2;
|
|
||||||
else if ((double)this.Power / (double)this.Weight > 2.0)
|
|
||||||
this.DifficultyLevel = 1;
|
|
||||||
else
|
|
||||||
this.DifficultyLevel = 0;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -3,21 +3,9 @@
|
|||||||
public interface IRider
|
public interface IRider
|
||||||
{
|
{
|
||||||
int UserId { get;}
|
int UserId { get;}
|
||||||
string UserName { get; }
|
double StartDistance { get; set; }
|
||||||
double Weight { get;}
|
double OnlineSpeed { get; set; }
|
||||||
double BicycleWeight { get;}
|
double PreDistance { get; set; }
|
||||||
double Speed { get;}
|
double EndDistance { get; set; }
|
||||||
double Power { get; }
|
|
||||||
double Elevation { get; }
|
|
||||||
double Cadance { get; }
|
|
||||||
double Wkg { get; }
|
|
||||||
int? HeartRate { get; }
|
|
||||||
double TotalDistance { get; }
|
|
||||||
double CurrentSlope { get; }
|
|
||||||
double CurrentSlopeDistance { get; }
|
|
||||||
double NextSlope { get; }
|
|
||||||
double NextSlopeDistance { get; }
|
|
||||||
double Distance { get; }
|
|
||||||
double TotalClimb { get; }
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
@ -1,7 +0,0 @@
|
|||||||
fileFormatVersion: 2
|
|
||||||
guid: 341c9bc6edccecd498b3d3b74b08f3b9
|
|
||||||
TextScriptImporter:
|
|
||||||
externalObjects: {}
|
|
||||||
userData:
|
|
||||||
assetBundleName:
|
|
||||||
assetBundleVariant:
|
|
||||||
File diff suppressed because one or more lines are too long
@ -1,7 +0,0 @@
|
|||||||
fileFormatVersion: 2
|
|
||||||
guid: f2e696010ab476541b5d4458dbc3b21e
|
|
||||||
TextScriptImporter:
|
|
||||||
externalObjects: {}
|
|
||||||
userData:
|
|
||||||
assetBundleName:
|
|
||||||
assetBundleVariant:
|
|
||||||
File diff suppressed because one or more lines are too long
@ -1,7 +0,0 @@
|
|||||||
fileFormatVersion: 2
|
|
||||||
guid: 329bdb26604fbd6499707e6457df4921
|
|
||||||
TextScriptImporter:
|
|
||||||
externalObjects: {}
|
|
||||||
userData:
|
|
||||||
assetBundleName:
|
|
||||||
assetBundleVariant:
|
|
||||||
File diff suppressed because it is too large
Load Diff
@ -1,7 +0,0 @@
|
|||||||
fileFormatVersion: 2
|
|
||||||
guid: 874a748024ffda74a841855f69348615
|
|
||||||
TextScriptImporter:
|
|
||||||
externalObjects: {}
|
|
||||||
userData:
|
|
||||||
assetBundleName:
|
|
||||||
assetBundleVariant:
|
|
||||||
File diff suppressed because one or more lines are too long
@ -1,7 +0,0 @@
|
|||||||
fileFormatVersion: 2
|
|
||||||
guid: 5a1f568492ae0ed498af496a6a4fb796
|
|
||||||
TextScriptImporter:
|
|
||||||
externalObjects: {}
|
|
||||||
userData:
|
|
||||||
assetBundleName:
|
|
||||||
assetBundleVariant:
|
|
||||||
File diff suppressed because one or more lines are too long
@ -1,7 +0,0 @@
|
|||||||
fileFormatVersion: 2
|
|
||||||
guid: 8553de40c8498114ebee6f2d9d3e8641
|
|
||||||
TextScriptImporter:
|
|
||||||
externalObjects: {}
|
|
||||||
userData:
|
|
||||||
assetBundleName:
|
|
||||||
assetBundleVariant:
|
|
||||||
@ -661,92 +661,6 @@ CanvasRenderer:
|
|||||||
m_PrefabAsset: {fileID: 0}
|
m_PrefabAsset: {fileID: 0}
|
||||||
m_GameObject: {fileID: 313551262}
|
m_GameObject: {fileID: 313551262}
|
||||||
m_CullTransparentMesh: 0
|
m_CullTransparentMesh: 0
|
||||||
--- !u!21 &413758122
|
|
||||||
Material:
|
|
||||||
serializedVersion: 6
|
|
||||||
m_ObjectHideFlags: 0
|
|
||||||
m_CorrespondingSourceObject: {fileID: 0}
|
|
||||||
m_PrefabInstance: {fileID: 0}
|
|
||||||
m_PrefabAsset: {fileID: 0}
|
|
||||||
m_Name: RoundedCornersTextureMaterial(Clone)
|
|
||||||
m_Shader: {fileID: 4800000, guid: 0bd2ec5d73751e34a814274a454bec41, type: 3}
|
|
||||||
m_ShaderKeywords:
|
|
||||||
m_LightmapFlags: 4
|
|
||||||
m_EnableInstancingVariants: 0
|
|
||||||
m_DoubleSidedGI: 0
|
|
||||||
m_CustomRenderQueue: -1
|
|
||||||
stringTagMap: {}
|
|
||||||
disabledShaderPasses: []
|
|
||||||
m_SavedProperties:
|
|
||||||
serializedVersion: 3
|
|
||||||
m_TexEnvs:
|
|
||||||
- _BumpMap:
|
|
||||||
m_Texture: {fileID: 0}
|
|
||||||
m_Scale: {x: 1, y: 1}
|
|
||||||
m_Offset: {x: 0, y: 0}
|
|
||||||
- _DetailAlbedoMap:
|
|
||||||
m_Texture: {fileID: 0}
|
|
||||||
m_Scale: {x: 1, y: 1}
|
|
||||||
m_Offset: {x: 0, y: 0}
|
|
||||||
- _DetailMask:
|
|
||||||
m_Texture: {fileID: 0}
|
|
||||||
m_Scale: {x: 1, y: 1}
|
|
||||||
m_Offset: {x: 0, y: 0}
|
|
||||||
- _DetailNormalMap:
|
|
||||||
m_Texture: {fileID: 0}
|
|
||||||
m_Scale: {x: 1, y: 1}
|
|
||||||
m_Offset: {x: 0, y: 0}
|
|
||||||
- _EmissionMap:
|
|
||||||
m_Texture: {fileID: 0}
|
|
||||||
m_Scale: {x: 1, y: 1}
|
|
||||||
m_Offset: {x: 0, y: 0}
|
|
||||||
- _MainTex:
|
|
||||||
m_Texture: {fileID: 0}
|
|
||||||
m_Scale: {x: 1, y: 1}
|
|
||||||
m_Offset: {x: 0, y: 0}
|
|
||||||
- _MetallicGlossMap:
|
|
||||||
m_Texture: {fileID: 0}
|
|
||||||
m_Scale: {x: 1, y: 1}
|
|
||||||
m_Offset: {x: 0, y: 0}
|
|
||||||
- _OcclusionMap:
|
|
||||||
m_Texture: {fileID: 0}
|
|
||||||
m_Scale: {x: 1, y: 1}
|
|
||||||
m_Offset: {x: 0, y: 0}
|
|
||||||
- _ParallaxMap:
|
|
||||||
m_Texture: {fileID: 0}
|
|
||||||
m_Scale: {x: 1, y: 1}
|
|
||||||
m_Offset: {x: 0, y: 0}
|
|
||||||
m_Floats:
|
|
||||||
- _BumpScale: 1
|
|
||||||
- _ColorMask: 15
|
|
||||||
- _Cutoff: 0.5
|
|
||||||
- _DetailNormalMapScale: 1
|
|
||||||
- _DstBlend: 0
|
|
||||||
- _GlossMapScale: 1
|
|
||||||
- _Glossiness: 0.5
|
|
||||||
- _GlossyReflections: 1
|
|
||||||
- _Height: 50
|
|
||||||
- _Metallic: 0
|
|
||||||
- _Mode: 0
|
|
||||||
- _OcclusionStrength: 1
|
|
||||||
- _Parallax: 0.02
|
|
||||||
- _Radius: 15
|
|
||||||
- _SmoothnessTextureChannel: 0
|
|
||||||
- _SpecularHighlights: 1
|
|
||||||
- _SrcBlend: 1
|
|
||||||
- _Stencil: 0
|
|
||||||
- _StencilComp: 8
|
|
||||||
- _StencilOp: 0
|
|
||||||
- _StencilReadMask: 255
|
|
||||||
- _StencilWriteMask: 255
|
|
||||||
- _UVSec: 0
|
|
||||||
- _UseUIAlphaClip: 0
|
|
||||||
- _Width: 50
|
|
||||||
- _ZWrite: 1
|
|
||||||
m_Colors:
|
|
||||||
- _Color: {r: 1, g: 1, b: 1, a: 1}
|
|
||||||
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
|
|
||||||
- _WidthHeightRadius: {r: 446, g: 70, b: 70, a: 0}
|
|
||||||
--- !u!1 &684809389
|
--- !u!1 &684809389
|
||||||
GameObject:
|
GameObject:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
@ -992,7 +906,7 @@ Camera:
|
|||||||
m_Depth: -1
|
m_Depth: -1
|
||||||
m_CullingMask:
|
m_CullingMask:
|
||||||
serializedVersion: 2
|
serializedVersion: 2
|
||||||
m_Bits: 4294967295
|
m_Bits: 1
|
||||||
m_RenderingPath: -1
|
m_RenderingPath: -1
|
||||||
m_TargetTexture: {fileID: 0}
|
m_TargetTexture: {fileID: 0}
|
||||||
m_TargetDisplay: 0
|
m_TargetDisplay: 0
|
||||||
@ -1537,92 +1451,6 @@ Transform:
|
|||||||
m_Father: {fileID: 0}
|
m_Father: {fileID: 0}
|
||||||
m_RootOrder: 6
|
m_RootOrder: 6
|
||||||
m_LocalEulerAnglesHint: {x: 0, y: -3.896, z: 0}
|
m_LocalEulerAnglesHint: {x: 0, y: -3.896, z: 0}
|
||||||
--- !u!21 &1038216837
|
|
||||||
Material:
|
|
||||||
serializedVersion: 6
|
|
||||||
m_ObjectHideFlags: 0
|
|
||||||
m_CorrespondingSourceObject: {fileID: 0}
|
|
||||||
m_PrefabInstance: {fileID: 0}
|
|
||||||
m_PrefabAsset: {fileID: 0}
|
|
||||||
m_Name: RoundedCornersTextureMaterial(Clone)
|
|
||||||
m_Shader: {fileID: 4800000, guid: 0bd2ec5d73751e34a814274a454bec41, type: 3}
|
|
||||||
m_ShaderKeywords:
|
|
||||||
m_LightmapFlags: 4
|
|
||||||
m_EnableInstancingVariants: 0
|
|
||||||
m_DoubleSidedGI: 0
|
|
||||||
m_CustomRenderQueue: -1
|
|
||||||
stringTagMap: {}
|
|
||||||
disabledShaderPasses: []
|
|
||||||
m_SavedProperties:
|
|
||||||
serializedVersion: 3
|
|
||||||
m_TexEnvs:
|
|
||||||
- _BumpMap:
|
|
||||||
m_Texture: {fileID: 0}
|
|
||||||
m_Scale: {x: 1, y: 1}
|
|
||||||
m_Offset: {x: 0, y: 0}
|
|
||||||
- _DetailAlbedoMap:
|
|
||||||
m_Texture: {fileID: 0}
|
|
||||||
m_Scale: {x: 1, y: 1}
|
|
||||||
m_Offset: {x: 0, y: 0}
|
|
||||||
- _DetailMask:
|
|
||||||
m_Texture: {fileID: 0}
|
|
||||||
m_Scale: {x: 1, y: 1}
|
|
||||||
m_Offset: {x: 0, y: 0}
|
|
||||||
- _DetailNormalMap:
|
|
||||||
m_Texture: {fileID: 0}
|
|
||||||
m_Scale: {x: 1, y: 1}
|
|
||||||
m_Offset: {x: 0, y: 0}
|
|
||||||
- _EmissionMap:
|
|
||||||
m_Texture: {fileID: 0}
|
|
||||||
m_Scale: {x: 1, y: 1}
|
|
||||||
m_Offset: {x: 0, y: 0}
|
|
||||||
- _MainTex:
|
|
||||||
m_Texture: {fileID: 0}
|
|
||||||
m_Scale: {x: 1, y: 1}
|
|
||||||
m_Offset: {x: 0, y: 0}
|
|
||||||
- _MetallicGlossMap:
|
|
||||||
m_Texture: {fileID: 0}
|
|
||||||
m_Scale: {x: 1, y: 1}
|
|
||||||
m_Offset: {x: 0, y: 0}
|
|
||||||
- _OcclusionMap:
|
|
||||||
m_Texture: {fileID: 0}
|
|
||||||
m_Scale: {x: 1, y: 1}
|
|
||||||
m_Offset: {x: 0, y: 0}
|
|
||||||
- _ParallaxMap:
|
|
||||||
m_Texture: {fileID: 0}
|
|
||||||
m_Scale: {x: 1, y: 1}
|
|
||||||
m_Offset: {x: 0, y: 0}
|
|
||||||
m_Floats:
|
|
||||||
- _BumpScale: 1
|
|
||||||
- _ColorMask: 15
|
|
||||||
- _Cutoff: 0.5
|
|
||||||
- _DetailNormalMapScale: 1
|
|
||||||
- _DstBlend: 0
|
|
||||||
- _GlossMapScale: 1
|
|
||||||
- _Glossiness: 0.5
|
|
||||||
- _GlossyReflections: 1
|
|
||||||
- _Height: 50
|
|
||||||
- _Metallic: 0
|
|
||||||
- _Mode: 0
|
|
||||||
- _OcclusionStrength: 1
|
|
||||||
- _Parallax: 0.02
|
|
||||||
- _Radius: 15
|
|
||||||
- _SmoothnessTextureChannel: 0
|
|
||||||
- _SpecularHighlights: 1
|
|
||||||
- _SrcBlend: 1
|
|
||||||
- _Stencil: 0
|
|
||||||
- _StencilComp: 8
|
|
||||||
- _StencilOp: 0
|
|
||||||
- _StencilReadMask: 255
|
|
||||||
- _StencilWriteMask: 255
|
|
||||||
- _UVSec: 0
|
|
||||||
- _UseUIAlphaClip: 0
|
|
||||||
- _Width: 50
|
|
||||||
- _ZWrite: 1
|
|
||||||
m_Colors:
|
|
||||||
- _Color: {r: 1, g: 1, b: 1, a: 1}
|
|
||||||
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
|
|
||||||
- _WidthHeightRadius: {r: 50, g: 50, b: 50, a: 0}
|
|
||||||
--- !u!1 &1378474435
|
--- !u!1 &1378474435
|
||||||
GameObject:
|
GameObject:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
@ -1925,6 +1753,92 @@ RectTransform:
|
|||||||
type: 3}
|
type: 3}
|
||||||
m_PrefabInstance: {fileID: 1426339558}
|
m_PrefabInstance: {fileID: 1426339558}
|
||||||
m_PrefabAsset: {fileID: 0}
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
--- !u!21 &1443577897
|
||||||
|
Material:
|
||||||
|
serializedVersion: 6
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_Name: RoundedCornersTextureMaterial(Clone)
|
||||||
|
m_Shader: {fileID: 4800000, guid: 0bd2ec5d73751e34a814274a454bec41, type: 3}
|
||||||
|
m_ShaderKeywords:
|
||||||
|
m_LightmapFlags: 4
|
||||||
|
m_EnableInstancingVariants: 0
|
||||||
|
m_DoubleSidedGI: 0
|
||||||
|
m_CustomRenderQueue: -1
|
||||||
|
stringTagMap: {}
|
||||||
|
disabledShaderPasses: []
|
||||||
|
m_SavedProperties:
|
||||||
|
serializedVersion: 3
|
||||||
|
m_TexEnvs:
|
||||||
|
- _BumpMap:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _DetailAlbedoMap:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _DetailMask:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _DetailNormalMap:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _EmissionMap:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _MainTex:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _MetallicGlossMap:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _OcclusionMap:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _ParallaxMap:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
m_Floats:
|
||||||
|
- _BumpScale: 1
|
||||||
|
- _ColorMask: 15
|
||||||
|
- _Cutoff: 0.5
|
||||||
|
- _DetailNormalMapScale: 1
|
||||||
|
- _DstBlend: 0
|
||||||
|
- _GlossMapScale: 1
|
||||||
|
- _Glossiness: 0.5
|
||||||
|
- _GlossyReflections: 1
|
||||||
|
- _Height: 50
|
||||||
|
- _Metallic: 0
|
||||||
|
- _Mode: 0
|
||||||
|
- _OcclusionStrength: 1
|
||||||
|
- _Parallax: 0.02
|
||||||
|
- _Radius: 15
|
||||||
|
- _SmoothnessTextureChannel: 0
|
||||||
|
- _SpecularHighlights: 1
|
||||||
|
- _SrcBlend: 1
|
||||||
|
- _Stencil: 0
|
||||||
|
- _StencilComp: 8
|
||||||
|
- _StencilOp: 0
|
||||||
|
- _StencilReadMask: 255
|
||||||
|
- _StencilWriteMask: 255
|
||||||
|
- _UVSec: 0
|
||||||
|
- _UseUIAlphaClip: 0
|
||||||
|
- _Width: 50
|
||||||
|
- _ZWrite: 1
|
||||||
|
m_Colors:
|
||||||
|
- _Color: {r: 1, g: 1, b: 1, a: 1}
|
||||||
|
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
|
||||||
|
- _WidthHeightRadius: {r: 446, g: 70, b: 70, a: 0}
|
||||||
--- !u!1 &1565405865 stripped
|
--- !u!1 &1565405865 stripped
|
||||||
GameObject:
|
GameObject:
|
||||||
m_CorrespondingSourceObject: {fileID: 3342506722007875022, guid: 10e54cf0bec9cbc4b94d1d40e437f87c,
|
m_CorrespondingSourceObject: {fileID: 3342506722007875022, guid: 10e54cf0bec9cbc4b94d1d40e437f87c,
|
||||||
@ -2107,6 +2021,92 @@ CanvasRenderer:
|
|||||||
m_PrefabAsset: {fileID: 0}
|
m_PrefabAsset: {fileID: 0}
|
||||||
m_GameObject: {fileID: 1726804851}
|
m_GameObject: {fileID: 1726804851}
|
||||||
m_CullTransparentMesh: 0
|
m_CullTransparentMesh: 0
|
||||||
|
--- !u!21 &1888707701
|
||||||
|
Material:
|
||||||
|
serializedVersion: 6
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_Name: RoundedCornersTextureMaterial(Clone)
|
||||||
|
m_Shader: {fileID: 4800000, guid: 0bd2ec5d73751e34a814274a454bec41, type: 3}
|
||||||
|
m_ShaderKeywords:
|
||||||
|
m_LightmapFlags: 4
|
||||||
|
m_EnableInstancingVariants: 0
|
||||||
|
m_DoubleSidedGI: 0
|
||||||
|
m_CustomRenderQueue: -1
|
||||||
|
stringTagMap: {}
|
||||||
|
disabledShaderPasses: []
|
||||||
|
m_SavedProperties:
|
||||||
|
serializedVersion: 3
|
||||||
|
m_TexEnvs:
|
||||||
|
- _BumpMap:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _DetailAlbedoMap:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _DetailMask:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _DetailNormalMap:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _EmissionMap:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _MainTex:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _MetallicGlossMap:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _OcclusionMap:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _ParallaxMap:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
m_Floats:
|
||||||
|
- _BumpScale: 1
|
||||||
|
- _ColorMask: 15
|
||||||
|
- _Cutoff: 0.5
|
||||||
|
- _DetailNormalMapScale: 1
|
||||||
|
- _DstBlend: 0
|
||||||
|
- _GlossMapScale: 1
|
||||||
|
- _Glossiness: 0.5
|
||||||
|
- _GlossyReflections: 1
|
||||||
|
- _Height: 50
|
||||||
|
- _Metallic: 0
|
||||||
|
- _Mode: 0
|
||||||
|
- _OcclusionStrength: 1
|
||||||
|
- _Parallax: 0.02
|
||||||
|
- _Radius: 15
|
||||||
|
- _SmoothnessTextureChannel: 0
|
||||||
|
- _SpecularHighlights: 1
|
||||||
|
- _SrcBlend: 1
|
||||||
|
- _Stencil: 0
|
||||||
|
- _StencilComp: 8
|
||||||
|
- _StencilOp: 0
|
||||||
|
- _StencilReadMask: 255
|
||||||
|
- _StencilWriteMask: 255
|
||||||
|
- _UVSec: 0
|
||||||
|
- _UseUIAlphaClip: 0
|
||||||
|
- _Width: 50
|
||||||
|
- _ZWrite: 1
|
||||||
|
m_Colors:
|
||||||
|
- _Color: {r: 1, g: 1, b: 1, a: 1}
|
||||||
|
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
|
||||||
|
- _WidthHeightRadius: {r: 50, g: 50, b: 50, a: 0}
|
||||||
--- !u!1 &1899149616
|
--- !u!1 &1899149616
|
||||||
GameObject:
|
GameObject:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
108
Assets/Scripts/Scenes/Ride/Model/CyclingModels/ARSingleModel.cs
Normal file
108
Assets/Scripts/Scenes/Ride/Model/CyclingModels/ARSingleModel.cs
Normal file
@ -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>
|
/// <param name="data"></param>
|
||||||
public virtual void Run(TargetData targetData)
|
public virtual void Run(TargetData targetData)
|
||||||
{
|
{
|
||||||
//将当前用户的位置发送到udf服务
|
SendUserPositionToServer();//将当前用户的位置发送到udf服务
|
||||||
SendUserPositionToServer();
|
BeforeRunAfterPakcData();
|
||||||
//OutModel outData = GetSelfTargetData(targetData);
|
|
||||||
BeforeRunAfterPakcData();//执行前的函数
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// =>发送用户的位置信息到服务端
|
/// =>发送用户的位置信息到服务端
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private void SendUserPositionToServer()
|
protected virtual void SendUserPositionToServer()
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@ -131,7 +129,6 @@ namespace Assets.Scenes.Ride.Scripts.Model.CyclingModels
|
|||||||
protected double SpeedToDistance(double speed)
|
protected double SpeedToDistance(double speed)
|
||||||
{
|
{
|
||||||
return Math.Round(speed / 3600, 5, MidpointRounding.AwayFromZero);
|
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)
|
public override void Run(TargetData targetData)
|
||||||
{
|
{
|
||||||
#region 获取当前路线在线用户
|
#region 获取当前路线在线用户
|
||||||
riders.RemoveAll(r => r.IsSelf == false);
|
riders.Clear();
|
||||||
var onlineUsers = MapUDPService.GetOnlineUsers(recorderData.CurrentRoute.RouteInstance.Id, recorderData.RoomId).Where(d => d.IsSelf == false)
|
var onlineUsers = MapUDPService.GetOnlineUsers(recorderData.CurrentRoute.RouteInstance.Id, recorderData.RoomId).ToList();
|
||||||
.ToList();
|
|
||||||
foreach (var item in onlineUsers)
|
foreach (var item in onlineUsers)
|
||||||
{
|
{
|
||||||
riders.Add(new OnlineRiderModel()
|
riders.Add(new OnlineRiderModel()
|
||||||
|
|||||||
@ -47,6 +47,14 @@ namespace Assets.Scenes.Ride.Scripts.Model
|
|||||||
/// 最后骑行的距离
|
/// 最后骑行的距离
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public double EndDistance { get; set; }
|
public double EndDistance { get; set; }
|
||||||
|
|
||||||
|
public double RouteDistance
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return this.EndDistance * 1000;
|
||||||
|
}
|
||||||
|
}
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 是否是当前登陆人
|
/// 是否是当前登陆人
|
||||||
/// </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 abstract class AbstractVideoPlayer : MonoBehaviour, IRider
|
||||||
{
|
{
|
||||||
|
public double Diff { get;set; }
|
||||||
|
protected int frames;
|
||||||
|
protected int currentFrame { get; set; }
|
||||||
|
protected double preTime;
|
||||||
protected Animator animator;
|
protected Animator animator;
|
||||||
public GameObject head { get; set; }
|
public GameObject head { get; set; }
|
||||||
protected Image ftpImage { get; set; }
|
protected Image ftpImage { get; set; }
|
||||||
@ -41,35 +45,23 @@ namespace Assets.Scripts.Scenes.VideoRide
|
|||||||
public int currentIndex;
|
public int currentIndex;
|
||||||
public float bearing = 0f;
|
public float bearing = 0f;
|
||||||
protected MapDataModel mapData;
|
protected MapDataModel mapData;
|
||||||
private float timer = 1f;
|
private float timer = 0f;
|
||||||
protected bool start = true;
|
protected bool start = true;
|
||||||
protected Sequence sequence;
|
protected Sequence sequence;
|
||||||
protected VideoGameManager manager { get; set; }
|
protected VideoGameManager manager { get; set; }
|
||||||
private Camera camera { get; set; }
|
|
||||||
float currenPlayerHeight;
|
float currenPlayerHeight;
|
||||||
Transform bone_bottle_2 { get; set; }
|
Transform bone_bottle_2 { get; set; }
|
||||||
Vector3 current { get; set; }
|
public double Speed { get; set; }
|
||||||
Vector3 forward { get; set; }
|
public double StartDistance { get; set; }
|
||||||
public double Weight { get => this.weight; }
|
public double PreDistance { get; set; }
|
||||||
public double BicycleWeight { get => this.bicycleWeight; }
|
public double EndDistance { get; set; }
|
||||||
public double Speed { get => this.speed; }
|
public double OnlineSpeed { get; set; }
|
||||||
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 int UserId => this.userId;
|
public int UserId => this.userId;
|
||||||
|
|
||||||
public string UserName => this.userName;
|
public string UserName => this.userName;
|
||||||
|
|
||||||
|
public bool IsStart = false;
|
||||||
|
|
||||||
protected virtual void Start()
|
protected virtual void Start()
|
||||||
{
|
{
|
||||||
animator = GetComponent<Animator>();
|
animator = GetComponent<Animator>();
|
||||||
@ -84,36 +76,33 @@ namespace Assets.Scripts.Scenes.VideoRide
|
|||||||
{
|
{
|
||||||
animator.Play("idle");
|
animator.Play("idle");
|
||||||
}
|
}
|
||||||
camera = Camera.main;
|
|
||||||
//bone_bottle_2
|
|
||||||
bone_bottle_2 = transform.Find("bone_cable_20");
|
bone_bottle_2 = transform.Find("bone_cable_20");
|
||||||
//var config = manager.mockDirection;
|
|
||||||
//pre = config[0];
|
|
||||||
//next = config[0];
|
|
||||||
}
|
}
|
||||||
protected virtual void Update()
|
protected virtual void Update()
|
||||||
{
|
{
|
||||||
|
|
||||||
timer -= Time.deltaTime;
|
timer -= Time.deltaTime;
|
||||||
CreateHeadImage();
|
CreateHeadImage();
|
||||||
//Turn();
|
|
||||||
|
|
||||||
|
|
||||||
while (timer <= 0)
|
while (timer <= 0)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
ComputeNextSlope();//计算下一个坡度
|
ComputeNextSlope();//计算下一个坡度
|
||||||
|
|
||||||
if (GetStart())
|
if (manager.IsStart())
|
||||||
{
|
{
|
||||||
ticks++;
|
ticks++;
|
||||||
ComputePlayer();//计算人物属性
|
ComputePlayer();//计算人物属性
|
||||||
Forward();
|
Forward();
|
||||||
ComputeRecord();
|
ComputeRecord();
|
||||||
ComputeVideo();
|
ComputeVideo();
|
||||||
|
ComputeAnimator();//控制动画
|
||||||
}
|
}
|
||||||
ComputeAnimator();//控制动画
|
else
|
||||||
|
{
|
||||||
|
animator.Play("idle");
|
||||||
|
}
|
||||||
|
|
||||||
timer += 1f;
|
timer += 1f;
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
@ -124,10 +113,6 @@ namespace Assets.Scripts.Scenes.VideoRide
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
protected virtual bool GetStart()
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
//动画状态机
|
//动画状态机
|
||||||
protected virtual void ComputeAnimator()
|
protected virtual void ComputeAnimator()
|
||||||
{
|
{
|
||||||
@ -158,7 +143,6 @@ namespace Assets.Scripts.Scenes.VideoRide
|
|||||||
{
|
{
|
||||||
return manager.GetCurrentFrame();
|
return manager.GetCurrentFrame();
|
||||||
}
|
}
|
||||||
protected float t { get; set; }
|
|
||||||
protected Vector3 currentRotation;
|
protected Vector3 currentRotation;
|
||||||
//计算人物当前属性
|
//计算人物当前属性
|
||||||
protected virtual void ComputePlayer()
|
protected virtual void ComputePlayer()
|
||||||
@ -281,6 +265,10 @@ namespace Assets.Scripts.Scenes.VideoRide
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
private void OnDisable()
|
||||||
|
{
|
||||||
|
head?.SetActive(false);
|
||||||
|
}
|
||||||
//显示人物海拔图的头像
|
//显示人物海拔图的头像
|
||||||
protected virtual void CreateHeadImage()
|
protected virtual void CreateHeadImage()
|
||||||
{
|
{
|
||||||
@ -314,5 +302,12 @@ namespace Assets.Scripts.Scenes.VideoRide
|
|||||||
head?.Destroy();
|
head?.Destroy();
|
||||||
gameObject.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 class OnlineVideoPlayer : AbstractVideoPlayer
|
||||||
{
|
{
|
||||||
public double diff;
|
|
||||||
public int frames;
|
|
||||||
|
|
||||||
protected override void Start()
|
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()
|
protected override void ComputeAnimator()
|
||||||
{
|
{
|
||||||
base.ComputeAnimator();
|
base.ComputeAnimator();
|
||||||
@ -40,13 +36,11 @@ namespace Assets.Scripts.Scenes.VideoRide
|
|||||||
protected override void CreateHeadImage()
|
protected override void CreateHeadImage()
|
||||||
{
|
{
|
||||||
base.CreateHeadImage();
|
base.CreateHeadImage();
|
||||||
if (diff < 0)
|
if (Diff < 0)
|
||||||
((RectTransform)head.transform).anchoredPosition = new Vector2(((RectTransform)head.transform).anchoredPosition.x, -800f);
|
((RectTransform)head.transform).anchoredPosition = new Vector2(((RectTransform)head.transform).anchoredPosition.x, -800f);
|
||||||
}
|
}
|
||||||
|
|
||||||
private double preTime;
|
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)
|
||||||
//设置当前玩家属性
|
|
||||||
public void SetPlayer(string name, double distance, double totalDistance, double cadance,double heartRate, double wkg, int userId,double power,double currentPlayerDistance,int frame)
|
|
||||||
{
|
{
|
||||||
if (manager == null)
|
if (manager == null)
|
||||||
{
|
{
|
||||||
@ -57,13 +51,17 @@ namespace Assets.Scripts.Scenes.VideoRide
|
|||||||
this.wkg = wkg;
|
this.wkg = wkg;
|
||||||
this.userName = name;
|
this.userName = name;
|
||||||
this.cadance = cadance;
|
this.cadance = cadance;
|
||||||
this.totalDistance = totalDistance;
|
this.totalDistance = endDistance;
|
||||||
this.heartRate = (int?)heartRate;
|
this.heartRate = (int?)heartRate;
|
||||||
this.userId = userId;
|
this.userId = userId;
|
||||||
this.power = power;
|
this.power = power;
|
||||||
this.speed = distance * 3600;
|
this.speed = speed;
|
||||||
this.diff = totalDistance - currentPlayerDistance;
|
this.Speed = speed/3.6;
|
||||||
|
this.Diff = endDistance - currentPlayerDistance;
|
||||||
this.currentFrame = frame;
|
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 bool isStart { get; set; }
|
||||||
private Route route { get; set; }
|
private Route route { get; set; }
|
||||||
public MapRoute mapRoute { get; set; }
|
public MapRoute mapRoute { get; set; }
|
||||||
public RouteResultParam selectParamModel;
|
public RouteResultParam selectParamModel { get; set; }
|
||||||
public RouteResult routeResult;
|
public RouteResult routeResult;
|
||||||
public string recordId { get; set; }
|
public string recordId { get; set; }
|
||||||
public DateTime startTime { get; set; }
|
public DateTime startTime { get; set; }
|
||||||
@ -115,6 +115,7 @@ namespace Assets.Scripts.Scenes.VideoRide
|
|||||||
RouteId = routeId
|
RouteId = routeId
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
Debug.Log("start");
|
||||||
endDistance = 0;
|
endDistance = 0;
|
||||||
videoLoading = FindObjectOfType<VideoLoading>();
|
videoLoading = FindObjectOfType<VideoLoading>();
|
||||||
}
|
}
|
||||||
@ -158,7 +159,7 @@ namespace Assets.Scripts.Scenes.VideoRide
|
|||||||
return rankingList;
|
return rankingList;
|
||||||
}
|
}
|
||||||
|
|
||||||
List<AbstractVideoPlayer> visibleRiders = new List<AbstractVideoPlayer>();//当前线路上的人
|
public List<AbstractVideoPlayer> visibleRiders = new List<AbstractVideoPlayer>();//当前线路上的人
|
||||||
private const int limits = 5;//在线的其他人数
|
private const int limits = 5;//在线的其他人数
|
||||||
private double MaxVisibleDistance = 200d;//最大显示距离
|
private double MaxVisibleDistance = 200d;//最大显示距离
|
||||||
//创建当前线路其他选手
|
//创建当前线路其他选手
|
||||||
@ -166,11 +167,15 @@ namespace Assets.Scripts.Scenes.VideoRide
|
|||||||
{
|
{
|
||||||
if (list == null || list.Count == 0)
|
if (list == null || list.Count == 0)
|
||||||
{
|
{
|
||||||
|
var currentList = FindObjectsOfType<RiderRenderer>();
|
||||||
|
foreach (var item in currentList)
|
||||||
|
{
|
||||||
|
item.Speed = 0;
|
||||||
|
item.Paused = true;
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
CreateCurrentPlayer(list);//如果是观察者模式创建观察主人工
|
var trainController = GetComponent<ARTrainingController>();
|
||||||
var onlinelist = MapUDPService.GetOnlineUsers(App.RouteIdParam);//最新列表
|
|
||||||
var currentPlayerInfo = onlinelist.Where(c => c.Id == CurrentPlayer.UserId).FirstOrDefault();
|
|
||||||
//移除退出的选手
|
//移除退出的选手
|
||||||
var players = FindObjectsOfType<OnlineVideoPlayer>();
|
var players = FindObjectsOfType<OnlineVideoPlayer>();
|
||||||
foreach (var item in players)
|
foreach (var item in players)
|
||||||
@ -180,11 +185,11 @@ namespace Assets.Scripts.Scenes.VideoRide
|
|||||||
{
|
{
|
||||||
rideObjs.Remove(item);
|
rideObjs.Remove(item);
|
||||||
visibleRiders.Remove(item);
|
visibleRiders.Remove(item);
|
||||||
//item.Destroy();//TODO:
|
//trainController.RemoveRider(item.UserId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
var currentPlayerInfo = list.Where(c => c.IsSelf).FirstOrDefault();
|
||||||
var needUpdateList = list.Where(c=>Math.Abs(c.EndDistance-CurrentPlayer.totalDistance)*1000 <= MaxVisibleDistance).Take(limits).ToList();
|
var needUpdateList = list.OrderByDescending(c=>c.IsSelf).ToList();
|
||||||
foreach (var item in needUpdateList)
|
foreach (var item in needUpdateList)
|
||||||
{
|
{
|
||||||
var onlineRider = item as OnlineRiderModel;
|
var onlineRider = item as OnlineRiderModel;
|
||||||
@ -192,17 +197,18 @@ namespace Assets.Scripts.Scenes.VideoRide
|
|||||||
//更新
|
//更新
|
||||||
if (visibleItem != null)
|
if (visibleItem != null)
|
||||||
{
|
{
|
||||||
var online = visibleItem as OnlineVideoPlayer;
|
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);
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
else
|
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;
|
GameObject obj = null;
|
||||||
if (Math.Abs(diff * 1000) <= MaxVisibleDistance)
|
if (!item.IsSelf)
|
||||||
{
|
{
|
||||||
GameObject obj;
|
|
||||||
if (onlineRider.Sex == 1)
|
if (onlineRider.Sex == 1)
|
||||||
{
|
{
|
||||||
obj = Instantiate(OnlinePlayer, transform);
|
obj = Instantiate(OnlinePlayer, transform);
|
||||||
@ -211,43 +217,44 @@ namespace Assets.Scripts.Scenes.VideoRide
|
|||||||
{
|
{
|
||||||
obj = Instantiate(OnlinePlayer_NV, transform);
|
obj = Instantiate(OnlinePlayer_NV, transform);
|
||||||
}
|
}
|
||||||
|
|
||||||
var online = obj.GetComponentInChildren<OnlineVideoPlayer>();
|
var online = obj.GetComponentInChildren<OnlineVideoPlayer>();
|
||||||
var rideObj = obj.GetComponentInChildren<RiderRenderer>();
|
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);
|
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)
|
public void SetCurrentMode(ARMode aRMode)
|
||||||
{
|
{
|
||||||
@ -256,7 +263,8 @@ namespace Assets.Scripts.Scenes.VideoRide
|
|||||||
uimanager.SetCurrentMode(aRMode);
|
uimanager.SetCurrentMode(aRMode);
|
||||||
if (_aRMode != ARMode.INSPECT)
|
if (_aRMode != ARMode.INSPECT)
|
||||||
{
|
{
|
||||||
InitCurrentPlayer();
|
//InitCurrentPlayer();
|
||||||
|
Debug.Log("ContinueAsync");
|
||||||
ContinueAsync();
|
ContinueAsync();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -267,21 +275,6 @@ namespace Assets.Scripts.Scenes.VideoRide
|
|||||||
public GameObject videoPlayer;
|
public GameObject videoPlayer;
|
||||||
public GameObject target;
|
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:替换写法
|
//切换人物 TODO:替换写法
|
||||||
public void ChangePlayer(int userId)
|
public void ChangePlayer(int userId)
|
||||||
{
|
{
|
||||||
@ -298,7 +291,7 @@ namespace Assets.Scripts.Scenes.VideoRide
|
|||||||
var onlineRider = currentPlayer as OnlineRiderModel;
|
var onlineRider = currentPlayer as OnlineRiderModel;
|
||||||
var obj = Instantiate(OnlinePlayer, transform);
|
var obj = Instantiate(OnlinePlayer, transform);
|
||||||
var online = obj.GetComponent<OnlineVideoPlayer>();
|
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;
|
CurrentPlayer = online;
|
||||||
}
|
}
|
||||||
var clearList = players.Where(c => c.UserId != userId);
|
var clearList = players.Where(c => c.UserId != userId);
|
||||||
@ -314,7 +307,7 @@ namespace Assets.Scripts.Scenes.VideoRide
|
|||||||
{
|
{
|
||||||
return infoPanel;
|
return infoPanel;
|
||||||
}
|
}
|
||||||
//骑行记录
|
//继续骑行
|
||||||
public void ContinueAsync()
|
public void ContinueAsync()
|
||||||
{
|
{
|
||||||
//骑行结果
|
//骑行结果
|
||||||
@ -322,23 +315,22 @@ namespace Assets.Scripts.Scenes.VideoRide
|
|||||||
{
|
{
|
||||||
routeResult = App.routeResult;
|
routeResult = App.routeResult;
|
||||||
selectParamModel = App.routeResult.ContinueCyclingParam;
|
selectParamModel = App.routeResult.ContinueCyclingParam;
|
||||||
|
Debug.Log("selectParamModel"+ selectParamModel.ContinueMark);
|
||||||
SetCyclingModel(CyclingModel.Single);
|
SetCyclingModel(CyclingModel.Single);
|
||||||
endDistance = routeResult.EndDistance;
|
endDistance = routeResult.EndDistance;
|
||||||
//TODO:继续骑行
|
//mediaPlayer.Control.SeekToFrame(routeResult.LastFrame ?? 0);
|
||||||
mediaPlayer.Control.SeekToFrame(routeResult.LastFrame ?? 0);
|
|
||||||
var v = FindObjectOfType<VideoPlayer>();
|
|
||||||
v.SetEndDistance(endDistance);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//设置骑行模式
|
//设置骑行模式
|
||||||
public void SetCyclingModel(CyclingModel mode)
|
public void SetCyclingModel(CyclingModel mode)
|
||||||
{
|
{
|
||||||
startTime = UIManager.Now.GetDateTime();
|
startTime = UIManager.Now.GetDateTime();
|
||||||
|
Debug.Log("SetCyclingModel" + selectParamModel.ContinueMark);
|
||||||
this.cyclingModel = mode;
|
this.cyclingModel = mode;
|
||||||
switch (cyclingModel)
|
switch (cyclingModel)
|
||||||
{
|
{
|
||||||
case CyclingModel.Single:
|
case CyclingModel.Single:
|
||||||
cyclingController = new SingleModel(route, selectParamModel);
|
cyclingController = new ARSingleModel(route, selectParamModel);
|
||||||
break;
|
break;
|
||||||
case CyclingModel.GameRoom:
|
case CyclingModel.GameRoom:
|
||||||
cyclingController = new GameModel(route, selectParamModel);
|
cyclingController = new GameModel(route, selectParamModel);
|
||||||
@ -367,7 +359,6 @@ namespace Assets.Scripts.Scenes.VideoRide
|
|||||||
//设置视频源文件
|
//设置视频源文件
|
||||||
public void SetMedia(string path)
|
public void SetMedia(string path)
|
||||||
{
|
{
|
||||||
return;
|
|
||||||
if (mediaPlayer != null)
|
if (mediaPlayer != null)
|
||||||
{
|
{
|
||||||
mediaPlayer.OpenMedia(new MediaPath(path,MediaPathType.AbsolutePathOrURL),false);
|
mediaPlayer.OpenMedia(new MediaPath(path,MediaPathType.AbsolutePathOrURL),false);
|
||||||
@ -378,8 +369,6 @@ namespace Assets.Scripts.Scenes.VideoRide
|
|||||||
{
|
{
|
||||||
return isStop;
|
return isStop;
|
||||||
}
|
}
|
||||||
double preframe = 0;
|
|
||||||
double preDistance = 0;
|
|
||||||
|
|
||||||
//暂停
|
//暂停
|
||||||
public void Pause()
|
public void Pause()
|
||||||
@ -400,11 +389,7 @@ namespace Assets.Scripts.Scenes.VideoRide
|
|||||||
{
|
{
|
||||||
return mediaPlayer.Control.GetCurrentTimeFrames();
|
return mediaPlayer.Control.GetCurrentTimeFrames();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
Vector3 currentCameraRotation = Vector3.zero;
|
|
||||||
Vector3 mVelocity;
|
|
||||||
float prePos = 0f;
|
|
||||||
public float ratio = 111.676f;
|
public float ratio = 111.676f;
|
||||||
public float startOffset = 0f;
|
public float startOffset = 0f;
|
||||||
//获取AR骑行配置信息
|
//获取AR骑行配置信息
|
||||||
@ -498,7 +483,6 @@ namespace Assets.Scripts.Scenes.VideoRide
|
|||||||
return new Vector2d(0, 0);
|
return new Vector2d(0, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnDestroy()
|
private void OnDestroy()
|
||||||
{
|
{
|
||||||
App.gameRoomDetail = null;
|
App.gameRoomDetail = null;
|
||||||
|
|||||||
@ -225,7 +225,17 @@ namespace Assets.Scripts.Scenes.VideoRide
|
|||||||
return;
|
return;
|
||||||
startBtnLock = true;
|
startBtnLock = true;
|
||||||
var ui = manager.GetCanvasTransform();
|
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 route = manager.mapRoute;
|
||||||
var arDataPath = $"{PFConstants.ARFolder}/{route.Id}/{route.Id}.json";
|
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<ARData>((Func<ARData>)(() => aRData = ARData.LoadFromFile(arDataPath)));
|
||||||
await Task.Run<RouteDetailData>((Func<RouteDetailData>)(() => routeDetailData = RouteDetailData.LoadFromFile(videoRoute)));
|
await Task.Run<RouteDetailData>((Func<RouteDetailData>)(() => routeDetailData = RouteDetailData.LoadFromFile(videoRoute)));
|
||||||
var arController = FindObjectOfType<ARTrainingController>();
|
var arController = FindObjectOfType<ARTrainingController>();
|
||||||
arController.Initialize(aRData, routeDetailData);
|
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);
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public void StartRide(int seconds)
|
public void StartRide(int seconds)
|
||||||
{
|
{
|
||||||
var ui = manager.GetCanvasTransform();
|
var ui = manager.GetCanvasTransform();
|
||||||
|
InitAR();
|
||||||
canvasGroup.DOFade(0, 0).onComplete += () => {
|
canvasGroup.DOFade(0, 0).onComplete += () => {
|
||||||
gameObject.SetActive(false);
|
gameObject.SetActive(false);
|
||||||
manager.SetCyclingModel(CyclingModel.GameRoom);
|
manager.SetCyclingModel(CyclingModel.GameRoom);
|
||||||
@ -259,6 +263,8 @@ namespace Assets.Scripts.Scenes.VideoRide
|
|||||||
};
|
};
|
||||||
UIManager.ShowGameRoomCountDownPanel(seconds,()=> {
|
UIManager.ShowGameRoomCountDownPanel(seconds,()=> {
|
||||||
manager.StartGame();
|
manager.StartGame();
|
||||||
|
manager.SetCyclingModel(Assets.Scenes.Ride.Scripts.Model.CyclingModel.Single);
|
||||||
|
manager.SetCurrentMode(VideoGameManager.ARMode.RIDE);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -1,21 +1,12 @@
|
|||||||
using Assets.AR;
|
using Assets.Scenes.Ride.Scripts.Model;
|
||||||
using Assets.Scenes.Ride.Scripts;
|
|
||||||
using Assets.Scenes.Ride.Scripts.Model;
|
|
||||||
using Assets.Scenes.Ride.Scripts.Model.CyclingModels;
|
using Assets.Scenes.Ride.Scripts.Model.CyclingModels;
|
||||||
using DG.Tweening;
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.IO;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Reflection;
|
|
||||||
using System.Text;
|
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
|
|
||||||
namespace Assets.Scripts.Scenes.VideoRide
|
namespace Assets.Scripts.Scenes.VideoRide
|
||||||
{
|
{
|
||||||
public class VideoPlayer : AbstractVideoPlayer
|
public class VideoPlayer : AbstractVideoPlayer
|
||||||
{
|
{
|
||||||
public double EndDistance => totalDistance;
|
|
||||||
private bool isSingle = true;
|
private bool isSingle = true;
|
||||||
protected override void Start()
|
protected override void Start()
|
||||||
{
|
{
|
||||||
@ -25,7 +16,7 @@ namespace Assets.Scripts.Scenes.VideoRide
|
|||||||
userName = App.CurrentUser.Nickname;
|
userName = App.CurrentUser.Nickname;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override bool GetStart()
|
protected bool GetStart()
|
||||||
{
|
{
|
||||||
return manager.IsStart();
|
return manager.IsStart();
|
||||||
}
|
}
|
||||||
@ -43,6 +34,8 @@ namespace Assets.Scripts.Scenes.VideoRide
|
|||||||
public void SetEndDistance(double distance)
|
public void SetEndDistance(double distance)
|
||||||
{
|
{
|
||||||
this.totalDistance = distance;
|
this.totalDistance = distance;
|
||||||
|
this.PreDistance = distance * 1000;
|
||||||
|
this.EndDistance = PreDistance;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Complete()
|
public void Complete()
|
||||||
@ -153,5 +146,16 @@ namespace Assets.Scripts.Scenes.VideoRide
|
|||||||
manager.Save(totalDistance);
|
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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -50,7 +50,7 @@ class GameRoomDownloadTask : MonoBehaviour
|
|||||||
public void UpdateProcess(float process)
|
public void UpdateProcess(float process)
|
||||||
{
|
{
|
||||||
slider.value = process;
|
slider.value = process;
|
||||||
if (process >= 100)
|
if (process >= 1)
|
||||||
{
|
{
|
||||||
done.SetActive(true);
|
done.SetActive(true);
|
||||||
doneTxt.SetActive(true);
|
doneTxt.SetActive(true);
|
||||||
|
|||||||
@ -1,18 +1,24 @@
|
|||||||
using Assets.Scripts;
|
using Assets.AR;
|
||||||
|
using Assets.Scenes.Ride.Scripts;
|
||||||
|
using Assets.Scripts;
|
||||||
using Assets.Scripts.Apis;
|
using Assets.Scripts.Apis;
|
||||||
using Assets.Scripts.Apis.Models;
|
using Assets.Scripts.Apis.Models;
|
||||||
|
using Cysharp.Threading.Tasks;
|
||||||
using DG.Tweening;
|
using DG.Tweening;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections;
|
using System.Collections;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
|
using System.Threading;
|
||||||
|
using System.Threading.Tasks;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
using UnityEngine.EventSystems;
|
using UnityEngine.EventSystems;
|
||||||
|
using UnityEngine.Networking;
|
||||||
using UnityEngine.SceneManagement;
|
using UnityEngine.SceneManagement;
|
||||||
using UnityEngine.UI;
|
using UnityEngine.UI;
|
||||||
|
|
||||||
|
|
||||||
public class GameRoomMapItem : MonoBehaviour, IPointerExitHandler, IPointerEnterHandler, IPointerUpHandler
|
public class GameRoomMapItem : MonoBehaviour, IPointerExitHandler, IPointerEnterHandler, IPointerUpHandler,IProgress<float>
|
||||||
{
|
{
|
||||||
public class PropNames
|
public class PropNames
|
||||||
{
|
{
|
||||||
@ -39,15 +45,11 @@ public class GameRoomMapItem : MonoBehaviour, IPointerExitHandler, IPointerEnter
|
|||||||
listController = FindObjectOfType<GameRoomListController>();
|
listController = FindObjectOfType<GameRoomListController>();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update is called once per frame
|
|
||||||
void Update()
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
float? localY = null;
|
float? localY = null;
|
||||||
MapRoute map;
|
MapRoute map;
|
||||||
Dictionary<string, Texture> caches;
|
Dictionary<string, Texture> caches;
|
||||||
private MapRouteAreaItem area = null;
|
private MapRouteAreaItem area = null;
|
||||||
|
Slider slider;
|
||||||
public void Initial(MapRoute myMap, Dictionary<string, Texture> caches, MapRouteAreaItem area = null)
|
public void Initial(MapRoute myMap, Dictionary<string, Texture> caches, MapRouteAreaItem area = null)
|
||||||
{
|
{
|
||||||
if (caches != null)
|
if (caches != null)
|
||||||
@ -64,7 +66,7 @@ public class GameRoomMapItem : MonoBehaviour, IPointerExitHandler, IPointerEnter
|
|||||||
var downloadBtn = transform.Find("DownLoadModal/DownLoad").gameObject;
|
var downloadBtn = transform.Find("DownLoadModal/DownLoad").gameObject;
|
||||||
var downloading = transform.Find("DownLoadModal/Downloading").gameObject;
|
var downloading = transform.Find("DownLoadModal/Downloading").gameObject;
|
||||||
var downloadTxt = transform.Find("DownLoadModal/Text").gameObject;
|
var downloadTxt = transform.Find("DownLoadModal/Text").gameObject;
|
||||||
var slider = transform.Find("DownLoadModal/Slider").GetComponent<Slider>();
|
slider = transform.Find("DownLoadModal/Slider").GetComponent<Slider>();
|
||||||
|
|
||||||
var fileName = map.FileName;
|
var fileName = map.FileName;
|
||||||
var path = PFConstants.VideoFolder;
|
var path = PFConstants.VideoFolder;
|
||||||
@ -76,49 +78,10 @@ public class GameRoomMapItem : MonoBehaviour, IPointerExitHandler, IPointerEnter
|
|||||||
downloading.SetActive(true);
|
downloading.SetActive(true);
|
||||||
downloadTxt.SetActive(false);
|
downloadTxt.SetActive(false);
|
||||||
slider.gameObject.SetActive(true);
|
slider.gameObject.SetActive(true);
|
||||||
Loom.Current.StartCoroutine(Utils.DownloadFileWithProcess(map.FileName, map.Url, path,(p, req) =>
|
Loom.Download(map);
|
||||||
{
|
|
||||||
if (gameObject != null)
|
|
||||||
slider.value = p;
|
|
||||||
if (Loom.DownLoadTaskList.ContainsKey(map.FileName))
|
|
||||||
{
|
|
||||||
Loom.DownLoadTaskList[map.FileName] = p;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Loom.DownLoadTaskList.Add(map.FileName, p);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
, (p) =>
|
|
||||||
{
|
|
||||||
if (string.IsNullOrEmpty(p))
|
|
||||||
{
|
|
||||||
var process = 100f;
|
|
||||||
if (Loom.DownLoadTaskList.ContainsKey(map.FileName))
|
|
||||||
{
|
|
||||||
Loom.DownLoadTaskList[map.FileName] = process;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Loom.DownLoadTaskList.Add(map.FileName, process);
|
|
||||||
}
|
|
||||||
if (gameObject != null)
|
|
||||||
{
|
|
||||||
slider.value = process;
|
|
||||||
Ride();
|
|
||||||
transform.Find("DownLoadModal").gameObject.SetActive(false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (gameObject != null)
|
|
||||||
Utils.showToast(gameObject, p);
|
|
||||||
}
|
|
||||||
}));
|
|
||||||
});
|
});
|
||||||
|
|
||||||
transform.Find("Name").GetComponent<Text>().text = myMap.Name;
|
transform.Find("Name").GetComponent<Text>().text = myMap.Name;
|
||||||
|
|
||||||
transform.Find("IdContainer/Text").GetComponent<Text>().text = $"#{myMap.Id}";
|
transform.Find("IdContainer/Text").GetComponent<Text>().text = $"#{myMap.Id}";
|
||||||
transform.Find("TimesContainer").gameObject.SetActive(myMap.MineCount > 0);
|
transform.Find("TimesContainer").gameObject.SetActive(myMap.MineCount > 0);
|
||||||
transform.Find("TimesContainer/Text").GetComponent<Text>().text = myMap.MineCountString;
|
transform.Find("TimesContainer/Text").GetComponent<Text>().text = myMap.MineCountString;
|
||||||
@ -340,4 +303,24 @@ public class GameRoomMapItem : MonoBehaviour, IPointerExitHandler, IPointerEnter
|
|||||||
{
|
{
|
||||||
Cursor.SetCursor(null, Vector2.zero, CursorMode.Auto);
|
Cursor.SetCursor(null, Vector2.zero, CursorMode.Auto);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void Report(float value)
|
||||||
|
{
|
||||||
|
if (gameObject != null)
|
||||||
|
slider.value = value;
|
||||||
|
if (Loom.DownLoadTaskList.ContainsKey(map.FileName))
|
||||||
|
{
|
||||||
|
Loom.DownLoadTaskList[map.FileName] = value;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Loom.DownLoadTaskList.Add(map.FileName, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (value == 100)
|
||||||
|
{
|
||||||
|
Ride();
|
||||||
|
transform.Find("DownLoadModal").gameObject.SetActive(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -908,7 +908,7 @@ public class GameRoomListController : PFUIPanel
|
|||||||
private async void GetList()
|
private async void GetList()
|
||||||
{
|
{
|
||||||
if (isEnd) return;
|
if (isEnd) return;
|
||||||
var res = await ConfigHelper.mapApi.GetList(pageIndex, pageSize, ftname, distance, string.Join(",", hands), is3d, sort, sortDire, isEnableAR:false, isEnableBattle: true);
|
var res = await ConfigHelper.mapApi.GetList(pageIndex, pageSize, ftname, distance, string.Join(",", hands), is3d, sort, sortDire, isEnableAR: isEnableAR, isEnableBattle: true);
|
||||||
if (res.result)
|
if (res.result)
|
||||||
{
|
{
|
||||||
if (res.data.Count == 0)
|
if (res.data.Count == 0)
|
||||||
|
|||||||
@ -1,10 +1,14 @@
|
|||||||
using Assets.Scenes.Ride.Scripts;
|
using Assets.Scenes.Ride.Scripts;
|
||||||
|
using Assets.Scripts.Apis.Models;
|
||||||
|
using Cysharp.Threading.Tasks;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections;
|
using System.Collections;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
|
using UnityEngine.Networking;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 异步线程更新ui工具类
|
/// 异步线程更新ui工具类
|
||||||
@ -174,4 +178,27 @@ public class Loom : MonoBehaviour
|
|||||||
_current = null;
|
_current = null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static async void Download(MapRoute route)
|
||||||
|
{
|
||||||
|
var progress = Progress.Create<float>(x =>
|
||||||
|
DownLoadTaskList[route.FileName] = x
|
||||||
|
);
|
||||||
|
DownLoadTaskList.Add(route.FileName, 0);
|
||||||
|
var path = PFConstants.VideoFolder;
|
||||||
|
var localPath = PFConstants.ARFolder;
|
||||||
|
var arDataPath = route.ARConfig;
|
||||||
|
var videoRoute = route.VideoRoute;
|
||||||
|
var cancelToken = new CancellationTokenSource();
|
||||||
|
var res1 = await UnityWebRequest.Get(arDataPath).SendWebRequest().WithCancellation(cancelToken.Token);//下载AR数据
|
||||||
|
var res2 = await UnityWebRequest.Get(videoRoute).SendWebRequest().WithCancellation(cancelToken.Token);//下载video视频数据
|
||||||
|
var res3 = await UnityWebRequest.Get(route.Url).SendWebRequest().ToUniTask(progress);//下载视频
|
||||||
|
|
||||||
|
var dataPath = $"{localPath}/{route.Id}";
|
||||||
|
Helper.CreateDirectoryIfNotExsit(dataPath);
|
||||||
|
Helper.CreateDirectoryIfNotExsit(dataPath);
|
||||||
|
File.WriteAllBytes($"{dataPath}/{route.Id}.json", res1.downloadHandler.data);
|
||||||
|
File.WriteAllBytes($"{dataPath}/route-{route.Id}.json", res2.downloadHandler.data);
|
||||||
|
File.WriteAllBytes($"{path}/{route.FileName}", res3.downloadHandler.data);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user