import { type Box, type Point } from './geometry.js';
import type { PageObject } from './objects.js';
import type { SilkAnchor } from './silk.js';
import { type WeaveTask, type SilkKind } from './weaving.js';
export { curvePoint } from './weaving.js';
export type Behavior = 'descending' | 'exploring' | 'weaving' | 'hiding' | 'resting' | 'fleeing';
export interface SilkThread {
    from: Point;
    to: Point;
    group: number;
    sag: number;
    laid: number;
    born: number;
    ink: string;
    kind: SilkKind;
    grain: number;
}
export interface Resident extends Point {
    destination: Point;
    dragFrom: Point | null;
    tip: Point | null;
    angle: number;
    gait: number;
    velocity: number;
    behavior: Behavior;
    behind: boolean;
    until: number;
    target: PageObject | null;
    scared: boolean;
    visible: boolean;
    threads: SilkThread[];
    tasks: WeaveTask[];
    task: WeaveTask | null;
    activeThread: SilkThread | null;
    attachment: SilkAnchor | null;
    nextAttachment: SilkAnchor | null;
    route: number;
    tether: Point | null;
    landing: Point;
    ink: string;
    woven: number;
    silkInk: string;
}
export declare function makeResident(point: Point, index: number, descend?: boolean, top?: number): Resident;
/** Keep completed silk. At the resource ceiling the resident explores until explicitly cleared. */
export declare const threadBudget = 2048;
export declare function stepResident(r: Resident, dt: number, time: number, pointer: Point | null, fearRadius: number, speed: number, box: Box, objects: readonly PageObject[], index: number, anchors?: readonly SilkAnchor[], density?: number, span?: number, color?: string): void;
export declare function paintThreads(ctx: CanvasRenderingContext2D, threads: readonly SilkThread[], opacity: number): void;
//# sourceMappingURL=resident.d.ts.map