From e57e5ba37dce521f9191c18dfb4071737e1b1b56 Mon Sep 17 00:00:00 2001 From: LMW Date: Sat, 13 Jun 2026 00:14:08 +0800 Subject: [PATCH] Added support for using export nodes within subgraphs --- material_maker/main_window.gd | 11 +++++++---- material_maker/panels/graph_edit/graph_edit.gd | 18 ++++++++++++------ parse_args.gd | 17 ++++++++++++----- 3 files changed, 31 insertions(+), 15 deletions(-) diff --git a/material_maker/main_window.gd b/material_maker/main_window.gd index 1df3ba3de..bc401fe70 100644 --- a/material_maker/main_window.gd +++ b/material_maker/main_window.gd @@ -450,12 +450,15 @@ func quick_export() -> void: var exports : Array var has_unconnected_exports : bool = false - for g in graph_edit.top_generator.get_children(): - if g.has_method("export_material") and !g.has_method("get_export_profiles"): - if g.get_source(0) != null: - exports.append(g) + var stack : Array[MMGenBase] = [graph_edit.top_generator] + while stack.size(): + var node : MMGenBase = stack.pop_back() + if node.has_method("export_material") and not node.has_method("get_export_profiles"): + if node.get_source(0) != null: + exports.append(node) else: has_unconnected_exports = true + stack.append_array(node.get_children()) # No export nodes if not exports.size(): diff --git a/material_maker/panels/graph_edit/graph_edit.gd b/material_maker/panels/graph_edit/graph_edit.gd index 739a37277..296c4e4c9 100644 --- a/material_maker/panels/graph_edit/graph_edit.gd +++ b/material_maker/panels/graph_edit/graph_edit.gd @@ -867,12 +867,18 @@ func get_material_node() -> MMGenMaterial: return null func export_material(export_prefix, profile) -> void: - var exports : Array - for g in top_generator.get_children(): - if g.has_method("get_export_profiles"): - await g.export_material(export_prefix, profile) - elif g.has_method("export_material"): - exports.append(g) + var exports : Array[MMGenBase] + + var material_node : MMGenMaterial = get_material_node() + if material_node != null: + await material_node.export_material(export_prefix, profile) + + var stack : Array[MMGenBase] = [top_generator] + while stack.size(): + var node : MMGenBase = stack.pop_back() + if node.has_method("export_material"): + exports.append(node) + stack.append_array(node.get_children()) # Show progress for additional exports (export nodes) var dim_color_rect = ColorRect.new() diff --git a/parse_args.gd b/parse_args.gd index 6ba1acfa2..cf37b0329 100644 --- a/parse_args.gd +++ b/parse_args.gd @@ -54,7 +54,10 @@ func export_files(files, output_dir, target, target_file, image_size) -> void: var mat_author_lower = name_to_lower(mat_author) if gen != null: add_child(gen) - for c in gen.get_children(): + var gen_stack : Array[MMGenBase] = [gen] + while gen_stack.size(): + var c : MMGenBase = gen_stack.pop_back() + gen_stack.append_array(c.get_children()) if c.has_method("export_material"): var best_target : String = target if c.has_method("get_export_profiles"): @@ -68,18 +71,22 @@ func export_files(files, output_dir, target, target_file, image_size) -> void: if best_target == "": continue print("Using target ", best_target, " (and not ", target, ")") - var target_file_name = target_file + var target_file_name : String = target_file target_file_name = target_file_name.replace("%f", basename) target_file_name = target_file_name.replace("%N", mat_name) target_file_name = target_file_name.replace("%A", mat_author) target_file_name = target_file_name.replace("%n", mat_name_lower) target_file_name = target_file_name.replace("%a", mat_author_lower) - var prefix : String = output_dir+"/"+target_file_name - print("Exporting %s to %s..." % [f.get_file(), prefix]) + var prefix : String = output_dir.path_join(target_file_name) + if c.has_method("get_export_profiles"): + print("Exporting Material %s to %s..." % [f.get_file(), prefix]) + else: + var file_name : String = c.interpret_file_name(c.parameters.suffix, prefix.get_base_dir()) + print("Saving additional export %s" % file_name) await c.export_material(prefix, best_target, image_size, true) - print("Done") if from_website: export_list.append("\""+prefix.get_file()+"\": \""+mat_name+","+mat_author+"\"") + print("Done") gen.queue_free() if not export_list.is_empty(): print(",\n".join(export_list))