From 97605cc8fe7043171b92d893f6d110f4fd0fd898 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Fri, 3 Mar 2023 22:00:42 +0800 Subject: [PATCH] Added preliminary implementation of animation controller connection attributes --- .../Animation/SHAnimationControllerEditor.cpp | 41 ++++++++++++++++++- .../Animation/SHAnimationControllerEditor.h | 2 +- 2 files changed, 41 insertions(+), 2 deletions(-) diff --git a/SHADE_Engine/src/Editor/EditorWindow/Animation/SHAnimationControllerEditor.cpp b/SHADE_Engine/src/Editor/EditorWindow/Animation/SHAnimationControllerEditor.cpp index 65c4d010..31a38121 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/Animation/SHAnimationControllerEditor.cpp +++ b/SHADE_Engine/src/Editor/EditorWindow/Animation/SHAnimationControllerEditor.cpp @@ -21,7 +21,7 @@ of DigiPen Institute of Technology is prohibited. // Project Includes #include "Editor/IconsMaterialDesign.h" #include "Animation/SHAnimationController.h" -#include "../../SHEditorUI.h" +#include "Editor/SHEditorUI.h" namespace SHADE { @@ -50,10 +50,29 @@ namespace SHADE ImNodes::BeginNodeEditor(); { + /* Pre Process Nodes */ + std::unordered_map, int> inputAttribCount; + std::unordered_map, int> outputAttribCount; + for (auto node : controller.GetNodes()) + { + // Have at least one for each + inputAttribCount[node] = 1; + outputAttribCount[node] = 1; + } + for (auto node : controller.GetNodes()) + { + for (auto transition : node->Transitions) + { + ++inputAttribCount[transition.Target]; + } + outputAttribCount[node] += node->Transitions.size(); + } + /* Draw Nodes */ int id = 0; for (auto node : controller.GetNodes()) { + // Draw the node ImNodes::BeginNode(id); { // Title @@ -72,6 +91,26 @@ namespace SHADE ImGui::PushItemWidth(80.0f); ImGui::InputText("", buffer.data(), buffer.size()); ImGui::PopItemWidth(); + + // Input Nodes + for (int i = 0; i < inputAttribCount[node]; ++i) + { + NodeAttributeIndex nidx; + nidx.OwnerNodeIndex = id; + nidx.AttributeIndex = i; + ImNodes::BeginInputAttribute(nidx.Raw); + ImNodes::EndInputAttribute(); + } + + // Output Nodes + for (int i = 0; i < outputAttribCount[node]; ++i) + { + NodeAttributeIndex nidx; + nidx.OwnerNodeIndex = id; + nidx.AttributeIndex = inputAttribCount[node] + i; + ImNodes::BeginOutputAttribute(nidx.Raw); + ImNodes::EndOutputAttribute(); + } } ImNodes::EndNode(); ++id; diff --git a/SHADE_Engine/src/Editor/EditorWindow/Animation/SHAnimationControllerEditor.h b/SHADE_Engine/src/Editor/EditorWindow/Animation/SHAnimationControllerEditor.h index 03da7771..a78d2fd6 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/Animation/SHAnimationControllerEditor.h +++ b/SHADE_Engine/src/Editor/EditorWindow/Animation/SHAnimationControllerEditor.h @@ -60,7 +60,7 @@ namespace SHADE NodeAttributeIndex SourceAttribute; NodeAttributeIndex DestinationAttribute; }; - }; // What about same source and destination but different link? + }; /*---------------------------------------------------------------------------------*/ /* Data Members */