squad-proto/docs/01-build-and-run.md
z.kirill 7880f275bd Прототип боевого ядра: отряд, хоррор-слой, ближний бой
Тактический отряд с автоматическим огнём в изометрии, собственный
софтверный растеризатор (raylib только окно, ввод и финальный блит).

Ядро (спек, раздел 6):
- LaneClear: проверка линии огня по своим, стенам и дальности;
- решатель огневых позиций с гистерезисом и коммитом;
- резервирование линий огня и расступание из чужих секторов;
- пули-снаряды, дружественный урон физически возможен.

Хоррор-слой (render-only): свет и туман войны с памятью карты,
светящиеся трассеры, кровь, виньетка, зерно, напряжение.

Ближний бой: сектор удара, три фазы, связка из трёх ударов,
своя дисциплина «не бить сквозь своего».

Проверка: squad_proto.exe --accept прогоняет критерии приёмки
раздела 11 плюс блок M7 по ближнему бою — все PASS,
FRIENDLY_HITS = 0 за 3 минуты боя.

Сборка: cmake -S . -B build && cmake --build build --config Release
raylib 6.0 подтягивается через FetchContent.

Документация — CLAUDE.md как оглавление, содержание в docs/.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-03 13:00:49 +03:00

113 lines
6.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 01 — Сборка, запуск, управление
## Требования
- CMake 3.16+
- Компилятор с C++17. Проверено на MSVC 14.44 (Visual Studio 2022, x64).
- Интернет при **первой** конфигурации: raylib 6.0 качается через `FetchContent`.
Если в системе уже стоит raylib 6.x, `find_package(raylib 6)` возьмёт её и ничего не качает.
## Сборка
```bash
cmake -S . -B build # разово; тянет и собирает raylib (~1-2 мин)
cmake --build build --config Release --parallel
```
Бинарник: `build/bin/squad_proto.exe` (при любом генераторе, включая multi-config).
Debug-сборка (`--config Debug`) кладёт бинарник туда же и идёт в 60 fps, так что
проверять правки стоит именно в ней: MSVC включает проверки итераторов и ловит
выходы за границы, которых в Release не видно.
В VS Code: `F5` — конфигурация **Run (Release)** из `.vscode/launch.json`,
сборка идёт задачей `build release`. Есть также задачи `accept` и `headless 180s`.
> `Makefile` в корне остался от исходного шаблона raylib-vscode и **не используется** —
> он ссылается на `C:/raylib/w64devkit`. Актуальная сборка только через CMake.
### Если CMake ругается на генератор
```
CMake Error: Error: generator : Visual Studio 17 2022
Does not match the generator used previously: Visual Studio 18 2026
```
Каталог `build/` привязан к конкретному генератору, и на машине с несколькими
Visual Studio его легко получить несогласованным: обычный `cmd.exe` и
Developer Command Prompt выбирают разные версии по умолчанию. Лечится сносом
каталога — он целиком производный, в нём нет ничего своего:
```bash
rmdir /s /q build # cmd
rm -rf build # bash
cmake -S . -B build
```
Чтобы зафиксировать версию явно, передай генератор при первой конфигурации:
```bash
cmake -S . -B build -G "Visual Studio 17 2022" -A x64
```
Дальше `cmake -S . -B build` без `-G` будет переиспользовать генератор из кэша.
`build/` намеренно в `.gitignore` — в репозитории его быть не должно.
## Управление
| Клавиша | Действие |
|---|---|
| `WASD` | движение диска (якоря отряда) в **экранных** осях |
| `Shift` (удерж.) | рывок (базовый шаг намеренно медленный) |
| `Space` | переключить режим ручного прицеливания |
| `←` / `→` | в ручном режиме — поворот вектора прицела |
| `Tab` | сменить назначенную цель (внутри конуса прицела) |
| `1` / `2` / `3` | строй: клин / линия / кольцо |
| `F1` | оверлей вкл/выкл |
| `F2` | линии огня |
| `F3` | кандидаты решателя и их оценки |
| `F4` | метрики |
| `F5` | выключить хоррор-слой (свет/туман/пост) |
| `F6` | показать диски обзора |
| `[` / `]` | выбрать параметр тюнинга |
| `-` / `=` | изменить выбранный параметр |
| `R` | сброс уровня |
| `Esc` | выход |
Стрельба **всегда автоматическая**, клавиши огня нет ни в одном режиме.
Ближний бой тоже: бойцы с клинком сами доходят до цели и бьют, пока она внутри
их круга ([11-melee.md](11-melee.md)).
Диск намеренно быстрее бойцов и держится к ним на поводке: команда читается
мгновенно, а средняя скорость похода всё равно определяется ногами отряда.
## Dev-режимы командной строки
Симуляция детерминирована и не зависит от рендера, поэтому её можно гонять без окна.
| Аргумент | Что делает |
|---|---|
| `--accept` | прогоняет сценарии критериев приёмки (спек 11) и печатает PASS/FAIL |
| `--headless <сек>` | прогон по маршруту без окна + метрики каждые 10 с |
| `--probe` | к `--headless`: подробности по каждому агенту на стоянках |
| `--no-solver` | отключить решатель огневых позиций (A/B сравнение) |
| `--no-laneavoid` | отключить расступание из чужих линий (A/B сравнение) |
| `--melee N` | сколько слотов строя держат клинок (по умолчанию 2, `0` = все стрелки) |
| `--set имя=значение` | подкрутить любой параметр из `TUNABLES` без пересборки |
| `--shot [кадров] [файл]` | снять скриншот через N кадров и выйти |
| `--clean` | стартовать без оверлея — чистый кадр для скриншотов |
Примеры:
```bash
squad_proto.exe --accept
squad_proto.exe --headless 300
squad_proto.exe --headless 300 --no-solver --no-laneavoid # каким прототип был бы без ядра
squad_proto.exe --headless 300 --melee 0 # чистый отряд стрелков
squad_proto.exe --headless 300 --set safetyMargin=0.25 --set laneReserve=2.0
squad_proto.exe --clean --shot 220 melee.png # кадр без отладки
```
Код прогонов — [src/debug/harness.cpp](../src/debug/harness.cpp), маршрут и сценарии описаны там же.
Что означают цифры в выводе — [06-debug-and-tuning.md](06-debug-and-tuning.md).