< Summary

Class:DCL.NavmapVisibilityBehaviour
Assembly:Navmap
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/HUD/NavMap/NavmapVisibilityBehaviour.cs
Covered lines:42
Uncovered lines:45
Coverable lines:87
Total lines:227
Line coverage:48.2% (42 of 87)
Covered branches:0
Total branches:0
Covered methods:7
Total methods:11
Method coverage:63.6% (7 of 11)

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
NavmapVisibilityBehaviour(...)0%110100%
Dispose()0%2.012088.89%
ReleaseCameraController()0%2.52050%
SetRenderImageTransparency(...)0%330100%
OnNavmapVisibilityChanged(...)0%2100%
OnExploreOpenChanged(...)0%6200%
SetVisible(...)0%5.44055.56%
OnFullScreenOpened(...)0%6200%
SetVisibility_Internal(...)0%42600%

File(s)

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

#LineLine coverage
 1using DCL.Browser;
 2using System;
 3using DCL.Helpers;
 4using DCLServices.MapRendererV2;
 5using DCLServices.MapRendererV2.CommonBehavior;
 6using DCLServices.MapRendererV2.ConsumerUtils;
 7using DCLServices.MapRendererV2.MapCameraController;
 8using DCLServices.MapRendererV2.MapLayers;
 9using DCLServices.MapRendererV2.MapLayers.PlayerMarker;
 10using DCLServices.PlacesAPIService;
 11using ExploreV2Analytics;
 12using System.Collections.Generic;
 13using UnityEngine;
 14
 15namespace DCL
 16{
 17    public class NavmapVisibilityBehaviour : IDisposable, IMapActivityOwner
 18    {
 19        private const MapLayer ACTIVE_MAP_LAYERS =
 20            MapLayer.SatelliteAtlas | MapLayer.ParcelsAtlas | MapLayer.HomePoint | MapLayer.ScenesOfInterest | MapLayer.
 21
 22        private Vector3 atlasOriginalPosition;
 23
 24        private bool waitingForFullscreenHUDOpen;
 25
 26        private readonly BaseVariable<bool> navmapVisible;
 27
 28        private readonly NavmapZoomView zoomView;
 29        private readonly NavmapRendererConfiguration rendererConfiguration;
 30
 31        private readonly NavmapToastViewController navmapToastViewController;
 32        private readonly NavmapZoomViewController navmapZoomViewController;
 33        private readonly NavMapLocationControlsController locationControlsController;
 34
 35        private readonly NavmapSearchController navmapSearchController;
 36        private readonly IPlaceCardComponentView placeCardModal;
 37        private readonly NavMapChunksLayersController chunksLayerController;
 38        private readonly MapCameraDragBehavior mapCameraDragBehavior;
 39        private readonly NavMapChunksLayersView chunksLayersView;
 40        private readonly IExploreV2Analytics exploreV2Analytics;
 41        private readonly IBrowserBridge browserBridge;
 42
 43        private Service<IMapRenderer> mapRenderer;
 44
 145        private readonly BaseVariable<bool> navmapIsRendered = DataStore.i.HUDs.navmapIsRendered;
 46
 47        private IMapCameraController cameraController;
 48        private readonly BaseVariable<FeatureFlag> featureFlagsFlags;
 149        public IReadOnlyDictionary<MapLayer, IMapLayerParameter> LayersParameters  { get; } = new Dictionary<MapLayer, I
 50            { { MapLayer.PlayerMarker, new PlayerMarkerParameter {BackgroundIsActive = true} } };
 51
 152        private Camera hudCamera => DataStore.i.camera.hudsCamera.Get();
 53
 154        public NavmapVisibilityBehaviour(
 55            BaseVariable<FeatureFlag> featureFlagsFlags,
 56            BaseVariable<bool> navmapVisible,
 57            NavmapZoomView zoomView,
 58            NavmapToastView toastView,
 59            NavmapSearchComponentView searchView,
 60            NavMapLocationControlsView locationControlsView,
 61            NavMapChunksLayersView chunksLayersView,
 62            NavmapRendererConfiguration rendererConfiguration,
 63            IPlacesAPIService placesAPIService,
 64            IPlacesAnalytics placesAnalytics,
 65            IPlaceCardComponentView placeCardModal,
 66            IExploreV2Analytics exploreV2Analytics,
 67            IBrowserBridge browserBridge)
 68        {
 169            this.featureFlagsFlags = featureFlagsFlags;
 70
 171            this.navmapVisible = navmapVisible;
 72
 173            this.zoomView = zoomView;
 174            this.rendererConfiguration = rendererConfiguration;
 175            this.placeCardModal = placeCardModal;
 176            this.exploreV2Analytics = exploreV2Analytics;
 177            this.browserBridge = browserBridge;
 78
 179            DataStore.i.exploreV2.isOpen.OnChange += OnExploreOpenChanged;
 180            navmapVisible.OnChange += OnNavmapVisibilityChanged;
 81
 182            navmapToastViewController = new NavmapToastViewController(MinimapMetadata.GetMetadata(), toastView, renderer
 183            navmapZoomViewController = new NavmapZoomViewController(zoomView, featureFlagsFlags);
 184            locationControlsController = new NavMapLocationControlsController(locationControlsView, exploreV2Analytics, 
 85
 186            navmapSearchController = new NavmapSearchController(searchView, Environment.i.platform.serviceLocator.Get<IP
 187            chunksLayerController = new NavMapChunksLayersController(chunksLayersView, exploreV2Analytics);
 88
 89            { // Needed for feature flag. Remove when feature flag is removed
 190                this.chunksLayersView = chunksLayersView;
 91            }
 92
 193            this.rendererConfiguration.RenderImage.EmbedMapCameraDragBehavior(rendererConfiguration.MapCameraDragBehavio
 94
 195            SetRenderImageTransparency(true);
 96
 197            rendererConfiguration.PixelPerfectMapRendererTextureProvider.SetHudCamera(hudCamera);
 198        }
 99
 100        public void Dispose()
 101        {
 1102            ReleaseCameraController();
 103
 1104            DataStore.i.exploreV2.isOpen.OnChange -= OnExploreOpenChanged;
 1105            navmapVisible.OnChange -= OnNavmapVisibilityChanged;
 106
 1107            if (waitingForFullscreenHUDOpen == false)
 0108                CommonScriptableObjects.isFullscreenHUDOpen.OnChange -= OnFullScreenOpened;
 109
 1110            navmapToastViewController.Dispose();
 1111            navmapZoomViewController.Dispose();
 1112            chunksLayerController.Dispose();
 1113        }
 114
 115        private void ReleaseCameraController()
 116        {
 1117            if (cameraController != null)
 118            {
 0119                cameraController.Release(this);
 0120                cameraController = null;
 121            }
 1122        }
 123
 124        private void SetRenderImageTransparency(bool isTransparent)
 125        {
 126            // Make Render Image transparent before activation
 1127            var renderImageColor = this.rendererConfiguration.RenderImage.color;
 1128            renderImageColor.a = isTransparent ? 0 : 1;
 1129            this.rendererConfiguration.RenderImage.color = renderImageColor;
 1130        }
 131
 132        private void OnNavmapVisibilityChanged(bool isVisible, bool _) =>
 0133            SetVisible(isVisible);
 134
 135        private void OnExploreOpenChanged(bool isOpen, bool _)
 136        {
 0137            if (!isOpen)
 0138                SetVisible(false);
 0139        }
 140
 141        internal void SetVisible(bool visible)
 142        {
 1143            if (waitingForFullscreenHUDOpen)
 0144                return;
 145
 1146            if (visible)
 147            {
 1148                if (CommonScriptableObjects.isFullscreenHUDOpen.Get())
 0149                    SetVisibility_Internal(true);
 150                else
 151                {
 1152                    waitingForFullscreenHUDOpen = true;
 1153                    CommonScriptableObjects.isFullscreenHUDOpen.OnChange += OnFullScreenOpened;
 154                }
 155            }
 156            else
 0157                SetVisibility_Internal(false);
 0158        }
 159
 160        private void OnFullScreenOpened(bool isFullScreen, bool _)
 161        {
 0162            CommonScriptableObjects.isFullscreenHUDOpen.OnChange -= OnFullScreenOpened;
 163
 0164            if (!isFullScreen)
 0165                return;
 166
 0167            SetVisibility_Internal(true);
 0168            waitingForFullscreenHUDOpen = false;
 0169        }
 170
 171        private void SetVisibility_Internal(bool visible)
 172        {
 0173            if (visible)
 174            {
 0175                if (!DataStore.i.exploreV2.isInitialized.Get())
 0176                    Utils.UnlockCursor();
 177
 0178                cameraController = mapRenderer.Ref.RentCamera(
 179                    new MapCameraInput(
 180                        this,
 181                        ACTIVE_MAP_LAYERS,
 182                        Utils.WorldToGridPosition(DataStore.i.player.playerWorldPosition.Get()),
 183                        navmapZoomViewController.ResetZoomToMidValue(),
 184                        rendererConfiguration.PixelPerfectMapRendererTextureProvider.GetPixelPerfectTextureResolution(),
 185                        zoomView.zoomVerticalRange
 186                        ));
 187
 0188                SetRenderImageTransparency(false);
 189
 0190                navmapToastViewController.Activate();
 0191                navmapZoomViewController.Activate(cameraController);
 192
 0193                if (!featureFlagsFlags.Get().IsFeatureEnabled("navmap-satellite-view"))
 0194                    chunksLayersView.Hide();
 195
 0196                if (featureFlagsFlags.Get().IsFeatureEnabled("map_focus_home_or_user"))
 0197                    locationControlsController.Activate(cameraController);
 198                else
 0199                    locationControlsController.Hide();
 200
 0201                navmapSearchController.Activate(cameraController);
 202
 0203                rendererConfiguration.RenderImage.Activate(hudCamera, cameraController.GetRenderTexture(), cameraControl
 0204                rendererConfiguration.PixelPerfectMapRendererTextureProvider.Activate(cameraController);
 205
 0206                navmapIsRendered.Set(true);
 207            }
 0208            else if (cameraController != null)
 209            {
 0210                navmapToastViewController.Deactivate();
 0211                navmapZoomViewController.Deactivate();
 0212                locationControlsController.Deactivate();
 0213                navmapSearchController.Deactivate();
 214
 0215                rendererConfiguration.PixelPerfectMapRendererTextureProvider.Deactivate();
 0216                rendererConfiguration.RenderImage.Deactivate();
 217
 0218                SetRenderImageTransparency(true);
 219
 0220                cameraController.Release(this);
 0221                cameraController = null;
 222
 0223                navmapIsRendered.Set(false);
 224            }
 0225        }
 226    }
 227}