< Summary

Class:DCLServices.MapRendererV2.MapLayers.UsersMarkers.Friends.FriendUserMarker
Assembly:MapRendererV2
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/DCLServices/MapRendererV2/MapLayers/UsersMarkers/Friends/FriendUserMarker.cs
Covered lines:18
Uncovered lines:37
Coverable lines:55
Total lines:132
Line coverage:32.7% (18 of 55)
Covered branches:0
Total branches:0
Covered methods:6
Total methods:20
Method coverage:30% (6 of 20)

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
FriendUserMarker(...)0%110100%
TrackPlayer(...)0%2100%
SetProfilePicture(...)0%2100%
SetPlayerName(...)0%12300%
SetZoom(...)0%6200%
ResetScale(...)0%6200%
TrackPosition()0%1821300%
ResetPlayer()0%3.143075%
Dispose()0%110100%
OnMapObjectBecameVisible(...)0%2100%
OnTextureDownloaded(...)0%2100%
OnMapObjectCulled(...)0%110100%

File(s)

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

#LineLine coverage
 1using Cysharp.Threading.Tasks;
 2using DCL;
 3using DCL.Helpers;
 4using DCLServices.MapRendererV2.CommonBehavior;
 5using DCLServices.MapRendererV2.CoordsUtils;
 6using DCLServices.MapRendererV2.Culling;
 7using MainScripts.DCL.Helpers.Utils;
 8using System;
 9using System.Threading;
 10using UnityEngine;
 11
 12namespace DCLServices.MapRendererV2.MapLayers.UsersMarkers.Friends
 13{
 14    internal class FriendUserMarker : IFriendUserMarker
 15    {
 16        private const int MAX_NAME_LENGTH = 15;
 17
 18        private readonly ICoordsUtils coordsUtils;
 19        private readonly Vector3Variable worldOffset;
 20
 21        private readonly IMapCullingController cullingController;
 22
 23        private CancellationTokenSource cts;
 24
 288025        public string CurrentPlayerId { get; private set; }
 026        public Vector3 CurrentPosition => poolableBehavior.currentPosition;
 27
 028        public Vector2 Pivot { get; }
 29
 30        private MapMarkerPoolableBehavior<FriendUserMarkerObject> poolableBehavior;
 031        internal string profilePicUrl { get; private set; }
 032        internal string profileName { get; private set; }
 33        private AssetPromise_Texture profilePicturePromise;
 34
 288035        internal FriendUserMarker(IUnityObjectPool<FriendUserMarkerObject> pool, IMapCullingController mapCullingControl
 36        {
 288037            this.coordsUtils = coordsUtils;
 288038            this.worldOffset = worldOffset;
 288039            this.cullingController = mapCullingController;
 288040            this.Pivot = pool.Prefab.pivot;
 41
 288042            poolableBehavior = new MapMarkerPoolableBehavior<FriendUserMarkerObject>(pool);
 288043        }
 44
 45        public void TrackPlayer(Player player)
 46        {
 047            cts = new CancellationTokenSource();
 48
 049            CurrentPlayerId = player.id;
 050            TrackPosition(player, cts.Token).Forget();
 051        }
 52
 53        public void SetProfilePicture(string url)
 54        {
 055            profilePicUrl = url;
 056        }
 57
 58        public void SetPlayerName(string name)
 59        {
 060            this.profileName = name.Length > MAX_NAME_LENGTH ? name.Substring(0, MAX_NAME_LENGTH) : name;
 061        }
 62
 63        public void SetZoom(float baseScale, float baseZoom, float zoom)
 64        {
 065            float newScale = Math.Max(zoom / baseZoom * baseScale, baseScale);
 66
 067            if (poolableBehavior.instance != null)
 068                poolableBehavior.instance.transform.localScale = new Vector3(newScale, newScale, 1f);
 069        }
 70
 71        public void ResetScale(float scale)
 72        {
 073            if (poolableBehavior.instance != null)
 074                poolableBehavior.instance.transform.localScale = new Vector3(scale, scale, 1f);
 075        }
 76
 77        private async UniTaskVoid TrackPosition(Player player, CancellationToken ct)
 78        {
 079            var startedTracking = false;
 80
 81            // it takes the first value
 082            await foreach (var position in player.WorldPositionProp)
 83            {
 084                if (ct.IsCancellationRequested)
 85                    return;
 86
 087                var gridPosition = Utils.WorldToGridPositionUnclamped(position + worldOffset.Get());
 088                poolableBehavior.SetCurrentPosition(coordsUtils.PivotPosition(this, coordsUtils.CoordsToPositionUnclampe
 89
 090                if (startedTracking)
 091                    cullingController.SetTrackedObjectPositionDirty(this);
 92                else
 93                {
 094                    cullingController.StartTracking(this, this);
 095                    startedTracking = true;
 96                }
 97            }
 098        }
 99
 100        private void ResetPlayer()
 101        {
 2880102            CurrentPlayerId = null;
 2880103            cts?.Cancel();
 2880104            cts?.Dispose();
 0105        }
 106
 107        public void Dispose()
 108        {
 2880109            OnMapObjectCulled(this);
 2880110            cullingController.StopTracking(this);
 2880111            ResetPlayer();
 2880112        }
 113
 114        public void OnMapObjectBecameVisible(IFriendUserMarker obj)
 115        {
 0116            FriendUserMarkerObject friendUserMarkerObject = poolableBehavior.OnBecameVisible();
 0117            friendUserMarkerObject.profileName.text = profileName;
 0118            profilePicturePromise = new AssetPromise_Texture(profilePicUrl);
 0119            profilePicturePromise.OnSuccessEvent += (assetTexture) => OnTextureDownloaded(assetTexture, friendUserMarker
 0120            AssetPromiseKeeper_Texture.i.Keep(profilePicturePromise);
 0121        }
 122
 123        private void OnTextureDownloaded(Asset_Texture obj, SpriteRenderer spriteRenderer) =>
 0124            spriteRenderer.sprite = Sprite.Create(obj.texture, new Rect(0.0f, 0.0f, obj.texture.width, obj.texture.heigh
 125
 126        public void OnMapObjectCulled(IFriendUserMarker obj)
 127        {
 2880128            poolableBehavior.OnBecameInvisible();
 2880129            AssetPromiseKeeper_Texture.i.Forget(profilePicturePromise);
 2880130        }
 131    }
 132}