A game about forced loneliness, made by TACStudios
at master 104 lines 3.6 kB view raw
1using System; 2using System.Collections.Generic; 3using UnityEngine.Rendering.RenderGraphModule; 4 5namespace UnityEngine.Rendering 6{ 7 /// <summary> 8 /// The UI implementation for a debug settings panel 9 /// </summary> 10 public class DebugDisplaySettingsUI : IDebugData 11 { 12 private IEnumerable<IDebugDisplaySettingsPanelDisposable> m_DisposablePanels; 13 private IDebugDisplaySettings m_Settings; 14 15 private void Reset() 16 { 17 if (m_Settings != null) 18 { 19 m_Settings.Reset(); 20 21 // TODO: Tear the UI down and re-create it for now - this is horrible, so reset it instead. 22 UnregisterDebug(); 23 RegisterDebug(m_Settings); 24 DebugManager.instance.RefreshEditor(); 25 } 26 } 27 28 /// <summary> 29 /// Register a display for the UI 30 /// </summary> 31 /// <param name="settings"><see cref="IDebugDisplaySettings"/> to be registered</param> 32 public void RegisterDebug(IDebugDisplaySettings settings) 33 { 34 DebugManager debugManager = DebugManager.instance; 35 List<IDebugDisplaySettingsPanelDisposable> panels = new List<IDebugDisplaySettingsPanelDisposable>(); 36 37 debugManager.RegisterData(this); 38 39 m_Settings = settings; 40 m_DisposablePanels = panels; 41 42 m_Settings.Add(new DebugDisplaySettingsRenderGraph()); 43 44 Action<IDebugDisplaySettingsData> onExecute = (data) => 45 { 46 IDebugDisplaySettingsPanelDisposable disposableSettingsPanel = data.CreatePanel(); 47 48 DebugUI.Widget[] panelWidgets = disposableSettingsPanel.Widgets; 49 50 DebugUI.Panel panel = debugManager.GetPanel( 51 displayName: disposableSettingsPanel.PanelName, 52 createIfNull: true, 53 groupIndex: (disposableSettingsPanel is DebugDisplaySettingsPanel debugDisplaySettingsPanel) ? debugDisplaySettingsPanel.Order : 0); 54 55 ObservableList<DebugUI.Widget> panelChildren = panel.children; 56 57 panel.flags = disposableSettingsPanel.Flags; 58 panels.Add(disposableSettingsPanel); 59 panelChildren.Add(panelWidgets); 60 }; 61 62 m_Settings.ForEach(onExecute); 63 } 64 65 /// <summary> 66 /// Unregister the debug panels 67 /// </summary> 68 public void UnregisterDebug() 69 { 70 DebugManager debugManager = DebugManager.instance; 71 72 if (m_DisposablePanels != null) 73 { 74 foreach (IDebugDisplaySettingsPanelDisposable disposableSettingsPanel in m_DisposablePanels) 75 { 76 DebugUI.Widget[] panelWidgets = disposableSettingsPanel.Widgets; 77 string panelId = disposableSettingsPanel.PanelName; 78 DebugUI.Panel panel = debugManager.GetPanel(panelId, true); 79 ObservableList<DebugUI.Widget> panelChildren = panel.children; 80 81 disposableSettingsPanel.Dispose(); 82 panelChildren.Remove(panelWidgets); 83 } 84 85 m_DisposablePanels = null; 86 } 87 88 debugManager.UnregisterData(this); 89 } 90 91 #region IDebugData 92 93 /// <summary> 94 /// The reset action to be executed when a Reset of the rendering debugger is need 95 /// </summary> 96 /// <returns>A <see cref="Action"/> with the restet callback</returns> 97 public Action GetReset() 98 { 99 return Reset; 100 } 101 102 #endregion 103 } 104}