diff --git a/Assets/Editor/Beebyte/Obfuscator/ObfuscatorOptions.asset b/Assets/Editor/Beebyte/Obfuscator/ObfuscatorOptions.asset index 60b5cb39..f1cefaf4 100644 --- a/Assets/Editor/Beebyte/Obfuscator/ObfuscatorOptions.asset +++ b/Assets/Editor/Beebyte/Obfuscator/ObfuscatorOptions.asset @@ -216,6 +216,12 @@ MonoBehaviour: obfuscateSpecifiedNamespacesRecursively: 1 obfuscateNamespaces: - Assets.AR + - Assets.Scripts.Devices.Ant + - Assets.Scripts.Devices.Ant.Interfaces + - Assets.Scripts.Devices.Ant.LegacyPages + - Assets.Scripts.Devices.Ant.Messages + - Assets.Scripts.Devices.Ant.Pages.CalibrationPages + - Assets.Scripts.Devices.Ant.Pages replaceLiteralsOnSkippedClasses: 1 obfuscateUnityReflectionMethods: 1 inheritBeebyteAttributes: 0 diff --git a/Assets/Scripts/Devices/Ant/AntConnector.cs b/Assets/Scripts/Devices/Ant/AntConnector.cs index 95b47dbc..64c72985 100644 --- a/Assets/Scripts/Devices/Ant/AntConnector.cs +++ b/Assets/Scripts/Devices/Ant/AntConnector.cs @@ -266,20 +266,18 @@ namespace Assets.Scripts.Devices.Ant if (response.messageContents.Length == 3) return; var str = string.Join(",", response.messageContents); - var cc = usedChannels.Where(d => d.Index == channelIndex).FirstOrDefault(); - var dd = discoveredDevices.SingleOrDefault(d => d.searchProfile.deviceNumber.ToString() == cc.DeviceNumber && d.searchProfile.deviceType.ToString() == cc.DeviceTypeId); - if (dd != null) + var cc = usedChannels.FirstOrDefault(d => d.Index == channelIndex); + var dd = discoveredDevices.SingleOrDefault(d => cc != null && d.searchProfile.deviceNumber.ToString() == cc.DeviceNumber && d.searchProfile.deviceType.ToString() == cc.DeviceTypeId); + if (dd == null) return; + if (dd.State == DeviceState.Connecting) { - if (dd.State == DeviceState.Connecting) - { - dd.State = DeviceState.Connected; - //IsBackgroundScanning = true; - //ReSearch(); - //StartNextSearch(); - return; - } - dd.handleChannelResponse(response); + dd.State = DeviceState.Connected; + //IsBackgroundScanning = true; + //ReSearch(); + //StartNextSearch(); + return; } + dd.handleChannelResponse(response); } public bool SendMessage(byte msgID, byte[] msgData) diff --git a/Assets/Scripts/Scenes/AR/VideoGameManager.cs b/Assets/Scripts/Scenes/AR/VideoGameManager.cs index 1976bf2a..3ef2ac2c 100644 --- a/Assets/Scripts/Scenes/AR/VideoGameManager.cs +++ b/Assets/Scripts/Scenes/AR/VideoGameManager.cs @@ -44,18 +44,25 @@ namespace Assets.Scripts.Scenes.VideoRide private GameObject OnlinePlayer_NV; private bool isStop { get; set; } - - VideoLoading videoLoading { get; set; } //当前是第一人称还是第三人称 public ViewMode _viewMode { get; set; } //当前是观察者视角还是骑行者视角 public ARMode _aRMode { get; set; } public int RankingId { get; set; } - public Dictionary rideObjs = new Dictionary(); - private VideoUIManager _uiManager { get; set; } + private ARTrainingController _trainingController { get; set; } + public List visibleRiders = new List();//当前线路上的人 + private const int limits = 5;//在线的其他人数 + private double MaxVisibleDistance = 200d;//最大显示距离 + float timer = 0f; + int ticks = 0; + MapRouteRankingList rankingList; + public GameObject videoPlayer; + public GameObject target; + public int CurrentUserId { get; set; } + protected override void Awake() { @@ -73,10 +80,12 @@ namespace Assets.Scripts.Scenes.VideoRide OnlinePlayer_NV = Resources.Load("UI/Prefab/AR/OnlineVideoPlayer_NV"); Player = Resources.Load("UI/Prefab/AR/VidePlayer"); Player_NV = Resources.Load("UI/Prefab/AR/VidePlayer_NV"); + + _trainingController = GetComponent(); StartCoroutine(Init()); } - void Start() + private void Start() { UIManager.Instance.MainPanel = GetCanvasTransform().GetComponent(); UIManager.Instance.ModalsPanel = this.transform.Find("Canvas/ModalPanel").GetComponent(); @@ -110,8 +119,7 @@ namespace Assets.Scripts.Scenes.VideoRide yield return null; videoLoading.Init();//初始化loading页面 } - float timer = 0f; - int ticks = 0; + protected override void Update() { timer -= Time.deltaTime; @@ -119,23 +127,17 @@ namespace Assets.Scripts.Scenes.VideoRide { if (cyclingController == null) return; - cyclingController.Run(null); - var onlineRiders = cyclingController.riders; + try { - CreateOnlineUser(onlineRiders); + cyclingController.Run(null);//发送数据到tcp + + var onlineRiders = cyclingController.riders; + CreateOnlineUser(onlineRiders); //解析tcp返回数据 + if (isStart) { - var riders = FindObjectsOfType(); - foreach (var rider in riders) - { - rider.StartAction(); - } - //解决当前用户setActive(false)时仍能计算数据 - if (CurrentPlayer != null && CurrentPlayer is VideoPlayer) - { - CurrentPlayer.StartAction(); - } + ComputePlayerRuntimeData(); ticks++; } } @@ -146,7 +148,22 @@ namespace Assets.Scripts.Scenes.VideoRide timer += 1f; } } - MapRouteRankingList rankingList; + + //计算骑手的数据 + private void ComputePlayerRuntimeData() + { + var riders = FindObjectsOfType(); + foreach (var rider in riders) + { + rider.StartAction(); + } + //解决当前用户setActive(false)时仍能计算数据 + if (CurrentPlayer != null && CurrentPlayer is VideoPlayer) + { + CurrentPlayer.StartAction(); + } + } + public MapRouteRankingList GetRankingList(string type = "month") { var endTime = UIManager.Now == null ? DateTime.Now : UIManager.Now.GetDateTime(); @@ -159,55 +176,58 @@ namespace Assets.Scripts.Scenes.VideoRide return rankingList; } - public List visibleRiders = new List();//当前线路上的人 - private const int limits = 5;//在线的其他人数 - private double MaxVisibleDistance = 200d;//最大显示距离 //创建当前线路其他选手 private void CreateOnlineUser(List list) { - list = list.Where(c => ((OnlineRiderModel)c).IsWatcher == false).ToList(); + list = list.Where(c => ((OnlineRiderModel)c).IsWatcher == false).OrderByDescending(c => c.IsSelf).ToList(); //断网移除所有用户 - if (list == null || list.Count == 0) + if (list.Count == 0) { - foreach (var item in visibleRiders) - { - Debug.Log($"销毁了{item}"); - DestroyImmediate(item.gameObject); - } - rideObjs.Clear(); - visibleRiders.Clear(); - CurrentPlayer = null; + ClearRiders(); return; } - var trainController = GetComponent(); - //移除退出的选手 - var players = FindObjectsOfType(); - foreach (var item in players) - { - var currentItem = list.FirstOrDefault(c => c.UserId == item.UserId); - if (currentItem == null) - { - rideObjs.Remove(item); - visibleRiders.Remove(item); - } - } - var currentPlayerInfo = list.FirstOrDefault(c => c.IsSelf); - var needUpdateList = list.OrderByDescending(c => c.IsSelf).ToList(); + + //删除离开的用户 + RemovePlayers(list); //如果当前为观察者模式且currentPlayerInfo为null随机选择以为用户观察 - if (currentPlayerInfo == null) - { - currentPlayerInfo = needUpdateList.FirstOrDefault(c => c.UserId == CurrentUserId); - if(currentPlayerInfo == null) - currentPlayerInfo = needUpdateList.FirstOrDefault(); - } + var current = DefaultCurrentPlayer(list); //更新和新增用户 - foreach (var item in needUpdateList) + UpdateRiders(list, current); + } + + //断网清空当前线路所有用户 + private void ClearRiders() + { + foreach (var item in visibleRiders) + { + DestroyImmediate(item.gameObject); + } + rideObjs.Clear(); + visibleRiders.Clear(); + CurrentPlayer = null; + } + + //默认当前用户1.当前骑行模式下是当前用户 2.观察者模式下随机第一个用户 + private BaseRider DefaultCurrentPlayer(List list) + { + var current = CurrentUserId == 0 ? list.FirstOrDefault() : list.FirstOrDefault(c => c.UserId == CurrentUserId); + + if(CurrentUserId == 0 && current != null) + CurrentUserId = current.UserId; + + return current; + } + + private void UpdateRiders(List list,BaseRider current) + { + //更新和新增用户 + foreach (var item in list) { var onlineRider = item as OnlineRiderModel; var visibleItem = visibleRiders.FirstOrDefault(c => c.UserId == item.UserId); 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); + visibleItem.SetPlayer(onlineRider.NickName, onlineRider.Speed, onlineRider.PreDistance, onlineRider.EndDistance, item.Cadence, item.HeartRate, onlineRider.WeightKg, item.UserId, onlineRider.Power, current.EndDistance, onlineRider.FrameRate.Value); if (visibleItem.userId == CurrentUserId) { CurrentPlayer = visibleItem; @@ -215,70 +235,84 @@ namespace Assets.Scripts.Scenes.VideoRide } else { - var diff = item.EndDistance % mapData.TotalDistance - currentPlayerInfo.EndDistance % mapData.TotalDistance; - if (Math.Abs(diff * 1000) <= MaxVisibleDistance) + var distance = item.EndDistance % mapData.TotalDistance - current.EndDistance % mapData.TotalDistance; + if (!(Math.Abs(distance * 1000) <= MaxVisibleDistance)) continue; + + if (item.IsSelf) { - GameObject obj = null; - if (!item.IsSelf) - { - if (onlineRider.Sex == 1) - { - obj = Instantiate(OnlinePlayer, transform); - } - else - { - obj = Instantiate(OnlinePlayer_NV, transform); - } - var online = obj.GetComponentInChildren(); - var rideObj = obj.GetComponentInChildren(); - 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 (online.userId == CurrentUserId) - { - CurrentPlayer = visibleItem; - } - } - else - { - if (App.CurrentUser.Sex == 1) - { - var playerprefab = Resources.Load("UI/Prefab/AR/VidePlayer"); - videoPlayer = Instantiate(playerprefab, transform); - } - else - { - var playerprefabNV = Resources.Load("UI/Prefab/AR/VidePlayer_NV"); - videoPlayer = Instantiate(playerprefabNV, transform); - } - - CurrentUserId = App.CurrentUser.Id; - CurrentPlayer = videoPlayer.GetComponent(); - - var vp = videoPlayer.GetComponent(); - vp.SetEndDistance(item.EndDistance); - CurrentPlayer.SetStartDistance(item.EndDistance); - - var rideObj = videoPlayer.GetComponent(); - rideObj.Distance = (float)CurrentPlayer.StartDistance; - rideObj.RouteDistance = rideObj.Distance; - rideObj.IsMain = true; - rideObj.UserId = item.UserId; - 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); - } + CreateVideoPlayer(onlineRider,item,current); + } + else + { + CreateOnlinePlayer(onlineRider,item,visibleItem,current); } } } } + private void CreateOnlinePlayer(OnlineRiderModel onlineRider,BaseRider item,AbstractVideoPlayer visibleItem,BaseRider current) + { + var obj = CreatePlayerGameObject(false, onlineRider.Sex == 1); + + var online = obj.GetComponentInChildren(); + var rideObj = obj.GetComponentInChildren(); + online.SetStartDistance(item.EndDistance); + + rideObj.Distance = (float)online.StartDistance; + rideObj.RouteDistance = rideObj.Distance; + rideObj.UserId = item.UserId; + + rideObjs.Add(online, rideObj); + visibleRiders.Add(online); + + _trainingController.AddRider(onlineRider); + online.SetPlayer(onlineRider.NickName, onlineRider.Speed, onlineRider.PreDistance, onlineRider.EndDistance, item.Cadence, item.HeartRate, onlineRider.WeightKg, item.UserId, onlineRider.Power, current.EndDistance, onlineRider.FrameRate.Value); + + if (online.userId == CurrentUserId) + { + CurrentPlayer = visibleItem; + } + } + + private void CreateVideoPlayer(OnlineRiderModel onlineRider,BaseRider item,BaseRider current) + { + videoPlayer = CreatePlayerGameObject(true, App.CurrentUser.Sex == 1); + CurrentUserId = App.CurrentUser.Id; + CurrentPlayer = videoPlayer.GetComponent(); + + var vp = videoPlayer.GetComponent(); + vp.SetEndDistance(item.EndDistance); + CurrentPlayer.SetStartDistance(item.EndDistance); + + var rideObj = videoPlayer.GetComponent(); + rideObj.Distance = (float)CurrentPlayer.StartDistance; + rideObj.RouteDistance = rideObj.Distance; + rideObj.IsMain = true; + rideObj.UserId = item.UserId; + 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, current.EndDistance, onlineRider.FrameRate.Value); + } + + private GameObject CreatePlayerGameObject(bool self,bool isMale) + { + return self ? Instantiate(isMale ? Player : Player_NV, transform) : Instantiate(isMale ? OnlinePlayer : OnlinePlayer_NV, transform); + } + + //移除退出的选手 + private void RemovePlayers(List list) + { + + var players = FindObjectsOfType(); + foreach (var item in players) + { + var currentItem = list.FirstOrDefault(c => c.UserId == item.UserId); + if (currentItem != null) continue; + rideObjs.Remove(item); + visibleRiders.Remove(item); + } + } + //设置当前是骑行模式还是观察模式 public void SetCurrentMode(ARMode aRMode) { @@ -294,9 +328,6 @@ namespace Assets.Scripts.Scenes.VideoRide SetCyclingModel(CyclingModel.Single); } } - public GameObject videoPlayer; - public GameObject target; - public int CurrentUserId { get; set; } //切换人物 public void ChangePlayer(int userId) { diff --git a/Assets/Scripts/Scenes/Ride/Scripts/CyclingController.cs b/Assets/Scripts/Scenes/Ride/Scripts/CyclingController.cs index 652833ad..8a33d3ff 100644 --- a/Assets/Scripts/Scenes/Ride/Scripts/CyclingController.cs +++ b/Assets/Scripts/Scenes/Ride/Scripts/CyclingController.cs @@ -1009,6 +1009,8 @@ public class CyclingController : DeviceServiceMonoBase //新增或者更新 foreach (var item in onlineRiders) { + if(item.IsSelf) continue; + var onlineRider = item as OnlineRiderModel; var currentUser = currentOnlineUserList.FirstOrDefault(c => c.UserId == item.UserId); var onlineDistance = onlineRider.EndDistance - onlineRider.PreDistance; diff --git a/ProjectSettings/EditorBuildSettings.asset b/ProjectSettings/EditorBuildSettings.asset index 96294229..595c2954 100644 --- a/ProjectSettings/EditorBuildSettings.asset +++ b/ProjectSettings/EditorBuildSettings.asset @@ -11,10 +11,10 @@ EditorBuildSettings: - enabled: 1 path: Assets/Scenes/MainScene.unity guid: ab586a3c1bacd4a48a55178eb06fe0cc - - enabled: 1 - path: Assets/Scenes/Ride.unity - guid: d9f6ee75d0d54714fb4d2f90016a28bc - enabled: 1 path: Assets/Scenes/VideoPlay.unity guid: f25b9f482e27079448d130ae1ed0ea34 + - enabled: 1 + path: Assets/Scenes/Ride.unity + guid: d9f6ee75d0d54714fb4d2f90016a28bc m_configObjects: {}