Răsfoiți Sursa

Merge pull request #44009 from Chaosus/vs_fix_expression_bugs

Fix few bugs in visual shader expressions
Rémi Verschelde 4 ani în urmă
părinte
comite
ba51af7904

+ 11 - 0
editor/plugins/visual_shader_editor_plugin.cpp

@@ -1454,6 +1454,17 @@ void VisualShaderEditor::_remove_output_port(int p_node, int p_port) {
 		}
 		}
 	}
 	}
 
 
+	int preview_port = node->get_output_port_for_preview();
+	if (preview_port != -1) {
+		if (preview_port == p_port) {
+			undo_redo->add_do_method(node.ptr(), "set_output_port_for_preview", -1);
+			undo_redo->add_undo_method(node.ptr(), "set_output_port_for_preview", preview_port);
+		} else if (preview_port > p_port) {
+			undo_redo->add_do_method(node.ptr(), "set_output_port_for_preview", preview_port - 1);
+			undo_redo->add_undo_method(node.ptr(), "set_output_port_for_preview", preview_port);
+		}
+	}
+
 	undo_redo->add_do_method(node.ptr(), "remove_output_port", p_port);
 	undo_redo->add_do_method(node.ptr(), "remove_output_port", p_port);
 	undo_redo->add_undo_method(node.ptr(), "add_output_port", p_port, (int)node->get_output_port_type(p_port), node->get_output_port_name(p_port));
 	undo_redo->add_undo_method(node.ptr(), "add_output_port", p_port, (int)node->get_output_port_type(p_port), node->get_output_port_name(p_port));
 
 

+ 6 - 2
scene/resources/visual_shader.cpp

@@ -2767,8 +2767,10 @@ void VisualShaderNodeGroupBase::remove_input_port(int p_id) {
 	inputs.erase(index, count);
 	inputs.erase(index, count);
 
 
 	inputs_strings = inputs.split(";", false);
 	inputs_strings = inputs.split(";", false);
+	inputs = inputs.substr(0, index);
+
 	for (int i = p_id; i < inputs_strings.size(); i++) {
 	for (int i = p_id; i < inputs_strings.size(); i++) {
-		inputs = inputs.replace_first(inputs_strings[i].split(",")[0], itos(i));
+		inputs += inputs_strings[i].replace_first(inputs_strings[i].split(",")[0], itos(i)) + ";";
 	}
 	}
 
 
 	_apply_port_changes();
 	_apply_port_changes();
@@ -2837,8 +2839,10 @@ void VisualShaderNodeGroupBase::remove_output_port(int p_id) {
 	outputs.erase(index, count);
 	outputs.erase(index, count);
 
 
 	outputs_strings = outputs.split(";", false);
 	outputs_strings = outputs.split(";", false);
+	outputs = outputs.substr(0, index);
+
 	for (int i = p_id; i < outputs_strings.size(); i++) {
 	for (int i = p_id; i < outputs_strings.size(); i++) {
-		outputs = outputs.replace_first(outputs_strings[i].split(",")[0], itos(i));
+		outputs += outputs_strings[i].replace_first(outputs_strings[i].split(",")[0], itos(i)) + ";";
 	}
 	}
 
 
 	_apply_port_changes();
 	_apply_port_changes();