ar观察者模式
This commit is contained in:
1 parent
df936c4e04
commit
7822584cdd
62 files changed
+8331
-7049
No files matched your search
@@ -54,6 +54,7 @@ namespace Assets.Scenes.Ride.Scripts.Model.CyclingModels
|
||||
#region 获取当前路线在线用户
|
||||
riders.Clear();
|
||||
var onlineUsers = MapUDPService.GetOnlineUsers(recorderData.CurrentRoute.RouteInstance.Id).ToList();
|
||||
onlineUsers = onlineUsers.Where(c => !c.Saved).ToList();
|
||||
foreach (var item in onlineUsers)
|
||||
{
|
||||
riders.Add(new OnlineRiderModel()
|
||||
@@ -68,6 +69,8 @@ namespace Assets.Scenes.Ride.Scripts.Model.CyclingModels
|
||||
Sex = item.Sex,
|
||||
FrameRate = item.FrameRate,
|
||||
Speed = item.Speed,
|
||||
IsWatcher = item.IsWatcher,
|
||||
Saved = item.Saved
|
||||
});
|
||||
}
|
||||
#endregion
|
||||
|
||||
@@ -21,6 +21,9 @@ namespace Assets.Scenes.Ride.Scripts.Model.RiderModels
|
||||
|
||||
public int? FrameRate { get; set; } = 0;
|
||||
|
||||
public bool IsWatcher { get; set; }
|
||||
|
||||
public bool Saved { get; set; }
|
||||
public OutUser GetOutUser(double preDistance, double currentDistance, TurfHelper turfHelper, CyclingStateEnum cyclingState)
|
||||
{
|
||||
if (this.IsSelf)
|
||||
|
||||
@@ -70,16 +70,7 @@ namespace Assets.Scripts.Scenes.VideoRide
|
||||
manager = FindObjectOfType<VideoGameManager>();
|
||||
mapData = manager.GetMapData();
|
||||
ComputeNextSlope();//初始化坡度等
|
||||
if (speed > 0)
|
||||
{
|
||||
animator.Play("rideLoop");
|
||||
}
|
||||
else
|
||||
{
|
||||
animator.Play("idle");
|
||||
}
|
||||
bone_bottle_2 = transform.Find("bone_cable_20");
|
||||
|
||||
}
|
||||
protected virtual void Update()
|
||||
{
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
using System;
|
||||
using System.Linq;
|
||||
using UnityEngine;
|
||||
using Assets.Scenes.Ride.Scripts.Model.RiderModels;
|
||||
|
||||
namespace Assets.Scripts.Scenes.VideoRide
|
||||
{
|
||||
@@ -56,6 +57,7 @@ namespace Assets.Scripts.Scenes.VideoRide
|
||||
if (manager.cyclingController == null)
|
||||
return;
|
||||
var players = manager.cyclingController.riders;
|
||||
players = players.Where(c => ((OnlineRiderModel)c).IsWatcher == false).ToList();
|
||||
var headList = FindObjectsOfType<HeadScript>();
|
||||
var videoPlayer = manager.CurrentPlayer;
|
||||
foreach (var item in players)
|
||||
@@ -73,20 +75,23 @@ namespace Assets.Scripts.Scenes.VideoRide
|
||||
var onlineHead = Instantiate(headPanel, transform);
|
||||
onlineHead.GetComponent<HeadScript>().UserId = item.UserId;
|
||||
onlineHead.transform.position = vector3;
|
||||
if (item.IsSelf)
|
||||
{
|
||||
onlineHead.transform.Find("Main").gameObject.SetActive(true);
|
||||
onlineHead.transform.SetAsLastSibling();
|
||||
}
|
||||
else
|
||||
{
|
||||
onlineHead.transform.SetAsFirstSibling();
|
||||
}
|
||||
currentHead = onlineHead.GetComponent<HeadScript>();
|
||||
}
|
||||
else
|
||||
{
|
||||
currentHead.transform.position = vector3;
|
||||
}
|
||||
//控制海拔图头像
|
||||
if (manager.CurrentPlayer.userId == item.UserId)
|
||||
{
|
||||
currentHead.transform.Find("Main").gameObject.SetActive(true);
|
||||
currentHead.transform.SetAsLastSibling();
|
||||
}
|
||||
else
|
||||
{
|
||||
currentHead.transform.Find("Main").gameObject.SetActive(false);
|
||||
currentHead.transform.SetAsFirstSibling();
|
||||
}
|
||||
}
|
||||
//删除离线的人
|
||||
foreach (var item in headList)
|
||||
|
||||
@@ -56,7 +56,7 @@ namespace Assets.Scripts.Scenes.VideoRide
|
||||
trail.startColor = new Color(0.9764706f, 0.1882353f, 0.5254902f, 1f);
|
||||
trail.endColor = new Color(0.9764706f, 0.1882353f, 0.5254902f, 1f);
|
||||
}
|
||||
|
||||
float timer = 0f;
|
||||
private void Update()
|
||||
{
|
||||
if (cyclingCotroller.CurrentPlayer != null)
|
||||
@@ -69,6 +69,14 @@ namespace Assets.Scripts.Scenes.VideoRide
|
||||
Vector2 vp2 = _minicamera.WorldToViewportPoint(_player.transform.localPosition);//将三维物体的世界坐标转换为视口坐标
|
||||
((RectTransform)tr.transform).anchoredPosition = new Vector2((vp2.x * RectRoot.sizeDelta.x) - (RectRoot.sizeDelta.x * 0.5f), (vp2.y * RectRoot.sizeDelta.y) - (RectRoot.sizeDelta.y * 0.5f));
|
||||
trail.enabled = cyclingCotroller.CurrentPlayer.power > 0;
|
||||
|
||||
timer += Time.deltaTime;
|
||||
|
||||
while (timer >= 1)
|
||||
{
|
||||
CreateMiniPath();
|
||||
timer = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -157,6 +165,33 @@ namespace Assets.Scripts.Scenes.VideoRide
|
||||
CreateLineRender(feat);//创建小地图路线
|
||||
}
|
||||
}
|
||||
|
||||
void CreateMiniPath()
|
||||
{
|
||||
var dat = new List<Vector3>();
|
||||
var mapData = cyclingCotroller.GetMapData();
|
||||
if (mapData != null)
|
||||
{
|
||||
var count = mapData.List.Count;
|
||||
var interval = Math.Max(Math.Ceiling(count / 100D), 1f);
|
||||
for (int i = 0; i < mapData.List.Count; i++)
|
||||
{
|
||||
if (i % interval == 0)
|
||||
{
|
||||
var point = mapData.List[i].Point;
|
||||
Vector3 item = _map.GeoToWorldPosition(new Vector2d(point[0], point[1]));
|
||||
item.y += 5f;
|
||||
if (cyclingCotroller.CurrentPlayer.currentIndex >= i)
|
||||
{
|
||||
dat.Add(item);
|
||||
}
|
||||
}
|
||||
}
|
||||
var feat = new VectorFeatureUnity();
|
||||
feat.Points.Add(dat);
|
||||
CreateRedLineRender(feat);//创建小地图路线
|
||||
}
|
||||
}
|
||||
//创建小地图路线
|
||||
void CreateLineRender(VectorFeatureUnity feat)
|
||||
{
|
||||
|
||||
@@ -29,10 +29,7 @@ namespace Assets.Scripts.Scenes.VideoRide
|
||||
private void Start()
|
||||
{
|
||||
manager = FindObjectOfType<VideoGameManager>();
|
||||
if (manager._aRMode == VideoGameManager.ARMode.INSPECT)
|
||||
{
|
||||
GetComponent<Button>().onClick.AddListener(ButtonListener);
|
||||
}
|
||||
GetComponent<Button>().onClick.AddListener(ButtonListener);
|
||||
}
|
||||
private float timer = 1f;
|
||||
private void Update()
|
||||
@@ -80,8 +77,8 @@ namespace Assets.Scripts.Scenes.VideoRide
|
||||
}
|
||||
private void ButtonListener()
|
||||
{
|
||||
manager.ChangePlayer(Convert.ToInt32(Id));
|
||||
if(manager._aRMode == VideoGameManager.ARMode.INSPECT)
|
||||
manager.ChangePlayer(Convert.ToInt32(Id));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,5 +1,6 @@
|
||||
using Assets.Scenes.Ride.Scripts;
|
||||
using DG.Tweening;
|
||||
using System.Linq;
|
||||
using UnityEngine;
|
||||
using UnityEngine.EventSystems;
|
||||
using UnityEngine.UI;
|
||||
@@ -60,6 +61,7 @@ namespace Assets.Scripts.Scenes.VideoRide
|
||||
timer -= Time.deltaTime;
|
||||
while (timer < 0) {
|
||||
var list = MapUDPService.GetOnlineUsers(App.RouteIdParam);//最新列表
|
||||
list = list.Where(c => c.IsWatcher == false).ToList();
|
||||
rideNum.text = $"{list.Count}";
|
||||
btnRideNum.text = rideNum.text;
|
||||
if (manager._aRMode == VideoGameManager.ARMode.RIDE)
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using Assets.Scenes.Ride.Scripts;
|
||||
using Assets.Scenes.Ride.Scripts.Model.RiderModels;
|
||||
using PolyAndCode.UI;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
@@ -48,6 +49,7 @@ namespace Assets.Scripts.Scenes.VideoRide
|
||||
{
|
||||
if (_contactList != null) _contactList.Clear();
|
||||
var list = MapUDPService.GetOnlineUsers(App.RouteIdParam);
|
||||
list = list.Where(c => c.IsWatcher == false).ToList();
|
||||
var currentPlayer = list.Where(c => c.IsSelf).FirstOrDefault();
|
||||
list = list.Where(c => c.Id != App.CurrentUser.Id).ToList();
|
||||
foreach (var item in list)
|
||||
@@ -73,6 +75,7 @@ namespace Assets.Scripts.Scenes.VideoRide
|
||||
var currentDistance = manager.CurrentPlayer.totalDistance;
|
||||
var currenList = GetComponentsInChildren<ListItem>(true);
|
||||
var list = MapUDPService.GetOnlineUsers(App.RouteIdParam,manager.cyclingController.recorderData.RoomId);//最新列表
|
||||
list = list.Where(c => c.IsWatcher == false).ToList();
|
||||
var currentPlayerInfo = list.Where(c => c.Id.ToString() == manager.CurrentPlayer.UserId.ToString()).FirstOrDefault();
|
||||
list = list.Where(c => c.Id != App.CurrentUser.Id).OrderByDescending(c=>c.EndDistance).ToList();
|
||||
if (currenList.Count() == 0 && list.Count() > 0)
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
|
||||
namespace Assets.Scripts.Scenes.VideoRide
|
||||
{
|
||||
public class RideSettingController : PFUIPanel
|
||||
{
|
||||
public Slider PowerSlider;
|
||||
public Text PowerText;
|
||||
private VideoGameManager manager;
|
||||
// Start is called before the first frame update
|
||||
void Start()
|
||||
{
|
||||
manager = FindObjectOfType<VideoGameManager>();
|
||||
PowerSlider.onValueChanged.AddListener(e =>
|
||||
{
|
||||
PowerText.text = e.ToString("f0") + "W";
|
||||
if (manager.CurrentPlayer != null)
|
||||
{
|
||||
manager.CurrentPlayer.mockpower = e;
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 8c630a81d1477c842ad1599135a73d2d
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -63,8 +63,8 @@ namespace Assets.Scripts.Scenes.VideoRide
|
||||
public ARMode _aRMode { get; set; }
|
||||
public int RankingId { get; set; }
|
||||
|
||||
public Dictionary<IRider,RiderRenderer> rideObjs = new Dictionary<IRider, RiderRenderer>();
|
||||
|
||||
public Dictionary<IRider, PlayerRenderer> rideObjs = new Dictionary<IRider, PlayerRenderer>();
|
||||
|
||||
protected override void Awake()
|
||||
{
|
||||
base.Awake();
|
||||
@@ -83,7 +83,7 @@ namespace Assets.Scripts.Scenes.VideoRide
|
||||
Player_NV = Resources.Load<GameObject>("UI/Prefab/AR/VidePlayer_NV");
|
||||
StartCoroutine(Init());
|
||||
}
|
||||
|
||||
|
||||
void Start()
|
||||
{
|
||||
UIManager.Instance.MainPanel = GetCanvasTransform().GetComponent<PFUIPanel>();
|
||||
@@ -93,7 +93,7 @@ namespace Assets.Scripts.Scenes.VideoRide
|
||||
GetMapRoute();
|
||||
GetMapData();
|
||||
route = new Route(mapData, mapRoute);
|
||||
|
||||
|
||||
if (selectParamModel == null)
|
||||
{
|
||||
selectParamModel = new RouteResultParam
|
||||
@@ -129,7 +129,7 @@ namespace Assets.Scripts.Scenes.VideoRide
|
||||
cyclingController.Run(null);
|
||||
var onlineRiders = cyclingController.riders;
|
||||
try
|
||||
{
|
||||
{
|
||||
CreateOnlineUser(onlineRiders);
|
||||
}
|
||||
catch (Exception e)
|
||||
@@ -144,8 +144,8 @@ namespace Assets.Scripts.Scenes.VideoRide
|
||||
{
|
||||
var endTime = UIManager.Now == null ? DateTime.Now : UIManager.Now.GetDateTime();
|
||||
var startTime = Helper.GetStartTime(endTime, type);
|
||||
var list = ConfigHelper.mapApi.GetRouteRanking(App.RouteIdParam, "1", 0, 10, "", startTime,endTime);
|
||||
if (list.result)
|
||||
var list = ConfigHelper.mapApi.GetRouteRanking(App.RouteIdParam, "1", 0, 10, "", startTime, endTime);
|
||||
if (list.result)
|
||||
{
|
||||
rankingList = list.data;
|
||||
}
|
||||
@@ -158,14 +158,24 @@ namespace Assets.Scripts.Scenes.VideoRide
|
||||
//创建当前线路其他选手
|
||||
private void CreateOnlineUser(List<BaseRider> list)
|
||||
{
|
||||
list = list.Where(c => ((OnlineRiderModel)c).IsWatcher == false).ToList();
|
||||
if (list == null || list.Count == 0)
|
||||
{
|
||||
var currentList = FindObjectsOfType<RiderRenderer>();
|
||||
var currentList = FindObjectsOfType<PlayerRenderer>();
|
||||
foreach (var item in currentList)
|
||||
{
|
||||
item.Speed = 0;
|
||||
item.Paused = true;
|
||||
}
|
||||
rideObjs.Clear();
|
||||
visibleRiders.Clear();
|
||||
//移除退出的选手
|
||||
var onlineUserList = FindObjectsOfType<OnlineVideoPlayer>();
|
||||
foreach (var item in onlineUserList)
|
||||
{
|
||||
DestroyImmediate(item.gameObject);
|
||||
}
|
||||
CurrentPlayer = null;
|
||||
return;
|
||||
}
|
||||
var trainController = GetComponent<ARTrainingController>();
|
||||
@@ -182,7 +192,14 @@ namespace Assets.Scripts.Scenes.VideoRide
|
||||
}
|
||||
}
|
||||
var currentPlayerInfo = list.Where(c => c.IsSelf).FirstOrDefault();
|
||||
var needUpdateList = list.OrderByDescending(c=>c.IsSelf).ToList();
|
||||
var needUpdateList = list.OrderByDescending(c => c.IsSelf).ToList();
|
||||
//如果当前为观察者模式且currentPlayerInfo为null随机选择以为用户观察
|
||||
if (currentPlayerInfo == null)
|
||||
{
|
||||
currentPlayerInfo = needUpdateList.Where(c => c.UserId == currentUserId).FirstOrDefault();
|
||||
if(currentPlayerInfo == null)
|
||||
currentPlayerInfo = needUpdateList.FirstOrDefault();
|
||||
}
|
||||
foreach (var item in needUpdateList)
|
||||
{
|
||||
var onlineRider = item as OnlineRiderModel;
|
||||
@@ -191,11 +208,11 @@ namespace Assets.Scripts.Scenes.VideoRide
|
||||
if (visibleItem != null)
|
||||
{
|
||||
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);
|
||||
if(visibleItem.userId == currentUserId)
|
||||
CurrentPlayer = visibleItem;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (currentPlayerInfo == null)
|
||||
return;
|
||||
var diff = item.EndDistance % mapData.TotalDistance - currentPlayerInfo.EndDistance % mapData.TotalDistance;
|
||||
if (Math.Abs(diff * 1000) <= MaxVisibleDistance)
|
||||
{
|
||||
@@ -211,14 +228,17 @@ namespace Assets.Scripts.Scenes.VideoRide
|
||||
obj = Instantiate(OnlinePlayer_NV, transform);
|
||||
}
|
||||
var online = obj.GetComponentInChildren<OnlineVideoPlayer>();
|
||||
var rideObj = obj.GetComponentInChildren<RiderRenderer>();
|
||||
var rideObj = obj.GetComponentInChildren<PlayerRenderer>();
|
||||
online.SetStartDistance(item.EndDistance);
|
||||
rideObj.Distance = (float)online.StartDistance;
|
||||
rideObj.RouteDistance = rideObj.Distance;
|
||||
rideObj.UserId = item.UserId;
|
||||
rideObjs.Add(online, rideObj);
|
||||
visibleRiders.Add(online);
|
||||
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);
|
||||
if (currentPlayerInfo.UserId == item.UserId)
|
||||
CurrentPlayer = online;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -238,10 +258,11 @@ namespace Assets.Scripts.Scenes.VideoRide
|
||||
vp.SetEndDistance(item.EndDistance);
|
||||
CurrentPlayer.SetStartDistance(item.EndDistance);
|
||||
|
||||
var rideObj = videoPlayer.GetComponent<RiderRenderer>();
|
||||
var rideObj = videoPlayer.GetComponent<PlayerRenderer>();
|
||||
rideObj.Distance = (float)CurrentPlayer.StartDistance;
|
||||
rideObj.RouteDistance = rideObj.Distance;
|
||||
rideObj.IsMain = true;
|
||||
rideObj.UserId = item.UserId;
|
||||
rideObjs.Add(CurrentPlayer, rideObj);
|
||||
visibleRiders.Add(CurrentPlayer);
|
||||
|
||||
@@ -271,33 +292,11 @@ namespace Assets.Scripts.Scenes.VideoRide
|
||||
}
|
||||
public GameObject videoPlayer;
|
||||
public GameObject target;
|
||||
|
||||
private int currentUserId { get; set; }
|
||||
//切换人物 TODO:替换写法
|
||||
public void ChangePlayer(int userId)
|
||||
{
|
||||
var players = FindObjectsOfType<OnlineVideoPlayer>();
|
||||
if (players != null)
|
||||
{
|
||||
CurrentPlayer = players.Where(c => c.UserId == userId).FirstOrDefault();
|
||||
if (CurrentPlayer == null)
|
||||
{
|
||||
var onlineRiders = cyclingController.riders;
|
||||
var currentPlayer = onlineRiders.Where(c => c.UserId == userId).FirstOrDefault();
|
||||
if (currentPlayer != null)
|
||||
{
|
||||
var onlineRider = currentPlayer as OnlineRiderModel;
|
||||
var obj = Instantiate(OnlinePlayer, transform);
|
||||
var online = obj.GetComponent<OnlineVideoPlayer>();
|
||||
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);
|
||||
foreach (var item in clearList)
|
||||
{
|
||||
item.Destroy();
|
||||
}
|
||||
}
|
||||
}
|
||||
currentUserId = userId;
|
||||
}
|
||||
//获取角色头顶信息预制件
|
||||
public GameObject GetHeadInfo()
|
||||
@@ -315,6 +314,7 @@ namespace Assets.Scripts.Scenes.VideoRide
|
||||
Debug.Log("selectParamModel"+ selectParamModel.ContinueMark);
|
||||
SetCyclingModel(CyclingModel.Single);
|
||||
endDistance = routeResult.EndDistance;
|
||||
App.routeResult = null;
|
||||
//mediaPlayer.Control.SeekToFrame(routeResult.LastFrame ?? 0);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -48,7 +48,7 @@ namespace Assets.Scripts.Scenes.VideoRide
|
||||
protected RawImage head;
|
||||
protected RawImage country;
|
||||
protected RawImage mapCountry;
|
||||
protected RawImage altitudeGraph;
|
||||
protected RawImage altitudeGraph { get; set; }
|
||||
protected Transform mapRanking;
|
||||
protected Text mapId;
|
||||
|
||||
@@ -121,7 +121,7 @@ namespace Assets.Scripts.Scenes.VideoRide
|
||||
|
||||
if (File.Exists(filepath))
|
||||
{
|
||||
//TODO:暂时隐藏watch.SetActive(true);
|
||||
watch.SetActive(true);
|
||||
slider.value = 100;
|
||||
download.gameObject.SetActive(false);
|
||||
manager.SetMedia(filepath);
|
||||
@@ -208,7 +208,7 @@ namespace Assets.Scripts.Scenes.VideoRide
|
||||
mapCountry.texture = manager.GetCountryImageByCode(route.CountryCode);//路书国家
|
||||
}
|
||||
#endregion
|
||||
|
||||
Utils.DisplayImage(altitudeGraph, route.AltitudeGraph,true,null,1f);//渲染海拔图
|
||||
//显示线路背景图
|
||||
DrawMapRouteAsync(route.Id);
|
||||
//查询排行榜 TODO优化
|
||||
@@ -263,9 +263,7 @@ namespace Assets.Scripts.Scenes.VideoRide
|
||||
};
|
||||
UIManager.ShowGameRoomCountDownPanel(seconds,()=> {
|
||||
manager.StartGame();
|
||||
//manager.SetCyclingModel(CyclingModel.GameRoom);
|
||||
//manager.SetCurrentMode(VideoGameManager.ARMode.RIDE);
|
||||
});
|
||||
},false,true);
|
||||
}
|
||||
|
||||
protected async void DownloadAsync(BaseEventData baseEvent)
|
||||
@@ -315,10 +313,14 @@ namespace Assets.Scripts.Scenes.VideoRide
|
||||
{
|
||||
var canvasGroup = transform.GetComponent<CanvasGroup>();
|
||||
var ui = manager.GetCanvasTransform();
|
||||
InitAR();
|
||||
MapUDPService.IsWatch = true;
|
||||
MapUDPService.SendGizpModel();
|
||||
canvasGroup.DOFade(0, 1).onComplete += () => {
|
||||
gameObject.SetActive(false);
|
||||
ui.gameObject.SetActive(true);
|
||||
manager.SetCurrentMode(VideoGameManager.ARMode.INSPECT);
|
||||
manager.StartGame();
|
||||
};
|
||||
}
|
||||
protected void Cancel(BaseEventData baseEvent)
|
||||
|
||||
@@ -63,7 +63,7 @@ namespace Assets.Scripts.Scenes.VideoRide
|
||||
{
|
||||
power = mockpower;
|
||||
cadance = 50;
|
||||
heartRate = 120;
|
||||
heartRate = 160;
|
||||
}
|
||||
//#endif
|
||||
weight = App.CurrentUser.Weight;
|
||||
|
||||
@@ -7,6 +7,7 @@ using DG.Tweening;
|
||||
using UnityEngine.SceneManagement;
|
||||
using Assets.Scenes.Ride.Scripts.Model.CyclingModels;
|
||||
using static Assets.Scripts.Scenes.VideoRide.VideoGameManager;
|
||||
using Assets.AR;
|
||||
|
||||
namespace Assets.Scripts.Scenes.VideoRide
|
||||
{
|
||||
@@ -52,9 +53,6 @@ namespace Assets.Scripts.Scenes.VideoRide
|
||||
Image ftpImage { get; set; }
|
||||
Text wkg { get; set; }
|
||||
|
||||
public Text PowerText;
|
||||
public Slider PowerSlider;
|
||||
|
||||
// Start is called before the first frame update
|
||||
void Start()
|
||||
{
|
||||
@@ -69,14 +67,10 @@ namespace Assets.Scripts.Scenes.VideoRide
|
||||
{
|
||||
|
||||
mapName.text = manager.GetMapRoute().Name;
|
||||
//#if UNITY_EDITOR
|
||||
//infoText.gameObject.SetActive(true);
|
||||
//infoText.text = $"帧数:{manager.GetCurrentFrame()}";
|
||||
//#endif
|
||||
if (manager.CurrentPlayer != null)
|
||||
{
|
||||
power.text = Math.Round(manager.CurrentPlayer.power).ToString();
|
||||
speed.text = Math.Round(manager.CurrentPlayer.speed).ToString();
|
||||
speed.text = manager.CurrentPlayer.speed.ToString("f1");
|
||||
heartRate.text = Math.Round((manager.CurrentPlayer.heartRate ?? 0d)).ToString();
|
||||
cadance.text = Math.Round(manager.CurrentPlayer.cadance).ToString();
|
||||
playerTimer.text = Helper.FormatTicks(manager.CurrentPlayer.ticks);
|
||||
@@ -84,13 +78,33 @@ namespace Assets.Scripts.Scenes.VideoRide
|
||||
left.fillAmount = (float)(Math.Round(manager.CurrentPlayer.power) / MAXPOWER_RATE);
|
||||
right.fillAmount = (float)(Math.Round((manager.CurrentPlayer.heartRate ?? 0f)) / MAXHEARRATE);
|
||||
SetSlopePanel();
|
||||
//ftp
|
||||
ftpImage.fillAmount = (float)(manager.CurrentPlayer.wkg / MAXWKG);
|
||||
wkg.text = $"{manager.CurrentPlayer.wkg}w/kg";
|
||||
//explosive.SetActive(true);TODO:心率过高的时候显示
|
||||
//心率过高的时候显示
|
||||
if (manager.CurrentPlayer.UserId == App.CurrentUser.Id)
|
||||
{
|
||||
explosive.SetActive(ComputeHearRateRatio(manager.CurrentPlayer.heartRate ?? 0) > MAX_HEART_RATIO);
|
||||
}
|
||||
else
|
||||
{
|
||||
explosive.SetActive(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
private const float MAX_HEART_RATIO = 0.9f;
|
||||
private float ComputeHearRateRatio(int heartRate)
|
||||
{
|
||||
// 220 - 年龄= 最大心率 ratio = heartRate /最大心率
|
||||
var age = DateTime.Now.Year - App.CurrentUser.Birthday?.Year;
|
||||
if (DateTime.Now.Month - App.CurrentUser.Birthday?.Month > 0 && DateTime.Now.Day - App.CurrentUser.Birthday?.Day > 0)
|
||||
{
|
||||
age += 1;
|
||||
}
|
||||
age = age ?? 0;
|
||||
var ratio = heartRate / (220 - age);
|
||||
return (float)ratio;
|
||||
}
|
||||
|
||||
public void SetCurrentMode(VideoGameManager.ARMode aRMode)
|
||||
{
|
||||
@@ -142,15 +156,11 @@ namespace Assets.Scripts.Scenes.VideoRide
|
||||
//
|
||||
explosive = transform.Find("Panel/Explosive").gameObject;
|
||||
//toolbar 事件注册
|
||||
UIManager.AddEvent(settingBtn, UnityEngine.EventSystems.EventTriggerType.PointerClick, PauseClick);
|
||||
UIManager.AddEvent(settingBtn, UnityEngine.EventSystems.EventTriggerType.PointerClick, ShowSetting);
|
||||
UIManager.AddEvent(changeViewBtn, UnityEngine.EventSystems.EventTriggerType.PointerClick, ChangeViewClick);
|
||||
UIManager.AddEvent(deviceBtn, UnityEngine.EventSystems.EventTriggerType.PointerClick, DeviceClick);
|
||||
UIManager.AddEvent(quitBtn, UnityEngine.EventSystems.EventTriggerType.PointerClick, QuitClick);
|
||||
PowerSlider.onValueChanged.AddListener(e =>
|
||||
{
|
||||
PowerText.text = e.ToString("f0") + "W";
|
||||
manager.CurrentPlayer.mockpower = e;
|
||||
});
|
||||
|
||||
}
|
||||
//设置坡度信息
|
||||
private void SetSlopePanel()
|
||||
@@ -188,10 +198,9 @@ namespace Assets.Scripts.Scenes.VideoRide
|
||||
}
|
||||
}
|
||||
|
||||
private void PauseClick(BaseEventData e)
|
||||
private void ShowSetting(BaseEventData e)
|
||||
{
|
||||
settingPanel.SetActive(true);
|
||||
settingPanel.transform.SetAsLastSibling();
|
||||
UIManager.ShowRideSettingPanel();
|
||||
}
|
||||
private void DeviceClick(BaseEventData e)
|
||||
{
|
||||
@@ -200,21 +209,27 @@ namespace Assets.Scripts.Scenes.VideoRide
|
||||
|
||||
private void ChangeViewClick(BaseEventData e)
|
||||
{
|
||||
var videoPlayer = FindObjectOfType<VideoPlayer>();
|
||||
var nearByScript = FindObjectOfType<NearByScript>();
|
||||
var rankingScript = FindObjectOfType<RankingScript>();
|
||||
var currentPlayer = manager.CurrentPlayer == null ? videoPlayer.transform : manager.CurrentPlayer.transform;
|
||||
manager._viewMode = manager._viewMode == ViewMode.THIRD ? ViewMode.FIRST : ViewMode.THIRD;
|
||||
var arController = FindObjectOfType<ARTrainingController>();
|
||||
var cameraImage = changeViewBtn.transform.Find("Camera").gameObject;
|
||||
|
||||
manager._viewMode = manager._viewMode == ViewMode.THIRD ? ViewMode.FIRST : ViewMode.THIRD;
|
||||
if (manager._viewMode == ViewMode.FIRST)
|
||||
{
|
||||
currentPlayer.DOMoveX(0f, 0f);
|
||||
currentPlayer.DOMoveZ(-0.1f, 0f);
|
||||
currentPlayer.DOMoveY(-0.85f, 0f);
|
||||
ftpPanel.SetActive(true);
|
||||
nearByScript.Hidehandler(null);
|
||||
rankingScript.Hidehandler(null);
|
||||
cameraImage.SetActive(true);
|
||||
arController.RiderCameraDistance = CameraDistance.FirstPerson;
|
||||
}
|
||||
else
|
||||
{
|
||||
ftpPanel.SetActive(false);
|
||||
nearByScript.Showhandler(null);
|
||||
rankingScript.Showhandler(null);
|
||||
cameraImage.SetActive(false);
|
||||
arController.RiderCameraDistance = CameraDistance.Middle;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -249,7 +264,7 @@ namespace Assets.Scripts.Scenes.VideoRide
|
||||
}
|
||||
private void QuitClick(BaseEventData e)
|
||||
{
|
||||
if (manager.CurrentPlayer.UserId == App.CurrentUser.Id && (manager.CurrentPlayer.ticks == 0 || manager.CurrentPlayer.EndDistance - manager.CurrentPlayer.StartDistance < 0.1f))
|
||||
if (manager.CurrentPlayer != null && manager.CurrentPlayer.UserId == App.CurrentUser.Id && (manager.CurrentPlayer.ticks == 0 || manager.CurrentPlayer.EndDistance - manager.CurrentPlayer.StartDistance < 0.1f))
|
||||
{
|
||||
UIManager.ShowConfirm("Quit", App.GetLocalString("Current ride distance too short to save."), () => {
|
||||
UIManager.CloseConfirm();
|
||||
|
||||
Reference in new issue
Block a user