소스 검색

fully implemented undo redo with cable reconnection for deletion

Jonathan Higgins 2 달 전
부모
커밋
40951f83f0
1개의 변경된 파일15개의 추가작업 그리고 2개의 파일을 삭제
  1. 15 2
      scenes/main/scripts/graph_edit.gd

+ 15 - 2
scenes/main/scripts/graph_edit.gd

@@ -395,7 +395,7 @@ func _on_graph_edit_delete_nodes_request(nodes: Array[StringName]) -> void:
 			# Skip output nodes
 			if node.get_meta("command") == "outputfile":
 				continue
-
+			
 			#register redo
 			control_script.undo_redo.add_do_method(delete_node.bind(node))
 			#register undo
@@ -405,6 +405,12 @@ func _on_graph_edit_delete_nodes_request(nodes: Array[StringName]) -> void:
 			
 	selected_nodes = {}
 
+	var connections_to_restore = []
+	for con in get_connection_list():
+		if (con["from_node"] in nodes or con["to_node"] in nodes) and !connections_to_restore.has(con):
+			connections_to_restore.append(con)
+			
+	control_script.undo_redo.add_undo_method(restore_connections.bind(connections_to_restore))
 	control_script.undo_redo.commit_action()
 	
 	for node_name in nodes:
@@ -428,7 +434,14 @@ func restore_node(node_to_restore: GraphNode) -> void:
 	_register_inputs_in_node(node_to_restore)
 	_register_node_movement()
 	
-
+func restore_connections(connections_to_restore: Array) -> void:
+	for con in connections_to_restore:
+		var from_node = con["from_node"]
+		var from_port = con["from_port"]
+		var to_node = con["to_node"]
+		var to_port = con["to_port"]
+		if has_node(NodePath(from_node)) and has_node(NodePath(to_node)):
+			connect_node(from_node, from_port, to_node, to_port)
 
 func set_node_selected(node: Node, selected: bool) -> void:
 	selected_nodes[node] = selected