import { type SkImage } from "@shopify/react-native-skia"; /** A rasterized white-circle sprite + its geometry. */ export interface ParticleSprite { image: SkImage | null; /** Side length of the square sprite box (px). */ size: number; /** Radius of the white circle inside the box (px). */ radius: number; } /** * Rasterize ONE anti-aliased **white** filled circle into a square sprite, once * (NOT per frame). Drawing it white lets each particle's per-sprite color * modulate (multiply) the texture to its own tint + alpha via `drawAtlas`. * * Mirrors the PictureRecorder pattern in `markerAtlas.ts`. */ export declare function buildParticleSprite(): ParticleSprite; /** One particle ready to blit: world position + per-sprite scale/alpha/color. */ export interface ParticleInstance { x: number; y: number; scale: number; alpha: number; colorIndex: number; } /** * Pure, worklet-safe projection of the packed particle ring buffer into render * instances. No Skia — plain numbers only — so it's directly unit-testable. * * Preserves the exact size/opacity formulas the old per-slot `` used: * life = max(0, 1 - (now - t0) / burstDur) (skip if dt = now - t0 < 0) * r = size * (0.5 + life * 0.5), size = buf[base+6] || 1 * scale = r / spriteRadius * alpha = life * particleOpacity * Inactive (active <= 0.5), pre-spawn (dt < 0) and fully-faded (life <= 0) * slots are skipped. Pass distinct `out` and `pool` arrays to retain inactive * instance objects for later bursts while returning only the active prefix. */ export declare function buildParticleInstances(buf: Float64Array, slots: number, now: number, burstDur: number, particleOpacity: number, spriteRadius: number, out?: ParticleInstance[], pool?: ParticleInstance[]): ParticleInstance[]; //# sourceMappingURL=particleAtlas.d.ts.map