import { RgbaColor } from '../../utils'; /** * Options specific to the particle visualization */ type ParticleLayerOptions = { /** * Channels to read the UV values from. Defaults to `rg` */ decodeChannels?: string; /** * Decode the channels as "direction + period" rather than "UV". * * If true, the first channel is assumed to be direction (0-360deg) * and the second to be the period (1/speed). */ decodeAsWaves?: boolean; /** * Minimum encoded value. */ decodeMin: number; /** * Maximum encoded value. */ decodeMax: number; /** * Quantity of particles to be created. Default value is `128`. * Has to be a power of 2 and at least `4`. * The actual exact number will be `particles * particles`. * Try to keep this value as low as possible to optimize performance. * * The number of actually visible particles is determined by {@link density}. */ maxAmount?: number; /** * Color of the particle. RGBA 0-255. Defaults to `[255, 255, 255, 192]` */ color?: RgbaColor; /** * Color of the particle when moving "fast". RGBA 0-255. Defaults to {@link color} */ fastColor?: RgbaColor; /** * What is considered "fast" (in px/sec) for coloring purposes. * Only makes sense when {@link fastColor} is used. */ fastSpeed?: number; /** * Number of particles visible per 1000 px^2. Default is `2`. */ density?: number; /** * Draw the particles as lines (size is length). Defaults to `false`. */ drawAsLines?: boolean; /** * Use more pixels to make particles more smooth (especially when tilted). * Defaults to `2` for normal displays and `1` for HiDPI displays. */ pixelRatio?: number; /** * Size of the particle. Defaults to `1.5` */ size?: number; /** * Speed factor of the particles. Defaults to `0.001` */ speed?: number; /** * Time interval (in milliseconds) how often the particles * are refreshed to avoid degradation. * Random `1/16` of the particles is always randomly reset. * Default value is `800`. */ refreshInterval?: number; /** * How much the particles fade over time. * Default value is `0.1`. */ fadeFactor?: number; /** * If true, the particles will only be displayed where the alpha channel is 255. * This is to be set to `true` for tilesets that do not cover the entire globe. * Default value is `false`. */ useAlphaAsMask?: boolean; /** * This angle respresents the change of direction of a particle between a render call and the next. If a particle * changes direction abruptly with an angle greater than `angleDirectionShiftSkip`, then it is no longer rendered. * * A value of `30` (degrees) is a good compromise to reduce the "splashing" effect particle can have on the * side of hurricanes at semi-global-scale zoom level. * * Default: `90` (no skipping unless the particle changes direction to go backward between two render calls, which is unlikely) * */ angleDirectionShiftSkip?: number; /** * When `true`, the speed of particles (and trail length) will be the same in number of pixel traveled per second, regardless of the * size of the screen, which is convenient to provide a comparable experience on mobile/desktop. * * If disabled, the particles will be slower and with a shorter trail on smalled screen such as mobile. * * Default: `false` */ uniformSpeed?: boolean; /** * If this is `true`, the particles gets slighly larger as they become faster. * Default: `false` */ fastIsLarger?: boolean; }; export type { ParticleLayerOptions };