< Summary

Class:TaskbarButton
Assembly:TaskbarHUD
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/HUD/TaskbarHUD/TaskbarButton.cs
Covered lines:36
Uncovered lines:3
Coverable lines:39
Total lines:100
Line coverage:92.3% (36 of 39)
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%2.032080%
OnToggleButtonClick()0%110100%
SetToggleState(...)0%8.048091.67%
SwapSprite(...)0%330100%
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
 12    public GameObject lineOffIndicator;
 13    public ShowHideAnimator lineOnIndicator;
 14    public Image iconImage;
 15    public Color notInteractableColor;
 16    public List<AppMode> compatibleModes;
 17    public GameObject firstTimeLabelIndicator;
 18
 19    [Header("Transition")]
 20    [SerializeField] private Sprite onImage;
 21    [SerializeField] private Sprite offImage;
 22
 23    public event System.Action<TaskbarButton> OnToggleOn;
 24    public event System.Action<TaskbarButton> OnToggleOff;
 25
 12126    public bool toggledOn { get; private set; } = true;
 27
 28    private Color originalIconColor;
 29
 30    public void Initialize()
 31    {
 2032        toggleButton.onClick.RemoveAllListeners();
 2033        toggleButton.onClick.AddListener(OnToggleButtonClick);
 2034        SetToggleState(false, useCallback: false);
 35
 2036        if (iconImage != null)
 2037            originalIconColor = iconImage.color;
 38
 2039        DataStore.i.common.appMode.OnChange += AppMode_OnChange;
 2040        AppMode_OnChange(DataStore.i.common.appMode.Get(), AppMode.DEFAULT);
 2041    }
 42
 4043    private void OnDestroy() { DataStore.i.common.appMode.OnChange -= AppMode_OnChange; }
 44
 45    private void AppMode_OnChange(AppMode currentMode, AppMode previousMode)
 46    {
 2047        bool isCompatible = compatibleModes.Contains(currentMode);
 48
 2049        SetInteractable(isCompatible);
 50
 2051        if (!isCompatible)
 052            SetToggleState(false);
 2053    }
 54
 855    private void OnToggleButtonClick() { SetToggleState(!toggledOn); }
 56
 57    public void SetToggleState(bool on, bool useCallback = true)
 58    {
 8959        if (toggledOn == on) return;
 60
 2561        if (on && firstTimeLabelIndicator != null)
 062            firstTimeLabelIndicator.SetActive(false);
 63
 2564        SetLineIndicator(on);
 2565        SwapSprite(on);
 2566        toggledOn = on;
 67
 2568        if (useCallback)
 69        {
 570            if (on)
 371                OnToggleOn?.Invoke(this);
 72            else
 273                OnToggleOff?.Invoke(this);
 74        }
 2275    }
 76
 2577    private void SwapSprite(bool on) => iconImage.sprite = on ? onImage : offImage;
 78
 79    private void SetLineIndicator(bool on)
 80    {
 2581        if (lineOnIndicator != null)
 82        {
 2583            if (on)
 384                lineOnIndicator.Show();
 85            else
 2286                lineOnIndicator.Hide();
 87        }
 88
 2589        if (lineOffIndicator != null)
 090            lineOffIndicator.SetActive(!on);
 2591    }
 92
 93    private void SetInteractable(bool isInteractable)
 94    {
 2095        toggleButton.interactable = isInteractable;
 96
 2097        if (iconImage != null)
 2098            iconImage.color = isInteractable ? originalIconColor : notInteractableColor;
 2099    }
 100}