# Время — `$.time`

Всё игровое время идёт отсюда: твины, `$.time.wait()`, периодические вызовы и
анимации камеры тикают в одном месте, поэтому **пауза останавливает их все
сразу**. Дельта времени приходит от движка (с учётом `--fixed-dt`).

```js
const dt = $.time.delta();        // секунды с прошлого кадра, с масштабом
$.time.scale(0.5);                // замедление (bullet time)
$.time.pause();                   // стоп всему игровому времени
$.time.wait(1.2, () => hit());    // вызов через 1.2 игровых секунды
const id = $.time.every(0.25, () => tickPoison());
$.time.cancel(id);
```

---

## 1. Методы

| Вызов | Смысл |
|---|---|
| `delta()` / `rawDelta()` | время кадра с масштабом / без масштаба |
| `now()` / `realNow()` | игровое / настоящее время (секунды) |
| `perfNow()` | монотонные миллисекунды высокой точности — для своих замеров, не для логики игры |
| `frame()` / `fps()` | номер кадра / кадры в секунду |
| `scale(value?)` | прочитать или задать масштаб времени |
| `pause()` / `resume()` / `toggle()` / `isPaused()` | пауза игрового времени |
| `wait(seconds, fn)` / `after(seconds, fn)` | вызов через игровые секунды; возвращает id |
| `every(seconds, fn)` | повторяющийся вызов; возвращает id |
| `cancel(id)` / `cancelAll()` | снять отложенный вызов / все |
| `busy()` | есть ли незавершённые ожидания |

`rawDelta()` — реальное время кадра: им пользуются интерфейс и анимации, которые
не должны замирать на паузе.

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

| Чего нет | Что делать |
|---|---|
| Скачков времени при загрузке | `delta()` ограничена движком; для долгих операций — `$.loading.run` |
| Планировщика по календарю | `every` считает игровые секунды; для «раз в сутки» — свои счётчики |
| Таймеров на несколько сцен | `cancelAll()` гасит всё; для сцены держите свои id и снимайте в `onExit` |

## 3. Тик

`tickTime()` вызывает движок раз в кадр — игра его не зовёт. Порядок внутри
кадра: сначала игровая логика (`$.update`), затем отрисовка (`$.render`).
