Skip to content

Commit c4a8dc9

Browse files
committed
Outline highlighted connections
1 parent 204fc8d commit c4a8dc9

6 files changed

Lines changed: 85 additions & 9 deletions

File tree

export_presets.cfg

Lines changed: 3 additions & 3 deletions
Large diffs are not rendered by default.

material_maker/nodes/reroute/reroute.gd

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
extends MMGraphNodeMinimal
22

3+
class_name MMGraphReroute
34

45
const PREVIEW_SIZES : Array[int] = [ 0, 64, 128, 192]
56

material_maker/panels/graph_edit/graph_edit.gd

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,8 @@ var undoredo_move_node_selection_changed : bool = true
4040
enum ConnectionStyle {DIRECT, BEZIER, ROUNDED, MANHATTAN, DIAGONAL}
4141
var connection_line_style : int = ConnectionStyle.BEZIER
4242

43+
var active_connections : Array[Dictionary]
44+
4345
@onready var drag_cut_cursor = preload("res://material_maker/icons/knife.png")
4446
var connections_to_cut : Array[Dictionary]
4547
var drag_cut_line : PackedVector2Array
@@ -139,6 +141,7 @@ func _gui_input(event) -> void:
139141
if connections_to_cut.size():
140142
on_cut_connections(connections_to_cut)
141143
connections_to_cut.clear()
144+
update_active_connections()
142145
Input.set_custom_mouse_cursor(null)
143146
drag_cut_line.clear()
144147
conns.clear()
@@ -272,6 +275,7 @@ func get_padded_node_rect(graph_node:GraphNode) -> Rect2:
272275
func _draw() -> void:
273276
if drag_cut_line.size() > 1:
274277
draw_polyline(drag_cut_line, get_theme_color("connection_knife", "GraphEdit"), 1.0)
278+
$OutlineOverlay.queue_redraw()
275279

276280

277281
# Misc. useful functions
@@ -360,6 +364,7 @@ func on_cut_connections(connections_to_cut : Array):
360364
var from_gen = get_node(str(c.from_node)).generator
361365
var to_gen = get_node(str(c.to_node)).generator
362366
if do_disconnect_node(c.from_node, c.from_port, c.to_node, c.to_port):
367+
remove_active_connection(c.from_node, c.from_port, c.to_node, c.to_port)
363368
conns.append({from=from_gen.name,from_port=c.from_port, to=to_gen.name, to_port=c.to_port})
364369
var undo_actions = [
365370
{ type="add_to_graph", parent=generator_hier_name, generators=[], connections=conns }
@@ -369,7 +374,6 @@ func on_cut_connections(connections_to_cut : Array):
369374
]
370375
undoredo.add("Cut node connections", undo_actions, redo_actions)
371376

372-
373377
func on_disconnect_node(from : String, from_slot : int, to : String, to_slot : int) -> void:
374378
var from_gen = get_node(from).generator
375379
var to_gen = get_node(to).generator
@@ -383,6 +387,7 @@ func on_disconnect_node(from : String, from_slot : int, to : String, to_slot : i
383387
{ type="remove_connections", parent=generator_hier_name, connections=[connection] }
384388
]
385389
undoredo.add("Disconnect nodes", undo_actions, redo_actions)
390+
remove_active_connection(from, from_slot, to, to_slot)
386391

387392
func on_connections_changed(removed_connections : Array, added_connections : Array) -> void:
388393
for c in removed_connections:
@@ -950,14 +955,20 @@ func _on_ButtonTransmitsSeed_toggled(button_pressed) -> void:
950955

951956
var highlighting_connections : bool = false
952957

958+
func update_active_connections() -> void:
959+
active_connections.clear()
960+
for c in get_connection_list():
961+
if get_node(NodePath(c.from_node)).selected or get_node(NodePath(c.to_node)).selected:
962+
active_connections.append(c)
963+
$OutlineOverlay.queue_redraw()
964+
953965
func highlight_connections() -> void:
954966
if highlighting_connections:
955967
return
956968
highlighting_connections = true
957969
while Input.is_mouse_button_pressed(MOUSE_BUTTON_LEFT):
958970
await get_tree().process_frame
959-
for c in get_connection_list():
960-
set_connection_activity(c.from_node, c.from_port, c.to_node, c.to_port, 1.0 if get_node(NodePath(c.from_node)).selected or get_node(NodePath(c.to_node)).selected else 0.0)
971+
update_active_connections()
961972
highlighting_connections = false
962973

963974
func _on_GraphEdit_node_selected(node : GraphElement) -> void:
@@ -1197,6 +1208,8 @@ func undoredo_command(command : Dictionary) -> void:
11971208
_:
11981209
print("Unknown undo/redo command:")
11991210
print(command)
1211+
await get_tree().process_frame
1212+
update_active_connections()
12001213

12011214
func undoredo_move_node(node_name : String, old_pos : Vector2, new_pos : Vector2):
12021215
if old_pos == new_pos:
@@ -1673,3 +1686,12 @@ func color_comment_nodes() -> void:
16731686
picker.popup_hide.connect(picker.queue_free)
16741687
picker.popup_hide.connect(undoredo.end_group)
16751688
picker.popup()
1689+
1690+
func remove_active_connection(from : String, from_slot : int, to : String, to_slot : int) -> void:
1691+
for c in len(active_connections):
1692+
var connection : Dictionary = active_connections[c]
1693+
if (connection.from_node == from and connection.from_port == from_slot
1694+
and connection.to_node == to and connection.to_port == to_slot):
1695+
active_connections.remove_at(c)
1696+
break
1697+
$OutlineOverlay.queue_redraw()

