@realsee/five
Version:
Realsee Renderer SDK
215 lines (214 loc) • 7.08 kB
TypeScript
import * as THREE from 'three';
import { State } from '../types/state';
import { Pano } from './pano';
import { Mode } from '../application/mode';
import { NetWorkMeta, NetworkType, NetworkState } from './ajax';
import { Works, Work } from '../work';
import { ModelScene, Model } from '../model';
import { type Tile } from '../model/tile3d/tile';
import { Intersection } from '../model/intersection';
import { MovePanoOptions } from '../types/movePanoOptions';
/** 所有事件的基础接口 */
export interface BaseEvent {
/** 事件类型名称 */
type: string;
/** 事件触发时的时间戳 */
timeStamp: number;
/** 阻止事件的默认行为 */
preventDefault(): void;
/** 是否已调用过 preventDefault */
readonly defaultPrevented: boolean;
}
export interface BaseExtendableEvent extends BaseEvent {
waitUntil(f: Promise<any>): void;
}
/** 射线检测事件 */
export interface IntersectEvent extends BaseEvent {
/** 被检测到的 3D 对象 */
object: THREE.Object3D;
/** 发出射线的 Raycaster */
raycaster: THREE.Raycaster;
/** 射线与对象的交点信息,未命中时为 null */
intersection: Intersection | null;
}
/** 状态变更事件 */
export interface StateEvent extends BaseEvent {
/** 当前的 Five 状态 */
state: State;
/** 是否由用户交互触发 */
userAction: boolean;
}
/** 全景图切换事件 */
export interface PanoEvent extends StateEvent {
/** 切换前的全景图 */
prevPano: Pano;
/** 新的全景图 */
pano: Pano;
/** 切换动画进度(0-1) */
progress: number;
/** 切换时传入的选项 */
options: MovePanoOptions;
/** 切换过程中发生的错误 */
error: Error | null;
}
/** 全景图准备事件 */
export interface PanoPrepareEvent extends BaseExtendableEvent {
/** 切换时选项 */
options: MovePanoOptions;
/** 切换前模态 */
prevMode: Mode;
/** 切换前的全景图 */
prevPano: Pano;
/** 全景图 */
pano: Pano;
}
/** 全景图纹理加载事件 */
export interface PanoTextureEvent extends BaseEvent {
/** 对应的全景图 */
pano: Pano;
/** 纹理加载进度(0-1) */
progress: number;
/** 网络请求元信息 */
meta: NetWorkMeta[] | null;
/** 加载过程中发生的错误 */
error: Error | null;
}
/** 单个触控点 / 鼠标指针的信息 */
export interface GesturePointer {
/** 指针在屏幕上的 x 坐标(像素) */
x: number;
/** 指针在屏幕上的 y 坐标(像素) */
y: number;
/** 相对上一帧的位移量 */
delta: number;
/** 当前按下的鼠标键(单键编号) */
button: number;
/** 当前按下的所有鼠标键(位掩码) */
buttons: number;
shiftKey: boolean;
ctrlKey: boolean;
altKey: boolean;
metaKey: boolean;
/** 归一化设备坐标(NDC) */
coords: THREE.Vector2;
/** 从该指针位置发出的射线 */
raycaster: THREE.Raycaster;
}
/** 手势事件,涵盖触摸、鼠标、笔等输入方式 */
export interface GestureEvent extends StateEvent {
/** 事件的原始 DOM 目标 */
target: EventTarget | null;
/** 输入设备类型 */
pointerType: 'touch' | 'pen' | 'mouse' | 'kinect';
/** 原始 DOM 事件 */
srcEvent: MouseEvent | TouchEvent | PointerEvent;
/** 所有活跃指针的信息列表 */
pointers: GesturePointer[];
/** 是否为该手势序列的第一个事件 */
isFirst: boolean;
/** 是否为该手势序列的最后一个事件 */
isFinal: boolean;
/** 多指缩放比例 */
scale: number;
/** 所有活跃指针的中心点信息 */
center: GesturePointer;
/** 当前 x 方向速度 */
velocityX: number;
/** 当前 y 方向速度 */
velocityY: number;
/** 整个手势序列的 x 方向平均速度 */
overallVelocityX: number;
/** 整个手势序列的 y 方向平均速度 */
overallVelocityY: number;
}
/** XR 会话事件(进入/退出 XR 模式时触发) */
export interface XRSessionEvent extends BaseEvent {
/** 当前 XR 会话 */
session: XRSession | null;
/** XR 设备类型 */
machineType: 'Pico' | 'Oculus';
}
/** XR 控制器状态 */
export interface XRControllerState {
/** 摇杆轴输入(0-1) */
axes: Record<'up' | 'down' | 'left' | 'right', number>;
/** 左手控制器射线 */
raycaster: THREE.Raycaster;
/** 距上一帧的时间间隔 */
deltaTime: number;
}
/** XR 控制器输入事件 */
export interface XRControllerEvent extends BaseEvent {
/** 左手控制器状态 */
left: XRControllerState;
/** 右手控制器状态 */
right: XRControllerState;
/** 各按键的按下状态 */
buttons: {
X: boolean;
Y: boolean;
LeftTrigger: boolean;
LeftPinch: boolean;
A: boolean;
B: boolean;
RightTrigger: boolean;
RightPinch: boolean;
};
}
/** XR 手势事件(按键、摇杆方向等离散输入) */
export interface XRGestureEvent extends BaseEvent {
/** 当前 XR 会话 */
session: XRSession | null;
/** 触发该手势的按键或摇杆方向 */
buttons: 'A' | 'B' | 'X' | 'Y' | 'RightTrigger' | 'RightPinch' | 'LeftTrigger' | 'LeftPinch' | 'LeftAxesLeft' | 'LeftAxesRight' | 'LeftAxesUp' | 'LeftAxesDown' | 'RightAxesLeft' | 'RightAxesRight' | 'RightAxesUp' | 'RightAxesDown';
/** XR 设备类型 */
machineType: 'Pico' | 'Oculus';
/** 是否为该手势序列的第一个事件 */
isFirst: boolean;
/** 是否为该手势序列的最后一个事件 */
isFinal: boolean;
/** 控制器射线信息 */
controllers: {
raycaster: {
leftRay: THREE.Raycaster;
rightRay: THREE.Raycaster;
};
};
}
export interface WorksEvent extends BaseEvent {
input: any;
works: Works;
userAction: boolean;
}
export interface ModelSceneEvent extends BaseEvent {
modelScene: ModelScene;
}
export interface ModelEvent extends BaseEvent {
model: Model;
work: Work;
error: Error | null;
}
export interface ModelTileEvent extends BaseEvent {
model: Model;
work: Work;
tile: Tile;
}
export interface ModeChangeEvent extends StateEvent {
prevMode: Mode;
mode: Mode;
}
export interface RenderEvent extends BaseEvent {
needsRender: boolean;
}
export interface ObjectEvent extends BaseEvent {
object: THREE.Object3D;
}
export interface NetworkResourceEvent extends BaseEvent {
source: string;
requestType: NetworkType;
requestState: NetworkState;
detail: string;
}
export declare function createEvent<T extends BaseEvent = BaseEvent>(type: string, eventArgs: Omit<T, keyof BaseEvent>): T;
export declare function createExtendableEvent<T extends BaseExtendableEvent = BaseExtendableEvent>(type: string, eventArgs: Omit<T, keyof BaseExtendableEvent>): T;
export declare function waitForExtendableEvent(event: BaseExtendableEvent): Promise<void>;