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); } }