- 423 Objekte in 19 deutschen Kategorien (Panzer, Radfahrzeuge, Flugzeuge, Gebaeude, Zelte, Tuerme, Mauern, Sperren, Kisten, Technik, Felsen, Boden, Decals ...); Gruppen "Bauwerke" und "Kisten & Barrieren" samt Test-Asset-Namenslisten entfernt - LibraryBrowser: Gruppen/Namen aus dem Manifest (kategorie, name_de), unbekannte Kategorien bekommen automatisch eine eigene Gruppe - Thumbs neu, library/ synchronisiert (inkl. neuer Kollision) - Neue Identitaetsprobe: Kollision ALLER Objekte Editor = Client = Server - Tests auf Pack-Objekte umgestellt Co-Authored-By: Claude <noreply@anthropic.com>
78 lines
2.6 KiB
Bash
Executable file
78 lines
2.6 KiB
Bash
Executable file
#!/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_<oid>=<Formen>|<Typen>|<AABB>`; 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=<pfad> 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
|