@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
TypeScript
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