export declare const MAX_TRAIL = 48; export declare class Particle { /** Which edge this particle belongs to */ edgeId: string; /** Arc-length position along the edge path (0 → edge.path.totalLength) */ distance: number; /** Movement speed in logical-pixels per second */ speed: number; /** Current world position (computed from arc-length lookup) */ x: number; y: number; /** Tangent angle at current position (for streak orientation) */ angle: number; /** Whether this particle is assigned to an edge (false = in pool) */ active: boolean; /** * Trail history — circular buffer of past world positions. * Stored as interleaved [x0, y0, x1, y1, ...] for cache efficiency. * Trail is read from trailStart to trailEnd (inclusive). */ readonly trailBuf: Float32Array; trailHead: number; trailLen: number; trailCap: number; /** Reset to default state (called by pool on release/reacquire) */ reset(): void; /** Push a position into the trail circular buffer */ pushTrail(x: number, y: number): void; /** * Iterate trail points from oldest to newest. * Calls `fn(x, y, alpha)` where alpha is 0 at tail, 1 at head. * Safe to call even if trailLen < 2. */ forEachTrailPoint(fn: (x: number, y: number, alpha: number) => void): void; } //# sourceMappingURL=Particle.d.ts.map