extends Control var loader = null onready var progress_bar = $VBoxContainer/ProgressBar func _ready(): set_process(false) var path : String if Directory.new().file_exists("res://material_maker/main_window.tscn"): if OS.get_cmdline_args().size() > 0 && OS.get_cmdline_args()[0] == "--export": var output = [] var dir : Directory = Directory.new() match OS.get_name(): "Windows": var bat_file_path : String = OS.get_system_dir(OS.SYSTEM_DIR_DOWNLOADS)+"\\mm_cd.bat" var bat_file : File = File.new() bat_file.open(bat_file_path, File.WRITE) bat_file.store_line("cd") bat_file.close() OS.execute(bat_file_path, [], true, output) dir.remove(bat_file_path) dir.change_dir(output[0].split("\n")[2]) var target : String = "Godot" var output_dir : String = dir.get_current_dir() var size : int = 0 var files : Array = [] var i = 1 while i < OS.get_cmdline_args().size(): match OS.get_cmdline_args()[i]: "-t", "--target": i += 1 target = OS.get_cmdline_args()[i] "-o", "--output-dir": i += 1 output_dir = OS.get_cmdline_args()[i] "--size": i += 1 size = int(OS.get_cmdline_args()[i]) if size < 0: show_error("ERROR: incorrect size "+OS.get_cmdline_args()[i]) return _: files.push_back(OS.get_cmdline_args()[i]) i += 1 if !dir.dir_exists(output_dir): show_error("ERROR: Output directory '%s' does not exist" % output_dir) return var expanded_files = [] for f in files: var basedir : String = f.get_base_dir() if basedir == "": basedir = "." var basename : String = f.get_file() if basename.find("*") != -1: basename = basename.replace("*", ".*") if dir.open(basedir) == OK: var regex : RegEx = RegEx.new() regex.compile("^"+basename+"$") dir.list_dir_begin() var file_name = dir.get_next() while file_name != "": if regex.search(file_name) && file_name.get_extension() == "ptex": expanded_files.push_back(basedir+"/"+file_name) file_name = dir.get_next() else: expanded_files.push_back(f) export_files(expanded_files, output_dir, target, size) return else: path = "res://material_maker/main_window.tscn" else: path = "res://demo/demo.tscn" loader = ResourceLoader.load_interactive(path) if loader == null: # check for errors print("error") queue_free() set_process(true) func _process(_delta) -> void: var err = loader.poll() if err == ERR_FILE_EOF: var resource = loader.get_resource() var scene = resource.instance() get_node("/root").add_child(scene) queue_free() elif err == OK: var progress = float(loader.get_stage()) / loader.get_stage_count() progress_bar.value = 100.0*progress else: # error during loading print("error") queue_free() func export_files(files, output_dir, target, size) -> void: $VBoxContainer/ProgressBar.min_value = 0 $VBoxContainer/ProgressBar.max_value = files.size() $VBoxContainer/ProgressBar.value = 0 for f in files: var gen = mm_loader.load_gen(f) if gen != null: add_child(gen) for c in gen.get_children(): if c.has_method("get_export_profiles"): if c.get_export_profiles().find(target) == -1: show_error("ERROR: Unsupported target %s"+target) return $VBoxContainer/Label.text = "Exporting "+f.get_file() var prefix : String = output_dir+"/"+f.get_file().get_basename() var result = c.export_material(prefix, target, size) while result is GDScriptFunctionState: result = yield(result, "completed") break gen.queue_free() $VBoxContainer/ProgressBar.value += 1 get_tree().quit() func show_error(message : String): $ErrorPanel.show() $ErrorPanel/Label.text = message