export type NavigationCell = readonly [number, number];
export type NavigationPoint = readonly [number, number];
export type NavigationPathStatus = "success" | "partial" | "failed";
export interface NavigationPath {
    readonly status: NavigationPathStatus;
    readonly cells: readonly NavigationCell[];
    readonly waypoints: readonly NavigationPoint[];
    readonly length: number;
    readonly cost: number;
    readonly visitedCells: number;
}
export interface NavigationGridOptions {
    readonly width: number;
    readonly height: number;
    readonly origin?: NavigationPoint;
    readonly cellSize?: number;
    readonly blocked?: readonly NavigationCell[];
    readonly costs?: readonly {
        readonly cell: NavigationCell;
        readonly cost: number;
    }[];
    readonly allowDiagonal?: boolean;
}
export interface NavigationAgentOptions {
    readonly position: NavigationPoint;
    readonly speed?: number;
    readonly waypointRadius?: number;
}
export interface NavigationAgentSnapshot {
    readonly position: NavigationPoint;
    readonly state: "idle" | "moving" | "arrived" | "blocked";
    readonly waypointIndex: number;
    readonly remainingWaypoints: number;
    readonly pathLength: number;
    readonly distanceTraveled: number;
}
export declare class NavigationGrid {
    readonly width: number;
    readonly height: number;
    readonly origin: NavigationPoint;
    readonly cellSize: number;
    readonly allowDiagonal: boolean;
    private readonly blocked;
    private readonly costs;
    constructor(options: NavigationGridOptions);
    isBlocked(cell: NavigationCell): boolean;
    cellCost(cell: NavigationCell): number;
    containsCell(cell: NavigationCell): boolean;
    worldToCell(point: NavigationPoint): NavigationCell;
    cellToWorld(cell: NavigationCell): NavigationPoint;
    findPath(start: NavigationPoint, goal: NavigationPoint): NavigationPath;
    private search;
    private nearestWalkableCell;
}
export declare class NavigationAgent {
    private position;
    private path;
    private waypointIndex;
    private distanceTraveled;
    private readonly speed;
    private readonly waypointRadius;
    constructor(options: NavigationAgentOptions);
    setPath(path: NavigationPath): void;
    update(deltaSeconds: number): NavigationAgentSnapshot;
    snapshot(state?: NavigationAgentSnapshot["state"]): NavigationAgentSnapshot;
}
//# sourceMappingURL=Navigation.d.ts.map