6using UnityEngine.SceneManagement;
17[DefaultExecutionOrder(-999)]
18internal class RootPanel : MonoSingleton<RootPanel>
20 public ImGui gui =
null;
21 public ImuiPanel ImuiPanel =
null;
23 public ThemeController ThemeController =
null;
24 public OverlayState OverlayState =
null;
28 get => OverlayState.IsOpen;
29 set => OverlayState.IsOpen = value;
32 private bool isDemoOpen =
false;
34 public override void OnEnable()
36 void OnSceneChange(Scene scene, LoadSceneMode loadSceneMode)
38 if (AutoCloseOverlay.Value)
44 SceneManager.sceneLoaded -= OnSceneChange;
45 SceneManager.sceneLoaded += OnSceneChange;
47 ImuiPanel.Canvas.hideFlags = HideFlags.HideAndDontSave;
48 DontDestroyOnLoad(ImuiPanel.Canvas);
50 var backend = transform.GetComponent<ImuiUnityGUIBackend>();
52 gui =
new ImGui(backend, backend);
54 OverlayState = gameObject.GetComponent<OverlayState>();
55 if (OverlayState ==
null)
56 OverlayState = gameObject.AddComponent<OverlayState>();
58 ThemeController = gameObject.GetComponent<ThemeController>();
59 if (ThemeController ==
null)
60 ThemeController = gameObject.AddComponent<ThemeController>();
62 ThemeController.SetTheme(gui);
63 ModListWindow.Initialize();
68 ThemeController.DetectChanges(gui);
79 OverlayState.Draw(gui);
86 ChangeLogWindow.Draw(gui, IsOpen);
87 if (EnableDemoWindow.Value)
91 ModListWindow.Draw(gui, IsOpen);
98 gui.ResetActiveControl();
105 private void DrawRootMenuBar()
109 if (gui.BeginMenu(
"General"))
111 gui.Menu(
"Open mod list", ref ModListWindow.isOpen);
113 if (EnableDemoWindow.Value)
114 gui.Menu(
"Open demo menu", ref isDemoOpen);
118 gui.Menu(
"Open changelog", ref ChangeLogWindow.isOpen);
122 if (gui.Menu(
"Close menu"))
130 if (gui.BeginMenu(
"Windows"))
132 if (gui.Menu(
"Close all windows"))
134 ModListWindow.isOpen =
false;
135 ModListWindow.CloseConfigWindows();
146 private void DrawAPIWindows()
148 foreach (var API
in WKLibAPI.internalAPIs)
153 foreach (var window
in API.Windows)
158 window.Draw(gui, IsOpen);
163 private void HandleAPIInput()
165 foreach (var API
in WKLibAPI.internalAPIs)
170 foreach (var window
in API.Windows)
175 window.HandleInput(gui);
180 private void CloseAPIWindows()
182 foreach (var API
in WKLibAPI.internalAPIs)
187 foreach (var window
in API.Windows)
192 window.isOpen =
false;
static void Draw(ImGui gui, ref bool open)