/** @packageDocumentation
 * @module Effects
 */
import { Range1d, Range2d, Vector2d } from "@itwin/core-geometry";
import { DecorateContext, Decorator, ParticleProps, Tool, Viewport } from "@itwin/core-frontend";
/** Represents one particle displayed by a [[SnowDecorator]].
 * Particle positions are in [CoordSystem.View]($frontend).
 * @beta
 */
export interface SnowParticle extends ParticleProps {
    /** Make x, y, and z from ParticleProps writable. */
    x: number;
    y: number;
    z: number;
    /** Current velocity, in pixels per second. */
    velocity: Vector2d;
}
/** Parameters controlling how a [[SnowDecorator]] works.
 * @beta
 */
export interface SnowParams {
    /** The number of snow particles to produce. This could alternatively be expressed as a density so that small viewports would not be more crowded than larger ones. */
    numParticles: number;
    /** Range from which to randomly select each particle's size, in pixels. */
    sizeRange: Range1d;
    /** Range from which to randomly select each particle's transparency. */
    transparencyRange: Range1d;
    /** Range from which to randomly select each particle's initial velocity, in pixels per second. */
    velocityRange: Range2d;
    /** Range from which to randomly select an acceleration to apply to each particle's velocity each frame, in pixels per second squared, to simulate wind. */
    accelerationRange: Range2d;
    /** Wind velocity in pixels per second in X. */
    windVelocity: number;
}
/** Simulates snowfall in a [Viewport]($frontend) using particle effects.
 * @see [[SnowEffect]] for a [Tool]($frontend) that toggles this decorator.
 * @see [ParticleCollectionBuilder]($frontend) for defining custom particle effects.
 * @beta
 */
export declare class SnowDecorator implements Decorator {
    /** The viewport being decorated. */
    readonly viewport: Viewport;
    /** Invoked when this decorator is to be destroyed. */
    readonly [Symbol.dispose]: VoidFunction;
    /** The initial width and height of the viewport, from which we randomly select each particle's initial position. */
    private readonly _dimensions;
    /** The list of particles being drawn. */
    private readonly _particles;
    /** The image to display for each particle. */
    private _texture?;
    /** The last time `updateParticles()` was invoked, in milliseconds. */
    private _lastUpdateTime;
    private readonly _params;
    private constructor();
    decorate(context: DecorateContext): void;
    /** Change some of the parameters affecting this decorator. */
    configure(params: Partial<SnowParams>): void;
    /** Emit a new particle with randomized properties. */
    private emit;
    private updateParticles;
    private static readonly _decorators;
    /** Toggle this decorator for the specified viewport.
     * @param viewport The viewport to which the effect should be applied or removed.
     * @param enable `true` to enable the effect, `false` to disable it, or `undefined` to toggle the current state.
     */
    static toggle(viewport: Viewport, enable?: boolean): Promise<void>;
}
/** Toggles a decorator that simulates snow using particle effects.
 * @see [[SnowDecorator]] for the implementation of the decorator.
 * @beta
 */
export declare class SnowEffect extends Tool {
    static toolId: string;
    run(enable?: boolean): Promise<boolean>;
    parseAndRun(...args: string[]): Promise<boolean>;
}
//# sourceMappingURL=Snow.d.ts.map