From 0e7913d3de04aaf25cc37cb350ee1a69be9dfd2b Mon Sep 17 00:00:00 2001 From: OusmBlueNinja <89956790+OusmBlueNinja@users.noreply.github.com> Date: Wed, 7 May 2025 23:29:28 -0500 Subject: [PATCH] working on gizmos --- imgui.ini | 32 +++++++++--------- remake/build.log | 3 +- src/src/Engine.cpp | 84 +++++++++++++++++++--------------------------- 3 files changed, 51 insertions(+), 68 deletions(-) diff --git a/imgui.ini b/imgui.ini index a93e1ff..2c1cb08 100644 --- a/imgui.ini +++ b/imgui.ini @@ -10,24 +10,24 @@ Collapsed=1 [Window][WindowOverViewport_11111111] Pos=0,19 -Size=1280,701 +Size=1920,1158 Collapsed=0 [Window][Inspector] -Pos=913,19 -Size=367,202 +Pos=1553,19 +Size=367,659 Collapsed=0 DockId=0x00000018,0 [Window][Scene Tree] Pos=0,19 -Size=335,350 +Size=335,579 Collapsed=0 DockId=0x0000001B,0 [Window][Viewport] Pos=337,19 -Size=574,202 +Size=1214,659 Collapsed=0 DockId=0x00000017,0 @@ -36,14 +36,14 @@ Size=1280,19 Collapsed=0 [Window][Performance Info] -Pos=1106,223 -Size=174,268 +Pos=1628,680 +Size=292,268 Collapsed=0 DockId=0x00000019,0 [Window][Console] -Pos=337,223 -Size=736,497 +Pos=337,680 +Size=1238,497 Collapsed=0 DockId=0x00000013,0 @@ -78,8 +78,8 @@ Collapsed=0 DockId=0x00000015,1 [Window][Color Correction] -Pos=1106,493 -Size=174,227 +Pos=1628,950 +Size=292,227 Collapsed=0 DockId=0x0000001A,0 @@ -113,8 +113,8 @@ Collapsed=0 DockId=0x0000000E,0 [Window][Audio Output] -Pos=1075,223 -Size=29,497 +Pos=1577,680 +Size=49,497 Collapsed=0 DockId=0x00000012,0 @@ -125,8 +125,8 @@ Collapsed=0 DockId=0x0000000D,0 [Window][Resources] -Pos=0,371 -Size=335,349 +Pos=0,600 +Size=335,577 Collapsed=0 DockId=0x00000010,0 @@ -147,7 +147,7 @@ Column 0 Weight=1.0000 Column 1 Width=120 [Docking][Data] -DockSpace ID=0x11111111 Window=0x1BBC0F80 Pos=0,19 Size=1280,701 Split=X +DockSpace ID=0x11111111 Window=0x1BBC0F80 Pos=0,19 Size=1920,1158 Split=X DockNode ID=0x00000005 Parent=0x11111111 SizeRef=989,1158 Split=X DockNode ID=0x00000001 Parent=0x00000005 SizeRef=335,701 Split=Y Selected=0x12EF0F59 DockNode ID=0x00000003 Parent=0x00000001 SizeRef=342,637 Split=Y Selected=0x12EF0F59 diff --git a/remake/build.log b/remake/build.log index e5b45c0..47a53f5 100644 --- a/remake/build.log +++ b/remake/build.log @@ -1,2 +1 @@ -[COMPILE] g++ -std=c++20 -Wall -g -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -Isrc/vendor/xxhash -Isrc/vendor/miniaudio -Isrc/vendor/imguizmo -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\src\Engine.cpp -o src\build\Engine.o -[LINK] g++ src\build\Engine.o src\build\main.o src\build\Renderer.o src\build\Components\AnimationComponent.o src\build\Components\AudioPlayerComponent.o src\build\Components\CameraComponent.o src\build\Components\LightComponent.o src\build\Components\ParticleComponent.o src\build\Components\PhysicsComponent.o src\build\Components\ScriptComponent.o src\build\Components\SpriteComponent.o src\build\Components\TextComonent.o src\build\Components\TilemapComponent.o src\build\core\audio\AudioEngine.o src\build\core\functions\Prefab.o src\build\core\functions\ScenePacker.o src\build\core\scripts\LuaGlobalBridge.o src\build\core\utils\AssetManager.o src\build\core\utils\EngineConfig.o src\build\core\utils\ExceptionHandler.o src\build\core\utils\FileDialog.o src\build\core\utils\input.o src\build\core\utils\LoadingWindow.o src\build\core\utils\Logging.o src\build\core\utils\Popup.o src\build\core\utils\Profiler.o src\build\core\utils\Texture.o src\build\core\utils\utils.o src\build\editor\windows\AssetBrowser.o src\build\editor\windows\AudioInfo.o src\build\editor\windows\Inspector.o src\build\editor\windows\LuaGlobals.o src\build\Entitys\Object.o src\build\utils\GameObjectsList.o src\build\utils\Shader.o src\build\utils\UID.o src\build\lapi.o src\build\lauxlib.o src\build\lbaselib.o src\build\lcode.o src\build\lcorolib.o src\build\lctype.o src\build\ldblib.o src\build\ldebug.o src\build\ldo.o src\build\ldump.o src\build\lfunc.o src\build\lgc.o src\build\linit.o src\build\liolib.o src\build\llex.o src\build\lmathlib.o src\build\lmem.o src\build\loadlib.o src\build\lobject.o src\build\lopcodes.o src\build\loslib.o src\build\lparser.o src\build\lstate.o src\build\lstring.o src\build\lstrlib.o src\build\ltable.o src\build\ltablib.o src\build\ltm.o src\build\lua.o src\build\luac.o src\build\lundump.o src\build\lutf8lib.o src\build\lvm.o src\build\lzio.o src\build\imgui.o src\build\imgui_demo.o src\build\imgui_draw.o src\build\imgui_impl_glfw.o src\build\imgui_impl_opengl3.o src\build\imgui_tables.o src\build\imgui_widgets.o src\build\aabb.o src\build\arena_allocator.o src\build\array.o src\build\bitset.o src\build\body.o src\build\broad_phase.o src\build\constraint_graph.o src\build\contact.o src\build\contact_solver.o src\build\core.o src\build\distance.o src\build\distance_joint.o src\build\dynamic_tree.o src\build\geometry.o src\build\hull.o src\build\id_pool.o src\build\island.o src\build\joint.o src\build\manifold.o src\build\math_functions.o src\build\motor_joint.o src\build\mouse_joint.o src\build\mover.o src\build\prismatic_joint.o src\build\revolute_joint.o src\build\sensor.o src\build\shape.o src\build\solver.o src\build\solver_set.o src\build\table.o src\build\timer.o src\build\types.o src\build\weld_joint.o src\build\wheel_joint.o src\build\world.o src\build\xxhash.o src\build\miniaudio.o src\build\ImGuizmo.o -o src\build\app.exe -LC:\msys64\mingw64\lib -lglfw3 -lglew32 -lopengl32 -lgdi32 -lyaml-cpp -lcomdlg32 -lssl -lcrypto -ldbghelp -lz +[COMPILE] g++ -std=c++20 -Wall -g -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -Isrc/vendor/xxhash -Isrc/vendor/miniaudio -Isrc/vendor/imguizmo -IC:/msys64/mingw64/include -Isrc\vendor\imgui -IC:\msys64\mingw64\lib\libyaml-cpp.a -MMD -MP -c src\src\Engine.cpp -o src\build\Engine.o diff --git a/src/src/Engine.cpp b/src/src/Engine.cpp index f78bb0b..71741d1 100644 --- a/src/src/Engine.cpp +++ b/src/src/Engine.cpp @@ -26,13 +26,11 @@ #include "core/utils/LoadingWindow.h" #include "core/scripts/LuaGlobalBridge.h" - #include "editor/windows/AssetBrowser.h" #include "editor/windows/Inspector.h" #include "editor/windows/AudioInfo.h" #include "editor/windows/LuaGlobals.h" - #include #include #include @@ -435,53 +433,47 @@ void ShowColorCorrectionWindow() ImGui::End(); } -#include - -void DrawGizmoForObject(const std::shared_ptr& obj, const glm::mat4& view, const glm::mat4& projection) +void DrawGizmoForObject(const std::shared_ptr &obj, + const glm::mat4 &view, + const glm::mat4 &projection) { if (!obj) return; - // 1. Build model matrix from position and rotation - glm::mat4 model = glm::translate(glm::mat4(1.0f), glm::vec3(obj->GetLocalPosition(), 0.0f)); - model = glm::rotate(model, obj->GetLocalRotation(), glm::vec3(0.0f, 0.0f, 1.0f)); + // Model matrix at z = 1 to avoid clipping + glm::mat4 model = glm::translate(glm::mat4(1.0f), glm::vec3(obj->GetLocalPosition(), 1.0f)); + model = glm::rotate(model, obj->GetLocalRotation(), glm::vec3(0, 0, 1)); - // 2. Ensure ImGuizmo is configured correctly - ImGuizmo::SetOrthographic(false); + ImGuizmo::SetOrthographic(true); ImGuizmo::SetDrawlist(); + + ImVec2 winPos = ImGui::GetWindowPos(); + ImVec2 winSize = ImGui::GetWindowSize(); + ImGuizmo::SetRect(winPos.x, winPos.y, winSize.x, winSize.y); - // 3. Set ImGuizmo rect to match current window (e.g., your viewport) - ImVec2 pos = ImGui::GetWindowPos(); - ImVec2 size = ImGui::GetWindowSize(); - ImGuizmo::SetRect(pos.x, pos.y, size.x, size.y); - - // 4. Handle mode switching - static ImGuizmo::OPERATION operation = ImGuizmo::TRANSLATE; + static ImGuizmo::OPERATION op = ImGuizmo::TRANSLATE; if (ImGui::IsKeyPressed(ImGuiKey_T)) - operation = ImGuizmo::TRANSLATE; + op = ImGuizmo::TRANSLATE; if (ImGui::IsKeyPressed(ImGuiKey_R)) - operation = ImGuizmo::ROTATE; + op = ImGuizmo::ROTATE; - // 5. Perform manipulation glm::mat4 manipulated = model; ImGuizmo::Manipulate(glm::value_ptr(view), glm::value_ptr(projection), - operation, ImGuizmo::LOCAL, glm::value_ptr(manipulated)); + op, ImGuizmo::LOCAL, glm::value_ptr(manipulated)); - // 6. Apply result to object if actively using gizmo if (ImGuizmo::IsUsing()) { - glm::vec3 translation, rotation, scale; + Logger::LogInfo("adasd"); + glm::vec3 t, r, s; ImGuizmo::DecomposeMatrixToComponents(glm::value_ptr(manipulated), - glm::value_ptr(translation), - glm::value_ptr(rotation), - glm::value_ptr(scale)); - - obj->SetLocalPosition({translation.x, translation.y}); - obj->SetLocalRotation(rotation.z); + glm::value_ptr(t), + glm::value_ptr(r), + glm::value_ptr(s)); + obj->SetLocalPosition({t.x, t.y}); + obj->SetLocalRotation(r.z); } } - void Engine::Init() { @@ -802,7 +794,6 @@ void Engine::Run() ImGui::Checkbox("Audio Viewer", &g_engineConfig.settings.show_audio_window); ImGui::Checkbox("Lua Globals Viewer", &g_engineConfig.settings.show_lua_globals_window); - ImGui::EndMenu(); } @@ -912,8 +903,6 @@ void Engine::Run() editorCameraSavedZoom = cameraZoom; editorCameraWasSaved = true; LuaGlobalBridge::Clear(); - - } else if (!playing && lastPlaying && editorCameraWasSaved) { @@ -921,7 +910,6 @@ void Engine::Run() cameraZoom = editorCameraSavedZoom; editorCameraWasSaved = false; LuaGlobalBridge::Clear(); - } lastPlaying = playing; @@ -1305,7 +1293,7 @@ void Engine::Run() previewType = AssetType::Unknown; selected = finalized; - previousSelection = nullptr; + previousSelection = nullptr; } } else if (previewObj && (!hoveringViewport || !dragging)) @@ -1326,15 +1314,21 @@ void Engine::Run() } } - - glm::mat4 projection = glm::ortho( 0.0f, static_cast(size.x), static_cast(size.y), 0.0f, - -1.0f, 1.0f - ); + -100.0f, 100.0f); - glm::mat4 view = glm::translate(glm::mat4(1.0f), glm::vec3(-cameraPos, 0.0f)); + glm::vec2 screenCenter = glm::vec2(size.x, size.y) * 0.5f; + + glm::mat4 view = glm::mat4(1.0f); + + // Translate to center of screen + view = glm::translate(view, glm::vec3(screenCenter, 0.0f)); + + view = glm::scale(view, glm::vec3(cameraZoom, cameraZoom, 1.0f)); + + view = glm::translate(view, glm::vec3(-cameraPos, 0.0f)); DrawGizmoForObject(selected, view, projection); @@ -1359,9 +1353,7 @@ void Engine::Run() ImGui_ImplOpenGL3_RenderDrawData(ImGui::GetDrawData()); - glfwSwapBuffers(window); - } for (auto &obj : pendingDeletion) @@ -1806,13 +1798,8 @@ void Engine::Shutdown() g_engineConfig.SaveToFile(); - AudioEngine::Shutdown(); - - - - ImGui_ImplOpenGL3_Shutdown(); ImGui_ImplGlfw_Shutdown(); ImGui::DestroyContext(); @@ -1820,7 +1807,4 @@ void Engine::Shutdown() glfwTerminate(); AssetManager::ClearAllAssets(); - - - }