# Частицы

Частицы представляют собой таблицу, все поля которой опциональны.


| Поле            | Описание                                                                     | По-умолчанию    |
| --------------- | ---------------------------------------------------------------------------- | --------------- |
| texture         | Текстура частицы.                                                            | ""              |
| frames          | Кадры анимации (массив имен текстур). Должны находиться в одном атласе.      | {}              |
| lighting        | Освещение.                                                                   | true            |
| collision       | Обнаружение столкновений.                                                    | true            |
| max_distance    | Максимальная дистанция от камеры, при которой происходит спавн частиц.       | 16.0            |
| spawn_interval  | Интервал спавна частиц в секундах.                                           | 1.0             |
| lifetime        | Среднее время жизни частиц в секундах.                                       | 5.0             |
| lifetime_spread | Максимальное отклонение времени жизни частицы (от 0.0 до 1.0).               | 0.2             |
| velocity        | Начальная линейная скорость частиц.                                          | {0, 0, 0}       |
| acceleration    | Ускорение частиц.                                                            | {0, -16, 0}     |
| explosion       | Сила разлёта частиц при спавне.                                              | {2, 2, 2}       |
| size            | Размер частиц.                                                               | {0.1, 0.1, 0.1} |
| size_spread     | Максимальное отклонение времени размера частиц.                              | 0.2             |
| spawn_shape     | Форма области спавна частиц. (ball/sphere/box)                               | ball            |
| spawn_spread    | Размер области спавна частиц.                                                | {0, 0, 0}       |
| random_sub_uv   | Размер случайного подрегиона текстуры (1 - будет использована вся текстура). | 1.0             |

## Библиотека *gfx.particles*

```lua
gfx.particles.emit(
    -- позиция эмиттера: статические координаты или uid сущности
    origin: vec3 | int,
    -- количество частиц (-1 - бесконечно)
    count: int,
    -- таблица настроек частиц
    preset: table,
    -- дополнительная таблица настроек частиц
    [опционально] extension: table
) -> int
```

Создаёт эмиттер частиц, возвращая его id.

```lua
gfx.particles.stop(id: int)
```

Останавливает эмиттер без возможности возобновления. Эмиттер будет удален
позже автоматически.

```lua
gfx.particles.is_alive(id: int) -> bool
```

Проверяет, работает ли эмиттер. Возвращает false если работа прекращена или
эмиттер не существует.

```lua
gfx.particles.get_origin(id: int) -> vec3 | int
```

Возвращает статическую позицию или uid сущности, к которой привязан эмиттер.
Если эмиттера не существует, возвращает nil.

```lua
gfx.particles.set_origin(id: int, origin: vec3 | int)
```

Устанавливает статическую позицию или uid сущности, к которой будет привязан эмиттер.
