From 29721bfcd789bed5939294d1361236d4e83d1453 Mon Sep 17 00:00:00 2001 From: JekSun97 Date: Sun, 12 Jan 2025 00:38:36 +0600 Subject: [PATCH] Add get_connection_list_from_node --- doc/classes/GraphEdit.xml | 17 +++++++++++++++++ scene/gui/graph_edit.cpp | 17 +++++++++++++++++ scene/gui/graph_edit.h | 1 + 3 files changed, 35 insertions(+) diff --git a/doc/classes/GraphEdit.xml b/doc/classes/GraphEdit.xml index 70137988e61..b40ddda2116 100644 --- a/doc/classes/GraphEdit.xml +++ b/doc/classes/GraphEdit.xml @@ -208,6 +208,23 @@ Returns the points which would make up a connection between [param from_node] and [param to_node]. + + + + + Returns an [Array] containing a list of all connections for [param node]. + A connection is represented as a [Dictionary] in the form of: + [codeblock] + { + from_node: StringName, + from_port: int, + to_node: StringName, + to_port: int, + keep_alive: bool + } + [/codeblock] + + diff --git a/scene/gui/graph_edit.cpp b/scene/gui/graph_edit.cpp index caa05909cc9..f73ee9449f3 100644 --- a/scene/gui/graph_edit.cpp +++ b/scene/gui/graph_edit.cpp @@ -2329,6 +2329,22 @@ TypedArray GraphEdit::_get_connections_intersecting_with_rect(const return arr; } +TypedArray GraphEdit::_get_connection_list_from_node(const StringName &p_node) const { + List> connections_from_node = connection_map.get(p_node); + TypedArray connections_from_node_dict; + + for (const Ref &conn : connections_from_node) { + Dictionary d; + d["from_node"] = conn->from_node; + d["from_port"] = conn->from_port; + d["to_node"] = conn->to_node; + d["to_port"] = conn->to_port; + d["keep_alive"] = conn->keep_alive; + connections_from_node_dict.push_back(d); + } + return connections_from_node_dict; +} + void GraphEdit::_zoom_minus() { set_zoom(zoom / zoom_step); } @@ -2689,6 +2705,7 @@ void GraphEdit::_bind_methods() { ClassDB::bind_method(D_METHOD("get_connection_list"), &GraphEdit::_get_connection_list); ClassDB::bind_method(D_METHOD("get_connection_count", "from_node", "from_port"), &GraphEdit::get_connection_count); ClassDB::bind_method(D_METHOD("get_closest_connection_at_point", "point", "max_distance"), &GraphEdit::_get_closest_connection_at_point, DEFVAL(4.0)); + ClassDB::bind_method(D_METHOD("get_connection_list_from_node", "node"), &GraphEdit::_get_connection_list_from_node); ClassDB::bind_method(D_METHOD("get_connections_intersecting_with_rect", "rect"), &GraphEdit::_get_connections_intersecting_with_rect); ClassDB::bind_method(D_METHOD("clear_connections"), &GraphEdit::clear_connections); ClassDB::bind_method(D_METHOD("force_connection_drag_end"), &GraphEdit::force_connection_drag_end); diff --git a/scene/gui/graph_edit.h b/scene/gui/graph_edit.h index abc015cc87a..5e37fcd9bb7 100644 --- a/scene/gui/graph_edit.h +++ b/scene/gui/graph_edit.h @@ -345,6 +345,7 @@ private: TypedArray _get_connection_list() const; Dictionary _get_closest_connection_at_point(const Vector2 &p_point, float p_max_distance = 4.0) const; TypedArray _get_connections_intersecting_with_rect(const Rect2 &p_rect) const; + TypedArray _get_connection_list_from_node(const StringName &p_node) const; Rect2 _compute_shrinked_frame_rect(const GraphFrame *p_frame); void _set_drag_frame_attached_nodes(GraphFrame *p_frame, bool p_drag);