import { Component } from "./component";
import { DTModel, DTVector3 } from "./model";
/**
 * @description 相机移动方向，左、右、上、下、前、后
 */
export declare enum CameraMoveDirection {
    Left = "Left",
    Right = "Right",
    Up = "Up",
    Down = "Down",
    Forward = "Forward",
    Back = "Back"
}
export type CameraOptions = {
    fov?: number;
    aspect?: number;
    near?: number;
    far?: number;
};
export type TravelOptions = {
    easing?: (amount: number) => number;
    delay?: number;
    mode?: "reverse" | "loop";
    duration?: number;
    speed?: number;
    autoAdjust?: boolean;
    distance?: number;
    phi?: number;
    theta?: number;
    route?: "none" | "spherical";
    process?: (index: number) => void;
};
export type AnimationActions = {
    clear: () => void;
    insert: (point: CameraPosition[], index?: number) => void;
    remove: (index: number, count?: number) => void;
    continue: () => void;
    pause: () => void;
    stop: () => void;
};
export type MoveOptions = {
    duration?: number;
    speed?: number;
    easing?: (amount: number) => number;
    mode?: "loop" | "reverse";
    process?: (index: number) => void;
};
export type FlyToOptions = {
    easing?: (amount: number) => number;
    autoAdjust?: boolean;
    duration?: number;
    distance?: number;
    lookAt?: CameraPosition;
    position?: DTVector3;
    phi?: number;
    theta?: number;
    route?: "none" | "spherical";
};
export type FollowOptions = {
    relative: DTVector3;
    phi: number;
    theta: number;
};
export type RotationOptions = {
    duration?: number;
    easing?: (amount: number) => number;
    slerp?: number;
};
export type FaceToOptions = {
    duration?: number;
    zoom?: number;
    easing?: (amount: number) => number;
};
export type FllowAction = {
    continue: () => void;
    stop: () => void;
};
export type FitOptions = {
    target?: Component<DTModel> | DTModel;
    speed?: number;
    cw?: boolean;
};
export type ZoomOptions = {
    zoom: number;
    duration?: number;
    easing?: (amount: number) => number;
};
export type CameraPosition = DTVector3 | Component<DTModel> | DTModel;
export interface DTCamera {
    target: DTVector3;
    position: DTVector3;
    /**
     * 相机位置
     */
    /**
     * 相机视角
     */
    lookAt(x: number | DTVector3, y?: number, z?: number): void;
    /**
     * 相机围绕场景或者模型自动旋转
     * @param target
     * @param options
     */
    fit(options: FitOptions): () => void;
    /**
     * 缩放镜头
     * @param zoom
     */
    setZoom(options: ZoomOptions): void;
    /**
     * 相机飞到某个位置
     * @param target
     * @param params
     */
    flyTo(lookAt: CameraPosition, params?: Omit<FlyToOptions, "lookAt">): void;
    /**
     * 相机旅行
     * @param position
     * @param options
     */
    travel(positions: CameraPosition[], options?: TravelOptions): AnimationActions;
    /**
     * 移动相机到指定的位置
     * @param position
     * @param lookAt
     * @param duration
     */
    /**
     * 相机停止移动
     */
    stop(): void;
    /**
     * 配置相机参数
     * @param options
     */
    /**
     * 重置相机
     */
    /**
     * 锁定相机
     * @param status
     * @param time
     */
    /**
     * 跟随
     * @param object
     * @param options
     */
    follow(object: Component<any> | DTModel, options?: FollowOptions): FllowAction;
    /**
     * 面向某个点或者物体
     * @param position
     * @param options
     */
    faceTo(position: CameraPosition, options?: FaceToOptions): void;
}
