< 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:41
Uncovered lines:6
Coverable lines:47
Total lines:119
Line coverage:87.2% (41 of 47)
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%3.023086.67%
SetVisibility(...)0%110100%
TrackPlayer(...)0%2.062075%
UntrackPlayer(...)0%2.012085.71%
UpdateTrackersRoutine()0%440100%
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 UnityEngine;
 5
 6namespace AvatarNamesHUD
 7{
 8    public interface IAvatarNamesHUDView
 9    {
 10        void Initialize(int maxAvatarNames);
 11        void SetVisibility(bool visibility);
 12        void TrackPlayer(Player player);
 13        void UntrackPlayer(string userId);
 14        void Dispose();
 15    }
 16
 17    public class AvatarNamesHUDView : MonoBehaviour, IAvatarNamesHUDView
 18    {
 19        [SerializeField] internal RectTransform canvasRect;
 20        [SerializeField] internal RectTransform backgroundsContainer;
 21        [SerializeField] internal RectTransform namesContainer;
 22        [SerializeField] internal RectTransform voiceChatContainer;
 23        [SerializeField] internal GameObject backgroundPrefab;
 24        [SerializeField] internal GameObject namePrefab;
 25        [SerializeField] internal GameObject voiceChatPrefab;
 26
 827        internal readonly Dictionary<string, AvatarNamesTracker> trackers = new Dictionary<string, AvatarNamesTracker>()
 828        internal readonly Queue<AvatarNamesTracker> reserveTrackers = new Queue<AvatarNamesTracker>();
 29
 30        private bool isDestroyed = false;
 31
 32        public static IAvatarNamesHUDView CreateView()
 33        {
 134            AvatarNamesHUDView view = Instantiate(Resources.Load<GameObject>("AvatarNamesHUD")).GetComponent<AvatarNames
 135            view.gameObject.name = "_AvatarNamesHUD";
 136            return view;
 37        }
 38
 39        private void OnEnable()
 40        {
 541            canvasRect.GetComponent<Canvas>().sortingOrder = -2;
 542            StartCoroutine(UpdateTrackersRoutine());
 543        }
 44
 45        public void Initialize(int maxAvatarNames)
 46        {
 47            //Return current trackers to reserve
 548            trackers.Keys.ToList().ForEach(UntrackPlayer);
 549            trackers.Clear();
 50
 51            //Remove exceeding trackers in the reserve
 552            while (reserveTrackers.Count > maxAvatarNames)
 53            {
 054                AvatarNamesTracker tracker = reserveTrackers.Dequeue();
 055                tracker.DestroyUIElements();
 56            }
 57
 58            //Fill the reserve if not ready
 43459            for (int i = reserveTrackers.Count; i < maxAvatarNames; i++)
 60            {
 21261                RectTransform background = Instantiate(backgroundPrefab, backgroundsContainer).GetComponent<RectTransfor
 21262                RectTransform nameTMP = Instantiate(namePrefab, namesContainer).GetComponent<RectTransform>();
 21263                RectTransform voiceChat = Instantiate(voiceChatPrefab, voiceChatContainer).GetComponent<RectTransform>()
 21264                AvatarNamesTracker tracker = new AvatarNamesTracker(canvasRect, background, nameTMP, voiceChat);
 21265                tracker.SetVisibility(false);
 21266                reserveTrackers.Enqueue(tracker);
 67            }
 568        }
 69
 270        public void SetVisibility(bool visibility) { gameObject.SetActive(visibility); }
 71
 72        public void TrackPlayer(Player player)
 73        {
 474            if (reserveTrackers.Count == 0)
 75            {
 076                Debug.LogError("No tracker available for this AvatarName");
 077                return;
 78            }
 79
 480            AvatarNamesTracker tracker = reserveTrackers.Dequeue();
 481            tracker.SetPlayer(player);
 482            tracker.SetVisibility(true);
 483            trackers.Add(player.id, tracker);
 484        }
 85
 86        public void UntrackPlayer(string userId)
 87        {
 188            if (!trackers.TryGetValue(userId, out AvatarNamesTracker tracker))
 089                return;
 90
 191            trackers.Remove(userId);
 192            tracker.SetPlayer(null);
 193            tracker.SetVisibility(false);
 194            reserveTrackers.Enqueue(tracker);
 195        }
 96
 97        private IEnumerator UpdateTrackersRoutine()
 98        {
 2299            while (true)
 100            {
 124101                foreach (KeyValuePair<string, AvatarNamesTracker> kvp in trackers)
 102                {
 35103                    kvp.Value.UpdatePosition();
 104                }
 27105                yield return null;
 106            }
 107        }
 108
 10109        private void OnDestroy() { isDestroyed = true; }
 110
 111        public void Dispose()
 112        {
 1113            if (isDestroyed)
 0114                return;
 1115            isDestroyed = true;
 1116            Destroy(gameObject);
 1117        }
 118    }
 119}