< Summary

Class:DCLServices.MapRendererV2.MapLayers.UsersMarkers.HotArea.HotUserMarker
Assembly:MapRendererV2
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/DCLServices/MapRendererV2/MapLayers/UsersMarkers/HotArea/HotUserMarker.cs
Covered lines:17
Uncovered lines:19
Coverable lines:36
Total lines:94
Line coverage:47.2% (17 of 36)
Covered branches:0
Total branches:0
Covered methods:6
Total methods:11
Method coverage:54.5% (6 of 11)

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
HotUserMarker(...)0%110100%
TrackPlayer(...)0%2100%
TrackPosition()0%1821300%
ResetPlayer()0%3.143075%
Dispose()0%110100%
OnMapObjectBecameVisible(...)0%2100%
OnMapObjectCulled(...)0%110100%

File(s)

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

#LineLine coverage
 1using Cysharp.Threading.Tasks;
 2using DCL.Helpers;
 3using DCLServices.MapRendererV2.CommonBehavior;
 4using DCLServices.MapRendererV2.CoordsUtils;
 5using DCLServices.MapRendererV2.Culling;
 6using MainScripts.DCL.Helpers.Utils;
 7using System.Threading;
 8using UnityEngine;
 9
 10namespace DCLServices.MapRendererV2.MapLayers.UsersMarkers.HotArea
 11{
 12    internal class HotUserMarker : IHotUserMarker
 13    {
 14        private readonly ICoordsUtils coordsUtils;
 15        private readonly Vector3Variable worldOffset;
 16
 17        private readonly IMapCullingController cullingController;
 18
 19        private CancellationTokenSource cts;
 20
 288021        public string CurrentPlayerId { get; private set; }
 022        public Vector3 CurrentPosition => poolableBehavior.currentPosition;
 23
 024        public Vector2 Pivot { get; }
 25
 26        private MapMarkerPoolableBehavior<HotUserMarkerObject> poolableBehavior;
 27
 288028        internal HotUserMarker(IUnityObjectPool<HotUserMarkerObject> pool, IMapCullingController mapCullingController, I
 29        {
 288030            this.coordsUtils = coordsUtils;
 288031            this.worldOffset = worldOffset;
 288032            this.cullingController = mapCullingController;
 288033            this.Pivot = pool.Prefab.pivot;
 34
 288035            poolableBehavior = new MapMarkerPoolableBehavior<HotUserMarkerObject>(pool);
 288036        }
 37
 38        public void TrackPlayer(Player player)
 39        {
 040            cts = new CancellationTokenSource();
 41
 042            CurrentPlayerId = player.id;
 043            TrackPosition(player, cts.Token).Forget();
 044        }
 45
 46        private async UniTaskVoid TrackPosition(Player player, CancellationToken ct)
 47        {
 048            var startedTracking = false;
 49
 50            // it takes the first value
 051            await foreach (var position in player.WorldPositionProp)
 52            {
 053                if (ct.IsCancellationRequested)
 54                    return;
 55
 056                var gridPosition = Utils.WorldToGridPositionUnclamped(position + worldOffset.Get());
 057                poolableBehavior.SetCurrentPosition(coordsUtils.PivotPosition(this, coordsUtils.CoordsToPositionUnclampe
 58
 059                if (startedTracking)
 060                    cullingController.SetTrackedObjectPositionDirty(this);
 61                else
 62                {
 063                    cullingController.StartTracking(this, this);
 064                    startedTracking = true;
 65                }
 66            }
 067        }
 68
 69        private void ResetPlayer()
 70        {
 288071            CurrentPlayerId = null;
 288072            cts?.Cancel();
 288073            cts?.Dispose();
 074        }
 75
 76        public void Dispose()
 77        {
 288078            OnMapObjectCulled(this);
 288079            cullingController.StopTracking(this);
 288080            ResetPlayer();
 288081        }
 82
 83        public void OnMapObjectBecameVisible(IHotUserMarker obj)
 84        {
 085            poolableBehavior.OnBecameVisible();
 086        }
 87
 88        public void OnMapObjectCulled(IHotUserMarker obj)
 89        {
 288090            poolableBehavior.OnBecameInvisible();
 91            // Keep tracking position
 288092        }
 93    }
 94}