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)
89 DemoWindow.Draw(gui, ref isDemoOpen);
91 ModListWindow.Draw(gui, IsOpen);
99 private void DrawRootMenuBar()
103 if (gui.BeginMenu(
"General"))
105 gui.Menu(
"Open mod list", ref ModListWindow.isOpen);
107 if (EnableDemoWindow.Value)
108 gui.Menu(
"Open demo menu", ref isDemoOpen);
112 gui.Menu(
"Open changelog", ref ChangeLogWindow.isOpen);
116 if (gui.Menu(
"Close menu"))
124 if (gui.BeginMenu(
"Windows"))
126 if (gui.Menu(
"Close all windows"))
128 ModListWindow.isOpen =
false;
129 ModListWindow.CloseConfigWindows();
140 private void DrawAPIWindows()
142 foreach (var API
in WKLibAPI.internalAPIs)
147 foreach (var window
in API.Windows)
152 window.Draw(gui, IsOpen);
157 private void HandleAPIInput()
159 foreach (var API
in WKLibAPI.internalAPIs)
164 foreach (var window
in API.Windows)
169 window.HandleInput(gui);
174 private void CloseAPIWindows()
176 foreach (var API
in WKLibAPI.internalAPIs)
181 foreach (var window
in API.Windows)
186 window.isOpen =
false;