#!/usr/bin/env bash # Identitäts-Vertrag KOLLISION ALLER OBJEKTE (Military-Pack-Umstellung, 25.10.2026): # JEDES Registry-Objekt läuft durch die Kollider-Bauer aller drei Projekte — # Editor (KolliderBau), Quest-Client (svmap_world) und Match-Server (svmap_loader). # Die Probe (tests/probe_kollision_alle_ident.gd) druckt je Objekt # `IDENT k_=||`; der Runner verlangt IDENTISCHE Zeilen # über alle drei Projekte (Trimesh, Verbund, Stamm und none verhalten sich überall gleich). # # Environment: # GODOT Godot-Binary (Default: $HOME/bin/godot4, dann $PATH) # SVR_CLIENT_DIR Client-Projektordner (Default: ../scopedvr-client) # SVR_SERVER_DIR Server-Projektordner (Default: ../scopedvr-match-server) # Exit 0 = Identität bestätigt. set -u if [ -n "${GODOT:-}" ]; then : elif [ -x "$HOME/bin/godot4" ]; then GODOT="$HOME/bin/godot4" elif command -v godot4 >/dev/null 2>&1; then GODOT=$(command -v godot4) else echo "FAIL: Kein Godot gefunden — GODOT= setzen." >&2 exit 1 fi EDITOR_DIR="$(cd "$(dirname "$0")/.." && pwd)" CLIENT_DIR="${SVR_CLIENT_DIR:-$EDITOR_DIR/../scopedvr-client}" SERVER_DIR="${SVR_SERVER_DIR:-$EDITOR_DIR/../scopedvr-match-server}" for d in "$CLIENT_DIR" "$SERVER_DIR"; do if [ ! -f "$d/project.godot" ]; then echo "FAIL: Projekt nicht gefunden: $d" >&2 exit 1 fi done export GODOT_SILENCE_ROOT_WARNING=1 # Server-Projekt: im -s-Modus NICHT hosten (Testclient-Modus, wie test_svmap). export MATCHD_NO_HOST=1 LOGDIR="${SVR_KOLL_LOGDIR:-/tmp/svr_koll_ident_logs_$$}" mkdir -p "$LOGDIR" PROBE="$EDITOR_DIR/tests/probe_kollision_alle_ident.gd" fail=0 for name in editor client server; do case "$name" in editor) DIR="$EDITOR_DIR" ;; client) DIR="$CLIENT_DIR" ;; server) DIR="$SERVER_DIR" ;; esac echo "== Identitäts-Probe: $name ($DIR) ==" "$GODOT" --headless --path "$DIR" -s "$PROBE" > "$LOGDIR/$name.log" 2>&1 code=$? grep -E "^IDENT [a-z_0-9]+=" "$LOGDIR/$name.log" > "$LOGDIR/$name.ident" if [ $code -ne 0 ]; then fail=1 echo "FAIL: $name-Probe rot (exit=$code):" >&2 cat "$LOGDIR/$name.log" >&2 fi done echo "== Vergleich ==" if ! diff -u "$LOGDIR/editor.ident" "$LOGDIR/client.ident"; then echo "FAIL: Editor ↔ Client weichen ab." >&2 fail=1 fi if ! diff -u "$LOGDIR/editor.ident" "$LOGDIR/server.ident"; then echo "FAIL: Editor ↔ Server weichen ab." >&2 fail=1 fi n=$(wc -l < "$LOGDIR/editor.ident") if [ "$n" -lt 400 ]; then echo "FAIL: Zu wenige IDENT-Zeilen ($n) — Proben gecrasht." >&2 fail=1 fi if [ $fail -eq 0 ]; then echo "ALL OK — Identität Editor = Client = Server ($n Zeilen)." exit 0 fi exit 1