< Summary

Class:MinimapMetadata
Assembly:MapRenderer
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/MapRenderer/MinimapMetadata.cs
Covered lines:29
Uncovered lines:2
Coverable lines:31
Total lines:133
Line coverage:93.5% (29 of 31)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
MinimapMetadata()0%110100%
GetSceneInfo(...)0%220100%
AddSceneInfo(...)0%5.125083.33%
AddOrUpdateUserInfo(...)0%330100%
RemoveUserInfo(...)0%330100%
Clear()0%110100%
GetMetadata()0%220100%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/MapRenderer/MinimapMetadata.cs

#LineLine coverage
 1using System;
 2using System.Collections.Generic;
 3using UnityEngine;
 4
 5[CreateAssetMenu(fileName = "MinimapMetadata", menuName = "MinimapMetadata")]
 6public class MinimapMetadata : ScriptableObject
 7{
 8    public enum TileType
 9    {
 10        MyParcel = 0,
 11        MyParcelsOnSale = 1,
 12        MyEstates = 2,
 13        MyEstatesOnSale = 3,
 14        WithAccess = 4,
 15        District = 5,
 16        Contribution = 6,
 17        Roads = 7,
 18        Plaza = 8,
 19        Taken = 9,
 20        OnSale = 10,
 21        Unowned = 11,
 22        Background = 12,
 23        Loading = 13
 24    }
 25
 26    [Serializable]
 27    public class MinimapSceneInfo
 28    {
 29        public string name;
 30        public TileType type;
 31        public List<Vector2Int> parcels;
 32
 33        public bool isPOI;
 34        public string owner;
 35        public string description;
 36        public string previewImageUrl;
 37    }
 38
 39    [Serializable]
 40    public class MinimapUserInfo
 41    {
 42        public string userId;
 43        public string userName;
 44        public Vector3 worldPosition;
 45    }
 46
 47    public event Action<MinimapSceneInfo> OnSceneInfoUpdated;
 48    public event Action<MinimapUserInfo> OnUserInfoUpdated;
 49    public event Action<string> OnUserInfoRemoved;
 50
 151    HashSet<MinimapSceneInfo> scenesInfo = new HashSet<MinimapSceneInfo>();
 152    Dictionary<Vector2Int, MinimapSceneInfo> sceneInfoMap = new Dictionary<Vector2Int, MinimapSceneInfo>();
 153    Dictionary<string, MinimapUserInfo> usersInfo = new Dictionary<string, MinimapUserInfo>();
 54
 55    public MinimapSceneInfo GetSceneInfo(int x, int y)
 56    {
 12757        if (sceneInfoMap.TryGetValue(new Vector2Int(x, y), out MinimapSceneInfo result))
 258            return result;
 59
 12560        return null;
 61    }
 62
 63    public void AddSceneInfo(MinimapSceneInfo sceneInfo)
 64    {
 565        if (scenesInfo.Contains(sceneInfo))
 066            return;
 67
 568        int parcelsCount = sceneInfo.parcels.Count;
 69
 3470        for (int i = 0; i < parcelsCount; i++)
 71        {
 1272            if (sceneInfoMap.ContainsKey(sceneInfo.parcels[i]))
 73            {
 74                //NOTE(Brian): I intended at first to just return; here. But turns out kernel is sending
 75                //             overlapping coordinates, sending first gigantic 'Estate' and 'Roads' scenes to
 76                //             send the proper scenes later. This will be fixed when we implement the content v3 data
 77                //             plumbing.
 078                sceneInfoMap.Remove(sceneInfo.parcels[i]);
 79            }
 80
 1281            sceneInfoMap.Add(sceneInfo.parcels[i], sceneInfo);
 82        }
 83
 584        scenesInfo.Add(sceneInfo);
 85
 586        OnSceneInfoUpdated?.Invoke(sceneInfo);
 587    }
 88
 89    /// <summary>
 90    /// Adds (or updates) the information of an user in the minimap.
 91    /// </summary>
 92    /// <param name="userInfo">User info model</param>
 93    public void AddOrUpdateUserInfo(MinimapUserInfo userInfo)
 94    {
 595        if (usersInfo.ContainsKey(userInfo.userId))
 96        {
 197            usersInfo[userInfo.userId] = userInfo;
 198        }
 99        else
 100        {
 4101            usersInfo.Add(userInfo.userId, userInfo);
 102        }
 103
 5104        OnUserInfoUpdated?.Invoke(userInfo);
 5105    }
 106
 107    /// <summary>
 108    /// Removes the information of an user from the minimap.
 109    /// </summary>
 110    /// <param name="userId">User Id</param>
 111    public void RemoveUserInfo(string userId)
 112    {
 3113        if (usersInfo.Remove(userId))
 3114            OnUserInfoRemoved?.Invoke(userId);
 3115    }
 116
 117    public void Clear()
 118    {
 107119        scenesInfo.Clear();
 107120        sceneInfoMap.Clear();
 107121    }
 122
 123    private static MinimapMetadata minimapMetadata;
 124    public static MinimapMetadata GetMetadata()
 125    {
 2598126        if (minimapMetadata == null)
 127        {
 1128            minimapMetadata = Resources.Load<MinimapMetadata>("ScriptableObjects/MinimapMetadata");
 129        }
 130
 2598131        return minimapMetadata;
 132    }
 133}