feat: multi-spectrum AI observation + tape recording system
Spectrum system (src/ai/spectrum.rs): - 6 spectrums: materials, temperature, light, entities, density, velocity - Each renders a different ASCII view of the same world state - materials: material display chars + entity chars - temperature: heat levels as .-=+oxX# - light: brightness as .:+oO* - entities: entity positions only, background dots - density: material density as .:+oO# - velocity: entity speed + CA activity as .:+oO, Tape recording (src/ai/tape.rs): - --mode tape CLI with --tape-interval, --tape-output, --tape-json - Records all 6 spectrums + world state every N ticks - Each frame: tick, depth, kills, score, camera, player HP/pos, entity count - Outputs human-readable text and JSON formats Pipe protocol additions: - get_spectrum: single spectrum view by name - get_all_spectrums: all 6 spectrums in one response - Response.spectrums field added Architecture priorities updated: - Graphics mode is PRIMARY renderer - ASCII mode is DEBUG backend - Terminal mode is LEGACY - AI uses multi-spectrum ASCII layers for observation All 171 tests + 14 scenarios pass.
This commit is contained in:
@@ -4,20 +4,50 @@
|
||||
|
||||
```sh
|
||||
cargo build # debug build
|
||||
cargo run --release -- --mode ascii # Vulkan window, ASCII glyphs (default, recommended)
|
||||
cargo run --release -- --mode graphics # Vulkan window, colored cells, 16:9 window (recommended)
|
||||
cargo run -- --mode ascii # Vulkan window, ASCII glyphs (debug build, slower)
|
||||
cargo run -- --mode graphics # Vulkan window, colored cells, 16:9 window (debug build, slower)
|
||||
cargo run -- --mode terminal # ANSI terminal mode
|
||||
cargo run --release -- --mode graphics # Vulkan colored cells (PRIMARY, recommended)
|
||||
cargo run --release -- --mode ascii # Vulkan ASCII glyphs (debug backend)
|
||||
cargo run -- --mode terminal # ANSI terminal mode (legacy)
|
||||
cargo run -- --mode pipe # JSON stdin/stdout for AI agents
|
||||
cargo run -- --mode test # run all JSON scenarios
|
||||
cargo run -- --mode headless --headless-ticks 60 # dump to headless_dump.txt
|
||||
cargo run -- --mode capture --headless-ticks 60 # render graphics-like PNG to capture.png
|
||||
cargo run --release -- --mode benchmark --benchmark-ticks 600 --benchmark-renderer graphics # FPS benchmark
|
||||
cargo run --release -- --mode tape --headless-ticks 300 --tape-interval 10 --tape-output tape.txt --tape-json tape.json # multi-spectrum recording
|
||||
```
|
||||
|
||||
Rust edition 2024, requires rustc >= 1.96. Vulkan 1.2+ required for `ascii`/`graphics` modes (falls back to terminal). Use `--release` for playable frame rates; GPU modes are CPU-bound in debug builds due to the cellular-automaton simulation. The GPU event loop is capped at 60 FPS.
|
||||
|
||||
## Architecture Priorities
|
||||
|
||||
- **Graphics mode** (`--mode graphics`) is the PRIMARY renderer — colored cells, 8x8 px, 16:9 window
|
||||
- **ASCII mode** (`--mode ascii`) is a DEBUG backend — same Vulkan pipeline with glyph atlas
|
||||
- **Terminal mode** (`--mode terminal`) is LEGACY — kept for headless/test compatibility
|
||||
- **AI observation** uses multi-spectrum ASCII layers via pipe protocol:
|
||||
- `materials` — material type per cell
|
||||
- `temperature` — heat levels encoded as characters
|
||||
- `light` — light intensity per cell
|
||||
- `entities` — entity positions and types only
|
||||
- `density` — material density visualization
|
||||
- `velocity` — entity movement speed and CA activity
|
||||
|
||||
## Tape System
|
||||
|
||||
```sh
|
||||
# Record all spectrums every 10 ticks for 300 ticks
|
||||
cargo run --release -- --mode tape --headless-ticks 300 --tape-interval 10 \
|
||||
--tape-output tape.txt --tape-json tape.json
|
||||
```
|
||||
|
||||
Each tape frame contains:
|
||||
- Tick number, depth, kills, score
|
||||
- Camera position
|
||||
- Player HP, position, entity count
|
||||
- All 6 spectrum layers as ASCII text
|
||||
|
||||
Pipe protocol spectrum commands:
|
||||
- `{"cmd":"get_spectrum","spectrum":"materials","w":80,"h":25}` — single spectrum
|
||||
- `{"cmd":"get_all_spectrums","w":80,"h":25}` — all spectrums at once
|
||||
|
||||
## Tests
|
||||
|
||||
```sh
|
||||
|
||||
Reference in New Issue
Block a user