From fab0f999515ccf06487f68dd0d58e2a9d6dfa2d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20L=C3=BCbe=C3=9F?= Date: Tue, 28 Sep 2021 21:56:51 +0200 Subject: [PATCH] Added guizmo Translation is broken for some reason --- .../src/EditWindows/SceneViewportWindow.bf | 42 ++++++++++++++++++- GlitchyEditor/src/Editor.bf | 2 +- GlitchyEditor/src/EditorLayer.bf | 10 ++--- GlitchyEngine/src/ImGui/ImGuiLayer.bf | 2 + 4 files changed, 49 insertions(+), 7 deletions(-) diff --git a/GlitchyEditor/src/EditWindows/SceneViewportWindow.bf b/GlitchyEditor/src/EditWindows/SceneViewportWindow.bf index d2da850..6caadb6 100644 --- a/GlitchyEditor/src/EditWindows/SceneViewportWindow.bf +++ b/GlitchyEditor/src/EditWindows/SceneViewportWindow.bf @@ -3,11 +3,16 @@ using ImGui; using GlitchyEngine.Renderer; using GlitchyEngine.Math; using GlitchyEngine; +using GlitchyEngine.World; +using ImGuizmo; namespace GlitchyEditor.EditWindows { class SceneViewportWindow { + private Editor _editor; + public Camera _camera; + public const String s_WindowTitle = "Scene"; private bool _open = true; @@ -41,8 +46,9 @@ namespace GlitchyEditor.EditWindows } } - public this() + public this(Editor editor) { + _editor = editor; } private ImGui.Vec2 oldViewportSize; @@ -76,6 +82,40 @@ namespace GlitchyEditor.EditWindows { ImGui.Image(_renderTarget, viewportSize); } + + if(_editor.SelectedEntities.Count > 0) + { + ImGuizmo.SetDrawlist(); + + var entity = _editor.SelectedEntities.Back; + + var transformCmp = _editor.World.GetComponent(entity); + + var transform = transformCmp.LocalTransform; + + var view = _camera.View; + var projection = _camera.Projection; + + var v = ImGui.GetWindowPos(); + var cntMin = ImGui.GetWindowContentRegionMin(); + + v.x += cntMin.x; + v.y += cntMin.y; + + ImGuizmo.SetRect(v.x, v.y, viewportSize.x, viewportSize.y); + + Color c = .(0,0,0,255); + + //ImGuizmo.DrawCubes((.)&view, (.)&projection, (.)&transform, 1); + ImGuizmo.Manipulate((.)&view, (.)&projection, .TRANSLATE, .LOCAL, (.)&transform); + + Matrix mat = .Identity; + + ImGuizmo.DrawGrid((.)&view, (.)&projection, (.)&mat, 10); + + transformCmp.LocalTransform = transform; + //ImGuizmo.ViewManipulate((.)&view, , .TRANSLATE, .LOCAL, (.)&transform); + } ImGui.End(); diff --git a/GlitchyEditor/src/Editor.bf b/GlitchyEditor/src/Editor.bf index 5cd49d7..8c07677 100644 --- a/GlitchyEditor/src/Editor.bf +++ b/GlitchyEditor/src/Editor.bf @@ -13,7 +13,7 @@ namespace GlitchyEditor private EntityHierarchyWindow _entityHierarchyWindow = new .(this) ~ delete _; private ComponentEditWindow _componentEditWindow = new .(this) ~ delete _; - private SceneViewportWindow _sceneViewportWindow = new .() ~ delete _; + private SceneViewportWindow _sceneViewportWindow = new .(this) ~ delete _; private List _selectedEntities = new .() ~ delete _; diff --git a/GlitchyEditor/src/EditorLayer.bf b/GlitchyEditor/src/EditorLayer.bf index 0cae339..b46cf83 100644 --- a/GlitchyEditor/src/EditorLayer.bf +++ b/GlitchyEditor/src/EditorLayer.bf @@ -1,13 +1,12 @@ -using GlitchyEditor.EditWindows; +using System; +using ImGui; using GlitchyEngine; +using GlitchyEditor.EditWindows; using GlitchyEngine.Events; using GlitchyEngine.ImGui; using GlitchyEngine.Math; using GlitchyEngine.Renderer; using GlitchyEngine.World; -using ImGui; -using System; -using GlitchyEngine.Renderer.Text; namespace GlitchyEditor { @@ -88,9 +87,10 @@ namespace GlitchyEditor Application.Get().Window.Context.SwapChain.BackbufferViewport.Height); _cameraController.CameraPosition = .(0, 0, -5); _cameraController.TranslationSpeed = 10; - _editor.[Friend]CreateEntityWithTransform(); + + _editor.SceneViewportWindow._camera = _cameraController.Camera; } public override void Update(GameTime gameTime) diff --git a/GlitchyEngine/src/ImGui/ImGuiLayer.bf b/GlitchyEngine/src/ImGui/ImGuiLayer.bf index 4934783..a39bd44 100644 --- a/GlitchyEngine/src/ImGui/ImGuiLayer.bf +++ b/GlitchyEngine/src/ImGui/ImGuiLayer.bf @@ -1,6 +1,7 @@ using System; using ImGui; using GlitchyEngine.Events; +using ImGuizmo; using internal ImGui; @@ -184,6 +185,7 @@ namespace GlitchyEngine.ImGui ImGuiImplDX11.NewFrame(); ImGuiImplWin32.NewFrame(); ImGui.NewFrame(); + ImGuizmo.BeginFrame(); } bool showDemo = true;