From 17b9520fffa1cb5cb4c1ef7e3f92a5f15b82f450 Mon Sep 17 00:00:00 2001 From: SHAM-DP Date: Wed, 28 Dec 2022 22:05:06 +0800 Subject: [PATCH] Fixed bug where all components are serialized for any entity even if it does not have the component(s) Hierarchy Controls are no longer disabled when it is not in focus --- .../HierarchyPanel/SHHierarchyPanel.cpp | 46 ++++++++-------- SHADE_Engine/src/Editor/SHEditor.cpp | 52 ++++++++++++------- SHADE_Engine/src/Editor/SHEditor.h | 2 + .../src/Serialization/SHSerialization.cpp | 4 +- 4 files changed, 58 insertions(+), 46 deletions(-) diff --git a/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.cpp b/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.cpp index 2235f831..6ac5933c 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.cpp +++ b/SHADE_Engine/src/Editor/EditorWindow/HierarchyPanel/SHHierarchyPanel.cpp @@ -84,34 +84,32 @@ namespace SHADE editor->selectedEntities.clear(); } ImGui::SeparatorEx(ImGuiSeparatorFlags_Horizontal); - if (ImGui::IsWindowFocused()) + + if (ImGui::IsKeyDown(ImGuiKey_LeftCtrl) && ImGui::IsKeyReleased(ImGuiKey_A)) { - if (ImGui::IsKeyDown(ImGuiKey_LeftCtrl) && ImGui::IsKeyReleased(ImGuiKey_A)) + SelectAllEntities(); + } + if (ImGui::IsKeyDown(ImGuiKey_LeftCtrl) && ImGui::IsKeyReleased(ImGuiKey_C)) + { + CopySelectedEntities(); + } + if (ImGui::IsKeyDown(ImGuiKey_LeftCtrl) && !ImGui::IsKeyDown(ImGuiKey_LeftShift) && ImGui::IsKeyReleased(ImGuiKey_V)) + { + PasteEntities(); + } + if (ImGui::IsKeyDown(ImGuiKey_LeftCtrl) && ImGui::IsKeyDown(ImGuiKey_LeftShift) && ImGui::IsKeyReleased(ImGuiKey_V)) + { + const auto editor = SHSystemManager::GetSystem(); + if (editor->selectedEntities.size() == 1) { - SelectAllEntities(); - } - if (ImGui::IsKeyDown(ImGuiKey_LeftCtrl) && ImGui::IsKeyReleased(ImGuiKey_C)) - { - CopySelectedEntities(); - } - if (ImGui::IsKeyDown(ImGuiKey_LeftCtrl) && !ImGui::IsKeyDown(ImGuiKey_LeftShift) && ImGui::IsKeyReleased(ImGuiKey_V)) - { - PasteEntities(); - } - if (ImGui::IsKeyDown(ImGuiKey_LeftCtrl) && ImGui::IsKeyDown(ImGuiKey_LeftShift) && ImGui::IsKeyReleased(ImGuiKey_V)) - { - const auto editor = SHSystemManager::GetSystem(); - if (editor->selectedEntities.size() == 1) - { - PasteEntities(editor->selectedEntities.back()); - } - } - if(ImGui::IsKeyReleased(ImGuiKey_Delete)) - { - DeleteSelectedEntities(); + PasteEntities(editor->selectedEntities.back()); } } - + if (ImGui::IsKeyReleased(ImGuiKey_Delete)) + { + DeleteSelectedEntities(); + } + } if(ImGui::IsWindowHovered() && !ImGui::IsAnyItemHovered() && ImGui::IsMouseReleased(ImGuiMouseButton_Left)) { diff --git a/SHADE_Engine/src/Editor/SHEditor.cpp b/SHADE_Engine/src/Editor/SHEditor.cpp index 7d713ff2..5d8dc72d 100644 --- a/SHADE_Engine/src/Editor/SHEditor.cpp +++ b/SHADE_Engine/src/Editor/SHEditor.cpp @@ -162,26 +162,7 @@ namespace SHADE RenderUnsavedChangesPrompt(); //PollPicking(); - if(ImGui::IsKeyDown(ImGuiKey_LeftShift) && ImGui::IsKeyDown(ImGuiKey_LeftCtrl) && ImGui::IsKeyReleased(ImGuiKey_Z)) - { - SHCommandManager::RedoCommand(); - } - else if(ImGui::IsKeyDown(ImGuiKey_LeftCtrl) && ImGui::IsKeyReleased(ImGuiKey_Z)) - { - SHCommandManager::UndoCommand(); - } - if(ImGui::IsKeyReleased(ImGuiKey_F5)) - { - Play(); - } - else if (ImGui::IsKeyReleased(ImGuiKey_F6)) - { - Pause(); - } - else if (ImGui::IsKeyReleased(ImGuiKey_F7)) - { - Stop(); - } + ProcessShortcuts(); Render(); } @@ -669,6 +650,37 @@ namespace SHADE LoadScene(SHSceneManager::GetCurrentSceneAssetID()); } + void SHEditor::ProcessShortcuts() + { + if(ImGui::IsKeyDown(ImGuiKey_LeftCtrl)) + { + if(ImGui::IsKeyReleased(ImGuiKey_S)) + { + SaveScene(); + } + } + if (ImGui::IsKeyDown(ImGuiKey_LeftShift) && ImGui::IsKeyDown(ImGuiKey_LeftCtrl) && ImGui::IsKeyReleased(ImGuiKey_Z)) + { + SHCommandManager::RedoCommand(); + } + else if (ImGui::IsKeyDown(ImGuiKey_LeftCtrl) && ImGui::IsKeyReleased(ImGuiKey_Z)) + { + SHCommandManager::UndoCommand(); + } + if (ImGui::IsKeyReleased(ImGuiKey_F5)) + { + Play(); + } + else if (ImGui::IsKeyReleased(ImGuiKey_F6)) + { + Pause(); + } + else if (ImGui::IsKeyReleased(ImGuiKey_F7)) + { + Stop(); + } + } + void SHEditor::NewFrame() { SDL_Event event; diff --git a/SHADE_Engine/src/Editor/SHEditor.h b/SHADE_Engine/src/Editor/SHEditor.h index f30b3526..103f834f 100644 --- a/SHADE_Engine/src/Editor/SHEditor.h +++ b/SHADE_Engine/src/Editor/SHEditor.h @@ -123,6 +123,8 @@ namespace SHADE void Pause(); void Stop(); + void ProcessShortcuts(); + // List of selected entities std::vector selectedEntities; diff --git a/SHADE_Engine/src/Serialization/SHSerialization.cpp b/SHADE_Engine/src/Serialization/SHSerialization.cpp index 753f2def..a0b961a3 100644 --- a/SHADE_Engine/src/Serialization/SHSerialization.cpp +++ b/SHADE_Engine/src/Serialization/SHSerialization.cpp @@ -174,9 +174,9 @@ namespace SHADE YAML::Node node{}; if (ComponentType* component = SHComponentManager::GetComponent_s(eid)) { - node = SHSerializationHelper::SerializeComponentToNode(component); + node = SHSerializationHelper::SerializeComponentToNode(component); + componentsNode[rttr::type::get().get_name().data()] = node; } - componentsNode[rttr::type::get().get_name().data()] = node; } YAML::Node SHSerialization::SerializeEntityToNode(SHSceneNode* sceneNode)