From 60b85960ff2b54a3329c76ce97485591c04176af Mon Sep 17 00:00:00 2001 From: max Date: Fri, 12 Jul 2024 19:09:59 +0200 Subject: [PATCH] EditorGui setup --- Nerfed.Editor/Editor/EditorGui.cs | 45 +++++++++++++++++++++++++++-- Nerfed.Editor/Program.cs | 6 +++- Nerfed.Runtime/Gui/GuiController.cs | 12 +++++--- 3 files changed, 56 insertions(+), 7 deletions(-) diff --git a/Nerfed.Editor/Editor/EditorGui.cs b/Nerfed.Editor/Editor/EditorGui.cs index 8a9f6a9..cb14a5d 100644 --- a/Nerfed.Editor/Editor/EditorGui.cs +++ b/Nerfed.Editor/Editor/EditorGui.cs @@ -1,30 +1,71 @@ -namespace Nerfed.Editor.Editor +using ImGuiNET; +using Nerfed.Runtime; +using Nerfed.Runtime.Graphics; +using Nerfed.Runtime.Gui; + +namespace Nerfed.Editor { internal static class EditorGui { + private static GuiController guiController; + internal static void Initialize() { // Create GuiController. - + guiController = new GuiController(Engine.GraphicsDevice, Engine.MainWindow, Color.DimGray); // Subscribe to GUI update. // GuiController.OnGui call => UpdateDock; // GuiController.OnGui call => UpdateEditorWindows; // GuiController.OnGui call => ...; + guiController.OnGui += HandleOnGui; } internal static void Update() { // Update GuiController. + guiController.Update(Engine.Timestep.TotalSeconds); } internal static void Render() { // Reneder GuiController. + guiController.Render(); + } + + internal static void Quit() + { + guiController.Dispose(); } private static void UpdateDock() { // Setup default dockspace for the main window. + uint id = ImGui.GetID("MainDockSpace"); + ImGui.DockSpaceOverViewport(id, ImGui.GetMainViewport(), ImGuiDockNodeFlags.None); + } + + private static void UpdateMainMenu() + { + if (ImGui.BeginMainMenuBar()) + { + if (ImGui.BeginMenu("File")) + { + if (ImGui.MenuItem("Exit")) + { + Engine.Quit(); + } + ImGui.EndMenu(); + } + ImGui.EndMainMenuBar(); + } + } + + private static void HandleOnGui() + { + UpdateMainMenu(); + UpdateDock(); + + ImGui.ShowDemoWindow(); } } } \ No newline at end of file diff --git a/Nerfed.Editor/Program.cs b/Nerfed.Editor/Program.cs index 92bbbc8..6b21d4a 100644 --- a/Nerfed.Editor/Program.cs +++ b/Nerfed.Editor/Program.cs @@ -18,21 +18,25 @@ private static void HandleOnInitialize() { // Open project. // Setip EditorGui. + EditorGui.Initialize(); } private static void HandleOnUpdate() { // Editor Update. + EditorGui.Update(); + // Try Catch UserCode Update. } private static void HandleOnRender() { - // Editor GUI Render. + EditorGui.Render(); } private static void HandleOnQuit() { + EditorGui.Quit(); } } \ No newline at end of file diff --git a/Nerfed.Runtime/Gui/GuiController.cs b/Nerfed.Runtime/Gui/GuiController.cs index f560b45..3db9cdd 100644 --- a/Nerfed.Runtime/Gui/GuiController.cs +++ b/Nerfed.Runtime/Gui/GuiController.cs @@ -9,7 +9,7 @@ namespace Nerfed.Runtime.Gui; -internal class GuiController : IDisposable +public class GuiController : IDisposable { public event Action OnGui; @@ -144,9 +144,13 @@ public GuiController(GraphicsDevice graphicsDevice, Window mainWindow, Color cle io.BackendFlags |= ImGuiBackendFlags.HasSetMousePos; io.BackendFlags |= ImGuiBackendFlags.PlatformHasViewports; io.BackendFlags |= ImGuiBackendFlags.RendererHasViewports; + + UpdatePerFrameImGuiData(1.0 / 60.0); + ImGui.NewFrame(); + frameBegun = true; } - public void Update(float deltaTime) + public void Update(double deltaTime) { if (frameBegun) { @@ -167,12 +171,12 @@ public void Update(float deltaTime) ImGui.EndFrame(); } - private void UpdatePerFrameImGuiData(float deltaSeconds) + private void UpdatePerFrameImGuiData(double deltaSeconds) { ImGuiIOPtr io = ImGui.GetIO(); io.DisplaySize = new Vector2(mainWindow.Width, mainWindow.Height); io.DisplayFramebufferScale = new Vector2(1, 1); - io.DeltaTime = deltaSeconds; // DeltaTime is in seconds. + io.DeltaTime = (float)deltaSeconds; // DeltaTime is in seconds. } private void UpdateInput()