< 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:50
Uncovered lines:20
Coverable lines:70
Total lines:159
Line coverage:71.4% (50 of 70)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
FriendTrackerController(...)0%4.014091.67%
Dispose()0%110100%
AddHandler(...)0%3.033085.71%
RemoveHandler(...)0%6200%
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
 6internal class FriendTrackerController : IDisposable
 7{
 48    Dictionary<IFriendTrackerHandler, TrackedSceneInfo> listeners = new Dictionary<IFriendTrackerHandler, TrackedSceneIn
 49    Dictionary<string, FriendTracker> friends = new Dictionary<string, FriendTracker>();
 10
 11    IFriendsController friendsController;
 12    Color[] friendColors;
 13
 414    public FriendTrackerController(IFriendsController friendsController, Color[] friendColors)
 15    {
 416        this.friendsController = friendsController;
 17
 418        if (friendColors != null && friendColors.Length > 0)
 19        {
 420            this.friendColors = friendColors;
 421        }
 22        else
 23        {
 024            this.friendColors = new Color[] { Color.white };
 25        }
 26
 427        if (!friendsController.isInitialized)
 28        {
 129            friendsController.OnInitialized += OnFriendsInitialized;
 30        }
 31
 432        friendsController.OnUpdateUserStatus += OnUpdateUserStatus;
 433    }
 34
 35    public void Dispose()
 36    {
 1237        friendsController.OnInitialized -= OnFriendsInitialized;
 1238        friendsController.OnUpdateUserStatus -= OnUpdateUserStatus;
 1239        listeners.Clear();
 1240        friends.Clear();
 1241    }
 42
 43    public void AddHandler(IFriendTrackerHandler listener)
 44    {
 45        TrackedSceneInfo wrapper;
 646        if (listeners.TryGetValue(listener, out wrapper))
 47        {
 048            return;
 49        }
 50
 651        wrapper = new TrackedSceneInfo(listener);
 52
 653        if (friendsController.isInitialized)
 54        {
 655            ProcessNewListener(wrapper);
 56        }
 57
 658        listeners.Add(listener, wrapper);
 659    }
 60
 61    public void RemoveHandler(IFriendTrackerHandler listener)
 62    {
 63        TrackedSceneInfo wrapper;
 064        if (listeners.TryGetValue(listener, out wrapper))
 65        {
 066            wrapper.Dispose();
 067            listeners.Remove(listener);
 68        }
 069    }
 70
 71    void OnUpdateUserStatus(string userId, FriendsController.UserStatus status)
 72    {
 573        if (!friendsController.isInitialized)
 074            return;
 75
 76        FriendTracker friend;
 577        if (!friends.TryGetValue(userId, out friend))
 78        {
 379            friend = new FriendTracker(userId, friendColors[Random.Range(0, friendColors.Length)]);
 380            friends.Add(userId, friend);
 81        }
 82
 583        friend.SetStatus(status);
 84
 585        if (!friend.IsOnline())
 86        {
 387            friend.RemoveAllListeners();
 388        }
 89        else
 90        {
 291            ProcessFriendLocation(friend, new Vector2Int((int) status.position.x, (int) status.position.y));
 92        }
 293    }
 94
 95    void OnFriendsInitialized()
 96    {
 097        friendsController.OnInitialized -= OnFriendsInitialized;
 98
 099        using (var friendsIterator = friendsController.GetFriends().GetEnumerator())
 100        {
 0101            while (friendsIterator.MoveNext())
 102            {
 0103                FriendTracker friend = new FriendTracker(friendsIterator.Current.Key, friendColors[Random.Range(0, frien
 0104                friend.SetStatus(friendsIterator.Current.Value);
 0105                friends.Add(friendsIterator.Current.Key, friend);
 106            }
 0107        }
 108
 0109        using (var listenersIterator = listeners.GetEnumerator())
 110        {
 0111            while (listenersIterator.MoveNext())
 112            {
 0113                ProcessNewListener(listenersIterator.Current.Value);
 114            }
 0115        }
 0116    }
 117
 118    void ProcessFriendLocation(FriendTracker friend, Vector2Int coords)
 119    {
 2120        if (!friend.HasChangedLocation(coords))
 0121            return;
 122
 2123        friend.RemoveAllListeners();
 124
 2125        using (var listenersIterator = listeners.GetEnumerator())
 126        {
 5127            while (listenersIterator.MoveNext())
 128            {
 3129                if (listenersIterator.Current.Value.ContainCoords(coords))
 130                {
 1131                    friend.AddListener(listenersIterator.Current.Value);
 132                }
 133            }
 2134        }
 2135    }
 136
 137    void ProcessNewListener(TrackedSceneInfo listener)
 138    {
 6139        Vector2Int friendCoords = new Vector2Int();
 6140        using (var friendIterator = friends.GetEnumerator())
 141        {
 15142            while (friendIterator.MoveNext())
 143            {
 9144                if (!friendIterator.Current.Value.IsOnline())
 145                {
 146                    continue;
 147                }
 148
 3149                friendCoords.x = (int) friendIterator.Current.Value.status.position.x;
 3150                friendCoords.y = (int) friendIterator.Current.Value.status.position.y;
 151
 3152                if (listener.ContainCoords(friendCoords))
 153                {
 1154                    friendIterator.Current.Value.AddListener(listener);
 155                }
 156            }
 6157        }
 6158    }
 159}