@fluritheme/fluri
Version:
Interactive snowfall for websites: DOM-aware snow accumulation, mouse interactions, snow physics, Canvas 2D rendering, and Christmas effects.
65 lines • 2.29 kB
TypeScript
import type { PluginContext, Surface, TriggerOptions, TriggerType, Vec2 } from '../types.js';
export interface PointerInput extends Vec2 {
vx: number;
vy: number;
pressed: boolean;
shiftKey: boolean;
kind: 'down' | 'move' | 'up' | 'cancel';
time: number;
}
export interface Snowball extends Vec2 {
id: number;
vx: number;
vy: number;
radius: number;
mass: number;
state: 'gathering' | 'airborne' | 'resting';
support?: Surface;
localX: number;
}
export declare const radiusFromMass: (mass: number) => number;
export declare const massFromRadius: (radius: number) => number;
/** Removes real stored mass, never visual depth. Used by gestures and the plough. */
export declare function gatherMass(surface: Surface, localX: number, radius: number, requested: number): number;
/** Recognizes coherent loops with bounded history; ordinary straight cursor motion cannot activate it. */
export declare class CircleRecognizer {
private points;
reset(): void;
sample(x: number, y: number, time: number): boolean;
}
export declare class Actors {
private readonly context;
readonly balls: Snowball[];
private snowmen;
private ploughs;
private active;
private nextId;
private circle;
private lastPointer;
constructor(context: PluginContext);
get gathering(): boolean;
get counts(): {
snowballs: number;
snowmen: number;
ploughs: number;
};
get snowballCount(): number;
get snowmanCount(): number;
private selected;
private createBall;
trigger(type: TriggerType, options?: TriggerOptions): void;
pointer(input: PointerInput): void;
private release;
update(dt: number, time: number): void;
private fragment;
private spill;
private collideBalls;
private assemble;
render(ctx: CanvasRenderingContext2D, time: number): void;
clear(): void;
destroy(): void;
}
export declare function drawSnowball(ctx: CanvasRenderingContext2D, x: number, y: number, radius: number): void;
/** Original tiny vector vehicle; no bitmap downloads or third-party artwork. */
export declare function drawPlough(ctx: CanvasRenderingContext2D, style?: 'classic' | 'minimal' | 'festive'): void;
//# sourceMappingURL=Actors.d.ts.map