From e127c814f5be0022d8d3d20c5121cab680148db2 Mon Sep 17 00:00:00 2001 From: easynam Date: Thu, 7 Oct 2021 20:06:35 +0100 Subject: [PATCH] Add hacky implementation of group instances Adds a button that makes groups with names like copy_X copy their contents from other groups. --- .../panels/graph_edit/graph_edit.gd | 37 +++++++++++++++++++ .../panels/graph_edit/graph_edit.tscn | 10 ++++- 2 files changed, 46 insertions(+), 1 deletion(-) diff --git a/material_maker/panels/graph_edit/graph_edit.gd b/material_maker/panels/graph_edit/graph_edit.gd index 3ca6764a..42d8bde0 100644 --- a/material_maker/panels/graph_edit/graph_edit.gd +++ b/material_maker/panels/graph_edit/graph_edit.gd @@ -708,3 +708,40 @@ func on_drop_image_file(file_name : String) -> void: func _on_Description_descriptions_changed(short_description, long_description): generator.shortdesc = short_description generator.longdesc = long_description + + +func find_graph_with_label(label: String) -> GraphNode: + for c in get_children(): + if c is GraphNode and c.generator is MMGenGraph && c.generator.get_type_name() == label: + return c + return null + +func _on_ButtonRegenCopies_pressed(): + for c in get_children(): + if c is GraphNode and c.generator is MMGenGraph and c.generator.get_type_name().begins_with("copy_"): + var gen = c.generator + var copy_from_label = gen.get_type_name().substr(5,-1) + var label = gen.get_type_name() + + var copy_from = find_graph_with_label(copy_from_label) + + if copy_from == null: + continue + + var data = copy_from.generator._serialize({}) + var param_data = copy_from.generator.get_node("gen_parameters")._serialize({}) + + for n in gen.get_children(): + gen.remove_child(n) + n.queue_free() + + data.label = label + gen._deserialize(data) + + var params = gen.get_node("gen_parameters") + params._deserialize(param_data) + gen.fix_remotes() + + var main_window = get_node("/root/MainWindow") + main_window.hierarchy.update_from_graph_edit(self) + update() diff --git a/material_maker/panels/graph_edit/graph_edit.tscn b/material_maker/panels/graph_edit/graph_edit.tscn index 4f07e484..85796c05 100644 --- a/material_maker/panels/graph_edit/graph_edit.tscn +++ b/material_maker/panels/graph_edit/graph_edit.tscn @@ -44,7 +44,7 @@ one_shot = true [node name="GraphUI" type="HBoxContainer" parent="."] anchor_left = 1.0 anchor_right = 1.0 -margin_left = -294.0 +margin_left = -698.0 margin_top = 11.0 margin_bottom = 24.0 alignment = 2 @@ -92,6 +92,13 @@ margin_bottom = 24.0 hint_tooltip = "Show hierarchy" icon = SubResource( 4 ) +[node name="ButtonRegenCopies" type="Button" parent="GraphUI"] +margin_left = 551.0 +margin_right = 682.0 +margin_bottom = 24.0 +hint_tooltip = "Copies the contents of groups named X to any other groups named copy_X" +text = "Regenerate Copies" + [node name="Control" type="Control" parent="GraphUI"] margin_left = 282.0 margin_right = 296.0 @@ -116,3 +123,4 @@ script = ExtResource( 3 ) [connection signal="toggled" from="GraphUI/SubGraphUI/ButtonTransmitsSeed" to="." method="_on_ButtonTransmitsSeed_toggled"] [connection signal="pressed" from="GraphUI/SubGraphUI/ButtonUp" to="." method="on_ButtonUp_pressed"] [connection signal="pressed" from="GraphUI/ButtonShowTree" to="." method="_on_ButtonShowTree_pressed"] +[connection signal="pressed" from="GraphUI/ButtonRegenCopies" to="." method="_on_ButtonRegenCopies_pressed"]