04aeab564dd5402eef0ecb86ad8d2a3b592aecaca995f1af0e8b569f7c53488b.json 36 KB

1
  1. {"ast":null,"code":"import { __decorate } from \"../tslib.es6.js\";\nimport { serializeAsVector3, serialize } from \"../Misc/decorators.js\";\nimport { Vector3, Vector2 } from \"../Maths/math.vector.js\";\nimport { TargetCamera } from \"./targetCamera.js\";\nimport { FreeCameraInputsManager } from \"./freeCameraInputsManager.js\";\nimport { Tools } from \"../Misc/tools.js\";\nimport { RegisterClass } from \"../Misc/typeStore.js\";\nimport { AbstractEngine } from \"../Engines/abstractEngine.js\";\n/**\n * This represents a free type of camera. It can be useful in First Person Shooter game for instance.\n * Please consider using the new UniversalCamera instead as it adds more functionality like the gamepad.\n * @see https://doc.babylonjs.com/features/featuresDeepDive/cameras/camera_introduction#universal-camera\n */\nexport class FreeCamera extends TargetCamera {\n /**\n * Gets the input sensibility for a mouse input. (default is 2000.0)\n * Higher values reduce sensitivity.\n */\n get angularSensibility() {\n const mouse = this.inputs.attached[\"mouse\"];\n if (mouse) {\n return mouse.angularSensibility;\n }\n return 0;\n }\n /**\n * Sets the input sensibility for a mouse input. (default is 2000.0)\n * Higher values reduce sensitivity.\n */\n set angularSensibility(value) {\n const mouse = this.inputs.attached[\"mouse\"];\n if (mouse) {\n mouse.angularSensibility = value;\n }\n }\n /**\n * Gets or Set the list of keyboard keys used to control the forward move of the camera.\n */\n get keysUp() {\n const keyboard = this.inputs.attached[\"keyboard\"];\n if (keyboard) {\n return keyboard.keysUp;\n }\n return [];\n }\n set keysUp(value) {\n const keyboard = this.inputs.attached[\"keyboard\"];\n if (keyboard) {\n keyboard.keysUp = value;\n }\n }\n /**\n * Gets or Set the list of keyboard keys used to control the upward move of the camera.\n */\n get keysUpward() {\n const keyboard = this.inputs.attached[\"keyboard\"];\n if (keyboard) {\n return keyboard.keysUpward;\n }\n return [];\n }\n set keysUpward(value) {\n const keyboard = this.inputs.attached[\"keyboard\"];\n if (keyboard) {\n keyboard.keysUpward = value;\n }\n }\n /**\n * Gets or Set the list of keyboard keys used to control the backward move of the camera.\n */\n get keysDown() {\n const keyboard = this.inputs.attached[\"keyboard\"];\n if (keyboard) {\n return keyboard.keysDown;\n }\n return [];\n }\n set keysDown(value) {\n const keyboard = this.inputs.attached[\"keyboard\"];\n if (keyboard) {\n keyboard.keysDown = value;\n }\n }\n /**\n * Gets or Set the list of keyboard keys used to control the downward move of the camera.\n */\n get keysDownward() {\n const keyboard = this.inputs.attached[\"keyboard\"];\n if (keyboard) {\n return keyboard.keysDownward;\n }\n return [];\n }\n set keysDownward(value) {\n const keyboard = this.inputs.attached[\"keyboard\"];\n if (keyboard) {\n keyboard.keysDownward = value;\n }\n }\n /**\n * Gets or Set the list of keyboard keys used to control the left strafe move of the camera.\n */\n get keysLeft() {\n const keyboard = this.inputs.attached[\"keyboard\"];\n if (keyboard) {\n return keyboard.keysLeft;\n }\n return [];\n }\n set keysLeft(value) {\n const keyboard = this.inputs.attached[\"keyboard\"];\n if (keyboard) {\n keyboard.keysLeft = value;\n }\n }\n /**\n * Gets or Set the list of keyboard keys used to control the right strafe move of the camera.\n */\n get keysRight() {\n const keyboard = this.inputs.attached[\"keyboard\"];\n if (keyboard) {\n return keyboard.keysRight;\n }\n return [];\n }\n set keysRight(value) {\n const keyboard = this.inputs.attached[\"keyboard\"];\n if (keyboard) {\n keyboard.keysRight = value;\n }\n }\n /**\n * Gets or Set the list of keyboard keys used to control the left rotation move of the camera.\n */\n get keysRotateLeft() {\n const keyboard = this.inputs.attached[\"keyboard\"];\n if (keyboard) {\n return keyboard.keysRotateLeft;\n }\n return [];\n }\n set keysRotateLeft(value) {\n const keyboard = this.inputs.attached[\"keyboard\"];\n if (keyboard) {\n keyboard.keysRotateLeft = value;\n }\n }\n /**\n * Gets or Set the list of keyboard keys used to control the right rotation move of the camera.\n */\n get keysRotateRight() {\n const keyboard = this.inputs.attached[\"keyboard\"];\n if (keyboard) {\n return keyboard.keysRotateRight;\n }\n return [];\n }\n set keysRotateRight(value) {\n const keyboard = this.inputs.attached[\"keyboard\"];\n if (keyboard) {\n keyboard.keysRotateRight = value;\n }\n }\n /**\n * Gets or Set the list of keyboard keys used to control the up rotation move of the camera.\n */\n get keysRotateUp() {\n const keyboard = this.inputs.attached[\"keyboard\"];\n if (keyboard) {\n return keyboard.keysRotateUp;\n }\n return [];\n }\n set keysRotateUp(value) {\n const keyboard = this.inputs.attached[\"keyboard\"];\n if (keyboard) {\n keyboard.keysRotateUp = value;\n }\n }\n /**\n * Gets or Set the list of keyboard keys used to control the down rotation move of the camera.\n */\n get keysRotateDown() {\n const keyboard = this.inputs.attached[\"keyboard\"];\n if (keyboard) {\n return keyboard.keysRotateDown;\n }\n return [];\n }\n set keysRotateDown(value) {\n const keyboard = this.inputs.attached[\"keyboard\"];\n if (keyboard) {\n keyboard.keysRotateDown = value;\n }\n }\n /**\n * Instantiates a Free Camera.\n * This represents a free type of camera. It can be useful in First Person Shooter game for instance.\n * Please consider using the new UniversalCamera instead as it adds more functionality like touch to this camera.\n * @see https://doc.babylonjs.com/features/featuresDeepDive/cameras/camera_introduction#universal-camera\n * @param name Define the name of the camera in the scene\n * @param position Define the start position of the camera in the scene\n * @param scene Define the scene the camera belongs to\n * @param setActiveOnSceneIfNoneActive Defines whether the camera should be marked as active if not other active cameras have been defined\n */\n constructor(name, position, scene, setActiveOnSceneIfNoneActive = true) {\n super(name, position, scene, setActiveOnSceneIfNoneActive);\n /**\n * Define the collision ellipsoid of the camera.\n * This is helpful to simulate a camera body like the player body around the camera\n * @see https://doc.babylonjs.com/features/featuresDeepDive/cameras/camera_collisions#arcrotatecamera\n */\n this.ellipsoid = new Vector3(0.5, 1, 0.5);\n /**\n * Define an offset for the position of the ellipsoid around the camera.\n * This can be helpful to determine the center of the body near the gravity center of the body\n * instead of its head.\n */\n this.ellipsoidOffset = new Vector3(0, 0, 0);\n /**\n * Enable or disable collisions of the camera with the rest of the scene objects.\n */\n this.checkCollisions = false;\n /**\n * Enable or disable gravity on the camera.\n */\n this.applyGravity = false;\n this._needMoveForGravity = false;\n this._oldPosition = Vector3.Zero();\n this._diffPosition = Vector3.Zero();\n this._newPosition = Vector3.Zero();\n // Collisions\n this._collisionMask = -1;\n this._onCollisionPositionChange = (collisionId, newPosition, collidedMesh = null) => {\n this._newPosition.copyFrom(newPosition);\n this._newPosition.subtractToRef(this._oldPosition, this._diffPosition);\n if (this._diffPosition.length() > AbstractEngine.CollisionsEpsilon) {\n this.position.addToRef(this._diffPosition, this._deferredPositionUpdate);\n if (!this._deferOnly) {\n this.position.copyFrom(this._deferredPositionUpdate);\n } else {\n this._deferredUpdated = true;\n }\n // call onCollide, if defined. Note that in case of deferred update, the actual position change might happen in the next frame.\n if (this.onCollide && collidedMesh) {\n this.onCollide(collidedMesh);\n }\n }\n };\n this.inputs = new FreeCameraInputsManager(this);\n this.inputs.addKeyboard().addMouse();\n }\n /**\n * Attached controls to the current camera.\n * @param ignored defines an ignored parameter kept for backward compatibility.\n * @param noPreventDefault Defines whether event caught by the controls should call preventdefault() (https://developer.mozilla.org/en-US/docs/Web/API/Event/preventDefault)\n */\n attachControl(ignored, noPreventDefault) {\n // eslint-disable-next-line prefer-rest-params\n noPreventDefault = Tools.BackCompatCameraNoPreventDefault(arguments);\n this.inputs.attachElement(noPreventDefault);\n }\n /**\n * Detach the current controls from the specified dom element.\n */\n detachControl() {\n this.inputs.detachElement();\n this.cameraDirection = new Vector3(0, 0, 0);\n this.cameraRotation = new Vector2(0, 0);\n }\n /**\n * Define a collision mask to limit the list of object the camera can collide with\n */\n get collisionMask() {\n return this._collisionMask;\n }\n set collisionMask(mask) {\n this._collisionMask = !isNaN(mask) ? mask : -1;\n }\n /**\n * @internal\n */\n _collideWithWorld(displacement) {\n let globalPosition;\n if (this.parent) {\n globalPosition = Vector3.TransformCoordinates(this.position, this.parent.getWorldMatrix());\n } else {\n globalPosition = this.position;\n }\n globalPosition.subtractFromFloatsToRef(0, this.ellipsoid.y, 0, this._oldPosition);\n this._oldPosition.addInPlace(this.ellipsoidOffset);\n const coordinator = this.getScene().collisionCoordinator;\n if (!this._collider) {\n this._collider = coordinator.createCollider();\n }\n this._collider._radius = this.ellipsoid;\n this._collider.collisionMask = this._collisionMask;\n //no need for clone, as long as gravity is not on.\n let actualDisplacement = displacement;\n //add gravity to the direction to prevent the dual-collision checking\n if (this.applyGravity) {\n //this prevents mending with cameraDirection, a global variable of the free camera class.\n actualDisplacement = displacement.add(this.getScene().gravity);\n }\n coordinator.getNewPosition(this._oldPosition, actualDisplacement, this._collider, 3, null, this._onCollisionPositionChange, this.uniqueId);\n }\n /** @internal */\n _checkInputs() {\n if (!this._localDirection) {\n this._localDirection = Vector3.Zero();\n this._transformedDirection = Vector3.Zero();\n }\n this.inputs.checkInputs();\n super._checkInputs();\n }\n /**\n * Enable movement without a user input. This allows gravity to always be applied.\n */\n set needMoveForGravity(value) {\n this._needMoveForGravity = value;\n }\n /**\n * When true, gravity is applied whether there is user input or not.\n */\n get needMoveForGravity() {\n return this._needMoveForGravity;\n }\n /** @internal */\n _decideIfNeedsToMove() {\n return this._needMoveForGravity || Math.abs(this.cameraDirection.x) > 0 || Math.abs(this.cameraDirection.y) > 0 || Math.abs(this.cameraDirection.z) > 0;\n }\n /** @internal */\n _updatePosition() {\n if (this.checkCollisions && this.getScene().collisionsEnabled) {\n this._collideWithWorld(this.cameraDirection);\n } else {\n super._updatePosition();\n }\n }\n /**\n * Destroy the camera and release the current resources hold by it.\n */\n dispose() {\n this.inputs.clear();\n super.dispose();\n }\n /**\n * Gets the current object class name.\n * @returns the class name\n */\n getClassName() {\n return \"FreeCamera\";\n }\n}\n__decorate([serializeAsVector3()], FreeCamera.prototype, \"ellipsoid\", void 0);\n__decorate([serializeAsVector3()], FreeCamera.prototype, \"ellipsoidOffset\", void 0);\n__decorate([serialize()], FreeCamera.prototype, \"checkCollisions\", void 0);\n__decorate([serialize()], FreeCamera.prototype, \"applyGravity\", void 0);\n// Register Class Name\nRegisterClass(\"BABYLON.FreeCamera\", FreeCamera);","map":{"version":3,"names":["__decorate","serializeAsVector3","serialize","Vector3","Vector2","TargetCamera","FreeCameraInputsManager","Tools","RegisterClass","AbstractEngine","FreeCamera","angularSensibility","mouse","inputs","attached","value","keysUp","keyboard","keysUpward","keysDown","keysDownward","keysLeft","keysRight","keysRotateLeft","keysRotateRight","keysRotateUp","keysRotateDown","constructor","name","position","scene","setActiveOnSceneIfNoneActive","ellipsoid","ellipsoidOffset","checkCollisions","applyGravity","_needMoveForGravity","_oldPosition","Zero","_diffPosition","_newPosition","_collisionMask","_onCollisionPositionChange","collisionId","newPosition","collidedMesh","copyFrom","subtractToRef","length","CollisionsEpsilon","addToRef","_deferredPositionUpdate","_deferOnly","_deferredUpdated","onCollide","addKeyboard","addMouse","attachControl","ignored","noPreventDefault","BackCompatCameraNoPreventDefault","arguments","attachElement","detachControl","detachElement","cameraDirection","cameraRotation","collisionMask","mask","isNaN","_collideWithWorld","displacement","globalPosition","parent","TransformCoordinates","getWorldMatrix","subtractFromFloatsToRef","y","addInPlace","coordinator","getScene","collisionCoordinator","_collider","createCollider","_radius","actualDisplacement","add","gravity","getNewPosition","uniqueId","_checkInputs","_localDirection","_transformedDirection","checkInputs","needMoveForGravity","_decideIfNeedsToMove","Math","abs","x","z","_updatePosition","collisionsEnabled","dispose","clear","getClassName","prototype"],"sources":["F:/workspace/202226701027/huinongbao-app/node_modules/@babylonjs/core/Cameras/freeCamera.js"],"sourcesContent":["import { __decorate } from \"../tslib.es6.js\";\nimport { serializeAsVector3, serialize } from \"../Misc/decorators.js\";\nimport { Vector3, Vector2 } from \"../Maths/math.vector.js\";\nimport { TargetCamera } from \"./targetCamera.js\";\nimport { FreeCameraInputsManager } from \"./freeCameraInputsManager.js\";\nimport { Tools } from \"../Misc/tools.js\";\nimport { RegisterClass } from \"../Misc/typeStore.js\";\nimport { AbstractEngine } from \"../Engines/abstractEngine.js\";\n/**\n * This represents a free type of camera. It can be useful in First Person Shooter game for instance.\n * Please consider using the new UniversalCamera instead as it adds more functionality like the gamepad.\n * @see https://doc.babylonjs.com/features/featuresDeepDive/cameras/camera_introduction#universal-camera\n */\nexport class FreeCamera extends TargetCamera {\n /**\n * Gets the input sensibility for a mouse input. (default is 2000.0)\n * Higher values reduce sensitivity.\n */\n get angularSensibility() {\n const mouse = this.inputs.attached[\"mouse\"];\n if (mouse) {\n return mouse.angularSensibility;\n }\n return 0;\n }\n /**\n * Sets the input sensibility for a mouse input. (default is 2000.0)\n * Higher values reduce sensitivity.\n */\n set angularSensibility(value) {\n const mouse = this.inputs.attached[\"mouse\"];\n if (mouse) {\n mouse.angularSensibility = value;\n }\n }\n /**\n * Gets or Set the list of keyboard keys used to control the forward move of the camera.\n */\n get keysUp() {\n const keyboard = this.inputs.attached[\"keyboard\"];\n if (keyboard) {\n return keyboard.keysUp;\n }\n return [];\n }\n set keysUp(value) {\n const keyboard = this.inputs.attached[\"keyboard\"];\n if (keyboard) {\n keyboard.keysUp = value;\n }\n }\n /**\n * Gets or Set the list of keyboard keys used to control the upward move of the camera.\n */\n get keysUpward() {\n const keyboard = this.inputs.attached[\"keyboard\"];\n if (keyboard) {\n return keyboard.keysUpward;\n }\n return [];\n }\n set keysUpward(value) {\n const keyboard = this.inputs.attached[\"keyboard\"];\n if (keyboard) {\n keyboard.keysUpward = value;\n }\n }\n /**\n * Gets or Set the list of keyboard keys used to control the backward move of the camera.\n */\n get keysDown() {\n const keyboard = this.inputs.attached[\"keyboard\"];\n if (keyboard) {\n return keyboard.keysDown;\n }\n return [];\n }\n set keysDown(value) {\n const keyboard = this.inputs.attached[\"keyboard\"];\n if (keyboard) {\n keyboard.keysDown = value;\n }\n }\n /**\n * Gets or Set the list of keyboard keys used to control the downward move of the camera.\n */\n get keysDownward() {\n const keyboard = this.inputs.attached[\"keyboard\"];\n if (keyboard) {\n return keyboard.keysDownward;\n }\n return [];\n }\n set keysDownward(value) {\n const keyboard = this.inputs.attached[\"keyboard\"];\n if (keyboard) {\n keyboard.keysDownward = value;\n }\n }\n /**\n * Gets or Set the list of keyboard keys used to control the left strafe move of the camera.\n */\n get keysLeft() {\n const keyboard = this.inputs.attached[\"keyboard\"];\n if (keyboard) {\n return keyboard.keysLeft;\n }\n return [];\n }\n set keysLeft(value) {\n const keyboard = this.inputs.attached[\"keyboard\"];\n if (keyboard) {\n keyboard.keysLeft = value;\n }\n }\n /**\n * Gets or Set the list of keyboard keys used to control the right strafe move of the camera.\n */\n get keysRight() {\n const keyboard = this.inputs.attached[\"keyboard\"];\n if (keyboard) {\n return keyboard.keysRight;\n }\n return [];\n }\n set keysRight(value) {\n const keyboard = this.inputs.attached[\"keyboard\"];\n if (keyboard) {\n keyboard.keysRight = value;\n }\n }\n /**\n * Gets or Set the list of keyboard keys used to control the left rotation move of the camera.\n */\n get keysRotateLeft() {\n const keyboard = this.inputs.attached[\"keyboard\"];\n if (keyboard) {\n return keyboard.keysRotateLeft;\n }\n return [];\n }\n set keysRotateLeft(value) {\n const keyboard = this.inputs.attached[\"keyboard\"];\n if (keyboard) {\n keyboard.keysRotateLeft = value;\n }\n }\n /**\n * Gets or Set the list of keyboard keys used to control the right rotation move of the camera.\n */\n get keysRotateRight() {\n const keyboard = this.inputs.attached[\"keyboard\"];\n if (keyboard) {\n return keyboard.keysRotateRight;\n }\n return [];\n }\n set keysRotateRight(value) {\n const keyboard = this.inputs.attached[\"keyboard\"];\n if (keyboard) {\n keyboard.keysRotateRight = value;\n }\n }\n /**\n * Gets or Set the list of keyboard keys used to control the up rotation move of the camera.\n */\n get keysRotateUp() {\n const keyboard = this.inputs.attached[\"keyboard\"];\n if (keyboard) {\n return keyboard.keysRotateUp;\n }\n return [];\n }\n set keysRotateUp(value) {\n const keyboard = this.inputs.attached[\"keyboard\"];\n if (keyboard) {\n keyboard.keysRotateUp = value;\n }\n }\n /**\n * Gets or Set the list of keyboard keys used to control the down rotation move of the camera.\n */\n get keysRotateDown() {\n const keyboard = this.inputs.attached[\"keyboard\"];\n if (keyboard) {\n return keyboard.keysRotateDown;\n }\n return [];\n }\n set keysRotateDown(value) {\n const keyboard = this.inputs.attached[\"keyboard\"];\n if (keyboard) {\n keyboard.keysRotateDown = value;\n }\n }\n /**\n * Instantiates a Free Camera.\n * This represents a free type of camera. It can be useful in First Person Shooter game for instance.\n * Please consider using the new UniversalCamera instead as it adds more functionality like touch to this camera.\n * @see https://doc.babylonjs.com/features/featuresDeepDive/cameras/camera_introduction#universal-camera\n * @param name Define the name of the camera in the scene\n * @param position Define the start position of the camera in the scene\n * @param scene Define the scene the camera belongs to\n * @param setActiveOnSceneIfNoneActive Defines whether the camera should be marked as active if not other active cameras have been defined\n */\n constructor(name, position, scene, setActiveOnSceneIfNoneActive = true) {\n super(name, position, scene, setActiveOnSceneIfNoneActive);\n /**\n * Define the collision ellipsoid of the camera.\n * This is helpful to simulate a camera body like the player body around the camera\n * @see https://doc.babylonjs.com/features/featuresDeepDive/cameras/camera_collisions#arcrotatecamera\n */\n this.ellipsoid = new Vector3(0.5, 1, 0.5);\n /**\n * Define an offset for the position of the ellipsoid around the camera.\n * This can be helpful to determine the center of the body near the gravity center of the body\n * instead of its head.\n */\n this.ellipsoidOffset = new Vector3(0, 0, 0);\n /**\n * Enable or disable collisions of the camera with the rest of the scene objects.\n */\n this.checkCollisions = false;\n /**\n * Enable or disable gravity on the camera.\n */\n this.applyGravity = false;\n this._needMoveForGravity = false;\n this._oldPosition = Vector3.Zero();\n this._diffPosition = Vector3.Zero();\n this._newPosition = Vector3.Zero();\n // Collisions\n this._collisionMask = -1;\n this._onCollisionPositionChange = (collisionId, newPosition, collidedMesh = null) => {\n this._newPosition.copyFrom(newPosition);\n this._newPosition.subtractToRef(this._oldPosition, this._diffPosition);\n if (this._diffPosition.length() > AbstractEngine.CollisionsEpsilon) {\n this.position.addToRef(this._diffPosition, this._deferredPositionUpdate);\n if (!this._deferOnly) {\n this.position.copyFrom(this._deferredPositionUpdate);\n }\n else {\n this._deferredUpdated = true;\n }\n // call onCollide, if defined. Note that in case of deferred update, the actual position change might happen in the next frame.\n if (this.onCollide && collidedMesh) {\n this.onCollide(collidedMesh);\n }\n }\n };\n this.inputs = new FreeCameraInputsManager(this);\n this.inputs.addKeyboard().addMouse();\n }\n /**\n * Attached controls to the current camera.\n * @param ignored defines an ignored parameter kept for backward compatibility.\n * @param noPreventDefault Defines whether event caught by the controls should call preventdefault() (https://developer.mozilla.org/en-US/docs/Web/API/Event/preventDefault)\n */\n attachControl(ignored, noPreventDefault) {\n // eslint-disable-next-line prefer-rest-params\n noPreventDefault = Tools.BackCompatCameraNoPreventDefault(arguments);\n this.inputs.attachElement(noPreventDefault);\n }\n /**\n * Detach the current controls from the specified dom element.\n */\n detachControl() {\n this.inputs.detachElement();\n this.cameraDirection = new Vector3(0, 0, 0);\n this.cameraRotation = new Vector2(0, 0);\n }\n /**\n * Define a collision mask to limit the list of object the camera can collide with\n */\n get collisionMask() {\n return this._collisionMask;\n }\n set collisionMask(mask) {\n this._collisionMask = !isNaN(mask) ? mask : -1;\n }\n /**\n * @internal\n */\n _collideWithWorld(displacement) {\n let globalPosition;\n if (this.parent) {\n globalPosition = Vector3.TransformCoordinates(this.position, this.parent.getWorldMatrix());\n }\n else {\n globalPosition = this.position;\n }\n globalPosition.subtractFromFloatsToRef(0, this.ellipsoid.y, 0, this._oldPosition);\n this._oldPosition.addInPlace(this.ellipsoidOffset);\n const coordinator = this.getScene().collisionCoordinator;\n if (!this._collider) {\n this._collider = coordinator.createCollider();\n }\n this._collider._radius = this.ellipsoid;\n this._collider.collisionMask = this._collisionMask;\n //no need for clone, as long as gravity is not on.\n let actualDisplacement = displacement;\n //add gravity to the direction to prevent the dual-collision checking\n if (this.applyGravity) {\n //this prevents mending with cameraDirection, a global variable of the free camera class.\n actualDisplacement = displacement.add(this.getScene().gravity);\n }\n coordinator.getNewPosition(this._oldPosition, actualDisplacement, this._collider, 3, null, this._onCollisionPositionChange, this.uniqueId);\n }\n /** @internal */\n _checkInputs() {\n if (!this._localDirection) {\n this._localDirection = Vector3.Zero();\n this._transformedDirection = Vector3.Zero();\n }\n this.inputs.checkInputs();\n super._checkInputs();\n }\n /**\n * Enable movement without a user input. This allows gravity to always be applied.\n */\n set needMoveForGravity(value) {\n this._needMoveForGravity = value;\n }\n /**\n * When true, gravity is applied whether there is user input or not.\n */\n get needMoveForGravity() {\n return this._needMoveForGravity;\n }\n /** @internal */\n _decideIfNeedsToMove() {\n return this._needMoveForGravity || Math.abs(this.cameraDirection.x) > 0 || Math.abs(this.cameraDirection.y) > 0 || Math.abs(this.cameraDirection.z) > 0;\n }\n /** @internal */\n _updatePosition() {\n if (this.checkCollisions && this.getScene().collisionsEnabled) {\n this._collideWithWorld(this.cameraDirection);\n }\n else {\n super._updatePosition();\n }\n }\n /**\n * Destroy the camera and release the current resources hold by it.\n */\n dispose() {\n this.inputs.clear();\n super.dispose();\n }\n /**\n * Gets the current object class name.\n * @returns the class name\n */\n getClassName() {\n return \"FreeCamera\";\n }\n}\n__decorate([\n serializeAsVector3()\n], FreeCamera.prototype, \"ellipsoid\", void 0);\n__decorate([\n serializeAsVector3()\n], FreeCamera.prototype, \"ellipsoidOffset\", void 0);\n__decorate([\n serialize()\n], FreeCamera.prototype, \"checkCollisions\", void 0);\n__decorate([\n serialize()\n], FreeCamera.prototype, \"applyGravity\", void 0);\n// Register Class Name\nRegisterClass(\"BABYLON.FreeCamera\", FreeCamera);\n"],"mappings":"AAAA,SAASA,UAAU,QAAQ,iBAAiB;AAC5C,SAASC,kBAAkB,EAAEC,SAAS,QAAQ,uBAAuB;AACrE,SAASC,OAAO,EAAEC,OAAO,QAAQ,yBAAyB;AAC1D,SAASC,YAAY,QAAQ,mBAAmB;AAChD,SAASC,uBAAuB,QAAQ,8BAA8B;AACtE,SAASC,KAAK,QAAQ,kBAAkB;AACxC,SAASC,aAAa,QAAQ,sBAAsB;AACpD,SAASC,cAAc,QAAQ,8BAA8B;AAC7D;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,UAAU,SAASL,YAAY,CAAC;EACzC;AACJ;AACA;AACA;EACI,IAAIM,kBAAkBA,CAAA,EAAG;IACrB,MAAMC,KAAK,GAAG,IAAI,CAACC,MAAM,CAACC,QAAQ,CAAC,OAAO,CAAC;IAC3C,IAAIF,KAAK,EAAE;MACP,OAAOA,KAAK,CAACD,kBAAkB;IACnC;IACA,OAAO,CAAC;EACZ;EACA;AACJ;AACA;AACA;EACI,IAAIA,kBAAkBA,CAACI,KAAK,EAAE;IAC1B,MAAMH,KAAK,GAAG,IAAI,CAACC,MAAM,CAACC,QAAQ,CAAC,OAAO,CAAC;IAC3C,IAAIF,KAAK,EAAE;MACPA,KAAK,CAACD,kBAAkB,GAAGI,KAAK;IACpC;EACJ;EACA;AACJ;AACA;EACI,IAAIC,MAAMA,CAAA,EAAG;IACT,MAAMC,QAAQ,GAAG,IAAI,CAACJ,MAAM,CAACC,QAAQ,CAAC,UAAU,CAAC;IACjD,IAAIG,QAAQ,EAAE;MACV,OAAOA,QAAQ,CAACD,MAAM;IAC1B;IACA,OAAO,EAAE;EACb;EACA,IAAIA,MAAMA,CAACD,KAAK,EAAE;IACd,MAAME,QAAQ,GAAG,IAAI,CAACJ,MAAM,CAACC,QAAQ,CAAC,UAAU,CAAC;IACjD,IAAIG,QAAQ,EAAE;MACVA,QAAQ,CAACD,MAAM,GAAGD,KAAK;IAC3B;EACJ;EACA;AACJ;AACA;EACI,IAAIG,UAAUA,CAAA,EAAG;IACb,MAAMD,QAAQ,GAAG,IAAI,CAACJ,MAAM,CAACC,QAAQ,CAAC,UAAU,CAAC;IACjD,IAAIG,QAAQ,EAAE;MACV,OAAOA,QAAQ,CAACC,UAAU;IAC9B;IACA,OAAO,EAAE;EACb;EACA,IAAIA,UAAUA,CAACH,KAAK,EAAE;IAClB,MAAME,QAAQ,GAAG,IAAI,CAACJ,MAAM,CAACC,QAAQ,CAAC,UAAU,CAAC;IACjD,IAAIG,QAAQ,EAAE;MACVA,QAAQ,CAACC,UAAU,GAAGH,KAAK;IAC/B;EACJ;EACA;AACJ;AACA;EACI,IAAII,QAAQA,CAAA,EAAG;IACX,MAAMF,QAAQ,GAAG,IAAI,CAACJ,MAAM,CAACC,QAAQ,CAAC,UAAU,CAAC;IACjD,IAAIG,QAAQ,EAAE;MACV,OAAOA,QAAQ,CAACE,QAAQ;IAC5B;IACA,OAAO,EAAE;EACb;EACA,IAAIA,QAAQA,CAACJ,KAAK,EAAE;IAChB,MAAME,QAAQ,GAAG,IAAI,CAACJ,MAAM,CAACC,QAAQ,CAAC,UAAU,CAAC;IACjD,IAAIG,QAAQ,EAAE;MACVA,QAAQ,CAACE,QAAQ,GAAGJ,KAAK;IAC7B;EACJ;EACA;AACJ;AACA;EACI,IAAIK,YAAYA,CAAA,EAAG;IACf,MAAMH,QAAQ,GAAG,IAAI,CAACJ,MAAM,CAACC,QAAQ,CAAC,UAAU,CAAC;IACjD,IAAIG,QAAQ,EAAE;MACV,OAAOA,QAAQ,CAACG,YAAY;IAChC;IACA,OAAO,EAAE;EACb;EACA,IAAIA,YAAYA,CAACL,KAAK,EAAE;IACpB,MAAME,QAAQ,GAAG,IAAI,CAACJ,MAAM,CAACC,QAAQ,CAAC,UAAU,CAAC;IACjD,IAAIG,QAAQ,EAAE;MACVA,QAAQ,CAACG,YAAY,GAAGL,KAAK;IACjC;EACJ;EACA;AACJ;AACA;EACI,IAAIM,QAAQA,CAAA,EAAG;IACX,MAAMJ,QAAQ,GAAG,IAAI,CAACJ,MAAM,CAACC,QAAQ,CAAC,UAAU,CAAC;IACjD,IAAIG,QAAQ,EAAE;MACV,OAAOA,QAAQ,CAACI,QAAQ;IAC5B;IACA,OAAO,EAAE;EACb;EACA,IAAIA,QAAQA,CAACN,KAAK,EAAE;IAChB,MAAME,QAAQ,GAAG,IAAI,CAACJ,MAAM,CAACC,QAAQ,CAAC,UAAU,CAAC;IACjD,IAAIG,QAAQ,EAAE;MACVA,QAAQ,CAACI,QAAQ,GAAGN,KAAK;IAC7B;EACJ;EACA;AACJ;AACA;EACI,IAAIO,SAASA,CAAA,EAAG;IACZ,MAAML,QAAQ,GAAG,IAAI,CAACJ,MAAM,CAACC,QAAQ,CAAC,UAAU,CAAC;IACjD,IAAIG,QAAQ,EAAE;MACV,OAAOA,QAAQ,CAACK,SAAS;IAC7B;IACA,OAAO,EAAE;EACb;EACA,IAAIA,SAASA,CAACP,KAAK,EAAE;IACjB,MAAME,QAAQ,GAAG,IAAI,CAACJ,MAAM,CAACC,QAAQ,CAAC,UAAU,CAAC;IACjD,IAAIG,QAAQ,EAAE;MACVA,QAAQ,CAACK,SAAS,GAAGP,KAAK;IAC9B;EACJ;EACA;AACJ;AACA;EACI,IAAIQ,cAAcA,CAAA,EAAG;IACjB,MAAMN,QAAQ,GAAG,IAAI,CAACJ,MAAM,CAACC,QAAQ,CAAC,UAAU,CAAC;IACjD,IAAIG,QAAQ,EAAE;MACV,OAAOA,QAAQ,CAACM,cAAc;IAClC;IACA,OAAO,EAAE;EACb;EACA,IAAIA,cAAcA,CAACR,KAAK,EAAE;IACtB,MAAME,QAAQ,GAAG,IAAI,CAACJ,MAAM,CAACC,QAAQ,CAAC,UAAU,CAAC;IACjD,IAAIG,QAAQ,EAAE;MACVA,QAAQ,CAACM,cAAc,GAAGR,KAAK;IACnC;EACJ;EACA;AACJ;AACA;EACI,IAAIS,eAAeA,CAAA,EAAG;IAClB,MAAMP,QAAQ,GAAG,IAAI,CAACJ,MAAM,CAACC,QAAQ,CAAC,UAAU,CAAC;IACjD,IAAIG,QAAQ,EAAE;MACV,OAAOA,QAAQ,CAACO,eAAe;IACnC;IACA,OAAO,EAAE;EACb;EACA,IAAIA,eAAeA,CAACT,KAAK,EAAE;IACvB,MAAME,QAAQ,GAAG,IAAI,CAACJ,MAAM,CAACC,QAAQ,CAAC,UAAU,CAAC;IACjD,IAAIG,QAAQ,EAAE;MACVA,QAAQ,CAACO,eAAe,GAAGT,KAAK;IACpC;EACJ;EACA;AACJ;AACA;EACI,IAAIU,YAAYA,CAAA,EAAG;IACf,MAAMR,QAAQ,GAAG,IAAI,CAACJ,MAAM,CAACC,QAAQ,CAAC,UAAU,CAAC;IACjD,IAAIG,QAAQ,EAAE;MACV,OAAOA,QAAQ,CAACQ,YAAY;IAChC;IACA,OAAO,EAAE;EACb;EACA,IAAIA,YAAYA,CAACV,KAAK,EAAE;IACpB,MAAME,QAAQ,GAAG,IAAI,CAACJ,MAAM,CAACC,QAAQ,CAAC,UAAU,CAAC;IACjD,IAAIG,QAAQ,EAAE;MACVA,QAAQ,CAACQ,YAAY,GAAGV,KAAK;IACjC;EACJ;EACA;AACJ;AACA;EACI,IAAIW,cAAcA,CAAA,EAAG;IACjB,MAAMT,QAAQ,GAAG,IAAI,CAACJ,MAAM,CAACC,QAAQ,CAAC,UAAU,CAAC;IACjD,IAAIG,QAAQ,EAAE;MACV,OAAOA,QAAQ,CAACS,cAAc;IAClC;IACA,OAAO,EAAE;EACb;EACA,IAAIA,cAAcA,CAACX,KAAK,EAAE;IACtB,MAAME,QAAQ,GAAG,IAAI,CAACJ,MAAM,CAACC,QAAQ,CAAC,UAAU,CAAC;IACjD,IAAIG,QAAQ,EAAE;MACVA,QAAQ,CAACS,cAAc,GAAGX,KAAK;IACnC;EACJ;EACA;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACIY,WAAWA,CAACC,IAAI,EAAEC,QAAQ,EAAEC,KAAK,EAAEC,4BAA4B,GAAG,IAAI,EAAE;IACpE,KAAK,CAACH,IAAI,EAAEC,QAAQ,EAAEC,KAAK,EAAEC,4BAA4B,CAAC;IAC1D;AACR;AACA;AACA;AACA;IACQ,IAAI,CAACC,SAAS,GAAG,IAAI7B,OAAO,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IACzC;AACR;AACA;AACA;AACA;IACQ,IAAI,CAAC8B,eAAe,GAAG,IAAI9B,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAC3C;AACR;AACA;IACQ,IAAI,CAAC+B,eAAe,GAAG,KAAK;IAC5B;AACR;AACA;IACQ,IAAI,CAACC,YAAY,GAAG,KAAK;IACzB,IAAI,CAACC,mBAAmB,GAAG,KAAK;IAChC,IAAI,CAACC,YAAY,GAAGlC,OAAO,CAACmC,IAAI,CAAC,CAAC;IAClC,IAAI,CAACC,aAAa,GAAGpC,OAAO,CAACmC,IAAI,CAAC,CAAC;IACnC,IAAI,CAACE,YAAY,GAAGrC,OAAO,CAACmC,IAAI,CAAC,CAAC;IAClC;IACA,IAAI,CAACG,cAAc,GAAG,CAAC,CAAC;IACxB,IAAI,CAACC,0BAA0B,GAAG,CAACC,WAAW,EAAEC,WAAW,EAAEC,YAAY,GAAG,IAAI,KAAK;MACjF,IAAI,CAACL,YAAY,CAACM,QAAQ,CAACF,WAAW,CAAC;MACvC,IAAI,CAACJ,YAAY,CAACO,aAAa,CAAC,IAAI,CAACV,YAAY,EAAE,IAAI,CAACE,aAAa,CAAC;MACtE,IAAI,IAAI,CAACA,aAAa,CAACS,MAAM,CAAC,CAAC,GAAGvC,cAAc,CAACwC,iBAAiB,EAAE;QAChE,IAAI,CAACpB,QAAQ,CAACqB,QAAQ,CAAC,IAAI,CAACX,aAAa,EAAE,IAAI,CAACY,uBAAuB,CAAC;QACxE,IAAI,CAAC,IAAI,CAACC,UAAU,EAAE;UAClB,IAAI,CAACvB,QAAQ,CAACiB,QAAQ,CAAC,IAAI,CAACK,uBAAuB,CAAC;QACxD,CAAC,MACI;UACD,IAAI,CAACE,gBAAgB,GAAG,IAAI;QAChC;QACA;QACA,IAAI,IAAI,CAACC,SAAS,IAAIT,YAAY,EAAE;UAChC,IAAI,CAACS,SAAS,CAACT,YAAY,CAAC;QAChC;MACJ;IACJ,CAAC;IACD,IAAI,CAAChC,MAAM,GAAG,IAAIP,uBAAuB,CAAC,IAAI,CAAC;IAC/C,IAAI,CAACO,MAAM,CAAC0C,WAAW,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC;EACxC;EACA;AACJ;AACA;AACA;AACA;EACIC,aAAaA,CAACC,OAAO,EAAEC,gBAAgB,EAAE;IACrC;IACAA,gBAAgB,GAAGpD,KAAK,CAACqD,gCAAgC,CAACC,SAAS,CAAC;IACpE,IAAI,CAAChD,MAAM,CAACiD,aAAa,CAACH,gBAAgB,CAAC;EAC/C;EACA;AACJ;AACA;EACII,aAAaA,CAAA,EAAG;IACZ,IAAI,CAAClD,MAAM,CAACmD,aAAa,CAAC,CAAC;IAC3B,IAAI,CAACC,eAAe,GAAG,IAAI9D,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAC3C,IAAI,CAAC+D,cAAc,GAAG,IAAI9D,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;EAC3C;EACA;AACJ;AACA;EACI,IAAI+D,aAAaA,CAAA,EAAG;IAChB,OAAO,IAAI,CAAC1B,cAAc;EAC9B;EACA,IAAI0B,aAAaA,CAACC,IAAI,EAAE;IACpB,IAAI,CAAC3B,cAAc,GAAG,CAAC4B,KAAK,CAACD,IAAI,CAAC,GAAGA,IAAI,GAAG,CAAC,CAAC;EAClD;EACA;AACJ;AACA;EACIE,iBAAiBA,CAACC,YAAY,EAAE;IAC5B,IAAIC,cAAc;IAClB,IAAI,IAAI,CAACC,MAAM,EAAE;MACbD,cAAc,GAAGrE,OAAO,CAACuE,oBAAoB,CAAC,IAAI,CAAC7C,QAAQ,EAAE,IAAI,CAAC4C,MAAM,CAACE,cAAc,CAAC,CAAC,CAAC;IAC9F,CAAC,MACI;MACDH,cAAc,GAAG,IAAI,CAAC3C,QAAQ;IAClC;IACA2C,cAAc,CAACI,uBAAuB,CAAC,CAAC,EAAE,IAAI,CAAC5C,SAAS,CAAC6C,CAAC,EAAE,CAAC,EAAE,IAAI,CAACxC,YAAY,CAAC;IACjF,IAAI,CAACA,YAAY,CAACyC,UAAU,CAAC,IAAI,CAAC7C,eAAe,CAAC;IAClD,MAAM8C,WAAW,GAAG,IAAI,CAACC,QAAQ,CAAC,CAAC,CAACC,oBAAoB;IACxD,IAAI,CAAC,IAAI,CAACC,SAAS,EAAE;MACjB,IAAI,CAACA,SAAS,GAAGH,WAAW,CAACI,cAAc,CAAC,CAAC;IACjD;IACA,IAAI,CAACD,SAAS,CAACE,OAAO,GAAG,IAAI,CAACpD,SAAS;IACvC,IAAI,CAACkD,SAAS,CAACf,aAAa,GAAG,IAAI,CAAC1B,cAAc;IAClD;IACA,IAAI4C,kBAAkB,GAAGd,YAAY;IACrC;IACA,IAAI,IAAI,CAACpC,YAAY,EAAE;MACnB;MACAkD,kBAAkB,GAAGd,YAAY,CAACe,GAAG,CAAC,IAAI,CAACN,QAAQ,CAAC,CAAC,CAACO,OAAO,CAAC;IAClE;IACAR,WAAW,CAACS,cAAc,CAAC,IAAI,CAACnD,YAAY,EAAEgD,kBAAkB,EAAE,IAAI,CAACH,SAAS,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,CAACxC,0BAA0B,EAAE,IAAI,CAAC+C,QAAQ,CAAC;EAC9I;EACA;EACAC,YAAYA,CAAA,EAAG;IACX,IAAI,CAAC,IAAI,CAACC,eAAe,EAAE;MACvB,IAAI,CAACA,eAAe,GAAGxF,OAAO,CAACmC,IAAI,CAAC,CAAC;MACrC,IAAI,CAACsD,qBAAqB,GAAGzF,OAAO,CAACmC,IAAI,CAAC,CAAC;IAC/C;IACA,IAAI,CAACzB,MAAM,CAACgF,WAAW,CAAC,CAAC;IACzB,KAAK,CAACH,YAAY,CAAC,CAAC;EACxB;EACA;AACJ;AACA;EACI,IAAII,kBAAkBA,CAAC/E,KAAK,EAAE;IAC1B,IAAI,CAACqB,mBAAmB,GAAGrB,KAAK;EACpC;EACA;AACJ;AACA;EACI,IAAI+E,kBAAkBA,CAAA,EAAG;IACrB,OAAO,IAAI,CAAC1D,mBAAmB;EACnC;EACA;EACA2D,oBAAoBA,CAAA,EAAG;IACnB,OAAO,IAAI,CAAC3D,mBAAmB,IAAI4D,IAAI,CAACC,GAAG,CAAC,IAAI,CAAChC,eAAe,CAACiC,CAAC,CAAC,GAAG,CAAC,IAAIF,IAAI,CAACC,GAAG,CAAC,IAAI,CAAChC,eAAe,CAACY,CAAC,CAAC,GAAG,CAAC,IAAImB,IAAI,CAACC,GAAG,CAAC,IAAI,CAAChC,eAAe,CAACkC,CAAC,CAAC,GAAG,CAAC;EAC3J;EACA;EACAC,eAAeA,CAAA,EAAG;IACd,IAAI,IAAI,CAAClE,eAAe,IAAI,IAAI,CAAC8C,QAAQ,CAAC,CAAC,CAACqB,iBAAiB,EAAE;MAC3D,IAAI,CAAC/B,iBAAiB,CAAC,IAAI,CAACL,eAAe,CAAC;IAChD,CAAC,MACI;MACD,KAAK,CAACmC,eAAe,CAAC,CAAC;IAC3B;EACJ;EACA;AACJ;AACA;EACIE,OAAOA,CAAA,EAAG;IACN,IAAI,CAACzF,MAAM,CAAC0F,KAAK,CAAC,CAAC;IACnB,KAAK,CAACD,OAAO,CAAC,CAAC;EACnB;EACA;AACJ;AACA;AACA;EACIE,YAAYA,CAAA,EAAG;IACX,OAAO,YAAY;EACvB;AACJ;AACAxG,UAAU,CAAC,CACPC,kBAAkB,CAAC,CAAC,CACvB,EAAES,UAAU,CAAC+F,SAAS,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;AAC7CzG,UAAU,CAAC,CACPC,kBAAkB,CAAC,CAAC,CACvB,EAAES,UAAU,CAAC+F,SAAS,EAAE,iBAAiB,EAAE,KAAK,CAAC,CAAC;AACnDzG,UAAU,CAAC,CACPE,SAAS,CAAC,CAAC,CACd,EAAEQ,UAAU,CAAC+F,SAAS,EAAE,iBAAiB,EAAE,KAAK,CAAC,CAAC;AACnDzG,UAAU,CAAC,CACPE,SAAS,CAAC,CAAC,CACd,EAAEQ,UAAU,CAAC+F,SAAS,EAAE,cAAc,EAAE,KAAK,CAAC,CAAC;AAChD;AACAjG,aAAa,CAAC,oBAAoB,EAAEE,UAAU,CAAC","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}