From 2012ab74d11f60fe9b4c45547d3495ccf8d37735 Mon Sep 17 00:00:00 2001 From: Rowland <975945824@qq.com> Date: Tue, 30 Jun 2026 11:05:34 +0800 Subject: [PATCH] =?UTF-8?q?=E6=93=8D=E4=BD=9C=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Private/MetaCoreEditorApp.cpp | 17 +++++++++++++++++ .../Private/MetaCoreEditorCameraController.cpp | 4 ++-- .../Private/MetaCoreSceneInteractionService.cpp | 8 +------- .../Public/MetaCoreEditor/MetaCoreEditorApp.h | 2 ++ .../MetaCoreEditor/MetaCoreEditorContext.h | 2 +- 5 files changed, 23 insertions(+), 10 deletions(-) diff --git a/Source/MetaCoreEditor/Private/MetaCoreEditorApp.cpp b/Source/MetaCoreEditor/Private/MetaCoreEditorApp.cpp index 4d42f7f..9f2597e 100644 --- a/Source/MetaCoreEditor/Private/MetaCoreEditorApp.cpp +++ b/Source/MetaCoreEditor/Private/MetaCoreEditorApp.cpp @@ -1869,7 +1869,17 @@ void MetaCoreEditorApp::DrawEditorFrame() { MetaCoreDrawInfernuxStatusBar(*EditorContext_, statusPosition, statusSize); + const MetaCoreId selectedObjectId = EditorContext_->GetSelectedObjectId(); + if (selectedObjectId != LastInspectorFocusedSelectionId_) { + LastInspectorFocusedSelectionId_ = selectedObjectId; + if (selectedObjectId != 0) { + ModuleRegistry_.AccessPanelOpenState("Inspector") = true; + PendingInspectorPanelFocus_ = true; + } + } + for (const auto& panelProvider : ModuleRegistry_.GetPanelProviders()) { + const std::string panelId = panelProvider->GetPanelId(); bool& panelOpen = ModuleRegistry_.AccessPanelOpenState(panelProvider->GetPanelId()); if (!panelOpen) { continue; @@ -1891,7 +1901,14 @@ void MetaCoreEditorApp::DrawEditorFrame() { } const ImGuiWindowFlags panelWindowFlags = static_cast(panelProvider->GetWindowFlags()); + if (PendingInspectorPanelFocus_ && panelId == "Inspector") { + ImGui::SetNextWindowFocus(); + } ImGui::Begin(panelProvider->GetPanelTitle().c_str(), &panelOpen, panelWindowFlags); + if (PendingInspectorPanelFocus_ && panelId == "Inspector") { + ImGui::SetWindowFocus(); + PendingInspectorPanelFocus_ = false; + } panelProvider->DrawPanel(*EditorContext_); ImGui::End(); diff --git a/Source/MetaCoreEditor/Private/MetaCoreEditorCameraController.cpp b/Source/MetaCoreEditor/Private/MetaCoreEditorCameraController.cpp index 4af44cf..8b8bdb6 100644 --- a/Source/MetaCoreEditor/Private/MetaCoreEditorCameraController.cpp +++ b/Source/MetaCoreEditor/Private/MetaCoreEditorCameraController.cpp @@ -39,14 +39,14 @@ void MetaCoreEditorCameraController::Update( // Orbit: Alt + Left Drag if (viewportState.Hovered && altDown && ImGui::IsMouseDragging(ImGuiMouseButton_Left)) { - YawDegrees_ -= io.MouseDelta.x * 0.35F; // ι€†ζ—Άι’ˆ + YawDegrees_ += io.MouseDelta.x * 0.35F; PitchDegrees_ -= io.MouseDelta.y * 0.35F; PitchDegrees_ = std::clamp(PitchDegrees_, -85.0F, 85.0F); } // Look Around: Right Drag (without Alt) else if (viewportState.Hovered && !altDown && ImGui::IsMouseDragging(ImGuiMouseButton_Right)) { const glm::vec3 oldPosition = GetCameraPosition(); - YawDegrees_ -= io.MouseDelta.x * 0.35F; + YawDegrees_ += io.MouseDelta.x * 0.35F; PitchDegrees_ -= io.MouseDelta.y * 0.35F; PitchDegrees_ = std::clamp(PitchDegrees_, -85.0F, 85.0F); diff --git a/Source/MetaCoreEditor/Private/MetaCoreSceneInteractionService.cpp b/Source/MetaCoreEditor/Private/MetaCoreSceneInteractionService.cpp index 6ad171d..d2515f7 100644 --- a/Source/MetaCoreEditor/Private/MetaCoreSceneInteractionService.cpp +++ b/Source/MetaCoreEditor/Private/MetaCoreSceneInteractionService.cpp @@ -960,11 +960,9 @@ void MetaCoreSceneInteractionService::HandleShortcuts(MetaCoreEditorContext& edi return; } - // Q, W, E, R for Tool Selection + // Keep WASD reserved for scene camera movement. Tool changes are available from the viewport toolbar. if (ImGui::IsKeyPressed(ImGuiKey_Q)) { editorContext.SetGizmoOperation(MetaCoreGizmoOperation::None); - } else if (ImGui::IsKeyPressed(ImGuiKey_W)) { - editorContext.SetGizmoOperation(MetaCoreGizmoOperation::Translate); } else if (ImGui::IsKeyPressed(ImGuiKey_E)) { editorContext.SetGizmoOperation(MetaCoreGizmoOperation::Rotate); } else if (ImGui::IsKeyPressed(ImGuiKey_R)) { @@ -984,10 +982,6 @@ void MetaCoreSceneInteractionService::HandleShortcuts(MetaCoreEditorContext& edi FocusSelectedObject(editorContext); } - if (ImGui::IsKeyPressed(ImGuiKey_A)) { - FocusVisibleScene(editorContext); - } - if (ImGui::IsKeyPressed(ImGuiKey_G)) { editorContext.SetShowViewportGrid(!editorContext.GetShowViewportGrid()); } diff --git a/Source/MetaCoreEditor/Public/MetaCoreEditor/MetaCoreEditorApp.h b/Source/MetaCoreEditor/Public/MetaCoreEditor/MetaCoreEditorApp.h index cb5a4fc..e3a686e 100644 --- a/Source/MetaCoreEditor/Public/MetaCoreEditor/MetaCoreEditorApp.h +++ b/Source/MetaCoreEditor/Public/MetaCoreEditor/MetaCoreEditorApp.h @@ -43,6 +43,8 @@ private: MetaCoreSceneInteractionService SceneInteractionService_{}; std::vector> Modules_{}; std::unique_ptr EditorContext_{}; + MetaCoreId LastInspectorFocusedSelectionId_ = 0; + bool PendingInspectorPanelFocus_ = false; bool Initialized_ = false; }; diff --git a/Source/MetaCoreEditor/Public/MetaCoreEditor/MetaCoreEditorContext.h b/Source/MetaCoreEditor/Public/MetaCoreEditor/MetaCoreEditorContext.h index 33b1b24..5b5a0a9 100644 --- a/Source/MetaCoreEditor/Public/MetaCoreEditor/MetaCoreEditorContext.h +++ b/Source/MetaCoreEditor/Public/MetaCoreEditor/MetaCoreEditorContext.h @@ -207,7 +207,7 @@ private: MetaCoreId SelectionAnchorId_ = 0; MetaCoreGizmoOperation GizmoOperation_ = MetaCoreGizmoOperation::Translate; MetaCoreGizmoMode GizmoMode_ = MetaCoreGizmoMode::Local; - bool ShowViewportGrid_ = true; + bool ShowViewportGrid_ = false; bool ShowWorldOrigin_ = true; MetaCoreReparentTransformRule ReparentTransformRule_ = MetaCoreReparentTransformRule::KeepWorld; MetaCoreEditorCommandService CommandService_{};