bglga/README.md
Harald Hoyer c6dcf9d728 feat: add take-screenshots flake app for headless capture
Expose a `nix run .#take-screenshots` app that runs a binary inside an
Xvfb display with lavapipe software Vulkan and captures PNG snapshots
via ImageMagick. Useful for smoke-testing the Bevy renderer in
environments without a GPU (CI, sandboxed shells, agents).

Usage:
  nix run .#take-screenshots -- EXE NUM DELAY_START PAUSE_INBETWEEN [OUTPUT_DIR]

The script picks the first free :N >= 99, locates the lavapipe ICD via
pkgs.mesa with a fallback to /run/opengl-driver (NixOS), reuses the
dev shell's runtimeLibs in LD_LIBRARY_PATH, and traps EXIT for cleanup.

README updated with usage and a worked example.
2026-05-06 21:01:14 +02:00

1.9 KiB

bglga

This project is a simple Galaga-like space shooter game built using the Bevy engine.

Current State

The game features:

  • A player ship at the bottom of the screen that can move left and right.
  • Shooting bullets upward using the spacebar or up arrow key.
  • Enemy ships that spawn at the top and move downward.
  • Collision detection between bullets and enemies.
  • Collision detection between the player and enemies.
  • A player lives system (starting with 3 lives).
  • Player destruction upon collision.
  • Player respawn after a short delay with temporary invincibility.
  • Remaining lives displayed in the window title.

Controls

  • Move Left: A key or Left Arrow
  • Move Right: D key or Right Arrow
  • Shoot: Spacebar or Up Arrow

How to Compile

nix develop --command bash -c "cargo build"

How to Run

  1. Make sure you have Rust and Nix installed.
  2. Clone the repository.
  3. Navigate to the project directory.
  4. Run the game using the command: nix develop --command bash -c "cargo run"

Headless Screenshots

The flake exposes a take-screenshots app that launches a binary inside an Xvfb display backed by lavapipe (software Vulkan), waits, and captures one or more PNG screenshots. Useful for smoke-testing rendering without a real GPU.

nix run .#take-screenshots -- EXE NUM DELAY_START PAUSE_INBETWEEN [OUTPUT_DIR]
  • EXE — path to the executable to launch
  • NUM — number of screenshots to take
  • DELAY_START — seconds to wait after launch before the first shot
  • PAUSE_INBETWEEN — seconds between consecutive shots
  • OUTPUT_DIR — where to write shot-NNN.png files (default: current directory)

Example, capturing three frames of the game one second apart after a six-second warm-up (Bevy + software Vulkan needs roughly that long to render its first frame):

cargo build
nix run .#take-screenshots -- ./target/debug/bglga 3 6 1 ./shots