< Summary

Class:AvatarNamesHUD.AvatarNamesHUDView
Assembly:AvatarNamesHUD
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/HUD/AvatarNamesHUD/AvatarNamesHUDView.cs
Covered lines:45
Uncovered lines:7
Coverable lines:52
Total lines:128
Line coverage:86.5% (45 of 52)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
AvatarNamesHUDView()0%110100%
CreateView()0%110100%
OnEnable()0%110100%
Initialize()0%220100%
CreateTracker()0%110100%
SetVisibility(...)0%110100%
TrackPlayer(...)0%2.012085.71%
UntrackPlayer(...)0%2.012085.71%
UpdateTrackersRoutine()0%6.566075%
OnDestroy()0%110100%
Dispose()0%2.032080%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/HUD/AvatarNamesHUD/AvatarNamesHUDView.cs

#LineLine coverage
 1using System.Collections;
 2using System.Collections.Generic;
 3using System.Linq;
 4using DCL;
 5using UnityEngine;
 6
 7namespace AvatarNamesHUD
 8{
 9    public interface IAvatarNamesHUDView
 10    {
 11        void Initialize();
 12        void SetVisibility(bool visibility);
 13        void TrackPlayer(Player player);
 14        void UntrackPlayer(string userId);
 15        void Dispose();
 16    }
 17
 18    public class AvatarNamesHUDView : MonoBehaviour, IAvatarNamesHUDView
 19    {
 20        internal const int MAX_AVATAR_NAMES = 100; //Regardless of what the dataStore says, we will show up to 100 names
 21        internal const int INITIAL_RESERVE_SIZE = 50; //Regardless of what the dataStore says, we will show up to 100 na
 22
 23        [SerializeField] internal RectTransform canvasRect;
 24        [SerializeField] internal RectTransform backgroundsContainer;
 25        [SerializeField] internal RectTransform namesContainer;
 26        [SerializeField] internal RectTransform voiceChatContainer;
 27        [SerializeField] internal GameObject backgroundPrefab;
 28        [SerializeField] internal GameObject namePrefab;
 29        [SerializeField] internal GameObject voiceChatPrefab;
 30
 931        internal readonly Dictionary<string, AvatarNamesTracker> trackers = new Dictionary<string, AvatarNamesTracker>()
 932        internal readonly Queue<AvatarNamesTracker> reserveTrackers = new Queue<AvatarNamesTracker>();
 033        internal BaseHashSet<string> visibleNames => DataStore.i.avatarsLOD.visibleNames;
 34
 35        internal bool isDestroyed = false;
 36
 37        public static IAvatarNamesHUDView CreateView()
 38        {
 139            AvatarNamesHUDView view = Instantiate(Resources.Load<GameObject>("AvatarNamesHUD")).GetComponent<AvatarNames
 140            view.gameObject.name = "_AvatarNamesHUD";
 141            return view;
 42        }
 43
 44        private void OnEnable()
 45        {
 646            canvasRect.GetComponent<Canvas>().sortingOrder = -2;
 647            StartCoroutine(UpdateTrackersRoutine());
 648        }
 49
 50        public void Initialize()
 51        {
 52            //Return current trackers to reserve
 653            trackers.Keys.ToList().ForEach(UntrackPlayer);
 654            trackers.Clear();
 55
 56            //Fill the reserve
 30657            while (reserveTrackers.Count < INITIAL_RESERVE_SIZE)
 58            {
 30059                AvatarNamesTracker tracker = CreateTracker();
 30060                reserveTrackers.Enqueue(tracker);
 61            }
 662        }
 63
 64        private AvatarNamesTracker CreateTracker()
 65        {
 30066            RectTransform background = Instantiate(backgroundPrefab, backgroundsContainer).GetComponent<RectTransform>()
 30067            RectTransform nameTMP = Instantiate(namePrefab, namesContainer).GetComponent<RectTransform>();
 30068            RectTransform voiceChat = Instantiate(voiceChatPrefab, voiceChatContainer).GetComponent<RectTransform>();
 30069            AvatarNamesTracker tracker = new AvatarNamesTracker(canvasRect, background, nameTMP, voiceChat);
 30070            tracker.SetVisibility(false);
 30071            return tracker;
 72        }
 73
 274        public void SetVisibility(bool visibility) { gameObject.SetActive(visibility); }
 75
 76        public void TrackPlayer(Player player)
 77        {
 578            if (reserveTrackers.Count == 0)
 079                reserveTrackers.Enqueue(CreateTracker());
 80
 581            AvatarNamesTracker tracker = reserveTrackers.Dequeue();
 582            tracker.SetPlayer(player);
 583            tracker.SetVisibility(true);
 584            trackers.Add(player.id, tracker);
 585        }
 86
 87        public void UntrackPlayer(string userId)
 88        {
 189            if (!trackers.TryGetValue(userId, out AvatarNamesTracker tracker))
 090                return;
 91
 192            trackers.Remove(userId);
 193            tracker.SetPlayer(null);
 194            tracker.SetVisibility(false);
 195            reserveTrackers.Enqueue(tracker);
 196        }
 97
 98        private IEnumerator UpdateTrackersRoutine()
 99        {
 22100            while (true)
 101            {
 28102                int count = 0;
 126103                foreach (KeyValuePair<string, AvatarNamesTracker> kvp in trackers)
 104                {
 35105                    if (count >= MAX_AVATAR_NAMES || !visibleNames.Contains(kvp.Key))
 106                    {
 35107                        kvp.Value.SetVisibility(false);
 35108                        continue;
 109                    }
 0110                    kvp.Value.SetVisibility(true);
 0111                    kvp.Value.UpdatePosition();
 0112                    count++;
 113                }
 28114                yield return null;
 115            }
 116        }
 117
 12118        private void OnDestroy() { isDestroyed = true; }
 119
 120        public void Dispose()
 121        {
 1122            if (isDestroyed)
 0123                return;
 1124            isDestroyed = true;
 1125            Destroy(gameObject);
 1126        }
 127    }
 128}