extends GraphEdit const NODE_SCENE := preload("res://graph_node_renderer/deck_node_renderer_graph_node.tscn") var deck: Deck = Deck.new() #var button_node = preload("res://classes/deck/nodes/button.gd") #var print_node = preload("res://classes/deck/nodes/print.gd") #var get_var_node = preload("res://classes/deck/nodes/get_deck_var.gd") #var set_var_node = preload("res://classes/deck/nodes/set_deck_var.gd") func _ready() -> void: var add_button := Button.new() add_button.text = "Button" var add_print := Button.new() add_print.text = "Print" var get_var := Button.new() get_var.text = "Get Var" var set_var := Button.new() set_var.text = "Set Var" get_zoom_hbox().add_child(add_button) get_zoom_hbox().add_child(add_print) get_zoom_hbox().add_child(get_var) get_zoom_hbox().add_child(set_var) var save_btn := Button.new() save_btn.text = "Save" get_zoom_hbox().add_child(save_btn) var load_btn := Button.new() load_btn.text = "Load" get_zoom_hbox().add_child(load_btn) save_btn.pressed.connect( func(): var t = deck.to_json() var f := FileAccess.open("user://save_test.json", FileAccess.WRITE) f.store_string(t) ) load_btn.pressed.connect( func(): var f := FileAccess.open("user://save_test.json", FileAccess.READ) for i in get_children(): i.queue_free() deck = Deck.from_json(f.get_as_text()) scroll_offset = str_to_vector2(deck.get_meta("offset", "")) for node_id in deck.nodes: var node_renderer: DeckNodeRendererGraphNode = NODE_SCENE.instantiate() node_renderer.node = deck.nodes[node_id] add_child(node_renderer) node_renderer.position_offset = str_to_vector2(deck.nodes[node_id].get_meta("position_offset", "")) for node_id in deck.nodes: var node: DeckNode = deck.nodes[node_id] var from_node_name = get_children().filter( func(c: DeckNodeRendererGraphNode): return c.node._id == node_id )[0].name # "outgoing_connections": { # "0": [ # { # "c8cc7dce-2a86-461c-a24f-0a4dbd06f379": 1 # } # ] # }, for from_port in node.outgoing_connections: for connection in node.outgoing_connections[from_port]: var to_node_id = connection.keys()[0] var to_node_port = connection.values()[0] var to_node_name = get_children().filter( func(c: DeckNodeRendererGraphNode): return c.node._id == to_node_id )[0].name prints(from_node_name, to_node_name) connect_node(from_node_name, from_port, to_node_name, to_node_port) ) add_button.pressed.connect( func(): var node := NodeDB.instance_node("button") deck.add_node_inst(node) var node_renderer: DeckNodeRendererGraphNode = NODE_SCENE.instantiate() node_renderer.node = node add_child(node_renderer) ) add_print.pressed.connect( func(): var node := NodeDB.instance_node("print") deck.add_node_inst(node) var node_renderer: DeckNodeRendererGraphNode = NODE_SCENE.instantiate() node_renderer.node = node add_child(node_renderer) ) get_var.pressed.connect( func(): var node := NodeDB.instance_node("get_deck_var") deck.add_node_inst(node) var node_renderer: DeckNodeRendererGraphNode = NODE_SCENE.instantiate() node_renderer.node = node add_child(node_renderer) ) set_var.pressed.connect( func(): var node := NodeDB.instance_node("set_deck_var") deck.add_node_inst(node) var node_renderer: DeckNodeRendererGraphNode = NODE_SCENE.instantiate() node_renderer.node = node add_child(node_renderer) ) connection_request.connect(attempt_connection) disconnection_request.connect(attempt_disconnect) func attempt_connection(from_node_name: StringName, from_port: int, to_node_name: StringName, to_port: int) -> void: var from_node: DeckNode = get_node(NodePath(from_node_name)).node var to_node: DeckNode = get_node(NodePath(to_node_name)).node var from_output := from_node.get_global_port_idx_from_output(from_port) var to_input := to_node.get_global_port_idx_from_input(to_port) if deck.connect_nodes(from_node, to_node, from_output, to_input): connect_node(from_node_name, from_port, to_node_name, to_port) func attempt_disconnect(from_node_name: StringName, from_port: int, to_node_name: StringName, to_port: int) -> void: var from_node: DeckNode = get_node(NodePath(from_node_name)).node var to_node: DeckNode = get_node(NodePath(to_node_name)).node var from_output := from_node.get_global_port_idx_from_output(from_port) var to_input := to_node.get_global_port_idx_from_input(to_port) deck.disconnect_nodes(from_node, to_node, from_output, to_input) disconnect_node(from_node_name, from_port, to_node_name, to_port) func _on_scroll_offset_changed(offset: Vector2) -> void: deck.set_meta("offset", offset) func str_to_vector2(s: String) -> Vector2: if s.is_empty(): return Vector2() var san := s.trim_prefix("(").trim_suffix(")").split(",") var x := float(san[0]) var y := float(san[1]) return Vector2(x, y)