#!/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 ]