# `$.room` — комнаты: регистрация, вход и выход

Комната — это описанный данными кусок мира (§44/§23): карта, маркеры, выходы.
`$.room` держит реестр описаний и ровно одну ТЕКУЩУЮ комнату; вход собирается в
staging-области и публикуется целиком, поэтому ошибка описания не ломает мир.

```js
$.room.define('level1', { tilemap: {...}, markers: { spawn: { x: 10, y: 20 } } });
const res = $.room.enter('level1');          // { ok, id, generation }
$.room.marker('spawn');                       // { ok, x, y, ... }
$.room.exit('north');                         // { ok, to, to_marker }
```

## Полный перечень имён: реестр и состояние

Проверено на живом движке (1.2.0) в фикстуре без комнат.

| Имя | Сигнатура | Проверено запуском |
|---|---|---|
| `$.room.list()` | `→ string[]` | идентификаторы зарегистрированных комнат; пусто — `[]` |
| `$.room.has(id)` | `→ bool` | зарегистрирована ли комната |
| `$.room.get(id)` | `→ object \| null` | данные описания; неизвестный id — `null` |
| `$.room.remove(id)` | `→ bool` | снимает комнату из реестра (и её сцену `room:<id>`). Возвращает `true` **всегда**, даже если такого id не было: истина здесь значит «после вызова комнаты в реестре нет», а не «была и удалена» |
| `$.room.discard(handle)` | `→ bool` | отменяет подготовленную сборку (результат `build`/`prepare`), закрывая её область; `false` — если у handle нет области |
| `$.room.generation()` | `→ number` | счётчик смен комнаты: растёт на каждом входе, удобен как «поколение мира» для кэшей |
| `$.room.stats()` | `→ object` | счётчики: `{ rooms, current, generation, closed, markers, exits, instances, … }`; без комнат — нули и `closed: true` |
