UNPKG

@fluritheme/spider

Version:

An expressive website spider that weaves DOM-aware silk, hunts occasional flies and wraps its catch. Original vector artwork, TypeScript, zero dependencies.

49 lines • 1.92 kB
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