89 lines
3.3 KiB
Bash
Executable file
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 ==="
|