extends SceneTree ## Erzeugt die Bauteil-Dateien des Bauen-Modus aus src/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 und --server 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 ""