< Summary

Class:MinimapHUDController
Assembly:MinimapHUD
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/HUD/Minimap/MinimapHUDController.cs
Covered lines:55
Uncovered lines:30
Coverable lines:85
Total lines:176
Line coverage:64.7% (55 of 85)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
MinimapHUDController(...)0%22093.33%
MinimapHUDController(...)0%110100%
CreateView()0%110100%
Initialize()0%110100%
Dispose()0%3.013088.89%
OnPlayerCoordsChange(...)0%4.024088.89%
SetNewHome(...)0%2100%
UpdateData(...)0%220100%
UpdateSceneName(...)0%220100%
UpdatePlayerPosition(...)0%110100%
UpdateSetHomePanel()0%110100%
UpdatePlayerPosition(...)0%220100%
AddZoomDelta(...)0%2100%
ToggleOptions()0%110100%
ToggleSceneUI(...)0%2100%
AddBookmark()0%6200%
ReportScene()0%110100%
SetHomeScene(...)0%20400%
ChangeVisibilityForBuilderInWorld(...)0%2100%
SetVisibility(...)0%110100%
AddUsersAroundIndicator(...)0%2100%
OnOnSceneInfoUpdated(...)0%6200%
SetVisibility(...)0%2100%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/HUD/Minimap/MinimapHUDController.cs

