mirror of
https://github.com/Relintai/material-maker.git
synced 2024-12-23 21:16:54 +01:00
120 lines
3.7 KiB
GDScript
120 lines
3.7 KiB
GDScript
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
|