Files
wds/tools/build-dialogues.sh
T
2026-06-13 02:48:03 +02:00

84 lines
2.4 KiB
Bash
Executable File

#!/usr/bin/env bash
#
# Baut alle Ink-Dialoge zu .ink.json, die das Spiel lesen kann.
#
# Für die Autorin: Schreib deine Dialoge als .ink-Dateien in
# assets/interactions/
# und führ danach dieses Skript aus:
# ./tools/build-dialogues.sh
# Fertig — das Spiel liest die erzeugten .ink.json.
#
# Standardmäßig wird nur neu gebaut, was sich seit dem letzten Mal
# geändert hat. Mit -f / --force wird alles neu gebaut.
set -euo pipefail
# Repo-Wurzel relativ zum Skript bestimmen — egal, von wo aufgerufen.
script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
root="$(cd "$script_dir/.." && pwd)"
ink_dir="$root/assets/interactions"
force=0
case "${1:-}" in
-f|--force) force=1 ;;
"") ;;
*) echo "Unbekannte Option: $1 (nur -f/--force)" >&2; exit 2 ;;
esac
# inklecate finden: $INKLECATE → mitgeliefertes tools/inklecate → PATH.
find_inklecate() {
if [ -n "${INKLECATE:-}" ] && [ -x "$INKLECATE" ]; then
echo "$INKLECATE"; return 0
fi
if [ -x "$script_dir/inklecate" ]; then
echo "$script_dir/inklecate"; return 0
fi
if command -v inklecate >/dev/null 2>&1; then
command -v inklecate; return 0
fi
return 1
}
if ! inklecate="$(find_inklecate)"; then
cat >&2 <<'EOF'
Fehler: inklecate nicht gefunden.
Lege das Linux-Binary nach tools/inklecate (chmod +x),
setze $INKLECATE auf den Pfad, oder installiere es in den PATH.
Quelle: https://github.com/inkle/ink/releases
EOF
exit 1
fi
if [ ! -d "$ink_dir" ]; then
echo "Kein Dialog-Ordner: $ink_dir" >&2
exit 1
fi
built=0 skipped=0 failed=0
shopt -s nullglob
for src in "$ink_dir"/*.ink; do
out="${src%.ink}.ink.json"
name="$(basename "$src")"
# Inkrementell: überspringen, wenn Ausgabe existiert und neuer ist.
if [ "$force" -eq 0 ] && [ -f "$out" ] && [ "$out" -nt "$src" ]; then
printf ' aktuell %s\n' "$name"
skipped=$((skipped + 1))
continue
fi
# inklecate-Ausgabe einsammeln; nur bei Problemen/Warnungen zeigen.
if log="$("$inklecate" -o "$out" "$src" 2>&1)"; then
printf ' gebaut %s\n' "$name"
built=$((built + 1))
[ -n "$log" ] && printf '%s\n' "$log" | sed 's/^/ /'
else
printf ' FEHLER %s\n' "$name"
printf '%s\n' "$log" | sed 's/^/ /'
failed=$((failed + 1))
fi
done
echo "—— $built gebaut, $skipped aktuell, $failed fehlgeschlagen ——"
[ "$failed" -eq 0 ]