import type { Object3D, OrthographicCamera, PerspectiveCamera, Scene } from 'three'; import { EventDispatcher, Vector3 } from 'three'; import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js'; import type { MapControls } from 'three/examples/jsm/controls/MapControls.js'; import type { ISpawnPoint } from './CharacterControls'; import { CharacterControls } from './CharacterControls'; /** * 控制器的模式 */ export declare enum EControlMode { Orbit = 0,// 轨道控制器 :鼠标左键拖动旋转,鼠标右键拖动平移,滚轮缩放, WSAD控制前后左右 Map = 1,// 地图控制器 :鼠标左键拖动平移,鼠标右键拖动旋转,滚轮缩放, WASD控制前后左右 First = 2,// 第一人称控制器 :鼠标左键拖动旋转,滚轮缩放, WASD控制前后左右, Shift奔跑, +|-移动速度 Third = 3,// 第三人称控制器 :鼠标左键拖动旋转,滚轮缩放, WASD控制前后左右, Shift奔跑, +|-移动速度 Fly = 4 } export interface UniversalControlsOptions { scene: Scene; camera: PerspectiveCamera | OrthographicCamera; domElement: HTMLElement; mode?: EControlMode; characterModelUrl?: string; spawnPoint?: ISpawnPoint; sceneControl?: any; limit?: { pitch?: [number, number]; yaw?: [number, number]; distance?: [number, number]; }; target?: [number, number, number]; } export type ControlsType = OrbitControls | MapControls | CharacterControls | null; export type ControlsOption = { mode: { type: EControlMode; }; limit?: { pitch?: [number, number]; yaw?: [number, number]; distance?: [number, number]; }; }; /** * 通用控制器 * * @export * * @ */ export declare class UniversalControls extends EventDispatcher { private scene; private _camera; private domElement; private options; private currentTween; private sceneControl?; private controls; activeControl: ControlsType; private _mode; constructor(options: UniversalControlsOptions); onChange(): void; setFocusDistance(object: Object3D): void; get mode(): EControlMode; set mode(value: EControlMode); get enabled(): boolean; set enabled(value: boolean); get(): ControlsOption; set(option: ControlsOption): void; setMode(mode: EControlMode): void; update(): void; dispose(): void; getDistance(): number; get camrea(): PerspectiveCamera | OrthographicCamera; get target(): Vector3 | undefined; getAzimuthalAngle(): number; getPolarAngle(): number; }