import * as THREE from "three";
import { TextureLoader } from "../texture/loader";
import { BaseController, BaseControllerInitArgs } from "./base";
import { Pose } from "../types/pose";
import { State } from "../types/state";
import { MovePanoEffect } from "../types/movePanoEffect";
import { GestureEvent } from "../utils/event";
import { Works, WorkObserver } from "../work";
import { ModelScene } from "../model";
import { Motion } from "../utils/motion";
import { IntersectMeshInterface } from "../types/intersectMeshInterface";
type LocationMotion = Motion<"x" | "y" | "z" | "distance">;
type PerspToOrthoMotion = Motion<"perspToOrtho">;
type ModelAlphaMotion = Motion<"modelAlpha">;
interface MapviewControllerCustomInitArgs {
    /** 默认水平角 */
    defaultLongitude?: number;
    /** 默认俯仰角 */
    defaultLatitude?: number;
    /** 默认相机距离 */
    defaultDistance?: number;
    /** 最大俯仰角 */
    maxLatitude?: number | ((fov: number) => number);
    /** 最小俯仰角 */
    minLatitude?: number | ((fov: number) => number);
    /**
     * 相机类型
     * perspective 透视相机
     * orthographic 正交相机
     * auto 在俯视为正交相机， 斜视为透视相机(默认)
     */
    cameraType?: "perspective" | "orthographic" | "auto";
    /**
     * 相机电子围栏
     */
    cameraFence?: THREE.Box3 | THREE.Sphere | null;
    /** 鼠标焦点环自定义创建器 */
    intersectMeshCreator?: () => IntersectMeshInterface;
}
declare const defaultMapviewControllerCustomInitArgs: Required<MapviewControllerCustomInitArgs>;
type MapviewControllerInitArgs = BaseControllerInitArgs & MapviewControllerCustomInitArgs;
declare class MapviewController extends BaseController implements Required<MapviewControllerInitArgs> {
    defaultLongitude: number;
    defaultLatitude: number;
    defaultDistance: number;
    maxLatitude: number | ((fov: number) => number);
    minLatitude: number | ((fov: number) => number);
    cameraType: "perspective" | "orthographic" | "auto";
    cameraFence: THREE.Box3 | THREE.Sphere | null;
    intersectMeshCreator: () => IntersectMeshInterface;
    locationMotion: LocationMotion;
    modelAlphaMotion: ModelAlphaMotion;
    perspToOrthoMotion: PerspToOrthoMotion;
    protected panState?: {
        x: number;
        y: number;
        defaultPrevented: boolean;
        buttons: number;
        target: THREE.Vector3;
        pointerLength: number;
    };
    protected pinchState?: {
        x: number;
        y: number;
        scale: number;
        distance: number;
    };
    protected intersectMesh: IntersectMeshInterface;
    protected pendingTextureId: string | null;
    protected textureLoader: TextureLoader;
    static parseArgs(args: MapviewControllerInitArgs): Required<MapviewControllerInitArgs>;
    static distanceFromModel(modelScene: ModelScene, fov: number, aspect: number): number;
    static initAnimationEndState(args: MapviewControllerInitArgs): State;
    constructor(args: MapviewControllerInitArgs);
    updateConfiguration(args: MapviewControllerCustomInitArgs): boolean;
    /** 析构函数 */
    destroy(): void;
    /** 是否准备好，即不在用户操作中，并且不再动画中 */
    isReady(): boolean;
    /** 生命周期：更新 Work */
    updateWork(works: Works, state: Partial<State>, options: {
        duration: number;
        effect: MovePanoEffect;
    }, userAction: boolean): boolean;
    /** 生命周期：更新模型 */
    updateModel(modelScene: ModelScene): void;
    /** 转动摄像头 */
    updateCamera(pose: Partial<Pose>, duration: number, userAction: boolean): Promise<void>;
    /** 通过帧动画转动摄像头 */
    updateCameraWithKeyframes(keyframes: {
        progress: number;
        value: Pose;
        key?: string;
    }[], duration: number, userAction: boolean): Promise<void>;
    /** 生命周期：时间迭代 */
    updateTime(time: number, deltaTime: number): void;
    /** 获取目标姿态 */
    getTargetState(): State;
    /** 初始化动画 */
    protected initAnimation(): Promise<void>;
    /**
     * 方向射线上寻找下一个目标点位
     * @param raycaster - 方向射线
     * @returns 方向射线上寻找下一个目标点位
     */
    protected getForwardObserverOrNot(raycaster: THREE.Raycaster): WorkObserver | null;
    /** 计算 屏幕像素 offset 与 转动间的关系 */
    protected coordinatesForOffset(offset: {
        x: number;
        y: number;
    }): {
        longitude: number;
        latitude: number;
    };
    /** 惯性滚动 */
    protected requestMomentumMovement(event: GestureEvent, isFirst: boolean, velocity: {
        longitude: number;
        latitude: number;
        x: number;
        y: number;
        z: number;
    }, duration: number): void;
    protected fixFinalState(state: State): void;
    /** 触摸 Pan 事件，相机转动 */
    protected onPanGesture(event: GestureEvent): void;
    /** 触摸 Pinch 事件， 相机缩放 */
    protected onPinchGesture(event: GestureEvent): void;
    /** 鼠标移动事件 展示交点环 */
    protected onMouseMove(event: GestureEvent): void;
    /** 鼠标滚轮事件 相机缩放 */
    protected onMouseWheel(event: GestureEvent): void;
    /** 触摸 点击屏幕 */
    protected onTapGesture(event: GestureEvent): void;
    /** 触摸 双点屏幕 */
    protected onDblTapGesture(event: GestureEvent): void;
    /** 隐藏焦点环 */
    protected hideIntersectMesh(): void;
}
export { MapviewController, MapviewControllerInitArgs, MapviewControllerCustomInitArgs, defaultMapviewControllerCustomInitArgs, };
