import { Vec2, Vec3 } from '@turbox3d/shared';
import { CanvasHandlers, InteractiveConfig, InteractiveType, ViewportInfo } from './type';
import { CoordinateController } from './coordinate';
export interface HitResult<DisplayObject> {
    /** event 的直接对象 */
    originalTarget?: DisplayObject;
    /** originalTarget 或 originalTarget 的祖先中的第一个可被交互的元素 */
    target?: DisplayObject;
    /** 选中对象的具体场景鼠标位置 */
    originalTargetPoint?: Vec2 | Vec3;
}
interface Option<Container, DisplayObject, Renderer> {
    renderer: Renderer;
    container: Container;
    canvasHandler: CanvasHandlers;
    coordinateType?: string;
    viewport?: ViewportInfo;
    getCoordinateCtrl: () => CoordinateController;
    getHitTargetOriginal: (point: Vec2, container: Container, configMap: Map<DisplayObject, InteractiveConfig>, interactiveType: InteractiveType) => HitResult<DisplayObject>;
    maxFPS: number;
}
export declare class InteractiveController<Container, DisplayObject, Renderer> {
    static create<Container, DisplayObject, Renderer>(option: Option<Container, DisplayObject, Renderer>): InteractiveController<Container, DisplayObject, Renderer>;
    /** 渲染器对应的 canvas */
    private renderer;
    /** 根容器 */
    private container;
    private interactiveListener;
    /** 交互对象的配置 */
    private interactiveConfig;
    /** 画布处理事件 */
    private canvasHandlers;
    /**
     * 当前的拖拽目标
     */
    private dragTarget?;
    /**
     * 持续 hover 的目标
     */
    private hoverTarget?;
    /** 上次点击命中的目标 */
    private lastClickTarget?;
    /** 当前视口的区域信息 */
    private viewport?;
    /** 坐标系类型 */
    private coordinateType?;
    /** hitTarget 的实现，不同渲染引擎不一样 */
    private getHitTargetOriginal;
    private getCoordinateCtrl;
    /** 最大帧率限制 */
    private maxFPS;
    constructor(option: Option<Container, DisplayObject, Renderer>);
    /**
     * 更新视图对象的交互配置
     *
     * @param view 视图对象
     * @param config 交互配置。该参数不传时认为该对象无法交互
     */
    updateInteractiveObject: (view: DisplayObject, config?: InteractiveConfig) => void;
    /** 更新视口信息 */
    updateViewportInfo: (viewport: ViewportInfo) => void;
    /**
     * 对画布进行交互事件监听
     *
     * @param canvas
     */
    startListener(): void;
    /**
     * 取消所有监听的交互事件
     * @param canvas
     */
    removeAllListener(): void;
    /**
     * 用于给外部发起一次点击拾取
     * @param point 是相对于 canvas 左上角的点击位置
     */
    hitTarget: (point: Vec2) => Partial<import("./type").ViewEntity> | undefined;
    /**
     * 获取本次鼠标事件的交互对象
     */
    private hitTargetHandler;
    /**
     * 主动传入一个点位做一次 hitTest，返回结果
     * @param point 是相对于 canvas 左上角的点击位置
     */
    hitTargetOriginalByPoint(point: Vec2): HitResult<DisplayObject>;
    private revisePointByViewPort;
    private onClick;
    private onDBClick;
    private onRightClick;
    private onDragStart;
    private onDragMove;
    private onDragEnd;
    private onPinchStart;
    private onPinch;
    private onPinchEnd;
    private onRotateStart;
    private onRotate;
    private onRotateEnd;
    private onPress;
    private onPressUp;
    private onCarriageMove;
    private onCarriageEnd;
    private onHover;
    private onHoverIn;
    private onHoverOut;
    private onWheel;
}
export {};
