From e816df28a8ee9b18b2b44425dca19b4e75da65e2 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Thu, 9 Mar 2023 12:07:07 +0800 Subject: [PATCH] Clips can now be dragged and dropped into the animation controller editor --- .../Animation/SHAnimationControllerEditor.cpp | 39 +++++++++++++++---- .../SHRawAnimInspector.cpp | 1 - SHADE_Engine/src/Editor/SHEditorWidgets.hpp | 6 ++- 3 files changed, 37 insertions(+), 9 deletions(-) diff --git a/SHADE_Engine/src/Editor/EditorWindow/Animation/SHAnimationControllerEditor.cpp b/SHADE_Engine/src/Editor/EditorWindow/Animation/SHAnimationControllerEditor.cpp index a67c6a67..17b252f9 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/Animation/SHAnimationControllerEditor.cpp +++ b/SHADE_Engine/src/Editor/EditorWindow/Animation/SHAnimationControllerEditor.cpp @@ -25,11 +25,14 @@ of DigiPen Institute of Technology is prohibited. #include "Editor/SHEditorWidgets.hpp" #include "Editor/Command/SHCommand.hpp" #include "Input/SHInputManager.h" +#include "Resource/SHResourceManager.h" +#include "Editor/EditorWindow/SHEditorWindowManager.h" +#include "Editor/EditorWindow/AssetBrowser/SHAssetBrowser.h" namespace SHADE { /*-----------------------------------------------------------------------------------*/ - /* Cosntructors/Destructors */ + /* Constructors/Destructors */ /*-----------------------------------------------------------------------------------*/ SHAnimationControllerEditor::SHAnimationControllerEditor() : SHEditorWindow("Animation Controller Editor", ImGuiWindowFlags_MenuBar) @@ -318,6 +321,7 @@ namespace SHADE void SHAnimationControllerEditor::drawNodeEditor() { static constexpr float NODE_WIDTH = 80.0f; + static constexpr float TEXT_FIELD_PADDING = 15.0f; ImNodes::BeginNodeEditor(); { @@ -346,8 +350,8 @@ namespace SHADE node.EditingName = false; } ImGui::SameLine(); - static constexpr float TEXT_FIELD_PADDING = 15.0f; ImGui::SetNextItemWidth(std::max(ImGui::CalcTextSize(node.Name.c_str()).x + TEXT_FIELD_PADDING, NODE_WIDTH)); + SHEditorUI::InputTextField("", node.Name); } else @@ -363,11 +367,32 @@ namespace SHADE ImNodes::EndNodeTitleBar(); // Body - ImGui::Text("Clip"); - ImGui::SameLine(); - std::array buffer = { '\0' }; - ImGui::SetNextItemWidth(std::max(NODE_WIDTH, ImGui::CalcTextSize(buffer.data()).x)); - ImGui::InputText("", buffer.data(), buffer.size()); + const auto CLIP_NAME = SHResourceManager::GetAssetName(node.Clip).value_or(""); + ImGui::SetNextItemWidth(NODE_WIDTH); + SHEditorWidgets::DragDropReadOnlyField + ( + "Clip", CLIP_NAME, + [&]() + { + return SHResourceManager::GetAssetID(node.Clip).value_or(0); + }, + [&](AssetID id) + { + if (SHAssetManager::GetType(id) != AssetType::ANIM_CLIP) + return; + node.Clip = SHResourceManager::LoadOrGet(id); + SHResourceManager::FinaliseChanges(); + }, + SHDragDrop::DRAG_RESOURCE, {}, NODE_WIDTH + ); + if (ImGui::IsItemHovered() && ImGui::IsMouseDoubleClicked(ImGuiMouseButton_Left)) + { + if (node.Clip) + { + AssetID assetID = SHResourceManager::GetAssetID(node.Clip).value_or(0); + SHEditorWindowManager::GetEditorWindow()->SetScrollTo(assetID); + } + } // Input Nodes for (auto inputAttrib : node.InputAttribs) diff --git a/SHADE_Engine/src/Editor/EditorWindow/RawAnimationInspector/SHRawAnimInspector.cpp b/SHADE_Engine/src/Editor/EditorWindow/RawAnimationInspector/SHRawAnimInspector.cpp index 75ab7945..0391f75d 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/RawAnimationInspector/SHRawAnimInspector.cpp +++ b/SHADE_Engine/src/Editor/EditorWindow/RawAnimationInspector/SHRawAnimInspector.cpp @@ -5,7 +5,6 @@ \date Mar 1, 2023 \brief Contains the definition of SHRawAnimInspector's functions. - Copyright (C) 2023 DigiPen Institute of Technology. Reproduction or disclosure of this file or its contents without the prior written consent of DigiPen Institute of Technology is prohibited. diff --git a/SHADE_Engine/src/Editor/SHEditorWidgets.hpp b/SHADE_Engine/src/Editor/SHEditorWidgets.hpp index 2698e3f2..124bbfb3 100644 --- a/SHADE_Engine/src/Editor/SHEditorWidgets.hpp +++ b/SHADE_Engine/src/Editor/SHEditorWidgets.hpp @@ -418,12 +418,16 @@ namespace SHADE } template - static bool DragDropReadOnlyField(std::string const& label, std::string_view const& fieldVTextValue, std::function const& get, std::function const& set, SHDragDrop::DragDropTag const& dragDropTag, std::string_view const& tooltip = {}) + static bool DragDropReadOnlyField(std::string const& label, std::string_view const& fieldVTextValue, std::function const& get, std::function const& set, SHDragDrop::DragDropTag const& dragDropTag, std::string_view const& tooltip = {}, float customWidth = -1.0f) { std::string text = fieldVTextValue.data(); ImGui::BeginGroup(); ImGui::PushID(label.data()); TextLabel(label); + if (customWidth > 0.0f) + { + ImGui::SetNextItemWidth(customWidth); + } bool changed = ImGui::InputText("##inputText", &text, ImGuiInputTextFlags_ReadOnly | ImGuiInputTextFlags_AutoSelectAll, nullptr, nullptr); if(SHDragDrop::BeginTarget()) {