@babylonjs/core 5.0.0-alpha.57 → 5.0.0-alpha.58
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/Cameras/Inputs/BaseCameraPointersInput.d.ts +0 -1
- package/Cameras/Inputs/BaseCameraPointersInput.js +5 -5
- package/Cameras/Inputs/BaseCameraPointersInput.js.map +1 -1
- package/Cameras/Inputs/freeCameraMouseInput.d.ts +0 -1
- package/Cameras/Inputs/freeCameraMouseInput.js +27 -28
- package/Cameras/Inputs/freeCameraMouseInput.js.map +1 -1
- package/Cameras/camera.d.ts +4 -0
- package/Cameras/camera.js +2 -0
- package/Cameras/camera.js.map +1 -1
- package/Culling/boundingBox.d.ts +7 -1
- package/Culling/boundingBox.js +4 -0
- package/Culling/boundingBox.js.map +1 -1
- package/DeviceInput/Helpers/eventFactory.js +1 -2
- package/DeviceInput/Helpers/eventFactory.js.map +1 -1
- package/DeviceInput/Implementations/webDeviceInputSystem.d.ts +1 -0
- package/DeviceInput/Implementations/webDeviceInputSystem.js +5 -12
- package/DeviceInput/Implementations/webDeviceInputSystem.js.map +1 -1
- package/DeviceInput/InputDevices/deviceEnums.d.ts +1 -3
- package/DeviceInput/InputDevices/deviceEnums.js +0 -2
- package/DeviceInput/InputDevices/deviceEnums.js.map +1 -1
- package/Engines/IDrawContext.d.ts +3 -0
- package/Engines/IDrawContext.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.alpha.js +1 -1
- package/Engines/WebGPU/Extensions/engine.alpha.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.storageBuffer.js +1 -1
- package/Engines/WebGPU/Extensions/engine.storageBuffer.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.uniformBuffer.js +1 -1
- package/Engines/WebGPU/Extensions/engine.uniformBuffer.js.map +1 -1
- package/Engines/WebGPU/webgpuBufferManager.d.ts +1 -0
- package/Engines/WebGPU/webgpuBufferManager.js +3 -0
- package/Engines/WebGPU/webgpuBufferManager.js.map +1 -1
- package/Engines/WebGPU/webgpuCacheBindGroups.d.ts +3 -2
- package/Engines/WebGPU/webgpuCacheBindGroups.js +15 -14
- package/Engines/WebGPU/webgpuCacheBindGroups.js.map +1 -1
- package/Engines/WebGPU/webgpuCacheRenderPipelineTree.d.ts +2 -0
- package/Engines/WebGPU/webgpuCacheRenderPipelineTree.js +17 -0
- package/Engines/WebGPU/webgpuCacheRenderPipelineTree.js.map +1 -1
- package/Engines/WebGPU/webgpuDrawContext.d.ts +21 -2
- package/Engines/WebGPU/webgpuDrawContext.js +67 -1
- package/Engines/WebGPU/webgpuDrawContext.js.map +1 -1
- package/Engines/WebGPU/webgpuMaterialContext.d.ts +0 -6
- package/Engines/WebGPU/webgpuMaterialContext.js +0 -6
- package/Engines/WebGPU/webgpuMaterialContext.js.map +1 -1
- package/Engines/WebGPU/webgpuShaderProcessor.d.ts +1 -0
- package/Engines/WebGPU/webgpuShaderProcessor.js +2 -1
- package/Engines/WebGPU/webgpuShaderProcessor.js.map +1 -1
- package/Engines/WebGPU/webgpuTextureHelper.js +1 -1
- package/Engines/WebGPU/webgpuTextureHelper.js.map +1 -1
- package/Engines/constants.d.ts +1 -7
- package/Engines/constants.js +1 -7
- package/Engines/constants.js.map +1 -1
- package/Engines/engine.d.ts +37 -2
- package/Engines/engine.js +68 -0
- package/Engines/engine.js.map +1 -1
- package/Engines/engineFeatures.d.ts +2 -0
- package/Engines/engineFeatures.js.map +1 -1
- package/Engines/nativeEngine.js +1 -0
- package/Engines/nativeEngine.js.map +1 -1
- package/Engines/nullEngine.js +1 -0
- package/Engines/nullEngine.js.map +1 -1
- package/Engines/thinEngine.d.ts +4 -0
- package/Engines/thinEngine.js +3 -2
- package/Engines/thinEngine.js.map +1 -1
- package/Engines/webgpuEngine.d.ts +14 -6
- package/Engines/webgpuEngine.js +107 -57
- package/Engines/webgpuEngine.js.map +1 -1
- package/Inputs/scene.inputManager.js +2 -3
- package/Inputs/scene.inputManager.js.map +1 -1
- package/Layers/effectLayer.d.ts +0 -2
- package/Layers/effectLayer.js +12 -11
- package/Layers/effectLayer.js.map +1 -1
- package/Layers/effectLayerSceneComponent.js +5 -0
- package/Layers/effectLayerSceneComponent.js.map +1 -1
- package/Layers/glowLayer.js +2 -0
- package/Layers/glowLayer.js.map +1 -1
- package/Layers/highlightLayer.js +2 -0
- package/Layers/highlightLayer.js.map +1 -1
- package/LensFlares/lensFlare.d.ts +3 -0
- package/LensFlares/lensFlare.js +5 -0
- package/LensFlares/lensFlare.js.map +1 -1
- package/LensFlares/lensFlareSystem.d.ts +2 -1
- package/LensFlares/lensFlareSystem.js +15 -12
- package/LensFlares/lensFlareSystem.js.map +1 -1
- package/Lights/Shadows/cascadedShadowGenerator.d.ts +0 -2
- package/Lights/Shadows/cascadedShadowGenerator.js +3 -12
- package/Lights/Shadows/cascadedShadowGenerator.js.map +1 -1
- package/Lights/Shadows/shadowGenerator.d.ts +0 -3
- package/Lights/Shadows/shadowGenerator.js +8 -14
- package/Lights/Shadows/shadowGenerator.js.map +1 -1
- package/Lights/light.js +3 -0
- package/Lights/light.js.map +1 -1
- package/Loading/Plugins/babylonFileLoader.js +3 -0
- package/Loading/Plugins/babylonFileLoader.js.map +1 -1
- package/Materials/Background/backgroundMaterial.js +8 -11
- package/Materials/Background/backgroundMaterial.js.map +1 -1
- package/Materials/Node/Blocks/PBR/reflectionBlock.js +1 -1
- package/Materials/Node/Blocks/PBR/reflectionBlock.js.map +1 -1
- package/Materials/Node/Blocks/cloudBlock.d.ts +4 -0
- package/Materials/Node/Blocks/cloudBlock.js +27 -8
- package/Materials/Node/Blocks/cloudBlock.js.map +1 -1
- package/Materials/Node/Blocks/colorMergerBlock.d.ts +21 -0
- package/Materials/Node/Blocks/colorMergerBlock.js +48 -4
- package/Materials/Node/Blocks/colorMergerBlock.js.map +1 -1
- package/Materials/Node/Blocks/vectorMergerBlock.d.ts +25 -0
- package/Materials/Node/Blocks/vectorMergerBlock.js +93 -23
- package/Materials/Node/Blocks/vectorMergerBlock.js.map +1 -1
- package/Materials/Node/nodeMaterial.js +4 -4
- package/Materials/Node/nodeMaterial.js.map +1 -1
- package/Materials/PBR/pbrBaseMaterial.js +8 -4
- package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
- package/Materials/PBR/pbrClearCoatConfiguration.js +1 -1
- package/Materials/PBR/pbrClearCoatConfiguration.js.map +1 -1
- package/Materials/PBR/pbrSheenConfiguration.js +1 -1
- package/Materials/PBR/pbrSheenConfiguration.js.map +1 -1
- package/Materials/PBR/pbrSubSurfaceConfiguration.js +1 -1
- package/Materials/PBR/pbrSubSurfaceConfiguration.js.map +1 -1
- package/Materials/Textures/baseTexture.d.ts +2 -0
- package/Materials/Textures/baseTexture.js +2 -0
- package/Materials/Textures/baseTexture.js.map +1 -1
- package/Materials/Textures/renderTargetTexture.d.ts +27 -0
- package/Materials/Textures/renderTargetTexture.js +127 -14
- package/Materials/Textures/renderTargetTexture.js.map +1 -1
- package/Materials/Textures/texture.js +11 -4
- package/Materials/Textures/texture.js.map +1 -1
- package/Materials/drawWrapper.d.ts +2 -1
- package/Materials/drawWrapper.js +10 -1
- package/Materials/drawWrapper.js.map +1 -1
- package/Materials/material.d.ts +3 -1
- package/Materials/material.detailMapConfiguration.d.ts +1 -1
- package/Materials/material.detailMapConfiguration.js +2 -2
- package/Materials/material.detailMapConfiguration.js.map +1 -1
- package/Materials/material.js +18 -9
- package/Materials/material.js.map +1 -1
- package/Materials/pushMaterial.js +1 -1
- package/Materials/pushMaterial.js.map +1 -1
- package/Materials/shaderMaterial.d.ts +0 -1
- package/Materials/shaderMaterial.js +3 -4
- package/Materials/shaderMaterial.js.map +1 -1
- package/Materials/shadowDepthWrapper.d.ts +4 -4
- package/Materials/shadowDepthWrapper.js +16 -15
- package/Materials/shadowDepthWrapper.js.map +1 -1
- package/Materials/standardMaterial.js +8 -4
- package/Materials/standardMaterial.js.map +1 -1
- package/Materials/uniformBuffer.d.ts +10 -2
- package/Materials/uniformBuffer.js +17 -11
- package/Materials/uniformBuffer.js.map +1 -1
- package/Meshes/abstractMesh.d.ts +13 -0
- package/Meshes/abstractMesh.js +22 -2
- package/Meshes/abstractMesh.js.map +1 -1
- package/Meshes/linesMesh.js +1 -1
- package/Meshes/linesMesh.js.map +1 -1
- package/Meshes/mesh.js +15 -0
- package/Meshes/mesh.js.map +1 -1
- package/Meshes/subMesh.d.ts +10 -9
- package/Meshes/subMesh.js +44 -43
- package/Meshes/subMesh.js.map +1 -1
- package/Misc/environmentTextureTools.js +1 -0
- package/Misc/environmentTextureTools.js.map +1 -1
- package/Misc/rgbdTextureTools.js +1 -0
- package/Misc/rgbdTextureTools.js.map +1 -1
- package/Misc/sceneSerializer.js +17 -17
- package/Misc/sceneSerializer.js.map +1 -1
- package/Misc/textureTools.js +2 -0
- package/Misc/textureTools.js.map +1 -1
- package/Particles/gpuParticleSystem.d.ts +5 -1
- package/Particles/gpuParticleSystem.js +31 -5
- package/Particles/gpuParticleSystem.js.map +1 -1
- package/Particles/particleSystem.d.ts +5 -1
- package/Particles/particleSystem.js +35 -5
- package/Particles/particleSystem.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/lensRenderingPipeline.js +2 -0
- package/PostProcesses/RenderPipeline/Pipelines/lensRenderingPipeline.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/ssaoRenderingPipeline.js +1 -0
- package/PostProcesses/RenderPipeline/Pipelines/ssaoRenderingPipeline.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/standardRenderingPipeline.js +1 -0
- package/PostProcesses/RenderPipeline/Pipelines/standardRenderingPipeline.js.map +1 -1
- package/PostProcesses/bloomMergePostProcess.js +1 -0
- package/PostProcesses/bloomMergePostProcess.js.map +1 -1
- package/PostProcesses/depthOfFieldBlurPostProcess.js +1 -0
- package/PostProcesses/depthOfFieldBlurPostProcess.js.map +1 -1
- package/PostProcesses/depthOfFieldMergePostProcess.js +1 -0
- package/PostProcesses/depthOfFieldMergePostProcess.js.map +1 -1
- package/PostProcesses/extractHighlightsPostProcess.js +1 -0
- package/PostProcesses/extractHighlightsPostProcess.js.map +1 -1
- package/PostProcesses/postProcess.d.ts +6 -0
- package/PostProcesses/postProcess.js +9 -1
- package/PostProcesses/postProcess.js.map +1 -1
- package/PostProcesses/screenSpaceReflectionPostProcess.js +1 -1
- package/PostProcesses/screenSpaceReflectionPostProcess.js.map +1 -1
- package/PostProcesses/tonemapPostProcess.d.ts +2 -1
- package/PostProcesses/tonemapPostProcess.js +3 -2
- package/PostProcesses/tonemapPostProcess.js.map +1 -1
- package/Rendering/boundingBoxRenderer.d.ts +5 -3
- package/Rendering/boundingBoxRenderer.js +46 -14
- package/Rendering/boundingBoxRenderer.js.map +1 -1
- package/Rendering/depthRenderer.d.ts +9 -2
- package/Rendering/depthRenderer.js +77 -43
- package/Rendering/depthRenderer.js.map +1 -1
- package/Rendering/depthRendererSceneComponent.js +0 -1
- package/Rendering/depthRendererSceneComponent.js.map +1 -1
- package/Rendering/edgesRenderer.d.ts +2 -0
- package/Rendering/edgesRenderer.js +11 -0
- package/Rendering/edgesRenderer.js.map +1 -1
- package/Rendering/geometryBufferRenderer.js +1 -1
- package/Rendering/geometryBufferRenderer.js.map +1 -1
- package/Rendering/outlineRenderer.d.ts +5 -4
- package/Rendering/outlineRenderer.js +24 -19
- package/Rendering/outlineRenderer.js.map +1 -1
- package/Rendering/prePassRenderer.js +2 -1
- package/Rendering/prePassRenderer.js.map +1 -1
- package/Shaders/ShadersInclude/boundingBoxRendererFragmentDeclaration.d.ts +5 -0
- package/Shaders/ShadersInclude/boundingBoxRendererFragmentDeclaration.js +7 -0
- package/Shaders/ShadersInclude/boundingBoxRendererFragmentDeclaration.js.map +1 -0
- package/Shaders/ShadersInclude/boundingBoxRendererUboDeclaration.d.ts +5 -0
- package/Shaders/ShadersInclude/boundingBoxRendererUboDeclaration.js +7 -0
- package/Shaders/ShadersInclude/boundingBoxRendererUboDeclaration.js.map +1 -0
- package/Shaders/ShadersInclude/boundingBoxRendererVertexDeclaration.d.ts +5 -0
- package/Shaders/ShadersInclude/boundingBoxRendererVertexDeclaration.js +7 -0
- package/Shaders/ShadersInclude/boundingBoxRendererVertexDeclaration.js.map +1 -0
- package/Shaders/boundingBoxRenderer.fragment.d.ts +7 -0
- package/Shaders/boundingBoxRenderer.fragment.js +9 -0
- package/Shaders/boundingBoxRenderer.fragment.js.map +1 -0
- package/Shaders/boundingBoxRenderer.vertex.d.ts +7 -0
- package/Shaders/boundingBoxRenderer.vertex.js +9 -0
- package/Shaders/boundingBoxRenderer.vertex.js.map +1 -0
- package/Sprites/spriteManager.d.ts +3 -1
- package/Sprites/spriteManager.js +16 -5
- package/Sprites/spriteManager.js.map +1 -1
- package/Sprites/spriteRenderer.d.ts +1 -0
- package/Sprites/spriteRenderer.js +14 -0
- package/Sprites/spriteRenderer.js.map +1 -1
- package/XR/features/WebXRWalkingLocomotion.js +28 -13
- package/XR/features/WebXRWalkingLocomotion.js.map +1 -1
- package/package.json +16 -1
- package/scene.d.ts +18 -4
- package/scene.js +99 -34
- package/scene.js.map +1 -1
|
@@ -26,7 +26,6 @@ export declare abstract class BaseCameraPointersInput implements ICameraInput<Ca
|
|
|
26
26
|
*/
|
|
27
27
|
protected _buttonsPressed: number;
|
|
28
28
|
private _currentActiveButton;
|
|
29
|
-
private _usingSafari;
|
|
30
29
|
/**
|
|
31
30
|
* Defines the buttons associated with the input to handle camera move.
|
|
32
31
|
*/
|
|
@@ -10,7 +10,6 @@ import { PointerEventTypes } from "../../Events/pointerEvents.js";
|
|
|
10
10
|
var BaseCameraPointersInput = /** @class */ (function () {
|
|
11
11
|
function BaseCameraPointersInput() {
|
|
12
12
|
this._currentActiveButton = -1;
|
|
13
|
-
this._usingSafari = Tools.IsSafari();
|
|
14
13
|
/**
|
|
15
14
|
* Defines the buttons associated with the input to handle camera move.
|
|
16
15
|
*/
|
|
@@ -38,7 +37,6 @@ var BaseCameraPointersInput = /** @class */ (function () {
|
|
|
38
37
|
this._pointerInput = function (p, s) {
|
|
39
38
|
var evt = p.event;
|
|
40
39
|
var isTouch = evt.pointerType === "touch";
|
|
41
|
-
var ignoreContext = isTouch || _this._usingSafari;
|
|
42
40
|
if (engine.isInVRExclusivePointerMode) {
|
|
43
41
|
return;
|
|
44
42
|
}
|
|
@@ -67,7 +65,7 @@ var BaseCameraPointersInput = /** @class */ (function () {
|
|
|
67
65
|
_this.pointA = null;
|
|
68
66
|
_this.pointB = null;
|
|
69
67
|
}
|
|
70
|
-
else if (p.type === PointerEventTypes.POINTERDOWN && srcElement) {
|
|
68
|
+
else if (p.type === PointerEventTypes.POINTERDOWN && srcElement && (_this._currentActiveButton === -1 || isTouch)) {
|
|
71
69
|
try {
|
|
72
70
|
srcElement.setPointerCapture(evt.pointerId);
|
|
73
71
|
}
|
|
@@ -102,9 +100,11 @@ var BaseCameraPointersInput = /** @class */ (function () {
|
|
|
102
100
|
else if (p.type === PointerEventTypes.POINTERDOUBLETAP) {
|
|
103
101
|
_this.onDoubleTap(evt.pointerType);
|
|
104
102
|
}
|
|
105
|
-
else if (srcElement &&
|
|
103
|
+
else if (srcElement && p.type === PointerEventTypes.POINTERUP && (_this._currentActiveButton === evt.button || isTouch)) {
|
|
106
104
|
try {
|
|
107
|
-
|
|
105
|
+
if (evt.buttons === 0) {
|
|
106
|
+
srcElement.releasePointerCapture(evt.pointerId);
|
|
107
|
+
}
|
|
108
108
|
}
|
|
109
109
|
catch (e) {
|
|
110
110
|
//Nothing to do with the error.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseCameraPointersInput.js","sourceRoot":"","sources":["../../../../sourceES6/core/Cameras/Inputs/BaseCameraPointersInput.ts"],"names":[],"mappings":"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","sourcesContent":["import { Nullable } from \"../../types\";\nimport { serialize } from \"../../Misc/decorators\";\nimport { EventState, Observer } from \"../../Misc/observable\";\nimport { Tools } from \"../../Misc/tools\";\nimport { Camera } from \"../../Cameras/camera\";\nimport { ICameraInput } from \"../../Cameras/cameraInputsManager\";\nimport { PointerInfo, PointerEventTypes, PointerTouch } from \"../../Events/pointerEvents\";\nimport { IPointerEvent } from \"../../Events/deviceInputEvents\";\n\n/**\n * Base class for Camera Pointer Inputs.\n * See FollowCameraPointersInput in src/Cameras/Inputs/followCameraPointersInput.ts\n * for example usage.\n */\nexport abstract class BaseCameraPointersInput implements ICameraInput<Camera> {\n /**\n * Defines the camera the input is attached to.\n */\n public abstract camera: Camera;\n\n /**\n * Whether keyboard modifier keys are pressed at time of last mouse event.\n */\n protected _altKey: boolean;\n protected _ctrlKey: boolean;\n protected _metaKey: boolean;\n protected _shiftKey: boolean;\n\n /**\n * Which mouse buttons were pressed at time of last mouse event.\n * https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/buttons\n */\n protected _buttonsPressed: number;\n\n private _currentActiveButton: number = -1;\n private _usingSafari = Tools.IsSafari();\n\n /**\n * Defines the buttons associated with the input to handle camera move.\n */\n @serialize()\n public buttons = [0, 1, 2];\n\n /**\n * Attach the input controls to a specific dom element to get the input from.\n * @param element Defines the element the controls should be listened from\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 public attachControl(noPreventDefault?: boolean): void {\n noPreventDefault = Tools.BackCompatCameraNoPreventDefault(arguments);\n var engine = this.camera.getEngine();\n const element = engine.getInputElement();\n var previousPinchSquaredDistance = 0;\n var previousMultiTouchPanPosition: Nullable<PointerTouch> = null;\n\n this.pointA = null;\n this.pointB = null;\n\n this._altKey = false;\n this._ctrlKey = false;\n this._metaKey = false;\n this._shiftKey = false;\n this._buttonsPressed = 0;\n\n this._pointerInput = (p, s) => {\n var evt = <IPointerEvent>p.event;\n let isTouch = evt.pointerType === \"touch\";\n let ignoreContext = isTouch || this._usingSafari;\n\n if (engine.isInVRExclusivePointerMode) {\n return;\n }\n\n if (p.type !== PointerEventTypes.POINTERMOVE &&\n this.buttons.indexOf(evt.button) === -1) {\n return;\n }\n\n let srcElement = <HTMLElement>(evt.srcElement || evt.target);\n\n this._altKey = evt.altKey;\n this._ctrlKey = evt.ctrlKey;\n this._metaKey = evt.metaKey;\n this._shiftKey = evt.shiftKey;\n this._buttonsPressed = evt.buttons;\n\n if (engine.isPointerLock) {\n const offsetX = evt.movementX ||\n evt.mozMovementX ||\n evt.webkitMovementX ||\n evt.msMovementX ||\n 0;\n const offsetY = evt.movementY ||\n evt.mozMovementY ||\n evt.webkitMovementY ||\n evt.msMovementY ||\n 0;\n\n this.onTouch(null, offsetX, offsetY);\n this.pointA = null;\n this.pointB = null;\n } else if (p.type === PointerEventTypes.POINTERDOWN && srcElement) {\n try {\n srcElement.setPointerCapture(evt.pointerId);\n } catch (e) {\n //Nothing to do with the error. Execution will continue.\n }\n\n if (this.pointA === null) {\n this.pointA = {\n x: evt.clientX,\n y: evt.clientY,\n pointerId: evt.pointerId,\n type: evt.pointerType\n };\n } else if (this.pointB === null) {\n this.pointB = {\n x: evt.clientX,\n y: evt.clientY,\n pointerId: evt.pointerId,\n type: evt.pointerType\n };\n }\n\n if (this._currentActiveButton === -1 && !isTouch) {\n this._currentActiveButton = evt.button;\n }\n this.onButtonDown(evt);\n\n if (!noPreventDefault) {\n evt.preventDefault();\n element && element.focus();\n }\n } else if (p.type === PointerEventTypes.POINTERDOUBLETAP) {\n this.onDoubleTap(evt.pointerType);\n } else if (srcElement && (p.type === PointerEventTypes.POINTERUP || (p.type === PointerEventTypes.POINTERMOVE && p.event.button === this._currentActiveButton && this._currentActiveButton !== -1 && !ignoreContext))) {\n try {\n srcElement.releasePointerCapture(evt.pointerId);\n } catch (e) {\n //Nothing to do with the error.\n }\n\n if (!isTouch) {\n this.pointB = null; // Mouse and pen are mono pointer\n }\n\n //would be better to use pointers.remove(evt.pointerId) for multitouch gestures,\n //but emptying completely pointers collection is required to fix a bug on iPhone :\n //when changing orientation while pinching camera,\n //one pointer stay pressed forever if we don't release all pointers\n //will be ok to put back pointers.remove(evt.pointerId); when iPhone bug corrected\n if (engine._badOS) {\n this.pointA = this.pointB = null;\n } else {\n //only remove the impacted pointer in case of multitouch allowing on most\n //platforms switching from rotate to zoom and pan seamlessly.\n if (this.pointB && this.pointA && this.pointA.pointerId == evt.pointerId) {\n this.pointA = this.pointB;\n this.pointB = null;\n } else if (this.pointA && this.pointB &&\n this.pointB.pointerId == evt.pointerId) {\n this.pointB = null;\n } else {\n this.pointA = this.pointB = null;\n }\n }\n\n if (previousPinchSquaredDistance !== 0 || previousMultiTouchPanPosition) {\n // Previous pinch data is populated but a button has been lifted\n // so pinch has ended.\n this.onMultiTouch(\n this.pointA,\n this.pointB,\n previousPinchSquaredDistance,\n 0, // pinchSquaredDistance\n previousMultiTouchPanPosition,\n null // multiTouchPanPosition\n );\n previousPinchSquaredDistance = 0;\n previousMultiTouchPanPosition = null;\n }\n\n this._currentActiveButton = -1;\n this.onButtonUp(evt);\n\n if (!noPreventDefault) {\n evt.preventDefault();\n }\n } else if (p.type === PointerEventTypes.POINTERMOVE) {\n if (!noPreventDefault) {\n evt.preventDefault();\n }\n\n // One button down\n if (this.pointA && this.pointB === null) {\n const offsetX = evt.clientX - this.pointA.x;\n const offsetY = evt.clientY - this.pointA.y;\n this.onTouch(this.pointA, offsetX, offsetY);\n\n this.pointA.x = evt.clientX;\n this.pointA.y = evt.clientY;\n }\n // Two buttons down: pinch\n else if (this.pointA && this.pointB) {\n var ed = (this.pointA.pointerId === evt.pointerId) ?\n this.pointA : this.pointB;\n ed.x = evt.clientX;\n ed.y = evt.clientY;\n var distX = this.pointA.x - this.pointB.x;\n var distY = this.pointA.y - this.pointB.y;\n var pinchSquaredDistance = (distX * distX) + (distY * distY);\n var multiTouchPanPosition = {\n x: (this.pointA.x + this.pointB.x) / 2,\n y: (this.pointA.y + this.pointB.y) / 2,\n pointerId: evt.pointerId,\n type: p.type\n };\n\n this.onMultiTouch(\n this.pointA,\n this.pointB,\n previousPinchSquaredDistance,\n pinchSquaredDistance,\n previousMultiTouchPanPosition,\n multiTouchPanPosition);\n\n previousMultiTouchPanPosition = multiTouchPanPosition;\n previousPinchSquaredDistance = pinchSquaredDistance;\n }\n }\n };\n\n this._observer = this.camera.getScene().onPointerObservable.add(\n this._pointerInput,\n PointerEventTypes.POINTERDOWN | PointerEventTypes.POINTERUP |\n PointerEventTypes.POINTERMOVE | PointerEventTypes.POINTERDOUBLETAP);\n\n this._onLostFocus = () => {\n this.pointA = this.pointB = null;\n previousPinchSquaredDistance = 0;\n previousMultiTouchPanPosition = null;\n this.onLostFocus();\n };\n\n element && element.addEventListener(\"contextmenu\",\n <EventListener>this.onContextMenu.bind(this), false);\n\n let hostWindow = this.camera.getScene().getEngine().getHostWindow();\n\n if (hostWindow) {\n Tools.RegisterTopRootEvents(hostWindow, [\n { name: \"blur\", handler: this._onLostFocus }\n ]);\n }\n }\n\n /**\n * Detach the current controls from the specified dom element.\n */\n public detachControl(): void;\n\n /**\n * Detach the current controls from the specified dom element.\n * @param ignored defines an ignored parameter kept for backward compatibility. If you want to define the source input element, you can set engine.inputElement before calling camera.attachControl\n */\n public detachControl(ignored?: any): void {\n if (this._onLostFocus) {\n let hostWindow = this.camera.getScene().getEngine().getHostWindow();\n if (hostWindow) {\n Tools.UnregisterTopRootEvents(hostWindow, [\n { name: \"blur\", handler: this._onLostFocus }\n ]);\n }\n }\n\n if (this._observer) {\n this.camera.getScene().onPointerObservable.remove(this._observer);\n this._observer = null;\n\n if (this.onContextMenu) {\n const inputElement = this.camera.getScene().getEngine().getInputElement();\n inputElement && inputElement.removeEventListener(\"contextmenu\", <EventListener>this.onContextMenu);\n }\n\n this._onLostFocus = null;\n }\n\n this._altKey = false;\n this._ctrlKey = false;\n this._metaKey = false;\n this._shiftKey = false;\n this._buttonsPressed = 0;\n }\n\n /**\n * Gets the class name of the current input.\n * @returns the class name\n */\n public getClassName(): string {\n return \"BaseCameraPointersInput\";\n }\n\n /**\n * Get the friendly name associated with the input class.\n * @returns the input friendly name\n */\n public getSimpleName(): string {\n return \"pointers\";\n }\n\n /**\n * Called on pointer POINTERDOUBLETAP event.\n * Override this method to provide functionality on POINTERDOUBLETAP event.\n */\n protected onDoubleTap(type: string) {\n }\n\n /**\n * Called on pointer POINTERMOVE event if only a single touch is active.\n * Override this method to provide functionality.\n */\n protected onTouch(point: Nullable<PointerTouch>,\n offsetX: number,\n offsetY: number): void {\n }\n\n /**\n * Called on pointer POINTERMOVE event if multiple touches are active.\n * Override this method to provide functionality.\n */\n protected onMultiTouch(pointA: Nullable<PointerTouch>,\n pointB: Nullable<PointerTouch>,\n previousPinchSquaredDistance: number,\n pinchSquaredDistance: number,\n previousMultiTouchPanPosition: Nullable<PointerTouch>,\n multiTouchPanPosition: Nullable<PointerTouch>): void {\n }\n\n /**\n * Called on JS contextmenu event.\n * Override this method to provide functionality.\n */\n protected onContextMenu(evt: PointerEvent): void {\n evt.preventDefault();\n }\n\n /**\n * Called each time a new POINTERDOWN event occurs. Ie, for each button\n * press.\n * Override this method to provide functionality.\n */\n protected onButtonDown(evt: IPointerEvent): void {\n }\n\n /**\n * Called each time a new POINTERUP event occurs. Ie, for each button\n * release.\n * Override this method to provide functionality.\n */\n protected onButtonUp(evt: IPointerEvent): void {\n }\n\n /**\n * Called when window becomes inactive.\n * Override this method to provide functionality.\n */\n protected onLostFocus(): void {\n }\n\n private _pointerInput: (p: PointerInfo, s: EventState) => void;\n private _observer: Nullable<Observer<PointerInfo>>;\n private _onLostFocus: Nullable<(e: FocusEvent) => any>;\n private pointA: Nullable<PointerTouch>;\n private pointB: Nullable<PointerTouch>;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"BaseCameraPointersInput.js","sourceRoot":"","sources":["../../../../sourceES6/core/Cameras/Inputs/BaseCameraPointersInput.ts"],"names":[],"mappings":"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","sourcesContent":["import { Nullable } from \"../../types\";\nimport { serialize } from \"../../Misc/decorators\";\nimport { EventState, Observer } from \"../../Misc/observable\";\nimport { Tools } from \"../../Misc/tools\";\nimport { Camera } from \"../../Cameras/camera\";\nimport { ICameraInput } from \"../../Cameras/cameraInputsManager\";\nimport { PointerInfo, PointerEventTypes, PointerTouch } from \"../../Events/pointerEvents\";\nimport { IPointerEvent } from \"../../Events/deviceInputEvents\";\n\n/**\n * Base class for Camera Pointer Inputs.\n * See FollowCameraPointersInput in src/Cameras/Inputs/followCameraPointersInput.ts\n * for example usage.\n */\nexport abstract class BaseCameraPointersInput implements ICameraInput<Camera> {\n /**\n * Defines the camera the input is attached to.\n */\n public abstract camera: Camera;\n\n /**\n * Whether keyboard modifier keys are pressed at time of last mouse event.\n */\n protected _altKey: boolean;\n protected _ctrlKey: boolean;\n protected _metaKey: boolean;\n protected _shiftKey: boolean;\n\n /**\n * Which mouse buttons were pressed at time of last mouse event.\n * https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/buttons\n */\n protected _buttonsPressed: number;\n\n private _currentActiveButton: number = -1;\n\n /**\n * Defines the buttons associated with the input to handle camera move.\n */\n @serialize()\n public buttons = [0, 1, 2];\n\n /**\n * Attach the input controls to a specific dom element to get the input from.\n * @param element Defines the element the controls should be listened from\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 public attachControl(noPreventDefault?: boolean): void {\n noPreventDefault = Tools.BackCompatCameraNoPreventDefault(arguments);\n var engine = this.camera.getEngine();\n const element = engine.getInputElement();\n var previousPinchSquaredDistance = 0;\n var previousMultiTouchPanPosition: Nullable<PointerTouch> = null;\n\n this.pointA = null;\n this.pointB = null;\n\n this._altKey = false;\n this._ctrlKey = false;\n this._metaKey = false;\n this._shiftKey = false;\n this._buttonsPressed = 0;\n\n this._pointerInput = (p, s) => {\n var evt = <IPointerEvent>p.event;\n let isTouch = evt.pointerType === \"touch\";\n\n if (engine.isInVRExclusivePointerMode) {\n return;\n }\n\n if (p.type !== PointerEventTypes.POINTERMOVE &&\n this.buttons.indexOf(evt.button) === -1) {\n return;\n }\n\n let srcElement = <HTMLElement>(evt.srcElement || evt.target);\n\n this._altKey = evt.altKey;\n this._ctrlKey = evt.ctrlKey;\n this._metaKey = evt.metaKey;\n this._shiftKey = evt.shiftKey;\n this._buttonsPressed = evt.buttons;\n\n if (engine.isPointerLock) {\n const offsetX = evt.movementX ||\n evt.mozMovementX ||\n evt.webkitMovementX ||\n evt.msMovementX ||\n 0;\n const offsetY = evt.movementY ||\n evt.mozMovementY ||\n evt.webkitMovementY ||\n evt.msMovementY ||\n 0;\n\n this.onTouch(null, offsetX, offsetY);\n this.pointA = null;\n this.pointB = null;\n } else if (p.type === PointerEventTypes.POINTERDOWN && srcElement && (this._currentActiveButton === -1 || isTouch)) {\n try {\n srcElement.setPointerCapture(evt.pointerId);\n } catch (e) {\n //Nothing to do with the error. Execution will continue.\n }\n\n if (this.pointA === null) {\n this.pointA = {\n x: evt.clientX,\n y: evt.clientY,\n pointerId: evt.pointerId,\n type: evt.pointerType\n };\n } else if (this.pointB === null) {\n this.pointB = {\n x: evt.clientX,\n y: evt.clientY,\n pointerId: evt.pointerId,\n type: evt.pointerType\n };\n }\n\n if (this._currentActiveButton === -1 && !isTouch) {\n this._currentActiveButton = evt.button;\n }\n this.onButtonDown(evt);\n\n if (!noPreventDefault) {\n evt.preventDefault();\n element && element.focus();\n }\n } else if (p.type === PointerEventTypes.POINTERDOUBLETAP) {\n this.onDoubleTap(evt.pointerType);\n } else if (srcElement && p.type === PointerEventTypes.POINTERUP && (this._currentActiveButton === evt.button || isTouch)) {\n try {\n if (evt.buttons === 0) {\n srcElement.releasePointerCapture(evt.pointerId);\n }\n } catch (e) {\n //Nothing to do with the error.\n }\n\n if (!isTouch) {\n this.pointB = null; // Mouse and pen are mono pointer\n }\n\n //would be better to use pointers.remove(evt.pointerId) for multitouch gestures,\n //but emptying completely pointers collection is required to fix a bug on iPhone :\n //when changing orientation while pinching camera,\n //one pointer stay pressed forever if we don't release all pointers\n //will be ok to put back pointers.remove(evt.pointerId); when iPhone bug corrected\n if (engine._badOS) {\n this.pointA = this.pointB = null;\n } else {\n //only remove the impacted pointer in case of multitouch allowing on most\n //platforms switching from rotate to zoom and pan seamlessly.\n if (this.pointB && this.pointA && this.pointA.pointerId == evt.pointerId) {\n this.pointA = this.pointB;\n this.pointB = null;\n } else if (this.pointA && this.pointB &&\n this.pointB.pointerId == evt.pointerId) {\n this.pointB = null;\n } else {\n this.pointA = this.pointB = null;\n }\n }\n\n if (previousPinchSquaredDistance !== 0 || previousMultiTouchPanPosition) {\n // Previous pinch data is populated but a button has been lifted\n // so pinch has ended.\n this.onMultiTouch(\n this.pointA,\n this.pointB,\n previousPinchSquaredDistance,\n 0, // pinchSquaredDistance\n previousMultiTouchPanPosition,\n null // multiTouchPanPosition\n );\n previousPinchSquaredDistance = 0;\n previousMultiTouchPanPosition = null;\n }\n\n this._currentActiveButton = -1;\n this.onButtonUp(evt);\n\n if (!noPreventDefault) {\n evt.preventDefault();\n }\n } else if (p.type === PointerEventTypes.POINTERMOVE) {\n if (!noPreventDefault) {\n evt.preventDefault();\n }\n\n // One button down\n if (this.pointA && this.pointB === null) {\n const offsetX = evt.clientX - this.pointA.x;\n const offsetY = evt.clientY - this.pointA.y;\n this.onTouch(this.pointA, offsetX, offsetY);\n\n this.pointA.x = evt.clientX;\n this.pointA.y = evt.clientY;\n }\n // Two buttons down: pinch\n else if (this.pointA && this.pointB) {\n var ed = (this.pointA.pointerId === evt.pointerId) ?\n this.pointA : this.pointB;\n ed.x = evt.clientX;\n ed.y = evt.clientY;\n var distX = this.pointA.x - this.pointB.x;\n var distY = this.pointA.y - this.pointB.y;\n var pinchSquaredDistance = (distX * distX) + (distY * distY);\n var multiTouchPanPosition = {\n x: (this.pointA.x + this.pointB.x) / 2,\n y: (this.pointA.y + this.pointB.y) / 2,\n pointerId: evt.pointerId,\n type: p.type\n };\n\n this.onMultiTouch(\n this.pointA,\n this.pointB,\n previousPinchSquaredDistance,\n pinchSquaredDistance,\n previousMultiTouchPanPosition,\n multiTouchPanPosition);\n\n previousMultiTouchPanPosition = multiTouchPanPosition;\n previousPinchSquaredDistance = pinchSquaredDistance;\n }\n }\n };\n\n this._observer = this.camera.getScene().onPointerObservable.add(\n this._pointerInput,\n PointerEventTypes.POINTERDOWN | PointerEventTypes.POINTERUP |\n PointerEventTypes.POINTERMOVE | PointerEventTypes.POINTERDOUBLETAP);\n\n this._onLostFocus = () => {\n this.pointA = this.pointB = null;\n previousPinchSquaredDistance = 0;\n previousMultiTouchPanPosition = null;\n this.onLostFocus();\n };\n\n element && element.addEventListener(\"contextmenu\",\n <EventListener>this.onContextMenu.bind(this), false);\n\n let hostWindow = this.camera.getScene().getEngine().getHostWindow();\n\n if (hostWindow) {\n Tools.RegisterTopRootEvents(hostWindow, [\n { name: \"blur\", handler: this._onLostFocus }\n ]);\n }\n }\n\n /**\n * Detach the current controls from the specified dom element.\n */\n public detachControl(): void;\n\n /**\n * Detach the current controls from the specified dom element.\n * @param ignored defines an ignored parameter kept for backward compatibility. If you want to define the source input element, you can set engine.inputElement before calling camera.attachControl\n */\n public detachControl(ignored?: any): void {\n if (this._onLostFocus) {\n let hostWindow = this.camera.getScene().getEngine().getHostWindow();\n if (hostWindow) {\n Tools.UnregisterTopRootEvents(hostWindow, [\n { name: \"blur\", handler: this._onLostFocus }\n ]);\n }\n }\n\n if (this._observer) {\n this.camera.getScene().onPointerObservable.remove(this._observer);\n this._observer = null;\n\n if (this.onContextMenu) {\n const inputElement = this.camera.getScene().getEngine().getInputElement();\n inputElement && inputElement.removeEventListener(\"contextmenu\", <EventListener>this.onContextMenu);\n }\n\n this._onLostFocus = null;\n }\n\n this._altKey = false;\n this._ctrlKey = false;\n this._metaKey = false;\n this._shiftKey = false;\n this._buttonsPressed = 0;\n }\n\n /**\n * Gets the class name of the current input.\n * @returns the class name\n */\n public getClassName(): string {\n return \"BaseCameraPointersInput\";\n }\n\n /**\n * Get the friendly name associated with the input class.\n * @returns the input friendly name\n */\n public getSimpleName(): string {\n return \"pointers\";\n }\n\n /**\n * Called on pointer POINTERDOUBLETAP event.\n * Override this method to provide functionality on POINTERDOUBLETAP event.\n */\n protected onDoubleTap(type: string) {\n }\n\n /**\n * Called on pointer POINTERMOVE event if only a single touch is active.\n * Override this method to provide functionality.\n */\n protected onTouch(point: Nullable<PointerTouch>,\n offsetX: number,\n offsetY: number): void {\n }\n\n /**\n * Called on pointer POINTERMOVE event if multiple touches are active.\n * Override this method to provide functionality.\n */\n protected onMultiTouch(pointA: Nullable<PointerTouch>,\n pointB: Nullable<PointerTouch>,\n previousPinchSquaredDistance: number,\n pinchSquaredDistance: number,\n previousMultiTouchPanPosition: Nullable<PointerTouch>,\n multiTouchPanPosition: Nullable<PointerTouch>): void {\n }\n\n /**\n * Called on JS contextmenu event.\n * Override this method to provide functionality.\n */\n protected onContextMenu(evt: PointerEvent): void {\n evt.preventDefault();\n }\n\n /**\n * Called each time a new POINTERDOWN event occurs. Ie, for each button\n * press.\n * Override this method to provide functionality.\n */\n protected onButtonDown(evt: IPointerEvent): void {\n }\n\n /**\n * Called each time a new POINTERUP event occurs. Ie, for each button\n * release.\n * Override this method to provide functionality.\n */\n protected onButtonUp(evt: IPointerEvent): void {\n }\n\n /**\n * Called when window becomes inactive.\n * Override this method to provide functionality.\n */\n protected onLostFocus(): void {\n }\n\n private _pointerInput: (p: PointerInfo, s: EventState) => void;\n private _observer: Nullable<Observer<PointerInfo>>;\n private _onLostFocus: Nullable<(e: FocusEvent) => any>;\n private pointA: Nullable<PointerTouch>;\n private pointB: Nullable<PointerTouch>;\n}\n"]}
|
|
@@ -39,7 +39,6 @@ export declare class FreeCameraMouseInput implements ICameraInput<FreeCamera> {
|
|
|
39
39
|
*/
|
|
40
40
|
_allowCameraRotation: boolean;
|
|
41
41
|
private _currentActiveButton;
|
|
42
|
-
private _usingSafari;
|
|
43
42
|
/**
|
|
44
43
|
* Manage the mouse inputs to control the movement of a free camera.
|
|
45
44
|
* @see https://doc.babylonjs.com/how_to/customizing_camera_inputs
|
|
@@ -40,7 +40,6 @@ var FreeCameraMouseInput = /** @class */ (function () {
|
|
|
40
40
|
*/
|
|
41
41
|
this._allowCameraRotation = true;
|
|
42
42
|
this._currentActiveButton = -1;
|
|
43
|
-
this._usingSafari = Tools.IsSafari();
|
|
44
43
|
}
|
|
45
44
|
/**
|
|
46
45
|
* Attach the input controls to a specific dom element to get the input from.
|
|
@@ -54,17 +53,18 @@ var FreeCameraMouseInput = /** @class */ (function () {
|
|
|
54
53
|
if (!this._pointerInput) {
|
|
55
54
|
this._pointerInput = function (p) {
|
|
56
55
|
var evt = p.event;
|
|
56
|
+
var isTouch = evt.pointerType === "touch";
|
|
57
57
|
if (engine.isInVRExclusivePointerMode) {
|
|
58
58
|
return;
|
|
59
59
|
}
|
|
60
|
-
if (!_this.touchEnabled &&
|
|
60
|
+
if (!_this.touchEnabled && isTouch) {
|
|
61
61
|
return;
|
|
62
62
|
}
|
|
63
63
|
if (p.type !== PointerEventTypes.POINTERMOVE && _this.buttons.indexOf(evt.button) === -1) {
|
|
64
64
|
return;
|
|
65
65
|
}
|
|
66
66
|
var srcElement = (evt.srcElement || evt.target);
|
|
67
|
-
if (p.type === PointerEventTypes.POINTERDOWN && srcElement) {
|
|
67
|
+
if (p.type === PointerEventTypes.POINTERDOWN && srcElement && (_this._currentActiveButton === -1 || isTouch)) {
|
|
68
68
|
try {
|
|
69
69
|
srcElement.setPointerCapture(evt.pointerId);
|
|
70
70
|
}
|
|
@@ -87,7 +87,7 @@ var FreeCameraMouseInput = /** @class */ (function () {
|
|
|
87
87
|
_this._onMouseMove(p.event);
|
|
88
88
|
}
|
|
89
89
|
}
|
|
90
|
-
else if (srcElement &&
|
|
90
|
+
else if (srcElement && p.type === PointerEventTypes.POINTERUP && (_this._currentActiveButton === evt.button || isTouch)) {
|
|
91
91
|
try {
|
|
92
92
|
srcElement.releasePointerCapture(evt.pointerId);
|
|
93
93
|
}
|
|
@@ -101,31 +101,30 @@ var FreeCameraMouseInput = /** @class */ (function () {
|
|
|
101
101
|
}
|
|
102
102
|
}
|
|
103
103
|
else if (p.type === PointerEventTypes.POINTERMOVE) {
|
|
104
|
-
if (
|
|
105
|
-
|
|
106
|
-
_this._onMouseMove(p.event);
|
|
107
|
-
}
|
|
108
|
-
return;
|
|
109
|
-
}
|
|
110
|
-
var offsetX = evt.clientX - _this.previousPosition.x;
|
|
111
|
-
var offsetY = evt.clientY - _this.previousPosition.y;
|
|
112
|
-
if (_this.camera.getScene().useRightHandedSystem) {
|
|
113
|
-
offsetX *= -1;
|
|
114
|
-
}
|
|
115
|
-
if (_this.camera.parent && _this.camera.parent._getWorldMatrixDeterminant() < 0) {
|
|
116
|
-
offsetX *= -1;
|
|
117
|
-
}
|
|
118
|
-
if (_this._allowCameraRotation) {
|
|
119
|
-
_this.camera.cameraRotation.y += offsetX / _this.angularSensibility;
|
|
120
|
-
_this.camera.cameraRotation.x += offsetY / _this.angularSensibility;
|
|
104
|
+
if (engine.isPointerLock && _this._onMouseMove) {
|
|
105
|
+
_this._onMouseMove(p.event);
|
|
121
106
|
}
|
|
122
|
-
_this.
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
107
|
+
else if (_this.previousPosition) {
|
|
108
|
+
var offsetX = evt.clientX - _this.previousPosition.x;
|
|
109
|
+
var offsetY = evt.clientY - _this.previousPosition.y;
|
|
110
|
+
if (_this.camera.getScene().useRightHandedSystem) {
|
|
111
|
+
offsetX *= -1;
|
|
112
|
+
}
|
|
113
|
+
if (_this.camera.parent && _this.camera.parent._getWorldMatrixDeterminant() < 0) {
|
|
114
|
+
offsetX *= -1;
|
|
115
|
+
}
|
|
116
|
+
if (_this._allowCameraRotation) {
|
|
117
|
+
_this.camera.cameraRotation.y += offsetX / _this.angularSensibility;
|
|
118
|
+
_this.camera.cameraRotation.x += offsetY / _this.angularSensibility;
|
|
119
|
+
}
|
|
120
|
+
_this.onPointerMovedObservable.notifyObservers({ offsetX: offsetX, offsetY: offsetY });
|
|
121
|
+
_this.previousPosition = {
|
|
122
|
+
x: evt.clientX,
|
|
123
|
+
y: evt.clientY,
|
|
124
|
+
};
|
|
125
|
+
if (!noPreventDefault) {
|
|
126
|
+
evt.preventDefault();
|
|
127
|
+
}
|
|
129
128
|
}
|
|
130
129
|
}
|
|
131
130
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"freeCameraMouseInput.js","sourceRoot":"","sources":["../../../../sourceES6/core/Cameras/Inputs/freeCameraMouseInput.ts"],"names":[],"mappings":";AAAA,OAAO,EAAwB,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACzE,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD,OAAO,EAAgB,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAEnF,OAAO,EAAe,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC5E,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAEzC;;;GAGG;AACH;IAoCI;;;;OAIG;IACH;IACI;;OAEG;IACI,YAAmB;QAAnB,6BAAA,EAAA,mBAAmB;QAAnB,iBAAY,GAAZ,YAAY,CAAO;QAvC9B;;WAEG;QAEI,YAAO,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAE3B;;WAEG;QAEI,uBAAkB,GAAG,MAAM,CAAC;QAK3B,qBAAgB,GAAuC,IAAI,CAAC;QAEpE;;WAEG;QACI,6BAAwB,GAAG,IAAI,UAAU,EAAwC,CAAC;QACzF;;;WAGG;QACI,yBAAoB,GAAG,IAAI,CAAC;QAE3B,yBAAoB,GAAW,CAAC,CAAC,CAAC;QAClC,iBAAY,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;IAYpC,CAAC;IAEL;;;OAGG;IACI,4CAAa,GAApB,UAAqB,gBAA0B;QAA/C,iBA+HC;QA9HG,gBAAgB,GAAG,KAAK,CAAC,gCAAgC,CAAC,SAAS,CAAC,CAAC;QACrE,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;QACrC,IAAM,OAAO,GAAG,MAAM,CAAC,eAAe,EAAE,CAAC;QAEzC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;YACrB,IAAI,CAAC,aAAa,GAAG,UAAC,CAAC;gBACnB,IAAI,GAAG,GAAkB,CAAC,CAAC,KAAK,CAAC;gBAEjC,IAAI,MAAM,CAAC,0BAA0B,EAAE;oBACnC,OAAO;iBACV;gBAED,IAAI,CAAC,KAAI,CAAC,YAAY,IAAI,GAAG,CAAC,WAAW,KAAK,OAAO,EAAE;oBACnD,OAAO;iBACV;gBAED,IAAI,CAAC,CAAC,IAAI,KAAK,iBAAiB,CAAC,WAAW,IAAI,KAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE;oBACrF,OAAO;iBACV;gBAED,IAAI,UAAU,GAAgB,CAAC,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;gBAE7D,IAAI,CAAC,CAAC,IAAI,KAAK,iBAAiB,CAAC,WAAW,IAAI,UAAU,EAAE;oBACxD,IAAI;wBACA,UAAU,CAAC,iBAAiB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;qBAC/C;oBAAC,OAAO,CAAC,EAAE;wBACR,wDAAwD;qBAC3D;oBAED,IAAI,KAAI,CAAC,oBAAoB,KAAK,CAAC,CAAC,EAAE;wBAClC,KAAI,CAAC,oBAAoB,GAAG,GAAG,CAAC,MAAM,CAAC;qBAC1C;oBAED,KAAI,CAAC,gBAAgB,GAAG;wBACpB,CAAC,EAAE,GAAG,CAAC,OAAO;wBACd,CAAC,EAAE,GAAG,CAAC,OAAO;qBACjB,CAAC;oBAEF,IAAI,CAAC,gBAAgB,EAAE;wBACnB,GAAG,CAAC,cAAc,EAAE,CAAC;wBACrB,OAAO,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;qBAC9B;oBAED,wDAAwD;oBACxD,IAAI,MAAM,CAAC,aAAa,IAAI,KAAI,CAAC,YAAY,EAAE;wBAC3C,KAAI,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;qBAC9B;iBACJ;qBAAM,IAAI,UAAU,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,iBAAiB,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,iBAAiB,CAAC,WAAW,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,KAAK,KAAI,CAAC,oBAAoB,IAAI,KAAI,CAAC,oBAAoB,KAAK,CAAC,CAAC,IAAI,CAAC,KAAI,CAAC,YAAY,CAAC,CAAC,EAAE;oBACvN,IAAI;wBACA,UAAU,CAAC,qBAAqB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;qBACnD;oBAAC,OAAO,CAAC,EAAE;wBACR,+BAA+B;qBAClC;oBACD,KAAI,CAAC,oBAAoB,GAAG,CAAC,CAAC,CAAC;oBAE/B,KAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;oBAC7B,IAAI,CAAC,gBAAgB,EAAE;wBACnB,GAAG,CAAC,cAAc,EAAE,CAAC;qBACxB;iBACJ;qBAAM,IAAI,CAAC,CAAC,IAAI,KAAK,iBAAiB,CAAC,WAAW,EAAE;oBACjD,IAAI,CAAC,KAAI,CAAC,gBAAgB,EAAE;wBACxB,IAAI,MAAM,CAAC,aAAa,IAAI,KAAI,CAAC,YAAY,EAAE;4BAC3C,KAAI,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;yBAC9B;wBAED,OAAO;qBACV;oBAED,IAAI,OAAO,GAAG,GAAG,CAAC,OAAO,GAAG,KAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC;oBACpD,IAAI,OAAO,GAAG,GAAG,CAAC,OAAO,GAAG,KAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC;oBACpD,IAAI,KAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,oBAAoB,EAAE;wBAC7C,OAAO,IAAI,CAAC,CAAC,CAAC;qBACjB;oBACD,IAAI,KAAI,CAAC,MAAM,CAAC,MAAM,IAAI,KAAI,CAAC,MAAM,CAAC,MAAM,CAAC,0BAA0B,EAAE,GAAG,CAAC,EAAE;wBAC3E,OAAO,IAAI,CAAC,CAAC,CAAC;qBACjB;oBAED,IAAI,KAAI,CAAC,oBAAoB,EAAE;wBAC3B,KAAI,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,IAAI,OAAO,GAAG,KAAI,CAAC,kBAAkB,CAAC;wBAClE,KAAI,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,IAAI,OAAO,GAAG,KAAI,CAAC,kBAAkB,CAAC;qBACrE;oBACD,KAAI,CAAC,wBAAwB,CAAC,eAAe,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;oBAEtF,KAAI,CAAC,gBAAgB,GAAG;wBACpB,CAAC,EAAE,GAAG,CAAC,OAAO;wBACd,CAAC,EAAE,GAAG,CAAC,OAAO;qBACjB,CAAC;oBAEF,IAAI,CAAC,gBAAgB,EAAE;wBACnB,GAAG,CAAC,cAAc,EAAE,CAAC;qBACxB;iBACJ;YACL,CAAC,CAAC;SACL;QAED,IAAI,CAAC,YAAY,GAAG,UAAC,GAAG;YACpB,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE;gBACvB,OAAO;aACV;YAED,IAAI,MAAM,CAAC,0BAA0B,EAAE;gBACnC,OAAO;aACV;YAED,IAAI,OAAO,GAAG,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,YAAY,IAAI,GAAG,CAAC,eAAe,IAAI,GAAG,CAAC,WAAW,IAAI,CAAC,CAAC;YAC/F,IAAI,KAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,oBAAoB,EAAE;gBAC7C,OAAO,IAAI,CAAC,CAAC,CAAC;aACjB;YACD,IAAI,KAAI,CAAC,MAAM,CAAC,MAAM,IAAI,KAAI,CAAC,MAAM,CAAC,MAAM,CAAC,0BAA0B,EAAE,GAAG,CAAC,EAAE;gBAC3E,OAAO,IAAI,CAAC,CAAC,CAAC;aACjB;YACD,KAAI,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,IAAI,OAAO,GAAG,KAAI,CAAC,kBAAkB,CAAC;YAElE,IAAI,OAAO,GAAG,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,YAAY,IAAI,GAAG,CAAC,eAAe,IAAI,GAAG,CAAC,WAAW,IAAI,CAAC,CAAC;YAC/F,KAAI,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,IAAI,OAAO,GAAG,KAAI,CAAC,kBAAkB,CAAC;YAElE,KAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;YAE7B,IAAI,CAAC,gBAAgB,EAAE;gBACnB,GAAG,CAAC,cAAc,EAAE,CAAC;aACxB;QACL,CAAC,CAAC;QAEF,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,EAAE,iBAAiB,CAAC,WAAW,GAAG,iBAAiB,CAAC,SAAS,GAAG,iBAAiB,CAAC,WAAW,CAAC,CAAC;QAEjL,OAAO,IAAI,OAAO,CAAC,gBAAgB,CAAC,aAAa,EAAiB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,4DAA4D;IACzK,CAAC;IAED;;;OAGG;IACO,4CAAa,GAAvB,UAAwB,GAAiB;QACrC,GAAG,CAAC,cAAc,EAAE,CAAC;IACzB,CAAC;IAOD;;;OAGG;IACI,4CAAa,GAApB,UAAqB,OAAa;QAC9B,IAAI,IAAI,CAAC,SAAS,EAAE;YAChB,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,mBAAmB,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAElE,IAAI,IAAI,CAAC,aAAa,EAAE;gBACpB,IAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;gBACvC,IAAM,OAAO,GAAG,MAAM,CAAC,eAAe,EAAE,CAAC;gBACzC,OAAO,IAAI,OAAO,CAAC,mBAAmB,CAAC,aAAa,EAAiB,IAAI,CAAC,aAAa,CAAC,CAAC;aAC5F;YAED,IAAI,IAAI,CAAC,wBAAwB,EAAE;gBAC/B,IAAI,CAAC,wBAAwB,CAAC,KAAK,EAAE,CAAC;aACzC;YAED,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;YACtB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;YACzB,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;SAChC;IACL,CAAC;IAED;;;OAGG;IACI,2CAAY,GAAnB;QACI,OAAO,sBAAsB,CAAC;IAClC,CAAC;IAED;;;OAGG;IACI,4CAAa,GAApB;QACI,OAAO,OAAO,CAAC;IACnB,CAAC;IA9ND;QADC,SAAS,EAAE;yDACe;IAM3B;QADC,SAAS,EAAE;oEACuB;IAyNvC,2BAAC;CAAA,AAzOD,IAyOC;SAzOY,oBAAoB;AA2O3B,gBAAiB,CAAC,sBAAsB,CAAC,GAAG,oBAAoB,CAAC","sourcesContent":["import { Observer, EventState, Observable } from \"../../Misc/observable\";\r\nimport { serialize } from \"../../Misc/decorators\";\r\nimport { Nullable } from \"../../types\";\r\nimport { ICameraInput, CameraInputTypes } from \"../../Cameras/cameraInputsManager\";\r\nimport { FreeCamera } from \"../../Cameras/freeCamera\";\r\nimport { PointerInfo, PointerEventTypes } from \"../../Events/pointerEvents\";\r\nimport { Tools } from \"../../Misc/tools\";\r\nimport { IMouseEvent, IPointerEvent } from \"../../Events/deviceInputEvents\";\r\n/**\r\n * Manage the mouse inputs to control the movement of a free camera.\r\n * @see https://doc.babylonjs.com/how_to/customizing_camera_inputs\r\n */\r\nexport class FreeCameraMouseInput implements ICameraInput<FreeCamera> {\r\n /**\r\n * Defines the camera the input is attached to.\r\n */\r\n public camera: FreeCamera;\r\n\r\n /**\r\n * Defines the buttons associated with the input to handle camera move.\r\n */\r\n @serialize()\r\n public buttons = [0, 1, 2];\r\n\r\n /**\r\n * Defines the pointer angular sensibility along the X and Y axis or how fast is the camera rotating.\r\n */\r\n @serialize()\r\n public angularSensibility = 2000.0;\r\n\r\n private _pointerInput: (p: PointerInfo, s: EventState) => void;\r\n private _onMouseMove: Nullable<(e: IMouseEvent) => any>;\r\n private _observer: Nullable<Observer<PointerInfo>>;\r\n private previousPosition: Nullable<{ x: number; y: number }> = null;\r\n\r\n /**\r\n * Observable for when a pointer move event occurs containing the move offset\r\n */\r\n public onPointerMovedObservable = new Observable<{ offsetX: number; offsetY: number }>();\r\n /**\r\n * @hidden\r\n * If the camera should be rotated automatically based on pointer movement\r\n */\r\n public _allowCameraRotation = true;\r\n\r\n private _currentActiveButton: number = -1;\r\n private _usingSafari = Tools.IsSafari();\r\n\r\n /**\r\n * Manage the mouse inputs to control the movement of a free camera.\r\n * @see https://doc.babylonjs.com/how_to/customizing_camera_inputs\r\n * @param touchEnabled Defines if touch is enabled or not\r\n */\r\n constructor(\r\n /**\r\n * Define if touch is enabled in the mouse input\r\n */\r\n public touchEnabled = true\r\n ) { }\r\n\r\n /**\r\n * Attach the input controls to a specific dom element to get the input from.\r\n * @param noPreventDefault Defines whether event caught by the controls should call preventdefault() (https://developer.mozilla.org/en-US/docs/Web/API/Event/preventDefault)\r\n */\r\n public attachControl(noPreventDefault?: boolean): void {\r\n noPreventDefault = Tools.BackCompatCameraNoPreventDefault(arguments);\r\n var engine = this.camera.getEngine();\r\n const element = engine.getInputElement();\r\n\r\n if (!this._pointerInput) {\r\n this._pointerInput = (p) => {\r\n var evt = <IPointerEvent>p.event;\r\n\r\n if (engine.isInVRExclusivePointerMode) {\r\n return;\r\n }\r\n\r\n if (!this.touchEnabled && evt.pointerType === \"touch\") {\r\n return;\r\n }\r\n\r\n if (p.type !== PointerEventTypes.POINTERMOVE && this.buttons.indexOf(evt.button) === -1) {\r\n return;\r\n }\r\n\r\n let srcElement = <HTMLElement>(evt.srcElement || evt.target);\r\n\r\n if (p.type === PointerEventTypes.POINTERDOWN && srcElement) {\r\n try {\r\n srcElement.setPointerCapture(evt.pointerId);\r\n } catch (e) {\r\n //Nothing to do with the error. Execution will continue.\r\n }\r\n\r\n if (this._currentActiveButton === -1) {\r\n this._currentActiveButton = evt.button;\r\n }\r\n\r\n this.previousPosition = {\r\n x: evt.clientX,\r\n y: evt.clientY,\r\n };\r\n\r\n if (!noPreventDefault) {\r\n evt.preventDefault();\r\n element && element.focus();\r\n }\r\n\r\n // This is required to move while pointer button is down\r\n if (engine.isPointerLock && this._onMouseMove) {\r\n this._onMouseMove(p.event);\r\n }\r\n } else if (srcElement && (p.type === PointerEventTypes.POINTERUP || (p.type === PointerEventTypes.POINTERMOVE && p.event.button === this._currentActiveButton && this._currentActiveButton !== -1 && !this._usingSafari))) {\r\n try {\r\n srcElement.releasePointerCapture(evt.pointerId);\r\n } catch (e) {\r\n //Nothing to do with the error.\r\n }\r\n this._currentActiveButton = -1;\r\n\r\n this.previousPosition = null;\r\n if (!noPreventDefault) {\r\n evt.preventDefault();\r\n }\r\n } else if (p.type === PointerEventTypes.POINTERMOVE) {\r\n if (!this.previousPosition) {\r\n if (engine.isPointerLock && this._onMouseMove) {\r\n this._onMouseMove(p.event);\r\n }\r\n\r\n return;\r\n }\r\n\r\n var offsetX = evt.clientX - this.previousPosition.x;\r\n var offsetY = evt.clientY - this.previousPosition.y;\r\n if (this.camera.getScene().useRightHandedSystem) {\r\n offsetX *= -1;\r\n }\r\n if (this.camera.parent && this.camera.parent._getWorldMatrixDeterminant() < 0) {\r\n offsetX *= -1;\r\n }\r\n\r\n if (this._allowCameraRotation) {\r\n this.camera.cameraRotation.y += offsetX / this.angularSensibility;\r\n this.camera.cameraRotation.x += offsetY / this.angularSensibility;\r\n }\r\n this.onPointerMovedObservable.notifyObservers({ offsetX: offsetX, offsetY: offsetY });\r\n\r\n this.previousPosition = {\r\n x: evt.clientX,\r\n y: evt.clientY,\r\n };\r\n\r\n if (!noPreventDefault) {\r\n evt.preventDefault();\r\n }\r\n }\r\n };\r\n }\r\n\r\n this._onMouseMove = (evt) => {\r\n if (!engine.isPointerLock) {\r\n return;\r\n }\r\n\r\n if (engine.isInVRExclusivePointerMode) {\r\n return;\r\n }\r\n\r\n var offsetX = evt.movementX || evt.mozMovementX || evt.webkitMovementX || evt.msMovementX || 0;\r\n if (this.camera.getScene().useRightHandedSystem) {\r\n offsetX *= -1;\r\n }\r\n if (this.camera.parent && this.camera.parent._getWorldMatrixDeterminant() < 0) {\r\n offsetX *= -1;\r\n }\r\n this.camera.cameraRotation.y += offsetX / this.angularSensibility;\r\n\r\n var offsetY = evt.movementY || evt.mozMovementY || evt.webkitMovementY || evt.msMovementY || 0;\r\n this.camera.cameraRotation.x += offsetY / this.angularSensibility;\r\n\r\n this.previousPosition = null;\r\n\r\n if (!noPreventDefault) {\r\n evt.preventDefault();\r\n }\r\n };\r\n\r\n this._observer = this.camera.getScene().onPointerObservable.add(this._pointerInput, PointerEventTypes.POINTERDOWN | PointerEventTypes.POINTERUP | PointerEventTypes.POINTERMOVE);\r\n\r\n element && element.addEventListener(\"contextmenu\", <EventListener>this.onContextMenu.bind(this), false); // TODO: We need to figure out how to handle this for Native\r\n }\r\n\r\n /**\r\n * Called on JS contextmenu event.\r\n * Override this method to provide functionality.\r\n */\r\n protected onContextMenu(evt: PointerEvent): void {\r\n evt.preventDefault();\r\n }\r\n\r\n /**\r\n * Detach the current controls from the specified dom element.\r\n */\r\n public detachControl(): void;\r\n\r\n /**\r\n * Detach the current controls from the specified dom element.\r\n * @param ignored defines an ignored parameter kept for backward compatibility. If you want to define the source input element, you can set engine.inputElement before calling camera.attachControl\r\n */\r\n public detachControl(ignored?: any): void {\r\n if (this._observer) {\r\n this.camera.getScene().onPointerObservable.remove(this._observer);\r\n\r\n if (this.onContextMenu) {\r\n const engine = this.camera.getEngine();\r\n const element = engine.getInputElement();\r\n element && element.removeEventListener(\"contextmenu\", <EventListener>this.onContextMenu);\r\n }\r\n\r\n if (this.onPointerMovedObservable) {\r\n this.onPointerMovedObservable.clear();\r\n }\r\n\r\n this._observer = null;\r\n this._onMouseMove = null;\r\n this.previousPosition = null;\r\n }\r\n }\r\n\r\n /**\r\n * Gets the class name of the current input.\r\n * @returns the class name\r\n */\r\n public getClassName(): string {\r\n return \"FreeCameraMouseInput\";\r\n }\r\n\r\n /**\r\n * Get the friendly name associated with the input class.\r\n * @returns the input friendly name\r\n */\r\n public getSimpleName(): string {\r\n return \"mouse\";\r\n }\r\n}\r\n\r\n(<any>CameraInputTypes)[\"FreeCameraMouseInput\"] = FreeCameraMouseInput;\r\n"]}
|
|
1
|
+
{"version":3,"file":"freeCameraMouseInput.js","sourceRoot":"","sources":["../../../../sourceES6/core/Cameras/Inputs/freeCameraMouseInput.ts"],"names":[],"mappings":"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","sourcesContent":["import { Observer, EventState, Observable } from \"../../Misc/observable\";\r\nimport { serialize } from \"../../Misc/decorators\";\r\nimport { Nullable } from \"../../types\";\r\nimport { ICameraInput, CameraInputTypes } from \"../../Cameras/cameraInputsManager\";\r\nimport { FreeCamera } from \"../../Cameras/freeCamera\";\r\nimport { PointerInfo, PointerEventTypes } from \"../../Events/pointerEvents\";\r\nimport { Tools } from \"../../Misc/tools\";\r\nimport { IMouseEvent, IPointerEvent } from \"../../Events/deviceInputEvents\";\r\n/**\r\n * Manage the mouse inputs to control the movement of a free camera.\r\n * @see https://doc.babylonjs.com/how_to/customizing_camera_inputs\r\n */\r\nexport class FreeCameraMouseInput implements ICameraInput<FreeCamera> {\r\n /**\r\n * Defines the camera the input is attached to.\r\n */\r\n public camera: FreeCamera;\r\n\r\n /**\r\n * Defines the buttons associated with the input to handle camera move.\r\n */\r\n @serialize()\r\n public buttons = [0, 1, 2];\r\n\r\n /**\r\n * Defines the pointer angular sensibility along the X and Y axis or how fast is the camera rotating.\r\n */\r\n @serialize()\r\n public angularSensibility = 2000.0;\r\n\r\n private _pointerInput: (p: PointerInfo, s: EventState) => void;\r\n private _onMouseMove: Nullable<(e: IMouseEvent) => any>;\r\n private _observer: Nullable<Observer<PointerInfo>>;\r\n private previousPosition: Nullable<{ x: number; y: number }> = null;\r\n\r\n /**\r\n * Observable for when a pointer move event occurs containing the move offset\r\n */\r\n public onPointerMovedObservable = new Observable<{ offsetX: number; offsetY: number }>();\r\n /**\r\n * @hidden\r\n * If the camera should be rotated automatically based on pointer movement\r\n */\r\n public _allowCameraRotation = true;\r\n\r\n private _currentActiveButton: number = -1;\r\n\r\n /**\r\n * Manage the mouse inputs to control the movement of a free camera.\r\n * @see https://doc.babylonjs.com/how_to/customizing_camera_inputs\r\n * @param touchEnabled Defines if touch is enabled or not\r\n */\r\n constructor(\r\n /**\r\n * Define if touch is enabled in the mouse input\r\n */\r\n public touchEnabled = true\r\n ) { }\r\n\r\n /**\r\n * Attach the input controls to a specific dom element to get the input from.\r\n * @param noPreventDefault Defines whether event caught by the controls should call preventdefault() (https://developer.mozilla.org/en-US/docs/Web/API/Event/preventDefault)\r\n */\r\n public attachControl(noPreventDefault?: boolean): void {\r\n noPreventDefault = Tools.BackCompatCameraNoPreventDefault(arguments);\r\n var engine = this.camera.getEngine();\r\n const element = engine.getInputElement();\r\n\r\n if (!this._pointerInput) {\r\n this._pointerInput = (p) => {\r\n var evt = <IPointerEvent>p.event;\r\n let isTouch = evt.pointerType === \"touch\";\r\n\r\n if (engine.isInVRExclusivePointerMode) {\r\n return;\r\n }\r\n\r\n if (!this.touchEnabled && isTouch) {\r\n return;\r\n }\r\n\r\n if (p.type !== PointerEventTypes.POINTERMOVE && this.buttons.indexOf(evt.button) === -1) {\r\n return;\r\n }\r\n\r\n let srcElement = <HTMLElement>(evt.srcElement || evt.target);\r\n\r\n if (p.type === PointerEventTypes.POINTERDOWN && srcElement && (this._currentActiveButton === -1 || isTouch)) {\r\n try {\r\n srcElement.setPointerCapture(evt.pointerId);\r\n } catch (e) {\r\n //Nothing to do with the error. Execution will continue.\r\n }\r\n\r\n if (this._currentActiveButton === -1) {\r\n this._currentActiveButton = evt.button;\r\n }\r\n\r\n this.previousPosition = {\r\n x: evt.clientX,\r\n y: evt.clientY,\r\n };\r\n\r\n if (!noPreventDefault) {\r\n evt.preventDefault();\r\n element && element.focus();\r\n }\r\n\r\n // This is required to move while pointer button is down\r\n if (engine.isPointerLock && this._onMouseMove) {\r\n this._onMouseMove(p.event);\r\n }\r\n } else if (srcElement && p.type === PointerEventTypes.POINTERUP && (this._currentActiveButton === evt.button || isTouch)) {\r\n try {\r\n srcElement.releasePointerCapture(evt.pointerId);\r\n } catch (e) {\r\n //Nothing to do with the error.\r\n }\r\n this._currentActiveButton = -1;\r\n\r\n this.previousPosition = null;\r\n if (!noPreventDefault) {\r\n evt.preventDefault();\r\n }\r\n } else if (p.type === PointerEventTypes.POINTERMOVE) {\r\n\r\n if (engine.isPointerLock && this._onMouseMove) {\r\n this._onMouseMove(p.event);\r\n }\r\n else if (this.previousPosition) {\r\n var offsetX = evt.clientX - this.previousPosition.x;\r\n var offsetY = evt.clientY - this.previousPosition.y;\r\n if (this.camera.getScene().useRightHandedSystem) {\r\n offsetX *= -1;\r\n }\r\n if (this.camera.parent && this.camera.parent._getWorldMatrixDeterminant() < 0) {\r\n offsetX *= -1;\r\n }\r\n\r\n if (this._allowCameraRotation) {\r\n this.camera.cameraRotation.y += offsetX / this.angularSensibility;\r\n this.camera.cameraRotation.x += offsetY / this.angularSensibility;\r\n }\r\n this.onPointerMovedObservable.notifyObservers({ offsetX: offsetX, offsetY: offsetY });\r\n\r\n this.previousPosition = {\r\n x: evt.clientX,\r\n y: evt.clientY,\r\n };\r\n\r\n if (!noPreventDefault) {\r\n evt.preventDefault();\r\n }\r\n }\r\n }\r\n };\r\n }\r\n\r\n this._onMouseMove = (evt) => {\r\n if (!engine.isPointerLock) {\r\n return;\r\n }\r\n\r\n if (engine.isInVRExclusivePointerMode) {\r\n return;\r\n }\r\n\r\n var offsetX = evt.movementX || evt.mozMovementX || evt.webkitMovementX || evt.msMovementX || 0;\r\n if (this.camera.getScene().useRightHandedSystem) {\r\n offsetX *= -1;\r\n }\r\n if (this.camera.parent && this.camera.parent._getWorldMatrixDeterminant() < 0) {\r\n offsetX *= -1;\r\n }\r\n this.camera.cameraRotation.y += offsetX / this.angularSensibility;\r\n\r\n var offsetY = evt.movementY || evt.mozMovementY || evt.webkitMovementY || evt.msMovementY || 0;\r\n this.camera.cameraRotation.x += offsetY / this.angularSensibility;\r\n\r\n this.previousPosition = null;\r\n\r\n if (!noPreventDefault) {\r\n evt.preventDefault();\r\n }\r\n };\r\n\r\n this._observer = this.camera.getScene().onPointerObservable.add(this._pointerInput, PointerEventTypes.POINTERDOWN | PointerEventTypes.POINTERUP | PointerEventTypes.POINTERMOVE);\r\n\r\n element && element.addEventListener(\"contextmenu\", <EventListener>this.onContextMenu.bind(this), false); // TODO: We need to figure out how to handle this for Native\r\n }\r\n\r\n /**\r\n * Called on JS contextmenu event.\r\n * Override this method to provide functionality.\r\n */\r\n protected onContextMenu(evt: PointerEvent): void {\r\n evt.preventDefault();\r\n }\r\n\r\n /**\r\n * Detach the current controls from the specified dom element.\r\n */\r\n public detachControl(): void;\r\n\r\n /**\r\n * Detach the current controls from the specified dom element.\r\n * @param ignored defines an ignored parameter kept for backward compatibility. If you want to define the source input element, you can set engine.inputElement before calling camera.attachControl\r\n */\r\n public detachControl(ignored?: any): void {\r\n if (this._observer) {\r\n this.camera.getScene().onPointerObservable.remove(this._observer);\r\n\r\n if (this.onContextMenu) {\r\n const engine = this.camera.getEngine();\r\n const element = engine.getInputElement();\r\n element && element.removeEventListener(\"contextmenu\", <EventListener>this.onContextMenu);\r\n }\r\n\r\n if (this.onPointerMovedObservable) {\r\n this.onPointerMovedObservable.clear();\r\n }\r\n\r\n this._observer = null;\r\n this._onMouseMove = null;\r\n this.previousPosition = null;\r\n }\r\n }\r\n\r\n /**\r\n * Gets the class name of the current input.\r\n * @returns the class name\r\n */\r\n public getClassName(): string {\r\n return \"FreeCameraMouseInput\";\r\n }\r\n\r\n /**\r\n * Get the friendly name associated with the input class.\r\n * @returns the input friendly name\r\n */\r\n public getSimpleName(): string {\r\n return \"mouse\";\r\n }\r\n}\r\n\r\n(<any>CameraInputTypes)[\"FreeCameraMouseInput\"] = FreeCameraMouseInput;\r\n"]}
|
package/Cameras/camera.d.ts
CHANGED
|
@@ -227,6 +227,10 @@ export declare class Camera extends Node {
|
|
|
227
227
|
* The parent camera is not (!) necessarily the .parent of this camera (like in the case of XR)
|
|
228
228
|
*/
|
|
229
229
|
rigParent?: Camera;
|
|
230
|
+
/**
|
|
231
|
+
* Render pass id used by the camera to render into the main framebuffer
|
|
232
|
+
*/
|
|
233
|
+
renderPassId: number;
|
|
230
234
|
/** @hidden */
|
|
231
235
|
_cameraRigParams: any;
|
|
232
236
|
/** @hidden */
|
package/Cameras/camera.js
CHANGED
|
@@ -170,6 +170,7 @@ var Camera = /** @class */ (function (_super) {
|
|
|
170
170
|
_this.getScene().activeCamera = _this;
|
|
171
171
|
}
|
|
172
172
|
_this.position = position;
|
|
173
|
+
_this.renderPassId = _this.getScene().getEngine().createRenderPassId("Camera " + name);
|
|
173
174
|
return _this;
|
|
174
175
|
}
|
|
175
176
|
Object.defineProperty(Camera.prototype, "position", {
|
|
@@ -770,6 +771,7 @@ var Camera = /** @class */ (function (_super) {
|
|
|
770
771
|
this.customRenderTargets = [];
|
|
771
772
|
// Active Meshes
|
|
772
773
|
this._activeMeshes.dispose();
|
|
774
|
+
this.getScene().getEngine().releaseRenderPassId(this.renderPassId);
|
|
773
775
|
_super.prototype.dispose.call(this, doNotRecurse, disposeMaterialAndTextures);
|
|
774
776
|
};
|
|
775
777
|
Object.defineProperty(Camera.prototype, "isLeftCamera", {
|