< Summary

Class:FriendTrackerController
Assembly:ExploreHUD
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/HUD/ExploreHUD/Scripts/Friends/FriendTrackerController.cs
Covered lines:58
Uncovered lines:20
Coverable lines:78
Total lines:178
Line coverage:74.3% (58 of 78)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
FriendTrackerController(...)0%550100%
Dispose()0%220100%
AddHandler(...)0%4.054085.71%
RemoveHandler(...)0%6200%
RemoveAllHandlers()0%2.022083.33%
OnUpdateUserStatus(...)0%4.014090.91%
OnFriendsInitialized()0%12300%
ProcessFriendLocation(...)0%4.024088.89%
ProcessNewListener(...)0%440100%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/HUD/ExploreHUD/Scripts/Friends/FriendTrackerController.cs

#LineLine coverage
 1using UnityEngine;
 2using System;
 3using System.Collections.Generic;
 4using Random = UnityEngine.Random;
 5
 6public class FriendTrackerController : IDisposable
 7{
 218    Dictionary<IFriendTrackerHandler, TrackedSceneInfo> listeners = new Dictionary<IFriendTrackerHandler, TrackedSceneIn
 219    Dictionary<string, FriendTracker> friends = new Dictionary<string, FriendTracker>();
 10
 11    IFriendsController friendsController;
 12    Color[] friendColors;
 13
 2114    public FriendTrackerController(IFriendsController friendsController, Color[] friendColors)
 15    {
 2116        this.friendsController = friendsController;
 17
 2118        if (friendColors != null && friendColors.Length > 0)
 19        {
 420            this.friendColors = friendColors;
 421        }
 22        else
 23        {
 1724            this.friendColors = new Color[] { Color.white };
 25        }
 26
 2127        if (friendsController != null)
 28        {
 2129            if (!friendsController.isInitialized)
 30            {
 1831                friendsController.OnInitialized += OnFriendsInitialized;
 32            }
 33
 2134            friendsController.OnUpdateUserStatus += OnUpdateUserStatus;
 35        }
 2136    }
 37
 38    public void Dispose()
 39    {
 1240        if (friendsController != null)
 41        {
 1242            friendsController.OnInitialized -= OnFriendsInitialized;
 1243            friendsController.OnUpdateUserStatus -= OnUpdateUserStatus;
 44        }
 1245        listeners.Clear();
 1246        friends.Clear();
 1247    }
 48
 49    public void AddHandler(IFriendTrackerHandler listener)
 50    {
 51        TrackedSceneInfo wrapper;
 652        if (listeners.TryGetValue(listener, out wrapper))
 53        {
 054            return;
 55        }
 56
 657        wrapper = new TrackedSceneInfo(listener);
 58
 659        if (friendsController != null && friendsController.isInitialized)
 60        {
 661            ProcessNewListener(wrapper);
 62        }
 63
 664        listeners.Add(listener, wrapper);
 665    }
 66
 67    public void RemoveHandler(IFriendTrackerHandler listener)
 68    {
 69        TrackedSceneInfo wrapper;
 070        if (listeners.TryGetValue(listener, out wrapper))
 71        {
 072            wrapper.Dispose();
 073            listeners.Remove(listener);
 74        }
 075    }
 76
 77    public void RemoveAllHandlers()
 78    {
 279        using (var listenersIterator = listeners.GetEnumerator())
 80        {
 281            while (listenersIterator.MoveNext())
 82            {
 083                listenersIterator.Current.Value.Dispose();
 84            }
 285        }
 86
 287        listeners.Clear();
 288    }
 89
 90    void OnUpdateUserStatus(string userId, FriendsController.UserStatus status)
 91    {
 592        if (!friendsController.isInitialized)
 093            return;
 94
 95        FriendTracker friend;
 596        if (!friends.TryGetValue(userId, out friend))
 97        {
 398            friend = new FriendTracker(userId, friendColors[Random.Range(0, friendColors.Length)]);
 399            friends.Add(userId, friend);
 100        }
 101
 5102        friend.SetStatus(status);
 103
 5104        if (!friend.IsOnline())
 105        {
 3106            friend.RemoveAllListeners();
 3107        }
 108        else
 109        {
 2110            ProcessFriendLocation(friend, new Vector2Int((int) status.position.x, (int) status.position.y));
 111        }
 2112    }
 113
 114    void OnFriendsInitialized()
 115    {
 0116        friendsController.OnInitialized -= OnFriendsInitialized;
 117
 0118        using (var friendsIterator = friendsController.GetFriends().GetEnumerator())
 119        {
 0120            while (friendsIterator.MoveNext())
 121            {
 0122                FriendTracker friend = new FriendTracker(friendsIterator.Current.Key, friendColors[Random.Range(0, frien
 0123                friend.SetStatus(friendsIterator.Current.Value);
 0124                friends.Add(friendsIterator.Current.Key, friend);
 125            }
 0126        }
 127
 0128        using (var listenersIterator = listeners.GetEnumerator())
 129        {
 0130            while (listenersIterator.MoveNext())
 131            {
 0132                ProcessNewListener(listenersIterator.Current.Value);
 133            }
 0134        }
 0135    }
 136
 137    void ProcessFriendLocation(FriendTracker friend, Vector2Int coords)
 138    {
 2139        if (!friend.HasChangedLocation(coords))
 0140            return;
 141
 2142        friend.RemoveAllListeners();
 143
 2144        using (var listenersIterator = listeners.GetEnumerator())
 145        {
 5146            while (listenersIterator.MoveNext())
 147            {
 3148                if (listenersIterator.Current.Value.ContainCoords(coords))
 149                {
 1150                    friend.AddListener(listenersIterator.Current.Value);
 151                }
 152            }
 2153        }
 2154    }
 155
 156    void ProcessNewListener(TrackedSceneInfo listener)
 157    {
 6158        Vector2Int friendCoords = new Vector2Int();
 6159        using (var friendIterator = friends.GetEnumerator())
 160        {
 15161            while (friendIterator.MoveNext())
 162            {
 9163                if (!friendIterator.Current.Value.IsOnline())
 164                {
 165                    continue;
 166                }
 167
 3168                friendCoords.x = (int) friendIterator.Current.Value.status.position.x;
 3169                friendCoords.y = (int) friendIterator.Current.Value.status.position.y;
 170
 3171                if (listener.ContainCoords(friendCoords))
 172                {
 1173                    friendIterator.Current.Value.AddListener(listener);
 174                }
 175            }
 6176        }
 6177    }
 178}