< Summary

Class:TaskbarButton
Assembly:TaskbarHUD
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/HUD/TaskbarHUD/TaskbarButton.cs
Covered lines:40
Uncovered lines:2
Coverable lines:42
Total lines:101
Line coverage:95.2% (40 of 42)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
TaskbarButton()0%110100%
Initialize()0%220100%
OnDestroy()0%110100%
AppMode_OnChange(...)0%220100%
OnToggleButtonClick()0%110100%
SetToggleState(...)0%8.028093.33%
SetLineIndicator(...)0%4.054085.71%
SetInteractable(...)0%440100%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/HUD/TaskbarHUD/TaskbarButton.cs

#LineLine coverage
 1using DCL;
 2using System.Collections.Generic;
 3using UnityEngine;
 4using UnityEngine.Serialization;
 5using UnityEngine.UI;
 6
 7public class TaskbarButton : MonoBehaviour
 8{
 9    [FormerlySerializedAs("openButton")]
 10    public Button toggleButton;
 11    public GameObject lineOffIndicator;
 12    public ShowHideAnimator lineOnIndicator;
 13    public Image iconImage;
 14    public Color notInteractableColor;
 15    public List<AppMode> compatibleModes;
 16    public GameObject firstTimeLabelIndicator;
 17
 18    public event System.Action<TaskbarButton> OnToggleOn;
 19    public event System.Action<TaskbarButton> OnToggleOff;
 20
 19221    public bool toggledOn { get; private set; } = true;
 22
 23    private Color originalIconColor;
 24
 25    public void Initialize()
 26    {
 9127        toggleButton.onClick.RemoveAllListeners();
 9128        toggleButton.onClick.AddListener(OnToggleButtonClick);
 9129        SetToggleState(false, useCallback: false);
 30
 9131        if (iconImage != null)
 8832            originalIconColor = iconImage.color;
 33
 9134        DataStore.i.appMode.OnChange += AppMode_OnChange;
 9135        AppMode_OnChange(DataStore.i.appMode.Get(), AppMode.DEFAULT);
 9136    }
 37
 18038    private void OnDestroy() { DataStore.i.appMode.OnChange -= AppMode_OnChange; }
 39
 40    private void AppMode_OnChange(AppMode currentMode, AppMode previousMode)
 41    {
 9142        bool isCompatible = compatibleModes.Contains(currentMode);
 43
 9144        SetInteractable(isCompatible);
 45
 9146        if (!isCompatible)
 247            SetToggleState(false);
 9148    }
 49
 1050    private void OnToggleButtonClick() { SetToggleState(!toggledOn); }
 51
 52    public void SetToggleState(bool on, bool useCallback = true)
 53    {
 15454        if (toggledOn == on)
 4955            return;
 56
 10557        if (on && firstTimeLabelIndicator != null)
 058            firstTimeLabelIndicator.SetActive(false);
 59
 10560        SetLineIndicator(on);
 61
 10562        if (!useCallback)
 63        {
 9364            toggledOn = on;
 9365            return;
 66        }
 67
 1268        if (on)
 69        {
 670            OnToggleOn?.Invoke(this);
 671            toggledOn = on;
 672        }
 73        else
 74        {
 675            toggledOn = on;
 676            OnToggleOff?.Invoke(this);
 77        }
 678    }
 79
 80    public void SetLineIndicator(bool on)
 81    {
 10582        if (lineOnIndicator != null)
 83        {
 9484            if (on)
 885                lineOnIndicator.Show();
 86            else
 8687                lineOnIndicator.Hide();
 88        }
 89
 10590        if (lineOffIndicator != null)
 091            lineOffIndicator.SetActive(!on);
 10592    }
 93
 94    private void SetInteractable(bool isInteractable)
 95    {
 9196        toggleButton.interactable = isInteractable;
 97
 9198        if (iconImage != null)
 8899            iconImage.color = isInteractable ? originalIconColor : notInteractableColor;
 91100    }
 101}