import { type SteeringPoint, type SteeringVector } from "./Steering";
export type CrowdFormationType = "line" | "wedge" | "column" | "circle";
export interface CrowdAgentOptions {
    readonly id: string;
    readonly position: SteeringPoint;
    readonly velocity?: SteeringVector;
    readonly radius?: number;
    readonly maxSpeed?: number;
    readonly priority?: number;
}
export interface CrowdSimulationOptions {
    readonly neighborRadius?: number;
    readonly maxNeighbors?: number;
    readonly separationWeight?: number;
    readonly alignmentWeight?: number;
    readonly cohesionWeight?: number;
    readonly formationWeight?: number;
    readonly maxForce?: number;
}
export interface CrowdFormationOptions {
    readonly type: CrowdFormationType;
    readonly center: SteeringPoint;
    readonly forward?: SteeringVector;
    readonly spacing?: number;
}
export interface CrowdAgentSnapshot {
    readonly id: string;
    readonly position: SteeringPoint;
    readonly velocity: SteeringVector;
    readonly speed: number;
    readonly neighborCount: number;
    readonly formationSlot: SteeringPoint;
}
export interface CrowdSimulationSnapshot {
    readonly agentCount: number;
    readonly neighborPairs: number;
    readonly averageNeighbors: number;
    readonly averageSpeed: number;
    readonly maxSpeed: number;
    readonly formationType: CrowdFormationType | "none";
    readonly center: SteeringPoint;
    readonly agents: readonly CrowdAgentSnapshot[];
}
export declare class CrowdSimulation {
    private readonly agents;
    private readonly neighborRadius;
    private readonly maxNeighbors;
    private readonly separationWeight;
    private readonly alignmentWeight;
    private readonly cohesionWeight;
    private readonly formationWeight;
    private readonly maxForce;
    private formation;
    private lastNeighbors;
    private lastSlots;
    constructor(options?: CrowdSimulationOptions);
    addAgent(options: CrowdAgentOptions): void;
    removeAgent(id: string): boolean;
    setFormation(options: CrowdFormationOptions | undefined): void;
    update(deltaSeconds: number): CrowdSimulationSnapshot;
    snapshot(): CrowdSimulationSnapshot;
    private neighborsFor;
}
//# sourceMappingURL=Crowd.d.ts.map