< Summary

Class:DCL.MapRenderer
Assembly:MapRenderer
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/MapRenderer/MapRenderer.cs
Covered lines:108
Uncovered lines:110
Coverable lines:218
Total lines:495
Line coverage:49.5% (108 of 218)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
MapRenderer()0%110100%
Awake()0%110100%
Initialize()0%220100%
EnsurePools()0%3.043083.33%
SetParcelHighlightActive(...)0%2100%
GetParcelHighlightTransform()0%110100%
SetOtherPlayersIconActive(...)0%6200%
SetPlayerIconActive(...)0%2100%
SetHighlighSize(...)0%2100%
SetHighlightStyle(...)0%2100%
OnDestroy()0%110100%
Cleanup()0%550100%
CleanLandsHighlights()0%2.152066.67%
ClearLandHighlightsInfo()0%110100%
SelectLand(...)0%12300%
HighlightLands(...)0%42600%
CreateHighlightParcel(...)0%2100%
Update()0%3.793055.56%
UpdateCursorMapCoords()0%6200%
IsCursorOverMapChunk()0%6200%
UpdateParcelHighlight()0%90900%
UpdateParcelHold()0%12300%
OnKernelConfigChanged(...)0%2100%
CoordinatesAreInsideTheWorld(...)0%12300%
MapRenderer_OnSceneInfoUpdated(...)0%10.0410092.86%
SetPointOfInterestActive(...)0%6200%
IsEmptyParcel(...)0%220100%
OnOtherPlayersAdded(...)0%2100%
OnOtherPlayerRemoved(...)0%6200%
ConfigureUserIcon(...)0%2100%
OnCharacterRotate(...)0%110100%
OnCharacterSetPosition(...)0%6200%
UpdateRendering(...)0%110100%
UpdateBackgroundLayer(...)0%110100%
UpdateSelectionLayer()0%2100%
UpdateOverlayLayer()0%110100%
ClickMousePositionParcel()0%6200%

File(s)

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

