diff --git a/Assets/AR/ARGameObjectsController.cs b/Assets/AR/ARGameObjectsController.cs index 1cc24697..ad88e8ed 100644 --- a/Assets/AR/ARGameObjectsController.cs +++ b/Assets/AR/ARGameObjectsController.cs @@ -100,15 +100,14 @@ namespace Assets.AR if (arObject.TimeTransforms != null && arObject.TimeTransforms.Length > 1) arObject.UpdateByTimeDefinitions(videoFrame); arObject.UpdateVisibility(videoFrame, visibilityRear, visibilityFront, this.IsMultilap); - bool flag = this.IsObjectActive(arObject); + var flag = this.IsObjectActive(arObject); + arObject.gameObject.SetActive(flag); } } protected virtual bool IsObjectActive(ARGameObject arObject) => (double)arObject.VisibilityLevel > 0.0 ; - protected virtual Material GetTrajectoryMaterial() => this.matShadow; - protected virtual void Update() { diff --git a/Assets/AR/ARRoute.cs b/Assets/AR/ARRoute.cs index 91c1d680..3a6901c9 100644 --- a/Assets/AR/ARRoute.cs +++ b/Assets/AR/ARRoute.cs @@ -390,6 +390,7 @@ namespace Assets.AR } if (index1 + 1 == this.ShadowIntensities.Length) return this.ShadowIntensities[this.ShadowIntensities.Length - 1]; + float t = Mathf.InverseLerp(this.ShadowIntensityFrames[index1], this.ShadowIntensityFrames[index1 + 1], distance); return Mathf.Lerp(this.ShadowIntensities[index1], this.ShadowIntensities[index1 + 1], t); } diff --git a/Assets/AR/ARTrainingController.cs b/Assets/AR/ARTrainingController.cs index 1a9e6480..0f93dc3d 100644 --- a/Assets/AR/ARTrainingController.cs +++ b/Assets/AR/ARTrainingController.cs @@ -5,6 +5,7 @@ using UnityEngine; using RenderHeads.Media.AVProVideo; using Assets.Scripts.Scenes.VideoRide; using Assets.Scenes.Ride.Scripts.Model.RiderModels; +using UnityEngine.Assertions; namespace Assets.AR { @@ -27,6 +28,7 @@ namespace Assets.AR private VideoGameManager manager; public int VisibleModels { get; private set; } private int visibleModelsLimit = 20; + public int VisibleRiderTitlesLimit => this.VisibleModelsLimit + 10; public int VisibleModelsLimit { get => this.visibleModelsLimit; @@ -83,77 +85,104 @@ namespace Assets.AR protected override void Update() { - if (this.videoPlayer == null) - return; + if (videoPlayer == null ) return; + timers -= Time.deltaTime; while (timers <= 0) { - foreach (var dic in manager.rideObjs) - { - var item = dic.Value; - if (!this.arObjects.Contains(item)) - this.arObjects.Add(item); - if (!this.riderObjects.ContainsKey(item.UserId)) - this.riderObjects.Add(item.UserId, 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; - item.IsAtFinish = dic.Key.EndDistance >= manager.GetMapRoute().Distance*1000f; - - if (dic.Key.UserId == manager.CurrentUserId) - { - mainRiderObject = item; - //如果速度为0就停止播放视频 - if (item.DeltaDistance == 0 || item.Speed == 0) - { - item.DeltaDistance = 0; - videoPlayer.Pause(); - } - else - { - videoPlayer.Resume(); - } - } - } - - this.arObjects.RemoveAll(c => !manager.rideObjs.Select(m => m.Key.UserId.ToString()).Contains(c.UserId.ToString())); - - var keys = riderObjects.Keys.ToList(); - foreach (var item in keys) - { - if (!manager.rideObjs.Keys.Where(c => c.UserId == item).Any()) - { - riderObjects.Remove(item); - } - } - + UpdateRiders(); + RemoveRiders(); timers += 0.2f; } - + if (mainRiderObject == null || Route == null) { - videoPlayer?.Pause(); + videoPlayer.Pause(); return; } - var delta = Time.deltaTime; - foreach (var obj in this.riderObjects.Values) - { - if(obj.DeltaDistance == 0 )continue; - obj.Distance = Mathf.Lerp(obj.Distance, obj.Distance + obj.DeltaDistance, delta); - obj.RouteDistance = Mathf.Lerp(obj.RouteDistance, obj.RouteDistance + obj.DeltaDistance, delta); - } + + this.PlayFrameDistance(); VideoPlayerControl.UpdateVideoPlayRate(mainRiderObject.PreSpeed, mainRiderObject.Distance); - this.FrameIndexDistanceCorrection = this.VideoPlayerControl.FrameIndexDistanceCorrection; - //this.FollowedRiderId = mainObject.Id; this.UpdateCameraFollowDistance(); + base.Update(); this.UpdateRidersVisibility(); this.UpdateRidersLean(); this.UpdateBackLight(); + this.SetUpVideoControlMode(); + } + + /// + /// 更新骑行者的实时数据 + /// + private void UpdateRiders() + { + foreach (var dic in manager.rideObjs) + { + var item = dic.Value; + if (!this.arObjects.Contains(item)) + this.arObjects.Add(item); + if (!this.riderObjects.ContainsKey(item.UserId)) + this.riderObjects.Add(item.UserId, 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; + item.IsAtFinish = dic.Key.EndDistance >= manager.GetMapRoute().Distance*1000f; + + if (dic.Key.UserId != manager.CurrentUserId) continue; + mainRiderObject = item; + //如果速度为0就停止播放视频 + if (item.DeltaDistance == 0 || item.Speed == 0) + { + item.DeltaDistance = 0; + videoPlayer.Pause(); + } + else + { + videoPlayer.Resume(); + } + } + } + + /// + /// 移除不可见的骑行者 + /// + private void RemoveRiders() + { + this.arObjects.RemoveAll(c => !manager.rideObjs.Select(m => m.Key.UserId.ToString()).Contains(c.UserId.ToString())); + + var keys = riderObjects.Keys.ToList(); + foreach (var item in keys) + { + if (!manager.rideObjs.Keys.Where(c => c.UserId == item).Any()) + { + riderObjects.Remove(item); + } + } + } + + /// + /// 将每秒的距离转换为每帧的距离 + /// + private void PlayFrameDistance() + { + var delta = Time.deltaTime; + foreach (var obj in this.riderObjects.Values.Where(obj => obj.DeltaDistance != 0)) + { + obj.Distance = Mathf.Lerp(obj.Distance, obj.Distance + obj.DeltaDistance, delta); + obj.RouteDistance = Mathf.Lerp(obj.RouteDistance, obj.RouteDistance + obj.DeltaDistance, delta); + } + } + + /// + /// 设置camera的跟随距离 + /// + private void SetUpVideoControlMode() + { if (Input.GetKeyDown(KeyCode.F)) this.SetVideoControlMode(VideoPlayMode.Front); if (Input.GetKeyDown(KeyCode.P)) @@ -162,7 +191,10 @@ namespace Assets.AR return; this.SetVideoControlMode(VideoPlayMode.Rear); } - //创建 + + /// + /// 设置光线 + /// private void SetUpLight() { this.arLight.type = LightType.Directional; @@ -170,7 +202,7 @@ namespace Assets.AR this.arLight.shadows = LightShadows.Soft; this.arLight.shadowStrength = 1f; - GameObject gameObject2 = new GameObject("ARBackLight"); + var gameObject2 = new GameObject("ARBackLight"); gameObject2.layer = this.gameObject.layer; gameObject2.transform.SetParent(this.transform); this.arBackLight = gameObject2.AddComponent(); @@ -178,9 +210,8 @@ namespace Assets.AR this.arBackLight.transform.rotation = Quaternion.Euler(0.0f, 0.0f, 0.0f); this.arBackLight.shadows = LightShadows.None; this.arBackLight.intensity = 0.5f; - //this.arBackLight.cullingMask = 512; } - //设置video显示模式 + public void SetVideoControlMode(VideoPlayMode mode) { if (mode == this.VideoControlMode) @@ -196,7 +227,6 @@ namespace Assets.AR //更新摄像机的位置 private void UpdateCameraFollowDistance() { - //this.NearViewMode = this.RiderCameraDistance == AR.CameraDistance.Near; var cameraFollowDistance = GetCameraFollowDistance(this.RiderCameraDistance); this.VideoPlayerControl.CameraFollowDistance = cameraFollowDistance; } @@ -442,7 +472,6 @@ namespace Assets.AR } } } - public int VisibleRiderTitlesLimit => this.VisibleModelsLimit + 10; private void UpdateVisibleRiders() { var visibilityModels = ARGameObject.MaxDistanceVisibilityModels; diff --git a/Assets/Resources/UI/Prefab/Panel/GameRoomCountDown.prefab b/Assets/Resources/UI/Prefab/Panel/GameRoomCountDown.prefab index 02f07f49..89d54b9c 100644 --- a/Assets/Resources/UI/Prefab/Panel/GameRoomCountDown.prefab +++ b/Assets/Resources/UI/Prefab/Panel/GameRoomCountDown.prefab @@ -18,7 +18,7 @@ GameObject: m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 - m_IsActive: 1 + m_IsActive: 0 --- !u!224 &994686065624044129 RectTransform: m_ObjectHideFlags: 0 @@ -78,7 +78,7 @@ MonoBehaviour: m_HorizontalOverflow: 1 m_VerticalOverflow: 1 m_LineSpacing: 1 - m_Text: 6 + m_Text: --- !u!114 &994686065624044124 MonoBehaviour: m_ObjectHideFlags: 0 diff --git a/Assets/Scripts/Apis/Models/MapDataModel.cs b/Assets/Scripts/Apis/Models/MapDataModel.cs index f9b59cfa..e82c4260 100644 --- a/Assets/Scripts/Apis/Models/MapDataModel.cs +++ b/Assets/Scripts/Apis/Models/MapDataModel.cs @@ -126,9 +126,8 @@ namespace Assets.Scripts.Apis.Models } else { - _List[i].Grade = Math.Round(a / b * 100, 4); + _List[i].Grade = Math.Min(Math.Round(a / b * 100, 4),12); } - } } private void CalcCenter() diff --git a/Assets/Scripts/Scenes/MainController.cs b/Assets/Scripts/Scenes/MainController.cs index 1aa147d8..78806f98 100644 --- a/Assets/Scripts/Scenes/MainController.cs +++ b/Assets/Scripts/Scenes/MainController.cs @@ -392,14 +392,8 @@ public class MainController : BaseScene } } } - - //UIManager.ShowNewRouteOverviewPanel(); - //UIManager.ShowUserInfoPanel(); - //UIManager.ShowEditUserPanel(); - //UIManager.ShowBigMapPanel(); - //UIManager.ShowEarthPanel(); } - ShowGameRoomInviteConfirm(); + UIManager.UpdateJoinCompetition();//查询当前我参加的赛事 //await GetDeviceListAsync(); PC品牌 //显示首页的3d小人 @@ -430,6 +424,134 @@ public class MainController : BaseScene { base.Update(); + HandleGameRoom(); + + CanvasSizeChanged(); + + t -= Time.deltaTime; + while (t <= 0) + { + App.CurrentScene = "Main"; + UIManager.SendCompetitionStartMessage("Main"); + t = 1; + scanTicks++; + emptyt++; + if (emptyt >= 10) + { + emptyt = 0; + if (App.currentPageIsHome) + { + FinishMessageLeft(); + } + } + if (scanTicks == 10) + { + //App.MainDeviceAdapter.StopScan(); + //Debug.Log("StopScan"); + } + MapUDPService.Send(0, App.CurrentUser.Id, new double[]{ 0d,0d}, competitionId: 0,model:App.Model); + HandleCompetition(); + } + } + + private void CanvasSizeChanged() + { + if (App.canvasWidth != transform.GetComponent().sizeDelta.x) + { + App.canvasWidth = transform.GetComponent().sizeDelta.x; + } + } + + private void HandleCompetition() + { + var list = MapUDPService.GetAllOnlineUserList(); + var lang = App.GetLocalLanguage(); + foreach (var item in list) + { + if (item.Point != null && item.Point.Length > 0 && item.Point[0] == -1d) + { + var message = lang == "zh" ? $"{item.Name}进入了 运动地球" : "entered PowerFun"; + EventQueueSystem.QueueEventOnce( + new LinkedMessageEvent(-1, message, item.HeadImage, item.Name, item.RouteName), + $"{item.Id}{item.LastActiveTime}{item.Point}"); + } + + if (string.IsNullOrEmpty(item.RouteName)) + continue; + if (item.RouteId > 0) + { + var message = ""; + if (item.TotalTicks == 0 && item.PreDistance == 0) + { + var routeName = string.IsNullOrEmpty(item.RouteName) ? $"#{item.RouteId}" : item.RouteName; + message = lang == "zh" + ? $"发起了对{routeName}的挑战!" + : $"started riding {item.RouteName}!"; + } + + if (item.IsCompleted) + { + message = lang == "zh" + ? $"完成了{item.RouteName}的挑战!" + : $"completed {item.RouteName} ride!"; + } + + if (!string.IsNullOrEmpty(message)) + { + EventQueueSystem.QueueEventOnce( + new LinkedMessageEvent(item.RouteId, message, item.HeadImage, item.Name, item.RouteName), + $"{item.RouteId}{item.Name}"); + } + } + + //距离50 + if (item.EndDistance >= 50 && item.EndDistance < 100) + { + var message = lang == "zh" + ? $"在{item.RouteName}中骑行里程达到{"50KM"}!" + : $"riding distance reaches {"50KM"} in {item.RouteName}!"; + EventQueueSystem.QueueEventOnce( + new LinkedMessageEvent(item.RouteId, message, item.HeadImage, item.Name, item.RouteName), + $"{item.RouteId}{item.Name}50KM"); + } + + //距离100 + if (item.EndDistance >= 100) + { + var message = lang == "zh" + ? $"在{item.RouteName}中骑行里程达到{"100KM"}!" + : $"riding distance reaches {"100KM"} in {item.RouteName}!"; + EventQueueSystem.QueueEventOnce( + new LinkedMessageEvent(item.RouteId, message, item.HeadImage, item.Name, item.RouteName), + $"{item.RouteId}{item.Name}100KM"); + } + + //速度50 + if (item.Speed >= 50) + { + var message = lang == "zh" + ? $"在{item.RouteName}中骑行速度达到{Math.Round(item.Speed, 2)}KM/H!" + : $"riding speed reaches {Math.Round(item.Speed, 2)}KM/H in {item.RouteName}!"; + EventQueueSystem.QueueEventOnce( + new LinkedMessageEvent(item.RouteId, message, item.HeadImage, item.Name, item.RouteName), + $"{item.RouteId}{item.Name}50KM/H"); + } + + //功体比 + if (item.WeightKg >= 4) + { + var message = lang == "zh" + ? $"在{item.RouteName}中功体比达到{Math.Round(item.WeightKg, 2)}w/kg!" + : $" riding PWR reaches {Math.Round(item.WeightKg, 2)}w/kg in {item.RouteName}!"; + EventQueueSystem.QueueEventOnce( + new LinkedMessageEvent(item.RouteId, message, item.HeadImage, item.Name, item.RouteName), + $"{item.RouteId}{item.Name}3WeightKg"); + } + } + } + + private void HandleGameRoom() + { if (DataSorceChanged) { DataSorceChanged = false; @@ -456,108 +578,10 @@ public class MainController : BaseScene gameRoomProcessing = false; SceneManager.LoadScene("Ride"); } - clearcachet -= Time.deltaTime; - if (clearcachet <= 0) - { - Debug.Log("清一次"); - Resources.UnloadUnusedAssets(); - GC.Collect(); - clearcachet = 30; - } - if (App.canvasWidth != transform.GetComponent().sizeDelta.x) - { - App.canvasWidth = transform.GetComponent().sizeDelta.x; - //Debug.Log(App.canvasWidth); - } - //Debug.Log(transform.GetComponent().sizeDelta.x); - t -= Time.deltaTime; - while (t <= 0) - { - App.CurrentScene = "Main"; - UIManager.SendCompetitionStartMessage("Main"); - t = 1; - scanTicks++; - emptyt++; - if (emptyt >= 10) - { - emptyt = 0; - if (App.currentPageIsHome) - { - FinishMessageLeft(); - } - } - if (scanTicks == 10) - { - //App.MainDeviceAdapter.StopScan(); - //Debug.Log("StopScan"); - } - MapUDPService.Send(0, App.CurrentUser.Id, new double[]{ 0d,0d}, competitionId: 0,model:App.Model); - //发送消息 - - var list = MapUDPService.GetAllOnlineUserList(); - var lang = App.GetLocalLanguage(); - foreach (var item in list) - { - if (item.Point != null && item.Point.Length > 0 && item.Point[0] == -1d) - { - var message = lang == "zh" ? $"{item.Name}进入了 运动地球" : "entered PowerFun"; - EventQueueSystem.QueueEventOnce(new LinkedMessageEvent(-1, message, item.HeadImage, item.Name, item.RouteName), $"{item.Id}{item.LastActiveTime}{item.Point}"); - } - if (string.IsNullOrEmpty(item.RouteName)) - continue; - if (item.RouteId > 0) - { - var message = ""; - if (item.TotalTicks == 0 && item.PreDistance == 0) - { - var routeName = string.IsNullOrEmpty(item.RouteName) ? $"#{item.RouteId}" : item.RouteName; - message = lang=="zh"?$"发起了对{routeName}的挑战!" : $"started riding {item.RouteName}!"; - } - if (item.IsCompleted) - { - message = lang == "zh" ? $"完成了{item.RouteName}的挑战!" : $"completed {item.RouteName} ride!"; - } - if (!string.IsNullOrEmpty(message)) - { - EventQueueSystem.QueueEventOnce(new LinkedMessageEvent(item.RouteId, message, item.HeadImage, item.Name,item.RouteName), $"{item.RouteId}{item.Name}"); - } - } - //距离50 - if (item.EndDistance >= 50 && item.EndDistance < 100) - { - var message = lang == "zh" ? $"在{item.RouteName}中骑行里程达到{"50KM"}!" : $"riding distance reaches {"50KM"} in {item.RouteName}!"; - EventQueueSystem.QueueEventOnce(new LinkedMessageEvent(item.RouteId, message, item.HeadImage, item.Name, item.RouteName), $"{item.RouteId}{item.Name}50KM"); - } - //距离100 - if (item.EndDistance >= 100) - { - var message = lang == "zh" ? $"在{item.RouteName}中骑行里程达到{"100KM"}!" : $"riding distance reaches {"100KM"} in {item.RouteName}!"; - EventQueueSystem.QueueEventOnce(new LinkedMessageEvent(item.RouteId, message, item.HeadImage, item.Name, item.RouteName), $"{item.RouteId}{item.Name}100KM"); - } - ////速度35 - //if (item.Speed >= 35) - //{ - // var message = lang == "zh" ? $"骑行速度突破{Math.Round(item.Speed, 2)}KM/H!" : $"riding speed reaches {Math.Round(item.Speed, 2)}KM/H!"; - // EventQueueSystem.QueueEventOnce(new LinkedMessageEvent(item.RouteId, message, item.HeadImage, item.Name, item.RouteName), $"{item.RouteId}{item.Name}35KM/H"); - //} - //速度50 - if (item.Speed >= 50) - { - var message = lang == "zh" ? $"在{item.RouteName}中骑行速度达到{Math.Round(item.Speed,2)}KM/H!" : $"riding speed reaches {Math.Round(item.Speed, 2)}KM/H in {item.RouteName}!"; - EventQueueSystem.QueueEventOnce(new LinkedMessageEvent(item.RouteId, message, item.HeadImage, item.Name, item.RouteName), $"{item.RouteId}{item.Name}50KM/H"); - } - //功体比 - if (item.WeightKg >= 4) - { - var message = lang == "zh" ? $"在{item.RouteName}中功体比达到{Math.Round(item.WeightKg, 2)}w/kg!" : $" riding PWR reaches {Math.Round(item.WeightKg, 2)}w/kg in {item.RouteName}!"; - EventQueueSystem.QueueEventOnce(new LinkedMessageEvent(item.RouteId, message, item.HeadImage, item.Name, item.RouteName), $"{item.RouteId}{item.Name}3WeightKg"); - } - } - } + ShowGameRoomInviteConfirm(); } - private async Task Login() { var result = await ConfigHelper.userApi.Login("13115011550", "laozhong", ""); diff --git a/Assets/Scripts/Scenes/Ride/Scripts/BaseUIManager.cs b/Assets/Scripts/Scenes/Ride/Scripts/BaseUIManager.cs index b52f793d..330b7506 100644 --- a/Assets/Scripts/Scenes/Ride/Scripts/BaseUIManager.cs +++ b/Assets/Scripts/Scenes/Ride/Scripts/BaseUIManager.cs @@ -519,17 +519,20 @@ namespace Assets.Scenes.Ride.Scripts } else { - SendQuit4GameRoom(); SceneManager.LoadScene("MainScene"); } } - private void SendQuit4GameRoom() + + private void OnDestroy() { - //如果在对战房间内,发送退出房间的命令 - if (mainController.roomId > 0) - { - MapUDPService.SendGameRoomKick(mainController.roomId, App.CurrentUser.Id, App.CurrentUser.Id); - } + QuitGameRoom(); + } + + //如果在对战房间内,发送退出房间的命令 + private void QuitGameRoom() + { + if (mainController.roomId == 0) return; + MapUDPService.SendGameRoomKick(mainController.roomId, App.CurrentUser.Id, App.CurrentUser.Id); } //不保存退出 public virtual void CancelQuit(BaseEventData baseEventData) @@ -537,7 +540,6 @@ namespace Assets.Scenes.Ride.Scripts modalPanel.SetActive(false); quitPanel.SetActive(false); mainController.ClearTempFile(); - SendQuit4GameRoom(); SceneManager.LoadScene("MainScene"); } //取消退出 @@ -556,8 +558,6 @@ namespace Assets.Scenes.Ride.Scripts } protected virtual void StopShortRide(BaseEventData baseEventData) { - //发送退出房间的命令 - SendQuit4GameRoom(); SceneManager.LoadScene("MainScene"); } protected virtual void CancelStopShortRide(BaseEventData baseEventData) diff --git a/Assets/Scripts/Scenes/Ride/Scripts/CyclingController.cs b/Assets/Scripts/Scenes/Ride/Scripts/CyclingController.cs index 56020135..8e0f7356 100644 --- a/Assets/Scripts/Scenes/Ride/Scripts/CyclingController.cs +++ b/Assets/Scripts/Scenes/Ride/Scripts/CyclingController.cs @@ -1293,7 +1293,7 @@ public BaseUIManager singleUIManager; var path = PFConstants.MapWorkoutRecordFolder + "/" + recordId; Helper.CreateDirectoryIfNotExsit(path); - string imageFileName = path +"/"+ Guid.NewGuid().ToString() + ".png"; + var imageFileName = path +"/"+ Guid.NewGuid().ToString() + ".png"; CaptureCamera(Camera.main, new Rect(Screen.width * 0f, Screen.height * 0f, Screen.width * 0.5f, Screen.height * 0.5f), imageFileName); cyclingController.recorderData.StartTime = startTime; cyclingController.recorderData.IsCompleted = totalDistance >= mapData.TotalDistance; diff --git a/Assets/Scripts/Scenes/VideoRide/AbstractVideoPlayer.cs b/Assets/Scripts/Scenes/VideoRide/AbstractVideoPlayer.cs index a7cfd535..6d7aa848 100644 --- a/Assets/Scripts/Scenes/VideoRide/AbstractVideoPlayer.cs +++ b/Assets/Scripts/Scenes/VideoRide/AbstractVideoPlayer.cs @@ -118,7 +118,7 @@ namespace Assets.Scripts.Scenes.VideoRide if (animator != null) { animator.SetFloat(PreSpeed, (float)preSpeed); - animator.SetFloat(AnimatorSpeed, (float)speed); + animator.SetFloat(AnimatorSpeed, (float)OnlineSpeed); animator.SetFloat(Grade, (float)currentSlope); animator.SetFloat(Power, (float)power); } @@ -172,6 +172,10 @@ namespace Assets.Scripts.Scenes.VideoRide } } public virtual void ComputeRecord() { } + + private const double DoubleDelta = 1E-6; + + private const double GradeFactor = 0.5f; //计算当前区段属性下一个区段属性 public void ComputeNextSlope() { @@ -194,19 +198,20 @@ namespace Assets.Scripts.Scenes.VideoRide break; } } - var DOUBLE_DELTA = 1E-6; - if (Math.Abs(totalDistance - mapData.TotalDistance) < DOUBLE_DELTA) + + if (Math.Abs(totalDistance - mapData.TotalDistance) < DoubleDelta) { currentIndex = pointList.Count - 1; } + Debug.Log(currentIndex); preIndex = currentIndex > 0 ? currentIndex - 1 : 0;//前一个索引 int nextIndex = currentIndex == pointList.Count - 1 ? currentIndex : currentIndex + 1; //计算下一个点的坡度和距离 elevation = pointList[currentIndex].Elevation; - currentSlope = pointList[currentIndex].Grade; + currentSlope = pointList[currentIndex].Grade * GradeFactor; //CurrentDistance = pointList[currentIndex].Distance; //计算下一个海拔和坡度&当前区间距离 - nextSlope = pointList[nextIndex].Grade; + nextSlope = pointList[nextIndex].Grade * GradeFactor; nextSlopeDistance = sumDistance - totalDistance * 1000; //NextSlopeTotalDistance = pointList[nextIndex].Distance; currentSlopeDistance = (totalDistance * 1000 - (sumDistance - pointList[currentIndex].Distance)); diff --git a/Assets/Scripts/Scenes/VideoRide/VideoPlayer.cs b/Assets/Scripts/Scenes/VideoRide/VideoPlayer.cs index 40830375..73122afe 100644 --- a/Assets/Scripts/Scenes/VideoRide/VideoPlayer.cs +++ b/Assets/Scripts/Scenes/VideoRide/VideoPlayer.cs @@ -1,7 +1,6 @@ using Assets.Scenes.Ride.Scripts.Model; using Assets.Scenes.Ride.Scripts.Model.CyclingModels; using System; -using UnityEngine; namespace Assets.Scripts.Scenes.VideoRide { @@ -16,11 +15,6 @@ namespace Assets.Scripts.Scenes.VideoRide userName = App.CurrentUser.Nickname; } - protected override void Update() - { - base.Update(); - } - public void SetEndDistance(double distance) { this.totalDistance = distance; @@ -39,11 +33,6 @@ namespace Assets.Scripts.Scenes.VideoRide } } - public override void ComputeAnimator() - { - base.ComputeAnimator(); - } - public override void ComputePlayer() { heartRate = manager.UpDateHeart(); @@ -77,7 +66,8 @@ namespace Assets.Scripts.Scenes.VideoRide gameRoomHandled = true; var gap = model.FirstEndTime.Value - UIManager.Now.GetDateTime(); var seconds = Math.Floor(gap.TotalSeconds); - UIManager.ShowGameRoomCountDownPanel((int)seconds, () => { + UIManager.ShowGameRoomCountDownPanel((int)seconds, () => + { Upload(); var uiManager = FindObjectOfType(); uiManager.ShowResultPanel(); @@ -85,10 +75,6 @@ namespace Assets.Scripts.Scenes.VideoRide } } - public override void ComputeAnimatorSpeed() - { - base.ComputeAnimatorSpeed(); - } public override void ComputeRecord() { var mapData = manager.GetMapData(); diff --git a/Assets/Scripts/UI/Prefab/Panel/GameRoomCountDownController.cs b/Assets/Scripts/UI/Prefab/Panel/GameRoomCountDownController.cs index 2f221e00..dd658ec2 100644 --- a/Assets/Scripts/UI/Prefab/Panel/GameRoomCountDownController.cs +++ b/Assets/Scripts/UI/Prefab/Panel/GameRoomCountDownController.cs @@ -10,67 +10,48 @@ public class GameRoomCountDownController : PFUIPanel public Text endCount; private int Seconds { get; set; } + public GameRoomModel GameRoom { get; set; } private Action Callback { get; set; } - protected override void Awake() + private bool simple { get; set; } + public void Init(int seconds,Action action,bool isEnd = false,bool simple = false) { - base.Awake(); - } - - public override void Show() - { - base.Show(); - } - private bool isSimple { get; set; } - public void Init(int seconds,Action action,bool isEnd = false,bool isSimple = false) - { - stopped = false; + _stopped = false; Seconds = seconds; Callback = action; + this.simple = simple; endCount.gameObject.SetActive(false); - this.isSimple = isSimple; } - public override void Close() - { - base.Close(); - } - private bool stopped; + private bool _stopped; public void Stop() { - this.stopped = true; + this._stopped = true; } - float timer = 0f; + private float _timer = 0f; private void Update() { - timer -= Time.deltaTime; - while (timer < 0) + _timer -= Time.deltaTime; + while (_timer < 0) { if (Seconds == 0) { Callback?.Invoke(); } - if (Seconds < 0 || stopped) + + if (Seconds <= 0 || _stopped) { gameObject.SetActive(false); } - else - { - if (isSimple) - { - count.text = Seconds.ToString(); - } - else - { - count.text = Helper.FormatTicks(Seconds); - } - endCount.text = Helper.FormatTicks(Seconds); - } + + count.gameObject.SetActive(Seconds >0); + count.text = simple ? Seconds.ToString() : Helper.FormatTicks(Seconds); + endCount.text = Helper.FormatTicks(Seconds); Seconds--; - timer += 1f; + _timer += 1f; } } } diff --git a/Assets/Scripts/UI/Prefab/Panel/GameRoomDetailController.cs b/Assets/Scripts/UI/Prefab/Panel/GameRoomDetailController.cs index 1820b600..bde3f438 100644 --- a/Assets/Scripts/UI/Prefab/Panel/GameRoomDetailController.cs +++ b/Assets/Scripts/UI/Prefab/Panel/GameRoomDetailController.cs @@ -105,30 +105,24 @@ public class GameRoomDetailController : PFUIPanel private void ListenerHandler(List message) { var detail = message.FirstOrDefault(); - if (detail != null) + if (detail == null || message.Count > 1) return; + + if (detail.RoomList == null) { - if (detail.RoomList == null) - { - DataSourceChanged = true; - GameRoom = null; - return; - } - GameRoom = detail.RoomList.Where(c => c.RoomId == GameRoom.RoomId).FirstOrDefault(); - if (GameRoom != null) - { - DataSourceChanged = true; - } + DataSourceChanged = true; + GameRoom = null; + return; + } + GameRoom = detail.RoomList.Where(c => c.RoomId == GameRoom.RoomId).FirstOrDefault(); + if (GameRoom != null) + { + DataSourceChanged = true; } } float timer = 0f; private void Update() { TcpHandler(); - timer -= Time.deltaTime; - while (timer < 0) - { - timer += 1f; - } } private void Init() { diff --git a/ProjectSettings/QualitySettings.asset b/ProjectSettings/QualitySettings.asset index 8fb51119..7826bfb2 100644 --- a/ProjectSettings/QualitySettings.asset +++ b/ProjectSettings/QualitySettings.asset @@ -197,11 +197,11 @@ QualitySettings: shadowNearPlaneOffset: 3 shadowCascade2Split: 0.33333334 shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} - shadowmaskMode: 1 + shadowmaskMode: 0 skinWeights: 255 textureQuality: 0 anisotropicTextures: 2 - antiAliasing: 4 + antiAliasing: 8 softParticles: 1 softVegetation: 1 realtimeReflectionProbes: 1 @@ -232,7 +232,7 @@ QualitySettings: PS4: 5 PS5: 5 Stadia: 5 - Standalone: 2 + Standalone: 3 WebGL: 3 Windows Store Apps: 2 XboxOne: 5