material_maker/panels/graph_edit/graph_edit.tscn

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
1-
[gd_scene load_steps=8 format=3 uid="uid://dy1u50we7gtru"]
1+
[gd_scene load_steps=9 format=3 uid="uid://dy1u50we7gtru"]
22

33
[ext_resource type="Script" uid="uid://dkp4w3at1o6cm" path="res://material_maker/panels/graph_edit/graph_edit.gd" id="1"]
44
[ext_resource type="Texture2D" uid="uid://c0j4px4n72di5" path="res://material_maker/icons/icons.tres" id="2"]
55
[ext_resource type="Script" uid="uid://bne3k0g56crmy" path="res://material_maker/tools/undo_redo/undo_redo.gd" id="3"]
66
[ext_resource type="PackedScene" uid="uid://buj231c2gxm4o" path="res://material_maker/widgets/desc_button/desc_button.tscn" id="4"]
7+
[ext_resource type="Script" uid="uid://cbvroxeqaaopc" path="res://material_maker/panels/graph_edit/outline_overlay.gd" id="5_u5byk"]
78

89
[sub_resource type="AtlasTexture" id="3"]
910
atlas = ExtResource("2")
@@ -26,7 +27,6 @@ offset_right = 1529.0
2627
offset_bottom = 1193.0
2728
grow_horizontal = 2
2829
grow_vertical = 2
29-
scroll_offset = Vector2(-1, -1)
3030
grid_pattern = 1
3131
right_disconnects = true
3232
zoom_min = 0.25
@@ -86,6 +86,12 @@ layout_mode = 2
8686
[node name="UndoRedo" type="Node" parent="."]
8787
script = ExtResource("3")
8888

89+
[node name="OutlineOverlay" type="Control" parent="."]
90+
anchors_preset = 0
91+
offset_right = 40.0
92+
offset_bottom = 40.0
93+
script = ExtResource("5_u5byk")
94+
8995
[connection signal="connection_from_empty" from="." to="." method="request_popup" binds= [true]]
9096
[connection signal="connection_request" from="." to="." method="on_connect_node"]
9197
[connection signal="connection_to_empty" from="." to="." method="request_popup" binds= [false]]
@@ -95,7 +101,6 @@ script = ExtResource("3")
95101
[connection signal="node_deselected" from="." to="." method="_on_GraphEdit_node_unselected"]
96102
[connection signal="node_selected" from="." to="." method="_on_GraphEdit_node_selected"]
97103
[connection signal="paste_nodes_request" from="." to="." method="paste"]
98-
[connection signal="visibility_changed" from="." to="." method="_on_GraphEdit_visibility_changed"]
99104
[connection signal="timeout" from="Timer" to="." method="do_send_changed_signal"]
100105
[connection signal="text_changed" from="GraphUI/SubGraphUI/Label" to="." method="_on_Label_text_changed"]
101106
[connection signal="descriptions_changed" from="GraphUI/SubGraphUI/Description" to="." method="_on_Description_descriptions_changed"]
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
extends Control
2+
3+
# Connection lines outline overlay
4+
5+
var should_draw_overlay : bool = true
6+
7+
func _ready() -> void:
8+
# Move behind connection lines to make outlines visible in comment nodes
9+
owner.child_order_changed.connect(_move_behind_connections.call_deferred)
10+
11+
owner.begin_node_move.connect(func(): should_draw_overlay = false)
12+
owner.end_node_move.connect(func():should_draw_overlay = true)
13+
14+
15+
func _move_behind_connections() -> void:
16+
owner.move_child(self,owner.get_node("_connection_layer").get_index()-1)
17+
18+
19+
func _draw() -> void:
20+
var reroute_positions : PackedVector2Array
21+
var reroute_colors : PackedColorArray
22+
23+
var zoom : float = owner.zoom
24+
if owner.active_connections.size() and should_draw_overlay:
25+
for line in owner.active_connections:
26+
if owner.has_node(NodePath(line.to_node)) and owner.has_node(NodePath(line.to_node)):
27+
var from_node : GraphNode = owner.get_node(NodePath(line.from_node))
28+
var to_node : GraphNode = owner.get_node(NodePath(line.to_node))
29+
if from_node and to_node:
30+
var from_pos : Vector2 = from_node.get_output_port_position(line.from_port)*zoom + from_node.position
31+
var to_pos : Vector2 = to_node.get_input_port_position(line.to_port)*zoom + to_node.position
32+
33+
var line_width : float = max(10, owner.connection_lines_thickness)
34+
line_width = line_width + zoom if zoom < 0.9 else line_width * zoom
35+
draw_polyline(owner._get_connection_line(from_pos, to_pos),
36+
to_node.get_input_port_color(line.to_port).darkened(0.35),
37+
line_width, true)
38+
39+
var reroute_highlight_color : Color = from_node.get_output_port_color(line.from_port).darkened(0.35)
40+
for node in [from_node, to_node]:
41+
if node is MMGraphReroute and node.get_rect().get_center() not in reroute_positions:
42+
reroute_positions.append(node.get_rect().get_center())
43+
reroute_colors.append(reroute_highlight_color)
44+
45+
# draw reroute highlights
46+
for p in len(reroute_positions):
47+
draw_circle(reroute_positions[p], 20.0*zoom, reroute_colors[p], true, -1, true)
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
uid://cbvroxeqaaopc

0 commit comments

Comments
 (0)