scopedvr-map-editor/tools/gen_bauteile.gd
2026-11-01 19:34:05 +01:00

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 ""