AR继续骑和断线重连继续骑
This commit is contained in:
parent
ae58f4d461
commit
9e2e778e12
@ -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
|
||||
{
|
||||
|
||||
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -3,21 +3,9 @@
|
||||
public interface IRider
|
||||
{
|
||||
int UserId { get;}
|
||||
string UserName { get; }
|
||||
double Weight { get;}
|
||||
double BicycleWeight { get;}
|
||||
double Speed { get;}
|
||||
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; }
|
||||
double StartDistance { get; set; }
|
||||
double OnlineSpeed { get; set; }
|
||||
double PreDistance { get; set; }
|
||||
double EndDistance { get; set; }
|
||||
}
|
||||
}
|
||||
|
||||
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_GameObject: {fileID: 313551262}
|
||||
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
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@ -992,7 +906,7 @@ Camera:
|
||||
m_Depth: -1
|
||||
m_CullingMask:
|
||||
serializedVersion: 2
|
||||
m_Bits: 4294967295
|
||||
m_Bits: 1
|
||||
m_RenderingPath: -1
|
||||
m_TargetTexture: {fileID: 0}
|
||||
m_TargetDisplay: 0
|
||||
@ -1537,92 +1451,6 @@ Transform:
|
||||
m_Father: {fileID: 0}
|
||||
m_RootOrder: 6
|
||||
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
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@ -1925,6 +1753,92 @@ RectTransform:
|
||||
type: 3}
|
||||
m_PrefabInstance: {fileID: 1426339558}
|
||||
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
|
||||
GameObject:
|
||||
m_CorrespondingSourceObject: {fileID: 3342506722007875022, guid: 10e54cf0bec9cbc4b94d1d40e437f87c,
|
||||
@ -2107,6 +2021,92 @@ CanvasRenderer:
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1726804851}
|
||||
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
|
||||
GameObject:
|
||||
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>
|
||||
public virtual void Run(TargetData targetData)
|
||||
{
|
||||
//将当前用户的位置发送到udf服务
|
||||
SendUserPositionToServer();
|
||||
//OutModel outData = GetSelfTargetData(targetData);
|
||||
BeforeRunAfterPakcData();//执行前的函数
|
||||
SendUserPositionToServer();//将当前用户的位置发送到udf服务
|
||||
BeforeRunAfterPakcData();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// =>发送用户的位置信息到服务端
|
||||
/// </summary>
|
||||
private void SendUserPositionToServer()
|
||||
protected virtual void SendUserPositionToServer()
|
||||
{
|
||||
try
|
||||
{
|
||||
@ -131,7 +129,6 @@ namespace Assets.Scenes.Ride.Scripts.Model.CyclingModels
|
||||
protected double SpeedToDistance(double speed)
|
||||
{
|
||||
return Math.Round(speed / 3600, 5, MidpointRounding.AwayFromZero);
|
||||
//return 0.08;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -62,9 +62,8 @@ namespace Assets.Scenes.Ride.Scripts.Model.CyclingModels
|
||||
public override void Run(TargetData targetData)
|
||||
{
|
||||
#region 获取当前路线在线用户
|
||||
riders.RemoveAll(r => r.IsSelf == false);
|
||||
var onlineUsers = MapUDPService.GetOnlineUsers(recorderData.CurrentRoute.RouteInstance.Id, recorderData.RoomId).Where(d => d.IsSelf == false)
|
||||
.ToList();
|
||||
riders.Clear();
|
||||
var onlineUsers = MapUDPService.GetOnlineUsers(recorderData.CurrentRoute.RouteInstance.Id, recorderData.RoomId).ToList();
|
||||
foreach (var item in onlineUsers)
|
||||
{
|
||||
riders.Add(new OnlineRiderModel()
|
||||
|
||||
@ -47,6 +47,14 @@ namespace Assets.Scenes.Ride.Scripts.Model
|
||||
/// 最后骑行的距离
|
||||
/// </summary>
|
||||
public double EndDistance { get; set; }
|
||||
|
||||
public double RouteDistance
|
||||
{
|
||||
get
|
||||
{
|
||||
return this.EndDistance * 1000;
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// 是否是当前登陆人
|
||||
/// </summary>
|
||||
@ -68,5 +76,7 @@ namespace Assets.Scenes.Ride.Scripts.Model
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public bool IsFinished { get; set; }
|
||||
}
|
||||
}
|
||||
|
||||
@ -12,6 +12,10 @@ namespace Assets.Scripts.Scenes.VideoRide
|
||||
{
|
||||
public abstract class AbstractVideoPlayer : MonoBehaviour, IRider
|
||||
{
|
||||
public double Diff { get;set; }
|
||||
protected int frames;
|
||||
protected int currentFrame { get; set; }
|
||||
protected double preTime;
|
||||
protected Animator animator;
|
||||
public GameObject head { get; set; }
|
||||
protected Image ftpImage { get; set; }
|
||||
@ -41,35 +45,23 @@ namespace Assets.Scripts.Scenes.VideoRide
|
||||
public int currentIndex;
|
||||
public float bearing = 0f;
|
||||
protected MapDataModel mapData;
|
||||
private float timer = 1f;
|
||||
private float timer = 0f;
|
||||
protected bool start = true;
|
||||
protected Sequence sequence;
|
||||
protected VideoGameManager manager { get; set; }
|
||||
private Camera camera { get; set; }
|
||||
float currenPlayerHeight;
|
||||
Transform bone_bottle_2 { get; set; }
|
||||
Vector3 current { get; set; }
|
||||
Vector3 forward { get; set; }
|
||||
public double Weight { get => this.weight; }
|
||||
public double BicycleWeight { get => this.bicycleWeight; }
|
||||
public double Speed { get => this.speed; }
|
||||
public double Power { get => this.power; }
|
||||
public double Elevation { get => this.elevation; }
|
||||
public double Cadance { get => this.cadance; }
|
||||
public double Wkg { get => this.wkg; }
|
||||
public int? HeartRate { get => this.heartRate; }
|
||||
public double TotalDistance { get => this.totalDistance; }
|
||||
public double CurrentSlope { get => this.currentSlope; }
|
||||
public double CurrentSlopeDistance { get => this.currentSlopeDistance; }
|
||||
public double NextSlope { get => this.nextSlope; }
|
||||
public double NextSlopeDistance { get => this.nextSlopeDistance; }
|
||||
public double Distance { get => this.distance; }
|
||||
public double TotalClimb => this.totalClimb;
|
||||
|
||||
public double Speed { get; set; }
|
||||
public double StartDistance { get; set; }
|
||||
public double PreDistance { get; set; }
|
||||
public double EndDistance { get; set; }
|
||||
public double OnlineSpeed { get; set; }
|
||||
public int UserId => this.userId;
|
||||
|
||||
public string UserName => this.userName;
|
||||
|
||||
public bool IsStart = false;
|
||||
|
||||
protected virtual void Start()
|
||||
{
|
||||
animator = GetComponent<Animator>();
|
||||
@ -84,36 +76,33 @@ namespace Assets.Scripts.Scenes.VideoRide
|
||||
{
|
||||
animator.Play("idle");
|
||||
}
|
||||
camera = Camera.main;
|
||||
//bone_bottle_2
|
||||
bone_bottle_2 = transform.Find("bone_cable_20");
|
||||
//var config = manager.mockDirection;
|
||||
//pre = config[0];
|
||||
//next = config[0];
|
||||
|
||||
}
|
||||
protected virtual void Update()
|
||||
{
|
||||
|
||||
timer -= Time.deltaTime;
|
||||
CreateHeadImage();
|
||||
//Turn();
|
||||
|
||||
|
||||
while (timer <= 0)
|
||||
{
|
||||
try
|
||||
{
|
||||
ComputeNextSlope();//计算下一个坡度
|
||||
|
||||
if (GetStart())
|
||||
if (manager.IsStart())
|
||||
{
|
||||
ticks++;
|
||||
ComputePlayer();//计算人物属性
|
||||
Forward();
|
||||
ComputeRecord();
|
||||
ComputeVideo();
|
||||
ComputeAnimator();//控制动画
|
||||
}
|
||||
ComputeAnimator();//控制动画
|
||||
else
|
||||
{
|
||||
animator.Play("idle");
|
||||
}
|
||||
|
||||
timer += 1f;
|
||||
}
|
||||
catch (Exception e)
|
||||
@ -124,10 +113,6 @@ namespace Assets.Scripts.Scenes.VideoRide
|
||||
}
|
||||
}
|
||||
}
|
||||
protected virtual bool GetStart()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
//动画状态机
|
||||
protected virtual void ComputeAnimator()
|
||||
{
|
||||
@ -158,7 +143,6 @@ namespace Assets.Scripts.Scenes.VideoRide
|
||||
{
|
||||
return manager.GetCurrentFrame();
|
||||
}
|
||||
protected float t { get; set; }
|
||||
protected Vector3 currentRotation;
|
||||
//计算人物当前属性
|
||||
protected virtual void ComputePlayer()
|
||||
@ -281,6 +265,10 @@ namespace Assets.Scripts.Scenes.VideoRide
|
||||
}
|
||||
}
|
||||
}
|
||||
private void OnDisable()
|
||||
{
|
||||
head?.SetActive(false);
|
||||
}
|
||||
//显示人物海拔图的头像
|
||||
protected virtual void CreateHeadImage()
|
||||
{
|
||||
@ -314,5 +302,12 @@ namespace Assets.Scripts.Scenes.VideoRide
|
||||
head?.Destroy();
|
||||
gameObject.Destroy();
|
||||
}
|
||||
//设置当前玩家属性
|
||||
public abstract void SetPlayer(string name, double speed, double preDistance, double endDistance, double cadance, double heartRate, double wkg, int userId, double power, double currentPlayerDistance, int frame);
|
||||
|
||||
public void SetStartDistance(double distance)
|
||||
{
|
||||
this.StartDistance = distance *1000;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -5,8 +5,6 @@ namespace Assets.Scripts.Scenes.VideoRide
|
||||
{
|
||||
public class OnlineVideoPlayer : AbstractVideoPlayer
|
||||
{
|
||||
public double diff;
|
||||
public int frames;
|
||||
|
||||
protected override void Start()
|
||||
{
|
||||
@ -23,8 +21,6 @@ namespace Assets.Scripts.Scenes.VideoRide
|
||||
|
||||
}
|
||||
|
||||
private Dictionary<int, float> ydic = new Dictionary<int, float>();
|
||||
private int currentFrame { get; set; }
|
||||
protected override void ComputeAnimator()
|
||||
{
|
||||
base.ComputeAnimator();
|
||||
@ -40,13 +36,11 @@ namespace Assets.Scripts.Scenes.VideoRide
|
||||
protected override void CreateHeadImage()
|
||||
{
|
||||
base.CreateHeadImage();
|
||||
if (diff < 0)
|
||||
if (Diff < 0)
|
||||
((RectTransform)head.transform).anchoredPosition = new Vector2(((RectTransform)head.transform).anchoredPosition.x, -800f);
|
||||
}
|
||||
|
||||
private double preTime;
|
||||
//设置当前玩家属性
|
||||
public void SetPlayer(string name, double distance, double totalDistance, double cadance,double heartRate, double wkg, int userId,double power,double currentPlayerDistance,int frame)
|
||||
public override void SetPlayer(string name, double speed, double preDistance, double endDistance, double cadance, double heartRate, double wkg, int userId, double power, double currentPlayerDistance, int frame)
|
||||
{
|
||||
if (manager == null)
|
||||
{
|
||||
@ -57,13 +51,17 @@ namespace Assets.Scripts.Scenes.VideoRide
|
||||
this.wkg = wkg;
|
||||
this.userName = name;
|
||||
this.cadance = cadance;
|
||||
this.totalDistance = totalDistance;
|
||||
this.totalDistance = endDistance;
|
||||
this.heartRate = (int?)heartRate;
|
||||
this.userId = userId;
|
||||
this.power = power;
|
||||
this.speed = distance * 3600;
|
||||
this.diff = totalDistance - currentPlayerDistance;
|
||||
this.speed = speed;
|
||||
this.Speed = speed/3.6;
|
||||
this.Diff = endDistance - currentPlayerDistance;
|
||||
this.currentFrame = frame;
|
||||
this.PreDistance = preDistance * 1000;
|
||||
this.EndDistance = endDistance * 1000;
|
||||
this.OnlineSpeed = speed / 3.6;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -37,7 +37,7 @@ namespace Assets.Scripts.Scenes.VideoRide
|
||||
private bool isStart { get; set; }
|
||||
private Route route { get; set; }
|
||||
public MapRoute mapRoute { get; set; }
|
||||
public RouteResultParam selectParamModel;
|
||||
public RouteResultParam selectParamModel { get; set; }
|
||||
public RouteResult routeResult;
|
||||
public string recordId { get; set; }
|
||||
public DateTime startTime { get; set; }
|
||||
@ -115,6 +115,7 @@ namespace Assets.Scripts.Scenes.VideoRide
|
||||
RouteId = routeId
|
||||
};
|
||||
}
|
||||
Debug.Log("start");
|
||||
endDistance = 0;
|
||||
videoLoading = FindObjectOfType<VideoLoading>();
|
||||
}
|
||||
@ -158,7 +159,7 @@ namespace Assets.Scripts.Scenes.VideoRide
|
||||
return rankingList;
|
||||
}
|
||||
|
||||
List<AbstractVideoPlayer> visibleRiders = new List<AbstractVideoPlayer>();//当前线路上的人
|
||||
public List<AbstractVideoPlayer> visibleRiders = new List<AbstractVideoPlayer>();//当前线路上的人
|
||||
private const int limits = 5;//在线的其他人数
|
||||
private double MaxVisibleDistance = 200d;//最大显示距离
|
||||
//创建当前线路其他选手
|
||||
@ -166,11 +167,15 @@ namespace Assets.Scripts.Scenes.VideoRide
|
||||
{
|
||||
if (list == null || list.Count == 0)
|
||||
{
|
||||
var currentList = FindObjectsOfType<RiderRenderer>();
|
||||
foreach (var item in currentList)
|
||||
{
|
||||
item.Speed = 0;
|
||||
item.Paused = true;
|
||||
}
|
||||
return;
|
||||
}
|
||||
CreateCurrentPlayer(list);//如果是观察者模式创建观察主人工
|
||||
var onlinelist = MapUDPService.GetOnlineUsers(App.RouteIdParam);//最新列表
|
||||
var currentPlayerInfo = onlinelist.Where(c => c.Id == CurrentPlayer.UserId).FirstOrDefault();
|
||||
var trainController = GetComponent<ARTrainingController>();
|
||||
//移除退出的选手
|
||||
var players = FindObjectsOfType<OnlineVideoPlayer>();
|
||||
foreach (var item in players)
|
||||
@ -180,11 +185,11 @@ namespace Assets.Scripts.Scenes.VideoRide
|
||||
{
|
||||
rideObjs.Remove(item);
|
||||
visibleRiders.Remove(item);
|
||||
//item.Destroy();//TODO:
|
||||
//trainController.RemoveRider(item.UserId);
|
||||
}
|
||||
}
|
||||
|
||||
var needUpdateList = list.Where(c=>Math.Abs(c.EndDistance-CurrentPlayer.totalDistance)*1000 <= MaxVisibleDistance).Take(limits).ToList();
|
||||
var currentPlayerInfo = list.Where(c => c.IsSelf).FirstOrDefault();
|
||||
var needUpdateList = list.OrderByDescending(c=>c.IsSelf).ToList();
|
||||
foreach (var item in needUpdateList)
|
||||
{
|
||||
var onlineRider = item as OnlineRiderModel;
|
||||
@ -192,17 +197,18 @@ namespace Assets.Scripts.Scenes.VideoRide
|
||||
//更新
|
||||
if (visibleItem != null)
|
||||
{
|
||||
var online = visibleItem as OnlineVideoPlayer;
|
||||
online.SetPlayer(onlineRider.NickName, onlineRider.EndDistance - onlineRider.PreDistance, onlineRider.EndDistance, item.Cadence, item.HeartRate, onlineRider.WeightKg, item.UserId, onlineRider.Power, currentPlayerInfo.EndDistance, onlineRider.FrameRate.Value);
|
||||
visibleItem.SetPlayer(onlineRider.NickName, onlineRider.Speed, onlineRider.PreDistance, onlineRider.EndDistance, item.Cadence, item.HeartRate, onlineRider.WeightKg, item.UserId, onlineRider.Power, currentPlayerInfo.EndDistance, onlineRider.FrameRate.Value);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (currentPlayerInfo != null)
|
||||
if (currentPlayerInfo == null)
|
||||
return;
|
||||
var diff = item.EndDistance % mapData.TotalDistance - currentPlayerInfo.EndDistance % mapData.TotalDistance;
|
||||
if (Math.Abs(diff * 1000) <= MaxVisibleDistance)
|
||||
{
|
||||
var diff = item.EndDistance % mapData.TotalDistance - currentPlayerInfo.EndDistance % mapData.TotalDistance;
|
||||
if (Math.Abs(diff * 1000) <= MaxVisibleDistance)
|
||||
GameObject obj = null;
|
||||
if (!item.IsSelf)
|
||||
{
|
||||
GameObject obj;
|
||||
if (onlineRider.Sex == 1)
|
||||
{
|
||||
obj = Instantiate(OnlinePlayer, transform);
|
||||
@ -211,43 +217,44 @@ namespace Assets.Scripts.Scenes.VideoRide
|
||||
{
|
||||
obj = Instantiate(OnlinePlayer_NV, transform);
|
||||
}
|
||||
|
||||
var online = obj.GetComponentInChildren<OnlineVideoPlayer>();
|
||||
var rideObj = obj.GetComponentInChildren<RiderRenderer>();
|
||||
rideObjs.Add(online,rideObj);
|
||||
online.SetStartDistance(item.EndDistance);
|
||||
rideObj.Distance = (float)online.StartDistance;
|
||||
rideObj.RouteDistance = rideObj.Distance;
|
||||
rideObjs.Add(online, rideObj);
|
||||
visibleRiders.Add(online);
|
||||
online.SetPlayer(onlineRider.NickName, onlineRider.EndDistance - onlineRider.PreDistance, onlineRider.EndDistance, item.Cadence, item.HeartRate, onlineRider.WeightKg, item.UserId, onlineRider.Power, currentPlayerInfo.EndDistance, onlineRider.FrameRate.Value);
|
||||
trainController.AddRider(onlineRider);
|
||||
online.SetPlayer(onlineRider.NickName, onlineRider.Speed, onlineRider.PreDistance, onlineRider.EndDistance, item.Cadence, item.HeartRate, onlineRider.WeightKg, item.UserId, onlineRider.Power, currentPlayerInfo.EndDistance, onlineRider.FrameRate.Value);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (App.CurrentUser.Sex == 1)
|
||||
{
|
||||
var playerprefab = Resources.Load<GameObject>("UI/Prefab/AR/VidePlayer");
|
||||
videoPlayer = Instantiate(playerprefab, transform);
|
||||
}
|
||||
else
|
||||
{
|
||||
var playerprefabNV = Resources.Load<GameObject>("UI/Prefab/AR/VidePlayer_NV");
|
||||
videoPlayer = Instantiate(playerprefabNV, transform);
|
||||
}
|
||||
CurrentPlayer = videoPlayer.GetComponent<AbstractVideoPlayer>();
|
||||
var vv = videoPlayer.GetComponent<VideoPlayer>();
|
||||
vv.SetEndDistance(item.EndDistance);
|
||||
CurrentPlayer.SetStartDistance(item.EndDistance);
|
||||
var rideObj = videoPlayer.GetComponent<RiderRenderer>();
|
||||
rideObj.Distance = (float)CurrentPlayer.StartDistance;
|
||||
rideObj.RouteDistance = rideObj.Distance;
|
||||
rideObjs.Add(CurrentPlayer, rideObj);
|
||||
visibleRiders.Add(CurrentPlayer);
|
||||
CurrentPlayer.SetPlayer(onlineRider.NickName, onlineRider.Speed, onlineRider.PreDistance, onlineRider.EndDistance, item.Cadence, item.HeartRate, onlineRider.WeightKg, item.UserId, onlineRider.Power, currentPlayerInfo.EndDistance, onlineRider.FrameRate.Value);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
//观察者模式随机选择当前骑行的人作为观察对象
|
||||
private void CreateCurrentPlayer(List<BaseRider> list)
|
||||
{
|
||||
if (_aRMode == ARMode.INSPECT && CurrentPlayer == null)
|
||||
{
|
||||
var currentPlayer = list.FirstOrDefault();
|
||||
if (currentPlayer != null)
|
||||
{
|
||||
var onlineRider = currentPlayer as OnlineRiderModel;
|
||||
GameObject obj;
|
||||
if (onlineRider.Sex == 1)
|
||||
{
|
||||
obj = Instantiate(OnlinePlayer, transform);
|
||||
}
|
||||
else
|
||||
{
|
||||
obj = Instantiate(OnlinePlayer_NV, transform);
|
||||
}
|
||||
var online = obj.GetComponent<OnlineVideoPlayer>();
|
||||
online.SetPlayer(onlineRider.NickName, onlineRider.EndDistance - onlineRider.PreDistance, onlineRider.EndDistance, onlineRider.Cadence, onlineRider.HeartRate, onlineRider.TotalTicks, onlineRider.UserId, onlineRider.Power, onlineRider.EndDistance, onlineRider.FrameRate.Value);
|
||||
obj.transform.DOMoveX(0, 1);
|
||||
ChangePlayer(currentPlayer.UserId);
|
||||
CurrentPlayer = online;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//设置当前是骑行模式还是观察模式
|
||||
public void SetCurrentMode(ARMode aRMode)
|
||||
{
|
||||
@ -256,7 +263,8 @@ namespace Assets.Scripts.Scenes.VideoRide
|
||||
uimanager.SetCurrentMode(aRMode);
|
||||
if (_aRMode != ARMode.INSPECT)
|
||||
{
|
||||
InitCurrentPlayer();
|
||||
//InitCurrentPlayer();
|
||||
Debug.Log("ContinueAsync");
|
||||
ContinueAsync();
|
||||
}
|
||||
else
|
||||
@ -267,21 +275,6 @@ namespace Assets.Scripts.Scenes.VideoRide
|
||||
public GameObject videoPlayer;
|
||||
public GameObject target;
|
||||
|
||||
//初始化人物模型
|
||||
public void InitCurrentPlayer()
|
||||
{
|
||||
if (App.CurrentUser.Sex == 1)
|
||||
{
|
||||
var playerprefab = Resources.Load<GameObject>("UI/Prefab/AR/VidePlayer");
|
||||
videoPlayer = Instantiate(playerprefab, transform);
|
||||
}
|
||||
else
|
||||
{
|
||||
var playerprefabNV = Resources.Load<GameObject>("UI/Prefab/AR/VidePlayer_NV");
|
||||
videoPlayer = Instantiate(playerprefabNV, transform);
|
||||
}
|
||||
CurrentPlayer = videoPlayer.GetComponent<AbstractVideoPlayer>();
|
||||
}
|
||||
//切换人物 TODO:替换写法
|
||||
public void ChangePlayer(int userId)
|
||||
{
|
||||
@ -298,7 +291,7 @@ namespace Assets.Scripts.Scenes.VideoRide
|
||||
var onlineRider = currentPlayer as OnlineRiderModel;
|
||||
var obj = Instantiate(OnlinePlayer, transform);
|
||||
var online = obj.GetComponent<OnlineVideoPlayer>();
|
||||
online.SetPlayer(onlineRider.NickName, onlineRider.EndDistance-onlineRider.PreDistance, onlineRider.EndDistance, onlineRider.Cadence, onlineRider.HeartRate, 0, onlineRider.UserId, onlineRider.Power, onlineRider.EndDistance, onlineRider.FrameRate.Value);
|
||||
online.SetPlayer(onlineRider.NickName, onlineRider.Speed,onlineRider.PreDistance, onlineRider.EndDistance, onlineRider.Cadence, onlineRider.HeartRate, 0, onlineRider.UserId, onlineRider.Power, onlineRider.EndDistance, onlineRider.FrameRate.Value);
|
||||
CurrentPlayer = online;
|
||||
}
|
||||
var clearList = players.Where(c => c.UserId != userId);
|
||||
@ -314,7 +307,7 @@ namespace Assets.Scripts.Scenes.VideoRide
|
||||
{
|
||||
return infoPanel;
|
||||
}
|
||||
//骑行记录
|
||||
//继续骑行
|
||||
public void ContinueAsync()
|
||||
{
|
||||
//骑行结果
|
||||
@ -322,23 +315,22 @@ namespace Assets.Scripts.Scenes.VideoRide
|
||||
{
|
||||
routeResult = App.routeResult;
|
||||
selectParamModel = App.routeResult.ContinueCyclingParam;
|
||||
Debug.Log("selectParamModel"+ selectParamModel.ContinueMark);
|
||||
SetCyclingModel(CyclingModel.Single);
|
||||
endDistance = routeResult.EndDistance;
|
||||
//TODO:继续骑行
|
||||
mediaPlayer.Control.SeekToFrame(routeResult.LastFrame ?? 0);
|
||||
var v = FindObjectOfType<VideoPlayer>();
|
||||
v.SetEndDistance(endDistance);
|
||||
//mediaPlayer.Control.SeekToFrame(routeResult.LastFrame ?? 0);
|
||||
}
|
||||
}
|
||||
//设置骑行模式
|
||||
public void SetCyclingModel(CyclingModel mode)
|
||||
{
|
||||
startTime = UIManager.Now.GetDateTime();
|
||||
Debug.Log("SetCyclingModel" + selectParamModel.ContinueMark);
|
||||
this.cyclingModel = mode;
|
||||
switch (cyclingModel)
|
||||
{
|
||||
case CyclingModel.Single:
|
||||
cyclingController = new SingleModel(route, selectParamModel);
|
||||
cyclingController = new ARSingleModel(route, selectParamModel);
|
||||
break;
|
||||
case CyclingModel.GameRoom:
|
||||
cyclingController = new GameModel(route, selectParamModel);
|
||||
@ -367,7 +359,6 @@ namespace Assets.Scripts.Scenes.VideoRide
|
||||
//设置视频源文件
|
||||
public void SetMedia(string path)
|
||||
{
|
||||
return;
|
||||
if (mediaPlayer != null)
|
||||
{
|
||||
mediaPlayer.OpenMedia(new MediaPath(path,MediaPathType.AbsolutePathOrURL),false);
|
||||
@ -378,8 +369,6 @@ namespace Assets.Scripts.Scenes.VideoRide
|
||||
{
|
||||
return isStop;
|
||||
}
|
||||
double preframe = 0;
|
||||
double preDistance = 0;
|
||||
|
||||
//暂停
|
||||
public void Pause()
|
||||
@ -400,11 +389,7 @@ namespace Assets.Scripts.Scenes.VideoRide
|
||||
{
|
||||
return mediaPlayer.Control.GetCurrentTimeFrames();
|
||||
}
|
||||
|
||||
|
||||
Vector3 currentCameraRotation = Vector3.zero;
|
||||
Vector3 mVelocity;
|
||||
float prePos = 0f;
|
||||
|
||||
public float ratio = 111.676f;
|
||||
public float startOffset = 0f;
|
||||
//获取AR骑行配置信息
|
||||
@ -498,7 +483,6 @@ namespace Assets.Scripts.Scenes.VideoRide
|
||||
return new Vector2d(0, 0);
|
||||
}
|
||||
}
|
||||
|
||||
private void OnDestroy()
|
||||
{
|
||||
App.gameRoomDetail = null;
|
||||
|
||||
@ -225,7 +225,17 @@ namespace Assets.Scripts.Scenes.VideoRide
|
||||
return;
|
||||
startBtnLock = true;
|
||||
var ui = manager.GetCanvasTransform();
|
||||
InitAR();
|
||||
canvasGroup.DOFade(0, 1).onComplete += () => {
|
||||
gameObject.SetActive(false);
|
||||
manager.StartGame();
|
||||
manager.SetCyclingModel(Assets.Scenes.Ride.Scripts.Model.CyclingModel.Single);
|
||||
manager.SetCurrentMode(VideoGameManager.ARMode.RIDE);
|
||||
};
|
||||
}
|
||||
|
||||
public async void InitAR()
|
||||
{
|
||||
//加载本地文件
|
||||
var route = manager.mapRoute;
|
||||
var arDataPath = $"{PFConstants.ARFolder}/{route.Id}/{route.Id}.json";
|
||||
@ -237,20 +247,14 @@ namespace Assets.Scripts.Scenes.VideoRide
|
||||
await Task.Run<ARData>((Func<ARData>)(() => aRData = ARData.LoadFromFile(arDataPath)));
|
||||
await Task.Run<RouteDetailData>((Func<RouteDetailData>)(() => routeDetailData = RouteDetailData.LoadFromFile(videoRoute)));
|
||||
var arController = FindObjectOfType<ARTrainingController>();
|
||||
arController.Initialize(aRData, routeDetailData);
|
||||
|
||||
canvasGroup.DOFade(0, 1).onComplete += () => {
|
||||
gameObject.SetActive(false);
|
||||
manager.StartGame();
|
||||
manager.SetCyclingModel(Assets.Scenes.Ride.Scripts.Model.CyclingModel.Single);
|
||||
manager.SetCurrentMode(VideoGameManager.ARMode.RIDE);
|
||||
};
|
||||
arController.Initialize(aRData, routeDetailData);
|
||||
}
|
||||
|
||||
|
||||
public void StartRide(int seconds)
|
||||
{
|
||||
var ui = manager.GetCanvasTransform();
|
||||
InitAR();
|
||||
canvasGroup.DOFade(0, 0).onComplete += () => {
|
||||
gameObject.SetActive(false);
|
||||
manager.SetCyclingModel(CyclingModel.GameRoom);
|
||||
@ -259,6 +263,8 @@ namespace Assets.Scripts.Scenes.VideoRide
|
||||
};
|
||||
UIManager.ShowGameRoomCountDownPanel(seconds,()=> {
|
||||
manager.StartGame();
|
||||
manager.SetCyclingModel(Assets.Scenes.Ride.Scripts.Model.CyclingModel.Single);
|
||||
manager.SetCurrentMode(VideoGameManager.ARMode.RIDE);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@ -1,21 +1,12 @@
|
||||
using Assets.AR;
|
||||
using Assets.Scenes.Ride.Scripts;
|
||||
using Assets.Scenes.Ride.Scripts.Model;
|
||||
using Assets.Scenes.Ride.Scripts.Model;
|
||||
using Assets.Scenes.Ride.Scripts.Model.CyclingModels;
|
||||
using DG.Tweening;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using System.Text;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Assets.Scripts.Scenes.VideoRide
|
||||
{
|
||||
public class VideoPlayer : AbstractVideoPlayer
|
||||
{
|
||||
public double EndDistance => totalDistance;
|
||||
private bool isSingle = true;
|
||||
protected override void Start()
|
||||
{
|
||||
@ -25,7 +16,7 @@ namespace Assets.Scripts.Scenes.VideoRide
|
||||
userName = App.CurrentUser.Nickname;
|
||||
}
|
||||
|
||||
protected override bool GetStart()
|
||||
protected bool GetStart()
|
||||
{
|
||||
return manager.IsStart();
|
||||
}
|
||||
@ -43,6 +34,8 @@ namespace Assets.Scripts.Scenes.VideoRide
|
||||
public void SetEndDistance(double distance)
|
||||
{
|
||||
this.totalDistance = distance;
|
||||
this.PreDistance = distance * 1000;
|
||||
this.EndDistance = PreDistance;
|
||||
}
|
||||
|
||||
public void Complete()
|
||||
@ -153,5 +146,16 @@ namespace Assets.Scripts.Scenes.VideoRide
|
||||
manager.Save(totalDistance);
|
||||
}
|
||||
}
|
||||
|
||||
public override void SetPlayer(string name, double speed, double preDistance, double endDistance, double cadance, double heartRate, double wkg, int userId, double power, double currentPlayerDistance, int frame)
|
||||
{
|
||||
if (manager == null)
|
||||
{
|
||||
manager = FindObjectOfType<VideoGameManager>();
|
||||
}
|
||||
this.PreDistance = preDistance * 1000;
|
||||
this.EndDistance = endDistance * 1000;
|
||||
this.OnlineSpeed = speed / 3.6;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -50,7 +50,7 @@ class GameRoomDownloadTask : MonoBehaviour
|
||||
public void UpdateProcess(float process)
|
||||
{
|
||||
slider.value = process;
|
||||
if (process >= 100)
|
||||
if (process >= 1)
|
||||
{
|
||||
done.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.Models;
|
||||
using Cysharp.Threading.Tasks;
|
||||
using DG.Tweening;
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using UnityEngine;
|
||||
using UnityEngine.EventSystems;
|
||||
using UnityEngine.Networking;
|
||||
using UnityEngine.SceneManagement;
|
||||
using UnityEngine.UI;
|
||||
|
||||
|
||||
public class GameRoomMapItem : MonoBehaviour, IPointerExitHandler, IPointerEnterHandler, IPointerUpHandler
|
||||
public class GameRoomMapItem : MonoBehaviour, IPointerExitHandler, IPointerEnterHandler, IPointerUpHandler,IProgress<float>
|
||||
{
|
||||
public class PropNames
|
||||
{
|
||||
@ -39,15 +45,11 @@ public class GameRoomMapItem : MonoBehaviour, IPointerExitHandler, IPointerEnter
|
||||
listController = FindObjectOfType<GameRoomListController>();
|
||||
}
|
||||
|
||||
// Update is called once per frame
|
||||
void Update()
|
||||
{
|
||||
|
||||
}
|
||||
float? localY = null;
|
||||
MapRoute map;
|
||||
Dictionary<string, Texture> caches;
|
||||
private MapRouteAreaItem area = null;
|
||||
Slider slider;
|
||||
public void Initial(MapRoute myMap, Dictionary<string, Texture> caches, MapRouteAreaItem area = null)
|
||||
{
|
||||
if (caches != null)
|
||||
@ -64,7 +66,7 @@ public class GameRoomMapItem : MonoBehaviour, IPointerExitHandler, IPointerEnter
|
||||
var downloadBtn = transform.Find("DownLoadModal/DownLoad").gameObject;
|
||||
var downloading = transform.Find("DownLoadModal/Downloading").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 path = PFConstants.VideoFolder;
|
||||
@ -76,49 +78,10 @@ public class GameRoomMapItem : MonoBehaviour, IPointerExitHandler, IPointerEnter
|
||||
downloading.SetActive(true);
|
||||
downloadTxt.SetActive(false);
|
||||
slider.gameObject.SetActive(true);
|
||||
Loom.Current.StartCoroutine(Utils.DownloadFileWithProcess(map.FileName, map.Url, path,(p, req) =>
|
||||
{
|
||||
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);
|
||||
}
|
||||
}));
|
||||
Loom.Download(map);
|
||||
});
|
||||
|
||||
transform.Find("Name").GetComponent<Text>().text = myMap.Name;
|
||||
|
||||
transform.Find("IdContainer/Text").GetComponent<Text>().text = $"#{myMap.Id}";
|
||||
transform.Find("TimesContainer").gameObject.SetActive(myMap.MineCount > 0);
|
||||
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);
|
||||
}
|
||||
|
||||
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()
|
||||
{
|
||||
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.data.Count == 0)
|
||||
|
||||
@ -1,10 +1,14 @@
|
||||
using Assets.Scenes.Ride.Scripts;
|
||||
using Assets.Scripts.Apis.Models;
|
||||
using Cysharp.Threading.Tasks;
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Threading;
|
||||
using UnityEngine;
|
||||
using UnityEngine.Networking;
|
||||
|
||||
/// <summary>
|
||||
/// 异步线程更新ui工具类
|
||||
@ -174,4 +178,27 @@ public class Loom : MonoBehaviour
|
||||
_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