< Summary

Class:TaskbarButton
Assembly:TaskbarHUD
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/HUD/TaskbarHUD/TaskbarButton.cs
Covered lines:39
Uncovered lines:1
Coverable lines:40
Total lines:97
Line coverage:97.5% (39 of 40)
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%660100%
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
 17    public event System.Action<TaskbarButton> OnToggleOn;
 18    public event System.Action<TaskbarButton> OnToggleOff;
 19
 19220    public bool toggledOn { get; private set; } = true;
 21
 22    private Color originalIconColor;
 23
 24    public void Initialize()
 25    {
 9126        toggleButton.onClick.RemoveAllListeners();
 9127        toggleButton.onClick.AddListener(OnToggleButtonClick);
 9128        SetToggleState(false, useCallback: false);
 29
 9130        if (iconImage != null)
 8831            originalIconColor = iconImage.color;
 32
 9133        DataStore.i.appMode.OnChange += AppMode_OnChange;
 9134        AppMode_OnChange(DataStore.i.appMode.Get(), AppMode.DEFAULT);
 9135    }
 36
 18237    private void OnDestroy() { DataStore.i.appMode.OnChange -= AppMode_OnChange; }
 38
 39    private void AppMode_OnChange(AppMode currentMode, AppMode previousMode)
 40    {
 9141        bool isCompatible = compatibleModes.Contains(currentMode);
 42
 9143        SetInteractable(isCompatible);
 44
 9145        if (!isCompatible)
 246            SetToggleState(false);
 9147    }
 48
 1049    private void OnToggleButtonClick() { SetToggleState(!toggledOn); }
 50
 51    public void SetToggleState(bool on, bool useCallback = true)
 52    {
 15553        if (toggledOn == on)
 4954            return;
 55
 10656        SetLineIndicator(on);
 57
 10658        if (!useCallback)
 59        {
 9460            toggledOn = on;
 9461            return;
 62        }
 63
 1264        if (on)
 65        {
 666            OnToggleOn?.Invoke(this);
 667            toggledOn = on;
 668        }
 69        else
 70        {
 671            toggledOn = on;
 672            OnToggleOff?.Invoke(this);
 73        }
 674    }
 75
 76    public void SetLineIndicator(bool on)
 77    {
 10678        if (lineOnIndicator != null)
 79        {
 9580            if (on)
 981                lineOnIndicator.Show();
 82            else
 8683                lineOnIndicator.Hide();
 84        }
 85
 10686        if (lineOffIndicator != null)
 087            lineOffIndicator.SetActive(!on);
 10688    }
 89
 90    private void SetInteractable(bool isInteractable)
 91    {
 9192        toggleButton.interactable = isInteractable;
 93
 9194        if (iconImage != null)
 8895            iconImage.color = isInteractable ? originalIconColor : notInteractableColor;
 9196    }
 97}