library/objects.json ist generiert: library/objects.d/*.json (ein Fragment pro Kategorie) + tools/merge_object_library.py (idempotent, --check, --aabb-Messung, --new-fragment). base.json = Alt-Bestand (54 Objekte) unveraendert. Beispiel- Kategorie beispiel_fass_01/02 beweist die Kette end-to-end. Doku: docs/objekt_fragmente.md.
83 lines
3.6 KiB
Bash
Executable file
83 lines
3.6 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
# Editor-Sync für die Objekt-Bibliothek (Fundament A6, 19.10.2026).
|
|
#
|
|
# Was das Script macht:
|
|
# 1. Merge im Match-Server-Sibling prüfen (tools/merge_object_library.py --check)
|
|
# 2. library/objects.json in die Editor-Kopie ziehen (Editor-`note` bleibt erhalten)
|
|
# 3. Thumbnails neu rendern (tools/gen_thumbs.gd, 128 px PNG nach library/thumbs/)
|
|
# 4. Objekt-Zahl der Bibliothek ausgeben
|
|
#
|
|
# Aufruf (aus dem Editor-Repo):
|
|
# tools/sync_objects.sh # normal
|
|
# tools/sync_objects.sh --keine-thumbs # nur Kopie + Prüfung (schnell)
|
|
# SCOPEDVR_MATCH_SERVER_DIR=/pfad tools/sync_objects.sh
|
|
#
|
|
# Godot: $GODOT > $HOME/bin/godot4 > godot4 im PATH. Thumbs brauchen echtes
|
|
# Rendering (Display oder xvfb-run) — auf Slys PC als slyphax starten:
|
|
# runuser -u slyphax -- env HOME=/home/slyphax tools/sync_objects.sh
|
|
set -u
|
|
DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
|
EDITOR_JSON="$DIR/library/objects.json"
|
|
THUMBS=1
|
|
[ "${1:-}" = "--keine-thumbs" ] && THUMBS=0
|
|
|
|
# --- Match-Server-Repo finden (Sibling wie in project.godot / glb_quellen) ---
|
|
MS="${SCOPEDVR_MATCH_SERVER_DIR:-}"
|
|
if [ -z "$MS" ]; then
|
|
for k in "$DIR/../scopedvr-match-server" "$DIR/../../scopedvr-match-server"; do
|
|
[ -f "$k/library/objects.json" ] && MS="$(cd "$k" && pwd)" && break
|
|
done
|
|
fi
|
|
if [ -z "$MS" ] || [ ! -f "$MS/library/objects.json" ]; then
|
|
echo "FEHLER: Match-Server-Repo nicht gefunden — SCOPEDVR_MATCH_SERVER_DIR setzen."
|
|
exit 1
|
|
fi
|
|
echo "Match-Server: $MS"
|
|
|
|
# --- 1. Merge-Stand prüfen (Karten sollen nie eine ungemergte Registry ziehen) ---
|
|
if [ -f "$MS/tools/merge_object_library.py" ]; then
|
|
if ! python3 "$MS/tools/merge_object_library.py" --check; then
|
|
echo "FEHLER: objects.json passt nicht zu den Fragmenten — erst im Match-Server mergen:"
|
|
echo " python3 tools/merge_object_library.py"
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
# --- 2. Kopie ziehen, Editor-`note` schützen (wie objects_pipeline.gd::_registry_sync) ---
|
|
python3 - "$MS/library/objects.json" "$EDITOR_JSON" <<'PY'
|
|
import json, sys
|
|
src, dst = sys.argv[1], sys.argv[2]
|
|
neu = json.load(open(src, encoding="utf-8"))
|
|
try:
|
|
alt = json.load(open(dst, encoding="utf-8"))
|
|
if isinstance(alt.get("note"), str) and alt["note"]:
|
|
neu["note"] = alt["note"]
|
|
except FileNotFoundError:
|
|
pass
|
|
with open(dst, "w", encoding="utf-8") as fh:
|
|
json.dump(neu, fh, ensure_ascii=False, indent=2)
|
|
fh.write("\n")
|
|
print("kopiert: %s -> %s (%d Objekte)" % (src, dst, len(neu.get("objects", {}))))
|
|
PY
|
|
|
|
# --- 3. Thumbs rendern ---
|
|
if [ "$THUMBS" = "1" ]; then
|
|
GODOT_BIN="${GODOT:-}"
|
|
[ -z "$GODOT_BIN" ] && [ -x "$HOME/bin/godot4" ] && GODOT_BIN="$HOME/bin/godot4"
|
|
[ -z "$GODOT_BIN" ] && command -v godot4 >/dev/null 2>&1 && GODOT_BIN="godot4"
|
|
[ -z "$GODOT_BIN" ] && command -v godot >/dev/null 2>&1 && GODOT_BIN="godot"
|
|
if [ -z "$GODOT_BIN" ]; then
|
|
echo "WARNUNG: kein Godot gefunden — Thumbs übersprungen (GODOT=/pfad setzen)."
|
|
else
|
|
ARGS=(--rendering-driver opengl3 --path "$DIR" --script res://tools/gen_thumbs.gd)
|
|
if [ -n "${DISPLAY:-}" ] || [ -n "${WAYLAND_DISPLAY:-}" ]; then
|
|
echo "Thumbs: $GODOT_BIN ${ARGS[*]}"
|
|
GODOT_SILENCE_ROOT_WARNING=1 "$GODOT_BIN" "${ARGS[@]}" || { echo "FEHLER: Thumb-Lauf fehlgeschlagen."; exit 1; }
|
|
else
|
|
echo "Thumbs: xvfb-run -a $GODOT_BIN ${ARGS[*]}"
|
|
GODOT_SILENCE_ROOT_WARNING=1 xvfb-run -a "$GODOT_BIN" "${ARGS[@]}" || { echo "FEHLER: Thumb-Lauf fehlgeschlagen."; exit 1; }
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
echo "FERTIG — Bibliothek im Editor: $(python3 -c "import json;print(len(json.load(open('$EDITOR_JSON'))['objects']))") Objekte, Thumbs: $(ls "$DIR/library/thumbs" 2>/dev/null | grep -c '\.png$') PNG"
|