#LineLine coverage
 1using DCL.Helpers;
 2using System.Collections.Generic;
 3using UnityEngine;
 4using UnityEngine.UI;
 5using UnityEngine.EventSystems;
 6using TMPro;
 7using KernelConfigurationTypes;
 8using Object = UnityEngine.Object;
 9
 10namespace DCL
 11{
 12    public class MapRenderer : MonoBehaviour
 13    {
 14        const int LEFT_BORDER_PARCELS = 25;
 15        const int RIGHT_BORDER_PARCELS = 31;
 16        const int TOP_BORDER_PARCELS = 31;
 17        const int BOTTOM_BORDER_PARCELS = 25;
 18        const int WORLDMAP_WIDTH_IN_PARCELS = 300;
 19        const string MINIMAP_USER_ICONS_POOL_NAME = "MinimapUserIconsPool";
 20        const int MINIMAP_USER_ICONS_MAX_PREWARM = 30;
 21        private const int MAX_CURSOR_PARCEL_DISTANCE = 40;
 22        private const int MAX_SCENE_CHARACTER_TITLE = 29;
 23        private const string EMPTY_PARCEL_NAME = "Empty parcel";
 24        private int NAVMAP_CHUNK_LAYER;
 25
 63826        public static MapRenderer i { get; private set; }
 27
 1428        [SerializeField] private float parcelHightlightScale = 1.25f;
 29        [SerializeField] private Button ParcelHighlightButton;
 30        [SerializeField] private MapParcelHighlight highlight;
 31        [SerializeField] private Image parcelHighlightImage;
 32        [SerializeField] private Image parcelHighlighImagePrefab;
 33        [SerializeField] private Image parcelHighlighWithContentImagePrefab;
 34        [SerializeField] private Image selectParcelHighlighImagePrefab;
 35
 2836        private Vector3Variable playerRotation => CommonScriptableObjects.cameraForward;
 1437        private List<RaycastResult> uiRaycastResults = new List<RaycastResult>();
 1438        private PointerEventData uiRaycastPointerEventData = new PointerEventData(EventSystem.current);
 39
 40        [HideInInspector] public Vector2Int cursorMapCoords;
 1441        [HideInInspector] public bool showCursorCoords = true;
 542        public Vector3 playerGridPosition => Utils.WorldToGridPositionUnclamped(playerWorldPosition.Get());
 43        public MapAtlas atlas;
 44        public TextMeshProUGUI highlightedParcelText;
 45        public Transform overlayContainer;
 46        public Transform overlayContainerPlayers;
 47        public Transform globalUserMarkerContainer;
 48        public RectTransform playerPositionIcon;
 49
 50        public static System.Action<int, int> OnParcelClicked;
 51        public static System.Action OnCursorFarFromParcel;
 52
 1453        public float scaleFactor = 1f;
 54
 55        // Used as a reference of the coordinates origin in-map and as a parcel width/height reference
 56        public RectTransform centeredReferenceParcel;
 57
 58        public MapSceneIcon scenesOfInterestIconPrefab;
 59        public GameObject userIconPrefab;
 60        public UserMarkerObject globalUserMarkerPrefab;
 61
 062        public MapGlobalUsersPositionMarkerController usersPositionMarkerController { private set; get; }
 63
 1464        private HashSet<MinimapMetadata.MinimapSceneInfo> scenesOfInterest = new HashSet<MinimapMetadata.MinimapSceneInf
 1465        private Dictionary<MinimapMetadata.MinimapSceneInfo, GameObject> scenesOfInterestMarkers = new Dictionary<Minima
 1466        private Dictionary<string, PoolableObject> usersInfoMarkers = new Dictionary<string, PoolableObject>();
 67
 68        private Vector2Int lastClickedCursorMapCoords;
 69        private Pool usersInfoPool;
 70
 71        private bool parcelHighlightEnabledValue = false;
 1472        private bool otherPlayersIconsEnabled = true;
 73
 1474        List<WorldRange> validWorldRanges = new List<WorldRange>
 75        {
 76            new WorldRange(-150, -150, 150, 150) // default range
 77        };
 78
 79        public bool parcelHighlightEnabled
 80        {
 81            set
 82            {
 083                parcelHighlightEnabledValue = value;
 084                parcelHighlightImage.gameObject.SetActive(parcelHighlightEnabledValue);
 085            }
 086            get { return parcelHighlightEnabledValue; }
 87        }
 88
 5689        private BaseDictionary<string, Player> otherPlayers => DataStore.i.player.otherPlayers;
 1490        private Dictionary<Vector2Int, Image> highlightedLands = new Dictionary<Vector2Int, Image>();
 1491        private List<Vector2Int> ownedLandsWithContent = new List<Vector2Int>();
 1492        private List<Vector2Int> ownedEmptyLands = new List<Vector2Int>();
 93        private Vector2Int lastSelectedLand;
 1494        private Vector3 lastPlayerPosition = new Vector3(float.NegativeInfinity, 0, float.NegativeInfinity);
 1495        private BaseVariable<Vector3> playerWorldPosition = DataStore.i.player.playerWorldPosition;
 96
 97        private bool isInitialized = false;
 98
 99        [HideInInspector]
 100        public event System.Action<float, float> OnMovedParcelCursor;
 101
 102        private void Awake()
 103        {
 12104            i = this;
 12105            Initialize();
 12106        }
 107
 108        public void Initialize()
 109        {
 14110            if (isInitialized)
 2111                return;
 112
 12113            isInitialized = true;
 12114            EnsurePools();
 12115            atlas.InitializeChunks();
 12116            NAVMAP_CHUNK_LAYER = LayerMask.NameToLayer("NavmapChunk");
 117
 12118            MinimapMetadata.GetMetadata().OnSceneInfoUpdated += MapRenderer_OnSceneInfoUpdated;
 12119            otherPlayers.OnAdded += OnOtherPlayersAdded;
 12120            otherPlayers.OnRemoved += OnOtherPlayerRemoved;
 121
 12122            ParcelHighlightButton.onClick.AddListener(ClickMousePositionParcel);
 123
 12124            playerRotation.OnChange += OnCharacterRotate;
 125
 12126            highlight.SetScale(parcelHightlightScale);
 127
 12128            usersPositionMarkerController = new MapGlobalUsersPositionMarkerController(globalUserMarkerPrefab,
 129                globalUserMarkerContainer,
 130                MapUtils.CoordsToPosition);
 131
 12132            usersPositionMarkerController.SetUpdateMode(MapGlobalUsersPositionMarkerController.UpdateMode.BACKGROUND);
 133
 12134            KernelConfig.i.OnChange += OnKernelConfigChanged;
 12135        }
 136
 137        private void EnsurePools()
 138        {
 12139            usersInfoPool = PoolManager.i.GetPool(MINIMAP_USER_ICONS_POOL_NAME);
 140
 12141            if (usersInfoPool == null)
 142            {
 12143                usersInfoPool = PoolManager.i.AddPool(
 144                    MINIMAP_USER_ICONS_POOL_NAME,
 145                    Instantiate(userIconPrefab.gameObject, overlayContainerPlayers.transform),
 146                    maxPrewarmCount: MINIMAP_USER_ICONS_MAX_PREWARM,
 147                    isPersistent: true);
 148
 12149                if (!Configuration.EnvironmentSettings.RUNNING_TESTS)
 0150                    usersInfoPool.ForcePrewarm();
 151            }
 12152        }
 153
 0154        public void SetParcelHighlightActive(bool isAtive) => parcelHighlightImage.enabled = isAtive;
 155
 2156        public Vector3 GetParcelHighlightTransform() => parcelHighlightImage.transform.position;
 157
 158        public void SetOtherPlayersIconActive(bool isActive)
 159        {
 0160            otherPlayersIconsEnabled = isActive;
 161
 0162            foreach (PoolableObject poolableObject in usersInfoMarkers.Values)
 163            {
 0164                poolableObject.gameObject.SetActive(isActive);
 165            }
 0166        }
 167
 0168        public void SetPlayerIconActive(bool isActive) => playerPositionIcon.gameObject.SetActive(isActive);
 169
 0170        public void SetHighlighSize(Vector2Int size) { highlight.ChangeHighlighSize(size); }
 171
 0172        public void SetHighlightStyle(MapParcelHighlight.HighlighStyle style) { highlight.SetStyle(style); }
 173
 24174        public void OnDestroy() { Cleanup(); }
 175
 176        public void Cleanup()
 177        {
 16178            if (atlas != null)
 14179                atlas.Cleanup();
 180
 36181            foreach (var kvp in scenesOfInterestMarkers)
 182            {
 2183                if (kvp.Value != null)
 2184                    Destroy(kvp.Value);
 185            }
 186
 16187            CleanLandsHighlights();
 16188            ClearLandHighlightsInfo();
 189
 16190            scenesOfInterestMarkers.Clear();
 191
 16192            playerRotation.OnChange -= OnCharacterRotate;
 16193            MinimapMetadata.GetMetadata().OnSceneInfoUpdated -= MapRenderer_OnSceneInfoUpdated;
 16194            otherPlayers.OnAdded -= OnOtherPlayersAdded;
 16195            otherPlayers.OnRemoved -= OnOtherPlayerRemoved;
 196
 16197            ParcelHighlightButton.onClick.RemoveListener(ClickMousePositionParcel);
 198
 16199            usersPositionMarkerController?.Dispose();
 200
 16201            KernelConfig.i.OnChange -= OnKernelConfigChanged;
 202
 16203            isInitialized = false;
 16204        }
 205
 206        public void CleanLandsHighlights()
 207        {
 32208            foreach (KeyValuePair<Vector2Int, Image> kvp in highlightedLands)
 209            {
 0210                Destroy(kvp.Value.gameObject);
 211            }
 212
 16213            highlightedLands.Clear (); //To Clear out the dictionary
 16214        }
 215
 216        public void ClearLandHighlightsInfo()
 217        {
 16218            ownedLandsWithContent.Clear (); //To Clear out the content lands
 16219            ownedEmptyLands.Clear (); //To Clear out the empty content
 16220        }
 221
 222        public void SelectLand(Vector2Int coordsToSelect, Vector2Int size )
 223        {
 0224            if (highlightedLands.ContainsKey(lastSelectedLand))
 225            {
 0226                Destroy(highlightedLands[lastSelectedLand].gameObject);
 0227                highlightedLands.Remove(lastSelectedLand);
 228            }
 229
 0230            HighlightLands(ownedEmptyLands, ownedLandsWithContent);
 231
 0232            if (highlightedLands.ContainsKey(coordsToSelect))
 233            {
 0234                Destroy(highlightedLands[coordsToSelect].gameObject);
 0235                highlightedLands.Remove(coordsToSelect);
 236            }
 237
 0238            CreateHighlightParcel(selectParcelHighlighImagePrefab, coordsToSelect, size);
 0239            lastSelectedLand = coordsToSelect;
 0240        }
 241
 242        public void HighlightLands(List<Vector2Int> landsToHighlight, List<Vector2Int> landsToHighlightWithContent)
 243        {
 0244            CleanLandsHighlights();
 245
 0246            foreach (Vector2Int coords in landsToHighlight)
 247            {
 0248                if (highlightedLands.ContainsKey(coords))
 249                    continue;
 250
 0251                CreateHighlightParcel(parcelHighlighImagePrefab, coords, Vector2Int.one);
 252            }
 253
 0254            foreach (Vector2Int coords in landsToHighlightWithContent)
 255            {
 0256                if (highlightedLands.ContainsKey(coords))
 257                    continue;
 258
 0259                if (!ownedLandsWithContent.Contains(coords))
 0260                    ownedLandsWithContent.Add(coords);
 0261                CreateHighlightParcel(parcelHighlighWithContentImagePrefab, coords, Vector2Int.one);
 262            }
 263
 0264            ownedEmptyLands = landsToHighlight;
 0265            ownedLandsWithContent = landsToHighlightWithContent;
 0266        }
 267
 268        private void CreateHighlightParcel(Image prefab, Vector2Int coords, Vector2Int size)
 269        {
 0270            var highlightItem = Instantiate(prefab, overlayContainer, true).GetComponent<Image>();
 0271            highlightItem.rectTransform.localScale = new Vector3(parcelHightlightScale * size.x, parcelHightlightScale *
 0272            highlightItem.rectTransform.SetAsLastSibling();
 0273            highlightItem.rectTransform.anchoredPosition = MapUtils.CoordsToPosition(coords);
 0274            highlightedLands.Add(coords, highlightItem);
 0275        }
 276
 277        void Update()
 278        {
 11279            if ((playerWorldPosition.Get() - lastPlayerPosition).sqrMagnitude >= 0.1f * 0.1f)
 280            {
 3281                lastPlayerPosition = playerWorldPosition.Get();
 3282                UpdateRendering(Utils.WorldToGridPositionUnclamped(lastPlayerPosition));
 283            }
 284
 11285            if (!parcelHighlightEnabled)
 11286                return;
 287
 0288            UpdateCursorMapCoords();
 289
 0290            UpdateParcelHighlight();
 291
 0292            UpdateParcelHold();
 0293        }
 294
 295        void UpdateCursorMapCoords()
 296        {
 0297            if (!IsCursorOverMapChunk())
 0298                return;
 299
 300            const int OFFSET = -60; //Map is a bit off centered, we need to adjust it a little.
 0301            RectTransformUtility.ScreenPointToLocalPointInRectangle(atlas.chunksParent, Input.mousePosition, DataStore.i
 0302            mapPoint -= Vector2.one * OFFSET;
 0303            mapPoint -= (atlas.chunksParent.sizeDelta / 2f);
 0304            cursorMapCoords = Vector2Int.RoundToInt(mapPoint / MapUtils.PARCEL_SIZE);
 0305        }
 306
 307        bool IsCursorOverMapChunk()
 308        {
 0309            uiRaycastPointerEventData.position = Input.mousePosition;
 0310            EventSystem.current.RaycastAll(uiRaycastPointerEventData, uiRaycastResults);
 311
 0312            return uiRaycastResults.Count > 0 && uiRaycastResults[0].gameObject.layer == NAVMAP_CHUNK_LAYER;
 313        }
 314
 315        void UpdateParcelHighlight()
 316        {
 0317            if (!CoordinatesAreInsideTheWorld((int)cursorMapCoords.x, (int)cursorMapCoords.y))
 318            {
 0319                if (parcelHighlightImage.gameObject.activeSelf)
 0320                    parcelHighlightImage.gameObject.SetActive(false);
 321
 0322                return;
 323            }
 324
 0325            if (!parcelHighlightImage.gameObject.activeSelf)
 0326                parcelHighlightImage.gameObject.SetActive(true);
 327
 0328            string previousText = highlightedParcelText.text;
 0329            parcelHighlightImage.rectTransform.SetAsLastSibling();
 0330            parcelHighlightImage.rectTransform.anchoredPosition = MapUtils.CoordsToPosition(cursorMapCoords);
 0331            highlightedParcelText.text = showCursorCoords ? $"{cursorMapCoords.x}, {cursorMapCoords.y}" : string.Empty;
 332
 0333            if (highlightedParcelText.text != previousText && !Input.GetMouseButton(0))
 334            {
 0335                OnMovedParcelCursor?.Invoke(cursorMapCoords.x, cursorMapCoords.y);
 336            }
 337
 338            // ----------------------------------------------------
 339            // TODO: Use sceneInfo to highlight whole scene parcels and populate scenes hover info on navmap once we can
 340            // var sceneInfo = mapMetadata.GetSceneInfo(cursorMapCoords.x, cursorMapCoords.y);
 0341        }
 342
 343        void UpdateParcelHold()
 344        {
 0345            if (Vector2.Distance(lastClickedCursorMapCoords, cursorMapCoords) > MAX_CURSOR_PARCEL_DISTANCE / (scaleFacto
 346            {
 0347                OnCursorFarFromParcel?.Invoke();
 348            }
 0349        }
 350
 0351        private void OnKernelConfigChanged(KernelConfigModel current, KernelConfigModel previous) { validWorldRanges = c
 352
 353        bool CoordinatesAreInsideTheWorld(int xCoord, int yCoord)
 354        {
 0355            foreach (WorldRange worldRange in validWorldRanges)
 356            {
 0357                if (worldRange.Contains(xCoord, yCoord))
 358                {
 0359                    return true;
 360                }
 361            }
 0362            return false;
 0363        }
 364
 365        private void MapRenderer_OnSceneInfoUpdated(MinimapMetadata.MinimapSceneInfo sceneInfo)
 366        {
 4367            if (!sceneInfo.isPOI)
 2368                return;
 369
 2370            if (scenesOfInterest.Contains(sceneInfo))
 0371                return;
 372
 2373            if (IsEmptyParcel(sceneInfo))
 0374                return;
 375
 2376            scenesOfInterest.Add(sceneInfo);
 377
 2378            GameObject go = Object.Instantiate(scenesOfInterestIconPrefab.gameObject, overlayContainer.transform);
 379
 2380            Vector2 centerTile = Vector2.zero;
 381
 20382            foreach (var parcel in sceneInfo.parcels)
 383            {
 8384                centerTile += parcel;
 385            }
 386
 2387            centerTile /= (float)sceneInfo.parcels.Count;
 2388            float distance = float.PositiveInfinity;
 2389            Vector2 centerParcel = Vector2.zero;
 20390            foreach (var parcel in sceneInfo.parcels)
 391            {
 8392                if (Vector2.Distance(centerTile, parcel) < distance)
 393                {
 5394                    distance = Vector2.Distance(centerParcel, parcel);
 5395                    centerParcel = parcel;
 396                }
 397
 398            }
 399
 2400            (go.transform as RectTransform).anchoredPosition = MapUtils.CoordsToPosition(centerParcel);
 401
 2402            MapSceneIcon icon = go.GetComponent<MapSceneIcon>();
 403
 2404            if (icon.title != null)
 2405                icon.title.text = sceneInfo.name.Length > MAX_SCENE_CHARACTER_TITLE ? sceneInfo.name.Substring(0, MAX_SC
 406
 2407            scenesOfInterestMarkers.Add(sceneInfo, go);
 2408        }
 409
 410        public void SetPointOfInterestActive(bool areActive)
 411        {
 0412            foreach (GameObject pointOfInterestGameObject in scenesOfInterestMarkers.Values)
 413            {
 0414                pointOfInterestGameObject.SetActive(areActive);
 415            }
 0416        }
 417
 418        private bool IsEmptyParcel(MinimapMetadata.MinimapSceneInfo sceneInfo)
 419        {
 2420            return (sceneInfo.name != null && sceneInfo.name.Equals(EMPTY_PARCEL_NAME));
 421        }
 422
 423        private void OnOtherPlayersAdded(string userId, Player player)
 424        {
 0425            var poolable = usersInfoPool.Get();
 0426            var marker = poolable.gameObject.GetComponent<MapUserIcon>();
 0427            marker.gameObject.name = $"UserIcon-{player.name}";
 0428            marker.gameObject.transform.SetParent(overlayContainerPlayers.transform, true);
 0429            marker.Populate(player);
 0430            marker.gameObject.SetActive(otherPlayersIconsEnabled);
 0431            marker.transform.localScale = Vector3.one;
 0432            usersInfoMarkers.Add(userId, poolable);
 0433        }
 434
 435        private void OnOtherPlayerRemoved(string userId, Player player)
 436        {
 0437            if (!usersInfoMarkers.TryGetValue(userId, out PoolableObject go))
 438            {
 0439                return;
 440            }
 441
 0442            usersInfoPool.Release(go);
 0443            usersInfoMarkers.Remove(userId);
 0444        }
 445
 446        private void ConfigureUserIcon(GameObject iconGO, Vector3 pos)
 447        {
 0448            var gridPosition = Utils.WorldToGridPositionUnclamped(pos);
 0449            iconGO.transform.localPosition = MapUtils.CoordsToPosition(Vector2Int.RoundToInt(gridPosition));
 0450        }
 451
 4452        private void OnCharacterRotate(Vector3 current, Vector3 previous) { UpdateRendering(Utils.WorldToGridPositionUnc
 453
 454        public void OnCharacterSetPosition(Vector2Int newCoords, Vector2Int oldCoords)
 455        {
 0456            if (oldCoords == newCoords)
 0457                return;
 458
 0459            UpdateRendering(new Vector2((float)newCoords.x, (float)newCoords.y));
 0460        }
 461
 462        public void UpdateRendering(Vector2 newCoords)
 463        {
 5464            UpdateBackgroundLayer(newCoords);
 5465            UpdateSelectionLayer();
 5466            UpdateOverlayLayer();
 5467        }
 468
 10469        void UpdateBackgroundLayer(Vector2 newCoords) { atlas.CenterToTile(newCoords); }
 470
 471        void UpdateSelectionLayer()
 472        {
 473            //TODO(Brian): Build and place here the scene highlight if applicable.
 0474        }
 475
 476        void UpdateOverlayLayer()
 477        {
 478            //NOTE(Brian): Player icon
 5479            Vector3 f = CommonScriptableObjects.cameraForward.Get();
 5480            Quaternion playerAngle = Quaternion.Euler(0, 0, Mathf.Atan2(-f.x, f.z) * Mathf.Rad2Deg);
 481
 5482            var gridPosition = playerGridPosition;
 5483            playerPositionIcon.anchoredPosition = MapUtils.CoordsToPositionWithOffset(gridPosition);
 5484            playerPositionIcon.rotation = playerAngle;
 5485        }
 486
 487        // Called by the parcelhighlight image button
 488        public void ClickMousePositionParcel()
 489        {
 0490            highlightedParcelText.text = string.Empty;
 0491            lastClickedCursorMapCoords = cursorMapCoords;
 0492            OnParcelClicked?.Invoke(cursorMapCoords.x, cursorMapCoords.y);
 0493        }
 494    }
 495}

Methods/Properties

i()
i(DCL.MapRenderer)
MapRenderer()
playerRotation()
playerGridPosition()
usersPositionMarkerController(DCL.MapGlobalUsersPositionMarkerController)
usersPositionMarkerController()
parcelHighlightEnabled(System.Boolean)
parcelHighlightEnabled()
otherPlayers()
Awake()
Initialize()
EnsurePools()
SetParcelHighlightActive(System.Boolean)
GetParcelHighlightTransform()
SetOtherPlayersIconActive(System.Boolean)
SetPlayerIconActive(System.Boolean)
SetHighlighSize(UnityEngine.Vector2Int)
SetHighlightStyle(MapParcelHighlight/HighlighStyle)
OnDestroy()
Cleanup()
CleanLandsHighlights()
ClearLandHighlightsInfo()
SelectLand(UnityEngine.Vector2Int, UnityEngine.Vector2Int)
HighlightLands(System.Collections.Generic.List[Vector2Int], System.Collections.Generic.List[Vector2Int])
CreateHighlightParcel(UnityEngine.UI.Image, UnityEngine.Vector2Int, UnityEngine.Vector2Int)
Update()
UpdateCursorMapCoords()
IsCursorOverMapChunk()
UpdateParcelHighlight()
UpdateParcelHold()
OnKernelConfigChanged(KernelConfigModel, KernelConfigModel)
CoordinatesAreInsideTheWorld(System.Int32, System.Int32)
MapRenderer_OnSceneInfoUpdated(MinimapMetadata/MinimapSceneInfo)
SetPointOfInterestActive(System.Boolean)
IsEmptyParcel(MinimapMetadata/MinimapSceneInfo)
OnOtherPlayersAdded(System.String, Player)
OnOtherPlayerRemoved(System.String, Player)
ConfigureUserIcon(UnityEngine.GameObject, UnityEngine.Vector3)
OnCharacterRotate(UnityEngine.Vector3, UnityEngine.Vector3)
OnCharacterSetPosition(UnityEngine.Vector2Int, UnityEngine.Vector2Int)
UpdateRendering(UnityEngine.Vector2)
UpdateBackgroundLayer(UnityEngine.Vector2)
UpdateSelectionLayer()
UpdateOverlayLayer()
ClickMousePositionParcel()