Тактический отряд с автоматическим огнём в изометрии, собственный софтверный растеризатор (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>
113 lines
6.4 KiB
Markdown
113 lines
6.4 KiB
Markdown
# 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).
|