AR继续骑和断线重连继续骑
This commit is contained in:
1 parent
ae58f4d461
commit
9e2e778e12
34 files changed
+3828
-497977
No files matched your search
@@ -7,7 +7,9 @@ namespace Assets.AR
|
||||
{
|
||||
public Vector3 Lean { get; set; }//偏移量
|
||||
|
||||
public int StartPosition;
|
||||
public int StartPosition { get; set; }
|
||||
|
||||
public int StartRouteDistance { get; set; }
|
||||
|
||||
public bool IsAtFinish { get; set; }//是否到达终点
|
||||
|
||||
@@ -23,6 +25,8 @@ namespace Assets.AR
|
||||
|
||||
public float Speed { get; set; }//速度
|
||||
|
||||
public float PreSpeed { get; set; }//速度
|
||||
|
||||
public float Curvature { get; set; }//转向
|
||||
|
||||
public float LaneChangingDirection { get; set; }//方向
|
||||
@@ -33,8 +37,7 @@ namespace Assets.AR
|
||||
|
||||
public float FrameIndexDistanceCorrection { get; set; }//位置纠正
|
||||
|
||||
public double TestPower = 500;
|
||||
|
||||
public int TestPower { get; set; }
|
||||
|
||||
//重置碰撞检测参数
|
||||
public void ResetCollisionDetectionParameters()
|
||||
|
||||
@@ -62,7 +62,7 @@ namespace Assets.AR
|
||||
}
|
||||
|
||||
public float DeltaDistance { get; set; }
|
||||
public float PreDistance { get; set; }
|
||||
public float NextDistance { get; set; }
|
||||
|
||||
public float Distance
|
||||
{
|
||||
|
||||
+491
-110
@@ -6,6 +6,10 @@ using UnityEngine.UI;
|
||||
using RenderHeads.Media.AVProVideo;
|
||||
using Assets.Scripts.Scenes.VideoRide;
|
||||
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
|
||||
{
|
||||
@@ -15,20 +19,34 @@ namespace Assets.AR
|
||||
private ARData aRData;
|
||||
private RouteDetailData detail;
|
||||
private VideoPointsSync videoPointsSync;
|
||||
private int index = 1;
|
||||
private readonly List<ARLaneObject> collisionList = new List<ARLaneObject>();
|
||||
VideoPlayerControl VideoPlayerControl;
|
||||
ARLaneObject[] rides;
|
||||
public ARLaneObject mainObject { get; set; }
|
||||
ARLaneObject[] rides { get; set; }
|
||||
public ARLaneObject mainRiderObject { get; set; }
|
||||
private Light arLight;
|
||||
private Light arBackLight;
|
||||
public RiderCameraDistance RiderCameraDistance { get; set; }
|
||||
public VideoControlMode VideoControlMode { get; private set; }
|
||||
private float autoCameraSwitchTimeCounter = 80f;
|
||||
float timers = 1f;
|
||||
double weight = 70;
|
||||
double bikeWeight = 20;
|
||||
float timers = 0f;
|
||||
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()
|
||||
{
|
||||
@@ -40,22 +58,17 @@ namespace Assets.AR
|
||||
public void Initialize(ARData arData, RouteDetailData routeDetailData)
|
||||
{
|
||||
//ar数据加载本地,本地没有就下载
|
||||
//var txt = Resources.Load<TextAsset>("UI/93824").text;
|
||||
//var route = Resources.Load<TextAsset>("UI/route-93824").text;
|
||||
this.aRData = arData; //Newtonsoft.Json.JsonConvert.DeserializeObject<ARData>(txt);
|
||||
this.detail = routeDetailData;//Newtonsoft.Json.JsonConvert.DeserializeObject<RouteDetailData>(route);
|
||||
this.aRData = arData;
|
||||
this.detail = routeDetailData;
|
||||
|
||||
videoPointsSync = new VideoPointsSync(detail.VideoPoints.Select(c => new VideoPoint()
|
||||
{
|
||||
Distance = (float)c.Distance,
|
||||
Time = (float)c.VideoTime
|
||||
}));
|
||||
|
||||
videoSync = videoPointsSync;
|
||||
|
||||
this.VideoPlayerControl = new VideoPlayerControl();
|
||||
this.VideoPlayerControl.VideoSyncSource = videoSync;
|
||||
|
||||
this.videoPlayer = new AVProVideoPlayer();
|
||||
this.videoPlayer.videoPlayer = mediaPlayer;
|
||||
SetArRoute(new ARRoute(aRData.Route), videoSync, videoPlayer);
|
||||
@@ -72,13 +85,20 @@ namespace Assets.AR
|
||||
return;
|
||||
timers -= Time.deltaTime;
|
||||
|
||||
while (timers < 0)
|
||||
while (timers <= 0)
|
||||
{
|
||||
//this.riderObjects.Clear();
|
||||
foreach (var dic in manager.rideObjs)
|
||||
{
|
||||
|
||||
var item = dic.Value;
|
||||
item.Speed = (float)(dic.Key.Speed/3.6d);
|
||||
item.DeltaDistance = item.Speed;
|
||||
if (dic.Key.UserId == App.CurrentUser.Id)
|
||||
{
|
||||
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.VideoSync = videoPointsSync;
|
||||
if(!this.arObjects.Contains(item))
|
||||
@@ -86,47 +106,27 @@ namespace Assets.AR
|
||||
if (!this.riderObjects.ContainsKey(item.GetInstanceID()))
|
||||
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;
|
||||
}
|
||||
|
||||
if (mainObject == null)
|
||||
|
||||
if (mainRiderObject == null)
|
||||
return;
|
||||
var delta = Time.deltaTime;
|
||||
foreach (var obj in this.riderObjects.Values)
|
||||
{
|
||||
mainObject = manager.CurrentPlayer.gameObject.GetComponent<RiderRenderer>();
|
||||
this.arObjects.Add(mainObject);
|
||||
mainObject.Speed = (float)(manager.CurrentPlayer.Speed / 3.6d);
|
||||
mainObject.DeltaDistance = mainObject.Speed;
|
||||
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())
|
||||
var offset = obj.DeltaDistance * delta;
|
||||
obj.Distance += offset;
|
||||
obj.RouteDistance += offset;
|
||||
if (obj.Distance >= Route.GetTotalDistance())
|
||||
{
|
||||
item.IsAtFinish = true;
|
||||
obj.IsAtFinish = true;
|
||||
}
|
||||
}
|
||||
|
||||
this.FrameIndexDistanceCorrection = this.VideoPlayerControl.FrameIndexDistanceCorrection;
|
||||
//mainObject = manager.CurrentPlayer;
|
||||
//this.FollowedRiderId = mainObject.Id;
|
||||
this.UpdateCameraFollowDistance();
|
||||
VideoPlayerControl.UpdateVideoPlaybackSpeed(mainObject.Speed, mainObject.distance);
|
||||
VideoPlayerControl.UpdateVideoPlaybackSpeed(mainRiderObject.PreSpeed, mainRiderObject.Distance);
|
||||
base.Update();
|
||||
this.UpdateRidersVisibility();
|
||||
this.UpdateRidersLean();
|
||||
@@ -194,7 +194,7 @@ namespace Assets.AR
|
||||
protected override bool IsArObjectActive(ARObject arObject)
|
||||
{
|
||||
bool flag = base.IsArObjectActive(arObject);
|
||||
if ((UnityEngine.Object)arObject != (UnityEngine.Object)this.mainObject)
|
||||
if ((UnityEngine.Object)arObject != (UnityEngine.Object)this.mainRiderObject)
|
||||
return flag;
|
||||
if ((double)this.VideoPlayerControl.CameraFollowDistance > 0.0 || this.AR360Version)
|
||||
return flag;
|
||||
@@ -208,7 +208,7 @@ namespace Assets.AR
|
||||
case RiderCameraDistance.FirstPerson:
|
||||
return 0.0f;
|
||||
case RiderCameraDistance.Near:
|
||||
return 3f;
|
||||
return 1.5f;
|
||||
case RiderCameraDistance.Middle:
|
||||
return 5f;
|
||||
case RiderCameraDistance.Far:
|
||||
@@ -217,59 +217,430 @@ namespace Assets.AR
|
||||
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()
|
||||
{
|
||||
//if (!this.videoPlayer.Initialized)
|
||||
// return;
|
||||
//this.UpdateVisibleRiders();
|
||||
////删除当前道路上应该消失的骑手
|
||||
//foreach (int num in this.riderObjects.Keys.ToArray<int>())
|
||||
//{
|
||||
// if (!this.visibleRiders.ContainsKey(num))
|
||||
// {
|
||||
// ARLaneObject riderObject = this.riderObjects[num];
|
||||
// if (!riderObject.IsAtFinish || (double)riderObject.VisibilityLevel <= 0.0)
|
||||
// {
|
||||
// this.DestroyRider(num);
|
||||
// this.DestroyRiderTitle(num);
|
||||
// }
|
||||
// }
|
||||
//}
|
||||
////新增应该显示的骑手
|
||||
//foreach (TrainingARController.VisibleRiderItem visibleRiderItem in this.visibleRiders.Values)
|
||||
//{
|
||||
// IRouteRider rider = visibleRiderItem.Rider;
|
||||
// bool showModel = visibleRiderItem.ShowModel;
|
||||
// ARLaneObject arLaneObject;
|
||||
// //二次检查
|
||||
// if (this.riderObjects.TryGetValue(rider.Id, out arLaneObject))
|
||||
// {
|
||||
// if (arLaneObject is BaseRenderer)
|
||||
// {
|
||||
// if (!showModel)
|
||||
// {
|
||||
// float lane = arLaneObject.Lane;
|
||||
// this.DestroyRider(rider.Id);
|
||||
// this.CreateRiderObject(rider, lane);
|
||||
// }
|
||||
// }
|
||||
// else if (showModel)
|
||||
// {
|
||||
// float lane = arLaneObject.Lane;
|
||||
// this.DestroyRider(rider.Id);
|
||||
// this.CreateRiderModel(rider, lane);
|
||||
// }
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// if (showModel)
|
||||
// this.CreateRiderModel(rider, visibleRiderItem.Lane);
|
||||
// else
|
||||
// this.CreateRiderObject(rider, visibleRiderItem.Lane);
|
||||
// this.CreateRiderTitleObject(rider);
|
||||
// }
|
||||
//}
|
||||
if (!this.videoPlayer.Initialized)
|
||||
return;
|
||||
this.UpdateVisibleRiders();
|
||||
return;
|
||||
//删除当前道路上应该消失的骑手
|
||||
foreach (int num in this.riderObjects.Keys.ToArray<int>())
|
||||
{
|
||||
if (!this.visibleRiders.ContainsKey(num))
|
||||
{
|
||||
ARLaneObject riderObject = this.riderObjects[num];
|
||||
if (!riderObject.IsAtFinish || (double)riderObject.VisibilityLevel <= 0.0)
|
||||
{
|
||||
this.DestroyRider(num);
|
||||
this.DestroyRiderTitle(num);
|
||||
}
|
||||
}
|
||||
}
|
||||
//新增应该显示的骑手
|
||||
foreach (VisibleRiderItem visibleRiderItem in this.visibleRiders.Values)
|
||||
{
|
||||
var rider = visibleRiderItem.Rider;
|
||||
bool showModel = visibleRiderItem.ShowModel;
|
||||
ARLaneObject arLaneObject;
|
||||
//二次检查
|
||||
if (this.riderObjects.TryGetValue(rider.UserId, out arLaneObject))
|
||||
{
|
||||
if (arLaneObject is BaseRenderer)
|
||||
{
|
||||
if (!showModel)
|
||||
{
|
||||
float lane = arLaneObject.Lane;
|
||||
this.DestroyRider(rider.UserId);
|
||||
this.CreateRiderObject(rider, lane);
|
||||
}
|
||||
}
|
||||
else if (showModel)
|
||||
{
|
||||
float lane = arLaneObject.Lane;
|
||||
this.DestroyRider(rider.UserId);
|
||||
this.CreateRiderModel(rider, lane);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (showModel)
|
||||
this.CreateRiderModel(rider, visibleRiderItem.Lane);
|
||||
else
|
||||
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()
|
||||
{
|
||||
@@ -341,19 +712,19 @@ namespace Assets.AR
|
||||
// float t = this.GetValueViewAlpha(num1);
|
||||
// if ((double)t < 1.0 && (UnityEngine.Object)riderValueView != (UnityEngine.Object)null)
|
||||
// riderValueView.Alpha = t;
|
||||
// if (this.sportProfile == SportProfile.Running)
|
||||
// {
|
||||
// if ((UnityEngine.Object)riderValueView != (UnityEngine.Object)null)
|
||||
// riderValueView.Active = false;
|
||||
// t = 0.0f;
|
||||
// }
|
||||
// //if (this.sportProfile == SportProfile.Running)
|
||||
// //{
|
||||
// // if ((UnityEngine.Object)riderValueView != (UnityEngine.Object)null)
|
||||
// // riderValueView.Active = false;
|
||||
// // t = 0.0f;
|
||||
// //}
|
||||
// Vector3 vector3 = 5f * this.uiScale * Mathf.Max(0.1f, this.SelectedPanorama != null ? 1f : this.GetDistanceScale(num1));
|
||||
// Quaternion rotation = this.UnityCamera.transform.rotation;
|
||||
// if (this.SelectedPanorama != null)
|
||||
// {
|
||||
// rotation = this.PanoramaCamera.transform.rotation;
|
||||
// }
|
||||
// else
|
||||
// //if (this.SelectedPanorama != null)
|
||||
// //{
|
||||
// // rotation = this.PanoramaCamera.transform.rotation;
|
||||
// //}
|
||||
// //else
|
||||
// {
|
||||
// if ((double)riderObject.Distance < (double)this.CameraDistance)
|
||||
// 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()
|
||||
{
|
||||
this.SetupModels();
|
||||
this.SetLayerRecursively(this.gameObject, 9);
|
||||
this.animator.avatar = (Avatar)null;
|
||||
}
|
||||
|
||||
@@ -54,9 +52,6 @@ namespace Assets.AR
|
||||
base.Update();
|
||||
}
|
||||
|
||||
protected abstract void SetupModels();
|
||||
|
||||
|
||||
protected virtual void OnPause(bool paused)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -92,16 +92,15 @@ namespace Assets.AR
|
||||
protected override void Start()
|
||||
{
|
||||
base.Start();
|
||||
this.PlanNextLook();
|
||||
}
|
||||
|
||||
protected override void Update()
|
||||
{
|
||||
if (this.route == null)
|
||||
return;
|
||||
this.UpdateDiffciulityLevel();
|
||||
base.Update();
|
||||
float num = this.Speed;
|
||||
this.Paused = this.Speed == 0;
|
||||
bool flag = this.Paused;
|
||||
if (this.IsAtFinish)
|
||||
{
|
||||
@@ -175,42 +174,5 @@ namespace Assets.AR
|
||||
//this.wheelFront.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;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user