import { type Box, type Point } from './geometry.js';
import type { Resident, SilkThread } from './resident.js';
export type FlyState = 'flying' | 'trapped' | 'wrapping' | 'eating';
export interface HuntGoal {
    point: Point;
    feeding: boolean;
}
export interface Fly extends Point {
    state: FlyState;
    age: number;
    phaseAge: number;
    destination: Point;
    vx: number;
    vy: number;
    heading: number;
    owner: Resident | null;
    trap: {
        thread: SilkThread;
        t: number;
    } | null;
}
/** Swept motion against the part of a curved capture strand that actually exists. */
export declare function catchThread(from: Point, to: Point, threads: readonly SilkThread[]): {
    thread: SilkThread;
    t: number;
} | null;
export declare function mouth(resident: Resident, size: number): Point;
/** One occasional visitor shared by the instance. Uses the existing simulation clock and canvas. */
export declare class Prey {
    private readonly random;
    fly: Fly | null;
    eaten: number;
    private nextAt;
    private requested;
    private turnAt;
    constructor(random?: () => number);
    request(): void;
    clear(time: number, interval: number): void;
    releaseWeb(): void;
    private escape;
    goal(resident: Resident): HuntGoal | undefined;
    feeding(resident: Resident): number;
    update(dt: number, time: number, box: Box, residents: readonly Resident[], opacity: number, interval: number, size: number, open: (point: Point) => boolean): void;
    contact(resident: Resident, size: number): void;
    paint(ctx: CanvasRenderingContext2D, time: number, size: number): void;
}
/** Original tiny fly, translucent beating wings and a silk parcel during feeding. */
export declare function paintFly(ctx: CanvasRenderingContext2D, f: Pick<Fly, 'x' | 'y' | 'state' | 'heading' | 'phaseAge'>, time: number, size: number): void;
//# sourceMappingURL=prey.d.ts.map