< Summary

Class:TaskbarHUDView
Assembly:TaskbarHUD
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/HUD/TaskbarHUD/TaskbarHUDView.cs
Covered lines:197
Uncovered lines:27
Coverable lines:224
Total lines:468
Line coverage:87.9% (197 of 224)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
TaskbarHUDView()0%110100%
GetButtonList()0%22093.33%
Create(...)0%110100%
Initialize(...)0%110100%
SetBuilderInWorldStatus(...)0%110100%
SetQuestsPanelStatus(...)0%2100%
OnWindowToggleOff(...)0%29.5219069.23%
AllButtonsToggledOff()0%330100%
OnWindowToggleOn(...)0%35.0918062.5%
SelectButton(...)0%13130100%
OnAddChatWindow()0%110100%
OnAddFriendsWindow()0%110100%
OnAddSettingsWindow()0%110100%
OnAddExploreWindow()0%110100%
OnAddExploreV2Window()0%2100%
OnAddHelpAndSupportWindow()0%110100%
OnAddControlsMoreOption()0%110100%
OnAddVoiceChat()0%2100%
ShowBar(...)0%220100%
SetVisibility(...)0%110100%
OnDestroy()0%10100100%
AddPortableExperienceElement(...)0%22093.75%
RemovePortableExperienceElement(...)0%4.014092.31%
AdjustRightButtonsLayoutWidth()0%330100%

File(s)

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

