public static void RegisterTab(IHudTab tab, int index = 0)
        {
            if (s_HUDTabs.ContainsKey(index))
            {
                Debug.LogWarning($"HUDPanel already contains a tab registered at index {index}! Registering at index {s_HUDTabs.Count} instead.");
                index = s_HUDTabs.Count;
            }

            s_HUDTabs.Add(index, tab);
        }
        void OnGUI()
        {
            if (!isEnabled)
            {
                return;
            }

            // Initialize main HUD
            GUILayout.BeginVertical(GUI.skin.box, GUILayout.Width(300));

            foreach (Action element in s_HeaderContents.Values)
            {
                element();
            }

            GUILayout.BeginHorizontal();

            foreach (IHudTab tab in s_HUDTabs.Values)
            {
                var wasSelected = tab == m_SelectedTab;
                var selected    = GUILayout.Toggle(wasSelected, tab.Label, GUI.skin.button);
                if (selected != wasSelected)
                {
                    if (m_SelectedTab != null)
                    {
                        m_SelectedTab.OnDeselected();
                    }

                    m_SelectedTab = selected ? tab : null;

                    if (m_SelectedTab != null)
                    {
                        m_SelectedTab.OnSelected();
                    }
                }
            }

            GUILayout.EndHorizontal();

            if (m_SelectedTab != null)
            {
                m_SelectedTab.OnGUI(this);
            }

            GUILayout.EndVertical();

            // Draggable windows
            var current = Event.current;

            if (current.type == EventType.MouseDown)
            {
                for (var Idx = s_ActiveWindows.Count - 1; Idx >= 0; --Idx)
                {
                    var window = s_ActiveWindows[Idx];
                    if (s_ActiveWindows[Idx].TryDragWindow(current))
                    {
                        m_DraggingWindow = s_ActiveWindows[Idx];
                        break;
                    }
                }
            }
            else if (current.type == EventType.MouseDrag && m_DraggingWindow != null)
            {
                m_DraggingWindow.UpdateDragWindow(current);
            }
            else if (current.type == EventType.MouseUp && m_DraggingWindow != null)
            {
                m_DraggingWindow.EndDragWindow();
                m_DraggingWindow = null;
            }

            foreach (var window in s_ActiveWindows)
            {
                window.DrawWindow(this);
            }
        }