#LineLine coverage
 1using DCL;
 2using DCL.Interface;
 3using UnityEngine;
 4
 5public class MinimapHUDController : IHUD
 6{
 7    private static bool VERBOSE = false;
 8
 9    public MinimapHUDView view;
 1110    private FloatVariable minimapZoom => CommonScriptableObjects.minimapZoom;
 011    private IntVariable currentSceneNumber => CommonScriptableObjects.sceneNumber;
 112    private Vector2IntVariable playerCoords => CommonScriptableObjects.playerCoords;
 13    private Vector2Int currentCoords;
 1114    private Vector2Int homeCoords = new Vector2Int(0,0);
 15    private MinimapMetadataController metadataController;
 16    private IHomeLocationController locationController;
 17    private DCL.Environment.Model environment;
 1118    private BaseVariable<bool> minimapVisible = DataStore.i.HUDs.minimapVisible;
 19
 6520    public MinimapHUDModel model { get; private set; } = new MinimapHUDModel();
 21
 2222    public MinimapHUDController(MinimapMetadataController minimapMetadataController, IHomeLocationController locationCon
 23
 1124    public MinimapHUDController(MinimapHUDModel model, MinimapMetadataController minimapMetadataController, IHomeLocatio
 25    {
 1126        CommonScriptableObjects.playerCoords.OnChange += OnPlayerCoordsChange;
 1127        CommonScriptableObjects.builderInWorldNotNecessaryUIVisibilityStatus.OnChange += ChangeVisibilityForBuilderInWor
 1128        minimapZoom.Set(1f);
 1129        UpdateData(model);
 1130        metadataController = minimapMetadataController;
 1131        this.locationController = locationController;
 1132        this.environment = environment;
 1133        if(metadataController != null)
 034            metadataController.OnHomeChanged += SetNewHome;
 1135        minimapVisible.OnChange += SetVisibility;
 1136    }
 37
 1138    protected internal virtual MinimapHUDView CreateView() { return MinimapHUDView.Create(this); }
 39
 40    public void Initialize()
 41    {
 1142        view = CreateView();
 1143        UpdateData(model);
 1144    }
 45
 46    public void Dispose()
 47    {
 1148        if (view != null)
 1149            UnityEngine.Object.Destroy(view.gameObject);
 50
 1151        CommonScriptableObjects.playerCoords.OnChange -= OnPlayerCoordsChange;
 1152        CommonScriptableObjects.builderInWorldNotNecessaryUIVisibilityStatus.OnChange -= ChangeVisibilityForBuilderInWor
 1153        MinimapMetadata.GetMetadata().OnSceneInfoUpdated -= OnOnSceneInfoUpdated;
 54
 1155        if (metadataController != null)
 056            metadataController.OnHomeChanged -= SetNewHome;
 1157        minimapVisible.OnChange -= SetVisibility;
 1158    }
 59
 60    private void OnPlayerCoordsChange(Vector2Int current, Vector2Int previous)
 61    {
 162        currentCoords = current;
 163        UpdatePlayerPosition(currentCoords);
 164        UpdateSetHomePanel();
 165        MinimapMetadata.GetMetadata().OnSceneInfoUpdated -= OnOnSceneInfoUpdated;
 166        MinimapMetadata.MinimapSceneInfo sceneInfo = MinimapMetadata.GetMetadata().GetSceneInfo(currentCoords.x, current
 167        UpdateSceneName(sceneInfo?.name);
 68
 69        // NOTE: in some cases playerCoords OnChange is triggered before kernel's message with the scene info arrives.
 70        // so in that scenario we subscribe to MinimapMetadata event to wait for the scene info.
 171        if (sceneInfo == null)
 72        {
 073            MinimapMetadata.GetMetadata().OnSceneInfoUpdated += OnOnSceneInfoUpdated;
 74        }
 175    }
 76
 77    private void SetNewHome(Vector2Int newHomeCoordinates)
 78    {
 079        homeCoords = newHomeCoordinates;
 080        UpdateSetHomePanel();
 081    }
 82
 83    public void UpdateData(MinimapHUDModel model)
 84    {
 2285        this.model = model;
 2286        view?.UpdateData(this.model);
 1187    }
 88
 89    public void UpdateSceneName(string sceneName)
 90    {
 291        model.sceneName = sceneName;
 292        view?.UpdateData(model);
 293    }
 94
 95    public void UpdatePlayerPosition(Vector2 position)
 96    {
 97        const string format = "{0},{1}";
 298        UpdatePlayerPosition(string.Format(format, position.x, position.y));
 299    }
 100
 101    public void UpdateSetHomePanel()
 102    {
 1103        view.UpdateSetHomePanel(currentCoords == homeCoords);
 1104    }
 105
 106    public void UpdatePlayerPosition(string position)
 107    {
 3108        model.playerPosition = position;
 3109        view?.UpdateData(model);
 3110    }
 111
 0112    public void AddZoomDelta(float delta) { minimapZoom.Set(Mathf.Clamp01(minimapZoom.Get() + delta)); }
 113
 4114    public void ToggleOptions() { view.ToggleOptions(); }
 115
 0116    public void ToggleSceneUI(bool isUIOn) { DataStore.i.HUDs.isSceneUIEnabled.Set(isUIOn); }
 117
 118    public void AddBookmark()
 119    {
 120        //TODO:
 0121        if (VERBOSE)
 122        {
 0123            Debug.Log("Add bookmark pressed");
 124        }
 0125    }
 126
 127    public void ReportScene()
 128    {
 1129        var coords = playerCoords.Get();
 1130        WebInterface.SendReportScene(environment.world.state.GetSceneNumberByCoords(coords));
 1131    }
 132
 133    public void SetHomeScene(bool isOn)
 134    {
 0135        var coords = playerCoords.Get();
 0136        if (playerCoords == homeCoords)
 137        {
 0138            if (!isOn)
 0139                locationController.SetHomeScene(new Vector2(0,0));
 140        }
 141        else
 142        {
 0143            if(isOn)
 0144                locationController.SetHomeScene(new Vector2(coords.x,coords.y));
 145        }
 0146    }
 147
 0148    public void ChangeVisibilityForBuilderInWorld(bool current, bool previus) { view.gameObject.SetActive(current); }
 149
 2150    public void SetVisibility(bool visible) { view.SetVisibility(visible); }
 151
 152    /// <summary>
 153    /// Enable user's around button/indicator that shows the amount of users around player
 154    /// and toggle the list of players' visibility when pressed
 155    /// </summary>
 156    /// <param name="controller">Controller for the players' list HUD</param>
 157    public void AddUsersAroundIndicator(UsersAroundListHUDController controller)
 158    {
 0159        view.usersAroundListHudButton.gameObject.SetActive(true);
 0160        controller.SetButtonView(view.usersAroundListHudButton);
 0161        controller.ToggleUsersCount(false);
 0162        KernelConfig.i.EnsureConfigInitialized().Then(kc => controller.ToggleUsersCount(kc.features.enablePeopleCounter)
 0163    }
 164
 165    private void OnOnSceneInfoUpdated(MinimapMetadata.MinimapSceneInfo sceneInfo)
 166    {
 0167        if (sceneInfo.parcels.Contains(CommonScriptableObjects.playerCoords.Get()))
 168        {
 0169            MinimapMetadata.GetMetadata().OnSceneInfoUpdated -= OnOnSceneInfoUpdated;
 0170            UpdateSceneName(sceneInfo.name);
 171        }
 0172    }
 173
 174    private void SetVisibility(bool current, bool _) =>
 0175        SetVisibility(current);
 176}