Cargo features cannot be scoped to a build profile, so add a `dev` feature
that pulls in `bevy/debug` and `bevy/track_location` and make it a default
feature. This surfaces real type names and source locations in ECS panics
(e.g. B0001 query conflicts) for normal `cargo build` / `cargo run` /
`cargo test`, at the cost of a small overhead. Shipping builds opt out
with `--release --no-default-features`.
Removes the now-redundant `[dev-dependencies] bevy = { features = ["debug"] }`
override, since the default feature already covers test builds.
2.3 KiB
2.3 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 cargo build
The dev cargo feature is enabled by default and turns on bevy/debug and
bevy/track_location so ECS panics (e.g. B0001 query conflicts) report
real type names and source locations. For a shipping release build, disable
it:
nix develop --command cargo build --release --no-default-features
How to Test
nix develop --command cargo test
How to Run
- Make sure you have Rust and Nix installed.
- Clone the repository.
- Navigate to the project directory.
- Run the game using the command:
nix develop --command 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 launchNUM— number of screenshots to takeDELAY_START— seconds to wait after launch before the first shotPAUSE_INBETWEEN— seconds between consecutive shotsOUTPUT_DIR— where to writeshot-NNN.pngfiles (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):
nix develop --command cargo build
nix run .#take-screenshots -- ./target/debug/bglga 3 6 1 ./shots