# Пример: Platform foundations (§31-1)

Готовый вертикальный срез платформерных примитивов на чистом `$`. Относится к
разделу §31 «Документация и вертикальные примеры» и последовательности §49
[спецификации производственной готовности](PRODUCTION_READINESS).

## Запуск

```bash
./build/russiano2d --game demos/foundations
python3 tests/agent/foundations_test.py            # автоматическая приёмка
R2D_BINARY=build-2d/russiano2d python3 tests/agent/foundations_test.py
```

## Что показывает

| Примитив | Как | Проверка |
|---|---|---|
| Земля, ходьба, прыжок | `<wall>` + `.controls()` | игрок идёт вправо, прыжок поднимает |
| Склон | `$('<wall>').body('static').shape('polygon', points)` | подъём 68 px, 0 кадров без движения |
| Односторонняя платформа | `.oneWay(true)` | держит сверху, пропускает снизу |
| Спрыгивание вниз | `S`/`↓`+`Space` во `.controls()` | падение с 155 до 397 px |
| Движущаяся платформа | `.body('kinematic')` + `.velocity()` | перенос: игрок 39 px = платформа 39 px |
| Зоны камеры | данные + `$.camera.limits/zoom/lookahead/deadzone` | зона меняет зум (1.00 → 0.90) и границы |
| Геймпад | `$.input.padCount/vec` — тот же путь, что клавиатура | HUD читает состояние без отдельного API |

Склон здесь — **один полигональный треугольник**, а не лестница из боксов: у
тела игрока есть трение, и вертикальный уступ даже в 4 px его останавливает
(проверено), а шаг мельче требует десятков тел на склон. Полигон даёт настоящую
наклонную поверхность, и `onFloor()` работает на ней так же, как на
горизонтальном полу.

## Файлы

| Файл | Что |
|---|---|
| `main.js` | точка входа проекта |
| `index.js` | сцена, уровень, зоны камеры, HUD |
| `project.json` | имя окна и размер |

## Ограничения

* Зоны камеры разрешаются правилом «последняя вошедшая» (в `tickZones`), а не
  полноценным менеджером зон с lease и приоритетом — это делает пакет §19.
* Уровень задан ASCII-картой в коде: это пример, а не формат уровня. Данные
  комнат и тайлмапов — §23.
* Склон задаётся вручную (полигон на клетку). Тайловые частичные коллизии
  (нижняя полоса клетки) — §42, они не заменяют произвольный уклон.
