< Summary

Class:DCLServices.MapRendererV2.MapLayers.UsersMarkers.Friends.FriendsMarkersAreaController
Assembly:MapRendererV2
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/DCLServices/MapRendererV2/MapLayers/UsersMarkers/Friends/FriendsMarkersAreaController.cs
Covered lines:21
Uncovered lines:33
Coverable lines:54
Total lines:137
Line coverage:38.8% (21 of 54)
Covered branches:0
Total branches:0
Covered methods:4
Total methods:11
Method coverage:36.3% (4 of 11)

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
FriendsMarkersAreaController(...)0%110100%
Initialize(...)0%110100%
DisposeImpl()0%110100%
OnOtherPlayerAdded(...)0%2100%
CheckIfIsFriend()0%1321100%
OnOtherPlayerRemoved(...)0%6200%
ApplyCameraZoom(...)0%6200%
ResetToBaseScale()0%6200%
Enable(...)0%12300%
Disable(...)0%2.062075%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/DCLServices/MapRendererV2/MapLayers/UsersMarkers/Friends/FriendsMarkersAreaController.cs

#LineLine coverage
 1using Cysharp.Threading.Tasks;
 2using DCL.Social.Friends;
 3using DCLServices.MapRendererV2.CoordsUtils;
 4using DCLServices.MapRendererV2.Culling;
 5using DCLServices.MapRendererV2.MapCameraController;
 6using MainScripts.DCL.Helpers.Utils;
 7using System;
 8using System.Collections.Generic;
 9using System.Threading;
 10using UnityEngine;
 11using UnityEngine.Pool;
 12using UnityEngine.SocialPlatforms.Impl;
 13using Environment = DCL.Environment;
 14
 15namespace DCLServices.MapRendererV2.MapLayers.UsersMarkers.Friends
 16{
 17    /// <summary>
 18    /// Updates players' positions within the comms radius
 19    /// </summary>
 20    internal class FriendsMarkersAreaController : MapLayerControllerBase, IMapLayerController, IZoomScalingLayer
 21    {
 22        internal const int PREWARM_PER_FRAME = 20;
 23
 24        private readonly IUnityObjectPool<FriendUserMarkerObject> objectsPool;
 25        private readonly IObjectPool<IFriendUserMarker> wrapsPool;
 26        private readonly IUserProfileBridge userProfileBridge;
 27        private readonly IFriendsController friendsController;
 28
 29        private readonly BaseDictionary<string, Player> otherPlayers;
 30
 31        private readonly int prewarmCount;
 32
 9633        private readonly Dictionary<string, IFriendUserMarker> markers = new ();
 34
 035        internal IReadOnlyDictionary<string, IFriendUserMarker> Markers => markers;
 36
 37        public FriendsMarkersAreaController(BaseDictionary<string, Player> otherPlayers,
 38            IUnityObjectPool<FriendUserMarkerObject> objectsPool, IObjectPool<IFriendUserMarker> wrapsPool,
 39            int prewarmCount, Transform parent, ICoordsUtils coordsUtils, IMapCullingController cullingController, IUser
 40            IFriendsController friendsController)
 9641            : base(parent, coordsUtils, cullingController)
 42        {
 9643            this.otherPlayers = otherPlayers;
 9644            this.objectsPool = objectsPool;
 9645            this.prewarmCount = prewarmCount;
 9646            this.wrapsPool = wrapsPool;
 9647            this.userProfileBridge = userProfileBridge;
 9648            this.friendsController = friendsController;
 9649        }
 50
 51        public UniTask Initialize(CancellationToken cancellationToken)
 52        {
 9653            wrapsPool.Prewarm(prewarmCount);
 9654            return objectsPool.PrewarmAsync(prewarmCount, PREWARM_PER_FRAME, LinkWithDisposeToken(cancellationToken).Tok
 55        }
 56
 57        protected override void DisposeImpl()
 58        {
 659            objectsPool.Clear();
 660            wrapsPool.Clear();
 61
 662            otherPlayers.OnAdded -= OnOtherPlayerAdded;
 663            otherPlayers.OnRemoved -= OnOtherPlayerRemoved;
 664        }
 65
 66        private void OnOtherPlayerAdded(string id, Player player)
 67        {
 068            CheckIfIsFriend(player).Forget();
 069        }
 70
 71        private async UniTaskVoid CheckIfIsFriend(Player player)
 72        {
 073            if (await friendsController.GetFriendshipStatus(player.id) != FriendshipStatus.FRIEND)
 074                return;
 75
 076            if (markers.ContainsKey(player.id))
 077                return;
 78
 079            UserProfile recipientProfile = userProfileBridge.Get(player.id);
 80
 081            try { recipientProfile ??= await userProfileBridge.RequestFullUserProfileAsync(player.id, CancellationToken.
 082            catch (Exception e) when (e is not OperationCanceledException)
 83            {
 084                throw;
 85            }
 86
 087            var wrap = wrapsPool.Get();
 088            wrap.TrackPlayer(player);
 089            wrap.SetProfilePicture(recipientProfile.face256SnapshotURL);
 090            wrap.SetPlayerName(player.name);
 091            markers.Add(player.id, wrap);
 092        }
 93
 94        private void OnOtherPlayerRemoved(string id, Player player)
 95        {
 096            if (markers.TryGetValue(id, out var marker))
 97            {
 098                wrapsPool.Release(marker);
 099                markers.Remove(id);
 100            }
 0101        }
 102
 103        public void ApplyCameraZoom(float baseZoom, float zoom)
 104        {
 0105            foreach (var marker in markers.Values)
 0106                marker.SetZoom(coordsUtils.ParcelSize, baseZoom, zoom);
 0107        }
 108
 109        public void ResetToBaseScale()
 110        {
 0111            foreach (var marker in markers.Values)
 0112                marker.ResetScale(coordsUtils.ParcelSize);
 0113        }
 114
 115        public UniTask Enable(CancellationToken cancellationToken)
 116        {
 0117            foreach (var pair in otherPlayers.Get())
 0118                OnOtherPlayerAdded(pair.Key, pair.Value);
 119
 0120            otherPlayers.OnAdded += OnOtherPlayerAdded;
 0121            otherPlayers.OnRemoved += OnOtherPlayerRemoved;
 0122            return UniTask.CompletedTask;
 123        }
 124
 125        public UniTask Disable(CancellationToken cancellationToken)
 126        {
 88127            otherPlayers.OnAdded -= OnOtherPlayerAdded;
 88128            otherPlayers.OnRemoved -= OnOtherPlayerRemoved;
 129
 176130            foreach (IFriendUserMarker marker in markers.Values)
 0131                wrapsPool.Release(marker);
 132
 88133            markers.Clear();
 88134            return UniTask.CompletedTask;
 135        }
 136    }
 137}