# Particles

Particles are a table, all fields of which are optional.

| Field           | Description                                                           | Default         |
| --------------- | --------------------------------------------------------------------- | --------------- |
| texture         | Particle texture.                                                     | ""              |
| frames          | Animation frames (array of texture names). Must be in a single atlas. | {}              |
| lighting        | Lighting.                                                             | true            |
| collision       | Collision detection.                                                  | true            |
| max_distance    | Maximum distance from the camera at which particles may spawn.        | 16.0            |
| spawn_interval  | Particle spawn interval in seconds.                                   | 1.0             |
| lifetime        | Average lifetime of particles in seconds.                             | 5.0             |
| lifetime_spread | Maximum deviation of particle lifetime (from 0.0 to 1.0).             | 0.2             |
| velocity        | Initial linear velocity of particles.                                 | {0, 0, 0}       |
| acceleration    | Particles acceleration.                                               | {0, -16, 0}     |
| explosion       | Force of particles explosion on spawn.                                | {2, 2, 2}       |
| size            | Size of particles.                                                    | {0.1, 0.1, 0.1} |
| size_spread     | Maximum particle size spread over time.                               | 0.2             |
| angle_spread    | Maximum initial rotation angle spread (0 to 1)                        | 0.0             |
| min_angular_vel | Minimum angular velocity (radians per sec). Non-negative.             | 0.0             |
| max_angular_vel | Maximum angular velocity (radians per sec). Non-negative.             | 0.0             |
| spawn_shape     | Shape of particle spawn area. (ball/sphere/box)                       | ball            |
| spawn_spread    | Size of particle spawn area.                                          | {0, 0, 0}       |
| random_sub_uv   | Size of random texture subregion (1 - entire texture will be used).   | 1.0             |

## *gfx.particles* library

```lua
gfx.particles.emit(
    -- emitter position: static coordinates or entity uid
    origin: vec3 | int,
    -- particle count (-1 - infinite)
    count: int,
    -- particle settings table
    preset: table,
    -- additional particle settings table
    [optional] extension: table
) -> int
```

Creates a particle emitter, returning its id.

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

Stops the emitter permanently. The emitter will be deleted
automatically later.

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

Checks if the emitter is running. Returns false if it is stopped or if the emitter does not exist.

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

Returns the static position or uid of the entity the emitter is bound to.

Returns nil if the emitter does not exist.

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

Sets the static position or uid of the entity the emitter will be bound to.
