diff --git a/Assets/UnityPharusAPI/Managers/ATracklinkPlayerManager.cs b/Assets/UnityPharusAPI/Managers/ATracklinkPlayerManager.cs index 68921de..b4160fe 100644 --- a/Assets/UnityPharusAPI/Managers/ATracklinkPlayerManager.cs +++ b/Assets/UnityPharusAPI/Managers/ATracklinkPlayerManager.cs @@ -94,8 +94,11 @@ public virtual void AddPlayer(TrackRecord trackRecord) aPlayer.Orientation = new Vector2(trackRecord.orientation.x, trackRecord.orientation.y); aPlayer.Speed = trackRecord.speed; aPlayer.Echoes.Clear(); - trackRecord.echoes.AddToVector2List(VectorAdapter.ToPharusVector2List(aPlayer.Echoes)); - + // trackRecord.echoes.AddToVector2List(VectorAdapter.ToPharusVector2List(aPlayer.Echoes)); + for (int i = 0; i < trackRecord.echoes.Count; i++) + { + aPlayer.Echoes.TryAdd(i, new Vector2(trackRecord.echoes[i].x, trackRecord.echoes[i].y)); + } aPlayer.gameObject.name = string.Format("PharusPlayer_{0}", aPlayer.TrackID); _playerList.Add(aPlayer); @@ -118,7 +121,11 @@ public virtual void UpdatePlayerPosition(TrackRecord trackRecord) aPlayer.Speed = trackRecord.speed; // use AddToVector2List() instead of ToVector2List() as it is more performant aPlayer.Echoes.Clear(); - trackRecord.echoes.AddToVector2List(VectorAdapter.ToPharusVector2List(aPlayer.Echoes)); + // trackRecord.echoes.AddToVector2List(VectorAdapter.ToPharusVector2List(aPlayer.Echoes)); + for(int i = 0; i < trackRecord.echoes.Count; i++) + { + aPlayer.Echoes.TryAdd(i, new Vector2(trackRecord.echoes[i].x, trackRecord.echoes[i].y)); + } //aPlayer.SetPosition(TracklinkTrackingService.GetScreenPositionFromRelativePosition(trackRecord.relPos)); aPlayer.SetPosition(VectorAdapter.ToUnityVector2(TrackingAdapter.GetScreenPositionFromRelativePosition(trackRecord.relPos.x, trackRecord.relPos.y))); return; diff --git a/Assets/UnityPharusAPI/Player/ATrackingEntity.cs b/Assets/UnityPharusAPI/Player/ATrackingEntity.cs index 60dcf6a..e443696 100644 --- a/Assets/UnityPharusAPI/Player/ATrackingEntity.cs +++ b/Assets/UnityPharusAPI/Player/ATrackingEntity.cs @@ -1,4 +1,5 @@ using Assets.UnityPharusAPI.Helper; +using System.Collections.Concurrent; using System.Collections.Generic; using UnityEngine; using UnityPharusAPI; @@ -16,7 +17,7 @@ public abstract class ATrackingEntity : MonoBehaviour private Vector2 _relativePosition; private Vector2 _orientation; private float _speed; - private List _echoes = new List(); + private ConcurrentDictionary _echoes = new ConcurrentDictionary(); #region properties /// @@ -74,9 +75,9 @@ public float Speed } /// - /// A list of the track's echoes (feet) as Vector2 + /// A Dictionary of the track's echoes (feet) as key,value(integer,Vector2) pair /// - public List Echoes + public ConcurrentDictionary Echoes { get { return _echoes; } set { _echoes = value; } @@ -99,9 +100,9 @@ private void OnDrawGizmos() Gizmos.color = Color.red; // DEBUG DRAW ECHOES - foreach (Vector2 echo in Echoes) + foreach (KeyValuePair keyValuePair in Echoes.ToArray()) { - Gizmos.DrawWireSphere (VectorAdapter.ToUnityVector2(TrackingAdapter.GetScreenPositionFromRelativePosition(echo.x, echo.y)), 12f); + Gizmos.DrawWireSphere (VectorAdapter.ToUnityVector2(TrackingAdapter.GetScreenPositionFromRelativePosition(keyValuePair.Value.x, keyValuePair.Value.y)), 12f); } } }