A game about forced loneliness, made by TACStudios
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}