-
-
Notifications
You must be signed in to change notification settings - Fork 222
/
start.gd
163 lines (148 loc) · 5.32 KB
/
start.gd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
extends Control
var resource_path : String
@onready var progress_bar = $VBoxContainer/ProgressBar
func _ready():
get_window().size = Vector2(800, 600)
randomize()
set_process(false)
var dir : DirAccess
# TODO: Fix this
if ResourceLoader.exists("res://material_maker/main_window.tscn"):
print("loading MM")
print(size)
if ("--export" in OS.get_cmdline_args()) or ("--export-material" in OS.get_cmdline_args()):
var output = []
match OS.get_name():
"Windows":
var bat_file_path : String = OS.get_system_dir(OS.SYSTEM_DIR_DOWNLOADS)+"\\mm_cd.bat"
var bat_file : FileAccess = FileAccess.open(bat_file_path, FileAccess.WRITE)
if bat_file != null:
bat_file.store_line("cd")
bat_file.close()
OS.execute(bat_file_path, [], output)
#TODO: fix this
#dir.remove(bat_file_path)
#FileAccess.change_dir(output[0].split("\n")[2])
var target : String = "Godot/Godot 4 Standard"
#TODO: fix this
var output_dir : String = "" #DirAccess.get_current_dir()
var texture_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
texture_size = int(OS.get_cmdline_args()[i])
if texture_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("*", ".*")
dir = DirAccess.open(basedir)
if dir.is_open():
var regex : RegEx = RegEx.new()
regex.compile("^"+basename+"$")
dir.list_dir_begin() # TODOGODOT4 fill missing arguments https://github.com/godotengine/godot/pull/40547
var file_name = dir.get_next()
while file_name != "":
if regex.search(file_name) and 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:
resource_path = "res://material_maker/main_window.tscn"
else:
resource_path = "res://demo/demo.tscn"
await get_tree().process_frame
var locale = load("res://material_maker/locale/locale.gd").new()
locale.read_translations()
# TODO: enable threaded loading
if false:
start_ui(ResourceLoader.load(resource_path))
elif ResourceLoader.load_threaded_request(resource_path) == OK: # check for errors
set_process(true)
func start_ui(scene):
if OS.get_name() == "HTML5":
var dialog = load("res://material_maker/windows/accept_dialog/accept_dialog.tscn").instantiate()
dialog.dialog_text = """
This HTML5 version of Material Maker has many limitations (such as lack of export, 16 bits rendering and 3D model painting) and is meant for evaluation only.
If you intend to use this software seriously, it is recommended to download a Windows, MacOS or Linux version.
Note there's a known 3D preview rendering problem in Safari.
"""
add_child(dialog)
await dialog.ask()
var root = get_tree().root
# Remove the current scene
root.remove_child(self)
call_deferred("free")
# Add the next scene
progress_bar.value = 100.0
var instance = scene.instantiate()
root.add_child(instance)
var wait : float = 0.0
func _process(delta) -> void:
wait += delta
if wait < 0.01:
return
wait = 0.0
var percent : Array = []
var status = ResourceLoader.load_threaded_get_status(resource_path, percent)
match status:
ResourceLoader.THREAD_LOAD_IN_PROGRESS:
progress_bar.value = percent[0]*100
ResourceLoader.THREAD_LOAD_LOADED:
set_process(false)
start_ui(ResourceLoader.load_threaded_get(resource_path))
_:
print("error "+str(status))
func export_files(files, output_dir, target, image_size) -> void:
$VBoxContainer/ProgressBar.min_value = 0
$VBoxContainer/ProgressBar.max_value = files.size()
$VBoxContainer/ProgressBar.value = 0
for f in files:
var gen = await mm_loader.load_gen(f)
if gen != null:
add_child(gen)
for c in gen.get_children():
if c.has_method("export_material"):
if c.has_method("get_export_profiles"):
if c.get_export_profiles().find(target) == -1:
show_error("ERROR: Unsupported target '%s', please select from the following:\n%s" % [target, "\n".join(c.get_export_profiles())])
continue
var export_msg = "Exporting %s to %s..." % [f.get_file(), output_dir]
$VBoxContainer/Label.text = export_msg
print(export_msg)
var prefix : String = output_dir+"/"+f.get_file().get_basename()
await c.export_material(prefix, target, image_size)
gen.queue_free()
$VBoxContainer/ProgressBar.value += 1
get_tree().quit()
func show_error(message : String):
print(message)
$ErrorPanel.show()
$ErrorPanel/Label.text = message
func _on_Patreon_gui_input(event):
if event is InputEventMouseButton and event.pressed:
OS.shell_open("https://www.patreon.com/rodzlabs")