2V2-e.2: Godot consumer of the 3D draw commands, offline screenshot
python_3d_surface.gd turns RenderGame's recorded draws into meshes under a camera read back from SetPerspective; textures come from the 40250 packs. GetFarClip and the CMapManager ctor ported verbatim. Until the environment is ported, lit draws with no light/ambient are shown unshaded (stand-in). script/python_game_render_test.sh runs system.py login -> select -> game against port_fake_login_server (or --live via MT_LIVE_*) and screenshots. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
5bfa13c5cc
commit
1fe8a4b643
Executable
+61
@@ -0,0 +1,61 @@
|
||||
#!/usr/bin/env bash
|
||||
# 2V2-e: the ported client (system.py in Godot) logs in, enters the game and draws RenderGame's
|
||||
# commands; project/python_game_render_test.gd takes the screenshot and writes report.json.
|
||||
#
|
||||
# script/python_game_render_test.sh offline: port_fake_login_server on loopback
|
||||
# script/python_game_render_test.sh --live live: MT_LIVE_HOST / MT_LIVE_LOGIN / MT_LIVE_PASSWORD
|
||||
# (+ MT_LIVE_AUTH_PORT / MT_LIVE_GAME_PORT / MT_LIVE_SLOT)
|
||||
#
|
||||
# Credentials are only ever read from the caller's environment; nothing here prints them. Do not add
|
||||
# `set -x`. Needs a windowed Godot (a headless run draws nothing and skips the screenshot checks).
|
||||
# exit: 0 PASS, 1 FAIL, 2 precondition missing.
|
||||
set -euo pipefail
|
||||
set +x
|
||||
|
||||
cd "$(dirname "$0")/.."
|
||||
repo="$PWD"
|
||||
godot_bin="${GODOT:-godot}"
|
||||
output="${MT_RENDER_OUTPUT:-$repo/build/rendering/python-game-$(date +%Y%m%d-%H%M%S)-$$}"
|
||||
mkdir -p "$output"
|
||||
export MT_RENDER_OUTPUT="$output"
|
||||
|
||||
server_pid=""
|
||||
cleanup() {
|
||||
if [ -n "$server_pid" ]; then
|
||||
kill -TERM "$server_pid" 2>/dev/null || true
|
||||
wait "$server_pid" 2>/dev/null || true
|
||||
fi
|
||||
}
|
||||
trap cleanup EXIT
|
||||
|
||||
if [ "${1:-}" = "--live" ]; then
|
||||
if [ -z "${MT_LIVE_HOST:-}" ] || [ -z "${MT_LIVE_LOGIN:-}" ] || [ -z "${MT_LIVE_PASSWORD:-}" ]; then
|
||||
echo "python_game_render_test: --live needs MT_LIVE_HOST, MT_LIVE_LOGIN, MT_LIVE_PASSWORD" >&2
|
||||
exit 2
|
||||
fi
|
||||
else
|
||||
server="$repo/build/extension/src/port/port_fake_login_server"
|
||||
if [ ! -x "$server" ]; then
|
||||
echo "python_game_render_test: build port_fake_login_server first ($server)" >&2
|
||||
exit 2
|
||||
fi
|
||||
fifo="$output/server.ports"
|
||||
"$server" > "$fifo" 2> "$output/server.log" &
|
||||
server_pid=$!
|
||||
for _ in $(seq 50); do
|
||||
[ -s "$fifo" ] && break
|
||||
sleep 0.1
|
||||
done
|
||||
read -r word auth_port game_port < "$fifo" || true
|
||||
if [ "${word:-}" != "ports" ]; then
|
||||
echo "python_game_render_test: the fake server did not start (see $output/server.log)" >&2
|
||||
exit 2
|
||||
fi
|
||||
export MT_LIVE_HOST=127.0.0.1 MT_LIVE_LOGIN=fakeuser MT_LIVE_PASSWORD=fakepass
|
||||
export MT_LIVE_AUTH_PORT="$auth_port" MT_LIVE_GAME_PORT="$game_port" MT_LIVE_SLOT=0
|
||||
fi
|
||||
|
||||
status=0
|
||||
"$godot_bin" --path "$repo/project" --script res://python_game_render_test.gd > "$output/godot.log" 2>&1 || status=$?
|
||||
grep -E "^(ok|FAIL):|python_game_render_test:" "$output/godot.log" || true
|
||||
exit "$status"
|
||||
Reference in New Issue
Block a user