export type SteeringPoint = readonly [number, number];
export type SteeringVector = readonly [number, number];
export interface SteeringForce {
    readonly force: SteeringVector;
    readonly desiredVelocity: SteeringVector;
    readonly distance: number;
    readonly arrived: boolean;
}
export interface PredictiveSteeringForce extends SteeringForce {
    readonly predictedTarget: SteeringPoint;
    readonly predictionTime: number;
}
export interface WanderSteeringForce extends SteeringForce {
    readonly wanderTarget: SteeringPoint;
    readonly seed: number;
}
export interface FlockingNeighbor {
    readonly position: SteeringPoint;
    readonly velocity: SteeringVector;
}
export interface FlockingSteeringForce extends SteeringForce {
    readonly separation: SteeringVector;
    readonly alignment: SteeringVector;
    readonly cohesion: SteeringVector;
    readonly neighborCount: number;
}
export interface SteeringObstacle {
    readonly position: SteeringPoint;
    readonly radius: number;
    readonly id?: string;
}
export interface ObstacleAvoidanceSteeringForce extends SteeringForce {
    readonly obstacleDetected: boolean;
    readonly obstacleId?: string;
    readonly closestDistance: number;
}
export interface SteeringWall {
    readonly start: SteeringPoint;
    readonly end: SteeringPoint;
    readonly normal: SteeringVector;
    readonly id?: string;
}
export interface WallAvoidanceSteeringForce extends SteeringForce {
    readonly wallDetected: boolean;
    readonly wallId?: string;
    readonly hitDistance: number;
}
export type SteeringBlendMode = "weighted-sum" | "priority";
export interface SteeringPipelineEntry {
    readonly id: string;
    readonly force: SteeringVector;
    readonly weight?: number;
    readonly priority?: number;
    readonly enabled?: boolean;
}
export interface SteeringPipelineResult {
    readonly force: SteeringVector;
    readonly selectedIds: readonly string[];
    readonly mode: SteeringBlendMode;
}
export interface SteeringAgentOptions {
    readonly position: SteeringPoint;
    readonly velocity?: SteeringVector;
    readonly maxSpeed?: number;
    readonly maxForce?: number;
}
export interface SteeringAgentSnapshot {
    readonly position: SteeringPoint;
    readonly velocity: SteeringVector;
    readonly speed: number;
    readonly distanceTraveled: number;
}
export declare function seekSteering(position: SteeringPoint, velocity: SteeringVector, target: SteeringPoint, maxSpeed: number): SteeringForce;
export declare function arriveSteering(options: {
    readonly position: SteeringPoint;
    readonly velocity: SteeringVector;
    readonly target: SteeringPoint;
    readonly maxSpeed: number;
    readonly slowingRadius: number;
    readonly tolerance?: number;
}): SteeringForce;
export declare function fleeSteering(options: {
    readonly position: SteeringPoint;
    readonly velocity: SteeringVector;
    readonly threat: SteeringPoint;
    readonly maxSpeed: number;
    readonly panicDistance?: number;
}): SteeringForce;
export declare function pursuitSteering(options: {
    readonly position: SteeringPoint;
    readonly velocity: SteeringVector;
    readonly targetPosition: SteeringPoint;
    readonly targetVelocity: SteeringVector;
    readonly maxSpeed: number;
    readonly maxPredictionTime?: number;
}): PredictiveSteeringForce;
export declare function evadeSteering(options: {
    readonly position: SteeringPoint;
    readonly velocity: SteeringVector;
    readonly threatPosition: SteeringPoint;
    readonly threatVelocity: SteeringVector;
    readonly maxSpeed: number;
    readonly maxPredictionTime?: number;
    readonly panicDistance?: number;
}): PredictiveSteeringForce;
export declare function wanderSteering(options: {
    readonly position: SteeringPoint;
    readonly velocity: SteeringVector;
    readonly maxSpeed: number;
    readonly seed: number;
    readonly radius?: number;
    readonly distance?: number;
    readonly jitter?: number;
}): WanderSteeringForce;
export declare function flockingSteering(options: {
    readonly position: SteeringPoint;
    readonly velocity: SteeringVector;
    readonly neighbors: readonly FlockingNeighbor[];
    readonly maxSpeed: number;
    readonly separationRadius?: number;
    readonly alignmentRadius?: number;
    readonly cohesionRadius?: number;
    readonly separationWeight?: number;
    readonly alignmentWeight?: number;
    readonly cohesionWeight?: number;
}): FlockingSteeringForce;
export declare function obstacleAvoidanceSteering(options: {
    readonly position: SteeringPoint;
    readonly velocity: SteeringVector;
    readonly obstacles: readonly SteeringObstacle[];
    readonly maxSpeed: number;
    readonly detectionDistance?: number;
    readonly agentRadius?: number;
    readonly avoidanceForce?: number;
}): ObstacleAvoidanceSteeringForce;
export declare function wallAvoidanceSteering(options: {
    readonly position: SteeringPoint;
    readonly velocity: SteeringVector;
    readonly walls: readonly SteeringWall[];
    readonly maxSpeed: number;
    readonly whiskerLength?: number;
    readonly whiskerSpread?: number;
    readonly avoidanceForce?: number;
}): WallAvoidanceSteeringForce;
export declare function blendSteeringForces(options: {
    readonly entries: readonly SteeringPipelineEntry[];
    readonly mode?: SteeringBlendMode;
    readonly maxForce?: number;
    readonly priorityThreshold?: number;
}): SteeringPipelineResult;
export declare class SteeringAgent {
    private position;
    private velocity;
    private distanceTraveled;
    private readonly maxSpeed;
    private readonly maxForce;
    constructor(options: SteeringAgentOptions);
    apply(force: SteeringVector, deltaSeconds: number): SteeringAgentSnapshot;
    snapshot(): SteeringAgentSnapshot;
}
//# sourceMappingURL=Steering.d.ts.map