raindrop-fx
Version:
Rain drop effect with WebGL
100 lines • 3.02 kB
TypeScript
import { Rect } from "@sardinefish/zogra-renderer";
import { RainDrop } from "./raindrop";
import { Spawner } from "./spawner";
import { Time } from "./utils";
export interface SimulatorOptions {
viewport: Rect;
/**
* Time range between two raindrop spwan.
*/
spawnInterval: [number, number];
/**
* Random size range when spawn a new raindrop
*/
spawnSize: [number, number];
/**
* Maximal amount of spawned raindrops.
* Recommend less than 2000
*/
spawnLimit: number;
/**
* Recommend in range (0..1), other value should be ok.
*/
slipRate: number;
/**
* Describe how often a raindrop change its motion state
*/
motionInterval: [number, number];
/**
* Random velociy x relative to velocity y. Recommend in range (0..0.1)
*/
xShifting: [number, number];
/**
* Relative size for collision check. Recommend in range (0.6..1.2)
*/
colliderSize: number;
/**
* Mass density of the slipping trail raindrop.
* Recommend in range (0.1..0.3)
*
* A large value cause a raindrop quickly lose its size during slipping.
*/
trailDropDensity: number;
/**
* Random size range of slipping trail drop. Recommend in range (0.3..0.5)
*/
trailDropSize: [number, number];
/**
* Random distance range between two slipping trail drop. Recommend in range (20..40)
*/
trailDistance: [number, number];
/**
* Vertical spread of a new spawned slipping trail drop. Recommend in range (0.4..0.6)
*/
trailSpread: number;
/**
* Spread rate when a new spawned raindrop hit the screen. Recommend in range (0.4..0.7)
*/
initialSpread: number;
/**
* Spread shrink rate per seconds. Recommend in range (0.01..0.02)
*/
shrinkRate: number;
/**
* Spread rate by velocity Y. Recommend in range (0.2..0.4)
*
* Raindrop with higher fall speed looks more narrow.
*/
velocitySpread: number;
/**
* Mass lose per second. Recommend in range (10..30)
*/
evaporate: number;
/**
* Gravity acceleration in pixels/s. Recommend 2400
*/
gravity: number;
}
export declare class CollisionGrid extends Array<RainDrop> {
/**@deprecated */
push(...item: RainDrop[]): number;
add(raindrop: RainDrop): void;
delete(raindrop: RainDrop): void;
}
export declare class RaindropSimulator {
options: SimulatorOptions;
spawner: Spawner;
raindrops: RainDrop[];
grid: CollisionGrid[];
constructor(options: SimulatorOptions);
get gridSize(): number;
resize(): void;
gridAt(gridX: number, gridY: number): CollisionGrid | undefined;
gridAtWorldPos(x: number, y: number): CollisionGrid | undefined;
worldToGrid(x: number, y: number): [number, number];
add(raindrop: RainDrop): void;
update(time: Time): void;
raindropUpdate(time: Time): void;
collisionUpdate(): void;
}
//# sourceMappingURL=simulator.d.ts.map