import type { IDistance } from "@thi.ng/distance";
import type { ITimeStep, ReadonlyTimeStep } from "@thi.ng/timestep";
import { VectorState } from "@thi.ng/timestep/state";
import type { ReadonlyVec, Vec, VecAPI } from "@thi.ng/vectors";
import type { BoidOpts, IBoidAccel, IBoidBehavior } from "./api.js";
import { Radial } from "./region.js";
export declare class Boid implements ITimeStep {
    pos: VectorState;
    vel: VectorState;
    api: VecAPI;
    accel: IBoidAccel;
    behaviors: IBoidBehavior[];
    region: Radial<Boid>;
    opts: BoidOpts;
    constructor(opts: BoidOpts, api: VecAPI, distance: IDistance<ReadonlyVec>, pos: Vec, vel: Vec);
    /**
     * Integration step of the thi.ng/timestep update cycle. See
     * [`ITimeStep`](https://docs.thi.ng/umbrella/timestep/interfaces/ITimeStep.html)
     *
     * @param dt
     * @param ctx
     */
    integrate(dt: number, ctx: ReadonlyTimeStep): void;
    /**
     * Interplation step of the thi.ng/timestep update cycle. See
     * [`ITimeStep`](https://docs.thi.ng/umbrella/timestep/interfaces/ITimeStep.html)
     *
     * @param alpha
     * @param ctx
     */
    interpolate(alpha: number, ctx: ReadonlyTimeStep): void;
    /**
     * Queries the spatial index for other boids in the current region, or if
     * `pos` is given also moves the search region to new position before
     * querying.
     *
     * @remarks
     * IMPORTANT: The returned array will always contain the current boid itself
     * too. Filtering has been left out here for performance reasons and is left
     * to downstream code.
     *
     * @param r
     * @param pos
     */
    neighbors(r: number, pos?: Vec): Boid[];
    steerTowards(target: ReadonlyVec, out?: Vec): Vec;
    computeSteer(steer: Vec, num: number): Vec;
    limitSteer(steer: Vec): Vec;
}
/**
 * Returns a new {@link Boid} instance configured to use optimized 2D vector
 * operations.
 *
 * @param accel
 * @param pos
 * @param vel
 * @param opts
 */
export declare const defBoid2: (pos: Vec, vel: Vec, opts: BoidOpts) => Boid;
/**
 * Returns a new {@link Boid} instance configured to use optimized 3D vector
 * operations.
 *
 * @param accel
 * @param pos
 * @param vel
 * @param opts
 */
export declare const defBoid3: (pos: Vec, vel: Vec, opts: BoidOpts) => Boid;
//# sourceMappingURL=boid.d.ts.map