#!/usr/bin/env bash # Screenshot capture + SCP to plum pipeline # Usage: ./tools/screenshot.sh [name] [scene] [delay] # name: screenshot filename (default: "screenshot") # scene: "main_menu" | "game_setup" (default: "main_menu") # delay: seconds to wait before capture (default: 4) set -uo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PROJECT_DIR="$(dirname "$SCRIPT_DIR")" GODOT_USERDATA="$HOME/.var/app/org.godotengine.Godot/data/godot/app_userdata/Magic Civilization/screenshots" PLUM_DESKTOP="plum:~/Desktop" NAME="${1:-screenshot}" SCENE="${2:-main_menu}" DELAY="${3:-4}" cd "$PROJECT_DIR" echo "=== Magic Civilization Screenshot ===" echo "Name: $NAME | Scene: $SCENE | Delay: ${DELAY}s" WAYLAND_DISPLAY="${WAYLAND_DISPLAY:-wayland-0}" \ XDG_RUNTIME_DIR="${XDG_RUNTIME_DIR:-/run/user/$(id -u)}" \ timeout 60 flatpak run --user \ --env=SCREENSHOT_DELAY="$DELAY" \ --env=SCREENSHOT_NAME="$NAME" \ --env=SCREENSHOT_SCENE="$SCENE" \ --env=SCREENSHOT_ZOOM_TO="${SCREENSHOT_ZOOM_TO:-}" \ --env=SCREENSHOT_OVERLAY="${SCREENSHOT_OVERLAY:-}" \ --env=FORCE_DISABLE_FOGOFWAR="true" \ org.godotengine.Godot \ --path "$PROJECT_DIR/src/game" \ --rendering-method gl_compatibility \ --fixed-fps 10 2>&1 | tee /tmp/godot_screenshot_log.txt || true # replay_viewer_proof writes multiple named files (no timestamp suffix). # Collect them separately from the standard single-file path. if [ "$SCENE" = "replay_viewer_proof" ]; then mapfile -t PROOF_PATHS < <(ls -t "$GODOT_USERDATA"/p2-46-replay-viewer-*.png 2>/dev/null) if [ "${#PROOF_PATHS[@]}" -eq 0 ]; then echo "ERROR: No p2-46-replay-viewer-*.png found in $GODOT_USERDATA" grep -E "Screenshot|ERROR|SCRIPT" /tmp/godot_screenshot_log.txt | head -10 exit 1 fi if ssh -o ConnectTimeout=3 plum "echo ok" >/dev/null 2>&1; then for p in "${PROOF_PATHS[@]}"; do BASENAME="$(basename "$p")" scp "$p" "$PLUM_DESKTOP/${BASENAME}" && \ echo "Sent to plum: ~/Desktop/${BASENAME}" done else echo "WARNING: plum not reachable, screenshots at:" for p in "${PROOF_PATHS[@]}"; do echo " $p"; done fi echo "=== Done ===" exit 0 fi SCREENSHOT_PATH=$(ls -t "$GODOT_USERDATA"/${NAME}_*.png 2>/dev/null | head -1) if [ -z "$SCREENSHOT_PATH" ] || [ ! -f "$SCREENSHOT_PATH" ]; then echo "ERROR: No screenshot found in $GODOT_USERDATA" grep -E "Screenshot|ERROR|SCRIPT" /tmp/godot_screenshot_log.txt | head -10 exit 1 fi echo "Captured: $SCREENSHOT_PATH ($(du -h "$SCREENSHOT_PATH" | cut -f1))" if ssh -o ConnectTimeout=3 plum "echo ok" >/dev/null 2>&1; then scp "$SCREENSHOT_PATH" "$PLUM_DESKTOP/magic_civ_${NAME}.png" && \ echo "Sent to plum: ~/Desktop/magic_civ_${NAME}.png" else echo "WARNING: plum not reachable, screenshot at: $SCREENSHOT_PATH" fi echo "=== Done ==="