< Summary

Class:DCLServices.MapRendererV2.MapLayers.UsersMarkers.HotArea.UsersMarkersHotAreaController
Assembly:MapRendererV2
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/DCLServices/MapRendererV2/MapLayers/UsersMarkers/HotArea/UsersMarkersHotAreaController.cs
Covered lines:19
Uncovered lines:15
Coverable lines:34
Total lines:97
Line coverage:55.8% (19 of 34)
Covered branches:0
Total branches:0
Covered methods:4
Total methods:8
Method coverage:50% (4 of 8)

Metrics

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

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/DCLServices/MapRendererV2/MapLayers/UsersMarkers/HotArea/UsersMarkersHotAreaController.cs

#LineLine coverage
 1using Cysharp.Threading.Tasks;
 2using DCLServices.MapRendererV2.CoordsUtils;
 3using DCLServices.MapRendererV2.Culling;
 4using DCLServices.MapRendererV2.MapCameraController;
 5using MainScripts.DCL.Helpers.Utils;
 6using System;
 7using System.Collections.Generic;
 8using System.Threading;
 9using UnityEngine;
 10using UnityEngine.Pool;
 11
 12namespace DCLServices.MapRendererV2.MapLayers.UsersMarkers.HotArea
 13{
 14    /// <summary>
 15    /// Updates players' positions within the comms radius
 16    /// </summary>
 17    internal class UsersMarkersHotAreaController : MapLayerControllerBase, IMapLayerController
 18    {
 19        internal const int PREWARM_PER_FRAME = 20;
 20
 21        private readonly IUnityObjectPool<HotUserMarkerObject> objectsPool;
 22        private readonly IObjectPool<IHotUserMarker> wrapsPool;
 23
 24        private readonly BaseDictionary<string, Player> otherPlayers;
 25
 26        private readonly int prewarmCount;
 27
 9628        private readonly Dictionary<string, IHotUserMarker> markers = new ();
 29
 030        internal IReadOnlyDictionary<string, IHotUserMarker> Markers => markers;
 31
 32        public UsersMarkersHotAreaController(BaseDictionary<string, Player> otherPlayers,
 33            IUnityObjectPool<HotUserMarkerObject> objectsPool, IObjectPool<IHotUserMarker> wrapsPool,
 34            int prewarmCount, Transform parent, ICoordsUtils coordsUtils, IMapCullingController cullingController)
 9635            : base(parent, coordsUtils, cullingController)
 36        {
 9637            this.otherPlayers = otherPlayers;
 9638            this.objectsPool = objectsPool;
 9639            this.prewarmCount = prewarmCount;
 40
 9641            this.wrapsPool = wrapsPool;
 9642        }
 43
 44        public UniTask Initialize(CancellationToken cancellationToken)
 45        {
 9646            wrapsPool.Prewarm(prewarmCount);
 9647            return objectsPool.PrewarmAsync(prewarmCount, PREWARM_PER_FRAME, LinkWithDisposeToken(cancellationToken).Tok
 48        }
 49
 50        protected override void DisposeImpl()
 51        {
 652            objectsPool.Clear();
 653            wrapsPool.Clear();
 54
 655            otherPlayers.OnAdded -= OnOtherPlayerAdded;
 656            otherPlayers.OnRemoved -= OnOtherPlayerRemoved;
 657        }
 58
 59        private void OnOtherPlayerAdded(string id, Player player)
 60        {
 061            var wrap = wrapsPool.Get();
 062            wrap.TrackPlayer(player);
 063            markers.Add(id, wrap);
 064        }
 65
 66        private void OnOtherPlayerRemoved(string id, Player player)
 67        {
 068            if (markers.TryGetValue(id, out var marker))
 69            {
 070                wrapsPool.Release(marker);
 071                markers.Remove(id);
 72            }
 073        }
 74
 75        public UniTask Enable(CancellationToken cancellationToken)
 76        {
 077            foreach (var pair in otherPlayers.Get())
 078                OnOtherPlayerAdded(pair.Key, pair.Value);
 79
 080            otherPlayers.OnAdded += OnOtherPlayerAdded;
 081            otherPlayers.OnRemoved += OnOtherPlayerRemoved;
 082            return UniTask.CompletedTask;
 83        }
 84
 85        public UniTask Disable(CancellationToken cancellationToken)
 86        {
 8887            otherPlayers.OnAdded -= OnOtherPlayerAdded;
 8888            otherPlayers.OnRemoved -= OnOtherPlayerRemoved;
 89
 17690            foreach (IHotUserMarker marker in markers.Values)
 091                wrapsPool.Release(marker);
 92
 8893            markers.Clear();
 8894            return UniTask.CompletedTask;
 95        }
 96    }
 97}