@babylonjs/core 6.34.0 → 6.34.2
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/Animations/animation.js +1 -1
- package/Animations/animation.js.map +1 -1
- package/Buffers/storageBuffer.d.ts +2 -1
- package/Buffers/storageBuffer.js +3 -2
- package/Buffers/storageBuffer.js.map +1 -1
- package/Cameras/Inputs/followCameraMouseWheelInput.js +12 -9
- package/Cameras/Inputs/followCameraMouseWheelInput.js.map +1 -1
- package/Cameras/Inputs/followCameraPointersInput.js +28 -9
- package/Cameras/Inputs/followCameraPointersInput.js.map +1 -1
- package/Cameras/arcRotateCamera.js +1 -1
- package/Cameras/arcRotateCamera.js.map +1 -1
- package/Cameras/followCameraInputsManager.js +2 -1
- package/Cameras/followCameraInputsManager.js.map +1 -1
- package/Debug/skeletonViewer.js +2 -1
- package/Debug/skeletonViewer.js.map +1 -1
- package/Engines/Extensions/engine.storageBuffer.d.ts +2 -1
- package/Engines/Extensions/engine.storageBuffer.js.map +1 -1
- package/Engines/Processors/shaderCodeInliner.js +15 -14
- package/Engines/Processors/shaderCodeInliner.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.computeShader.js +3 -2
- package/Engines/WebGPU/Extensions/engine.computeShader.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.storageBuffer.js +14 -5
- package/Engines/WebGPU/Extensions/engine.storageBuffer.js.map +1 -1
- package/Engines/WebGPU/webgpuShaderProcessor.js +2 -1
- package/Engines/WebGPU/webgpuShaderProcessor.js.map +1 -1
- package/Engines/WebGPU/webgpuTintWASM.js +3 -2
- package/Engines/WebGPU/webgpuTintWASM.js.map +1 -1
- package/Engines/engine.d.ts +2 -4
- package/Engines/engine.js.map +1 -1
- package/Engines/nativeEngine.js +4 -2
- package/Engines/nativeEngine.js.map +1 -1
- package/Engines/thinEngine.js +4 -4
- package/Engines/thinEngine.js.map +1 -1
- package/Engines/webgpuEngine.js +75 -46
- package/Engines/webgpuEngine.js.map +1 -1
- package/FlowGraph/Blocks/Execution/flowGraphConsoleLogBlock.js +2 -1
- package/FlowGraph/Blocks/Execution/flowGraphConsoleLogBlock.js.map +1 -1
- package/FlowGraph/flowGraphBlock.js +1 -21
- package/FlowGraph/flowGraphBlock.js.map +1 -1
- package/FlowGraph/flowGraphExecutionBlock.d.ts +1 -0
- package/FlowGraph/flowGraphExecutionBlock.js +20 -0
- package/FlowGraph/flowGraphExecutionBlock.js.map +1 -1
- package/Gizmos/axisScaleGizmo.d.ts +1 -0
- package/Gizmos/axisScaleGizmo.js +12 -0
- package/Gizmos/axisScaleGizmo.js.map +1 -1
- package/Gizmos/lightGizmo.js +2 -1
- package/Gizmos/lightGizmo.js.map +1 -1
- package/Gizmos/rotationGizmo.js +1 -1
- package/Gizmos/rotationGizmo.js.map +1 -1
- package/Lights/Shadows/cascadedShadowGenerator.js +1 -1
- package/Lights/Shadows/cascadedShadowGenerator.js.map +1 -1
- package/Materials/Node/Blocks/Dual/lightBlock.js +2 -1
- package/Materials/Node/Blocks/Dual/lightBlock.js.map +1 -1
- package/Materials/Node/Blocks/Dual/reflectionTextureBlock.js +3 -2
- package/Materials/Node/Blocks/Dual/reflectionTextureBlock.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/fragDepthBlock.js +2 -1
- package/Materials/Node/Blocks/Fragment/fragDepthBlock.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/heightToNormalBlock.js +2 -1
- package/Materials/Node/Blocks/Fragment/heightToNormalBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/anisotropyBlock.js +2 -1
- package/Materials/Node/Blocks/PBR/anisotropyBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js +3 -2
- package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/reflectionBlock.js +2 -1
- package/Materials/Node/Blocks/PBR/reflectionBlock.js.map +1 -1
- package/Materials/Node/nodeMaterial.js +9 -8
- package/Materials/Node/nodeMaterial.js.map +1 -1
- package/Materials/Node/nodeMaterialBlock.js +2 -1
- package/Materials/Node/nodeMaterialBlock.js.map +1 -1
- package/Materials/Textures/renderTargetTexture.js +1 -2
- package/Materials/Textures/renderTargetTexture.js.map +1 -1
- package/Meshes/Builders/groundBuilder.d.ts +7 -1
- package/Meshes/Builders/groundBuilder.js +17 -8
- package/Meshes/Builders/groundBuilder.js.map +1 -1
- package/Meshes/Compression/dracoCompression.js.map +1 -1
- package/Meshes/Node/nodeGeometryBlock.js +2 -1
- package/Meshes/Node/nodeGeometryBlock.js.map +1 -1
- package/Meshes/mesh.d.ts +2 -1
- package/Meshes/mesh.js +3 -2
- package/Meshes/mesh.js.map +1 -1
- package/Misc/assetsManager.js +2 -2
- package/Misc/assetsManager.js.map +1 -1
- package/Misc/dds.js +1 -1
- package/Misc/dds.js.map +1 -1
- package/Misc/fileTools.js +4 -0
- package/Misc/fileTools.js.map +1 -1
- package/Misc/logger.d.ts +3 -3
- package/Misc/logger.js +8 -4
- package/Misc/logger.js.map +1 -1
- package/Misc/sceneSerializer.js +2 -1
- package/Misc/sceneSerializer.js.map +1 -1
- package/Misc/tools.d.ts +2 -7
- package/Misc/tools.js.map +1 -1
- package/Navigation/Plugins/recastJSPlugin.js +3 -3
- package/Navigation/Plugins/recastJSPlugin.js.map +1 -1
- package/Physics/v2/Plugins/havokPlugin.js +1 -1
- package/Physics/v2/Plugins/havokPlugin.js.map +1 -1
- package/Physics/v2/index.d.ts +1 -0
- package/Physics/v2/index.js +1 -0
- package/Physics/v2/index.js.map +1 -1
- package/Physics/v2/physicsBody.d.ts +5 -0
- package/Physics/v2/physicsBody.js +7 -0
- package/Physics/v2/physicsBody.js.map +1 -1
- package/Physics/v2/ragdoll.d.ts +102 -0
- package/Physics/v2/ragdoll.js +221 -0
- package/Physics/v2/ragdoll.js.map +1 -0
- package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.js +2 -2
- package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/ssrRenderingPipeline.js +3 -2
- package/PostProcesses/RenderPipeline/Pipelines/ssrRenderingPipeline.js.map +1 -1
- package/PostProcesses/screenSpaceCurvaturePostProcess.js +1 -1
- package/PostProcesses/screenSpaceCurvaturePostProcess.js.map +1 -1
- package/PostProcesses/screenSpaceReflectionPostProcess.js +3 -2
- package/PostProcesses/screenSpaceReflectionPostProcess.js.map +1 -1
- package/Rendering/GaussianSplatting/gaussianSplatting.js.map +1 -1
- package/Shaders/ShadersInclude/pbrBlockSubSurface.js +3 -2
- package/Shaders/ShadersInclude/pbrBlockSubSurface.js.map +1 -1
- package/XR/features/WebXRControllerPhysics.js +2 -2
- package/XR/features/WebXRControllerPhysics.js.map +1 -1
- package/XR/features/WebXRMeshDetector.js +2 -1
- package/XR/features/WebXRMeshDetector.js.map +1 -1
- package/XR/features/WebXRWalkingLocomotion.js +1 -1
- package/XR/features/WebXRWalkingLocomotion.js.map +1 -1
- package/XR/motionController/webXRMotionControllerManager.js +1 -1
- package/XR/motionController/webXRMotionControllerManager.js.map +1 -1
- package/XR/webXRExperienceHelper.js +2 -2
- package/XR/webXRExperienceHelper.js.map +1 -1
- package/assetContainer.js +2 -2
- package/assetContainer.js.map +1 -1
- package/package.json +1 -1
- package/scene.d.ts +2 -4
- package/scene.js +2 -1
- package/scene.js.map +1 -1
|
@@ -3,6 +3,7 @@ import { serialize } from "../../Misc/decorators.js";
|
|
|
3
3
|
import { CameraInputTypes } from "../../Cameras/cameraInputsManager.js";
|
|
4
4
|
import { PointerEventTypes } from "../../Events/pointerEvents.js";
|
|
5
5
|
import { Tools } from "../../Misc/tools.js";
|
|
6
|
+
import { Logger } from "../../Misc/logger.js";
|
|
6
7
|
/**
|
|
7
8
|
* Manage the mouse wheel inputs to control a follow camera.
|
|
8
9
|
* @see https://doc.babylonjs.com/features/featuresDeepDive/cameras/customizingCameraInputs
|
|
@@ -47,15 +48,17 @@ export class FollowCameraMouseWheelInput {
|
|
|
47
48
|
let delta = 0;
|
|
48
49
|
const wheelDelta = Math.max(-1, Math.min(1, event.deltaY));
|
|
49
50
|
if (this.wheelDeltaPercentage) {
|
|
50
|
-
|
|
51
|
-
"
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
51
|
+
if (+this.axisControlRadius + +this.axisControlHeight + +this.axisControlRotation) {
|
|
52
|
+
Logger.Warn("wheelDeltaPercentage only usable when mouse wheel " +
|
|
53
|
+
"controls ONE axis. " +
|
|
54
|
+
"Currently enabled: " +
|
|
55
|
+
"axisControlRadius: " +
|
|
56
|
+
this.axisControlRadius +
|
|
57
|
+
", axisControlHeightOffset: " +
|
|
58
|
+
this.axisControlHeight +
|
|
59
|
+
", axisControlRotationOffset: " +
|
|
60
|
+
this.axisControlRotation);
|
|
61
|
+
}
|
|
59
62
|
if (this.axisControlRadius) {
|
|
60
63
|
delta = wheelDelta * 0.01 * this.wheelDeltaPercentage * this.camera.radius;
|
|
61
64
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"followCameraMouseWheelInput.js","sourceRoot":"","sources":["../../../../../dev/core/src/Cameras/Inputs/followCameraMouseWheelInput.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAIlD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAErE,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAE/D,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"followCameraMouseWheelInput.js","sourceRoot":"","sources":["../../../../../dev/core/src/Cameras/Inputs/followCameraMouseWheelInput.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from \"../../types\";\r\nimport { serialize } from \"../../Misc/decorators\";\r\nimport type { EventState, Observer } from \"../../Misc/observable\";\r\nimport type { FollowCamera } from \"../../Cameras/followCamera\";\r\nimport type { ICameraInput } from \"../../Cameras/cameraInputsManager\";\r\nimport { CameraInputTypes } from \"../../Cameras/cameraInputsManager\";\r\nimport type { PointerInfo } from \"../../Events/pointerEvents\";\r\nimport { PointerEventTypes } from \"../../Events/pointerEvents\";\r\nimport type { IWheelEvent } from \"../../Events/deviceInputEvents\";\r\nimport { Tools } from \"../../Misc/tools\";\r\nimport { Logger } from \"core/Misc/logger\";\r\n\r\n/**\r\n * Manage the mouse wheel inputs to control a follow camera.\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/cameras/customizingCameraInputs\r\n */\r\nexport class FollowCameraMouseWheelInput implements ICameraInput<FollowCamera> {\r\n /**\r\n * Defines the camera the input is attached to.\r\n */\r\n public camera: FollowCamera;\r\n\r\n /**\r\n * Moue wheel controls zoom. (Mouse wheel modifies camera.radius value.)\r\n */\r\n @serialize()\r\n public axisControlRadius: boolean = true;\r\n\r\n /**\r\n * Moue wheel controls height. (Mouse wheel modifies camera.heightOffset value.)\r\n */\r\n @serialize()\r\n public axisControlHeight: boolean = false;\r\n\r\n /**\r\n * Moue wheel controls angle. (Mouse wheel modifies camera.rotationOffset value.)\r\n */\r\n @serialize()\r\n public axisControlRotation: boolean = false;\r\n\r\n /**\r\n * Gets or Set the mouse wheel precision or how fast is the camera moves in\r\n * relation to mouseWheel events.\r\n */\r\n @serialize()\r\n public wheelPrecision = 3.0;\r\n\r\n /**\r\n * wheelDeltaPercentage will be used instead of wheelPrecision if different from 0.\r\n * It defines the percentage of current camera.radius to use as delta when wheel is used.\r\n */\r\n @serialize()\r\n public wheelDeltaPercentage = 0;\r\n\r\n private _wheel: Nullable<(p: PointerInfo, s: EventState) => void>;\r\n private _observer: Nullable<Observer<PointerInfo>>;\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 this._wheel = (p) => {\r\n // sanity check - this should be a PointerWheel event.\r\n if (p.type !== PointerEventTypes.POINTERWHEEL) {\r\n return;\r\n }\r\n const event = <IWheelEvent>p.event;\r\n let delta = 0;\r\n\r\n const wheelDelta = Math.max(-1, Math.min(1, event.deltaY));\r\n if (this.wheelDeltaPercentage) {\r\n if (+this.axisControlRadius + +this.axisControlHeight + +this.axisControlRotation) {\r\n Logger.Warn(\r\n \"wheelDeltaPercentage only usable when mouse wheel \" +\r\n \"controls ONE axis. \" +\r\n \"Currently enabled: \" +\r\n \"axisControlRadius: \" +\r\n this.axisControlRadius +\r\n \", axisControlHeightOffset: \" +\r\n this.axisControlHeight +\r\n \", axisControlRotationOffset: \" +\r\n this.axisControlRotation\r\n );\r\n }\r\n\r\n if (this.axisControlRadius) {\r\n delta = wheelDelta * 0.01 * this.wheelDeltaPercentage * this.camera.radius;\r\n } else if (this.axisControlHeight) {\r\n delta = wheelDelta * 0.01 * this.wheelDeltaPercentage * this.camera.heightOffset;\r\n } else if (this.axisControlRotation) {\r\n delta = wheelDelta * 0.01 * this.wheelDeltaPercentage * this.camera.rotationOffset;\r\n }\r\n } else {\r\n delta = wheelDelta * this.wheelPrecision;\r\n }\r\n\r\n if (delta) {\r\n if (this.axisControlRadius) {\r\n this.camera.radius += delta;\r\n } else if (this.axisControlHeight) {\r\n this.camera.heightOffset -= delta;\r\n } else if (this.axisControlRotation) {\r\n this.camera.rotationOffset -= delta;\r\n }\r\n }\r\n\r\n if (event.preventDefault) {\r\n if (!noPreventDefault) {\r\n event.preventDefault();\r\n }\r\n }\r\n };\r\n\r\n this._observer = this.camera.getScene()._inputManager._addCameraPointerObserver(this._wheel, PointerEventTypes.POINTERWHEEL);\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 if (this._observer) {\r\n this.camera.getScene()._inputManager._removeCameraPointerObserver(this._observer);\r\n this._observer = null;\r\n this._wheel = 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 \"ArcRotateCameraMouseWheelInput\";\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 \"mousewheel\";\r\n }\r\n}\r\n\r\n(<any>CameraInputTypes)[\"FollowCameraMouseWheelInput\"] = FollowCameraMouseWheelInput;\r\n"]}
|
|
@@ -2,6 +2,7 @@ import { __decorate } from "../../tslib.es6.js";
|
|
|
2
2
|
import { serialize } from "../../Misc/decorators.js";
|
|
3
3
|
import { CameraInputTypes } from "../../Cameras/cameraInputsManager.js";
|
|
4
4
|
import { BaseCameraPointersInput } from "../../Cameras/Inputs/BaseCameraPointersInput.js";
|
|
5
|
+
import { Logger } from "../../Misc/logger.js";
|
|
5
6
|
/**
|
|
6
7
|
* Manage the pointers inputs to control an follow camera.
|
|
7
8
|
* @see https://doc.babylonjs.com/features/featuresDeepDive/cameras/customizingCameraInputs
|
|
@@ -145,15 +146,33 @@ export class FollowCameraPointersInput extends BaseCameraPointersInput {
|
|
|
145
146
|
return;
|
|
146
147
|
}
|
|
147
148
|
const warn = "It probably only makes sense to control ONE camera " + "property with each pointer axis. Set 'warningEnable = false' " + "if you are sure. Currently enabled: ";
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
149
|
+
if (+this.axisXControlRotation + +this.axisXControlHeight + +this.axisXControlRadius <= 1) {
|
|
150
|
+
Logger.Warn(warn +
|
|
151
|
+
"axisXControlRotation: " +
|
|
152
|
+
this.axisXControlRotation +
|
|
153
|
+
", axisXControlHeight: " +
|
|
154
|
+
this.axisXControlHeight +
|
|
155
|
+
", axisXControlRadius: " +
|
|
156
|
+
this.axisXControlRadius);
|
|
157
|
+
}
|
|
158
|
+
if (+this.axisYControlRotation + +this.axisYControlHeight + +this.axisYControlRadius <= 1) {
|
|
159
|
+
Logger.Warn(warn +
|
|
160
|
+
"axisYControlRotation: " +
|
|
161
|
+
this.axisYControlRotation +
|
|
162
|
+
", axisYControlHeight: " +
|
|
163
|
+
this.axisYControlHeight +
|
|
164
|
+
", axisYControlRadius: " +
|
|
165
|
+
this.axisYControlRadius);
|
|
166
|
+
}
|
|
167
|
+
if (+this.axisPinchControlRotation + +this.axisPinchControlHeight + +this.axisPinchControlRadius <= 1) {
|
|
168
|
+
Logger.Warn(warn +
|
|
169
|
+
"axisPinchControlRotation: " +
|
|
170
|
+
this.axisPinchControlRotation +
|
|
171
|
+
", axisPinchControlHeight: " +
|
|
172
|
+
this.axisPinchControlHeight +
|
|
173
|
+
", axisPinchControlRadius: " +
|
|
174
|
+
this.axisPinchControlRadius);
|
|
175
|
+
}
|
|
157
176
|
}
|
|
158
177
|
}
|
|
159
178
|
__decorate([
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"followCameraPointersInput.js","sourceRoot":"","sources":["../../../../../dev/core/src/Cameras/Inputs/followCameraPointersInput.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from \"../../types\";\r\nimport { serialize } from \"../../Misc/decorators\";\r\nimport type { FollowCamera } from \"../../Cameras/followCamera\";\r\nimport { CameraInputTypes } from \"../../Cameras/cameraInputsManager\";\r\nimport { BaseCameraPointersInput } from \"../../Cameras/Inputs/BaseCameraPointersInput\";\r\nimport type { PointerTouch } from \"../../Events/pointerEvents\";\r\n\r\n/**\r\n * Manage the pointers inputs to control an follow camera.\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/cameras/customizingCameraInputs\r\n */\r\nexport class FollowCameraPointersInput extends BaseCameraPointersInput {\r\n /**\r\n * Defines the camera the input is attached to.\r\n */\r\n public camera: FollowCamera;\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 \"FollowCameraPointersInput\";\r\n }\r\n\r\n /**\r\n * Defines the pointer angular sensibility along the X axis or how fast is\r\n * the camera rotating.\r\n * A negative number will reverse the axis direction.\r\n */\r\n @serialize()\r\n public angularSensibilityX = 1;\r\n\r\n /**\r\n * Defines the pointer angular sensibility along the Y axis or how fast is\r\n * the camera rotating.\r\n * A negative number will reverse the axis direction.\r\n */\r\n @serialize()\r\n public angularSensibilityY = 1;\r\n\r\n /**\r\n * Defines the pointer pinch precision or how fast is the camera zooming.\r\n * A negative number will reverse the axis direction.\r\n */\r\n @serialize()\r\n public pinchPrecision = 10000.0;\r\n\r\n /**\r\n * pinchDeltaPercentage will be used instead of pinchPrecision if different\r\n * from 0.\r\n * It defines the percentage of current camera.radius to use as delta when\r\n * pinch zoom is used.\r\n */\r\n @serialize()\r\n public pinchDeltaPercentage = 0;\r\n\r\n /**\r\n * Pointer X axis controls zoom. (X axis modifies camera.radius value.)\r\n */\r\n @serialize()\r\n public axisXControlRadius: boolean = false;\r\n\r\n /**\r\n * Pointer X axis controls height. (X axis modifies camera.heightOffset value.)\r\n */\r\n @serialize()\r\n public axisXControlHeight: boolean = false;\r\n\r\n /**\r\n * Pointer X axis controls angle. (X axis modifies camera.rotationOffset value.)\r\n */\r\n @serialize()\r\n public axisXControlRotation: boolean = true;\r\n\r\n /**\r\n * Pointer Y axis controls zoom. (Y axis modifies camera.radius value.)\r\n */\r\n @serialize()\r\n public axisYControlRadius: boolean = false;\r\n\r\n /**\r\n * Pointer Y axis controls height. (Y axis modifies camera.heightOffset value.)\r\n */\r\n @serialize()\r\n public axisYControlHeight: boolean = true;\r\n\r\n /**\r\n * Pointer Y axis controls angle. (Y axis modifies camera.rotationOffset value.)\r\n */\r\n @serialize()\r\n public axisYControlRotation: boolean = false;\r\n\r\n /**\r\n * Pinch controls zoom. (Pinch modifies camera.radius value.)\r\n */\r\n @serialize()\r\n public axisPinchControlRadius: boolean = true;\r\n\r\n /**\r\n * Pinch controls height. (Pinch modifies camera.heightOffset value.)\r\n */\r\n @serialize()\r\n public axisPinchControlHeight: boolean = false;\r\n\r\n /**\r\n * Pinch controls angle. (Pinch modifies camera.rotationOffset value.)\r\n */\r\n @serialize()\r\n public axisPinchControlRotation: boolean = false;\r\n\r\n /**\r\n * Log error messages if basic misconfiguration has occurred.\r\n */\r\n public warningEnable: boolean = true;\r\n\r\n public onTouch(pointA: Nullable<PointerTouch>, offsetX: number, offsetY: number): void {\r\n this._warning();\r\n\r\n if (this.axisXControlRotation) {\r\n this.camera.rotationOffset += offsetX / this.angularSensibilityX;\r\n } else if (this.axisYControlRotation) {\r\n this.camera.rotationOffset += offsetY / this.angularSensibilityX;\r\n }\r\n\r\n if (this.axisXControlHeight) {\r\n this.camera.heightOffset += offsetX / this.angularSensibilityY;\r\n } else if (this.axisYControlHeight) {\r\n this.camera.heightOffset += offsetY / this.angularSensibilityY;\r\n }\r\n\r\n if (this.axisXControlRadius) {\r\n this.camera.radius -= offsetX / this.angularSensibilityY;\r\n } else if (this.axisYControlRadius) {\r\n this.camera.radius -= offsetY / this.angularSensibilityY;\r\n }\r\n }\r\n\r\n public onMultiTouch(\r\n pointA: Nullable<PointerTouch>,\r\n pointB: Nullable<PointerTouch>,\r\n previousPinchSquaredDistance: number,\r\n pinchSquaredDistance: number,\r\n previousMultiTouchPanPosition: Nullable<PointerTouch>,\r\n multiTouchPanPosition: Nullable<PointerTouch>\r\n ): void {\r\n if (previousPinchSquaredDistance === 0 && previousMultiTouchPanPosition === null) {\r\n // First time this method is called for new pinch.\r\n // Next time this is called there will be a\r\n // previousPinchSquaredDistance and pinchSquaredDistance to compare.\r\n return;\r\n }\r\n if (pinchSquaredDistance === 0 && multiTouchPanPosition === null) {\r\n // Last time this method is called at the end of a pinch.\r\n return;\r\n }\r\n let pinchDelta = (pinchSquaredDistance - previousPinchSquaredDistance) / ((this.pinchPrecision * (this.angularSensibilityX + this.angularSensibilityY)) / 2);\r\n\r\n if (this.pinchDeltaPercentage) {\r\n pinchDelta *= 0.01 * this.pinchDeltaPercentage;\r\n if (this.axisPinchControlRotation) {\r\n this.camera.rotationOffset += pinchDelta * this.camera.rotationOffset;\r\n }\r\n if (this.axisPinchControlHeight) {\r\n this.camera.heightOffset += pinchDelta * this.camera.heightOffset;\r\n }\r\n if (this.axisPinchControlRadius) {\r\n this.camera.radius -= pinchDelta * this.camera.radius;\r\n }\r\n } else {\r\n if (this.axisPinchControlRotation) {\r\n this.camera.rotationOffset += pinchDelta;\r\n }\r\n\r\n if (this.axisPinchControlHeight) {\r\n this.camera.heightOffset += pinchDelta;\r\n }\r\n\r\n if (this.axisPinchControlRadius) {\r\n this.camera.radius -= pinchDelta;\r\n }\r\n }\r\n }\r\n\r\n /* Check for obvious misconfiguration. */\r\n private _warningCounter: number = 0;\r\n private _warning(): void {\r\n if (!this.warningEnable || this._warningCounter++ % 100 !== 0) {\r\n return;\r\n }\r\n const warn =\r\n \"It probably only makes sense to control ONE camera \" + \"property with each pointer axis. Set 'warningEnable = false' \" + \"if you are sure. Currently enabled: \";\r\n\r\n console.assert(\r\n <number>(<unknown>this.axisXControlRotation) + <number>(<unknown>this.axisXControlHeight) + <number>(<unknown>this.axisXControlRadius) <= 1,\r\n warn + \"axisXControlRotation: \" + this.axisXControlRotation + \", axisXControlHeight: \" + this.axisXControlHeight + \", axisXControlRadius: \" + this.axisXControlRadius\r\n );\r\n console.assert(\r\n <number>(<unknown>this.axisYControlRotation) + <number>(<unknown>this.axisYControlHeight) + <number>(<unknown>this.axisYControlRadius) <= 1,\r\n warn + \"axisYControlRotation: \" + this.axisYControlRotation + \", axisYControlHeight: \" + this.axisYControlHeight + \", axisYControlRadius: \" + this.axisYControlRadius\r\n );\r\n console.assert(\r\n <number>(<unknown>this.axisPinchControlRotation) + <number>(<unknown>this.axisPinchControlHeight) + <number>(<unknown>this.axisPinchControlRadius) <= 1,\r\n warn +\r\n \"axisPinchControlRotation: \" +\r\n this.axisPinchControlRotation +\r\n \", axisPinchControlHeight: \" +\r\n this.axisPinchControlHeight +\r\n \", axisPinchControlRadius: \" +\r\n this.axisPinchControlRadius\r\n );\r\n }\r\n}\r\n(<any>CameraInputTypes)[\"FollowCameraPointersInput\"] = FollowCameraPointersInput;\r\n"]}
|
|
1
|
+
{"version":3,"file":"followCameraPointersInput.js","sourceRoot":"","sources":["../../../../../dev/core/src/Cameras/Inputs/followCameraPointersInput.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from \"../../types\";\r\nimport { serialize } from \"../../Misc/decorators\";\r\nimport type { FollowCamera } from \"../../Cameras/followCamera\";\r\nimport { CameraInputTypes } from \"../../Cameras/cameraInputsManager\";\r\nimport { BaseCameraPointersInput } from \"../../Cameras/Inputs/BaseCameraPointersInput\";\r\nimport type { PointerTouch } from \"../../Events/pointerEvents\";\r\nimport { Logger } from \"core/Misc/logger\";\r\n\r\n/**\r\n * Manage the pointers inputs to control an follow camera.\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/cameras/customizingCameraInputs\r\n */\r\nexport class FollowCameraPointersInput extends BaseCameraPointersInput {\r\n /**\r\n * Defines the camera the input is attached to.\r\n */\r\n public camera: FollowCamera;\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 \"FollowCameraPointersInput\";\r\n }\r\n\r\n /**\r\n * Defines the pointer angular sensibility along the X axis or how fast is\r\n * the camera rotating.\r\n * A negative number will reverse the axis direction.\r\n */\r\n @serialize()\r\n public angularSensibilityX = 1;\r\n\r\n /**\r\n * Defines the pointer angular sensibility along the Y axis or how fast is\r\n * the camera rotating.\r\n * A negative number will reverse the axis direction.\r\n */\r\n @serialize()\r\n public angularSensibilityY = 1;\r\n\r\n /**\r\n * Defines the pointer pinch precision or how fast is the camera zooming.\r\n * A negative number will reverse the axis direction.\r\n */\r\n @serialize()\r\n public pinchPrecision = 10000.0;\r\n\r\n /**\r\n * pinchDeltaPercentage will be used instead of pinchPrecision if different\r\n * from 0.\r\n * It defines the percentage of current camera.radius to use as delta when\r\n * pinch zoom is used.\r\n */\r\n @serialize()\r\n public pinchDeltaPercentage = 0;\r\n\r\n /**\r\n * Pointer X axis controls zoom. (X axis modifies camera.radius value.)\r\n */\r\n @serialize()\r\n public axisXControlRadius: boolean = false;\r\n\r\n /**\r\n * Pointer X axis controls height. (X axis modifies camera.heightOffset value.)\r\n */\r\n @serialize()\r\n public axisXControlHeight: boolean = false;\r\n\r\n /**\r\n * Pointer X axis controls angle. (X axis modifies camera.rotationOffset value.)\r\n */\r\n @serialize()\r\n public axisXControlRotation: boolean = true;\r\n\r\n /**\r\n * Pointer Y axis controls zoom. (Y axis modifies camera.radius value.)\r\n */\r\n @serialize()\r\n public axisYControlRadius: boolean = false;\r\n\r\n /**\r\n * Pointer Y axis controls height. (Y axis modifies camera.heightOffset value.)\r\n */\r\n @serialize()\r\n public axisYControlHeight: boolean = true;\r\n\r\n /**\r\n * Pointer Y axis controls angle. (Y axis modifies camera.rotationOffset value.)\r\n */\r\n @serialize()\r\n public axisYControlRotation: boolean = false;\r\n\r\n /**\r\n * Pinch controls zoom. (Pinch modifies camera.radius value.)\r\n */\r\n @serialize()\r\n public axisPinchControlRadius: boolean = true;\r\n\r\n /**\r\n * Pinch controls height. (Pinch modifies camera.heightOffset value.)\r\n */\r\n @serialize()\r\n public axisPinchControlHeight: boolean = false;\r\n\r\n /**\r\n * Pinch controls angle. (Pinch modifies camera.rotationOffset value.)\r\n */\r\n @serialize()\r\n public axisPinchControlRotation: boolean = false;\r\n\r\n /**\r\n * Log error messages if basic misconfiguration has occurred.\r\n */\r\n public warningEnable: boolean = true;\r\n\r\n public onTouch(pointA: Nullable<PointerTouch>, offsetX: number, offsetY: number): void {\r\n this._warning();\r\n\r\n if (this.axisXControlRotation) {\r\n this.camera.rotationOffset += offsetX / this.angularSensibilityX;\r\n } else if (this.axisYControlRotation) {\r\n this.camera.rotationOffset += offsetY / this.angularSensibilityX;\r\n }\r\n\r\n if (this.axisXControlHeight) {\r\n this.camera.heightOffset += offsetX / this.angularSensibilityY;\r\n } else if (this.axisYControlHeight) {\r\n this.camera.heightOffset += offsetY / this.angularSensibilityY;\r\n }\r\n\r\n if (this.axisXControlRadius) {\r\n this.camera.radius -= offsetX / this.angularSensibilityY;\r\n } else if (this.axisYControlRadius) {\r\n this.camera.radius -= offsetY / this.angularSensibilityY;\r\n }\r\n }\r\n\r\n public onMultiTouch(\r\n pointA: Nullable<PointerTouch>,\r\n pointB: Nullable<PointerTouch>,\r\n previousPinchSquaredDistance: number,\r\n pinchSquaredDistance: number,\r\n previousMultiTouchPanPosition: Nullable<PointerTouch>,\r\n multiTouchPanPosition: Nullable<PointerTouch>\r\n ): void {\r\n if (previousPinchSquaredDistance === 0 && previousMultiTouchPanPosition === null) {\r\n // First time this method is called for new pinch.\r\n // Next time this is called there will be a\r\n // previousPinchSquaredDistance and pinchSquaredDistance to compare.\r\n return;\r\n }\r\n if (pinchSquaredDistance === 0 && multiTouchPanPosition === null) {\r\n // Last time this method is called at the end of a pinch.\r\n return;\r\n }\r\n let pinchDelta = (pinchSquaredDistance - previousPinchSquaredDistance) / ((this.pinchPrecision * (this.angularSensibilityX + this.angularSensibilityY)) / 2);\r\n\r\n if (this.pinchDeltaPercentage) {\r\n pinchDelta *= 0.01 * this.pinchDeltaPercentage;\r\n if (this.axisPinchControlRotation) {\r\n this.camera.rotationOffset += pinchDelta * this.camera.rotationOffset;\r\n }\r\n if (this.axisPinchControlHeight) {\r\n this.camera.heightOffset += pinchDelta * this.camera.heightOffset;\r\n }\r\n if (this.axisPinchControlRadius) {\r\n this.camera.radius -= pinchDelta * this.camera.radius;\r\n }\r\n } else {\r\n if (this.axisPinchControlRotation) {\r\n this.camera.rotationOffset += pinchDelta;\r\n }\r\n\r\n if (this.axisPinchControlHeight) {\r\n this.camera.heightOffset += pinchDelta;\r\n }\r\n\r\n if (this.axisPinchControlRadius) {\r\n this.camera.radius -= pinchDelta;\r\n }\r\n }\r\n }\r\n\r\n /* Check for obvious misconfiguration. */\r\n private _warningCounter: number = 0;\r\n private _warning(): void {\r\n if (!this.warningEnable || this._warningCounter++ % 100 !== 0) {\r\n return;\r\n }\r\n const warn =\r\n \"It probably only makes sense to control ONE camera \" + \"property with each pointer axis. Set 'warningEnable = false' \" + \"if you are sure. Currently enabled: \";\r\n\r\n if (+this.axisXControlRotation + +this.axisXControlHeight + +this.axisXControlRadius <= 1) {\r\n Logger.Warn(\r\n warn +\r\n \"axisXControlRotation: \" +\r\n this.axisXControlRotation +\r\n \", axisXControlHeight: \" +\r\n this.axisXControlHeight +\r\n \", axisXControlRadius: \" +\r\n this.axisXControlRadius\r\n );\r\n }\r\n if (+this.axisYControlRotation + +this.axisYControlHeight + +this.axisYControlRadius <= 1) {\r\n Logger.Warn(\r\n warn +\r\n \"axisYControlRotation: \" +\r\n this.axisYControlRotation +\r\n \", axisYControlHeight: \" +\r\n this.axisYControlHeight +\r\n \", axisYControlRadius: \" +\r\n this.axisYControlRadius\r\n );\r\n }\r\n if (+this.axisPinchControlRotation + +this.axisPinchControlHeight + +this.axisPinchControlRadius <= 1) {\r\n Logger.Warn(\r\n warn +\r\n \"axisPinchControlRotation: \" +\r\n this.axisPinchControlRotation +\r\n \", axisPinchControlHeight: \" +\r\n this.axisPinchControlHeight +\r\n \", axisPinchControlRadius: \" +\r\n this.axisPinchControlRadius\r\n );\r\n }\r\n }\r\n}\r\n(<any>CameraInputTypes)[\"FollowCameraPointersInput\"] = FollowCameraPointersInput;\r\n"]}
|
|
@@ -699,7 +699,7 @@ export class ArcRotateCamera extends TargetCamera {
|
|
|
699
699
|
const directionModifier = this.invertRotation ? -1 : 1;
|
|
700
700
|
const handednessMultiplier = this._calculateHandednessMultiplier();
|
|
701
701
|
let inertialAlphaOffset = this.inertialAlphaOffset * handednessMultiplier;
|
|
702
|
-
if (this.beta
|
|
702
|
+
if (this.beta < 0) {
|
|
703
703
|
inertialAlphaOffset *= -1;
|
|
704
704
|
}
|
|
705
705
|
this.alpha += inertialAlphaOffset * directionModifier;
|