< Summary

Class:MinimapHUDController
Assembly:MinimapHUD
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/HUD/Minimap/MinimapHUDController.cs
Covered lines:42
Uncovered lines:17
Coverable lines:59
Total lines:130
Line coverage:71.1% (42 of 59)
Covered branches:0
Total branches:0

Metrics

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

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 StringVariable currentSceneId => CommonScriptableObjects.sceneID;
 112    private Vector2IntVariable playerCoords => CommonScriptableObjects.playerCoords;
 13
 1114    public MinimapHUDModel model { get; private set; } = new MinimapHUDModel();
 15
 2216    public MinimapHUDController() : this(new MinimapHUDModel()) { }
 17
 1118    public MinimapHUDController(MinimapHUDModel model)
 19    {
 1120        CommonScriptableObjects.playerCoords.OnChange += OnPlayerCoordsChange;
 1121        CommonScriptableObjects.builderInWorldNotNecessaryUIVisibilityStatus.OnChange += ChangeVisibilityForBuilderInWor
 1122        minimapZoom.Set(1f);
 1123        UpdateData(model);
 1124    }
 25
 1026    protected internal virtual MinimapHUDView CreateView() { return MinimapHUDView.Create(this); }
 27
 28    public void Initialize()
 29    {
 1030        view = CreateView();
 1031        UpdateData(model);
 1032    }
 33
 34    public void Dispose()
 35    {
 1136        if (view != null)
 1037            UnityEngine.Object.Destroy(view.gameObject);
 38
 1139        CommonScriptableObjects.playerCoords.OnChange -= OnPlayerCoordsChange;
 1140        CommonScriptableObjects.builderInWorldNotNecessaryUIVisibilityStatus.OnChange -= ChangeVisibilityForBuilderInWor
 1141        MinimapMetadata.GetMetadata().OnSceneInfoUpdated -= OnOnSceneInfoUpdated;
 1142    }
 43
 44    private void OnPlayerCoordsChange(Vector2Int current, Vector2Int previous)
 45    {
 146        UpdatePlayerPosition(current);
 47
 148        MinimapMetadata.GetMetadata().OnSceneInfoUpdated -= OnOnSceneInfoUpdated;
 149        MinimapMetadata.MinimapSceneInfo sceneInfo = MinimapMetadata.GetMetadata().GetSceneInfo(current.x, current.y);
 150        UpdateSceneName(sceneInfo?.name);
 51
 52        // NOTE: in some cases playerCoords OnChange is triggered before kernel's message with the scene info arrives.
 53        // so in that scenario we subscribe to MinimapMetadata event to wait for the scene info.
 154        if (sceneInfo == null)
 55        {
 056            MinimapMetadata.GetMetadata().OnSceneInfoUpdated += OnOnSceneInfoUpdated;
 57        }
 158    }
 59
 60    public void UpdateData(MinimapHUDModel model)
 61    {
 2162        this.model = model;
 2163        view?.UpdateData(this.model);
 1064    }
 65
 66    public void UpdateSceneName(string sceneName)
 67    {
 268        model.sceneName = sceneName;
 269        view?.UpdateData(model);
 170    }
 71
 72    public void UpdatePlayerPosition(Vector2 position)
 73    {
 74        const string format = "{0},{1}";
 275        UpdatePlayerPosition(string.Format(format, position.x, position.y));
 276    }
 77
 78    public void UpdatePlayerPosition(string position)
 79    {
 380        model.playerPosition = position;
 381        view?.UpdateData(model);
 282    }
 83
 084    public void AddZoomDelta(float delta) { minimapZoom.Set(Mathf.Clamp01(minimapZoom.Get() + delta)); }
 85
 486    public void ToggleOptions() { view.ToggleOptions(); }
 87
 088    public void ToggleSceneUI(bool isUIOn) { DataStore.i.HUDs.isSceneUIEnabled.Set(isUIOn); }
 89
 90    public void AddBookmark()
 91    {
 92        //TODO:
 093        if (VERBOSE)
 94        {
 095            Debug.Log("Add bookmark pressed");
 96        }
 097    }
 98
 99    public void ReportScene()
 100    {
 1101        var coords = playerCoords.Get();
 1102        WebInterface.SendReportScene($"{coords.x},{coords.y}");
 1103    }
 104
 0105    public void ChangeVisibilityForBuilderInWorld(bool current, bool previus) { view.gameObject.SetActive(current); }
 106
 2107    public void SetVisibility(bool visible) { view.SetVisibility(visible); }
 108
 109    /// <summary>
 110    /// Enable user's around button/indicator that shows the amount of users around player
 111    /// and toggle the list of players' visibility when pressed
 112    /// </summary>
 113    /// <param name="controller">Controller for the players' list HUD</param>
 114    public void AddUsersAroundIndicator(UsersAroundListHUDController controller)
 115    {
 0116        view.usersAroundListHudButton.gameObject.SetActive(true);
 0117        controller.SetButtonView(view.usersAroundListHudButton);
 0118        controller.ToggleUsersCount(false);
 0119        KernelConfig.i.EnsureConfigInitialized().Then(kc => controller.ToggleUsersCount(kc.features.enablePeopleCounter)
 0120    }
 121
 122    private void OnOnSceneInfoUpdated(MinimapMetadata.MinimapSceneInfo sceneInfo)
 123    {
 0124        if (sceneInfo.parcels.Contains(CommonScriptableObjects.playerCoords.Get()))
 125        {
 0126            MinimapMetadata.GetMetadata().OnSceneInfoUpdated -= OnOnSceneInfoUpdated;
 0127            UpdateSceneName(sceneInfo.name);
 128        }
 0129    }
 130}