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