< Summary

Class:TaskbarHUDView
Assembly:TaskbarHUD
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/HUD/TaskbarHUD/TaskbarHUDView.cs
Covered lines:93
Uncovered lines:16
Coverable lines:109
Total lines:230
Line coverage:85.3% (93 of 109)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
TaskbarHUDView()0%110100%
Create()0%110100%
Awake()0%110100%
Initialize()0%110100%
OnDestroy()0%770100%
Destroy()0%110100%
SetVisibility(...)0%110100%
SetExperiencesVisibility(...)0%110100%
ToggleOn(...)0%110100%
ToggleOff(...)0%110100%
ToggleOn(...)0%110100%
ToggleOn(...)0%15.3614080.95%
ToggleOff(...)0%110100%
ToggleOff(...)0%19.4616076.19%
ShowChatButton()0%110100%
ShowFriendsButton()0%110100%
ShowEmotesButton()0%2100%
ShowExperiencesButton()0%2100%
ShowVoiceChatButton()0%2100%
ShowBar(...)0%2.52050%

File(s)

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

#LineLine coverage
 1using System.Collections.Generic;
 2using DCL;
 3using UnityEngine;
 4using UnityEngine.UI;
 5
 6public class TaskbarHUDView : MonoBehaviour
 7{
 8    private const string VIEW_PATH = "Taskbar";
 9
 10    [Header("Taskbar Animation")] [SerializeField]
 11    internal ShowHideAnimator taskbarAnimator;
 12
 13    [Header("Left Side Config")]
 14    [SerializeField] internal RectTransform leftWindowContainer;
 15    [SerializeField] internal RectTransform altSectionContainer;
 16
 17    [SerializeField] internal ShowHideAnimator leftWindowContainerAnimator;
 18    [SerializeField] internal LayoutGroup leftWindowContainerLayout;
 19    [SerializeField] internal TaskbarButton chatButton;
 20    [SerializeField] internal TaskbarButton friendsButton;
 21    [SerializeField] internal TaskbarButton emotesButton;
 22    [SerializeField] internal TaskbarButton voiceChatButton;
 23    [SerializeField] internal GameObject experiencesContainer;
 24    [SerializeField] internal TaskbarButton experiencesButton;
 25    [SerializeField] internal RectTransform socialTooltipReference;
 26
 627    private readonly Dictionary<TaskbarButtonType, TaskbarButton> buttonsByType =
 28        new Dictionary<TaskbarButtonType, TaskbarButton>();
 29
 30    private TaskbarButton lastToggledOnButton;
 31
 32    public event System.Action<bool> OnChatToggle;
 33    public event System.Action<bool> OnFriendsToggle;
 34    public event System.Action<bool> OnEmotesToggle;
 35    public event System.Action<bool> OnVoiceChatToggle;
 36    public event System.Action<bool> OnExperiencesToggle;
 37
 38    private HUDCanvasCameraModeController hudCanvasCameraModeController;
 39
 40    internal static TaskbarHUDView Create()
 41    {
 442        var view = Instantiate(Resources.Load<GameObject>(VIEW_PATH)).GetComponent<TaskbarHUDView>();
 443        view.Initialize();
 444        return view;
 45    }
 46
 847    private void Awake() { hudCanvasCameraModeController = new HUDCanvasCameraModeController(GetComponent<Canvas>(), Dat
 48
 49    private void Initialize()
 50    {
 451        ShowBar(true, true);
 52
 453        buttonsByType[TaskbarButtonType.Chat] = chatButton;
 454        buttonsByType[TaskbarButtonType.Emotes] = emotesButton;
 455        buttonsByType[TaskbarButtonType.Experiences] = experiencesButton;
 456        buttonsByType[TaskbarButtonType.Friends] = friendsButton;
 457        buttonsByType[TaskbarButtonType.VoiceChat] = voiceChatButton;
 58
 459        chatButton.transform.parent.gameObject.SetActive(false);
 460        friendsButton.transform.parent.gameObject.SetActive(false);
 461        emotesButton.transform.parent.gameObject.SetActive(false);
 462        experiencesButton.transform.parent.gameObject.SetActive(false);
 463        voiceChatButton.transform.parent.gameObject.SetActive(false);
 64
 465        chatButton.Initialize();
 466        friendsButton.Initialize();
 467        emotesButton.Initialize();
 468        experiencesButton.Initialize();
 469        voiceChatButton.Initialize();
 70
 471        chatButton.OnToggleOn += ToggleOn;
 472        friendsButton.OnToggleOn += ToggleOn;
 473        emotesButton.OnToggleOn += ToggleOn;
 474        experiencesButton.OnToggleOn += ToggleOn;
 475        voiceChatButton.OnToggleOn += ToggleOn;
 476        chatButton.OnToggleOff += ToggleOff;
 477        friendsButton.OnToggleOff += ToggleOff;
 478        emotesButton.OnToggleOff += ToggleOff;
 479        experiencesButton.OnToggleOff += ToggleOff;
 480        voiceChatButton.OnToggleOff += ToggleOff;
 481    }
 82
 83    private void OnDestroy()
 84    {
 485        hudCanvasCameraModeController?.Dispose();
 86
 487        if (chatButton != null)
 88        {
 489            chatButton.OnToggleOn -= ToggleOn;
 490            chatButton.OnToggleOff -= ToggleOff;
 91        }
 92
 493        if (friendsButton != null)
 94        {
 495            friendsButton.OnToggleOn -= ToggleOn;
 496            friendsButton.OnToggleOff -= ToggleOff;
 97        }
 98
 499        if (emotesButton != null)
 100        {
 4101            emotesButton.OnToggleOn -= ToggleOn;
 4102            emotesButton.OnToggleOff -= ToggleOff;
 103        }
 104
 4105        if(voiceChatButton != null)
 106        {
 4107            voiceChatButton.OnToggleOn -= ToggleOn;
 4108            voiceChatButton.OnToggleOff -= ToggleOff;
 109        }
 110
 4111        if (experiencesButton != null)
 112        {
 4113            experiencesButton.OnToggleOn -= ToggleOn;
 4114            experiencesButton.OnToggleOff -= ToggleOff;
 115        }
 4116    }
 117
 4118    public void Destroy() => Destroy(gameObject);
 119
 120    public void SetVisibility(bool visible)
 121    {
 1122        gameObject.SetActive(visible);
 1123    }
 124
 125    public void SetExperiencesVisibility(bool visible)
 126    {
 4127        experiencesContainer.SetActive(visible);
 4128        experiencesContainer.transform.SetAsLastSibling();
 4129    }
 130
 4131    public void ToggleOn(TaskbarButtonType buttonType) => ToggleOn(buttonsByType[buttonType], false);
 132
 2133    public void ToggleOff(TaskbarButtonType buttonType) => ToggleOff(buttonsByType[buttonType], false);
 134
 3135    private void ToggleOn(TaskbarButton obj) => ToggleOn(obj, true);
 136
 137    private void ToggleOn(TaskbarButton obj, bool useCallback)
 138    {
 7139        var wasToggled = lastToggledOnButton == obj;
 7140        lastToggledOnButton = obj;
 141
 84142        foreach (var btn in buttonsByType.Values)
 35143            btn.SetToggleState(btn == obj, useCallback);
 144
 11145        if (!useCallback) return;
 3146        if (wasToggled) return;
 147
 3148        if (obj == friendsButton)
 2149            OnFriendsToggle?.Invoke(true);
 3150        if (obj == emotesButton)
 0151            OnEmotesToggle?.Invoke(true);
 3152        else if (obj == chatButton)
 1153            OnChatToggle?.Invoke(true);
 2154        else if (obj == experiencesButton)
 0155            OnExperiencesToggle?.Invoke(true);
 2156        else if (obj == voiceChatButton)
 0157            OnVoiceChatToggle?.Invoke(true);
 2158    }
 159
 2160    private void ToggleOff(TaskbarButton obj) => ToggleOff(obj, true);
 161
 162    private void ToggleOff(TaskbarButton obj, bool useCallback)
 163    {
 4164        var wasToggled = lastToggledOnButton == obj;
 165
 4166        if (wasToggled)
 1167            lastToggledOnButton = null;
 168
 4169        obj.SetToggleState(false, useCallback);
 170
 6171        if (!useCallback) return;
 3172        if (!wasToggled) return;
 173
 1174        if (obj == friendsButton)
 1175            OnFriendsToggle?.Invoke(false);
 1176        if (obj == emotesButton)
 0177            OnEmotesToggle?.Invoke(false);
 1178        else if (obj == chatButton)
 0179            OnChatToggle?.Invoke(false);
 1180        else if (obj == experiencesButton)
 0181            OnExperiencesToggle?.Invoke(false);
 1182        else if (obj == experiencesButton)
 0183            OnExperiencesToggle?.Invoke(false);
 1184        else if (obj == voiceChatButton)
 0185            OnVoiceChatToggle?.Invoke(false);
 1186    }
 187
 188    internal void ShowChatButton()
 189    {
 2190        chatButton.transform.parent.gameObject.SetActive(true);
 2191    }
 192
 193    internal void ShowFriendsButton()
 194    {
 3195        friendsButton.transform.parent.gameObject.SetActive(true);
 3196    }
 197
 198    internal void ShowEmotesButton()
 199    {
 0200        emotesButton.transform.parent.gameObject.SetActive(true);
 0201    }
 202
 203    internal void ShowExperiencesButton()
 204    {
 0205        experiencesButton.transform.parent.gameObject.SetActive(true);
 0206    }
 207
 208    internal void ShowVoiceChatButton()
 209    {
 0210        voiceChatButton.transform.parent.gameObject.SetActive(true);
 0211    }
 212
 213    private void ShowBar(bool visible, bool instant = false)
 214    {
 4215        if (visible)
 4216            taskbarAnimator.Show(instant);
 217        else
 0218            taskbarAnimator.Hide(instant);
 0219    }
 220
 221    public enum TaskbarButtonType
 222    {
 223        None,
 224        Friends,
 225        Emotes,
 226        Chat,
 227        Experiences,
 228        VoiceChat
 229    }
 230}