< Summary

Class:AvatarNamesHUD.AvatarNamesHUDController
Assembly:AvatarNamesHUD
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/HUD/AvatarNamesHUD/AvatarNamesHUDController.cs
Covered lines:37
Uncovered lines:1
Coverable lines:38
Total lines:79
Line coverage:97.3% (37 of 38)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
AvatarNamesHUDController(...)0%110100%
CreateView()0%110100%
AvatarNamesHUDController()0%110100%
Initialize()0%440100%
OnOtherPlayersStatusAdded(...)0%440100%
OnOtherPlayersStatusRemoved(...)0%660100%
SetVisibility(...)0%220100%
Dispose()0%220100%

File(s)

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

#LineLine coverage
 1using System.Collections.Generic;
 2using DCL;
 3
 4namespace AvatarNamesHUD
 5{
 6    public class AvatarNamesHUDController : IHUD
 7    {
 8        private const int DEFAULT_MAX_AVATARS = 200;
 9
 010        private BaseDictionary<string, Player> otherPlayers => DataStore.i.player.otherPlayers;
 11
 12        internal IAvatarNamesHUDView view;
 813        internal readonly HashSet<string> trackingPlayers = new HashSet<string>();
 814        internal readonly LinkedList<string> reservePlayers = new LinkedList<string>();
 15
 116        internal virtual IAvatarNamesHUDView CreateView() { return AvatarNamesHUDView.CreateView(); }
 17
 18        private int maxAvatarNames;
 19
 220        public AvatarNamesHUDController() : this(DEFAULT_MAX_AVATARS) { }
 2421        public AvatarNamesHUDController(int maxAvatarNames) { this.maxAvatarNames = maxAvatarNames; }
 22
 23        public void Initialize()
 24        {
 825            view = CreateView();
 826            view?.Initialize(maxAvatarNames);
 27
 828            otherPlayers.OnAdded += OnOtherPlayersStatusAdded;
 829            otherPlayers.OnRemoved += OnOtherPlayersStatusRemoved;
 830            using var enumerator = otherPlayers.Get().GetEnumerator();
 1231            while (enumerator.MoveNext())
 32            {
 433                OnOtherPlayersStatusAdded(enumerator.Current.Key, enumerator.Current.Value);
 34            }
 1635        }
 36
 37        internal void OnOtherPlayersStatusAdded(string userId, Player player)
 38        {
 1239            if (trackingPlayers.Contains(userId))
 240                return;
 41
 1042            if (trackingPlayers.Count < maxAvatarNames)
 43            {
 744                trackingPlayers.Add(userId);
 745                view?.TrackPlayer(player);
 746            }
 47            else
 348                reservePlayers.AddLast(userId);
 349        }
 50
 51        internal void OnOtherPlayersStatusRemoved(string userId, Player player)
 52        {
 453            reservePlayers.Remove(userId);
 454            if (!trackingPlayers.Remove(userId))
 255                return;
 56
 257            view?.UntrackPlayer(userId);
 258            while (reservePlayers.Count > 0)
 59            {
 160                LinkedListNode<string> reserveNode = reservePlayers.First;
 161                reservePlayers.RemoveFirst();
 162                if (trackingPlayers.Add(reserveNode.Value))
 63                {
 164                    view?.TrackPlayer(player);
 165                    return;
 66                }
 67            }
 168        }
 69
 270        public void SetVisibility(bool visible) { view?.SetVisibility(visible); }
 71
 72        public void Dispose()
 73        {
 174            otherPlayers.OnAdded -= OnOtherPlayersStatusAdded;
 175            otherPlayers.OnRemoved -= OnOtherPlayersStatusRemoved;
 176            view?.Dispose();
 177        }
 78    }
 79}