< 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
 17020    public bool toggledOn { get; private set; } = true;
 21
 22    private Color originalIconColor;
 23
 24    public void Initialize()
 25    {
 8026        toggleButton.onClick.RemoveAllListeners();
 8027        toggleButton.onClick.AddListener(OnToggleButtonClick);
 8028        SetToggleState(false, useCallback: false);
 29
 8030        if (iconImage != null)
 7731            originalIconColor = iconImage.color;
 32
 8033        DataStore.i.appMode.OnChange += AppMode_OnChange;
 8034        AppMode_OnChange(DataStore.i.appMode.Get(), AppMode.DEFAULT);
 8035    }
 36
 16037    private void OnDestroy() { DataStore.i.appMode.OnChange -= AppMode_OnChange; }
 38
 39    private void AppMode_OnChange(AppMode currentMode, AppMode previousMode)
 40    {
 8041        bool isCompatible = compatibleModes.Contains(currentMode);
 42
 8043        SetInteractable(isCompatible);
 44
 8045        if (!isCompatible)
 246            SetToggleState(false);
 8047    }
 48
 1049    private void OnToggleButtonClick() { SetToggleState(!toggledOn); }
 50
 51    public void SetToggleState(bool on, bool useCallback = true)
 52    {
 14253        if (toggledOn == on)
 4854            return;
 55
 9456        SetLineIndicator(on);
 57
 9458        if (!useCallback)
 59        {
 8260            toggledOn = on;
 8261            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    {
 9478        if (lineOnIndicator != null)
 79        {
 8380            if (on)
 881                lineOnIndicator.Show();
 82            else
 7583                lineOnIndicator.Hide();
 84        }
 85
 9486        if (lineOffIndicator != null)
 087            lineOffIndicator.SetActive(!on);
 9488    }
 89
 90    private void SetInteractable(bool isInteractable)
 91    {
 8092        toggleButton.interactable = isInteractable;
 93
 8094        if (iconImage != null)
 7795            iconImage.color = isInteractable ? originalIconColor : notInteractableColor;
 8096    }
 97}