Unified handling of nodes in editor.
parent
9b743fd081
commit
0d0b181ebb
|
@ -101,93 +101,20 @@ void AnimGraphEditorUpdate() {
|
||||||
ImGui::PopStyleVar(ImGuiStyleVar_WindowPadding);
|
ImGui::PopStyleVar(ImGuiStyleVar_WindowPadding);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Graph Output and Inputs
|
for (size_t i = 0, n = graph_resource.m_nodes.size(); i < n; i++) {
|
||||||
if (graph_resource.m_nodes.size() > 0) {
|
|
||||||
// Graph Output
|
|
||||||
AnimNodeResource& graph_output_node = graph_resource.getGraphOutputNode();
|
|
||||||
ImNodes::BeginNode(0);
|
|
||||||
|
|
||||||
// Header
|
|
||||||
ImNodes::BeginNodeTitleBar();
|
|
||||||
ImGui::TextUnformatted("Graph Output");
|
|
||||||
ImNodes::EndNodeTitleBar();
|
|
||||||
|
|
||||||
// Graph Outputs = Graph Node inputs
|
|
||||||
const std::vector<Socket>& graph_outputs =
|
|
||||||
graph_output_node.m_socket_accessor->m_inputs;
|
|
||||||
for (size_t j = 0, ni = graph_outputs.size(); j < ni; j++) {
|
|
||||||
const Socket& socket = graph_outputs[j];
|
|
||||||
ImNodes::BeginInputAttribute(
|
|
||||||
GenerateInputAttributeId(0, j),
|
|
||||||
sGetSocketShapeFromSocketType(socket.m_type),
|
|
||||||
ImColor(255, 255, 255, 255));
|
|
||||||
ImGui::Text(socket.m_name.c_str());
|
|
||||||
ImNodes::PushAttributeFlag(ImNodesAttributeFlags_EnableLinkDetachWithDragClick);
|
|
||||||
ImNodes::EndInputAttribute();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ImGui::Button("+Output")) {
|
|
||||||
static float bla = 0.f;
|
|
||||||
std::string socket_name = "Output";
|
|
||||||
socket_name +=
|
|
||||||
std::to_string(graph_output_node.m_socket_accessor->m_inputs.size());
|
|
||||||
graph_output_node.m_socket_accessor->RegisterInput<float>(
|
|
||||||
socket_name,
|
|
||||||
nullptr);
|
|
||||||
}
|
|
||||||
|
|
||||||
ImVec2 node_pos = ImNodes::GetNodeGridSpacePos(0);
|
|
||||||
graph_output_node.m_position[0] = node_pos[0];
|
|
||||||
graph_output_node.m_position[1] = node_pos[1];
|
|
||||||
ImNodes::EndNode();
|
|
||||||
|
|
||||||
// Graph Input
|
|
||||||
AnimNodeResource& graph_input_node = graph_resource.getGraphInputNode();
|
|
||||||
ImNodes::BeginNode(1);
|
|
||||||
|
|
||||||
// Header
|
|
||||||
ImNodes::BeginNodeTitleBar();
|
|
||||||
ImGui::TextUnformatted("Graph Input");
|
|
||||||
ImNodes::EndNodeTitleBar();
|
|
||||||
|
|
||||||
// Graph Input = Graph Node outputs
|
|
||||||
const std::vector<Socket>& graph_inputs =
|
|
||||||
graph_input_node.m_socket_accessor->m_outputs;
|
|
||||||
for (size_t j = 0, ni = graph_inputs.size(); j < ni; j++) {
|
|
||||||
const Socket& socket = graph_inputs[j];
|
|
||||||
ImNodes::BeginOutputAttribute(
|
|
||||||
GenerateOutputAttributeId(1, j),
|
|
||||||
sGetSocketShapeFromSocketType(socket.m_type),
|
|
||||||
ImColor(255, 255, 255, 255));
|
|
||||||
ImGui::Text(socket.m_name.c_str());
|
|
||||||
ImNodes::PushAttributeFlag(ImNodesAttributeFlags_EnableLinkDetachWithDragClick);
|
|
||||||
ImNodes::EndInputAttribute();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ImGui::Button("+Input")) {
|
|
||||||
static float bla = 0.f;
|
|
||||||
std::string socket_name = "Input";
|
|
||||||
socket_name +=
|
|
||||||
std::to_string(graph_input_node.m_socket_accessor->m_outputs.size());
|
|
||||||
graph_input_node.m_socket_accessor->RegisterOutput<float>(
|
|
||||||
socket_name,
|
|
||||||
nullptr);
|
|
||||||
}
|
|
||||||
|
|
||||||
node_pos = ImNodes::GetNodeGridSpacePos(1);
|
|
||||||
graph_input_node.m_position[0] = node_pos[0];
|
|
||||||
graph_input_node.m_position[1] = node_pos[1];
|
|
||||||
ImNodes::EndNode();
|
|
||||||
}
|
|
||||||
|
|
||||||
for (size_t i = 2, n = graph_resource.m_nodes.size(); i < n; i++) {
|
|
||||||
AnimNodeResource& node_resource = graph_resource.m_nodes[i];
|
AnimNodeResource& node_resource = graph_resource.m_nodes[i];
|
||||||
|
|
||||||
ImNodes::BeginNode(i);
|
ImNodes::BeginNode(i);
|
||||||
|
|
||||||
// Header
|
// Header
|
||||||
ImNodes::BeginNodeTitleBar();
|
ImNodes::BeginNodeTitleBar();
|
||||||
|
if (i == 0) {
|
||||||
|
ImGui::TextUnformatted("Graph Outputs");
|
||||||
|
} else if (i == 1) {
|
||||||
|
ImGui::TextUnformatted("Graph Inputs");
|
||||||
|
} else {
|
||||||
ImGui::TextUnformatted(node_resource.m_type_name.c_str());
|
ImGui::TextUnformatted(node_resource.m_type_name.c_str());
|
||||||
|
}
|
||||||
ImNodes::EndNodeTitleBar();
|
ImNodes::EndNodeTitleBar();
|
||||||
|
|
||||||
// Inputs
|
// Inputs
|
||||||
|
@ -219,6 +146,33 @@ void AnimGraphEditorUpdate() {
|
||||||
ImNodes::EndInputAttribute();
|
ImNodes::EndInputAttribute();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Graph output node
|
||||||
|
if (i == 0) {
|
||||||
|
if (ImGui::Button("+Output")) {
|
||||||
|
AnimNodeResource& graph_output_node = graph_resource.getGraphOutputNode();
|
||||||
|
|
||||||
|
static float bla = 0.f;
|
||||||
|
std::string socket_name = "Output";
|
||||||
|
socket_name +=
|
||||||
|
std::to_string(graph_output_node.m_socket_accessor->m_inputs.size());
|
||||||
|
graph_output_node.m_socket_accessor->RegisterInput<float>(
|
||||||
|
socket_name,
|
||||||
|
nullptr);
|
||||||
|
}
|
||||||
|
} else if (i == 1) {
|
||||||
|
if (ImGui::Button("+Input")) {
|
||||||
|
AnimNodeResource& graph_input_node = graph_resource.getGraphInputNode();
|
||||||
|
|
||||||
|
static float bla = 0.f;
|
||||||
|
std::string socket_name = "Input";
|
||||||
|
socket_name +=
|
||||||
|
std::to_string(graph_input_node.m_socket_accessor->m_outputs.size());
|
||||||
|
graph_input_node.m_socket_accessor->RegisterOutput<float>(
|
||||||
|
socket_name,
|
||||||
|
nullptr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Save state in node resource
|
// Save state in node resource
|
||||||
ImVec2 node_pos = ImNodes::GetNodeGridSpacePos(i);
|
ImVec2 node_pos = ImNodes::GetNodeGridSpacePos(i);
|
||||||
node_resource.m_position[0] = node_pos[0];
|
node_resource.m_position[0] = node_pos[0];
|
||||||
|
|
Loading…
Reference in New Issue