McRogueFace/docs/cookbook/procgen/run_all_demos.py
2026-01-13 19:42:37 -05:00

83 lines
2.3 KiB
Python

"""Run all procgen demos and capture screenshots.
Execute this script from the build directory.
"""
import os
import sys
import subprocess
DEMOS = [
"01_heightmap_hills.py",
"02_heightmap_noise.py",
"03_heightmap_operations.py",
"04_heightmap_transforms.py",
"05_heightmap_erosion.py",
"06_heightmap_voronoi.py",
"07_heightmap_bezier.py",
"08_heightmap_thresholds.py",
"10_bsp_dungeon.py",
"11_bsp_traversal.py",
"12_bsp_adjacency.py",
"13_bsp_shrink.py",
"14_bsp_manual_split.py",
"20_noise_algorithms.py",
"21_noise_parameters.py",
"30_advanced_cave_dungeon.py",
"31_advanced_island.py",
"32_advanced_city.py",
"33_advanced_caves.py",
"34_advanced_volcanic.py",
]
def main():
script_dir = os.path.dirname(os.path.abspath(__file__))
build_dir = os.path.abspath(os.path.join(script_dir, "../../../build"))
if not os.path.exists(os.path.join(build_dir, "mcrogueface")):
print(f"Error: mcrogueface not found in {build_dir}")
print("Please run from the build directory or adjust paths.")
return 1
os.chdir(build_dir)
success = 0
failed = 0
for demo in DEMOS:
demo_path = os.path.join(script_dir, demo)
if not os.path.exists(demo_path):
print(f"SKIP: {demo} (not found)")
continue
print(f"Running: {demo}...", end=" ", flush=True)
try:
result = subprocess.run(
["./mcrogueface", "--headless", "--exec", demo_path],
timeout=30,
capture_output=True,
text=True
)
# Check if screenshot was created
png_name = f"procgen_{demo.replace('.py', '.png')}"
if os.path.exists(png_name):
print(f"OK -> {png_name}")
success += 1
else:
print(f"FAIL (no screenshot)")
if result.stderr:
print(f" stderr: {result.stderr[:200]}")
failed += 1
except subprocess.TimeoutExpired:
print("TIMEOUT")
failed += 1
except Exception as e:
print(f"ERROR: {e}")
failed += 1
print(f"\nResults: {success} passed, {failed} failed")
return 0 if failed == 0 else 1
if __name__ == "__main__":
sys.exit(main())