@turbox3d/event-manager
Version:
Large-scale productivity application event management library
110 lines (109 loc) • 3.65 kB
TypeScript
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 {};