@soonspacejs/plugin-navigation 2.13.5 → 2.13.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +113 -113
- package/dist/index.esm.js +1168 -1
- package/dist/index.esm.js.map +1 -0
- package/package.json +3 -3
- package/dist/azimuth/index.d.ts +0 -4
- package/dist/camera/index.d.ts +0 -5
- package/dist/camera/map-camera.d.ts +0 -14
- package/dist/camera/navigate-camera.d.ts +0 -202
- package/dist/camera/ssp-camera.d.ts +0 -13
- package/dist/camera/types.d.ts +0 -26
- package/dist/camera/utils.d.ts +0 -11
- package/dist/index.d.ts +0 -4
- package/dist/navigator/index.d.ts +0 -68
- package/dist/navigator/navigator-nodes.d.ts +0 -26
- package/dist/navigator/types.d.ts +0 -23
- package/dist/navigator/utils.d.ts +0 -12
- package/dist/utils/gyro.d.ts +0 -26
- package/dist/utils/index.d.ts +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":["../src/camera/ssp-camera.ts","../src/camera/map-camera.ts","../src/utils/gyro.ts","../src/camera/types.ts","../src/camera/utils.ts","../src/camera/navigate-camera.ts","../src/navigator/types.ts","../../../../node_modules/.pnpm/@three3d+tools@1.9.4_three@0.172.0/node_modules/@three3d/tools/dist/tools.mjs","../src/navigator/utils.ts","../src/navigator/navigator-nodes.ts","../src/navigator/index.ts","../src/azimuth/index.ts"],"sourcesContent":["import { Camera, } from 'three'\r\nimport SoonSpace from 'soonspacejs'\r\n\r\nexport abstract class SoonSpaceCamera<C extends Camera = Camera> {\r\n\r\n protected _isActive = false\r\n\r\n constructor (\r\n\t\tpublic readonly ssp: SoonSpace,\r\n\t\tpublic nativeCamera: C\r\n ) {\r\n\r\n this.ssp.signals.cameraObjectChange.add( () => {\r\n\r\n const currentCamera = this.ssp.viewport.cameraManager\r\n .currentCamera as Camera\r\n\r\n if ( this._isActive && currentCamera === this.nativeCamera ) return\r\n else if ( currentCamera === this.nativeCamera ) {\r\n\r\n this._onBeforeEnter()\r\n this.onEnter()\r\n \r\n } else if ( this._isActive && currentCamera !== this.nativeCamera ) {\r\n\r\n this._onBeforeQuit()\r\n this.onQuit()\r\n \r\n }\r\n \r\n } )\r\n \r\n }\r\n\r\n active () {\r\n\r\n this.ssp.viewport.cameraManager.setCurrentCamera( this.nativeCamera as any )\r\n \r\n }\r\n\r\n private _onBeforeEnter () {\r\n\r\n this._isActive = true\r\n \r\n }\r\n\r\n private _onBeforeQuit () {\r\n\r\n this._isActive = false\r\n \r\n }\r\n\r\n protected onEnter () {}\r\n\r\n protected onQuit () {}\r\n\r\n}\r\n","import { OrthographicCamera, } from 'three'\r\nimport SoonSpace from 'soonspacejs'\r\nimport { SoonSpaceCamera, } from './ssp-camera'\r\n\r\nexport class MapCamera extends SoonSpaceCamera<OrthographicCamera> {\r\n\r\n protected resizeObserver = new ResizeObserver( () => {\r\n\r\n this.resizeCamera()\r\n \r\n } )\r\n\r\n _zoom = 0.01\r\n get zoom () {\r\n\r\n return this._zoom\r\n \r\n }\r\n set zoom ( value: number ) {\r\n\r\n this._zoom = value\r\n this.resizeCamera()\r\n \r\n }\r\n\r\n constructor (\r\n\t\tpublic readonly ssp: SoonSpace\r\n ) {\r\n\r\n const camera = new OrthographicCamera()\r\n\r\n super( ssp, camera )\r\n camera.far = 200000\r\n \r\n }\r\n\r\n resizeCamera () {\r\n\r\n if ( this._isActive ) {\r\n\r\n const { clientWidth: width, clientHeight: height, } =\r\n\t\t\t\tthis.ssp.viewport.renderer.domElement\r\n\r\n const halfWidth = ( width * this.zoom ) / 2\r\n const halfHeight = ( height * this.zoom ) / 2\r\n\r\n this.nativeCamera.left = -halfWidth\r\n this.nativeCamera.right = halfWidth\r\n this.nativeCamera.top = halfHeight\r\n this.nativeCamera.bottom = -halfHeight\r\n this.nativeCamera.updateProjectionMatrix()\r\n \r\n }\r\n \r\n }\r\n\r\n protected onEnter (): void {\r\n\r\n console.log( 'map camera enter' )\r\n if ( !this.ssp.domElement ) return\r\n this.resizeObserver.observe( this.ssp.domElement )\r\n this.resizeCamera()\r\n \r\n }\r\n\r\n protected onQuit (): void {\r\n\r\n if ( !this.ssp.domElement ) return\r\n this.resizeObserver.unobserve( this.ssp.domElement )\r\n console.log( 'map camera quit' )\r\n \r\n }\r\n\r\n}\r\n","export class GyroListener {\r\n\r\n gyroEvent: null | ( ( event: DeviceOrientationEvent ) => void ) = null\r\n\r\n onChange: (\r\n\t\talpha: number | null,\r\n\t\tbeta: number | null,\r\n\t\tgamma: number | null\r\n\t) => void = () => {}\r\n\r\n _isActive = false\r\n\r\n defaultBeta: number | null = null\r\n defaultAlpha: number | null = null\r\n defaultGamma: number | null = null\r\n\r\n cache: null | {\r\n\t\tbeta: number | null;\r\n\t\talpha: number | null;\r\n\t\tgamma: number | null;\r\n\t} = null\r\n\r\n beta: number | null = null\r\n alpha: number | null = null\r\n gamma: number | null = null\r\n\r\n gyroX\r\n gyroY\r\n gyroZ\r\n absolute\r\n\r\n constructor ( x?: boolean, y?: boolean, z?: boolean, absolute?: boolean ) {\r\n\r\n this.gyroX = x ?? true\r\n this.gyroY = y ?? true\r\n this.gyroZ = z ?? true\r\n this.absolute = absolute ?? true\r\n \r\n }\r\n\r\n requestPermisson () {\r\n\r\n return new Promise( ( resolve, reject ) => {\r\n\r\n if ( !( window.DeviceOrientationEvent as any ).requestPermission ) {\r\n\r\n resolve( true )\r\n \r\n }\r\n\r\n ( window.DeviceOrientationEvent as any )\r\n ?.requestPermission()\r\n .then( ( state: 'granted' | 'denied' | 'prompt' ) => {\r\n\r\n if ( state === 'granted' ) {\r\n\r\n //允许\r\n resolve( true )\r\n \r\n } else {\r\n\r\n //拒绝\r\n reject( '用户拒绝使用陀螺仪权限' )\r\n \r\n }\r\n \r\n } )\r\n \r\n } )\r\n \r\n }\r\n\r\n /** 监听陀螺仪事件 */\r\n async active () {\r\n\r\n await this.requestPermisson()\r\n this._isActive = true\r\n if ( this.gyroEvent ) {\r\n\r\n this.inActive()\r\n \r\n }\r\n this.gyroEvent = ( event: DeviceOrientationEvent ) => {\r\n\r\n const { defaultAlpha, defaultBeta, defaultGamma, gyroX, gyroY, gyroZ, } =\r\n\t\t\t\tthis\r\n const { alpha, beta, gamma, } = event\r\n\r\n const resultAlpha = gyroY ? alpha ?? defaultAlpha : defaultAlpha\r\n const resultBeta = gyroX ? beta ?? defaultBeta : defaultBeta\r\n const resultGamma = gyroZ ? gamma ?? defaultGamma : defaultGamma\r\n\r\n if ( this.absolute ) {\r\n\r\n this.alpha = resultAlpha\r\n this.beta = resultBeta\r\n this.gamma = resultGamma\r\n \r\n } else {\r\n\r\n // 计算差值\r\n if ( !this.cache ) {\r\n\r\n this.cache = {\r\n alpha: resultAlpha,\r\n beta: resultBeta,\r\n gamma: resultGamma,\r\n }\r\n \r\n } else {\r\n\r\n const { alpha, beta, gamma, } = this.cache\r\n\r\n this.alpha = resultAlpha === null ? null : alpha === null ? resultAlpha : resultAlpha - alpha\r\n this.beta = resultBeta === null ? null : beta === null ? resultBeta : resultBeta - beta\r\n this.gamma = resultGamma === null ? null : gamma === null ? resultGamma : resultGamma - gamma\r\n \r\n }\r\n \r\n }\r\n\r\n this.onChange( this.alpha, this.beta, this.gamma )\r\n \r\n }\r\n window.addEventListener( 'deviceorientation', this.gyroEvent )\r\n \r\n }\r\n\r\n /** 销毁陀螺仪事件 */\r\n inActive () {\r\n\r\n this._isActive = false\r\n if ( !this.gyroEvent ) return\r\n window.removeEventListener( 'deviceorientation', this.gyroEvent )\r\n this.gyroEvent = null\r\n \r\n }\r\n\r\n}\r\n","import { Euler, EulerOrder, Object3D, Vector3, } from 'three'\r\n\r\nexport type NavigateOrientationTarget = 'main' | Vector3 | Euler | Object3D\r\n\r\nexport enum NAVIGATE_VISION_TYPE {\r\n FIRST_VISION = 'first',\r\n THIRD_VISION = 'third',\r\n UP_VISION = 'up',\r\n LEFT_VISION = 'left',\r\n}\r\n\r\nexport enum NAVIGATE_ORIENTATION_TYPE {\r\n RELATIVE_ORIENTATION = 'relative',\r\n FIXED_ORIENTATION = 'fixed',\r\n GYRO_ORIENTATION = 'gyro',\r\n}\r\n\r\nexport type CameraOppositeType = {\r\n x: boolean;\r\n y: boolean;\r\n z: boolean;\r\n}\r\n\r\nexport type Object3DLike = { position: Vector3; rotation: Euler } & Record<\r\n PropertyKey,\r\n any\r\n>\r\n\r\nexport type VectorArray = [number, number, number]\r\nexport type EulerArray = [number, number, number, EulerOrder?]\r\n\r\nexport type FixVector = VectorArray | ( ( target?: Object3DLike ) => VectorArray )\r\nexport type FixEuler = EulerArray | ( ( target?: Object3DLike ) => EulerArray )\r\n","import { Euler, Matrix4, Quaternion, Vector3, } from 'three'\r\nimport { FixEuler, FixVector, Object3DLike, } from './types'\r\n\r\nexport function Vector3ToEuler ( v: Vector3 ) {\r\n\r\n const matrix = new Matrix4()\r\n const quaternion = new Quaternion()\r\n const euler = new Euler()\r\n\r\n // 将方向向量转换为旋转矩阵\r\n matrix.lookAt( new Vector3(), v, new Vector3( 0, 1, 0 ) )\r\n\r\n // 将旋转矩阵转换为四元数\r\n quaternion.setFromRotationMatrix( matrix )\r\n\r\n // 将四元数转换为欧拉角\r\n euler.setFromQuaternion( quaternion )\r\n\r\n return euler\r\n\r\n}\r\n\r\nexport function eulerToVector3 ( e: Euler ) {\r\n\r\n return new Vector3( 0, 0, -1 ).applyQuaternion(\r\n new Quaternion().setFromEuler( e )\r\n )\r\n\r\n}\r\n\r\n/**\r\n * 欧拉角归一化\r\n * @param e 欧拉角\r\n */\r\nexport function normalizeEuler ( e: Euler ) {\r\n\r\n return eulerToVector3( e ).normalize()\r\n\r\n}\r\n\r\nexport function getFixVector ( v: FixVector, target?: Object3DLike ) {\r\n\r\n return typeof v === 'function' ? v( target ) : v\r\n\r\n}\r\n\r\nexport function getFixEuler ( e: FixEuler, target?: Object3DLike ) {\r\n\r\n return typeof e === 'function' ? e( target ) : e\r\n\r\n}\r\n\r\n","import { Tween, } from 'three/examples/jsm/libs/tween.module.js'\r\nimport SoonSpace from 'soonspacejs'\r\nimport {\r\n Camera,\r\n Euler,\r\n MathUtils,\r\n Object3D,\r\n PerspectiveCamera,\r\n Quaternion,\r\n Vector3,\r\n} from 'three'\r\nimport { GyroListener, } from '../utils/gyro'\r\nimport { SoonSpaceCamera, } from './ssp-camera'\r\nimport {\r\n CameraOppositeType,\r\n EulerArray,\r\n FixEuler,\r\n FixVector,\r\n NAVIGATE_ORIENTATION_TYPE,\r\n NAVIGATE_VISION_TYPE,\r\n NavigateOrientationTarget,\r\n} from './types'\r\nimport {\r\n Vector3ToEuler,\r\n getFixEuler,\r\n getFixVector,\r\n normalizeEuler,\r\n} from './utils'\r\n\r\n/**\r\n * 相机控制回调\r\n *\r\n * camera 当前相机\r\n *\r\n * target 跟踪的目标\r\n */\r\nexport type ControlCallback = (\r\n\tcamera: Camera,\r\n\ttarget: Object3D,\r\n\tevent?: MouseEvent | TouchEvent\r\n) => void\r\n\r\nexport interface NavigateCameraOptions {\r\n\tdisabledAnimate: boolean;\r\n\tfixedOrientation: boolean;\r\n\tautoRestoreOrientation: boolean | number;\r\n\toppositeCamera: boolean;\r\n\toppositeType: CameraOppositeType;\r\n\torientationTarget: NavigateOrientationTarget;\r\n\tvision: NAVIGATE_VISION_TYPE;\r\n\torientationType: NAVIGATE_ORIENTATION_TYPE;\r\n\tdistanceToTarget: number;\r\n\trotationToTarget: Vector3;\r\n\tisFixRotationRelativeTarget: boolean;\r\n\ttargetRotationFix: FixEuler;\r\n\tisFixPositionRelativeTarget: boolean;\r\n\ttargetPositionFix: FixVector;\r\n\tenableGyro: boolean;\r\n\tgyroX: boolean;\r\n\tgyroY: boolean;\r\n\tgyroZ: boolean;\r\n\tgyroAbsolute: boolean;\r\n\tonControlStart: null | ControlCallback;\r\n\tonControlRender: null | ControlCallback;\r\n\tonControlEnd: null | ControlCallback;\r\n}\r\n\r\nconst DEFAULT_NAVIGATE_CAMERA_OPTIONS = Object.freeze( {\r\n disabledAnimate: false,\r\n fixedOrientation: false,\r\n autoRestoreOrientation: 1500,\r\n oppositeCamera: false,\r\n oppositeType: {\r\n x: false,\r\n y: true,\r\n z: false,\r\n },\r\n orientationTarget: 'main',\r\n vision: NAVIGATE_VISION_TYPE.THIRD_VISION,\r\n orientationType: NAVIGATE_ORIENTATION_TYPE.RELATIVE_ORIENTATION,\r\n rotationToTarget: new Vector3( 0, 4, -10 ),\r\n distanceToTarget: 1,\r\n targetRotationFix: [ 0, 0, 0, 'XYZ' ],\r\n isFixRotationRelativeTarget: true,\r\n targetPositionFix: [ 0, 2, 0 ],\r\n isFixPositionRelativeTarget: false,\r\n enableGyro: false,\r\n gyroX: false,\r\n gyroY: true,\r\n gyroZ: false,\r\n gyroAbsolute: true,\r\n onControlStart: null,\r\n onControlRender: null,\r\n onControlEnd: null,\r\n} as NavigateCameraOptions )\r\n\r\nfunction _applyEulerFix ( this: Object3D, fix: EulerArray ) {\r\n\r\n const quaternion = new Quaternion().setFromEuler( new Euler().fromArray( fix ) )\r\n\r\n this.quaternion.multiply( quaternion )\r\n\r\n}\r\n\r\n/** 导航相机 */\r\nexport class NavigateCamera extends SoonSpaceCamera<Camera> {\r\n\r\n initOptions = DEFAULT_NAVIGATE_CAMERA_OPTIONS\r\n\r\n cameraKey = 'navigatorCamera' + ~~( Math.random() * 10000 )\r\n\r\n private _events = {\r\n onRender: () => {},\r\n onMouseDown: ( event: MouseEvent | TouchEvent ) => {},\r\n }\r\n\r\n get position () {\r\n\r\n return this.nativeCamera.position\r\n \r\n }\r\n\r\n get rotation () {\r\n\r\n return this.nativeCamera.rotation\r\n \r\n }\r\n\r\n get quaternion () {\r\n\r\n return this.nativeCamera.quaternion\r\n \r\n }\r\n\r\n private _lookAt ( ...args: [any, any?, any?] ) {\r\n\r\n this.nativeCamera.lookAt( ...args )\r\n\r\n if ( !this.isFixRotationRelativeTarget ) {\r\n\r\n _applyEulerFix.call( this.nativeCamera, this.targetRotationAfterFix )\r\n \r\n }\r\n \r\n }\r\n\r\n private _restoreTimer: NodeJS.Timeout | undefined = void 0\r\n\r\n private _positionTween: Tween<Vector3> | null = null\r\n\r\n private autoFollowRender = true\r\n\r\n /** 相机位置记录用的对象,用于恢复相机位置和朝向使用 */\r\n protected _cameraPlaceholder = new Object3D()\r\n\r\n /** 取消飞向动画 */\r\n disabledAnimate = DEFAULT_NAVIGATE_CAMERA_OPTIONS.disabledAnimate\r\n /** 第三人称相机距离跟踪目标距离 */\r\n distanceToTarget = DEFAULT_NAVIGATE_CAMERA_OPTIONS.distanceToTarget\r\n /** 第三人称相机相对模型视角 */\r\n rotationToTarget = DEFAULT_NAVIGATE_CAMERA_OPTIONS.rotationToTarget\r\n /** 相机反转 */\r\n oppositeCamera = DEFAULT_NAVIGATE_CAMERA_OPTIONS.oppositeCamera\r\n /** 相机反转类型, 默认为 Y 轴对称 */\r\n oppositeType = DEFAULT_NAVIGATE_CAMERA_OPTIONS.oppositeType\r\n\r\n /** 是否相对模型修正角度 */\r\n isFixRotationRelativeTarget =\r\n DEFAULT_NAVIGATE_CAMERA_OPTIONS.isFixRotationRelativeTarget\r\n /**\r\n\t * 目标角度修正\r\n\t *\r\n\t * 支持传入 getter 函数\r\n\t */\r\n targetRotationFix: FixEuler =\r\n DEFAULT_NAVIGATE_CAMERA_OPTIONS.targetRotationFix\r\n\r\n /** 是否相对模型修正偏移 */\r\n isFixPositionRelativeTarget =\r\n DEFAULT_NAVIGATE_CAMERA_OPTIONS.isFixPositionRelativeTarget\r\n /**\r\n\t * 目标位置修正\r\n\t *\r\n\t * 支持传入 getter 函数\r\n\t */\r\n targetPositionFix: FixVector =\r\n DEFAULT_NAVIGATE_CAMERA_OPTIONS.targetPositionFix\r\n /**\r\n\t * 自动恢复朝向\r\n\t *\r\n\t * boolean 是否恢复朝向\r\n\t *\r\n\t * number 间隔多少秒后恢复朝向\r\n\t */\r\n autoRestoreOrientation: boolean | number =\r\n DEFAULT_NAVIGATE_CAMERA_OPTIONS.autoRestoreOrientation\r\n\r\n /** 当控制器控制相机时允许外部自定义控制,控制开始时触发 */\r\n onControlStart: null | ControlCallback = null\r\n /** 当控制器控制相机时允许外部自定义控制,控制进行时回调 */\r\n onControlRender: null | ControlCallback = null\r\n /** 当控制器控制相机时允许外部自定义控制,控制结束时回调 */\r\n onControlEnd: null | ControlCallback = null\r\n\r\n /** 陀螺仪 */\r\n protected _gyroListener!: GyroListener\r\n protected _enableGyro = false\r\n /** 开启 */\r\n get enableGyro () {\r\n\r\n return this._enableGyro\r\n \r\n }\r\n set enableGyro ( value: boolean ) {\r\n\r\n this._enableGyro = value\r\n value ? this._gyroListener.active() : this._gyroListener.inActive()\r\n \r\n }\r\n /** 是否应用陀螺仪 X 轴,默认不启动 */\r\n get gyroX () {\r\n\r\n return this._gyroListener.gyroX\r\n \r\n }\r\n set gyroX ( value: boolean ) {\r\n\r\n this._gyroListener.gyroX = value\r\n \r\n }\r\n\r\n /** 是否应用陀螺仪 Y 轴,默认启动 */\r\n get gyroY () {\r\n\r\n return this._gyroListener.gyroY\r\n \r\n }\r\n set gyroY ( value: boolean ) {\r\n\r\n this._gyroListener.gyroY = value\r\n \r\n }\r\n\r\n /** 是否应用陀螺仪 Z 轴,默认不启动 */\r\n get gyroZ () {\r\n\r\n return this._gyroListener.gyroZ\r\n \r\n }\r\n set gyroZ ( value: boolean ) {\r\n\r\n this._gyroListener.gyroZ = value\r\n \r\n }\r\n\r\n /** 陀螺仪是否使用绝对值,默认使用 */\r\n get gyroAbsolute () {\r\n\r\n return this._gyroListener.absolute\r\n \r\n }\r\n set gyroAbsolute ( value: boolean ) {\r\n\r\n this._gyroListener.absolute = value\r\n \r\n }\r\n\r\n /** 陀螺仪的旋转欧拉角 */\r\n protected _gyroRotation = new Euler()\r\n\r\n get targetRotationAfterFix () {\r\n\r\n return getFixEuler( this.targetRotationFix )\r\n \r\n }\r\n get targetPositionAfterFix () {\r\n\r\n return getFixVector( this.targetPositionFix )\r\n \r\n }\r\n\r\n get realDistanceToTarget () {\r\n\r\n if ( this.vision === 'first' ) return 1\r\n else return this.distanceToTarget\r\n \r\n }\r\n get realRotationToTarget () {\r\n\r\n switch ( this.vision ) {\r\n\r\n case 'first':\r\n return new Vector3( 0, 0, -1 )\r\n case 'up':\r\n return new Vector3( 0, 1, -0.01 )\r\n case 'left':\r\n return new Vector3( 1, 0, 0 )\r\n default:\r\n return this.rotationToTarget\r\n break\r\n \r\n }\r\n \r\n }\r\n\r\n protected _orientationType: NAVIGATE_ORIENTATION_TYPE =\r\n DEFAULT_NAVIGATE_CAMERA_OPTIONS.orientationType\r\n /** 绝对朝向的缓存值 */\r\n private _fixedOrientationRotation = new Euler()\r\n /**\r\n\t * \t相机朝向类型\r\n\t *\r\n\t * NAVIGATE_ORIENTATION_TYPE.RELATIVE_ORIENTATION 相对朝向\r\n\t *\r\n\t * NAVIGATE_ORIENTATION_TYPE.FIXED_ORIENTATION 绝对朝向\r\n\t *\r\n\t * NAVIGATE_ORIENTATION_TYPE.GYRO_ORIENTATION 陀螺仪朝向\r\n\t */\r\n get orientationType () {\r\n\r\n return this._orientationType\r\n \r\n }\r\n set orientationType ( value: NAVIGATE_ORIENTATION_TYPE ) {\r\n\r\n this._orientationType = value\r\n if ( value === NAVIGATE_ORIENTATION_TYPE.GYRO_ORIENTATION ) {\r\n\r\n this._gyroListener.active()\r\n \r\n } else {\r\n\r\n this._gyroListener.inActive()\r\n \r\n }\r\n\r\n if ( value === NAVIGATE_ORIENTATION_TYPE.FIXED_ORIENTATION ) {\r\n\r\n this._fixedOrientationRotation.copy( this.followRotation )\r\n \r\n }\r\n this.restoreOrientation()\r\n \r\n }\r\n\r\n protected _orientationTarget: NavigateOrientationTarget =\r\n DEFAULT_NAVIGATE_CAMERA_OPTIONS.orientationTarget\r\n /**\r\n\t * 相机朝向目标\r\n\t *\r\n\t * “main” 朝向跟踪目标\r\n\t *\r\n\t * Vector3 朝向点\r\n\t *\r\n\t * Object3D 朝向目标对象\r\n\t *\r\n\t * Euler 固定朝向\r\n\t */\r\n get orientationTarget () {\r\n\r\n return this._orientationTarget\r\n \r\n }\r\n set orientationTarget ( value: NavigateOrientationTarget ) {\r\n\r\n this._orientationTarget = value\r\n this.restoreOrientation()\r\n \r\n }\r\n\r\n protected _vision: NAVIGATE_VISION_TYPE =\r\n DEFAULT_NAVIGATE_CAMERA_OPTIONS.vision\r\n /**\r\n\t * 视角配置\r\n\t *\r\n\t * NAVIGATE_VISION_TYPE.FIRST_VISION 第一人称\r\n\t *\r\n\t * NAVIGATE_VISION_TYPE.THIRD_VISION 第三人称\r\n\t *\r\n\t * NAVIGATE_VISION_TYPE.UP_VISION 俯视图\r\n\t *\r\n\t * NAVIGATE_VISION_TYPE.LEFT_VISION 左视图\r\n\t *\r\n\t * 默认为第三人称\r\n\t */\r\n get vision () {\r\n\r\n return this._vision\r\n \r\n }\r\n set vision ( value: NAVIGATE_VISION_TYPE ) {\r\n\r\n this._vision = value\r\n\r\n // 第一视角时,隐藏跟随目标\r\n this.followTarget.visible = value !== NAVIGATE_VISION_TYPE.FIRST_VISION\r\n this.restoreOrientation()\r\n \r\n }\r\n\r\n protected _followTarget: Object3D = new Object3D()\r\n /** 相机跟随目标 */\r\n get followTarget (): Object3D {\r\n\r\n return this._followTarget\r\n \r\n }\r\n set followTarget ( value: Object3D ) {\r\n\r\n this._followTarget = value\r\n this.restoreOrientation()\r\n \r\n }\r\n /** 相机跟踪点(相对跟随目标以及偏移参数获取的点) */\r\n get followPosition () {\r\n\r\n const fixVector = new Vector3()\r\n\r\n fixVector.fromArray( this.targetPositionAfterFix )\r\n if ( this.isFixPositionRelativeTarget ) {\r\n\r\n fixVector.applyEuler( this.followRotation )\r\n \r\n }\r\n return this.followTarget.position.clone().add( fixVector )\r\n \r\n }\r\n /** 跟踪目标的方向(相对跟随目标以及偏移参数获取的朝向) */\r\n get followRotation () {\r\n\r\n const rotation = this.followTarget.rotation\r\n\r\n if ( this.isFixRotationRelativeTarget ) {\r\n\r\n const euler = new Euler().copy( rotation )\r\n\r\n const q1 = new Quaternion().setFromEuler( euler )\r\n\r\n const q2 = new Quaternion().setFromEuler(\r\n new Euler().fromArray( this.targetRotationAfterFix )\r\n )\r\n\r\n q1.multiply( q2 )\r\n\r\n return new Euler().setFromQuaternion( q1 )\r\n \r\n }\r\n\r\n return this.followTarget.rotation\r\n \r\n }\r\n\r\n protected _fixedOrientation =\r\n DEFAULT_NAVIGATE_CAMERA_OPTIONS.fixedOrientation\r\n /** 固定朝向,朝向不受控制器影响 */\r\n get fixedOrientation () {\r\n\r\n return this._fixedOrientation\r\n \r\n }\r\n set fixedOrientation ( value: boolean ) {\r\n\r\n this._fixedOrientation = value\r\n\r\n // 恢复正常朝向\r\n if ( !value ) {\r\n\r\n this.restoreOrientation()\r\n \r\n }\r\n \r\n }\r\n\r\n constructor (\r\n\t\tpublic readonly ssp: SoonSpace,\r\n\t\tcamera?: Camera,\r\n\t\toptions?: Partial<NavigateCameraOptions>\r\n ) {\r\n\r\n const thisCamera = camera ?? new PerspectiveCamera( 80, 1, 0.1, 100 )\r\n\r\n super( ssp, thisCamera )\r\n\r\n this.initGyroListener()\r\n\r\n const initOptions = Object.freeze( {\r\n ...DEFAULT_NAVIGATE_CAMERA_OPTIONS,\r\n ...( options ?? {} ),\r\n } )\r\n\r\n this.initOptions = initOptions\r\n this.setOptions( initOptions )\r\n this.setCamera( thisCamera )\r\n \r\n }\r\n\r\n protected initGyroListener () {\r\n\r\n const initOptions = this.initOptions\r\n\r\n this._gyroListener = new GyroListener(\r\n initOptions.gyroX,\r\n initOptions.gyroY,\r\n initOptions.gyroZ,\r\n initOptions.gyroAbsolute\r\n )\r\n this._gyroListener.onChange = ( a, b, g ) => {\r\n\r\n const adjustedAlpha = a === null ? 0 : MathUtils.degToRad( a )\r\n const adjustedBeta = b === null ? 0 : MathUtils.degToRad( b )\r\n const adjustedGamma = g === null ? 0 : MathUtils.degToRad( g )\r\n\r\n this._gyroRotation = new Euler(\r\n adjustedBeta,\r\n adjustedAlpha,\r\n adjustedGamma\r\n )\r\n \r\n }\r\n \r\n }\r\n\r\n /** 控制器操作时处理 */\r\n protected setCameraOrientationOnControl () {\r\n\r\n const { rotation, } = this.ssp.viewport.cameraManager.mainCamera\r\n\r\n const { realDistanceToTarget, followPosition, } = this\r\n\r\n // 旋转后方向不变,位置变\r\n // 欧拉角转方向向量归一化\r\n const normallizeRotation = normalizeEuler( rotation )\r\n\r\n this.position.copy(\r\n followPosition\r\n .clone()\r\n .add( normallizeRotation.multiplyScalar( -realDistanceToTarget ) )\r\n )\r\n\r\n this._lookAt( this.followPosition )\r\n \r\n }\r\n\r\n /** 更新相机占位符的方位 */\r\n protected updateCameraPlaceholder () {\r\n\r\n const position = this.getRenderCameraPosition()\r\n\r\n this._cameraPlaceholder.position.copy( position )\r\n \r\n }\r\n\r\n /** 设置相机的方位 */\r\n protected setCameraOrientationOnRender () {\r\n\r\n this.position.copy( this._cameraPlaceholder.position )\r\n\r\n this._lookAt( this.followPosition )\r\n \r\n }\r\n\r\n /** 获取相机点相对跟踪点的欧拉角 */\r\n protected getRenderCameraOrientation (): Euler {\r\n\r\n const { _fixedOrientationRotation, _orientationType, _orientationTarget, } =\r\n\t\t\tthis\r\n\r\n const euler = new Euler()\r\n\r\n // 陀螺仪朝向只有一种朝向\r\n if ( _orientationType === NAVIGATE_ORIENTATION_TYPE.GYRO_ORIENTATION ) {\r\n\r\n euler.copy( this._gyroRotation )\r\n \r\n }\r\n switch ( true ) {\r\n\r\n case _orientationTarget === 'main': {\r\n\r\n euler.copy(\r\n _orientationType === NAVIGATE_ORIENTATION_TYPE.FIXED_ORIENTATION ?\r\n _fixedOrientationRotation :\r\n this.followRotation\r\n )\r\n break\r\n \r\n }\r\n case _orientationTarget instanceof Vector3: {\r\n\r\n const rotation = ( this.orientationTarget as Vector3 )\r\n .clone()\r\n .sub( this.followPosition )\r\n\r\n euler.copy( Vector3ToEuler( rotation ) )\r\n\r\n break\r\n \r\n }\r\n case _orientationTarget instanceof Object3D: {\r\n\r\n const obj = _orientationTarget as Object3D\r\n\r\n switch ( _orientationType ) {\r\n\r\n case NAVIGATE_ORIENTATION_TYPE.RELATIVE_ORIENTATION:\r\n euler.copy( obj.rotation )\r\n break\r\n case NAVIGATE_ORIENTATION_TYPE.FIXED_ORIENTATION:\r\n euler.copy(\r\n Vector3ToEuler( obj.position.clone().sub( this.followPosition ) )\r\n )\r\n break\r\n \r\n }\r\n\r\n break\r\n \r\n }\r\n case _orientationTarget instanceof Euler: {\r\n\r\n // 相对朝向方向和固定朝向方向效果是相同的\r\n euler.copy( _orientationTarget as Euler )\r\n\r\n break\r\n \r\n }\r\n \r\n }\r\n\r\n return euler\r\n \r\n }\r\n\r\n /** 获取相机落点(相对跟踪点的方向归一化 * 距离) */\r\n protected getRenderCameraPosition () {\r\n\r\n const position = new Vector3()\r\n\r\n const rotation = this.getRenderCameraOrientation()\r\n\r\n const { realDistanceToTarget, realRotationToTarget, } = this\r\n\r\n position.copy(\r\n this.followPosition\r\n .clone()\r\n .add(\r\n realRotationToTarget\r\n .clone()\r\n .applyEuler( rotation )\r\n .normalize()\r\n .multiplyScalar( realDistanceToTarget )\r\n )\r\n )\r\n\r\n if ( this.oppositeCamera ) {\r\n\r\n const addVector = this.followPosition\r\n .clone()\r\n .sub( position )\r\n .multiplyScalar( 2 )\r\n\r\n const { x, y, z, } = this.oppositeType\r\n\r\n if ( [ x, y, z ].includes( false ) && [ x, y, z ].includes( true ) ) {\r\n\r\n if ( x ) {\r\n\r\n addVector.x = 0\r\n \r\n }\r\n if ( y ) {\r\n\r\n addVector.y = 0\r\n \r\n }\r\n if ( z ) {\r\n\r\n addVector.z = 0\r\n \r\n }\r\n\r\n position.add( addVector )\r\n \r\n } else {\r\n\r\n x && position.add( addVector )\r\n \r\n }\r\n \r\n }\r\n\r\n return position\r\n \r\n }\r\n\r\n protected onRender () {\r\n\r\n if ( !this.followTarget ) return\r\n\r\n this.updateCameraPlaceholder()\r\n\r\n if ( this._positionTween ) return\r\n\r\n if ( this.autoFollowRender || this.fixedOrientation ) {\r\n\r\n this.setCameraOrientationOnRender()\r\n return\r\n \r\n }\r\n if ( this.onControlRender ) {\r\n\r\n this.onControlRender( this.nativeCamera, this.followTarget )\r\n \r\n } else {\r\n\r\n this.setCameraOrientationOnControl()\r\n \r\n }\r\n \r\n }\r\n\r\n /** 初始化事件 */\r\n protected initEvents () {\r\n\r\n const dom = this.ssp.viewport.renderer.domElement\r\n const mainCamera = this.ssp.viewport.cameraManager.mainCamera\r\n const onRender = this.onRender.bind( this )\r\n\r\n const onMouseDown = ( event: MouseEvent | TouchEvent ) => {\r\n\r\n const isControlling = this.autoFollowRender === false\r\n\r\n this.autoFollowRender = false\r\n this._positionTween?.stop()\r\n window.clearTimeout( this._restoreTimer )\r\n document.removeEventListener( 'mouseup', onMouseUp )\r\n document.removeEventListener( 'touchend', onMouseUp )\r\n document.addEventListener( 'mouseup', onMouseUp, true )\r\n document.addEventListener( 'touchend', onMouseUp, true )\r\n\r\n if ( isControlling ) return\r\n\r\n if ( !this.isFixRotationRelativeTarget ) {\r\n\r\n const invertQuaternion = new Quaternion()\r\n .setFromEuler( new Euler().fromArray( this.targetRotationAfterFix ) )\r\n .invert()\r\n\r\n mainCamera.quaternion.copy(\r\n new Quaternion().copy( this.quaternion ).multiply( invertQuaternion )\r\n )\r\n \r\n } else {\r\n\r\n mainCamera.quaternion.copy( this.quaternion )\r\n \r\n }\r\n this.onControlStart?.( this.nativeCamera, this.followTarget, event )\r\n \r\n }\r\n const onMouseUp = ( event: MouseEvent | TouchEvent ) => {\r\n\r\n const exec = () => {\r\n\r\n this.restoreOrientation()\r\n this.autoFollowRender = true\r\n this.onControlEnd?.( this.nativeCamera, this.followTarget, event )\r\n document.removeEventListener( 'mouseup', onMouseUp, true )\r\n document.removeEventListener( 'touchend', onMouseUp, true )\r\n \r\n }\r\n\r\n if ( typeof this.autoRestoreOrientation === 'number' ) {\r\n\r\n window.clearTimeout( this._restoreTimer )\r\n this._restoreTimer = setTimeout( exec, this.autoRestoreOrientation )\r\n \r\n } else if ( this.autoRestoreOrientation ) {\r\n\r\n exec()\r\n \r\n }\r\n \r\n }\r\n\r\n this._events.onRender = onRender\r\n this._events.onMouseDown = onMouseDown\r\n\r\n const signals = this.ssp.signals\r\n\r\n signals.beforeRender.add( onRender )\r\n signals.mouseDown.add( onMouseDown )\r\n // TODO dom 上的 touchstart 被 ssp 内部 preventDefault 了,临时只能取父节点注册事件\r\n dom.parentElement?.addEventListener( 'touchstart', onMouseDown, true )\r\n \r\n }\r\n\r\n /** 清除事件 */\r\n protected clearEvents () {\r\n\r\n const { onRender, onMouseDown, } = this._events\r\n const signals = this.ssp.signals\r\n const dom = this.ssp.viewport.renderer.domElement\r\n\r\n signals.beforeRender.remove( onRender )\r\n signals.mouseDown.remove( onMouseDown )\r\n dom.parentElement?.removeEventListener( 'touchstart', onMouseDown, true )\r\n \r\n }\r\n\r\n protected onEnter (): void {\r\n\r\n console.log( 'onenter' )\r\n this.initEvents()\r\n \r\n }\r\n\r\n protected onQuit () {\r\n\r\n console.log( 'onquit' )\r\n this.clearEvents()\r\n this._gyroListener.inActive()\r\n \r\n }\r\n\r\n /** 参数重置 */\r\n resetOptions () {\r\n\r\n this.setOptions( { ...this.initOptions, } )\r\n \r\n }\r\n\r\n /** 设置参数 */\r\n setOptions ( options: Partial<NavigateCameraOptions> ) {\r\n\r\n const animate = this.disabledAnimate\r\n\r\n this.disabledAnimate = true\r\n if ( options.isFixPositionRelativeTarget !== void 0 ) this.isFixPositionRelativeTarget = options.isFixPositionRelativeTarget\r\n if ( options.targetPositionFix !== void 0 ) this.targetPositionFix = options.targetPositionFix\r\n if ( options.isFixRotationRelativeTarget !== void 0 ) this.isFixRotationRelativeTarget = options.isFixRotationRelativeTarget\r\n if ( options.targetRotationFix !== void 0 ) this.targetRotationFix = options.targetRotationFix\r\n if ( options.rotationToTarget !== void 0 ) this.rotationToTarget = options.rotationToTarget\r\n if ( options.distanceToTarget !== void 0 ) this.distanceToTarget = options.distanceToTarget\r\n if ( options.fixedOrientation !== void 0 ) this.fixedOrientation = options.fixedOrientation\r\n if ( options.oppositeCamera !== void 0 ) this.oppositeCamera = options.oppositeCamera\r\n if ( options.oppositeType !== void 0 ) this.oppositeType = options.oppositeType\r\n if ( options.orientationTarget !== void 0 ) this.orientationTarget = options.orientationTarget\r\n if ( options.orientationType !== void 0 ) this.orientationType = options.orientationType\r\n if ( options.vision !== void 0 ) this.vision = options.vision\r\n if ( options.autoRestoreOrientation !== void 0 ) this.autoRestoreOrientation = options.autoRestoreOrientation\r\n if ( options.gyroX !== void 0 ) this.gyroX = options.gyroX\r\n if ( options.gyroY !== void 0 ) this.gyroY = options.gyroY\r\n if ( options.gyroZ !== void 0 ) this.gyroZ = options.gyroZ\r\n if ( options.gyroAbsolute !== void 0 ) this.gyroAbsolute = options.gyroAbsolute\r\n if ( options.enableGyro !== void 0 ) this.enableGyro = options.enableGyro\r\n if ( options.onControlStart !== void 0 ) this.onControlStart = options.onControlStart\r\n if ( options.onControlRender !== void 0 ) this.onControlRender = options.onControlRender\r\n if ( options.onControlEnd !== void 0 ) this.onControlEnd = options.onControlEnd\r\n this.disabledAnimate = animate\r\n if ( options.disabledAnimate !== void 0 ) this.disabledAnimate = options.disabledAnimate\r\n \r\n }\r\n\r\n /**\r\n\t * 设置相机,若导航相机正在使用中,则会立即切换为设置的相机\r\n\t */\r\n setCamera ( camera: Camera ) {\r\n\r\n if ( this._isActive ) {\r\n\r\n this.ssp.viewport.cameraManager.removeCamera( this.cameraKey )\r\n \r\n }\r\n\r\n this.nativeCamera = camera\r\n\r\n this.ssp.viewport.cameraManager.cameras[ this.cameraKey ] = camera as any\r\n\r\n if ( this._isActive ) {\r\n\r\n this.ssp.viewport.cameraManager.setCurrentCamera( camera as any )\r\n \r\n }\r\n\r\n return this\r\n \r\n }\r\n\r\n /** 重置相机坐标 */\r\n restoreOrientation () {\r\n\r\n if ( !this.followTarget ) return\r\n\r\n if ( this.fixedOrientation ) return\r\n\r\n if ( this._positionTween ) {\r\n\r\n this._positionTween.stop()\r\n this._positionTween = null\r\n \r\n }\r\n\r\n if ( this.disabledAnimate ) {\r\n\r\n this.position.copy( this._cameraPlaceholder.position )\r\n this._lookAt( this.followPosition )\r\n return\r\n \r\n }\r\n\r\n this.ssp\r\n .animation<Vector3>(\r\n this.position,\r\n this._cameraPlaceholder.position,\r\n { duration: 1000, },\r\n ( tp ) => {\r\n\r\n this._lookAt( this.followPosition )\r\n \r\n },\r\n ( tween ) => ( this._positionTween = tween )\r\n )\r\n .finally( () => {\r\n\r\n this._positionTween = null\r\n \r\n } )\r\n \r\n }\r\n\r\n}\r\n","import { Vector3, } from 'three'\r\n\r\nexport type Direction =\r\n\t| 'left'\r\n\t| 'right'\r\n\t| 'up'\r\n\t| 'down'\r\n\t| 'left-up'\r\n\t| 'left-down'\r\n\t| 'right-up'\r\n\t| 'right-down'\r\n\t| 'straight'\r\n\r\nexport interface playInfo {\r\n\tpathId: string;\r\n\tprogress: number;\r\n\tpathProgress: number;\r\n\tdistanceToNodeStart: number;\r\n\tdistanceToPathStart: number;\r\n\tdistanceToStart: number;\r\n\tdistanceToNodeEnd: number;\r\n\tdistanceToPathEnd: number;\r\n\tdistanceToEnd: number;\r\n\tposition: Vector3;\r\n\trotation: Vector3;\r\n\tdirection: Direction;\r\n}\r\n\r\nexport enum PLAY_STATUS {\r\n\t'PENDING' = 'pending',\r\n\t'STOP' = 'stop',\r\n\t'PLAYING' = 'playing',\r\n\t'PAUSE' = 'pause',\r\n\t'FINISHED' = 'finished',\r\n}\r\n","var zt = Object.defineProperty;\nvar Ut = (t, n, e) => n in t ? zt(t, n, { enumerable: !0, configurable: !0, writable: !0, value: e }) : t[n] = e;\nvar j = (t, n, e) => (Ut(t, typeof n != \"symbol\" ? n + \"\" : n, e), e);\nimport { LineCurve3 as K, LineCurve as $, CurvePath as Ot, Vector4 as St, Vector3 as w, Vector2 as z, Matrix3 as ft, Quaternion as S, TextureLoader as qt, Texture as Rt, AlphaFormat as Nt, RedFormat as kt, RedIntegerFormat as jt, RGFormat as Qt, RGIntegerFormat as Ft, RGBAFormat as Wt, RGBAIntegerFormat as Et, LuminanceFormat as Gt, LuminanceAlphaFormat as Xt, DepthFormat as Yt, DepthStencilFormat as Zt, Line3 as Ht, MathUtils as Jt, Color as Q, BufferGeometry as Kt, Float32BufferAttribute as wt, LineBasicMaterial as $t, Line as vt, MirroredRepeatWrapping as xt, ClampToEdgeWrapping as Ct, RepeatWrapping as At } from \"three\";\nimport { isBaseType as tn, isIterable as nn } from \"type-tls\";\nimport { Axis as Ie, Axis4 as Me } from \"type-tls\";\nimport { createLinearGradientImageData as en, getData3DSlice as on, getData3DItemSafe as sn } from \"image-tls\";\nfunction cn(t) {\n const n = t.curves[0].getPoint(0), e = t.curves[t.curves.length - 1].getPoint(1);\n if (!n.equals(e)) {\n const o = n.isVector3 && e.isVector3 ? K : $;\n t.curves.push(new o(e, n));\n }\n return t;\n}\nfunction kn() {\n Ot.prototype.closePath = function() {\n cn(this);\n };\n}\nfunction Pt(t) {\n return t.w !== void 0 ? [St, 4] : t.z !== void 0 ? [w, 3] : [z, 2];\n}\nfunction rn(t) {\n return t.w != null ? new St().copy(t) : t.z != null ? new w().copy(t) : new z().copy(t);\n}\nfunction H(t, n, e) {\n e = e ?? 0;\n const o = e + 1;\n if (tn(t))\n return t;\n if (t.x != null && t.y != null)\n return rn(t);\n if (Array.isArray(t))\n return t.map((c) => H(c, n, o));\n if (t instanceof Map) {\n const c = /* @__PURE__ */ new Map();\n for (const r of t.keys()) {\n const i = t.get(r), l = H(i, n, o);\n c.set(r, l);\n }\n return c;\n }\n if (nn(t)) {\n const c = [];\n for (const r of t) {\n const i = H(r, n, o);\n c.push(i);\n }\n return c;\n }\n if ((n || e === 0) && typeof t == \"object\") {\n const c = {};\n for (const r of Object.keys(t))\n c[r] = H(t[r], n, o);\n return c;\n }\n return t;\n}\nfunction X(t, n, e, o) {\n const s = (o == null ? void 0 : o.copy(t)) || t.clone();\n return s.cross(n), s.lengthSq() === 0 && (e ? Math.abs(n.z) === 1 ? t.x -= 1e-4 : t.z += 1e-4 : Math.abs(t.x) === 1 ? n.z -= 1e-4 : n.x += 1e-4, n.normalize(), s.crossVectors(t, n)), e ? t.copy(n).cross(s) : n.copy(s).cross(t), s.normalize(), n.normalize(), t.normalize(), { tangent: t, normal: n, binormal: s };\n}\nfunction ln(t, n, e, o) {\n const { binormal: s } = X(t, n, e, o);\n return s.negate(), { front: t, up: n, binormal: s };\n}\nfunction jn(t) {\n const { tangent: n, normal: e, binormal: o } = t;\n return { front: n, up: e, binormal: o.clone().negate() };\n}\nfunction Qn(t) {\n const { front: n, up: e, binormal: o } = t;\n return { tangent: n, normal: e, binormal: o.clone().negate() };\n}\nfunction Fn(t, n, e, o) {\n const { front: s, up: c, binormal: r } = ln(t.clone().normalize(), n.clone().normalize(), e), i = o ?? new ft(), l = i.elements;\n return r.toArray(l, 0), c.toArray(l, 3), s.toArray(l, 6), i;\n}\nfunction Wn(t, n, e, o) {\n const s = t.clone().projectOnPlane(e).normalize(), c = n.clone().projectOnPlane(e).normalize();\n return o = o ?? new S(), o.setFromUnitVectors(s, c), o;\n}\nfunction T(t, n) {\n const e = n.toArray(), o = e.findIndex((s) => s !== 0);\n return e[o] / t.toArray()[o];\n}\nfunction at(t, n) {\n const e = t.clone().cross(n);\n return typeof e == \"number\" ? e === 0 : e.lengthSq() === 0;\n}\nfunction En(t) {\n const n = t.length, e = [];\n if (n === 0)\n return e;\n const [o, s] = Pt(t[0]);\n for (let c = 0; c < n; c++) {\n const r = t[c], i = new o().copy(r), l = r.radius, u = e[c] ?? (e[c] = []);\n for (let a = c + 1; a < n; a++) {\n const f = t[a];\n i.distanceToSquared(f) <= (f.radius + l) ** 2 && (u.push(a), (e[a] = []).push(c));\n }\n }\n return e;\n}\nlet Tt;\nfunction Gn(t) {\n if (typeof t == \"string\")\n return (Tt || (Tt = new qt())).load(t);\n if (t.isTexture)\n return t;\n const n = Array.isArray(t) ? en(t, 256, 1) : t, e = new Rt(n);\n return n.colorSpace === \"srgb\" && (e.colorSpace = \"srgb\"), e.needsUpdate = !0, e;\n}\nfunction an(t, n) {\n const e = Math.sqrt(t.lengthSq() * n.lengthSq());\n if (e === 0)\n return 0;\n let o = t.dot(n) / e;\n return o = Math.max(-1, Math.min(1, o)), Math.acos(o);\n}\nfunction J(t, n, e) {\n let o = an(t, n);\n return o === 0 ? o : t.clone().cross(n).dot(e) < 0 ? -o : o;\n}\nfunction un(t, n, e) {\n return t = t.clone().projectOnPlane(e), n = n.clone().projectOnPlane(e), J(t, n, e);\n}\nfunction fn(t, n, e) {\n const o = n.clone().negate(), s = e.clone().projectOnPlane(n), c = t.clone().projectOnPlane(s), r = J(n, c, s), i = n.clone().cross(s), l = t.clone().projectOnPlane(i), u = J(n, l, i), a = t.clone().projectOnPlane(o), f = J(s, a, o);\n return { yaw: r, pitch: u, roll: f };\n}\nconst it = 180 / Math.PI, ut = {\n yaw: [\n { name: \"前\", range: [-15, 15] },\n { name: \"左\", range: [15, 165] },\n { name: \"右\", range: [-165, -15] },\n { name: \"后\", range: [-180.1, -165] },\n { name: \"后\", range: [165, 180.1] }\n ],\n pitch: [\n { name: \"前\", range: [-15, 15] },\n { name: \"上\", range: [15, 165] },\n { name: \"下\", range: [-165, -15] },\n { name: \"后\", range: [-180.1, -165] },\n { name: \"后\", range: [165, 180.1] }\n ],\n roll: [\n { name: \"上\", range: [-15, 15] },\n { name: \"左\", range: [15, 165] },\n { name: \"右\", range: [-165, -15] },\n { name: \"下\", range: [-180.1, -165] },\n { name: \"下\", range: [165, 180.1] }\n ]\n};\nfunction pn(t) {\n const n = {};\n for (const [e, o] of Object.entries(t))\n n[e] = Array.isArray(o) ? o : Object.entries(o).map(([s, c]) => ({ name: s, range: c }));\n return n;\n}\nconst lt = {\n degrees: !0,\n map: ut,\n front: { x: 0, y: 0, z: 1 },\n up: { x: 0, y: 1, z: 0 }\n};\nclass It {\n constructor(n) {\n j(this, \"_options\");\n j(this, \"_listMap\");\n j(this, \"_front\");\n j(this, \"_up\");\n n && (this.options = n);\n }\n static get options() {\n return this._options ?? (this.options = lt);\n }\n static set options(n) {\n this._options = Object.assign({}, structuredClone(ut), n);\n }\n /**\n * 默认选项\n */\n get defaultOptions() {\n return this.constructor.options;\n }\n get options() {\n return this._options ?? (this.options = this.defaultOptions);\n }\n set options(n) {\n this._options = Object.assign({}, structuredClone(this.defaultOptions), n), this._listMap = null, this._front = null, this._up = null;\n }\n /**\n * 是否使用角度,而非弧度\n */\n get degrees() {\n return this.options.degrees ?? (this.options.degrees = this.defaultOptions.degrees ?? !0);\n }\n set degrees(n) {\n this.options.degrees = n;\n }\n get map() {\n return this.options.map || (this.map = this.defaultOptions.map), this.options.map;\n }\n set map(n) {\n const e = structuredClone(this.defaultOptions.map), o = structuredClone(ut);\n n = n ? {\n yaw: n.yaw ?? e.yaw ?? o.yaw,\n pitch: n.pitch ?? e.pitch ?? o.pitch,\n roll: n.roll ?? e.roll ?? o.roll\n } : e, this.options.map = n, this._listMap = null;\n }\n get listMap() {\n return this._listMap ?? (this._listMap = pn(this.map ?? {}));\n }\n get front() {\n return this._front || (this.front = this.options.front ?? this.defaultOptions.front ?? lt.front), this._front;\n }\n set front(n) {\n this._front = new w().copy(n);\n }\n get up() {\n return this._up || (this.up = this.options.up ?? this.defaultOptions.up ?? lt.up), this._up;\n }\n set up(n) {\n this._up = new w().copy(n);\n }\n /**\n * 计算方位\n * @param target \n * @param front \n * @param up \n */\n computeAzimuth(n, e, o) {\n const s = new w().copy(n), c = new w().copy(e ?? this.front), r = new w().copy(o ?? this.up);\n let { yaw: i, pitch: l, roll: u } = fn(s, c, r);\n return this.degrees && (i *= it, l *= it, u *= it), {\n yaw: {\n angle: i,\n name: this.findAzimuthNames(\"yaw\", i)\n },\n pitch: {\n angle: l,\n name: this.findAzimuthNames(\"pitch\", l)\n },\n roll: {\n angle: u,\n name: this.findAzimuthNames(\"roll\", u)\n }\n };\n }\n /**\n * 查找匹配的方位名字\n * @param type - 类型\n * @param angle - 角度\n * @returns 匹配的名字列表\n */\n findAzimuthNames(n, e) {\n const o = [], s = this.listMap[n];\n if (!s)\n return o;\n for (const { name: c, range: [r, i] } of s)\n (e >= r && e < i || e <= r && e > i) && o.push(c);\n return o;\n }\n}\nj(It, \"_options\");\nconst Xn = new It(), mn = {\n [Nt]: 1,\n [kt]: 1,\n [jt]: 1,\n [Qt]: 3,\n [Ft]: 2,\n [Wt]: 4,\n [Et]: 4,\n [Gt]: 1,\n [Xt]: 2,\n [Yt]: 1,\n [Zt]: 2\n};\nfunction Mt(t) {\n return mn[t];\n}\nfunction Yn(t, n, e) {\n const { data: o, width: s, height: c, depth: r } = t.image, i = Mt(t.format);\n return on({ data: o, size: { x: s, y: c, z: r } }, n, e, i);\n}\nfunction Zn(t, n) {\n const { data: e, width: o, height: s, depth: c } = t.image, r = Mt(t.format);\n return sn({ data: e, size: { x: o, y: s, z: c } }, n, r);\n}\nvar h = /* @__PURE__ */ ((t) => (t.Dissociation = \"相离\", t.Intersect = \"相交\", t.Tangency = \"相切\", t.Contain = \"包含\", t))(h || {});\nfunction Hn(t, n) {\n const [e, o] = t, { center: s, radius: c } = n, r = o.clone().sub(e), i = s.clone().sub(e), l = r.lengthSq(), u = r.dot(i) ** 2, a = l * (i.lengthSq() - c ** 2), f = u - a;\n return f < 0 ? h.Dissociation : f === 0 ? h.Tangency : h.Intersect;\n}\nfunction Y(t, n) {\n const [e, o] = t, { center: s, radius: c } = n, r = o.clone().sub(e), i = e.clone().sub(s), l = r.lengthSq(), u = 2 * r.dot(i), a = i.lengthSq() - c ** 2, f = u ** 2 - 4 * l * a;\n if (f < 0)\n return [];\n const p = l * 2, m = -u / p;\n if (f === 0)\n return [m];\n const d = Math.sqrt(f) / p, y = m - d, b = m + d;\n return [y, b];\n}\nfunction Jn(t, n) {\n const [e, o] = t, s = o.clone().sub(e);\n return Y(t, n).map((r) => s.clone().multiplyScalar(r).add(e));\n}\nfunction hn(t, n) {\n const e = Y(t, n), o = e.length;\n if (o === 0)\n return h.Dissociation;\n let s = 0, c = 0, r = 0;\n for (const l of e)\n l < 0 ? s++ : l > 1 ? c++ : (l === 0 || l === 1) && r++;\n const i = s + c;\n return o === 1 && i === 0 ? h.Tangency : s === 1 && c === 1 || r === 2 ? h.Contain : s === 2 || c === 2 ? h.Dissociation : h.Intersect;\n}\nfunction gn(t, n) {\n const [e, o] = t, s = o.clone().sub(e), c = Y(t, n), r = [];\n for (const i of c) {\n if (i < 0 || i > 1)\n continue;\n const l = s.clone().multiplyScalar(i).add(e);\n r.push(l);\n }\n return r;\n}\nfunction Kn(t, n) {\n const e = Y(t, n), o = e.length;\n if (o === 0)\n return h.Dissociation;\n let s = 0;\n for (const c of e)\n c < 0 && s++;\n return o === 1 && s === 0 ? h.Tangency : s === 2 ? h.Dissociation : h.Intersect;\n}\nfunction $n(t, n) {\n const [e, o] = t, s = o.clone().sub(e), c = Y(t, n), r = [];\n for (const i of c) {\n if (i < 0)\n continue;\n const l = s.clone().multiplyScalar(i).add(e);\n r.push(l);\n }\n return r;\n}\nfunction Bt(t, n) {\n const [e, o] = t, s = o.clone().sub(e), [c, r] = n, i = r.clone().sub(c);\n if (at(i, s)) {\n const l = c.clone().sub(e);\n return at(l, s) ? h.Tangency : h.Dissociation;\n }\n return h.Intersect;\n}\nfunction v(t, n) {\n const [e, o] = t, s = o.clone().sub(e), [c, r] = n, i = r.clone().sub(c), l = s.clone().cross(i), [u, a] = Pt(e);\n if (a === 2 ? l === 0 : l.equals(new u()))\n return null;\n const m = c.clone().sub(e).cross(i), g = a === 2 ? m / l : T(l, m);\n return s.clone().multiplyScalar(g).add(e);\n}\nfunction dn(t, n) {\n const [e, o] = n, [s, c] = t, r = c.clone().sub(s), i = Bt(t, n);\n if (i === h.Tangency) {\n let p = 0;\n return T(r, e.clone().sub(s)) < 0 && p++, T(r, o.clone().sub(s)) < 0 && p++, p === 2 ? h.Dissociation : p === 0 ? h.Contain : h.Tangency;\n }\n if (i !== h.Intersect)\n return i;\n const l = v(t, n), u = o.clone().sub(e), a = T(u, l.clone().sub(e));\n return a < 0 || a > 1 || T(r, l.clone().sub(s)) < 0 ? h.Dissociation : h.Intersect;\n}\nfunction yn(t, n) {\n const e = v(t, n);\n if (e === null)\n return null;\n const [o, s] = n, c = s.clone().sub(o), r = T(c, e.clone().sub(o));\n if (r < 0 || r > 1)\n return null;\n const [i, l] = t, u = l.clone().sub(i);\n return T(u, e.clone().sub(i)) < 0 ? null : e;\n}\nfunction vn(t, n) {\n const [e, o] = t, [s, c] = n, r = o.clone().sub(e), i = Bt(t, n);\n if (i === h.Tangency) {\n let p = 0, m = 0;\n const g = T(r, s.clone().sub(e));\n g < 0 ? p++ : g > 1 && m++;\n const d = T(r, c.clone().sub(e));\n return d < 0 ? p++ : d > 1 && m++, p === 2 || m === 2 ? h.Dissociation : p + m === 1 ? h.Tangency : h.Contain;\n }\n if (i !== h.Intersect)\n return i;\n const l = v(t, n), u = c.clone().sub(s), a = T(u, l.clone().sub(s));\n if (a < 0 || a > 1)\n return h.Dissociation;\n const f = T(r, l.clone().sub(e));\n return f < 0 || f > 1 ? h.Dissociation : h.Intersect;\n}\nfunction te(t, n) {\n const e = v(t, n);\n if (e === null)\n return null;\n const [o, s] = n, c = s.clone().sub(o), r = T(c, e.clone().sub(o));\n if (r < 0 || r > 1)\n return null;\n const [i, l] = t, u = l.clone().sub(i), a = T(u, e.clone().sub(i));\n return a < 0 || a > 1 ? null : e;\n}\nfunction bn(t, n) {\n const [e, o] = t, s = n.clone().sub(e), c = o.clone().sub(e);\n if (at(c, s)) {\n const r = T(c, s);\n return r < 0 || r > 1 ? h.Tangency : h.Contain;\n }\n return h.Dissociation;\n}\nfunction ne(t, n) {\n const e = n.length;\n let o, s = !1;\n for (let c = 0; c < e; c++) {\n const r = n[c];\n let i = c + 1;\n i === e && (i = 0);\n const l = n[i], u = new z().subVectors(l, r), f = new z().subVectors(t, r).cross(u);\n f === 0 && (s = !0);\n const p = Math.sign(f);\n o !== void 0 && o !== p && h.Dissociation, o = p;\n }\n return s ? h.Tangency : h.Contain;\n}\nfunction Ln(t, n) {\n const e = [t, t.clone().add(new z(10, 0))], o = n.length;\n let s = 0;\n for (let c = 0; c < o; c++) {\n const r = n[c];\n let i = c + 1;\n i === o && (i = 0);\n const l = n[i], u = [r, l];\n if (bn(u, t) === h.Contain)\n return h.Tangency;\n const f = dn(e, u);\n if (f === h.Contain) {\n s += 2;\n continue;\n }\n if (f === h.Intersect) {\n yn(e, u);\n let p = 0;\n r.y > t.y && p++, l.y > t.y && p++, p === 1 && s++;\n }\n }\n return s % 2 === 0 ? h.Dissociation : h.Contain;\n}\nfunction ee(t, n) {\n const e = t.length;\n let o = 0, s = 0;\n for (let l = 0; l < e; l++) {\n const u = t[l];\n let a = l + 1;\n a === e && (a = 0);\n const f = t[a], m = hn([u, f], n);\n if (m === h.Intersect)\n return h.Intersect;\n m === h.Contain ? o++ : m === h.Tangency && s++;\n }\n if (o === e)\n return h.Contain;\n if (o > 0)\n return h.Intersect;\n const { center: c, radius: r } = n, i = Ln(c, t);\n return r === 0 ? i : i === h.Contain ? h.Contain : s > 0 ? h.Tangency : h.Dissociation;\n}\nfunction oe(t, n) {\n const e = t.length;\n let o = [];\n for (let s = 0; s < e; s++) {\n const c = t[s];\n let r = s + 1;\n r === e && (r = 0);\n const i = t[r], u = gn([c, i], n);\n o = [...o, ...u];\n }\n return o;\n}\nfunction se(t, n) {\n if (n = n ?? t.arcLengthDivisions, t.cacheArcULengths && t.cacheArcULengths.length === n + 1 && !t.needsUpdate) {\n const c = t.cacheArcULengths;\n return { lengths: c, length: c[n] };\n }\n t.needsUpdate = !1;\n const e = [0];\n let o = t.getPoint(0), s = 0;\n for (let c = 1; c <= n; c++) {\n const r = t.getPointAt(c / n);\n s += r.distanceTo(o), e.push(s), o = r;\n }\n return t.cacheArcULengths = e, { lengths: e, length: s };\n}\nfunction ce(t, n, e) {\n const o = e ? (l) => t.getPointAt(l) : (l) => t.getPoint(l);\n let s = o(0), c = 0;\n const r = [], i = n.length;\n for (let l = 0; l < i; l++) {\n const u = n[l], a = o(u);\n c += a.distanceTo(s), r.push(c), s = a;\n }\n return { lengths: r, length: r[i - 1] };\n}\nfunction Vt(t, n) {\n let e = t.sampleLength;\n if (!e) {\n const o = t.sampleNum;\n if (o)\n return o;\n e = 1;\n }\n return Math.ceil(n / e);\n}\nfunction re(t) {\n const { curve: n } = t;\n let e = n.getLength();\n const o = Vt(t, e);\n return n.arcLengthDivisions < o && (n.arcLengthDivisions = o, n.updateArcLengths(), e = n.getLength()), { length: e, division: o };\n}\nvar wn = /* @__PURE__ */ ((t) => (t.back = \"back\", t.front = \"front\", t))(wn || {});\nfunction ie(t) {\n const { curve: n, distance: e, fromU: o = 0, side: s, tolerance: c = e * 0.1 } = t, r = t.length ?? n.getLength(), i = n.getPointAt(o);\n let l = e / r;\n const u = s === \"front\" ? -1 : 1;\n let a = !0, f = o, p = i, m = 0, g = !0;\n do {\n f = u * l + o;\n let d = !1;\n f > 1 ? (f = 1, d = !0) : f < 0 && (f = 0, d = !0), p = n.getPointAt(f), m = p.distanceTo(i), a = Math.abs(e - m) > c;\n const y = e / m;\n if (d && a && y > 1) {\n g = !1;\n break;\n }\n l *= y;\n } while (a);\n return {\n succeed: g,\n u: f,\n point: p,\n distance: m\n };\n}\nfunction le(t) {\n const { curve: n, distance: e, fromU: o = 0, tolerance: s = e * 0.1, origin: c } = t, r = t.length ?? n.getLength(), i = n.getPointAt(o), l = i.distanceTo(c), u = e - l;\n let a = u / r, f = !0, p = o, m = i;\n do {\n p = a + o;\n let g = !1;\n p > 1 ? (p = 1, g = !0) : p < 0 && (p = 0, g = !0), m = n.getPointAt(p);\n const d = m.distanceTo(c);\n f = Math.abs(e - d) > s;\n const y = u / (d - l);\n if (g && f && y > 1)\n return null;\n a *= y;\n } while (f);\n return {\n u: p,\n point: m\n };\n}\nfunction xn(t, n, e) {\n const o = [], s = [], c = [], r = [], i = [];\n let l = t.getTangent(0), u = e.clone(), { binormal: a } = X(l, u);\n const f = 1 / n, p = new S();\n for (let m = 0; m <= n; m++) {\n const g = m * f;\n i.push(g);\n const d = t.getPoint(g);\n o.push(d);\n const y = t.getTangent(g);\n s.push(y), p.setFromUnitVectors(l, y);\n const b = u.clone().applyQuaternion(p);\n c.push(b);\n const C = a.clone().applyQuaternion(p);\n r.push(C), l = y, u = b, a = C;\n }\n return { tangents: s, normals: c, binormals: r, points: o, uts: i };\n}\nfunction Cn(t, n, e, o) {\n const s = [];\n o = o ?? t.autoClose;\n const { tangents: c, normals: r, binormals: i } = t.computeFrenetFrames(n, o), l = un(r[0], e, c[0]), u = 1 / n, a = new S(), f = [];\n for (let p = 0; p <= n; p++) {\n const m = p * u;\n f.push(m);\n const g = t.getPoint(m);\n s.push(g);\n const d = c[p], y = r[p], b = i[p];\n a.setFromAxisAngle(d, l), y.applyQuaternion(a), b.applyQuaternion(a);\n }\n return { tangents: c, normals: r, binormals: i, points: s, uts: f };\n}\nfunction An(t, n, e, o) {\n const s = [], c = [], r = [], i = [], l = [], u = o ? function(f) {\n return {\n point: t.getPointAt(f),\n tangent: t.getTangentAt(f)\n };\n } : function(f) {\n return {\n point: t.getPoint(f),\n tangent: t.getTangent(f)\n };\n }, a = 1 / n;\n for (let f = 0; f <= n; f++) {\n const p = f * a;\n l.push(p);\n const { point: m, tangent: g } = u(p);\n s.push(m), c.push(g);\n const d = e.clone(), { binormal: y } = X(g, d);\n r.push(d), i.push(y);\n }\n return { tangents: c, normals: r, binormals: i, points: s, uts: l };\n}\nfunction ae(t, n, e, o) {\n const { useU: s, fixUp: c, closed: r } = o || {}, i = r ?? !!t.autoClose;\n let l;\n return c ? l = An(t, n, e, s) : s ? l = Cn(t, n, e, i) : l = xn(t, n, e), l;\n}\nfunction ue(t) {\n const n = t.count, e = [0];\n let o = new w().fromBufferAttribute(t, 0), s = new w(), c = 0;\n for (let r = 1; r < n; r++)\n s.fromBufferAttribute(t, r), c += s.distanceTo(o), e.push(c), o.copy(s);\n return { lengths: e, length: c };\n}\nfunction fe(t) {\n const n = t.length, e = [0];\n let o = t[0], s, c = 0;\n for (let r = 1; r < n; r++)\n s = t[r], c += s.distanceTo(o), e.push(c), o = s;\n return { lengths: e, length: c };\n}\nfunction pt(t) {\n const n = Tn(t), e = [0], o = n.reduce((s, c) => (s += c.distance(), e.push(s), s), 0);\n return { lines: n, lengths: e, length: o };\n}\nfunction Tn(t) {\n const n = [];\n return t.reduce((e, o) => {\n const s = new Ht(e, o);\n return n.push(s), o;\n }), n;\n}\nfunction pe(t, n) {\n const e = [];\n return { lines: n.filter((s, c) => {\n const r = s.closestPointToPointParameter(t), i = 0 <= r || r >= 1;\n return i && e.push(c), i;\n }), indexs: e };\n}\nfunction me(t, n) {\n const { distSortIndexs: e, clampDists: o, clampPoints: s, ts: c, clampTs: r } = On(t, n), i = e[0];\n return { line: n[i], index: i, clampDist: o[i], clampPoint: s[i], t: c[i], clampT: r[i] };\n}\nfunction On(t, n) {\n const e = {\n clampDists: [],\n clampPoints: [],\n distSortIndexs: [],\n ts: [],\n clampTs: []\n };\n return n.forEach((o, s) => {\n const c = o.closestPointToPointParameter(t), r = Jt.clamp(c, 0, 1), i = o.at(r, new w()), l = t.distanceTo(i);\n e.clampDists.push(l), e.clampPoints.push(i), e.distSortIndexs.push(s), e.ts.push(c), e.clampTs.push(r);\n }), e.distSortIndexs.sort((o, s) => e.clampDists[o] - e.clampDists[s]), e;\n}\nfunction he(t) {\n const n = new Ot(), e = t[0].z == null ? $ : K;\n return t.reduce((o, s) => {\n const c = new e(o, s);\n return n.add(c), s;\n }), n;\n}\nfunction ge(t, n) {\n return t.z == null ? new $(t, n) : new K(t, n);\n}\nfunction de(t) {\n const n = t[0].z == null ? $ : K, e = [];\n return t.reduce((o, s) => {\n const c = new n(o, s);\n return e.push(c), s;\n }), e;\n}\nfunction ye(t, n) {\n const e = [], o = [], s = [], { lines: c, lengths: r, length: i } = pt(t), l = c.length;\n for (let u = 0; u < l; u++) {\n const f = c[u].delta(new w()).normalize();\n e.push(f);\n const p = n.clone(), { binormal: m } = X(f, p);\n o.push(p), s.push(m);\n }\n return e.push(e.at(-1).clone()), o.push(o.at(-1).clone()), s.push(s.at(-1).clone()), { tangents: e, normals: o, binormals: s, lengths: r, length: i, lines: c };\n}\nfunction be(t, n) {\n const e = [], o = [], s = [], { lines: c, lengths: r, length: i } = pt(t), l = c.length - 1;\n let u = c[0].delta(new w()).normalize(), a = n.clone(), { binormal: f } = X(u, a);\n const p = new S();\n for (let m = 0; m <= l; m++) {\n const d = c[m].delta(new w()).normalize();\n e.push(d), p.setFromUnitVectors(u, d);\n const y = a.clone().applyQuaternion(p);\n o.push(y);\n const b = f.clone().applyQuaternion(p);\n s.push(b), u = d, a = y, f = b;\n }\n return e.push(u.clone()), o.push(a.clone()), s.push(f.clone()), { tangents: e, normals: o, binormals: s, lengths: r, length: i };\n}\nfunction Sn(t, n) {\n const e = t.getLength(), o = Vt(n ?? {}, e), s = t.getPoints(o), c = t.getLengths(o);\n return _t(s, { ...n, lengths: c });\n}\nfunction _t(t, n) {\n const { startColor: e, endColor: o, color: s, lengths: c } = n ?? {}, r = s ? new Q(s) : null, i = e ? new Q(e) : r ?? new Q(0, 1, 0), l = o ? new Q(o) : r ?? new Q(0, 0, 1), u = [], a = [];\n t[0].toArray(u, 0);\n const f = u.length, p = c ?? pt(t).lengths, m = p[p.length - 1], g = new Q();\n t.forEach((y, b) => {\n y.toArray(u, b * f);\n const C = p[b] / m;\n g.lerpColors(i, l, C), g.toArray(a, b * 3);\n });\n const d = new Kt();\n return d.setAttribute(\"position\", new wt(u, f)), d.setAttribute(\"color\", new wt(a, 3)), d;\n}\nfunction Le(t, n) {\n n = n ?? {};\n let { material: e, linewidth: o } = n;\n o = o ?? 1, e = e ?? new $t({ vertexColors: !0, linewidth: o });\n const s = Array.isArray(t) ? _t(t, n) : Sn(t, n);\n return new vt(s, e);\n}\nconst tt = 0.1;\nfunction we(t, n = 0, e) {\n const o = [];\n let s = t / 2 - 1;\n if (e)\n if (n === 1) {\n const c = n - 1, r = n, i = r + 1;\n o.push(i, r, c);\n } else\n n > 1 && (s++, n -= 2);\n for (let c = 0; c < s; c++) {\n const r = c * 2 + n, i = r + 1, l = r + 2, u = r + 3;\n o.push(r, i, l, u, l, i);\n }\n return o;\n}\nfunction xe(t, n = 0, e) {\n const o = [];\n let s = t.length / 6 - 1;\n if (e)\n if (n === 1) {\n const u = n - 1, a = n, f = a + 1;\n o.push(f, a, u);\n } else\n n > 1 && (s++, n -= 2);\n const c = new w(), r = new w(), i = new w(), l = s - 1;\n for (let u = 0; u < s; u++) {\n const a = u * 2, f = a + 1, p = a + 2, m = a + 3, g = a + n, d = g + 1, y = g + 2, b = g + 3, C = [g, d, y, b, y, d], L = [g, d, b, b, y, g];\n if (g >= 0) {\n c.fromArray(t, a * 3), r.fromArray(t, p * 3);\n const O = u === l;\n if (c.equals(r)) {\n const A = a + 4;\n O || i.fromArray(t, A * 3).equals(r) ? o.push(...L) : o.push(...C);\n continue;\n }\n if (c.fromArray(t, f * 3), r.fromArray(t, m * 3), c.equals(r)) {\n const A = a + 5;\n O || i.fromArray(t, A * 3).equals(r) ? o.push(...C) : o.push(...L);\n continue;\n }\n }\n o.push(...C);\n }\n return o;\n}\nvar Pn = /* @__PURE__ */ ((t) => (t.bevel = \"bevel\", t.chamfer = \"chamfer\", t.round = \"round\", t.lineSegment = \"lineSegment\", t))(Pn || {});\nfunction In(t, n, e, o, s = tt) {\n const { point: c, length: r, width: i } = t, l = i / 2, { tangent: u, normal: a, binormal: f } = n, { tangent: p, normal: m, binormal: g } = e, { line: d } = Dt(n, e, s);\n let y;\n if (!d) {\n y = f.clone().multiplyScalar(l);\n const P = c.clone().sub(y), nt = c.clone().add(y);\n y.copy(g).multiplyScalar(l);\n const yt = c.clone().sub(y), bt = c.clone().add(y);\n return {\n points: [P, nt, yt, bt],\n normals: [a, a, m, m],\n lengths: [r, r, r, r]\n };\n }\n let { tangent: b, normal: C, length: L } = d;\n y = b.clone().multiplyScalar(L * l);\n const O = Math.abs(y.dot(p)), A = r - O, U = r + O, q = c.clone().sub(y), R = c.clone().add(y);\n let N, I, k, V;\n const M = f.clone().multiplyScalar(i), W = g.clone().multiplyScalar(i);\n if (u.clone().cross(p).dot(a) > 0) {\n const P = N = k = q;\n I = P.clone().add(M), V = P.clone().add(W);\n } else {\n const P = V = I = R;\n N = P.clone().sub(M), k = P.clone().sub(W);\n }\n return o ? {\n points: [N, I, k, V],\n normals: [a, a, m, m],\n lengths: [A, A, U, U]\n } : {\n points: [N, I, q, R, k, V],\n normals: [a, a, C, C, m, m],\n lengths: [A, A, r, r, U, U]\n };\n}\nvar Mn = /* @__PURE__ */ ((t) => (t[t.AllOblique = 0] = \"AllOblique\", t[t.TangentSame = 1] = \"TangentSame\", t[t.TangentReverse = 2] = \"TangentReverse\", t[t.TangentVertical = 4] = \"TangentVertical\", t[t.NormalSame = 8] = \"NormalSame\", t[t.NormalReverse = 16] = \"NormalReverse\", t[t.NormalVertical = 32] = \"NormalVertical\", t[t.BinormalSame = 64] = \"BinormalSame\", t[t.BinormalReverse = 128] = \"BinormalReverse\", t[t.BinormalVertical = 256] = \"BinormalVertical\", t))(Mn || {});\nfunction Bn(t, n, e = tt) {\n const { tangent: o, normal: s, binormal: c } = t, { tangent: r, normal: i, binormal: l } = n;\n let u = 0;\n const a = o.dot(r), f = Math.abs(a);\n f > 1 - e ? u |= a > 0 ? 1 : 2 : f < e && (u |= 4);\n const p = s.dot(i), m = Math.abs(p);\n m > 1 - e ? u |= p > 0 ? 8 : 16 : m < e && (u |= 32);\n const g = c.dot(l), d = Math.abs(g);\n return d > 1 - e ? u |= g > 0 ? 64 : 128 : d < e && (u |= 256), u;\n}\nfunction Dt(t, n, e = tt) {\n const { normal: o, binormal: s } = t, { normal: c, binormal: r } = n, i = Bn(t, n, e);\n let l, u;\n if (i & 8 && !(i & 2))\n u = c, l = s.clone().add(r);\n else if (i & 16)\n u = c, l = r.clone().negate().add(s);\n else {\n if (i & 3)\n return { relation: i };\n if (i & 256)\n return { relation: i };\n u = o.clone().add(c).normalize(), l = o.clone().cross(c);\n }\n l.normalize();\n let a = l.dot(s);\n a < 0 && (l.negate(), a = -a);\n const f = 1 / a;\n return {\n relation: i,\n line: {\n tangent: l,\n normal: u,\n length: f\n }\n };\n}\nfunction Vn(t, n, e, o, s = tt) {\n const { point: c, length: r, width: i } = t, l = i / 2, { tangent: u, normal: a, binormal: f } = n, { tangent: p, normal: m, binormal: g } = e, { smoothStepAngle: d, smoothStepLength: y } = o || {}, { relation: b, line: C } = Dt(n, e, s);\n let L;\n if (!C) {\n L = f.clone().multiplyScalar(l);\n const x = c.clone().sub(L), _ = c.clone().add(L);\n L.copy(g).multiplyScalar(l);\n const D = c.clone().sub(L), E = c.clone().add(L);\n return {\n points: [x, _, D, E],\n normals: [a, a, m, m],\n lengths: [r, r, r, r]\n };\n }\n let { tangent: O, normal: A, length: U } = C;\n L = O.clone().multiplyScalar(U * l);\n const q = c.clone().sub(L), R = c.clone().add(L);\n if (b & 64)\n return {\n points: [q, R],\n normals: [A, A],\n lengths: [r, r]\n };\n const N = f.angleTo(O), I = Math.abs(L.dot(p)), k = r - I, V = 1 / I;\n let M = d == null && y ? I / y : N / (d ?? 0.5);\n M = Math.max(Math.round(M), 1);\n const W = 1 / M, gt = new S().setFromUnitVectors(f, O), dt = new S().setFromUnitVectors(O, g), P = new S().setFromUnitVectors(a, A), nt = new S().setFromUnitVectors(A, m), Lt = u.clone().cross(p).dot(a) > 0 ? function(x) {\n return {\n left: q,\n right: q.clone().add(x)\n };\n } : function(x) {\n return {\n left: R.clone().sub(x),\n right: R\n };\n };\n L.copy(f).multiplyScalar(i);\n const Z = new S(), B = new S(), et = [], ot = [], st = [];\n for (let x = 0; x < M; x++) {\n const _ = x * W;\n B.slerpQuaternions(Z, gt, _);\n const D = x * V + k;\n st.push(D, D);\n const E = L.clone().applyQuaternion(B), { left: ct, right: rt } = Lt(E);\n et.push(ct, rt), B.slerpQuaternions(Z, P, _);\n const G = a.clone().applyQuaternion(B);\n ot.push(G, G);\n }\n L.copy(O).multiplyScalar(i);\n for (let x = 0; x <= M; x++) {\n const _ = x * W;\n B.slerpQuaternions(Z, dt, _);\n const D = x * V + r;\n st.push(D, D);\n const E = L.clone().applyQuaternion(B), { left: ct, right: rt } = Lt(E);\n et.push(ct, rt), B.slerpQuaternions(Z, nt, _);\n const G = A.clone().applyQuaternion(B);\n ot.push(G, G);\n }\n return { points: et, normals: ot, lengths: st };\n}\nfunction _n(t, n, e) {\n const { point: o, length: s, width: c } = t, r = c / 2, { normal: i, binormal: l } = n, { normal: u, binormal: a } = e;\n let f = l.clone().multiplyScalar(r);\n const p = o.clone().sub(f), m = o.clone().add(f);\n let g = a.clone().multiplyScalar(r);\n const d = o.clone().sub(g), y = o.clone().add(g);\n return {\n points: [p, m, d, y],\n normals: [i, i, u, u],\n lengths: [s, s, s, s]\n };\n}\nfunction Ce(t, n, e, o) {\n const { connectionType: s } = o || {};\n switch (s) {\n case \"round\":\n return Vn(t, n, e, o);\n case \"lineSegment\":\n return _n(t, n, e);\n default:\n return In(\n t,\n n,\n e,\n s === \"chamfer\"\n /* chamfer */\n );\n }\n}\nconst F = new ft();\nfunction mt(t, n) {\n const { wrapS: e, wrapT: o, flipX: s, flipY: c } = n;\n if (t.x < 0 || t.x > 1)\n switch (e) {\n case At:\n t.x = t.x - Math.floor(t.x);\n break;\n case Ct:\n t.x = t.x < 0 ? 0 : 1;\n break;\n case xt:\n Math.abs(Math.floor(t.x) % 2) === 1 ? t.x = Math.ceil(t.x) - t.x : t.x = t.x - Math.floor(t.x);\n break;\n }\n if (t.y < 0 || t.y > 1)\n switch (o) {\n case At:\n t.y = t.y - Math.floor(t.y);\n break;\n case Ct:\n t.y = t.y < 0 ? 0 : 1;\n break;\n case xt:\n Math.abs(Math.floor(t.y) % 2) === 1 ? t.y = Math.ceil(t.y) - t.y : t.y = t.y - Math.floor(t.y);\n break;\n }\n return s && (t.x = 1 - t.x), c && (t.y = 1 - t.y), t;\n}\nfunction Dn(t, n) {\n const e = t.count;\n for (let o = 0; o < e; o++) {\n const s = t.getX(o), c = t.getY(o), r = mt({ x: s, y: c }, n);\n t.setXY(o, r.x, r.y);\n }\n return t;\n}\nfunction zn(t, n) {\n const e = new z(), o = t.length;\n for (let s = 0; s < o; s++) {\n const c = s * 2, r = c + 1;\n e.x = t[c], e.y = t[r], mt(e, n), t[c] = e.x, t[r] = e.y;\n }\n return t;\n}\nfunction ht(t, n = new ft()) {\n const { offset: e = { x: 0, y: 0 }, repeat: o = { x: 1, y: 1 }, center: s = { x: 0, y: 0 }, rotation: c = 0 } = t;\n return n.setUvTransform(e.x, e.y, o.x, o.y, c, s.x, s.y), n;\n}\nfunction Ae(t, n, e) {\n return ht(n, F), t.applyMatrix3(F), e && mt(t, e), t;\n}\nfunction Te(t, n, e) {\n return ht(n, F), t.applyMatrix3(F), e && Dn(t, e), t.needsUpdate = !0, t;\n}\nfunction Oe(t, n, e) {\n ht(n, F);\n const o = new z(), s = t.length;\n for (let c = 0; c < s; c++) {\n const r = c * 2, i = r + 1;\n o.x = t[r], o.y = t[i], o.applyMatrix3(F), t[r] = o.x, t[i] = o.y;\n }\n return e && zn(t, e), t;\n}\nexport {\n Ie as Axis,\n Me as Axis4,\n It as Azimuth,\n wn as DirectionSide,\n Mn as FrenetFrameRelation,\n h as GeometricRelationship,\n Pn as LineConnectionType,\n X as adjustFrenetFrame,\n ln as adjustFrontUpFrame,\n Fn as adjustOrientation,\n Xn as azimuth,\n cn as closeCurvePath,\n ae as computeCurveFrenetFrames,\n An as computeCurveFrenetFramesByFixUp,\n xn as computeCurveFrenetFramesByT,\n Cn as computeCurveFrenetFramesByU,\n Bn as computeFrenetFrameRelation,\n En as computeIntersectSpheres,\n Y as computeIntersectionFactorOfLine_Circle,\n Dt as computeIntersectionLineOfBands,\n gn as computeIntersectionOfLineSegment_Circle,\n te as computeIntersectionOfLineSegment_LineSegment,\n Jn as computeIntersectionOfLine_Circle,\n v as computeIntersectionOfLine_Line,\n oe as computeIntersectionOfPolygon_Circle,\n $n as computeIntersectionOfRay_Circle,\n yn as computeIntersectionOfRay_LineSegment,\n be as computePolylineFrenetFrames,\n ye as computePolylineFrenetFramesByFixUp,\n T as computeVectorScalar,\n mt as configUV,\n Dn as configUVBufferAttribute,\n zn as configUVs,\n In as createBevelLineConnection,\n Sn as createCurveBufferGeometry,\n Ce as createLineConnection,\n ge as createLineCurve,\n de as createLineCurves,\n _n as createLineSegmentConnection,\n Le as createLineSegmentsByCurve,\n Gn as createLinearGradientTexture,\n Tn as createLines,\n _t as createPolylineBufferGeometry,\n he as createPolylineCurve,\n Vn as createRoundLineConnection,\n we as createSymmetricSegmentedTrigonometricIndexs,\n xe as createSymmetricSegmentedTrigonometricIndexsByVertexs,\n ht as createUVTransformMatrix,\n lt as defaultAzimuthOptions,\n ut as defaultCourseAzimuthMap,\n hn as discriminateRelationshipOfLineSegment_Circle,\n vn as discriminateRelationshipOfLineSegment_LineSegment,\n bn as discriminateRelationshipOfLineSegment_Point,\n Hn as discriminateRelationshipOfLine_Circle,\n Bt as discriminateRelationshipOfLine_Line,\n ne as discriminateRelationshipOfPoint_ConvexPolygon,\n Ln as discriminateRelationshipOfPoint_Polygon,\n ee as discriminateRelationshipOfPolygon_Circle,\n Kn as discriminateRelationshipOfRay_Circle,\n dn as discriminateRelationshipOfRay_LineSegment,\n pn as formatAzimuthDefineMap,\n jn as frenetFrameToFrontUpFrame,\n Qn as frontUpFrameToFrenetFrame,\n Zn as get3DTextureItem,\n Yn as get3DTextureSlice,\n un as getAxisRotationAngle,\n fn as getAzimuthAngle,\n me as getClosestDistanceInfoOfPointToLines,\n re as getCurveDivisionLength,\n ie as getCurvePointAwayFrom,\n le as getCurvePointAwayFromOrigin,\n se as getCurveULengths,\n On as getDistanceInfoOfPointToLines,\n an as getIncludedAngle,\n fe as getLengthsOfPoints,\n ue as getLengthsOfPositionAttribute,\n ce as getLengthsOfTs,\n pt as getLinesInfo,\n pe as getProjectionLines,\n Wn as getQuaternionBetweenVectorsAroundAxis,\n J as getRotationAngle,\n Vt as getSampleNum,\n Mt as getTextureFormatSize,\n Pt as getVectorClass,\n at as isCollinear,\n H as ivectorMemberToVector,\n rn as ivectorToVector,\n kn as threeBugPatch,\n Ae as transformUV,\n Te as transformUVBufferAttribute,\n Oe as transformUVs,\n tt as zeroThreshold_Default\n};\n","import { azimuth, } from '@three3d/tools'\r\nimport SoonSpace, { TopologyNodeInfo, } from 'soonspacejs'\r\nimport { Topology, } from 'soonspacejs'\r\nimport { Vector3, } from 'three'\r\nimport { Direction, } from './types'\r\n\r\nexport function getDirection ( target: Vector3, front: Vector3 ): Direction {\r\n\r\n azimuth.map = {\r\n yaw: {\r\n left: [ 20, 170 ],\r\n right: [ -170, -20 ],\r\n },\r\n pitch: {\r\n up: [ 20, 170 ],\r\n down: [ -170, -20 ],\r\n },\r\n }\r\n const { yaw, pitch, } = azimuth.computeAzimuth( target, front )\r\n const yawName = yaw.name as any as 'left' | 'right'\r\n const pitchName = pitch.name as any as 'up' | 'down'\r\n\r\n if ( !yawName || !pitchName ) return 'straight'\r\n if ( !pitchName ) return yawName\r\n if ( !yawName ) return pitchName\r\n return `${yawName}-${pitchName}`\r\n\r\n}\r\n\r\n/**\r\n * 路径反转\r\n * @param ssp\r\n * @param topologies 路径数组\r\n * @returns\r\n */\r\nexport function reverseTopologies ( ssp: SoonSpace, topologies: Topology[] ) {\r\n\r\n return topologies.reverse().map( ( item ) => {\r\n\r\n ssp.removeObjectById( item.sid )\r\n\r\n const topologyNodes = item.nodes.reverse().map(\r\n ( node ) =>\r\n ( {\r\n id: node.sid,\r\n position: node.position,\r\n graphs: node.graphs,\r\n } as TopologyNodeInfo )\r\n )\r\n\r\n return ssp.createTopology( {\r\n ...item.info,\r\n nodes: topologyNodes,\r\n } )\r\n \r\n } )\r\n\r\n}\r\n","import type { Node, Topology, } from 'soonspacejs'\r\nimport { Direction, } from './types'\r\nimport { getDirection, } from './utils'\r\n\r\ninterface NavigatorNodeInfo {\r\n\tprogressArea: [number, number];\r\n\tdistanceArea: [number, number];\r\n\tnode: Node;\r\n\tnextNode?: Node;\r\n\tdistanceToNext: number;\r\n\tdistanceToStart: number;\r\n\tdistanceToEnd: number;\r\n\tfrontDirection: Direction;\r\n}\r\n\r\ninterface DistanceInfo {\r\n\tdistanceToStartNode: number;\r\n\tdistanceToEndNode: number;\r\n\tdistanceToStart: number;\r\n\tdistanceToEnd: number;\r\n}\r\n\r\nexport function getDirectionByNodes ( p1: Node, p2?: Node, p3?: Node ): Direction {\r\n\r\n if ( !p2 || !p3 ) {\r\n\r\n return 'straight'\r\n \r\n }\r\n const target = p2.position.clone().sub( p1.position )\r\n const front = p3.position.clone().sub( p2.position )\r\n\r\n return getDirection( target, front )\r\n\r\n}\r\n\r\n/** 分析并返回所有节点信息 */\r\nexport function getNavigatorNodeInfosByTopology ( topology: Topology ) {\r\n\r\n const nodes = topology.nodes\r\n\r\n const totalLength = topology.getLength()\r\n\r\n let countLength = 0\r\n let countProgress = 0\r\n\r\n return nodes.reduce( ( acc, cur, index ) => {\r\n\r\n const secondNode = nodes[ index + 1 ] as Node | undefined\r\n\r\n const thirdNode = nodes[ index + 2 ] as Node | undefined\r\n\r\n const distanceToNext = secondNode ?\r\n secondNode.position.clone().distanceTo( cur.position ) :\r\n 0\r\n\r\n const frontDirection = getDirectionByNodes( cur, secondNode, thirdNode )\r\n\r\n const distanceEnd = countLength + distanceToNext\r\n const progressEnd = distanceEnd / totalLength\r\n\r\n const result: NavigatorNodeInfo = {\r\n progressArea: [ countProgress, progressEnd ],\r\n distanceArea: [ countLength, distanceEnd ],\r\n node: cur,\r\n nextNode: secondNode,\r\n distanceToStart: countLength,\r\n distanceToEnd: totalLength - countLength,\r\n distanceToNext,\r\n frontDirection,\r\n }\r\n\r\n countLength = distanceEnd\r\n countProgress = progressEnd\r\n\r\n acc.push( result )\r\n\r\n return acc\r\n \r\n }, [] as NavigatorNodeInfo[] )\r\n\r\n}\r\n\r\n/** 根据进度获取当前节点信息 */\r\nexport function getNavigatorNodeInfoByProgress (\r\n progress: number,\r\n infos: NavigatorNodeInfo[]\r\n) {\r\n\r\n if ( progress === 0 ) return infos[ 0 ]\r\n if ( progress === 100 ) return infos[ infos.length - 1 ]\r\n return infos.find( ( info ) => {\r\n\r\n const [ start, end ] = info.progressArea\r\n\r\n return progress >= start && progress < end\r\n \r\n } )\r\n\r\n}\r\n\r\n/** 获取当前位置距离信息 */\r\nexport function getDistanceInfoByProgress (\r\n progress: number,\r\n info?: NavigatorNodeInfo\r\n): DistanceInfo {\r\n\r\n if ( !info ) return {\r\n distanceToStartNode: 0,\r\n distanceToEndNode: 0,\r\n distanceToStart: 0,\r\n distanceToEnd: 0,\r\n }\r\n\r\n const [ startProgress, endProgress ] = info.progressArea\r\n\r\n const { distanceToNext, distanceToEnd, distanceToStart, } = info\r\n\r\n const progressInArea =\r\n\t\t( progress - startProgress ) / ( endProgress - startProgress )\r\n\r\n const distanceToStartNode = distanceToNext * progressInArea\r\n const distanceToEndNode = distanceToNext * ( 1 - progressInArea )\r\n\r\n return {\r\n distanceToStartNode,\r\n distanceToEndNode,\r\n distanceToStart: distanceToStartNode + distanceToStart,\r\n distanceToEnd: distanceToEnd - distanceToEndNode,\r\n }\r\n\r\n}\r\n","import { Object3D, Vector3, } from 'three'\r\nimport SoonSpace from 'soonspacejs'\r\nimport { Topology, } from 'soonspacejs'\r\nimport { PLAY_STATUS, playInfo, } from './types'\r\n\r\nexport * from './navigator-nodes'\r\nexport * from './types'\r\nexport * from './utils'\r\n\r\nexport class Navigator {\r\n\r\n onPlay: ( info: playInfo ) => void = () => {}\r\n onStatusChange: ( status: PLAY_STATUS ) => void = () => {}\r\n\r\n /** 是否循环播放,默认为否 */\r\n loop = false\r\n\r\n /** 是否自动开始下一段路径播放,默认为是 */\r\n autoNext = true\r\n\r\n /** 开始或者重新开始后自动播放路径动画,默认为否 */\r\n playAfterStart = false\r\n\r\n /** 开始时飞向模型,默认为是 */\r\n flyToModelAfterStart = true\r\n\r\n /** 停止时是否返回起点,默认为是 */\r\n backStartPointWhenStop = true\r\n\r\n /** 路径动画主体模型 */\r\n _model = new Object3D()\r\n get model () {\r\n\r\n return this._model\r\n \r\n }\r\n set model ( obj: Object3D ) {\r\n\r\n this._model = obj\r\n \r\n }\r\n\r\n protected _speed = 1\r\n /** 播放速度 */\r\n get speed () {\r\n\r\n return this._speed\r\n \r\n }\r\n set speed ( value: number ) {\r\n\r\n this._speed = value\r\n \r\n }\r\n\r\n protected _pathProgress = 0\r\n /** 当前段进度 */\r\n get pathProgress () {\r\n\r\n return this._pathProgress\r\n \r\n }\r\n set pathProgress ( value: number ) {\r\n\r\n this._pathProgress = value\r\n \r\n }\r\n\r\n protected _totalProgress = 0\r\n /** 总进度 */\r\n get totalProgress () {\r\n\r\n return this._pathProgress\r\n \r\n }\r\n set totalProgress ( value: number ) {\r\n\r\n this._pathProgress = value\r\n \r\n }\r\n\r\n /** 当前播放的动画路径索引 */\r\n protected _currentPathIndex = 0\r\n\r\n /** 当前节点 */\r\n protected _currentNode: Vector3 | null = null\r\n\r\n /** 下个路径节点 */\r\n protected _nextNode: Vector3 | null = null\r\n\r\n /** 当前状态 */\r\n protected _playStatus: PLAY_STATUS = PLAY_STATUS.PENDING\r\n\r\n get currentPath () {\r\n\r\n return this.paths[ this.currentPathIndex ]\r\n \r\n }\r\n\r\n /** 对外只读 当前路径索引 */\r\n get currentPathIndex () {\r\n\r\n return this._currentPathIndex\r\n \r\n }\r\n\r\n /** 对外只读 当前朝向方向向量 */\r\n get currentRotationVector () {\r\n\r\n if ( !this._nextNode || !this._currentNode ) return new Vector3()\r\n return this._nextNode.clone().sub( this._currentNode )\r\n \r\n }\r\n\r\n constructor ( public readonly ssp: SoonSpace, public paths: Topology[] ) {}\r\n\r\n protected changeStatus ( status: PLAY_STATUS ) {\r\n\r\n this._playStatus = status\r\n this.onStatusChange( status )\r\n \r\n }\r\n\r\n /** 开始导航 */\r\n start () {}\r\n\r\n /** 重新开始导航 */\r\n restart () {\r\n\r\n this.stop()\r\n this.start()\r\n \r\n }\r\n\r\n /** 播放动画 */\r\n play ( index = 0, node?: Vector3 ) {\r\n\r\n this.changeStatus( PLAY_STATUS.PLAYING )\r\n\r\n const path = this.paths[ index ]\r\n \r\n }\r\n\r\n /** 暂停动画 */\r\n pause () {\r\n\r\n this.changeStatus( PLAY_STATUS.PAUSE )\r\n \r\n }\r\n\r\n /** 停止动画 */\r\n stop () {\r\n\r\n this.changeStatus( PLAY_STATUS.STOP )\r\n \r\n }\r\n\r\n /** 路径反转 */\r\n flip () {}\r\n\r\n /** 结束导航 */\r\n over () {\r\n\r\n this.changeStatus( PLAY_STATUS.PENDING )\r\n \r\n }\r\n\r\n}\r\n","import { Azimuth, } from '@three3d/tools'\r\n\r\nexport { Azimuth, AzimuthOptions, CourseAzimuthMap, AzimuthDefine, AzimuthInfo, CourseInfo, AngleRange, AzimuthList, AzimuthMap, } from '@three3d/tools'\r\n\r\nconst azimuth = new Azimuth()\r\n\r\nexport { azimuth, }\r\n"],"names":["w","ft","azimuth","Azimuth"],"mappings":"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","x_google_ignoreList":[7]}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@soonspacejs/plugin-navigation",
|
|
3
3
|
"pluginName": "NavigationPlugin",
|
|
4
|
-
"version": "2.13.
|
|
4
|
+
"version": "2.13.7",
|
|
5
5
|
"description": "Navigation plugin for SoonSpace.js",
|
|
6
6
|
"main": "dist/index.esm.js",
|
|
7
7
|
"module": "dist/index.esm.js",
|
|
@@ -13,9 +13,9 @@
|
|
|
13
13
|
],
|
|
14
14
|
"author": "zhuojian",
|
|
15
15
|
"license": "UNLICENSED",
|
|
16
|
-
"gitHead": "
|
|
16
|
+
"gitHead": "550040550bf20ec0015982ff1159d0cfe9b35ed3",
|
|
17
17
|
"peerDependencies": {
|
|
18
|
-
"soonspacejs": "2.13.
|
|
18
|
+
"soonspacejs": "2.13.7"
|
|
19
19
|
},
|
|
20
20
|
"dependencies": {
|
|
21
21
|
"@three3d/tools": "^1.6.0"
|
package/dist/azimuth/index.d.ts
DELETED
package/dist/camera/index.d.ts
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { OrthographicCamera } from 'three';
|
|
2
|
-
import SoonSpace from 'soonspacejs';
|
|
3
|
-
import { SoonSpaceCamera } from './ssp-camera';
|
|
4
|
-
export declare class MapCamera extends SoonSpaceCamera<OrthographicCamera> {
|
|
5
|
-
readonly ssp: SoonSpace;
|
|
6
|
-
protected resizeObserver: ResizeObserver;
|
|
7
|
-
_zoom: number;
|
|
8
|
-
get zoom(): number;
|
|
9
|
-
set zoom(value: number);
|
|
10
|
-
constructor(ssp: SoonSpace);
|
|
11
|
-
resizeCamera(): void;
|
|
12
|
-
protected onEnter(): void;
|
|
13
|
-
protected onQuit(): void;
|
|
14
|
-
}
|
|
@@ -1,202 +0,0 @@
|
|
|
1
|
-
import SoonSpace from 'soonspacejs';
|
|
2
|
-
import { Camera, Euler, Object3D, Quaternion, Vector3 } from 'three';
|
|
3
|
-
import { GyroListener } from '../utils/gyro';
|
|
4
|
-
import { SoonSpaceCamera } from './ssp-camera';
|
|
5
|
-
import { CameraOppositeType, EulerArray, FixEuler, FixVector, NAVIGATE_ORIENTATION_TYPE, NAVIGATE_VISION_TYPE, NavigateOrientationTarget } from './types';
|
|
6
|
-
/**
|
|
7
|
-
* 相机控制回调
|
|
8
|
-
*
|
|
9
|
-
* camera 当前相机
|
|
10
|
-
*
|
|
11
|
-
* target 跟踪的目标
|
|
12
|
-
*/
|
|
13
|
-
export type ControlCallback = (camera: Camera, target: Object3D, event?: MouseEvent | TouchEvent) => void;
|
|
14
|
-
export interface NavigateCameraOptions {
|
|
15
|
-
disabledAnimate: boolean;
|
|
16
|
-
fixedOrientation: boolean;
|
|
17
|
-
autoRestoreOrientation: boolean | number;
|
|
18
|
-
oppositeCamera: boolean;
|
|
19
|
-
oppositeType: CameraOppositeType;
|
|
20
|
-
orientationTarget: NavigateOrientationTarget;
|
|
21
|
-
vision: NAVIGATE_VISION_TYPE;
|
|
22
|
-
orientationType: NAVIGATE_ORIENTATION_TYPE;
|
|
23
|
-
distanceToTarget: number;
|
|
24
|
-
rotationToTarget: Vector3;
|
|
25
|
-
isFixRotationRelativeTarget: boolean;
|
|
26
|
-
targetRotationFix: FixEuler;
|
|
27
|
-
isFixPositionRelativeTarget: boolean;
|
|
28
|
-
targetPositionFix: FixVector;
|
|
29
|
-
enableGyro: boolean;
|
|
30
|
-
gyroX: boolean;
|
|
31
|
-
gyroY: boolean;
|
|
32
|
-
gyroZ: boolean;
|
|
33
|
-
gyroAbsolute: boolean;
|
|
34
|
-
onControlStart: null | ControlCallback;
|
|
35
|
-
onControlRender: null | ControlCallback;
|
|
36
|
-
onControlEnd: null | ControlCallback;
|
|
37
|
-
}
|
|
38
|
-
/** 导航相机 */
|
|
39
|
-
export declare class NavigateCamera extends SoonSpaceCamera<Camera> {
|
|
40
|
-
readonly ssp: SoonSpace;
|
|
41
|
-
initOptions: Readonly<NavigateCameraOptions>;
|
|
42
|
-
cameraKey: string;
|
|
43
|
-
private _events;
|
|
44
|
-
get position(): Vector3;
|
|
45
|
-
get rotation(): Euler;
|
|
46
|
-
get quaternion(): Quaternion;
|
|
47
|
-
private _lookAt;
|
|
48
|
-
private _restoreTimer;
|
|
49
|
-
private _positionTween;
|
|
50
|
-
private autoFollowRender;
|
|
51
|
-
/** 相机位置记录用的对象,用于恢复相机位置和朝向使用 */
|
|
52
|
-
protected _cameraPlaceholder: Object3D<import("three").Object3DEventMap>;
|
|
53
|
-
/** 取消飞向动画 */
|
|
54
|
-
disabledAnimate: boolean;
|
|
55
|
-
/** 第三人称相机距离跟踪目标距离 */
|
|
56
|
-
distanceToTarget: number;
|
|
57
|
-
/** 第三人称相机相对模型视角 */
|
|
58
|
-
rotationToTarget: Vector3;
|
|
59
|
-
/** 相机反转 */
|
|
60
|
-
oppositeCamera: boolean;
|
|
61
|
-
/** 相机反转类型, 默认为 Y 轴对称 */
|
|
62
|
-
oppositeType: CameraOppositeType;
|
|
63
|
-
/** 是否相对模型修正角度 */
|
|
64
|
-
isFixRotationRelativeTarget: boolean;
|
|
65
|
-
/**
|
|
66
|
-
* 目标角度修正
|
|
67
|
-
*
|
|
68
|
-
* 支持传入 getter 函数
|
|
69
|
-
*/
|
|
70
|
-
targetRotationFix: FixEuler;
|
|
71
|
-
/** 是否相对模型修正偏移 */
|
|
72
|
-
isFixPositionRelativeTarget: boolean;
|
|
73
|
-
/**
|
|
74
|
-
* 目标位置修正
|
|
75
|
-
*
|
|
76
|
-
* 支持传入 getter 函数
|
|
77
|
-
*/
|
|
78
|
-
targetPositionFix: FixVector;
|
|
79
|
-
/**
|
|
80
|
-
* 自动恢复朝向
|
|
81
|
-
*
|
|
82
|
-
* boolean 是否恢复朝向
|
|
83
|
-
*
|
|
84
|
-
* number 间隔多少秒后恢复朝向
|
|
85
|
-
*/
|
|
86
|
-
autoRestoreOrientation: boolean | number;
|
|
87
|
-
/** 当控制器控制相机时允许外部自定义控制,控制开始时触发 */
|
|
88
|
-
onControlStart: null | ControlCallback;
|
|
89
|
-
/** 当控制器控制相机时允许外部自定义控制,控制进行时回调 */
|
|
90
|
-
onControlRender: null | ControlCallback;
|
|
91
|
-
/** 当控制器控制相机时允许外部自定义控制,控制结束时回调 */
|
|
92
|
-
onControlEnd: null | ControlCallback;
|
|
93
|
-
/** 陀螺仪 */
|
|
94
|
-
protected _gyroListener: GyroListener;
|
|
95
|
-
protected _enableGyro: boolean;
|
|
96
|
-
/** 开启 */
|
|
97
|
-
get enableGyro(): boolean;
|
|
98
|
-
set enableGyro(value: boolean);
|
|
99
|
-
/** 是否应用陀螺仪 X 轴,默认不启动 */
|
|
100
|
-
get gyroX(): boolean;
|
|
101
|
-
set gyroX(value: boolean);
|
|
102
|
-
/** 是否应用陀螺仪 Y 轴,默认启动 */
|
|
103
|
-
get gyroY(): boolean;
|
|
104
|
-
set gyroY(value: boolean);
|
|
105
|
-
/** 是否应用陀螺仪 Z 轴,默认不启动 */
|
|
106
|
-
get gyroZ(): boolean;
|
|
107
|
-
set gyroZ(value: boolean);
|
|
108
|
-
/** 陀螺仪是否使用绝对值,默认使用 */
|
|
109
|
-
get gyroAbsolute(): boolean;
|
|
110
|
-
set gyroAbsolute(value: boolean);
|
|
111
|
-
/** 陀螺仪的旋转欧拉角 */
|
|
112
|
-
protected _gyroRotation: Euler;
|
|
113
|
-
get targetRotationAfterFix(): EulerArray;
|
|
114
|
-
get targetPositionAfterFix(): import("./types").VectorArray;
|
|
115
|
-
get realDistanceToTarget(): number;
|
|
116
|
-
get realRotationToTarget(): Vector3;
|
|
117
|
-
protected _orientationType: NAVIGATE_ORIENTATION_TYPE;
|
|
118
|
-
/** 绝对朝向的缓存值 */
|
|
119
|
-
private _fixedOrientationRotation;
|
|
120
|
-
/**
|
|
121
|
-
* 相机朝向类型
|
|
122
|
-
*
|
|
123
|
-
* NAVIGATE_ORIENTATION_TYPE.RELATIVE_ORIENTATION 相对朝向
|
|
124
|
-
*
|
|
125
|
-
* NAVIGATE_ORIENTATION_TYPE.FIXED_ORIENTATION 绝对朝向
|
|
126
|
-
*
|
|
127
|
-
* NAVIGATE_ORIENTATION_TYPE.GYRO_ORIENTATION 陀螺仪朝向
|
|
128
|
-
*/
|
|
129
|
-
get orientationType(): NAVIGATE_ORIENTATION_TYPE;
|
|
130
|
-
set orientationType(value: NAVIGATE_ORIENTATION_TYPE);
|
|
131
|
-
protected _orientationTarget: NavigateOrientationTarget;
|
|
132
|
-
/**
|
|
133
|
-
* 相机朝向目标
|
|
134
|
-
*
|
|
135
|
-
* “main” 朝向跟踪目标
|
|
136
|
-
*
|
|
137
|
-
* Vector3 朝向点
|
|
138
|
-
*
|
|
139
|
-
* Object3D 朝向目标对象
|
|
140
|
-
*
|
|
141
|
-
* Euler 固定朝向
|
|
142
|
-
*/
|
|
143
|
-
get orientationTarget(): NavigateOrientationTarget;
|
|
144
|
-
set orientationTarget(value: NavigateOrientationTarget);
|
|
145
|
-
protected _vision: NAVIGATE_VISION_TYPE;
|
|
146
|
-
/**
|
|
147
|
-
* 视角配置
|
|
148
|
-
*
|
|
149
|
-
* NAVIGATE_VISION_TYPE.FIRST_VISION 第一人称
|
|
150
|
-
*
|
|
151
|
-
* NAVIGATE_VISION_TYPE.THIRD_VISION 第三人称
|
|
152
|
-
*
|
|
153
|
-
* NAVIGATE_VISION_TYPE.UP_VISION 俯视图
|
|
154
|
-
*
|
|
155
|
-
* NAVIGATE_VISION_TYPE.LEFT_VISION 左视图
|
|
156
|
-
*
|
|
157
|
-
* 默认为第三人称
|
|
158
|
-
*/
|
|
159
|
-
get vision(): NAVIGATE_VISION_TYPE;
|
|
160
|
-
set vision(value: NAVIGATE_VISION_TYPE);
|
|
161
|
-
protected _followTarget: Object3D;
|
|
162
|
-
/** 相机跟随目标 */
|
|
163
|
-
get followTarget(): Object3D;
|
|
164
|
-
set followTarget(value: Object3D);
|
|
165
|
-
/** 相机跟踪点(相对跟随目标以及偏移参数获取的点) */
|
|
166
|
-
get followPosition(): Vector3;
|
|
167
|
-
/** 跟踪目标的方向(相对跟随目标以及偏移参数获取的朝向) */
|
|
168
|
-
get followRotation(): Euler;
|
|
169
|
-
protected _fixedOrientation: boolean;
|
|
170
|
-
/** 固定朝向,朝向不受控制器影响 */
|
|
171
|
-
get fixedOrientation(): boolean;
|
|
172
|
-
set fixedOrientation(value: boolean);
|
|
173
|
-
constructor(ssp: SoonSpace, camera?: Camera, options?: Partial<NavigateCameraOptions>);
|
|
174
|
-
protected initGyroListener(): void;
|
|
175
|
-
/** 控制器操作时处理 */
|
|
176
|
-
protected setCameraOrientationOnControl(): void;
|
|
177
|
-
/** 更新相机占位符的方位 */
|
|
178
|
-
protected updateCameraPlaceholder(): void;
|
|
179
|
-
/** 设置相机的方位 */
|
|
180
|
-
protected setCameraOrientationOnRender(): void;
|
|
181
|
-
/** 获取相机点相对跟踪点的欧拉角 */
|
|
182
|
-
protected getRenderCameraOrientation(): Euler;
|
|
183
|
-
/** 获取相机落点(相对跟踪点的方向归一化 * 距离) */
|
|
184
|
-
protected getRenderCameraPosition(): Vector3;
|
|
185
|
-
protected onRender(): void;
|
|
186
|
-
/** 初始化事件 */
|
|
187
|
-
protected initEvents(): void;
|
|
188
|
-
/** 清除事件 */
|
|
189
|
-
protected clearEvents(): void;
|
|
190
|
-
protected onEnter(): void;
|
|
191
|
-
protected onQuit(): void;
|
|
192
|
-
/** 参数重置 */
|
|
193
|
-
resetOptions(): void;
|
|
194
|
-
/** 设置参数 */
|
|
195
|
-
setOptions(options: Partial<NavigateCameraOptions>): void;
|
|
196
|
-
/**
|
|
197
|
-
* 设置相机,若导航相机正在使用中,则会立即切换为设置的相机
|
|
198
|
-
*/
|
|
199
|
-
setCamera(camera: Camera): this;
|
|
200
|
-
/** 重置相机坐标 */
|
|
201
|
-
restoreOrientation(): void;
|
|
202
|
-
}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { Camera } from 'three';
|
|
2
|
-
import SoonSpace from 'soonspacejs';
|
|
3
|
-
export declare abstract class SoonSpaceCamera<C extends Camera = Camera> {
|
|
4
|
-
readonly ssp: SoonSpace;
|
|
5
|
-
nativeCamera: C;
|
|
6
|
-
protected _isActive: boolean;
|
|
7
|
-
constructor(ssp: SoonSpace, nativeCamera: C);
|
|
8
|
-
active(): void;
|
|
9
|
-
private _onBeforeEnter;
|
|
10
|
-
private _onBeforeQuit;
|
|
11
|
-
protected onEnter(): void;
|
|
12
|
-
protected onQuit(): void;
|
|
13
|
-
}
|
package/dist/camera/types.d.ts
DELETED
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import { Euler, EulerOrder, Object3D, Vector3 } from 'three';
|
|
2
|
-
export type NavigateOrientationTarget = 'main' | Vector3 | Euler | Object3D;
|
|
3
|
-
export declare enum NAVIGATE_VISION_TYPE {
|
|
4
|
-
FIRST_VISION = "first",
|
|
5
|
-
THIRD_VISION = "third",
|
|
6
|
-
UP_VISION = "up",
|
|
7
|
-
LEFT_VISION = "left"
|
|
8
|
-
}
|
|
9
|
-
export declare enum NAVIGATE_ORIENTATION_TYPE {
|
|
10
|
-
RELATIVE_ORIENTATION = "relative",
|
|
11
|
-
FIXED_ORIENTATION = "fixed",
|
|
12
|
-
GYRO_ORIENTATION = "gyro"
|
|
13
|
-
}
|
|
14
|
-
export type CameraOppositeType = {
|
|
15
|
-
x: boolean;
|
|
16
|
-
y: boolean;
|
|
17
|
-
z: boolean;
|
|
18
|
-
};
|
|
19
|
-
export type Object3DLike = {
|
|
20
|
-
position: Vector3;
|
|
21
|
-
rotation: Euler;
|
|
22
|
-
} & Record<PropertyKey, any>;
|
|
23
|
-
export type VectorArray = [number, number, number];
|
|
24
|
-
export type EulerArray = [number, number, number, EulerOrder?];
|
|
25
|
-
export type FixVector = VectorArray | ((target?: Object3DLike) => VectorArray);
|
|
26
|
-
export type FixEuler = EulerArray | ((target?: Object3DLike) => EulerArray);
|
package/dist/camera/utils.d.ts
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { Euler, Vector3 } from 'three';
|
|
2
|
-
import { FixEuler, FixVector, Object3DLike } from './types';
|
|
3
|
-
export declare function Vector3ToEuler(v: Vector3): Euler;
|
|
4
|
-
export declare function eulerToVector3(e: Euler): Vector3;
|
|
5
|
-
/**
|
|
6
|
-
* 欧拉角归一化
|
|
7
|
-
* @param e 欧拉角
|
|
8
|
-
*/
|
|
9
|
-
export declare function normalizeEuler(e: Euler): Vector3;
|
|
10
|
-
export declare function getFixVector(v: FixVector, target?: Object3DLike): import("./types").VectorArray;
|
|
11
|
-
export declare function getFixEuler(e: FixEuler, target?: Object3DLike): import("./types").EulerArray;
|
package/dist/index.d.ts
DELETED