diff options
author | RĂ©mi Verschelde <rverschelde@gmail.com> | 2018-09-20 18:46:02 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-09-20 18:46:02 +0200 |
commit | 14632cf88f379645525695ba406f0f9a86779253 (patch) | |
tree | d94d8ae54599e5f008d5aa444485bdf047cdf46b /editor | |
parent | 69ee33896a98eb35f9110ddb87706691f4f99e96 (diff) | |
parent | a3fdaa4f21d6e460003ad8db20ec0d16172cb95a (diff) |
Merge pull request #22239 from Chaosus/fix_vs_connection
Disconnects previous visual shader node before making a new connection
Diffstat (limited to 'editor')
-rw-r--r-- | editor/plugins/visual_shader_editor_plugin.cpp | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/editor/plugins/visual_shader_editor_plugin.cpp b/editor/plugins/visual_shader_editor_plugin.cpp index 207078d90f..39e50ec7f8 100644 --- a/editor/plugins/visual_shader_editor_plugin.cpp +++ b/editor/plugins/visual_shader_editor_plugin.cpp @@ -510,6 +510,17 @@ void VisualShaderEditor::_connection_request(const String &p_from, int p_from_in } undo_redo->create_action("Nodes Connected"); + + List<VisualShader::Connection> conns; + visual_shader->get_node_connections(type, &conns); + + for (List<VisualShader::Connection>::Element *E = conns.front(); E; E = E->next()) { + if (E->get().to_node == to && E->get().to_port == p_to_index) { + undo_redo->add_do_method(visual_shader.ptr(), "disconnect_nodes", type, E->get().from_node, E->get().from_port, E->get().to_node, E->get().to_port); + undo_redo->add_undo_method(visual_shader.ptr(), "connect_nodes", type, E->get().from_node, E->get().from_port, E->get().to_node, E->get().to_port); + } + } + undo_redo->add_do_method(visual_shader.ptr(), "connect_nodes", type, from, p_from_index, to, p_to_index); undo_redo->add_undo_method(visual_shader.ptr(), "disconnect_nodes", type, from, p_from_index, to, p_to_index); undo_redo->add_do_method(this, "_update_graph"); |