< Summary

Class:DCL.NavmapView
Assembly:Navmap
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/HUD/NavMap/NavmapView.cs
Covered lines:45
Uncovered lines:33
Coverable lines:78
Total lines:164
Line coverage:57.6% (45 of 78)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
NavmapView()0%110100%
Start()0%110100%
Initialize()0%110100%
OnDestroy()0%110100%
ToggleNavMap(...)0%17.4710057.89%
UpdateCurrentSceneData(...)0%440100%
TriggerToast(...)0%6200%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/HUD/NavMap/NavmapView.cs

#LineLine coverage
 1using UnityEngine;
 2using UnityEngine.UI;
 3using DCL.Interface;
 4using DCL.Helpers;
 5using TMPro;
 6
 7namespace DCL
 8{
 9    public class NavmapView : MonoBehaviour
 10    {
 11        [Header("References")] [SerializeField]
 12        InputAction_Trigger toggleNavMapAction;
 13
 14        [SerializeField] Button closeButton;
 15        [SerializeField] internal ScrollRect scrollRect;
 16        [SerializeField] Transform scrollRectContentTransform;
 17        [SerializeField] internal TextMeshProUGUI currentSceneNameText;
 18        [SerializeField] internal TextMeshProUGUI currentSceneCoordsText;
 19        [SerializeField] internal NavmapToastView toastView;
 20
 21        InputAction_Trigger.Triggered toggleNavMapDelegate;
 22        InputAction_Trigger.Triggered selectParcelDelegate;
 23        RectTransform minimapViewport;
 24        Transform mapRendererMinimapParent;
 25        Vector3 atlasOriginalPosition;
 26        MinimapMetadata mapMetadata;
 20427        bool cursorLockedBeforeOpening = true;
 28
 029        public static bool isOpen { private set; get; } = false;
 30        public static event System.Action<bool> OnToggle;
 31
 32        void Start()
 33        {
 10234            mapMetadata = MinimapMetadata.GetMetadata();
 35
 10236            closeButton.onClick.AddListener(() =>
 37            {
 038                ToggleNavMap();
 039                Utils.UnlockCursor();
 040            });
 10241            scrollRect.onValueChanged.AddListener((x) =>
 42            {
 043                if (!isOpen)
 044                    return;
 45
 046                MapRenderer.i.atlas.UpdateCulling();
 047                toastView.OnCloseClick();
 048            });
 49
 10250            toggleNavMapDelegate = (x) =>
 51            {
 052                if (!Input.GetKeyDown(KeyCode.Escape) || isOpen)
 053                    ToggleNavMap();
 054            };
 55
 10256            toggleNavMapAction.OnTriggered += toggleNavMapDelegate;
 10257            toastView.OnGotoClicked += () => ToggleNavMap(true);
 58
 10259            MapRenderer.OnParcelClicked += TriggerToast;
 10260            MapRenderer.OnParcelHold += TriggerToast;
 10261            MapRenderer.OnParcelHoldCancel += () => { toastView.OnCloseClick(); };
 10262            CommonScriptableObjects.playerCoords.OnChange += UpdateCurrentSceneData;
 63
 10264            Initialize();
 10265        }
 66
 67        public void Initialize()
 68        {
 10469            toastView.gameObject.SetActive(false);
 10470            scrollRect.gameObject.SetActive(false);
 10471        }
 72
 73        private void OnDestroy()
 74        {
 10175            MapRenderer.OnParcelClicked -= TriggerToast;
 10176            MapRenderer.OnParcelHold -= TriggerToast;
 10177            CommonScriptableObjects.playerCoords.OnChange -= UpdateCurrentSceneData;
 10178        }
 79
 80        internal void ToggleNavMap(bool ignoreCursorLock = false)
 81        {
 182            if (MapRenderer.i == null)
 083                return;
 84
 185            scrollRect.StopMovement();
 86
 187            isOpen = !isOpen;
 188            scrollRect.gameObject.SetActive(isOpen);
 189            MapRenderer.i.parcelHighlightEnabled = isOpen;
 90
 191            if (isOpen)
 92            {
 193                cursorLockedBeforeOpening = Utils.isCursorLocked;
 194                if (!ignoreCursorLock && cursorLockedBeforeOpening)
 095                    Utils.UnlockCursor();
 96
 197                minimapViewport = MapRenderer.i.atlas.viewport;
 198                mapRendererMinimapParent = MapRenderer.i.transform.parent;
 199                atlasOriginalPosition = MapRenderer.i.atlas.chunksParent.transform.localPosition;
 100
 1101                MapRenderer.i.atlas.viewport = scrollRect.viewport;
 1102                MapRenderer.i.transform.SetParent(scrollRectContentTransform);
 1103                MapRenderer.i.atlas.UpdateCulling();
 104
 1105                scrollRect.content = MapRenderer.i.atlas.chunksParent.transform as RectTransform;
 106
 107                // Reparent the player icon parent to scroll everything together
 1108                MapRenderer.i.atlas.overlayLayerGameobject.transform.SetParent(scrollRect.content);
 109
 110                // Center map
 1111                MapRenderer.i.atlas.CenterToTile(Utils.WorldToGridPositionUnclamped(CommonScriptableObjects.playerWorldP
 112
 113                // Set shorter interval of time for populated scenes markers fetch
 1114                MapRenderer.i.usersPositionMarkerController?.SetUpdateMode(MapGlobalUsersPositionMarkerController.Update
 115
 1116                AudioScriptableObjects.dialogOpen.Play(true);
 117
 1118                CommonScriptableObjects.isFullscreenHUDOpen.Set(true);
 1119            }
 120            else
 121            {
 0122                if (!ignoreCursorLock && cursorLockedBeforeOpening)
 0123                    Utils.LockCursor();
 124
 0125                toastView.OnCloseClick();
 126
 0127                MapRenderer.i.atlas.viewport = minimapViewport;
 0128                MapRenderer.i.transform.SetParent(mapRendererMinimapParent);
 0129                MapRenderer.i.atlas.chunksParent.transform.localPosition = atlasOriginalPosition;
 0130                MapRenderer.i.atlas.UpdateCulling();
 131
 132                // Restore the player icon to its original parent
 0133                MapRenderer.i.atlas.overlayLayerGameobject.transform.SetParent(MapRenderer.i.atlas.chunksParent.transfor
 0134                (MapRenderer.i.atlas.overlayLayerGameobject.transform as RectTransform).anchoredPosition = Vector2.zero;
 135
 0136                MapRenderer.i.UpdateRendering(Utils.WorldToGridPositionUnclamped(CommonScriptableObjects.playerWorldPosi
 137
 138                // Set longer interval of time for populated scenes markers fetch
 0139                MapRenderer.i.usersPositionMarkerController?.SetUpdateMode(MapGlobalUsersPositionMarkerController.Update
 140
 0141                AudioScriptableObjects.dialogClose.Play(true);
 0142                CommonScriptableObjects.isFullscreenHUDOpen.Set(false);
 143            }
 144
 1145            OnToggle?.Invoke(isOpen);
 0146        }
 147
 148        void UpdateCurrentSceneData(Vector2Int current, Vector2Int previous)
 149        {
 150            const string format = "{0},{1}";
 131151            currentSceneCoordsText.text = string.Format(format, current.x, current.y);
 131152            currentSceneNameText.text = MinimapMetadata.GetMetadata().GetSceneInfo(current.x, current.y)?.name ?? "Unnam
 131153        }
 154
 155        void TriggerToast(int cursorTileX, int cursorTileY)
 156        {
 0157            var sceneInfo = mapMetadata.GetSceneInfo(cursorTileX, cursorTileY);
 0158            if (sceneInfo == null)
 0159                WebInterface.RequestScenesInfoAroundParcel(new Vector2(cursorTileX, cursorTileY), 15);
 160
 0161            toastView.Populate(new Vector2Int(cursorTileX, cursorTileY), sceneInfo);
 0162        }
 163    }
 164}