< Summary

Class:TaskbarHUDController
Assembly:TaskbarHUD
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/HUD/TaskbarHUD/TaskbarHUDController.cs
Covered lines:175
Uncovered lines:333
Coverable lines:508
Total lines:907
Line coverage:34.4% (175 of 508)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
TaskbarHUDController(...)0%110100%
CreateView()0%110100%
Initialize(...)0%22089.74%
HandleFriendsToggle(...)0%4.074083.33%
HandleEmotesToggle(...)0%30500%
ShowEmotes()0%12300%
HandleExperiencesToggle(...)0%12300%
HandleVoiceChatToggle(...)0%20400%
ShowExperiences()0%12300%
ToggleFriendsTrigger_OnTriggered(...)0%56700%
ToggleWorldChatTrigger_OnTriggered(...)0%56700%
CloseWindowTrigger_OnTriggered(...)0%30500%
HandleChatToggle(...)0%3.333066.67%
MouseCatcher_OnMouseUnlock()0%2100%
MouseCatcher_OnMouseLock()0%20400%
AddWorldChatWindow(...)0%8.518080%
ToggleOffChatIcon()0%110100%
OpenFriendsWindow()0%440100%
CloseFriendsWindow()0%20400%
OpenPrivateChatFromPassport(...)0%12300%
OpenPrivateChat(...)0%12300%
OpenLastActiveChatWindow(...)0%42600%
OpenWorldChatWindow()0%440100%
CloseAnyChatWindow()0%2100%
OpenChannelChat(...)0%1101000%
OpenPublicChat(...)0%1321100%
OpenChatList()0%12300%
CloseChatList()0%6200%
OpenVoiceChatWindow()0%12300%
CloseVoiceChatWindow()0%12300%
AddPrivateChatWindow(...)0%98075%
AddPublicChatChannel(...)0%98075%
HandlePublicChannelPreviewModeChanged(...)0%12300%
HandleChannelPreviewModeChanged(...)0%12300%
HandlePrivateChannelPreviewMode(...)0%12300%
AddFriendsWindow(...)0%10.549073.33%
AddVoiceChatWindow(...)0%37.138023.08%
InitializeEmotesSelector(...)0%2.52050%
IsEmotesVisibleChanged(...)0%2100%
InitializeExperiencesViewer(...)0%3.462028.57%
InitializeNotificationPanel(...)0%3.462028.57%
InitializeTopNotificationPanel(...)0%3.192033.33%
OpenClickedChat(...)0%30500%
<OpenClickedChat()0%20400%
IsExperiencesViewerOpenChanged(...)0%6200%
NumOfLoadedExperiencesChanged(...)0%220100%
DisableFriendsWindow()0%2100%
Dispose()0%6.026091.67%
SetVisibility(...)0%2100%
SetVisibility(...)0%110100%
GoBackFromChat()0%6200%
AddChatChannel(...)0%42600%
AddChannelSearch(...)0%3.013090%
AddChannelCreation(...)0%12300%
OpenChannelCreation()0%2100%
AddChannelLeaveConfirmation(...)0%6200%
OpenChannelLeaveConfirmation(...)0%2100%
OpenChannelSearch()0%12300%

File(s)

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

