1 line
13 KiB
Plaintext
1 line
13 KiB
Plaintext
|
|
{"version":3,"file":"FlyControls.cjs","sources":["../../src/controls/FlyControls.ts"],"sourcesContent":["import { Camera, Quaternion, Vector3 } from 'three'\nimport { EventDispatcher } from './EventDispatcher'\n\nfunction contextmenu(event: Event): void {\n event.preventDefault()\n}\n\nexport interface FlyControlsEventMap {\n /**\n * Fires when the camera has been transformed by the controls.\n */\n change: {};\n}\n\nclass FlyControls extends EventDispatcher<FlyControlsEventMap> {\n public object: Camera\n public domElement: HTMLElement | Document = null!\n\n public movementSpeed = 1.0\n public rollSpeed = 0.005\n\n public dragToLook = false\n public autoForward = false\n\n private changeEvent = { type: 'change' }\n private EPS = 0.000001\n\n private tmpQuaternion = new Quaternion()\n\n private mouseStatus = 0\n\n private movementSpeedMultiplier = 1\n\n private moveState = {\n up: 0,\n down: 0,\n left: 0,\n right: 0,\n forward: 0,\n back: 0,\n pitchUp: 0,\n pitchDown: 0,\n yawLeft: 0,\n yawRight: 0,\n rollLeft: 0,\n rollRight: 0,\n }\n private moveVector = new Vector3(0, 0, 0)\n private rotationVector = new Vector3(0, 0, 0)\n\n constructor(object: Camera, domElement?: HTMLElement | Document) {\n super()\n\n this.object = object\n\n // connect events\n if (domElement !== undefined) this.connect(domElement)\n\n this.updateMovementVector()\n this.updateRotationVector()\n }\n\n private keydown = (event: KeyboardEvent): void => {\n if (event.altKey) {\n return\n }\n\n switch (event.code) {\n case 'ShiftLeft':\n case 'ShiftRight':\n this.movementSpeedMultiplier = 0.1\n break\n\n case 'KeyW':\n this.moveState.forward = 1\n break\n case 'KeyS':\n this.moveState.back = 1\n break\n\n case 'KeyA':\n this.moveState.left = 1\n break\n case 'KeyD':\n this.moveState.right = 1\n break\n\n case 'KeyR':\n this.moveState.up = 1\n break\n case 'KeyF':\n this.moveState.down = 1\n break\n\n case 'ArrowUp':\n this.moveState.pitchUp = 1\n break\n case 'ArrowDown':\n this.moveState.pitchDown = 1\n break\n\n case 'ArrowLeft':\n this.moveState.yawLeft = 1\n break\n case 'ArrowRight':\n this.moveState.yawRight = 1\n break\n\n case 'KeyQ':\n this.moveState.rollLeft = 1\n break\n case 'KeyE':\n this.moveState.rollRight = 1\n break\n }\n\n this.updateMovementVector()\n this.updateRotationVector()\n }\n\n private keyup = (event: KeyboardEvent): void => {\n switch (event.code) {\n case 'ShiftLeft':\n case 'ShiftRight':\n this.movementSpeedMultiplier = 1\n break\n\n case 'KeyW':\n this.moveState.forward = 0\n break\n case 'KeyS':\n this.moveState.back = 0\n break\n\n case 'KeyA':\n this.moveState.left = 0\n break\n case 'KeyD':\n this.moveState.right = 0\n break\n\n case 'KeyR':\n this.moveState.up = 0\n break\n case 'KeyF':\n this.moveState.down = 0\n break\n\n case 'ArrowUp':\n this.moveState.pitchUp = 0\n break\n case 'ArrowDown':\n this.moveState.pitchDown = 0\n break\n\n case 'ArrowLeft':\n this.moveState.yawLeft = 0\n break\n case 'ArrowRight':\n this.moveState.yawRight = 0\n break\n\n case 'KeyQ':\n this.moveState.rollLeft = 0\n break\n case 'KeyE':\n this.moveState.rollRight = 0\n break\n }\n\n this.updateMovementVector()\n this.updateRotationVector()\n }\n\n private pointerdown = (event: MouseEvent): void => {\n if (this.dragToLook) {\n this.mouseStatus++\n } else {\n switch (event.button) {\n case 0:\n this.moveState.forward = 1\n break\n case 2:\n this.moveState.back = 1\n
|