#LineLine coverage
 1using DCL;
 2using System.Collections.Generic;
 3using UnityEngine;
 4using UnityEngine.UI;
 5
 6public class TaskbarHUDView : MonoBehaviour
 7{
 8    const string VIEW_PATH = "Taskbar";
 9    const string PORTABLE_EXPERIENCE_ITEMS_POOL = "PortableExperienceItems";
 10
 11    [Header("Taskbar Animation")]
 12    [SerializeField] internal ShowHideAnimator taskbarAnimator;
 13
 14    [Header("Left Side Config")]
 15    [SerializeField] internal RectTransform leftWindowContainer;
 16
 17    [SerializeField] internal ShowHideAnimator leftWindowContainerAnimator;
 18    [SerializeField] internal LayoutGroup leftWindowContainerLayout;
 19    [SerializeField] internal GameObject voiceChatButtonPlaceholder;
 20    [SerializeField] internal VoiceChatButton voiceChatButton;
 21    [SerializeField] internal TaskbarButton chatButton;
 22    [SerializeField] internal TaskbarButton friendsButton;
 23    [SerializeField] internal ChatHeadGroupView chatHeadsGroup;
 24
 25    [Header("Right Side Config")]
 26    [SerializeField] internal HorizontalLayoutGroup rightButtonsHorizontalLayout;
 27
 28    [SerializeField] internal TaskbarButton settingsButton;
 29    [SerializeField] internal TaskbarButton exploreButton;
 30    [SerializeField] internal TaskbarButton exploreV2Button;
 31    [SerializeField] internal TaskbarButton builderInWorldButton;
 32    [SerializeField] internal GameObject portableExperiencesDiv;
 33    [SerializeField] internal PortableExperienceTaskbarItem portableExperienceItem;
 34    [SerializeField] internal TaskbarButton questPanelButton;
 35
 36    [Header("More Button Config")]
 37    [SerializeField] internal TaskbarButton moreButton;
 38
 39    [SerializeField] internal TaskbarMoreMenu moreMenu;
 40
 41    [Header("Tutorial Config")]
 42    [SerializeField] internal RectTransform exploreTooltipReference;
 43
 44    [SerializeField] internal RectTransform moreTooltipReference;
 45    [SerializeField] internal RectTransform socialTooltipReference;
 46
 47    [Header("Old TaskbarCompatibility (temporal)")]
 48    [SerializeField] internal RectTransform taskbarPanelTransf;
 49
 50    [SerializeField] internal Image taskbarPanelImage;
 51    [SerializeField] internal GameObject rightButtonsContainer;
 52
 53    internal TaskbarHUDController controller;
 2254    internal bool isBarVisible = true;
 2255    internal Dictionary<string, PortableExperienceTaskbarItem> activePortableExperienceItems = new Dictionary<string, Po
 2256    internal Dictionary<string, PoolableObject> activePortableExperiencesPoolables = new Dictionary<string, PoolableObje
 57    internal Pool portableExperiencesPool = null;
 58
 59    public event System.Action OnChatToggleOn;
 60    public event System.Action OnChatToggleOff;
 61    public event System.Action OnFriendsToggleOn;
 62    public event System.Action OnFriendsToggleOff;
 63    public event System.Action OnSettingsToggleOn;
 64    public event System.Action OnSettingsToggleOff;
 65    public event System.Action OnBuilderInWorldToggleOn;
 66    public event System.Action OnBuilderInWorldToggleOff;
 67    public event System.Action OnExploreToggleOn;
 68    public event System.Action OnExploreToggleOff;
 69    public event System.Action OnExploreV2ToggleOn;
 70    public event System.Action OnExploreV2ToggleOff;
 71    public event System.Action OnMoreToggleOn;
 72    public event System.Action OnMoreToggleOff;
 73    public event System.Action<bool> OnQuestPanelToggled;
 74
 75    internal List<TaskbarButton> GetButtonList()
 76    {
 1677        var taskbarButtonList = new List<TaskbarButton>();
 1678        taskbarButtonList.Add(chatButton);
 1679        taskbarButtonList.Add(friendsButton);
 1680        taskbarButtonList.AddRange(chatHeadsGroup.chatHeads);
 1681        taskbarButtonList.Add(builderInWorldButton);
 1682        taskbarButtonList.Add(settingsButton);
 1683        taskbarButtonList.Add(exploreButton);
 1684        taskbarButtonList.Add(exploreV2Button);
 1685        taskbarButtonList.Add(moreButton);
 1686        taskbarButtonList.Add(questPanelButton);
 87
 1688        using (var iterator = activePortableExperienceItems.GetEnumerator())
 89        {
 1690            while (iterator.MoveNext())
 91            {
 092                taskbarButtonList.Add(iterator.Current.Value.mainButton);
 93            }
 1694        }
 95
 1696        return taskbarButtonList;
 97    }
 98
 99    internal static TaskbarHUDView Create(TaskbarHUDController controller, IChatController chatController,
 100        IFriendsController friendsController)
 101    {
 11102        var view = Instantiate(Resources.Load<GameObject>(VIEW_PATH)).GetComponent<TaskbarHUDView>();
 11103        view.Initialize(controller, chatController, friendsController);
 11104        return view;
 105    }
 106
 107    public void Initialize(TaskbarHUDController controller, IChatController chatController,
 108        IFriendsController friendsController)
 109    {
 11110        this.controller = controller;
 111
 11112        ShowBar(true, true);
 11113        chatButton.transform.parent.gameObject.SetActive(false);
 11114        friendsButton.transform.parent.gameObject.SetActive(false);
 11115        builderInWorldButton.transform.parent.gameObject.SetActive(false);
 11116        settingsButton.transform.parent.gameObject.SetActive(false);
 11117        exploreButton.transform.parent.gameObject.SetActive(false);
 11118        exploreV2Button.transform.parent.gameObject.SetActive(false);
 11119        voiceChatButtonPlaceholder.SetActive(false);
 11120        voiceChatButton.gameObject.SetActive(false);
 121
 11122        moreButton.gameObject.SetActive(true);
 11123        moreMenu.Initialize(this);
 11124        moreMenu.ShowMoreMenu(false, true);
 125
 11126        chatHeadsGroup.Initialize(chatController, friendsController);
 11127        chatButton.Initialize();
 11128        friendsButton.Initialize();
 11129        builderInWorldButton.Initialize();
 11130        settingsButton.Initialize();
 11131        exploreButton.Initialize();
 11132        exploreV2Button.Initialize();
 11133        moreButton.Initialize();
 11134        questPanelButton.Initialize();
 135
 11136        chatHeadsGroup.OnHeadToggleOn += OnWindowToggleOn;
 11137        chatHeadsGroup.OnHeadToggleOff += OnWindowToggleOff;
 138
 11139        chatButton.OnToggleOn += OnWindowToggleOn;
 11140        chatButton.OnToggleOff += OnWindowToggleOff;
 141
 11142        friendsButton.OnToggleOn += OnWindowToggleOn;
 11143        friendsButton.OnToggleOff += OnWindowToggleOff;
 144
 11145        builderInWorldButton.OnToggleOn += OnWindowToggleOn;
 11146        builderInWorldButton.OnToggleOff += OnWindowToggleOff;
 147
 11148        settingsButton.OnToggleOn += OnWindowToggleOn;
 11149        settingsButton.OnToggleOff += OnWindowToggleOff;
 150
 11151        exploreButton.OnToggleOn += OnWindowToggleOn;
 11152        exploreButton.OnToggleOff += OnWindowToggleOff;
 153
 11154        exploreV2Button.OnToggleOn += OnWindowToggleOn;
 11155        exploreV2Button.OnToggleOff += OnWindowToggleOff;
 156
 11157        moreButton.OnToggleOn += OnWindowToggleOn;
 11158        moreButton.OnToggleOff += OnWindowToggleOff;
 159
 11160        questPanelButton.OnToggleOn -= OnWindowToggleOn;
 11161        questPanelButton.OnToggleOff -= OnWindowToggleOff;
 11162        questPanelButton.OnToggleOn += OnWindowToggleOn;
 11163        questPanelButton.OnToggleOff += OnWindowToggleOff;
 164
 11165        portableExperiencesDiv.SetActive(false);
 166
 11167        portableExperiencesPool = PoolManager.i.AddPool(
 168            PORTABLE_EXPERIENCE_ITEMS_POOL,
 169            Instantiate(portableExperienceItem.gameObject),
 170            maxPrewarmCount: 5,
 171            isPersistent: true);
 172
 11173        portableExperiencesPool.ForcePrewarm();
 174
 11175        AdjustRightButtonsLayoutWidth();
 11176    }
 177
 178    public void SetBuilderInWorldStatus(bool isActive)
 179    {
 1180        builderInWorldButton.transform.parent.gameObject.SetActive(isActive);
 1181        AdjustRightButtonsLayoutWidth();
 1182    }
 183
 0184    public void SetQuestsPanelStatus(bool isActive) { questPanelButton.transform.parent.gameObject.SetActive(isActive); 
 185
 186    private void OnWindowToggleOff(TaskbarButton obj)
 187    {
 6188        if (obj == friendsButton)
 2189            OnFriendsToggleOff?.Invoke();
 4190        else if (obj == chatButton)
 2191            OnChatToggleOff?.Invoke();
 2192        else if (obj == settingsButton)
 0193            OnSettingsToggleOff?.Invoke();
 2194        else if (obj == builderInWorldButton)
 0195            OnBuilderInWorldToggleOff?.Invoke();
 2196        else if (obj == exploreButton)
 1197            OnExploreToggleOff?.Invoke();
 1198        else if (obj == exploreV2Button)
 0199            OnExploreV2ToggleOff?.Invoke();
 1200        else if (obj == moreButton)
 0201            moreMenu.ShowMoreMenu(false);
 1202        else if (obj == questPanelButton)
 0203            OnQuestPanelToggled?.Invoke(false);
 204        else
 205        {
 1206            using (var iterator = activePortableExperienceItems.GetEnumerator())
 207            {
 1208                while (iterator.MoveNext())
 209                {
 0210                    if (iterator.Current.Value.mainButton == obj)
 211                    {
 0212                        iterator.Current.Value.ShowContextMenu(false);
 0213                        break;
 214                    }
 215                }
 1216            }
 217        }
 218
 6219        if (AllButtonsToggledOff())
 220        {
 5221            chatButton.SetToggleState(false, useCallback: false);
 5222            controller.worldChatWindowHud.SetVisibility(true);
 223        }
 6224    }
 225
 226    public bool AllButtonsToggledOff()
 227    {
 8228        var btns = GetButtonList();
 229
 8230        bool allToggledOff = true;
 231
 150232        foreach (var btn in btns)
 233        {
 67234            if (btn.toggledOn)
 1235                allToggledOff = false;
 236        }
 237
 8238        return allToggledOff;
 239    }
 240
 241    private void OnWindowToggleOn(TaskbarButton obj)
 242    {
 6243        if (obj == friendsButton)
 2244            OnFriendsToggleOn?.Invoke();
 4245        else if (obj == chatButton)
 3246            OnChatToggleOn?.Invoke();
 1247        else if (obj == settingsButton)
 0248            OnSettingsToggleOn?.Invoke();
 1249        else if (obj == builderInWorldButton)
 0250            OnBuilderInWorldToggleOn?.Invoke();
 1251        else if (obj == exploreButton)
 0252            OnExploreToggleOn?.Invoke();
 1253        else if (obj == exploreV2Button)
 0254            OnExploreV2ToggleOn?.Invoke();
 1255        else if (obj == moreButton)
 0256            moreMenu.ShowMoreMenu(true);
 1257        else if (obj == questPanelButton)
 0258            OnQuestPanelToggled?.Invoke(true);
 259        else
 260        {
 1261            using (var iterator = activePortableExperienceItems.GetEnumerator())
 262            {
 1263                while (iterator.MoveNext())
 264                {
 0265                    if (iterator.Current.Value.mainButton == obj)
 266                    {
 0267                        iterator.Current.Value.ShowContextMenu(true);
 0268                        break;
 269                    }
 270                }
 1271            }
 272        }
 273
 6274        SelectButton(obj);
 6275    }
 276
 277    public void SelectButton(TaskbarButton obj)
 278    {
 7279        var taskbarButtonList = GetButtonList();
 280
 134281        foreach (var btn in taskbarButtonList)
 282        {
 60283            if (btn != obj)
 284            {
 285                // We let the use of the chat and friends windows while we are using the explore at the same time
 53286                if (((btn == exploreButton || btn == exploreV2Button) && (obj == chatButton || obj == friendsButton || o
 287                    ((btn == chatButton || btn == friendsButton || btn is ChatHeadButton) && (obj == exploreButton || ob
 288                    continue;
 289
 41290                btn.SetToggleState(false, useCallback: true);
 291            }
 292        }
 7293    }
 294
 4295    internal void OnAddChatWindow() { chatButton.transform.parent.gameObject.SetActive(true); }
 296
 6297    internal void OnAddFriendsWindow() { friendsButton.transform.parent.gameObject.SetActive(true); }
 298
 299    internal void OnAddSettingsWindow()
 300    {
 2301        settingsButton.transform.parent.gameObject.SetActive(true);
 2302        AdjustRightButtonsLayoutWidth();
 2303    }
 304
 305    internal void OnAddExploreWindow()
 306    {
 2307        exploreButton.transform.parent.gameObject.SetActive(true);
 2308        AdjustRightButtonsLayoutWidth();
 2309    }
 310
 311    internal void OnAddExploreV2Window()
 312    {
 0313        exploreV2Button.transform.parent.gameObject.SetActive(true);
 0314        AdjustRightButtonsLayoutWidth();
 0315    }
 316
 4317    internal void OnAddHelpAndSupportWindow() { moreMenu.ActivateHelpAndSupportButton(); }
 318
 4319    internal void OnAddControlsMoreOption() { moreMenu.ActivateControlsButton(); }
 320
 321    internal void OnAddVoiceChat()
 322    {
 0323        voiceChatButtonPlaceholder.SetActive(true);
 0324        voiceChatButton.gameObject.SetActive(true);
 0325    }
 326
 327    internal void ShowBar(bool visible, bool instant = false)
 328    {
 13329        if (visible)
 12330            taskbarAnimator.Show(instant);
 331        else
 1332            taskbarAnimator.Hide(instant);
 333
 13334        isBarVisible = visible;
 13335    }
 336
 2337    public void SetVisibility(bool visible) { gameObject.SetActive(visible); }
 338
 339    private void OnDestroy()
 340    {
 11341        if (chatHeadsGroup != null)
 342        {
 11343            chatHeadsGroup.OnHeadToggleOn -= OnWindowToggleOn;
 11344            chatHeadsGroup.OnHeadToggleOff -= OnWindowToggleOff;
 345        }
 346
 11347        if (chatButton != null)
 348        {
 11349            chatButton.OnToggleOn -= OnWindowToggleOn;
 11350            chatButton.OnToggleOff -= OnWindowToggleOff;
 351        }
 352
 11353        if (friendsButton != null)
 354        {
 11355            friendsButton.OnToggleOn -= OnWindowToggleOn;
 11356            friendsButton.OnToggleOff -= OnWindowToggleOff;
 357        }
 358
 11359        if (settingsButton != null)
 360        {
 11361            settingsButton.OnToggleOn -= OnWindowToggleOn;
 11362            settingsButton.OnToggleOff -= OnWindowToggleOff;
 363        }
 364
 11365        if (builderInWorldButton != null)
 366        {
 11367            builderInWorldButton.OnToggleOn -= OnWindowToggleOn;
 11368            builderInWorldButton.OnToggleOff -= OnWindowToggleOff;
 369        }
 370
 11371        if (exploreButton != null)
 372        {
 11373            exploreButton.OnToggleOn -= OnWindowToggleOn;
 11374            exploreButton.OnToggleOff -= OnWindowToggleOff;
 375        }
 376
 11377        if (exploreV2Button != null)
 378        {
 11379            exploreV2Button.OnToggleOn -= OnWindowToggleOn;
 11380            exploreV2Button.OnToggleOff -= OnWindowToggleOff;
 381        }
 382
 11383        if (moreButton != null)
 384        {
 11385            moreButton.OnToggleOn -= OnWindowToggleOn;
 11386            moreButton.OnToggleOff -= OnWindowToggleOff;
 387        }
 388
 11389        if (questPanelButton != null)
 390        {
 11391            questPanelButton.OnToggleOn -= OnWindowToggleOn;
 11392            questPanelButton.OnToggleOff -= OnWindowToggleOff;
 393        }
 11394    }
 395
 396    internal void AddPortableExperienceElement(string id, string name, string iconUrl)
 397    {
 2398        if (portableExperiencesPool == null)
 0399            return;
 400
 2401        portableExperiencesDiv.SetActive(true);
 402
 2403        PoolableObject newPEPoolable = portableExperiencesPool.Get();
 2404        newPEPoolable.gameObject.name = $"PortableExperienceItem ({id})";
 2405        newPEPoolable.gameObject.transform.SetParent(rightButtonsContainer.transform);
 2406        newPEPoolable.gameObject.transform.localScale = Vector3.one;
 2407        newPEPoolable.gameObject.transform.SetAsFirstSibling();
 408
 2409        PortableExperienceTaskbarItem newPEItem = newPEPoolable.gameObject.GetComponent<PortableExperienceTaskbarItem>()
 2410        newPEItem.ConfigureItem(id, name, iconUrl, controller);
 2411        newPEItem.mainButton.OnToggleOn += OnWindowToggleOn;
 2412        newPEItem.mainButton.OnToggleOff += OnWindowToggleOff;
 413
 2414        activePortableExperienceItems.Add(id, newPEItem);
 2415        activePortableExperiencesPoolables.Add(id, newPEPoolable);
 416
 2417        AdjustRightButtonsLayoutWidth();
 2418    }
 419
 420    internal void RemovePortableExperienceElement(string id)
 421    {
 1422        if (portableExperiencesPool == null)
 0423            return;
 424
 1425        if (activePortableExperienceItems.ContainsKey(id))
 426        {
 1427            PortableExperienceTaskbarItem peToRemove = activePortableExperienceItems[id];
 428
 1429            peToRemove.mainButton.OnToggleOn -= OnWindowToggleOn;
 1430            peToRemove.mainButton.OnToggleOff -= OnWindowToggleOff;
 431
 1432            activePortableExperienceItems.Remove(id);
 1433            portableExperiencesPool.Release(activePortableExperiencesPoolables[id]);
 1434            activePortableExperiencesPoolables.Remove(id);
 435        }
 436
 1437        if (activePortableExperienceItems.Count == 0)
 1438            portableExperiencesDiv.SetActive(false);
 439
 1440        AdjustRightButtonsLayoutWidth();
 1441    }
 442
 443    [ContextMenu("AdjustRightButtonsLayoutWidth")]
 444    private void AdjustRightButtonsLayoutWidth()
 445    {
 19446        float totalWidth = 0f;
 19447        int numActiveChild = 0;
 19448        RectTransform rightButtonsContainerRT = (RectTransform)rightButtonsContainer.transform;
 449
 308450        for (int i = 0; i < rightButtonsContainerRT.childCount; i++)
 451        {
 135452            RectTransform child = (RectTransform)rightButtonsContainerRT.GetChild(i);
 453
 135454            if (!child.gameObject.activeSelf)
 455                continue;
 456
 50457            totalWidth += child.sizeDelta.x;
 50458            numActiveChild++;
 459        }
 460
 19461        totalWidth +=
 462            ((numActiveChild - 1) * rightButtonsHorizontalLayout.spacing) +
 463            rightButtonsHorizontalLayout.padding.left +
 464            rightButtonsHorizontalLayout.padding.right;
 465
 19466        ((RectTransform)rightButtonsContainer.transform).sizeDelta = new Vector2(totalWidth, ((RectTransform)rightButton
 19467    }
 468}