magicciv/tools/screenshot.sh
Natalie a257a6fbc5 fix(@projects/magic-civilization): 🐛 handle flatpak sandboxed env vars
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-05-10 03:23:31 -07:00

89 lines
3.3 KiB
Bash
Executable file

#!/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"
# flatpak sandboxes env by default — outer WAYLAND_DISPLAY/XDG_RUNTIME_DIR
# are NOT visible inside the sandbox without explicit propagation. Mirror
# the pattern in tools/autoplay-batch.sh weston mode.
WAYLAND_SOCKET="${WAYLAND_DISPLAY:-wayland-0}"
XDG_RUNTIME_DIR="${XDG_RUNTIME_DIR:-/run/user/$(id -u)}"
XDG_RUNTIME_DIR="$XDG_RUNTIME_DIR" \
timeout 60 flatpak run --user \
--socket=wayland \
--filesystem=xdg-run/${WAYLAND_SOCKET} \
--unset-env=DISPLAY \
--env=WAYLAND_DISPLAY="$WAYLAND_SOCKET" \
--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" \
--display-driver wayland \
--rendering-driver opengl3 \
--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 ==="