#LineLine coverage
 1using Cysharp.Threading.Tasks;
 2using System;
 3using DCL;
 4using DCL.Chat.HUD;
 5using DCL.Chat.Notifications;
 6using DCL.Social.Friends;
 7using System.Threading;
 8using TMPro;
 9using UnityEngine;
 10using UnityEngine.EventSystems;
 11
 12public class TaskbarHUDController : IHUD
 13{
 14    private readonly IChatController chatController;
 15    private readonly IFriendsController friendsController;
 16
 17    [Serializable]
 18    public struct Configuration
 19    {
 20        public bool enableVoiceChat;
 21        public bool enableQuestPanel;
 22    }
 23
 24    public TaskbarHUDView view;
 25    public WorldChatWindowController worldChatWindowHud;
 26    public PrivateChatWindowController privateChatWindow;
 27    public PublicChatWindowController publicChatWindow;
 28    public ChatChannelHUDController channelChatWindow;
 29    public FriendsHUDController friendsHud;
 30    public VoiceChatWindowController voiceChatHud;
 31
 32    private IMouseCatcher mouseCatcher;
 33    private InputAction_Trigger toggleFriendsTrigger;
 34    private InputAction_Trigger closeWindowTrigger;
 35    private InputAction_Trigger toggleWorldChatTrigger;
 36    private Transform experiencesViewerTransform;
 37    private Transform notificationViewerTransform;
 38    private Transform topNotificationViewerTransform;
 39    private IHUD chatInputTargetWindow;
 40    private IHUD chatBackWindow;
 41    private SearchChannelsWindowController searchChannelsHud;
 42    private CreateChannelWindowController channelCreationWindow;
 43    private LeaveChannelConfirmationWindowController channelLeaveWindow;
 444    private CancellationTokenSource openPrivateChatCancellationToken = new ();
 45
 346    private bool isFriendsFeatureEnabled => DataStore.i.featureFlags.flags.Get().IsFeatureEnabled("friends_enabled");
 47
 48    public event Action OnAnyTaskbarButtonClicked;
 49
 050    public RectTransform socialTooltipReference => view.socialTooltipReference;
 51
 1252    internal BaseVariable<bool> isEmotesWheelInitialized => DataStore.i.emotesCustomization.isWheelInitialized;
 1153    internal BaseVariable<bool> isEmotesVisible => DataStore.i.HUDs.emotesVisible;
 054    internal BaseVariable<bool> emoteJustTriggeredFromShortcut => DataStore.i.HUDs.emoteJustTriggeredFromShortcut;
 1255    internal BaseVariable<Transform> isExperiencesViewerInitialized => DataStore.i.experiencesViewer.isInitialized;
 856    internal BaseVariable<Transform> notificationPanelTransform => DataStore.i.HUDs.notificationPanelTransform;
 857    internal BaseVariable<Transform> topNotificationPanelTransform => DataStore.i.HUDs.topNotificationPanelTransform;
 1558    internal BaseVariable<bool> isExperiencesViewerOpen => DataStore.i.experiencesViewer.isOpen;
 1259    internal BaseVariable<int> numOfLoadedExperiences => DataStore.i.experiencesViewer.numOfLoadedExperiences;
 460    internal BaseVariable<string> openPrivateChat => DataStore.i.HUDs.openPrivateChat;
 061    internal BaseVariable<string> openedChat => DataStore.i.HUDs.openedChat;
 462    internal BaseVariable<string> openChat => DataStore.i.HUDs.openChat;
 363    internal BaseVariable<bool> isPromoteChannelsToastVisible => DataStore.i.channels.isPromoteToastVisible;
 64
 465    public TaskbarHUDController(IChatController chatController, IFriendsController friendsController)
 66    {
 467        this.chatController = chatController;
 468        this.friendsController = friendsController;
 469    }
 70
 71    protected virtual TaskbarHUDView CreateView()
 72    {
 473        return TaskbarHUDView.Create();
 74    }
 75
 76    public void Initialize(IMouseCatcher mouseCatcher)
 77    {
 478        this.mouseCatcher = mouseCatcher;
 79
 480        view = CreateView();
 81
 482        if (mouseCatcher != null)
 83        {
 084            mouseCatcher.OnMouseLock -= MouseCatcher_OnMouseLock;
 085            mouseCatcher.OnMouseUnlock -= MouseCatcher_OnMouseUnlock;
 086            mouseCatcher.OnMouseLock += MouseCatcher_OnMouseLock;
 087            mouseCatcher.OnMouseUnlock += MouseCatcher_OnMouseUnlock;
 88        }
 89
 490        view.leftWindowContainerLayout.enabled = false;
 91
 492        view.OnChatToggle += HandleChatToggle;
 493        view.OnFriendsToggle += HandleFriendsToggle;
 494        view.OnEmotesToggle += HandleEmotesToggle;
 495        view.OnExperiencesToggle += HandleExperiencesToggle;
 496        view.OnVoiceChatToggle += HandleVoiceChatToggle;
 97
 498        toggleFriendsTrigger = Resources.Load<InputAction_Trigger>("ToggleFriends");
 499        toggleFriendsTrigger.OnTriggered -= ToggleFriendsTrigger_OnTriggered;
 4100        toggleFriendsTrigger.OnTriggered += ToggleFriendsTrigger_OnTriggered;
 101
 4102        closeWindowTrigger = Resources.Load<InputAction_Trigger>("CloseWindow");
 4103        closeWindowTrigger.OnTriggered -= CloseWindowTrigger_OnTriggered;
 4104        closeWindowTrigger.OnTriggered += CloseWindowTrigger_OnTriggered;
 105
 4106        toggleWorldChatTrigger = Resources.Load<InputAction_Trigger>("ToggleWorldChat");
 4107        toggleWorldChatTrigger.OnTriggered -= ToggleWorldChatTrigger_OnTriggered;
 4108        toggleWorldChatTrigger.OnTriggered += ToggleWorldChatTrigger_OnTriggered;
 109
 4110        isEmotesWheelInitialized.OnChange += InitializeEmotesSelector;
 4111        InitializeEmotesSelector(isEmotesWheelInitialized.Get(), false);
 4112        isEmotesVisible.OnChange += IsEmotesVisibleChanged;
 113
 4114        isExperiencesViewerOpen.OnChange += IsExperiencesViewerOpenChanged;
 115
 4116        view.leftWindowContainerAnimator.Show();
 117
 4118        CommonScriptableObjects.isTaskbarHUDInitialized.Set(true);
 119
 4120        isExperiencesViewerInitialized.OnChange += InitializeExperiencesViewer;
 4121        InitializeExperiencesViewer(isExperiencesViewerInitialized.Get(), null);
 122
 4123        notificationPanelTransform.OnChange += InitializeNotificationPanel;
 4124        InitializeNotificationPanel(notificationPanelTransform.Get(), null);
 125
 4126        topNotificationPanelTransform.OnChange += InitializeTopNotificationPanel;
 4127        InitializeTopNotificationPanel(topNotificationPanelTransform.Get(), null);
 128
 4129        numOfLoadedExperiences.OnChange += NumOfLoadedExperiencesChanged;
 4130        NumOfLoadedExperiencesChanged(numOfLoadedExperiences.Get(), 0);
 131
 4132        openPrivateChat.OnChange += OpenPrivateChatFromPassport;
 4133        openChat.OnChange += OpenClickedChat;
 4134    }
 135
 136    private void HandleFriendsToggle(bool show)
 137    {
 3138        if (show)
 2139            OpenFriendsWindow();
 140        else
 141        {
 1142            friendsHud?.SetVisibility(false);
 1143            ToggleOffChatIcon();
 144        }
 145
 3146        OnAnyTaskbarButtonClicked?.Invoke();
 0147    }
 148
 149    private void HandleEmotesToggle(bool show)
 150    {
 0151        if (show && emoteJustTriggeredFromShortcut.Get())
 152        {
 0153            emoteJustTriggeredFromShortcut.Set(false);
 0154            return;
 155        }
 156
 0157        if (show)
 158        {
 0159            ToggleOffChatIcon();
 0160            ShowEmotes();
 161        }
 162        else
 163        {
 0164            view.ToggleOff(TaskbarHUDView.TaskbarButtonType.Emotes);
 0165            isEmotesVisible.Set(false);
 0166            ToggleOffChatIcon();
 167        }
 168
 0169        OnAnyTaskbarButtonClicked?.Invoke();
 0170    }
 171
 172    private void ShowEmotes()
 173    {
 0174        worldChatWindowHud.SetVisibility(false);
 0175        privateChatWindow.SetVisibility(false);
 0176        channelChatWindow.SetVisibility(false);
 0177        friendsHud?.SetVisibility(false);
 0178        searchChannelsHud.SetVisibility(false);
 0179        isExperiencesViewerOpen.Set(false);
 0180        voiceChatHud?.SetVisibility(false);
 0181        isEmotesVisible.Set(true);
 0182        view.ToggleOn(TaskbarHUDView.TaskbarButtonType.Emotes);
 0183    }
 184
 185    private void HandleExperiencesToggle(bool show)
 186    {
 0187        if (show)
 0188            ShowExperiences();
 189        else
 190        {
 0191            isExperiencesViewerOpen.Set(false);
 0192            ToggleOffChatIcon();
 193        }
 194
 0195        OnAnyTaskbarButtonClicked?.Invoke();
 0196    }
 197
 198    private void HandleVoiceChatToggle(bool show)
 199    {
 0200        if (show)
 0201            OpenVoiceChatWindow();
 202        else
 0203            voiceChatHud?.SetVisibility(false);
 204
 0205        OnAnyTaskbarButtonClicked?.Invoke();
 0206    }
 207
 208    private void ShowExperiences()
 209    {
 0210        worldChatWindowHud.SetVisibility(false);
 0211        privateChatWindow.SetVisibility(false);
 0212        publicChatWindow.SetVisibility(false);
 0213        channelChatWindow.SetVisibility(false);
 0214        searchChannelsHud.SetVisibility(false);
 0215        friendsHud?.SetVisibility(false);
 0216        isEmotesVisible.Set(false);
 0217        voiceChatHud?.SetVisibility(false);
 0218        isExperiencesViewerOpen.Set(true);
 0219        isPromoteChannelsToastVisible.Set(false);
 0220    }
 221
 222    private void ToggleFriendsTrigger_OnTriggered(DCLAction_Trigger action)
 223    {
 0224        if (friendsHud == null) return;
 0225        if (!isFriendsFeatureEnabled) return;
 226
 0227        bool anyInputFieldIsSelected = EventSystem.current != null &&
 228                                       EventSystem.current.currentSelectedGameObject != null &&
 229                                       EventSystem.current.currentSelectedGameObject.GetComponent<TMP_InputField>() !=
 230                                       null;
 231
 0232        if (anyInputFieldIsSelected) return;
 233
 0234        mouseCatcher.UnlockCursor();
 235
 0236        if (!friendsHud.View.IsActive())
 237        {
 0238            view.leftWindowContainerAnimator.Show();
 0239            OpenFriendsWindow();
 240        }
 241        else
 242        {
 0243            CloseFriendsWindow();
 0244            ToggleOffChatIcon();
 245        }
 0246    }
 247
 248    private void ToggleWorldChatTrigger_OnTriggered(DCLAction_Trigger action)
 249    {
 0250        bool anyInputFieldIsSelected = EventSystem.current != null &&
 251                                       EventSystem.current.currentSelectedGameObject != null &&
 252                                       EventSystem.current.currentSelectedGameObject.GetComponent<TMP_InputField>() !=
 253                                       null;
 254
 0255        if (anyInputFieldIsSelected) return;
 256
 0257        mouseCatcher.UnlockCursor();
 0258        chatBackWindow = worldChatWindowHud;
 259
 0260        if (!worldChatWindowHud.View.IsActive
 261            && !privateChatWindow.View.IsActive
 262            && !publicChatWindow.View.IsActive)
 0263            OpenLastActiveChatWindow(chatInputTargetWindow);
 0264    }
 265
 266    private void CloseWindowTrigger_OnTriggered(DCLAction_Trigger action)
 267    {
 0268        if (mouseCatcher.IsLocked) return;
 269
 0270        if (publicChatWindow.View.IsActive ||
 271            channelChatWindow.View.IsActive ||
 272            privateChatWindow.View.IsActive)
 273        {
 0274            publicChatWindow.SetVisibility(false);
 0275            worldChatWindowHud.SetVisibility(true);
 0276            chatInputTargetWindow = publicChatWindow;
 277        }
 278        else
 279        {
 0280            worldChatWindowHud.SetVisibility(false);
 0281            view.ToggleOff(TaskbarHUDView.TaskbarButtonType.Chat);
 282        }
 283
 0284        publicChatWindow.SetVisibility(false);
 0285        privateChatWindow.SetVisibility(false);
 0286        channelChatWindow.SetVisibility(false);
 0287        CloseFriendsWindow();
 0288        CloseVoiceChatWindow();
 0289        isEmotesVisible.Set(false);
 0290        isExperiencesViewerOpen.Set(false);
 0291    }
 292
 293    private void HandleChatToggle(bool show)
 294    {
 1295        if (show)
 296        {
 1297            chatBackWindow = worldChatWindowHud;
 1298            OpenWorldChatWindow();
 299        }
 0300        else { CloseAnyChatWindow(); }
 301
 1302        OnAnyTaskbarButtonClicked?.Invoke();
 0303    }
 304
 0305    private void MouseCatcher_OnMouseUnlock() { }
 306
 307    private void MouseCatcher_OnMouseLock()
 308    {
 0309        CloseFriendsWindow();
 0310        CloseChatList();
 0311        CloseVoiceChatWindow();
 0312        isExperiencesViewerOpen.Set(false);
 313
 0314        if (!privateChatWindow.View.IsActive
 315            && !publicChatWindow.View.IsActive
 316            && !channelChatWindow.View.IsActive)
 0317            ToggleOffChatIcon();
 0318    }
 319
 320    public void AddWorldChatWindow(WorldChatWindowController controller)
 321    {
 2322        if (controller?.View == null)
 323        {
 0324            Debug.LogWarning("AddChatWindow >>> World Chat Window doesn't exist yet!");
 0325            return;
 326        }
 327
 2328        if (controller.View.Transform.parent == view.leftWindowContainer) return;
 329
 2330        controller.View.Transform.SetParent(view.leftWindowContainer, false);
 2331        notificationViewerTransform?.SetAsLastSibling();
 2332        topNotificationViewerTransform?.SetAsFirstSibling();
 2333        experiencesViewerTransform?.SetAsLastSibling();
 334
 2335        worldChatWindowHud = controller;
 336
 2337        view.ShowChatButton();
 2338        worldChatWindowHud.OnCloseView += ToggleOffChatIcon;
 2339        worldChatWindowHud.OnOpenChannelCreation += OpenChannelCreation;
 2340        worldChatWindowHud.OnOpenChannelLeave += OpenChannelLeaveConfirmation;
 2341    }
 342
 343    private void ToggleOffChatIcon() =>
 1344        view.ToggleOff(TaskbarHUDView.TaskbarButtonType.Chat);
 345
 346    private void OpenFriendsWindow()
 347    {
 2348        worldChatWindowHud.SetVisibility(false);
 2349        privateChatWindow.SetVisibility(false);
 2350        publicChatWindow.SetVisibility(false);
 2351        channelChatWindow?.SetVisibility(false);
 2352        searchChannelsHud.SetVisibility(false);
 2353        isExperiencesViewerOpen.Set(false);
 2354        isEmotesVisible.Set(false);
 2355        voiceChatHud?.SetVisibility(false);
 2356        friendsHud?.SetVisibility(true);
 2357        view.ToggleOn(TaskbarHUDView.TaskbarButtonType.Friends);
 2358        chatBackWindow = friendsHud;
 2359        isPromoteChannelsToastVisible.Set(false);
 2360    }
 361
 362
 363    private void CloseFriendsWindow()
 364    {
 0365        if(friendsHud is { IsVisible: true })
 366        {
 0367            friendsHud?.SetVisibility(false);
 0368            view.ToggleOff(TaskbarHUDView.TaskbarButtonType.Friends);
 369        }
 0370    }
 371
 372    private void OpenPrivateChatFromPassport(string current, string previous)
 373    {
 0374        if (current == "" || current == previous)
 0375            return;
 376
 0377        OpenPrivateChat(current);
 0378        openPrivateChat.Set("", false);
 0379    }
 380
 381    public void OpenPrivateChat(string userId)
 382    {
 0383        worldChatWindowHud.SetVisibility(false);
 0384        publicChatWindow.SetVisibility(false);
 0385        channelChatWindow.SetVisibility(false);
 0386        searchChannelsHud.SetVisibility(false);
 0387        friendsHud?.SetVisibility(false);
 0388        isExperiencesViewerOpen.Set(false);
 0389        isEmotesVisible.Set(false);
 0390        voiceChatHud?.SetVisibility(false);
 0391        openedChat.Set(userId);
 0392        privateChatWindow.Setup(userId);
 0393        privateChatWindow.SetVisibility(true);
 0394        view.ToggleOn(TaskbarHUDView.TaskbarButtonType.Chat);
 0395        chatInputTargetWindow = privateChatWindow;
 0396    }
 397
 398    private IHUD OpenLastActiveChatWindow(IHUD lastActiveWindow)
 399    {
 0400        worldChatWindowHud.SetVisibility(false);
 0401        privateChatWindow.SetVisibility(false);
 0402        publicChatWindow.SetVisibility(false);
 0403        channelChatWindow?.SetVisibility(false);
 0404        searchChannelsHud.SetVisibility(false);
 0405        friendsHud?.SetVisibility(false);
 0406        isEmotesVisible.Set(false);
 0407        isExperiencesViewerOpen.Set(false);
 0408        voiceChatHud?.SetVisibility(false);
 0409        isPromoteChannelsToastVisible.Set(false);
 410
 411        IHUD visibleWindow;
 412
 0413        if (lastActiveWindow == publicChatWindow)
 414        {
 0415            publicChatWindow.SetVisibility(true, true);
 0416            visibleWindow = publicChatWindow;
 417        }
 0418        else if (lastActiveWindow != null)
 419        {
 0420            lastActiveWindow.SetVisibility(true);
 0421            visibleWindow = lastActiveWindow;
 422        }
 423        else
 424        {
 0425            publicChatWindow.SetVisibility(true, true);
 0426            visibleWindow = publicChatWindow;
 427        }
 428
 0429        view.ToggleOn(TaskbarHUDView.TaskbarButtonType.Chat);
 430
 0431        return visibleWindow;
 432    }
 433
 434    private void OpenWorldChatWindow()
 435    {
 1436        privateChatWindow.SetVisibility(false);
 1437        publicChatWindow.SetVisibility(false);
 1438        channelChatWindow?.SetVisibility(false);
 1439        searchChannelsHud.SetVisibility(false);
 1440        friendsHud?.SetVisibility(false);
 1441        isEmotesVisible.Set(false);
 1442        isExperiencesViewerOpen.Set(false);
 1443        voiceChatHud?.SetVisibility(false);
 1444        isPromoteChannelsToastVisible.Set(false);
 1445        worldChatWindowHud.SetVisibility(true);
 1446        view.ToggleOn(TaskbarHUDView.TaskbarButtonType.Chat);
 1447    }
 448
 449    private void CloseAnyChatWindow()
 450    {
 0451        worldChatWindowHud.SetVisibility(false);
 0452        privateChatWindow.SetVisibility(false);
 0453        publicChatWindow.SetVisibility(false);
 0454        channelChatWindow.SetVisibility(false);
 0455        searchChannelsHud.SetVisibility(false);
 0456        view.ToggleOff(TaskbarHUDView.TaskbarButtonType.Chat);
 0457    }
 458
 459    public void OpenChannelChat(string channelId)
 460    {
 0461        openedChat.Set(channelId);
 0462        channelChatWindow?.Setup(channelId);
 0463        channelChatWindow?.SetVisibility(true);
 0464        publicChatWindow?.SetVisibility(false);
 0465        worldChatWindowHud?.SetVisibility(false);
 0466        privateChatWindow?.SetVisibility(false);
 0467        searchChannelsHud.SetVisibility(false);
 0468        friendsHud?.SetVisibility(false);
 0469        isExperiencesViewerOpen?.Set(false);
 0470        isEmotesVisible?.Set(false);
 0471        voiceChatHud?.SetVisibility(false);
 472
 0473        view.ToggleOn(TaskbarHUDView.TaskbarButtonType.Chat);
 474
 0475        chatInputTargetWindow = channelChatWindow;
 0476    }
 477
 478    public void OpenPublicChat(string channelId, bool focusInputField)
 479    {
 0480        openedChat.Set(channelId);
 0481        publicChatWindow?.Setup(channelId);
 0482        publicChatWindow?.SetVisibility(true, focusInputField);
 0483        channelChatWindow?.SetVisibility(false);
 0484        worldChatWindowHud?.SetVisibility(false);
 0485        privateChatWindow?.SetVisibility(false);
 0486        searchChannelsHud?.SetVisibility(false);
 0487        friendsHud?.SetVisibility(false);
 0488        isExperiencesViewerOpen?.Set(false);
 0489        isEmotesVisible?.Set(false);
 0490        voiceChatHud?.SetVisibility(false);
 491
 0492        view.ToggleOn(TaskbarHUDView.TaskbarButtonType.Chat);
 493
 0494        chatInputTargetWindow = publicChatWindow;
 0495    }
 496
 497    private void OpenChatList()
 498    {
 0499        privateChatWindow.SetVisibility(false);
 0500        publicChatWindow.SetVisibility(false);
 0501        channelChatWindow.SetVisibility(false);
 0502        searchChannelsHud.SetVisibility(false);
 0503        friendsHud?.SetVisibility(false);
 0504        isExperiencesViewerOpen.Set(false);
 0505        isEmotesVisible.Set(false);
 0506        voiceChatHud?.SetVisibility(false);
 0507        worldChatWindowHud.SetVisibility(true);
 0508        view.ToggleOn(TaskbarHUDView.TaskbarButtonType.Chat);
 0509    }
 510
 511    private void CloseChatList()
 512    {
 0513        if (!worldChatWindowHud.View.IsActive) return;
 0514        worldChatWindowHud.SetVisibility(false);
 0515        view.ToggleOff(TaskbarHUDView.TaskbarButtonType.Chat);
 0516    }
 517
 518    private void OpenVoiceChatWindow()
 519    {
 0520        worldChatWindowHud.SetVisibility(false);
 0521        privateChatWindow.SetVisibility(false);
 0522        publicChatWindow.SetVisibility(false);
 0523        channelChatWindow.SetVisibility(false);
 0524        searchChannelsHud.SetVisibility(false);
 0525        isExperiencesViewerOpen.Set(false);
 0526        isEmotesVisible.Set(false);
 0527        friendsHud?.SetVisibility(false);
 0528        voiceChatHud?.SetVisibility(true);
 0529        view.ToggleOn(TaskbarHUDView.TaskbarButtonType.VoiceChat);
 0530        isPromoteChannelsToastVisible.Set(false);
 0531    }
 532
 533    private void CloseVoiceChatWindow()
 534    {
 0535        if(voiceChatHud.IsVisible)
 536        {
 0537            voiceChatHud?.SetVisibility(false);
 0538            view.ToggleOff(TaskbarHUDView.TaskbarButtonType.VoiceChat);
 539        }
 0540    }
 541
 542    public void AddPrivateChatWindow(PrivateChatWindowController controller)
 543    {
 1544        if (controller?.View == null)
 545        {
 0546            Debug.LogWarning("AddPrivateChatWindow >>> Private Chat Window doesn't exist yet!");
 0547            return;
 548        }
 549
 1550        if (controller.View.Transform.parent == view.leftWindowContainer)
 0551            return;
 552
 1553        controller.View.Transform.SetParent(view.leftWindowContainer, false);
 1554        notificationViewerTransform?.SetAsLastSibling();
 1555        topNotificationViewerTransform?.SetAsFirstSibling();
 1556        experiencesViewerTransform?.SetAsLastSibling();
 557
 1558        privateChatWindow = controller;
 559
 1560        controller.OnClosed += ToggleOffChatIcon;
 1561    }
 562
 563    public void AddPublicChatChannel(PublicChatWindowController controller)
 564    {
 1565        if (controller?.View == null)
 566        {
 0567            Debug.LogWarning("AddPublicChatChannel >>> Public Chat Window doesn't exist yet!");
 0568            return;
 569        }
 570
 1571        if (controller.View.Transform.parent == view.leftWindowContainer) return;
 572
 1573        controller.View.Transform.SetParent(view.leftWindowContainer, false);
 1574        notificationViewerTransform?.SetAsLastSibling();
 1575        topNotificationViewerTransform?.SetAsFirstSibling();
 1576        experiencesViewerTransform?.SetAsLastSibling();
 577
 1578        publicChatWindow = controller;
 579
 1580        controller.OnClosed += ToggleOffChatIcon;
 1581    }
 582
 583    private void HandlePublicChannelPreviewModeChanged(bool isPreviewMode)
 584    {
 0585        if (!publicChatWindow.View.IsActive) return;
 586
 0587        if (isPreviewMode)
 0588            view.ToggleOff(TaskbarHUDView.TaskbarButtonType.Chat);
 589        else
 0590            view.ToggleOn(TaskbarHUDView.TaskbarButtonType.Chat);
 0591    }
 592
 593    private void HandleChannelPreviewModeChanged(bool isPreviewMode)
 594    {
 0595        if (!channelChatWindow.View.IsActive) return;
 596
 0597        if (isPreviewMode)
 0598            view.ToggleOff(TaskbarHUDView.TaskbarButtonType.Chat);
 599        else
 0600            view.ToggleOn(TaskbarHUDView.TaskbarButtonType.Chat);
 0601    }
 602
 603    private void HandlePrivateChannelPreviewMode(bool isPreviewMode)
 604    {
 0605        if (!privateChatWindow.View.IsActive) return;
 606
 0607        if (isPreviewMode)
 0608            view.ToggleOff(TaskbarHUDView.TaskbarButtonType.Chat);
 609        else
 0610            view.ToggleOn(TaskbarHUDView.TaskbarButtonType.Chat);
 0611    }
 612
 613    public void AddFriendsWindow(FriendsHUDController controller)
 614    {
 3615        if (controller?.View == null)
 616        {
 0617            Debug.LogWarning("AddFriendsWindow >>> Friends window doesn't exist yet!");
 0618            return;
 619        }
 620
 3621        if (controller.View.Transform.parent == view.leftWindowContainer)
 0622            return;
 623
 3624        controller.View.Transform.SetParent(view.leftWindowContainer, false);
 3625        notificationViewerTransform?.SetAsLastSibling();
 3626        topNotificationViewerTransform?.SetAsFirstSibling();
 3627        experiencesViewerTransform?.SetAsLastSibling();
 628
 3629        friendsHud = controller;
 630
 3631        if (isFriendsFeatureEnabled)
 0632            view.ShowFriendsButton();
 633        else
 3634            view.HideFriendsButton();
 635
 3636        friendsHud.OnViewClosed += () =>
 637        {
 0638            view.ToggleOff(TaskbarHUDView.TaskbarButtonType.Friends);
 0639            ToggleOffChatIcon();
 0640        };
 3641    }
 642
 643    public void AddVoiceChatWindow(VoiceChatWindowController controller)
 644    {
 1645        if (controller?.VoiceChatWindowView == null)
 646        {
 1647            Debug.LogWarning("AddVoiceChatWindow >>> Voice Chat window doesn't exist yet!");
 1648            return;
 649        }
 650
 0651        if (controller.VoiceChatWindowView.Transform.parent == view.leftWindowContainer)
 0652            return;
 653
 0654        controller.VoiceChatWindowView.Transform.SetParent(view.leftWindowContainer, false);
 655
 0656        voiceChatHud = controller;
 0657        view.ShowVoiceChatButton();
 0658        voiceChatHud.OnCloseView += () => view.ToggleOff(TaskbarHUDView.TaskbarButtonType.VoiceChat);
 659
 0660        if (controller?.VoiceChatBarView != null)
 661        {
 0662            controller.VoiceChatBarView.Transform.SetParent(view.altSectionContainer, false);
 0663            controller.VoiceChatBarView.Transform.SetAsFirstSibling();
 664        }
 0665    }
 666
 667    private void InitializeEmotesSelector(bool current, bool previous)
 668    {
 8669        if (!current) return;
 0670        view.ShowEmotesButton();
 0671    }
 672
 673    private void IsEmotesVisibleChanged(bool current, bool previous) =>
 0674        HandleEmotesToggle(current);
 675
 676    private void InitializeExperiencesViewer(Transform currentViewTransform, Transform previousViewTransform)
 677    {
 4678        if (currentViewTransform == null)
 4679            return;
 680
 0681        experiencesViewerTransform = currentViewTransform;
 0682        experiencesViewerTransform.SetParent(view.leftWindowContainer, false);
 0683        experiencesViewerTransform.SetAsLastSibling();
 684
 0685        view.ShowExperiencesButton();
 0686    }
 687
 688    private void InitializeNotificationPanel(Transform currentPanelTransform, Transform previousPanelTransform)
 689    {
 4690        if (currentPanelTransform == null)
 4691            return;
 692
 0693        notificationViewerTransform = currentPanelTransform;
 0694        notificationViewerTransform.SetParent(view.leftWindowContainer, false);
 0695        notificationViewerTransform.SetAsLastSibling();
 0696        experiencesViewerTransform.SetAsLastSibling();
 0697    }
 698
 699    private void InitializeTopNotificationPanel(Transform currentPanelTransform, Transform previousPanelTransform)
 700    {
 4701        if (currentPanelTransform == null)
 4702            return;
 703
 0704        topNotificationViewerTransform = currentPanelTransform;
 0705        topNotificationViewerTransform.SetParent(view.leftWindowContainer, false);
 0706        topNotificationViewerTransform.SetAsFirstSibling();
 0707    }
 708
 709    private void OpenClickedChat(string chatId, string previous)
 710    {
 711        const string NEARBY_CHANNEL_ID = "nearby";
 712        const string CONVERSATION_LIST_ID = "conversationList";
 713
 0714        if (chatId == NEARBY_CHANNEL_ID)
 0715            OpenPublicChat(NEARBY_CHANNEL_ID, true);
 0716        else if (chatController.GetAllocatedChannel(chatId) != null)
 717        {
 0718            if (chatController.GetAllocatedChannel(chatId).Joined)
 0719                OpenChannelChat(chatId);
 720            else
 0721                return;
 722        }
 0723        else if (chatId == CONVERSATION_LIST_ID)
 0724            OpenChatList();
 725        else
 726        {
 727            async UniTaskVoid OpenPrivateChatAsync(string chatId, CancellationToken cancellationToken = default)
 728            {
 0729                var friendshipStatus = await friendsController.GetFriendshipStatus(chatId, cancellationToken);
 730
 0731                if (friendshipStatus == FriendshipStatus.FRIEND)
 0732                    OpenPrivateChat(chatId);
 0733            }
 734
 0735            openPrivateChatCancellationToken.Cancel();
 0736            openPrivateChatCancellationToken.Dispose();
 0737            openPrivateChatCancellationToken = new CancellationTokenSource();
 0738            OpenPrivateChatAsync(chatId, openPrivateChatCancellationToken.Token).Forget();
 739        }
 0740    }
 741
 742    private void IsExperiencesViewerOpenChanged(bool current, bool previous)
 743    {
 0744        if (current)
 0745            return;
 746
 0747        view.ToggleOff(TaskbarHUDView.TaskbarButtonType.Experiences);
 0748        ToggleOffChatIcon();
 0749    }
 750
 751    private void NumOfLoadedExperiencesChanged(int current, int previous)
 752    {
 4753        view.SetExperiencesVisibility(current > 0);
 754
 4755        if (current == 0)
 4756            isExperiencesViewerOpen.Set(false);
 4757    }
 758
 759    public void DisableFriendsWindow()
 760    {
 0761        view.friendsButton.transform.parent.gameObject.SetActive(false);
 0762    }
 763
 764    public void Dispose()
 765    {
 4766        if (view != null)
 767        {
 4768            view.OnChatToggle -= HandleChatToggle;
 4769            view.OnFriendsToggle -= HandleFriendsToggle;
 4770            view.OnEmotesToggle -= HandleEmotesToggle;
 4771            view.OnExperiencesToggle -= HandleExperiencesToggle;
 4772            view.OnVoiceChatToggle -= HandleVoiceChatToggle;
 773
 4774            view.Destroy();
 775        }
 776
 4777        if (mouseCatcher != null)
 778        {
 0779            mouseCatcher.OnMouseLock -= MouseCatcher_OnMouseLock;
 0780            mouseCatcher.OnMouseUnlock -= MouseCatcher_OnMouseUnlock;
 781        }
 782
 4783        if (toggleFriendsTrigger != null)
 4784            toggleFriendsTrigger.OnTriggered -= ToggleFriendsTrigger_OnTriggered;
 785
 4786        if (closeWindowTrigger != null)
 4787            closeWindowTrigger.OnTriggered -= CloseWindowTrigger_OnTriggered;
 788
 4789        if (toggleWorldChatTrigger != null)
 4790            toggleWorldChatTrigger.OnTriggered -= ToggleWorldChatTrigger_OnTriggered;
 791
 4792        isEmotesWheelInitialized.OnChange -= InitializeEmotesSelector;
 4793        isEmotesVisible.OnChange -= IsEmotesVisibleChanged;
 4794        isExperiencesViewerOpen.OnChange -= IsExperiencesViewerOpenChanged;
 4795        isExperiencesViewerInitialized.OnChange -= InitializeExperiencesViewer;
 4796        numOfLoadedExperiences.OnChange -= NumOfLoadedExperiencesChanged;
 797
 4798        openPrivateChatCancellationToken.Cancel();
 4799        openPrivateChatCancellationToken.Dispose();
 4800    }
 801
 802    private void SetVisibility(bool visible, bool previus)
 803    {
 0804        SetVisibility(visible);
 0805    }
 806
 807    public void SetVisibility(bool visible)
 808    {
 1809        view.SetVisibility(visible);
 1810    }
 811
 812    public void GoBackFromChat()
 813    {
 0814        if (chatBackWindow == friendsHud)
 0815            OpenFriendsWindow();
 816        else
 0817            OpenChatList();
 0818    }
 819
 820    public void AddChatChannel(ChatChannelHUDController controller)
 821    {
 0822        if (controller?.View == null)
 823        {
 0824            Debug.LogWarning("AddChatChannel >>> Chat Window doesn't exist yet!");
 0825            return;
 826        }
 827
 0828        if (controller.View.Transform.parent == view.leftWindowContainer) return;
 829
 0830        controller.View.Transform.SetParent(view.leftWindowContainer, false);
 0831        experiencesViewerTransform?.SetAsLastSibling();
 832
 0833        channelChatWindow = controller;
 834
 0835        controller.OnClosed += ToggleOffChatIcon;
 0836        controller.OnOpenChannelLeave += OpenChannelLeaveConfirmation;
 0837    }
 838
 839    public void AddChannelSearch(SearchChannelsWindowController controller)
 840    {
 1841        if (controller.View.Transform.parent == view.leftWindowContainer) return;
 842
 1843        controller.View.Transform.SetParent(view.leftWindowContainer, false);
 1844        experiencesViewerTransform?.SetAsLastSibling();
 845
 1846        searchChannelsHud = controller;
 847
 1848        controller.OnClosed += () =>
 849        {
 0850            controller.SetVisibility(false);
 0851            ToggleOffChatIcon();
 0852        };
 853
 1854        controller.OnBack += GoBackFromChat;
 1855        controller.OnOpenChannelCreation += OpenChannelCreation;
 1856        controller.OnOpenChannelLeave += OpenChannelLeaveConfirmation;
 1857    }
 858
 859    public void AddChannelCreation(CreateChannelWindowController controller)
 860    {
 0861        if (controller.View.Transform.parent == view.fullScreenWindowContainer) return;
 862
 0863        controller.View.Transform.SetParent(view.fullScreenWindowContainer, false);
 0864        experiencesViewerTransform?.SetAsLastSibling();
 865
 0866        channelCreationWindow = controller;
 867
 0868        controller.OnNavigateToChannelWindow += channelId =>
 869        {
 0870            OpenChannelChat(channelId);
 0871            channelCreationWindow.SetVisibility(false);
 0872        };
 0873    }
 874
 875    private void OpenChannelCreation()
 876    {
 0877        channelCreationWindow.SetVisibility(true);
 0878    }
 879
 880    public void AddChannelLeaveConfirmation(LeaveChannelConfirmationWindowController controller)
 881    {
 0882        if (controller.View.Transform.parent == view.fullScreenWindowContainer) return;
 883
 0884        controller.View.Transform.SetParent(view.fullScreenWindowContainer, false);
 0885        channelLeaveWindow = controller;
 0886    }
 887
 888    private void OpenChannelLeaveConfirmation(string channelId)
 889    {
 0890        channelLeaveWindow.SetChannelToLeave(channelId);
 0891        channelLeaveWindow.SetVisibility(true);
 0892    }
 893
 894    public void OpenChannelSearch()
 895    {
 0896        privateChatWindow.SetVisibility(false);
 0897        publicChatWindow.SetVisibility(false);
 0898        channelChatWindow.SetVisibility(false);
 0899        searchChannelsHud.SetVisibility(true);
 0900        friendsHud?.SetVisibility(false);
 0901        isExperiencesViewerOpen.Set(false);
 0902        isEmotesVisible.Set(false);
 0903        voiceChatHud?.SetVisibility(false);
 0904        worldChatWindowHud.SetVisibility(false);
 0905        view.ToggleOn(TaskbarHUDView.TaskbarButtonType.Chat);
 0906    }
 907}

