import { BMap } from "../../bmap";
import { Plugin } from "../base";
import { Path, PathConfig } from "./path";
import { PathData2, TweenUtil, RoadData2 } from "../../utils";
import { Floor, LineElement, Poi2, PoiOptions2 } from "../../elements";
import { Tween } from "@tweenjs/tween.js";
import { type NavigationProcessInfo, PositionNavigation, type PositionNavigationConfig } from "./position-navigation";
import TaskQueue from "../../utils/taskQueue";
import { StartRotateHelperPoi } from "./start-rotate-helper-poi";
export type Point = [number, number];
export { NavigationProcessInfo };
interface EventMap {
    "fetch-road-status": {
        status: boolean;
    };
    "path-animation": {
        pathIndex: number;
    };
    "path-animation-end": {};
    "render-path": {
        path: Path;
    };
    "navigation-info": {
        info: NavigationProcessInfo;
    };
    "add-path": {
        paths: PathData2;
    };
}
export interface NavigationConfig {
    path?: Partial<PathConfig>;
    cheapMaximumDistance: number;
    startPoi: Partial<PoiOptions2>;
    detachStartPoi?: Partial<PoiOptions2>;
    positionNavigation: Partial<PositionNavigationConfig>;
    needStartPoi: boolean;
    offsetY: number;
    directionEmitThreshold: number;
    disablePathAnimation: boolean;
    disablePathRotate: boolean;
    disablePathShorten: boolean;
    speed: number;
    roadData: RoadData2[];
    runAnimationMaxTime: number;
    navigationCameraBasic: number;
}
export declare class Navigation extends Plugin<EventMap> {
    path: Path | null;
    fetchRoadStatus: boolean;
    paths: PathData2;
    curPathIndex: number;
    curFloorPath: PathData2[0] | null;
    translatePath: PathData2[0]["points"] | null;
    currentPathPosition: [number, number] | null;
    toPointPosition: [number, number] | null;
    options: NavigationConfig;
    pathTween: Tween<any> | null;
    startPoi: Poi2 | null;
    detachStartPoi: Poi2 | null;
    detachLine: LineElement | null;
    startPoiRotate: number | null;
    startRotateHelperPoi: StartRotateHelperPoi | null;
    needStartRotateHelperPoi: boolean;
    showDetachStartState: boolean;
    movedDistance: number;
    pathStart: [number, number];
    tweenUtil: TweenUtil;
    taskQueue: TaskQueue;
    animationPathOptions: {
        cPathIndex: number;
    };
    cPath: Point[];
    positionNavigation: PositionNavigation;
    constructor(bmap: BMap, project?: string | Partial<NavigationConfig>, options?: Partial<NavigationConfig>);
    get curFloorPathLength(): number;
    get curFloorPathPoints(): [number, number][];
    registryEvent(): void;
    onNavigationInfo: ({ info }: {
        info: NavigationProcessInfo;
    }) => void;
    setRoadData(roadData: RoadData2[]): void;
    showStartRotateHelperPoi(): void;
    hideStartRotateHelperPoi(): void;
    setStartPoiPosition(x: number, y: number): void;
    resetStatus(): void;
    toPositionByTask(pos: [number, number]): void;
    pauseAnimation(): void;
    continueAnimation(): void;
    clearTween(): void;
    unRegistryEvent(): void;
    onUpdate: () => void;
    clearPath(): void;
    private setCurFloorPath;
    setCurPathIndex(index: number): void;
    onSwitchFloor: ({ data: { curFloor } }: {
        data: {
            curFloor: Floor;
        };
    }) => void;
    addPath(paths: PathData2, routeIndex?: number): void;
    translatePoints(points: Point[]): Point[];
    renderPath(points: Point[]): void;
    catmullRomCurve3(points: Point[]): [number, number][];
    getPathDirection(): number | null;
    getPathDirection2(): number | null;
    changeCameraToPathUp(duration?: number): Promise<unknown>;
    initNavigationCamera(duration?: number): Promise<void>;
    translateCameraToStartPoi(duration?: number): Promise<void>;
    initCameraZoom(duration?: number): Promise<unknown>;
    toPosition(floor: string, pos: [number, number]): void;
    startSimulation(): void;
    setSimulationSpeed(speed: number): void;
    toPositionBySpeed(position: [number, number], speed: number): Promise<unknown>;
    moveDistance(distance: number, tween?: Tween<any>): Promise<void>;
    removeDetachStart(): void;
    hideDetachStart(): void;
    showDetachStart(): void;
    setStartPoiRotate(rotate: number): void;
    onControlChangeForStartPoi: () => void;
    dispose(): void;
}
