54 lines
2.2 KiB
GDScript
54 lines
2.2 KiB
GDScript
extends SceneTree
|
|
## Erzeugt die Bauteil-Dateien des Bauen-Modus aus core/editor/bau_katalog.gd:
|
|
## GLB (Client) · Trimesh-JSON (Server/Client/Editor) · Registry-Fragment (Server)
|
|
##
|
|
## Aufruf aus dem Editor-Repo (Pfade = Repo-Wurzeln der Geschwister-Klone):
|
|
## godot --headless --path . --script res://tools/gen_bauteile.gd -- \
|
|
## --client ../scopedvr-client --server ../scopedvr-match-server
|
|
## Danach im Match-Server: python3 tools/merge_object_library.py, und die
|
|
## erzeugte library/objects.json in Client + Editor kopieren (tools/sync_objects.sh).
|
|
## Idempotent: dieselbe Katalog-Version erzeugt byte-gleiche Dateien.
|
|
|
|
func _init() -> void:
|
|
var args := OS.get_cmdline_user_args()
|
|
var client := _arg(args, "--client")
|
|
var server := _arg(args, "--server")
|
|
if client.is_empty() or server.is_empty():
|
|
print("FEHLER: --client <Pfad> und --server <Pfad> angeben.")
|
|
quit(2)
|
|
return
|
|
var glb_dir := client.path_join("assets/objekte/military_desert/%s" % BauKatalog.KATEGORIE)
|
|
DirAccess.make_dir_recursive_absolute(glb_dir)
|
|
var kol_dirs := [
|
|
server.path_join("library/kollisions"),
|
|
client.path_join("library/kollisions"),
|
|
ProjectSettings.globalize_path("res://library/kollisions"),
|
|
]
|
|
for d in kol_dirs:
|
|
DirAccess.make_dir_recursive_absolute(d)
|
|
var fragment := {"objects": {}}
|
|
for oid in BauKatalog.oids():
|
|
var err := BauKatalog.glb_schreiben(oid, glb_dir.path_join(oid + ".glb"))
|
|
if err != OK:
|
|
print("FEHLER GLB %s: %d" % [oid, err])
|
|
quit(1)
|
|
return
|
|
var json := JSON.stringify(BauKatalog.kollisions_json(oid))
|
|
for d in kol_dirs:
|
|
var f := FileAccess.open((d as String).path_join(oid + ".json"), FileAccess.WRITE)
|
|
f.store_string(json)
|
|
f.close()
|
|
fragment["objects"][oid] = BauKatalog.registry_eintrag(oid)
|
|
print("%s: %d Dreiecke" % [oid, BauKatalog.dreiecke(oid)])
|
|
var frag_dir := server.path_join("library/objects.d")
|
|
DirAccess.make_dir_recursive_absolute(frag_dir)
|
|
var ff := FileAccess.open(frag_dir.path_join("bauteile.json"), FileAccess.WRITE)
|
|
ff.store_string(JSON.stringify(fragment, " ", false) + "\n")
|
|
ff.close()
|
|
print("Fertig: %d Bauteile." % BauKatalog.oids().size())
|
|
quit(0)
|
|
|
|
|
|
func _arg(args: PackedStringArray, key: String) -> String:
|
|
var i := args.find(key)
|
|
return args[i + 1] if i >= 0 and i + 1 < args.size() else ""
|