Methods/Properties

TaskbarHUDController(IChatController, DCL.Social.Friends.IFriendsController)
isFriendsFeatureEnabled()
socialTooltipReference()
isEmotesWheelInitialized()
isEmotesVisible()
emoteJustTriggeredFromShortcut()
isExperiencesViewerInitialized()
notificationPanelTransform()
topNotificationPanelTransform()
isExperiencesViewerOpen()
numOfLoadedExperiences()
openPrivateChat()
openedChat()
openChat()
isPromoteChannelsToastVisible()
CreateView()
Initialize(DCL.IMouseCatcher)
HandleFriendsToggle(System.Boolean)
HandleEmotesToggle(System.Boolean)
ShowEmotes()
HandleExperiencesToggle(System.Boolean)
HandleVoiceChatToggle(System.Boolean)
ShowExperiences()
ToggleFriendsTrigger_OnTriggered(DCLAction_Trigger)
ToggleWorldChatTrigger_OnTriggered(DCLAction_Trigger)
CloseWindowTrigger_OnTriggered(DCLAction_Trigger)
HandleChatToggle(System.Boolean)
MouseCatcher_OnMouseUnlock()
MouseCatcher_OnMouseLock()
AddWorldChatWindow(WorldChatWindowController)
ToggleOffChatIcon()
OpenFriendsWindow()
CloseFriendsWindow()
OpenPrivateChatFromPassport(System.String, System.String)
OpenPrivateChat(System.String)
OpenLastActiveChatWindow(IHUD)
OpenWorldChatWindow()
CloseAnyChatWindow()
OpenChannelChat(System.String)
OpenPublicChat(System.String, System.Boolean)
OpenChatList()
CloseChatList()
OpenVoiceChatWindow()
CloseVoiceChatWindow()
AddPrivateChatWindow(PrivateChatWindowController)
AddPublicChatChannel(DCL.Chat.HUD.PublicChatWindowController)
HandlePublicChannelPreviewModeChanged(System.Boolean)
HandleChannelPreviewModeChanged(System.Boolean)
HandlePrivateChannelPreviewMode(System.Boolean)
AddFriendsWindow(DCL.Social.Friends.FriendsHUDController)
AddVoiceChatWindow(VoiceChatWindowController)
InitializeEmotesSelector(System.Boolean, System.Boolean)
IsEmotesVisibleChanged(System.Boolean, System.Boolean)
InitializeExperiencesViewer(UnityEngine.Transform, UnityEngine.Transform)
InitializeNotificationPanel(UnityEngine.Transform, UnityEngine.Transform)
InitializeTopNotificationPanel(UnityEngine.Transform, UnityEngine.Transform)
OpenClickedChat(System.String, System.String)
<OpenClickedChat()
IsExperiencesViewerOpenChanged(System.Boolean, System.Boolean)
NumOfLoadedExperiencesChanged(System.Int32, System.Int32)
DisableFriendsWindow()
Dispose()
SetVisibility(System.Boolean, System.Boolean)
SetVisibility(System.Boolean)
GoBackFromChat()
AddChatChannel(DCL.Chat.HUD.ChatChannelHUDController)
AddChannelSearch(DCL.Chat.HUD.SearchChannelsWindowController)
AddChannelCreation(DCL.Chat.HUD.CreateChannelWindowController)
OpenChannelCreation()
AddChannelLeaveConfirmation(DCL.Chat.HUD.LeaveChannelConfirmationWindowController)
OpenChannelLeaveConfirmation(System.String)
OpenChannelSearch()