@onerjs/core 8.30.9 → 8.31.1
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/animationGroup.js +1 -4
- package/Animations/animationGroup.js.map +1 -1
- package/Behaviors/Cameras/interpolatingBehavior.d.ts +52 -0
- package/Behaviors/Cameras/interpolatingBehavior.js +105 -0
- package/Behaviors/Cameras/interpolatingBehavior.js.map +1 -0
- package/Cameras/Inputs/arcRotateCameraPointersInput.d.ts +5 -20
- package/Cameras/Inputs/arcRotateCameraPointersInput.js +9 -69
- package/Cameras/Inputs/arcRotateCameraPointersInput.js.map +1 -1
- package/Cameras/Inputs/geospatialCameraKeyboardInput.d.ts +81 -0
- package/Cameras/Inputs/geospatialCameraKeyboardInput.js +223 -0
- package/Cameras/Inputs/geospatialCameraKeyboardInput.js.map +1 -0
- package/Cameras/Inputs/geospatialCameraMouseWheelInput.js +1 -1
- package/Cameras/Inputs/geospatialCameraMouseWheelInput.js.map +1 -1
- package/Cameras/Inputs/geospatialCameraPointersInput.d.ts +16 -21
- package/Cameras/Inputs/geospatialCameraPointersInput.js +43 -73
- package/Cameras/Inputs/geospatialCameraPointersInput.js.map +1 -1
- package/Cameras/Inputs/orbitCameraPointersInput.d.ts +49 -0
- package/Cameras/Inputs/orbitCameraPointersInput.js +105 -0
- package/Cameras/Inputs/orbitCameraPointersInput.js.map +1 -0
- package/Cameras/Limits/geospatialLimits.d.ts +60 -0
- package/Cameras/Limits/geospatialLimits.js +89 -0
- package/Cameras/Limits/geospatialLimits.js.map +1 -0
- package/Cameras/cameraMovement.d.ts +150 -0
- package/Cameras/cameraMovement.js +190 -0
- package/Cameras/cameraMovement.js.map +1 -0
- package/Cameras/geospatialCamera.d.ts +53 -49
- package/Cameras/geospatialCamera.js +172 -192
- package/Cameras/geospatialCamera.js.map +1 -1
- package/Cameras/geospatialCameraInputsManager.d.ts +5 -0
- package/Cameras/geospatialCameraInputsManager.js +9 -0
- package/Cameras/geospatialCameraInputsManager.js.map +1 -1
- package/Cameras/geospatialCameraMovement.d.ts +66 -0
- package/Cameras/geospatialCameraMovement.js +199 -0
- package/Cameras/geospatialCameraMovement.js.map +1 -0
- package/Engines/Native/nativeInterfaces.d.ts +14 -6
- package/Engines/Native/nativeInterfaces.js +6 -1
- package/Engines/Native/nativeInterfaces.js.map +1 -1
- package/Engines/nativeEngine.js +2 -2
- package/Engines/nativeEngine.js.map +1 -1
- package/FlowGraph/Blocks/Data/Math/flowGraphVectorMathBlocks.js +1 -1
- package/FlowGraph/Blocks/Data/Math/flowGraphVectorMathBlocks.js.map +1 -1
- package/FlowGraph/flowGraphMath.d.ts +25 -0
- package/FlowGraph/flowGraphMath.js +40 -0
- package/FlowGraph/flowGraphMath.js.map +1 -0
- package/Materials/GaussianSplatting/gaussianSplattingMaterial.js +1 -1
- package/Materials/GaussianSplatting/gaussianSplattingMaterial.js.map +1 -1
- package/Materials/Node/Blocks/GaussianSplatting/gaussianSplattingBlock.js +5 -1
- package/Materials/Node/Blocks/GaussianSplatting/gaussianSplattingBlock.js.map +1 -1
- package/Materials/Node/Blocks/GaussianSplatting/splatReaderBlock.js +6 -5
- package/Materials/Node/Blocks/GaussianSplatting/splatReaderBlock.js.map +1 -1
- package/Materials/shaderMaterial.js +4 -2
- package/Materials/shaderMaterial.js.map +1 -1
- package/Maths/math.vector.functions.d.ts +5 -24
- package/Maths/math.vector.functions.js +32 -35
- package/Maths/math.vector.functions.js.map +1 -1
- package/Meshes/GaussianSplatting/gaussianSplattingMesh.d.ts +1 -0
- package/Meshes/GaussianSplatting/gaussianSplattingMesh.js +51 -16
- package/Meshes/GaussianSplatting/gaussianSplattingMesh.js.map +1 -1
- package/Meshes/csg2.js +1 -1
- package/Meshes/csg2.js.map +1 -1
- package/Meshes/thinInstanceMesh.js +15 -0
- package/Meshes/thinInstanceMesh.js.map +1 -1
- package/Misc/fileTools.js.map +1 -1
- package/Misc/tools.d.ts +3 -0
- package/Misc/tools.js +43 -4
- package/Misc/tools.js.map +1 -1
- package/Particles/Node/Blocks/Update/basicColorUpdateBlock.d.ts +1 -1
- package/Particles/Node/Blocks/Update/basicColorUpdateBlock.js +1 -1
- package/Particles/Node/Blocks/Update/basicColorUpdateBlock.js.map +1 -1
- package/Particles/Node/Blocks/Update/basicPositionUpdateBlock.d.ts +1 -1
- package/Particles/Node/Blocks/Update/basicPositionUpdateBlock.js +3 -3
- package/Particles/Node/Blocks/Update/basicPositionUpdateBlock.js.map +1 -1
- package/Particles/Node/Blocks/Update/updateSizeBlock.d.ts +35 -0
- package/Particles/Node/Blocks/Update/updateSizeBlock.js +73 -0
- package/Particles/Node/Blocks/Update/updateSizeBlock.js.map +1 -0
- package/Particles/Node/Blocks/index.d.ts +1 -0
- package/Particles/Node/Blocks/index.js +1 -0
- package/Particles/Node/Blocks/index.js.map +1 -1
- package/Particles/Node/Blocks/particleInputBlock.js +1 -0
- package/Particles/Node/Blocks/particleInputBlock.js.map +1 -1
- package/Particles/Node/Blocks/particleRandomBlock.d.ts +5 -2
- package/Particles/Node/Blocks/particleRandomBlock.js +32 -14
- package/Particles/Node/Blocks/particleRandomBlock.js.map +1 -1
- package/Particles/Node/Blocks/systemBlock.d.ts +8 -0
- package/Particles/Node/Blocks/systemBlock.js +8 -0
- package/Particles/Node/Blocks/systemBlock.js.map +1 -1
- package/Particles/Node/Enums/nodeParticleContextualSources.d.ts +3 -1
- package/Particles/Node/Enums/nodeParticleContextualSources.js +2 -0
- package/Particles/Node/Enums/nodeParticleContextualSources.js.map +1 -1
- package/Particles/Node/nodeParticleBuildState.js +6 -4
- package/Particles/Node/nodeParticleBuildState.js.map +1 -1
- package/Particles/Node/nodeParticleSystemSet.helper.d.ts +0 -2
- package/Particles/Node/nodeParticleSystemSet.helper.js +279 -161
- package/Particles/Node/nodeParticleSystemSet.helper.js.map +1 -1
- package/Particles/particle.d.ts +4 -0
- package/Particles/particle.js +2 -0
- package/Particles/particle.js.map +1 -1
- package/Particles/thinParticleSystem.d.ts +3 -7
- package/Particles/thinParticleSystem.function.d.ts +1 -1
- package/Particles/thinParticleSystem.function.js +9 -6
- package/Particles/thinParticleSystem.function.js.map +1 -1
- package/Particles/thinParticleSystem.js +4 -6
- package/Particles/thinParticleSystem.js.map +1 -1
- package/Shaders/ShadersInclude/gaussianSplatting.js +5 -1
- package/Shaders/ShadersInclude/gaussianSplatting.js.map +1 -1
- package/Shaders/ShadersInclude/gaussianSplattingUboDeclaration.js +2 -1
- package/Shaders/ShadersInclude/gaussianSplattingUboDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/gaussianSplattingVertexDeclaration.js +1 -1
- package/Shaders/ShadersInclude/gaussianSplattingVertexDeclaration.js.map +1 -1
- package/Shaders/gaussianSplatting.vertex.js +3 -3
- package/Shaders/gaussianSplatting.vertex.js.map +1 -1
- package/Shaders/gaussianSplattingDepth.vertex.js +2 -2
- package/Shaders/gaussianSplattingDepth.vertex.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/gaussianSplatting.js +35 -1
- package/ShadersWGSL/ShadersInclude/gaussianSplatting.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/gaussianSplattingUboDeclaration.js +2 -1
- package/ShadersWGSL/ShadersInclude/gaussianSplattingUboDeclaration.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/gaussianSplattingVertexDeclaration.js +1 -2
- package/ShadersWGSL/ShadersInclude/gaussianSplattingVertexDeclaration.js.map +1 -1
- package/ShadersWGSL/gaussianSplatting.vertex.js +3 -3
- package/ShadersWGSL/gaussianSplatting.vertex.js.map +1 -1
- package/ShadersWGSL/gaussianSplattingDepth.vertex.js +2 -2
- package/ShadersWGSL/gaussianSplattingDepth.vertex.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import type { Nullable } from "../../types.js";
|
|
2
2
|
import type { ArcRotateCamera } from "../../Cameras/arcRotateCamera.js";
|
|
3
|
-
import {
|
|
3
|
+
import { OrbitCameraPointersInput } from "../../Cameras/Inputs/orbitCameraPointersInput.js";
|
|
4
4
|
import type { PointerTouch } from "../../Events/pointerEvents.js";
|
|
5
5
|
import type { IPointerEvent } from "../../Events/deviceInputEvents.js";
|
|
6
6
|
/**
|
|
7
7
|
* Manage the pointers inputs to control an arc rotate camera.
|
|
8
8
|
* @see https://doc.babylonjs.com/features/featuresDeepDive/cameras/customizingCameraInputs
|
|
9
9
|
*/
|
|
10
|
-
export declare class ArcRotateCameraPointersInput extends
|
|
10
|
+
export declare class ArcRotateCameraPointersInput extends OrbitCameraPointersInput {
|
|
11
11
|
/**
|
|
12
12
|
* Defines the camera the input is attached to.
|
|
13
13
|
*/
|
|
@@ -53,42 +53,27 @@ export declare class ArcRotateCameraPointersInput extends BaseCameraPointersInpu
|
|
|
53
53
|
* Overrides pinchDeltaPercentage and pinchPrecision.
|
|
54
54
|
*/
|
|
55
55
|
useNaturalPinchZoom: boolean;
|
|
56
|
-
/**
|
|
57
|
-
* Defines whether zoom (2 fingers pinch) is enabled through multitouch
|
|
58
|
-
*/
|
|
59
|
-
pinchZoom: boolean;
|
|
60
56
|
/**
|
|
61
57
|
* Defines the pointer panning sensibility or how fast is the camera moving.
|
|
62
58
|
*/
|
|
63
59
|
panningSensibility: number;
|
|
64
|
-
/**
|
|
65
|
-
* Defines whether panning (2 fingers swipe) is enabled through multitouch.
|
|
66
|
-
*/
|
|
67
|
-
multiTouchPanning: boolean;
|
|
68
|
-
/**
|
|
69
|
-
* Defines whether panning is enabled for both pan (2 fingers swipe) and
|
|
70
|
-
* zoom (pinch) through multitouch.
|
|
71
|
-
*/
|
|
72
|
-
multiTouchPanAndZoom: boolean;
|
|
73
60
|
/**
|
|
74
61
|
* Revers pinch action direction.
|
|
75
62
|
*/
|
|
76
63
|
pinchInwards: boolean;
|
|
77
64
|
private _isPanClick;
|
|
78
|
-
private _twoFingerActivityCount;
|
|
79
|
-
private _isPinching;
|
|
80
65
|
/**
|
|
81
66
|
* Move camera from multi touch panning positions.
|
|
82
67
|
* @param previousMultiTouchPanPosition
|
|
83
68
|
* @param multiTouchPanPosition
|
|
84
69
|
*/
|
|
85
|
-
|
|
70
|
+
protected _computeMultiTouchPanning(previousMultiTouchPanPosition: Nullable<PointerTouch>, multiTouchPanPosition: Nullable<PointerTouch>): void;
|
|
86
71
|
/**
|
|
87
|
-
* Move camera from pinch zoom distances.
|
|
72
|
+
* Move camera from multitouch (pinch) zoom distances.
|
|
88
73
|
* @param previousPinchSquaredDistance
|
|
89
74
|
* @param pinchSquaredDistance
|
|
90
75
|
*/
|
|
91
|
-
|
|
76
|
+
protected _computePinchZoom(previousPinchSquaredDistance: number, pinchSquaredDistance: number): void;
|
|
92
77
|
/**
|
|
93
78
|
* Called on pointer POINTERMOVE event if only a single touch is active.
|
|
94
79
|
* @param point current touch point
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { __decorate } from "../../tslib.es6.js";
|
|
2
2
|
import { serialize } from "../../Misc/decorators.js";
|
|
3
3
|
import { CameraInputTypes } from "../../Cameras/cameraInputsManager.js";
|
|
4
|
-
import {
|
|
4
|
+
import { OrbitCameraPointersInput } from "../../Cameras/Inputs/orbitCameraPointersInput.js";
|
|
5
5
|
/**
|
|
6
6
|
* Manage the pointers inputs to control an arc rotate camera.
|
|
7
7
|
* @see https://doc.babylonjs.com/features/featuresDeepDive/cameras/customizingCameraInputs
|
|
8
8
|
*/
|
|
9
|
-
export class ArcRotateCameraPointersInput extends
|
|
9
|
+
export class ArcRotateCameraPointersInput extends OrbitCameraPointersInput {
|
|
10
10
|
constructor() {
|
|
11
11
|
super(...arguments);
|
|
12
12
|
/**
|
|
@@ -41,30 +41,15 @@ export class ArcRotateCameraPointersInput extends BaseCameraPointersInput {
|
|
|
41
41
|
* Overrides pinchDeltaPercentage and pinchPrecision.
|
|
42
42
|
*/
|
|
43
43
|
this.useNaturalPinchZoom = false;
|
|
44
|
-
/**
|
|
45
|
-
* Defines whether zoom (2 fingers pinch) is enabled through multitouch
|
|
46
|
-
*/
|
|
47
|
-
this.pinchZoom = true;
|
|
48
44
|
/**
|
|
49
45
|
* Defines the pointer panning sensibility or how fast is the camera moving.
|
|
50
46
|
*/
|
|
51
47
|
this.panningSensibility = 1000.0;
|
|
52
|
-
/**
|
|
53
|
-
* Defines whether panning (2 fingers swipe) is enabled through multitouch.
|
|
54
|
-
*/
|
|
55
|
-
this.multiTouchPanning = true;
|
|
56
|
-
/**
|
|
57
|
-
* Defines whether panning is enabled for both pan (2 fingers swipe) and
|
|
58
|
-
* zoom (pinch) through multitouch.
|
|
59
|
-
*/
|
|
60
|
-
this.multiTouchPanAndZoom = true;
|
|
61
48
|
/**
|
|
62
49
|
* Revers pinch action direction.
|
|
63
50
|
*/
|
|
64
51
|
this.pinchInwards = true;
|
|
65
52
|
this._isPanClick = false;
|
|
66
|
-
this._twoFingerActivityCount = 0;
|
|
67
|
-
this._isPinching = false;
|
|
68
53
|
}
|
|
69
54
|
/**
|
|
70
55
|
* Gets the class name of the current input.
|
|
@@ -87,7 +72,7 @@ export class ArcRotateCameraPointersInput extends BaseCameraPointersInput {
|
|
|
87
72
|
}
|
|
88
73
|
}
|
|
89
74
|
/**
|
|
90
|
-
* Move camera from pinch zoom distances.
|
|
75
|
+
* Move camera from multitouch (pinch) zoom distances.
|
|
91
76
|
* @param previousPinchSquaredDistance
|
|
92
77
|
* @param pinchSquaredDistance
|
|
93
78
|
*/
|
|
@@ -139,44 +124,9 @@ export class ArcRotateCameraPointersInput extends BaseCameraPointersInput {
|
|
|
139
124
|
* @param multiTouchPanPosition multi-touch position in current step
|
|
140
125
|
*/
|
|
141
126
|
onMultiTouch(pointA, pointB, previousPinchSquaredDistance, pinchSquaredDistance, previousMultiTouchPanPosition, multiTouchPanPosition) {
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
// previousPinchSquaredDistance and pinchSquaredDistance to compare.
|
|
146
|
-
return;
|
|
147
|
-
}
|
|
148
|
-
if (pinchSquaredDistance === 0 && multiTouchPanPosition === null) {
|
|
149
|
-
// Last time this method is called at the end of a pinch.
|
|
150
|
-
return;
|
|
151
|
-
}
|
|
152
|
-
// Zoom and panning enabled together
|
|
153
|
-
if (this.multiTouchPanAndZoom) {
|
|
154
|
-
this._computePinchZoom(previousPinchSquaredDistance, pinchSquaredDistance);
|
|
155
|
-
this._computeMultiTouchPanning(previousMultiTouchPanPosition, multiTouchPanPosition);
|
|
156
|
-
// Zoom and panning enabled but only one at a time
|
|
157
|
-
}
|
|
158
|
-
else if (this.multiTouchPanning && this.pinchZoom) {
|
|
159
|
-
this._twoFingerActivityCount++;
|
|
160
|
-
if (this._isPinching ||
|
|
161
|
-
(this._twoFingerActivityCount < 20 && Math.abs(Math.sqrt(pinchSquaredDistance) - Math.sqrt(previousPinchSquaredDistance)) > this.camera.pinchToPanMaxDistance)) {
|
|
162
|
-
// Since pinch has not been active long, assume we intend to zoom.
|
|
163
|
-
this._computePinchZoom(previousPinchSquaredDistance, pinchSquaredDistance);
|
|
164
|
-
// Since we are pinching, remain pinching on next iteration.
|
|
165
|
-
this._isPinching = true;
|
|
166
|
-
}
|
|
167
|
-
else {
|
|
168
|
-
// Pause between pinch starting and moving implies not a zoom event. Pan instead.
|
|
169
|
-
this._computeMultiTouchPanning(previousMultiTouchPanPosition, multiTouchPanPosition);
|
|
170
|
-
}
|
|
171
|
-
// Panning enabled, zoom disabled
|
|
172
|
-
}
|
|
173
|
-
else if (this.multiTouchPanning) {
|
|
174
|
-
this._computeMultiTouchPanning(previousMultiTouchPanPosition, multiTouchPanPosition);
|
|
175
|
-
// Zoom enabled, panning disabled
|
|
176
|
-
}
|
|
177
|
-
else if (this.pinchZoom) {
|
|
178
|
-
this._computePinchZoom(previousPinchSquaredDistance, pinchSquaredDistance);
|
|
179
|
-
}
|
|
127
|
+
this._shouldStartPinchZoom =
|
|
128
|
+
this._twoFingerActivityCount < 20 && Math.abs(Math.sqrt(pinchSquaredDistance) - Math.sqrt(previousPinchSquaredDistance)) > this.camera.pinchToPanMaxDistance;
|
|
129
|
+
super.onMultiTouch(pointA, pointB, previousPinchSquaredDistance, pinchSquaredDistance, previousMultiTouchPanPosition, multiTouchPanPosition);
|
|
180
130
|
}
|
|
181
131
|
/**
|
|
182
132
|
* Called each time a new POINTERDOWN event occurs. Ie, for each button
|
|
@@ -185,6 +135,7 @@ export class ArcRotateCameraPointersInput extends BaseCameraPointersInput {
|
|
|
185
135
|
*/
|
|
186
136
|
onButtonDown(evt) {
|
|
187
137
|
this._isPanClick = evt.button === this.camera._panningMouseButton;
|
|
138
|
+
super.onButtonDown(evt);
|
|
188
139
|
}
|
|
189
140
|
/**
|
|
190
141
|
* Called each time a new POINTERUP event occurs. Ie, for each button
|
|
@@ -192,16 +143,14 @@ export class ArcRotateCameraPointersInput extends BaseCameraPointersInput {
|
|
|
192
143
|
* @param _evt Defines the event to track
|
|
193
144
|
*/
|
|
194
145
|
onButtonUp(_evt) {
|
|
195
|
-
|
|
196
|
-
this._isPinching = false;
|
|
146
|
+
super.onButtonUp(_evt);
|
|
197
147
|
}
|
|
198
148
|
/**
|
|
199
149
|
* Called when window becomes inactive.
|
|
200
150
|
*/
|
|
201
151
|
onLostFocus() {
|
|
202
152
|
this._isPanClick = false;
|
|
203
|
-
|
|
204
|
-
this._isPinching = false;
|
|
153
|
+
super.onLostFocus();
|
|
205
154
|
}
|
|
206
155
|
}
|
|
207
156
|
/**
|
|
@@ -226,17 +175,8 @@ __decorate([
|
|
|
226
175
|
__decorate([
|
|
227
176
|
serialize()
|
|
228
177
|
], ArcRotateCameraPointersInput.prototype, "useNaturalPinchZoom", void 0);
|
|
229
|
-
__decorate([
|
|
230
|
-
serialize()
|
|
231
|
-
], ArcRotateCameraPointersInput.prototype, "pinchZoom", void 0);
|
|
232
178
|
__decorate([
|
|
233
179
|
serialize()
|
|
234
180
|
], ArcRotateCameraPointersInput.prototype, "panningSensibility", void 0);
|
|
235
|
-
__decorate([
|
|
236
|
-
serialize()
|
|
237
|
-
], ArcRotateCameraPointersInput.prototype, "multiTouchPanning", void 0);
|
|
238
|
-
__decorate([
|
|
239
|
-
serialize()
|
|
240
|
-
], ArcRotateCameraPointersInput.prototype, "multiTouchPanAndZoom", void 0);
|
|
241
181
|
CameraInputTypes["ArcRotateCameraPointersInput"] = ArcRotateCameraPointersInput;
|
|
242
182
|
//# sourceMappingURL=arcRotateCameraPointersInput.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"arcRotateCameraPointersInput.js","sourceRoot":"","sources":["../../../../../dev/core/src/Cameras/Inputs/arcRotateCameraPointersInput.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from \"../../types\";\r\nimport { serialize } from \"../../Misc/decorators\";\r\nimport type { ArcRotateCamera } from \"../../Cameras/arcRotateCamera\";\r\nimport { CameraInputTypes } from \"../../Cameras/cameraInputsManager\";\r\nimport { BaseCameraPointersInput } from \"../../Cameras/Inputs/BaseCameraPointersInput\";\r\nimport type { PointerTouch } from \"../../Events/pointerEvents\";\r\nimport type { IPointerEvent } from \"../../Events/deviceInputEvents\";\r\n\r\n/**\r\n * Manage the pointers inputs to control an arc rotate camera.\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/cameras/customizingCameraInputs\r\n */\r\nexport class ArcRotateCameraPointersInput extends BaseCameraPointersInput {\r\n /**\r\n * Defines the camera the input is attached to.\r\n */\r\n public camera: ArcRotateCamera;\r\n\r\n /**\r\n * The minimum radius used for pinch, to avoid radius lock at 0\r\n */\r\n public static MinimumRadiusForPinch: number = 0.001;\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 override getClassName(): string {\r\n return \"ArcRotateCameraPointersInput\";\r\n }\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 override buttons = [0, 1, 2];\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 */\r\n @serialize()\r\n public angularSensibilityX = 1000.0;\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 */\r\n @serialize()\r\n public angularSensibilityY = 1000.0;\r\n\r\n /**\r\n * Defines the pointer pinch precision or how fast is the camera zooming.\r\n */\r\n @serialize()\r\n public pinchPrecision = 12.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 * When useNaturalPinchZoom is true, multi touch zoom will zoom in such\r\n * that any object in the plane at the camera's target point will scale\r\n * perfectly with finger motion.\r\n * Overrides pinchDeltaPercentage and pinchPrecision.\r\n */\r\n @serialize()\r\n public useNaturalPinchZoom: boolean = false;\r\n\r\n /**\r\n * Defines whether zoom (2 fingers pinch) is enabled through multitouch\r\n */\r\n @serialize()\r\n public pinchZoom: boolean = true;\r\n\r\n /**\r\n * Defines the pointer panning sensibility or how fast is the camera moving.\r\n */\r\n @serialize()\r\n public panningSensibility: number = 1000.0;\r\n\r\n /**\r\n * Defines whether panning (2 fingers swipe) is enabled through multitouch.\r\n */\r\n @serialize()\r\n public multiTouchPanning: boolean = true;\r\n\r\n /**\r\n * Defines whether panning is enabled for both pan (2 fingers swipe) and\r\n * zoom (pinch) through multitouch.\r\n */\r\n @serialize()\r\n public multiTouchPanAndZoom: boolean = true;\r\n\r\n /**\r\n * Revers pinch action direction.\r\n */\r\n public pinchInwards = true;\r\n\r\n private _isPanClick: boolean = false;\r\n private _twoFingerActivityCount: number = 0;\r\n private _isPinching: boolean = false;\r\n\r\n /**\r\n * Move camera from multi touch panning positions.\r\n * @param previousMultiTouchPanPosition\r\n * @param multiTouchPanPosition\r\n */\r\n private _computeMultiTouchPanning(previousMultiTouchPanPosition: Nullable<PointerTouch>, multiTouchPanPosition: Nullable<PointerTouch>): void {\r\n if (this.panningSensibility !== 0 && previousMultiTouchPanPosition && multiTouchPanPosition) {\r\n const moveDeltaX = multiTouchPanPosition.x - previousMultiTouchPanPosition.x;\r\n const moveDeltaY = multiTouchPanPosition.y - previousMultiTouchPanPosition.y;\r\n this.camera.inertialPanningX += -moveDeltaX / this.panningSensibility;\r\n this.camera.inertialPanningY += moveDeltaY / this.panningSensibility;\r\n }\r\n }\r\n\r\n /**\r\n * Move camera from pinch zoom distances.\r\n * @param previousPinchSquaredDistance\r\n * @param pinchSquaredDistance\r\n */\r\n private _computePinchZoom(previousPinchSquaredDistance: number, pinchSquaredDistance: number): void {\r\n const radius = this.camera.radius || ArcRotateCameraPointersInput.MinimumRadiusForPinch;\r\n if (this.useNaturalPinchZoom) {\r\n this.camera.radius = (radius * Math.sqrt(previousPinchSquaredDistance)) / Math.sqrt(pinchSquaredDistance);\r\n } else if (this.pinchDeltaPercentage) {\r\n this.camera.inertialRadiusOffset += (pinchSquaredDistance - previousPinchSquaredDistance) * 0.001 * radius * this.pinchDeltaPercentage;\r\n } else {\r\n this.camera.inertialRadiusOffset +=\r\n (pinchSquaredDistance - previousPinchSquaredDistance) /\r\n ((this.pinchPrecision * (this.pinchInwards ? 1 : -1) * (this.angularSensibilityX + this.angularSensibilityY)) / 2);\r\n }\r\n }\r\n\r\n /**\r\n * Called on pointer POINTERMOVE event if only a single touch is active.\r\n * @param point current touch point\r\n * @param offsetX offset on X\r\n * @param offsetY offset on Y\r\n */\r\n public override onTouch(point: Nullable<PointerTouch>, offsetX: number, offsetY: number): void {\r\n if (this.panningSensibility !== 0 && ((this._ctrlKey && this.camera._useCtrlForPanning) || this._isPanClick)) {\r\n this.camera.inertialPanningX += -offsetX / this.panningSensibility;\r\n this.camera.inertialPanningY += offsetY / this.panningSensibility;\r\n } else {\r\n this.camera.inertialAlphaOffset -= offsetX / this.angularSensibilityX;\r\n this.camera.inertialBetaOffset -= offsetY / this.angularSensibilityY;\r\n }\r\n }\r\n\r\n /**\r\n * Called on pointer POINTERDOUBLETAP event.\r\n */\r\n public override onDoubleTap() {\r\n if (this.camera.useInputToRestoreState) {\r\n this.camera.restoreState();\r\n }\r\n }\r\n\r\n /**\r\n * Called on pointer POINTERMOVE event if multiple touches are active.\r\n * @param pointA point A\r\n * @param pointB point B\r\n * @param previousPinchSquaredDistance distance between points in previous pinch\r\n * @param pinchSquaredDistance distance between points in current pinch\r\n * @param previousMultiTouchPanPosition multi-touch position in previous step\r\n * @param multiTouchPanPosition multi-touch position in current step\r\n */\r\n public override 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\r\n // Zoom and panning enabled together\r\n if (this.multiTouchPanAndZoom) {\r\n this._computePinchZoom(previousPinchSquaredDistance, pinchSquaredDistance);\r\n this._computeMultiTouchPanning(previousMultiTouchPanPosition, multiTouchPanPosition);\r\n\r\n // Zoom and panning enabled but only one at a time\r\n } else if (this.multiTouchPanning && this.pinchZoom) {\r\n this._twoFingerActivityCount++;\r\n\r\n if (\r\n this._isPinching ||\r\n (this._twoFingerActivityCount < 20 && Math.abs(Math.sqrt(pinchSquaredDistance) - Math.sqrt(previousPinchSquaredDistance)) > this.camera.pinchToPanMaxDistance)\r\n ) {\r\n // Since pinch has not been active long, assume we intend to zoom.\r\n this._computePinchZoom(previousPinchSquaredDistance, pinchSquaredDistance);\r\n\r\n // Since we are pinching, remain pinching on next iteration.\r\n this._isPinching = true;\r\n } else {\r\n // Pause between pinch starting and moving implies not a zoom event. Pan instead.\r\n this._computeMultiTouchPanning(previousMultiTouchPanPosition, multiTouchPanPosition);\r\n }\r\n\r\n // Panning enabled, zoom disabled\r\n } else if (this.multiTouchPanning) {\r\n this._computeMultiTouchPanning(previousMultiTouchPanPosition, multiTouchPanPosition);\r\n\r\n // Zoom enabled, panning disabled\r\n } else if (this.pinchZoom) {\r\n this._computePinchZoom(previousPinchSquaredDistance, pinchSquaredDistance);\r\n }\r\n }\r\n\r\n /**\r\n * Called each time a new POINTERDOWN event occurs. Ie, for each button\r\n * press.\r\n * @param evt Defines the event to track\r\n */\r\n public override onButtonDown(evt: IPointerEvent): void {\r\n this._isPanClick = evt.button === this.camera._panningMouseButton;\r\n }\r\n\r\n /**\r\n * Called each time a new POINTERUP event occurs. Ie, for each button\r\n * release.\r\n * @param _evt Defines the event to track\r\n */\r\n public override onButtonUp(_evt: IPointerEvent): void {\r\n this._twoFingerActivityCount = 0;\r\n this._isPinching = false;\r\n }\r\n\r\n /**\r\n * Called when window becomes inactive.\r\n */\r\n public override onLostFocus(): void {\r\n this._isPanClick = false;\r\n this._twoFingerActivityCount = 0;\r\n this._isPinching = false;\r\n }\r\n}\r\n(<any>CameraInputTypes)[\"ArcRotateCameraPointersInput\"] = ArcRotateCameraPointersInput;\r\n"]}
|
|
1
|
+
{"version":3,"file":"arcRotateCameraPointersInput.js","sourceRoot":"","sources":["../../../../../dev/core/src/Cameras/Inputs/arcRotateCameraPointersInput.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from \"../../types\";\r\nimport { serialize } from \"../../Misc/decorators\";\r\nimport type { ArcRotateCamera } from \"../../Cameras/arcRotateCamera\";\r\nimport { CameraInputTypes } from \"../../Cameras/cameraInputsManager\";\r\nimport { OrbitCameraPointersInput } from \"../../Cameras/Inputs/orbitCameraPointersInput\";\r\nimport type { PointerTouch } from \"../../Events/pointerEvents\";\r\nimport type { IPointerEvent } from \"../../Events/deviceInputEvents\";\r\n\r\n/**\r\n * Manage the pointers inputs to control an arc rotate camera.\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/cameras/customizingCameraInputs\r\n */\r\nexport class ArcRotateCameraPointersInput extends OrbitCameraPointersInput {\r\n /**\r\n * Defines the camera the input is attached to.\r\n */\r\n public camera: ArcRotateCamera;\r\n\r\n /**\r\n * The minimum radius used for pinch, to avoid radius lock at 0\r\n */\r\n public static MinimumRadiusForPinch: number = 0.001;\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 override getClassName(): string {\r\n return \"ArcRotateCameraPointersInput\";\r\n }\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 override buttons = [0, 1, 2];\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 */\r\n @serialize()\r\n public angularSensibilityX = 1000.0;\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 */\r\n @serialize()\r\n public angularSensibilityY = 1000.0;\r\n\r\n /**\r\n * Defines the pointer pinch precision or how fast is the camera zooming.\r\n */\r\n @serialize()\r\n public pinchPrecision = 12.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 * When useNaturalPinchZoom is true, multi touch zoom will zoom in such\r\n * that any object in the plane at the camera's target point will scale\r\n * perfectly with finger motion.\r\n * Overrides pinchDeltaPercentage and pinchPrecision.\r\n */\r\n @serialize()\r\n public useNaturalPinchZoom: boolean = false;\r\n\r\n /**\r\n * Defines the pointer panning sensibility or how fast is the camera moving.\r\n */\r\n @serialize()\r\n public panningSensibility: number = 1000.0;\r\n\r\n /**\r\n * Revers pinch action direction.\r\n */\r\n public pinchInwards = true;\r\n\r\n private _isPanClick: boolean = false;\r\n\r\n /**\r\n * Move camera from multi touch panning positions.\r\n * @param previousMultiTouchPanPosition\r\n * @param multiTouchPanPosition\r\n */\r\n protected override _computeMultiTouchPanning(previousMultiTouchPanPosition: Nullable<PointerTouch>, multiTouchPanPosition: Nullable<PointerTouch>): void {\r\n if (this.panningSensibility !== 0 && previousMultiTouchPanPosition && multiTouchPanPosition) {\r\n const moveDeltaX = multiTouchPanPosition.x - previousMultiTouchPanPosition.x;\r\n const moveDeltaY = multiTouchPanPosition.y - previousMultiTouchPanPosition.y;\r\n this.camera.inertialPanningX += -moveDeltaX / this.panningSensibility;\r\n this.camera.inertialPanningY += moveDeltaY / this.panningSensibility;\r\n }\r\n }\r\n\r\n /**\r\n * Move camera from multitouch (pinch) zoom distances.\r\n * @param previousPinchSquaredDistance\r\n * @param pinchSquaredDistance\r\n */\r\n protected override _computePinchZoom(previousPinchSquaredDistance: number, pinchSquaredDistance: number): void {\r\n const radius = this.camera.radius || ArcRotateCameraPointersInput.MinimumRadiusForPinch;\r\n if (this.useNaturalPinchZoom) {\r\n this.camera.radius = (radius * Math.sqrt(previousPinchSquaredDistance)) / Math.sqrt(pinchSquaredDistance);\r\n } else if (this.pinchDeltaPercentage) {\r\n this.camera.inertialRadiusOffset += (pinchSquaredDistance - previousPinchSquaredDistance) * 0.001 * radius * this.pinchDeltaPercentage;\r\n } else {\r\n this.camera.inertialRadiusOffset +=\r\n (pinchSquaredDistance - previousPinchSquaredDistance) /\r\n ((this.pinchPrecision * (this.pinchInwards ? 1 : -1) * (this.angularSensibilityX + this.angularSensibilityY)) / 2);\r\n }\r\n }\r\n\r\n /**\r\n * Called on pointer POINTERMOVE event if only a single touch is active.\r\n * @param point current touch point\r\n * @param offsetX offset on X\r\n * @param offsetY offset on Y\r\n */\r\n public override onTouch(point: Nullable<PointerTouch>, offsetX: number, offsetY: number): void {\r\n if (this.panningSensibility !== 0 && ((this._ctrlKey && this.camera._useCtrlForPanning) || this._isPanClick)) {\r\n this.camera.inertialPanningX += -offsetX / this.panningSensibility;\r\n this.camera.inertialPanningY += offsetY / this.panningSensibility;\r\n } else {\r\n this.camera.inertialAlphaOffset -= offsetX / this.angularSensibilityX;\r\n this.camera.inertialBetaOffset -= offsetY / this.angularSensibilityY;\r\n }\r\n }\r\n\r\n /**\r\n * Called on pointer POINTERDOUBLETAP event.\r\n */\r\n public override onDoubleTap() {\r\n if (this.camera.useInputToRestoreState) {\r\n this.camera.restoreState();\r\n }\r\n }\r\n\r\n /**\r\n * Called on pointer POINTERMOVE event if multiple touches are active.\r\n * @param pointA point A\r\n * @param pointB point B\r\n * @param previousPinchSquaredDistance distance between points in previous pinch\r\n * @param pinchSquaredDistance distance between points in current pinch\r\n * @param previousMultiTouchPanPosition multi-touch position in previous step\r\n * @param multiTouchPanPosition multi-touch position in current step\r\n */\r\n public override 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 this._shouldStartPinchZoom =\r\n this._twoFingerActivityCount < 20 && Math.abs(Math.sqrt(pinchSquaredDistance) - Math.sqrt(previousPinchSquaredDistance)) > this.camera.pinchToPanMaxDistance;\r\n super.onMultiTouch(pointA, pointB, previousPinchSquaredDistance, pinchSquaredDistance, previousMultiTouchPanPosition, multiTouchPanPosition);\r\n }\r\n\r\n /**\r\n * Called each time a new POINTERDOWN event occurs. Ie, for each button\r\n * press.\r\n * @param evt Defines the event to track\r\n */\r\n public override onButtonDown(evt: IPointerEvent): void {\r\n this._isPanClick = evt.button === this.camera._panningMouseButton;\r\n super.onButtonDown(evt);\r\n }\r\n\r\n /**\r\n * Called each time a new POINTERUP event occurs. Ie, for each button\r\n * release.\r\n * @param _evt Defines the event to track\r\n */\r\n public override onButtonUp(_evt: IPointerEvent): void {\r\n super.onButtonUp(_evt);\r\n }\r\n\r\n /**\r\n * Called when window becomes inactive.\r\n */\r\n public override onLostFocus(): void {\r\n this._isPanClick = false;\r\n super.onLostFocus();\r\n }\r\n}\r\n(<any>CameraInputTypes)[\"ArcRotateCameraPointersInput\"] = ArcRotateCameraPointersInput;\r\n"]}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import type { GeospatialCamera } from "../geospatialCamera.js";
|
|
2
|
+
import type { ICameraInput } from "../cameraInputsManager.js";
|
|
3
|
+
/**
|
|
4
|
+
* Manage the keyboard inputs to control the movement of a geospatial camera.
|
|
5
|
+
* @see https://doc.babylonjs.com/features/featuresDeepDive/cameras/customizingCameraInputs
|
|
6
|
+
*/
|
|
7
|
+
export declare class GeospatialCameraKeyboardInput implements ICameraInput<GeospatialCamera> {
|
|
8
|
+
/**
|
|
9
|
+
* Defines the camera the input is attached to.
|
|
10
|
+
*/
|
|
11
|
+
camera: GeospatialCamera;
|
|
12
|
+
/**
|
|
13
|
+
* Defines the list of key codes associated with the up action (pan up)
|
|
14
|
+
*/
|
|
15
|
+
keysUp: number[];
|
|
16
|
+
/**
|
|
17
|
+
* Defines the list of key codes associated with the down action (pan down)
|
|
18
|
+
*/
|
|
19
|
+
keysDown: number[];
|
|
20
|
+
/**
|
|
21
|
+
* Defines the list of key codes associated with the left action (pan left)
|
|
22
|
+
*/
|
|
23
|
+
keysLeft: number[];
|
|
24
|
+
/**
|
|
25
|
+
* Defines the list of key codes associated with the right action (pan right)
|
|
26
|
+
*/
|
|
27
|
+
keysRight: number[];
|
|
28
|
+
/**
|
|
29
|
+
* Defines the list of key codes associated with zoom in (+ or =)
|
|
30
|
+
*/
|
|
31
|
+
keysZoomIn: number[];
|
|
32
|
+
/**
|
|
33
|
+
* Defines the list of key codes associated with zoom out (-)
|
|
34
|
+
*/
|
|
35
|
+
keysZoomOut: number[];
|
|
36
|
+
/**
|
|
37
|
+
* Defines the rotation sensitivity of the inputs.
|
|
38
|
+
* (How many pixels of pointer input to apply per keypress, before rotation speed factor is applied by movement class)
|
|
39
|
+
*/
|
|
40
|
+
rotationSensitivity: number;
|
|
41
|
+
/**
|
|
42
|
+
* Defines the panning sensitivity of the inputs.
|
|
43
|
+
* (How many pixels of pointer input to apply per keypress, before pan speed factor is applied by movement class)
|
|
44
|
+
*/
|
|
45
|
+
panSensitivity: number;
|
|
46
|
+
/**
|
|
47
|
+
* Defines the zooming sensitivity of the inputs.
|
|
48
|
+
* (How many pixels of pointer input to apply per keypress, before zoom speed factor is applied by movement class)
|
|
49
|
+
*/
|
|
50
|
+
zoomSensitivity: number;
|
|
51
|
+
private _keys;
|
|
52
|
+
private _ctrlPressed;
|
|
53
|
+
private _onCanvasBlurObserver;
|
|
54
|
+
private _onKeyboardObserver;
|
|
55
|
+
private _engine;
|
|
56
|
+
private _scene;
|
|
57
|
+
/**
|
|
58
|
+
* Attach the input controls to a specific dom element to get the input from.
|
|
59
|
+
* @param noPreventDefault Defines whether event caught by the controls should call preventdefault() (https://developer.mozilla.org/en-US/docs/Web/API/Event/preventDefault)
|
|
60
|
+
*/
|
|
61
|
+
attachControl(noPreventDefault?: boolean): void;
|
|
62
|
+
/**
|
|
63
|
+
* Detach the current controls from the specified dom element.
|
|
64
|
+
*/
|
|
65
|
+
detachControl(): void;
|
|
66
|
+
/**
|
|
67
|
+
* Update the current camera state depending on the inputs that have been used this frame.
|
|
68
|
+
* This is a dynamically created lambda to avoid the performance penalty of looping for inputs in the render loop.
|
|
69
|
+
*/
|
|
70
|
+
checkInputs(): void;
|
|
71
|
+
/**
|
|
72
|
+
* Gets the class name of the current input.
|
|
73
|
+
* @returns the class name
|
|
74
|
+
*/
|
|
75
|
+
getClassName(): string;
|
|
76
|
+
/**
|
|
77
|
+
* Get the friendly name associated with the input class.
|
|
78
|
+
* @returns the input friendly name
|
|
79
|
+
*/
|
|
80
|
+
getSimpleName(): string;
|
|
81
|
+
}
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
import { __decorate } from "../../tslib.es6.js";
|
|
2
|
+
import { serialize } from "../../Misc/decorators.js";
|
|
3
|
+
import { CameraInputTypes } from "../cameraInputsManager.js";
|
|
4
|
+
import { KeyboardEventTypes } from "../../Events/keyboardEvents.js";
|
|
5
|
+
import { Tools } from "../../Misc/tools.js";
|
|
6
|
+
/**
|
|
7
|
+
* Manage the keyboard inputs to control the movement of a geospatial camera.
|
|
8
|
+
* @see https://doc.babylonjs.com/features/featuresDeepDive/cameras/customizingCameraInputs
|
|
9
|
+
*/
|
|
10
|
+
export class GeospatialCameraKeyboardInput {
|
|
11
|
+
constructor() {
|
|
12
|
+
/**
|
|
13
|
+
* Defines the list of key codes associated with the up action (pan up)
|
|
14
|
+
*/
|
|
15
|
+
this.keysUp = [38];
|
|
16
|
+
/**
|
|
17
|
+
* Defines the list of key codes associated with the down action (pan down)
|
|
18
|
+
*/
|
|
19
|
+
this.keysDown = [40];
|
|
20
|
+
/**
|
|
21
|
+
* Defines the list of key codes associated with the left action (pan left)
|
|
22
|
+
*/
|
|
23
|
+
this.keysLeft = [37];
|
|
24
|
+
/**
|
|
25
|
+
* Defines the list of key codes associated with the right action (pan right)
|
|
26
|
+
*/
|
|
27
|
+
this.keysRight = [39];
|
|
28
|
+
/**
|
|
29
|
+
* Defines the list of key codes associated with zoom in (+ or =)
|
|
30
|
+
*/
|
|
31
|
+
this.keysZoomIn = [187, 107]; // 187 = + key, 107 = numpad +
|
|
32
|
+
/**
|
|
33
|
+
* Defines the list of key codes associated with zoom out (-)
|
|
34
|
+
*/
|
|
35
|
+
this.keysZoomOut = [189, 109]; // 189 = - key, 109 = numpad -
|
|
36
|
+
/**
|
|
37
|
+
* Defines the rotation sensitivity of the inputs.
|
|
38
|
+
* (How many pixels of pointer input to apply per keypress, before rotation speed factor is applied by movement class)
|
|
39
|
+
*/
|
|
40
|
+
this.rotationSensitivity = 1.0;
|
|
41
|
+
/**
|
|
42
|
+
* Defines the panning sensitivity of the inputs.
|
|
43
|
+
* (How many pixels of pointer input to apply per keypress, before pan speed factor is applied by movement class)
|
|
44
|
+
*/
|
|
45
|
+
this.panSensitivity = 1.0;
|
|
46
|
+
/**
|
|
47
|
+
* Defines the zooming sensitivity of the inputs.
|
|
48
|
+
* (How many pixels of pointer input to apply per keypress, before zoom speed factor is applied by movement class)
|
|
49
|
+
*/
|
|
50
|
+
this.zoomSensitivity = 1.0;
|
|
51
|
+
this._keys = new Array();
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Attach the input controls to a specific dom element to get the input from.
|
|
55
|
+
* @param noPreventDefault Defines whether event caught by the controls should call preventdefault() (https://developer.mozilla.org/en-US/docs/Web/API/Event/preventDefault)
|
|
56
|
+
*/
|
|
57
|
+
attachControl(noPreventDefault) {
|
|
58
|
+
// was there a second variable defined?
|
|
59
|
+
noPreventDefault = Tools.BackCompatCameraNoPreventDefault(arguments);
|
|
60
|
+
if (this._onCanvasBlurObserver) {
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
this._onCanvasBlurObserver = this._engine.onCanvasBlurObservable.add(() => {
|
|
64
|
+
this._keys.length = 0;
|
|
65
|
+
});
|
|
66
|
+
this._onKeyboardObserver = this._scene.onKeyboardObservable.add((info) => {
|
|
67
|
+
const evt = info.event;
|
|
68
|
+
if (!evt.metaKey) {
|
|
69
|
+
if (info.type === KeyboardEventTypes.KEYDOWN) {
|
|
70
|
+
this._ctrlPressed = evt.ctrlKey;
|
|
71
|
+
if (this.keysUp.indexOf(evt.keyCode) !== -1 ||
|
|
72
|
+
this.keysDown.indexOf(evt.keyCode) !== -1 ||
|
|
73
|
+
this.keysLeft.indexOf(evt.keyCode) !== -1 ||
|
|
74
|
+
this.keysRight.indexOf(evt.keyCode) !== -1 ||
|
|
75
|
+
this.keysZoomIn.indexOf(evt.keyCode) !== -1 ||
|
|
76
|
+
this.keysZoomOut.indexOf(evt.keyCode) !== -1) {
|
|
77
|
+
const index = this._keys.indexOf(evt.keyCode);
|
|
78
|
+
if (index === -1) {
|
|
79
|
+
this._keys.push(evt.keyCode);
|
|
80
|
+
}
|
|
81
|
+
if (evt.preventDefault) {
|
|
82
|
+
if (!noPreventDefault) {
|
|
83
|
+
evt.preventDefault();
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
if (this.keysUp.indexOf(evt.keyCode) !== -1 ||
|
|
90
|
+
this.keysDown.indexOf(evt.keyCode) !== -1 ||
|
|
91
|
+
this.keysLeft.indexOf(evt.keyCode) !== -1 ||
|
|
92
|
+
this.keysRight.indexOf(evt.keyCode) !== -1 ||
|
|
93
|
+
this.keysZoomIn.indexOf(evt.keyCode) !== -1 ||
|
|
94
|
+
this.keysZoomOut.indexOf(evt.keyCode) !== -1) {
|
|
95
|
+
const index = this._keys.indexOf(evt.keyCode);
|
|
96
|
+
if (index >= 0) {
|
|
97
|
+
this._keys.splice(index, 1);
|
|
98
|
+
}
|
|
99
|
+
if (evt.preventDefault) {
|
|
100
|
+
if (!noPreventDefault) {
|
|
101
|
+
evt.preventDefault();
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Detach the current controls from the specified dom element.
|
|
111
|
+
*/
|
|
112
|
+
detachControl() {
|
|
113
|
+
if (this._scene) {
|
|
114
|
+
if (this._onKeyboardObserver) {
|
|
115
|
+
this._scene.onKeyboardObservable.remove(this._onKeyboardObserver);
|
|
116
|
+
}
|
|
117
|
+
if (this._onCanvasBlurObserver) {
|
|
118
|
+
this._engine.onCanvasBlurObservable.remove(this._onCanvasBlurObserver);
|
|
119
|
+
}
|
|
120
|
+
this._onKeyboardObserver = null;
|
|
121
|
+
this._onCanvasBlurObserver = null;
|
|
122
|
+
}
|
|
123
|
+
this._keys.length = 0;
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Update the current camera state depending on the inputs that have been used this frame.
|
|
127
|
+
* This is a dynamically created lambda to avoid the performance penalty of looping for inputs in the render loop.
|
|
128
|
+
*/
|
|
129
|
+
checkInputs() {
|
|
130
|
+
if (this._onKeyboardObserver) {
|
|
131
|
+
const camera = this.camera;
|
|
132
|
+
for (let index = 0; index < this._keys.length; index++) {
|
|
133
|
+
const keyCode = this._keys[index];
|
|
134
|
+
if (this._ctrlPressed) {
|
|
135
|
+
// Rotation
|
|
136
|
+
if (this.keysLeft.indexOf(keyCode) !== -1) {
|
|
137
|
+
camera.movement.rotationAccumulatedPixels.y -= this.rotationSensitivity;
|
|
138
|
+
}
|
|
139
|
+
else if (this.keysRight.indexOf(keyCode) !== -1) {
|
|
140
|
+
camera.movement.rotationAccumulatedPixels.y += this.rotationSensitivity;
|
|
141
|
+
}
|
|
142
|
+
else if (this.keysUp.indexOf(keyCode) !== -1) {
|
|
143
|
+
camera.movement.rotationAccumulatedPixels.x -= this.rotationSensitivity;
|
|
144
|
+
}
|
|
145
|
+
else if (this.keysDown.indexOf(keyCode) !== -1) {
|
|
146
|
+
camera.movement.rotationAccumulatedPixels.x += this.rotationSensitivity;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
else {
|
|
150
|
+
// Zoom
|
|
151
|
+
if (this.keysZoomIn.indexOf(keyCode) !== -1) {
|
|
152
|
+
camera.movement.zoomAccumulatedPixels += this.zoomSensitivity;
|
|
153
|
+
}
|
|
154
|
+
else if (this.keysZoomOut.indexOf(keyCode) !== -1) {
|
|
155
|
+
camera.movement.zoomAccumulatedPixels -= this.zoomSensitivity;
|
|
156
|
+
}
|
|
157
|
+
else {
|
|
158
|
+
// Call into movement class handleDrag so that behavior matches that of pointer input, simulating drag from center of screen
|
|
159
|
+
const centerX = this._engine.getRenderWidth() / 2;
|
|
160
|
+
const centerY = this._engine.getRenderHeight() / 2;
|
|
161
|
+
camera.movement.startDrag(centerX, centerY);
|
|
162
|
+
if (this.keysLeft.indexOf(keyCode) !== -1) {
|
|
163
|
+
camera.movement.handleDrag(centerX - this.panSensitivity, centerY);
|
|
164
|
+
}
|
|
165
|
+
else if (this.keysRight.indexOf(keyCode) !== -1) {
|
|
166
|
+
camera.movement.handleDrag(centerX + this.panSensitivity, centerY);
|
|
167
|
+
}
|
|
168
|
+
else if (this.keysUp.indexOf(keyCode) !== -1) {
|
|
169
|
+
camera.movement.handleDrag(centerX, centerY + this.panSensitivity);
|
|
170
|
+
}
|
|
171
|
+
else if (this.keysDown.indexOf(keyCode) !== -1) {
|
|
172
|
+
camera.movement.handleDrag(centerX, centerY - this.panSensitivity);
|
|
173
|
+
}
|
|
174
|
+
camera.movement.stopDrag();
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Gets the class name of the current input.
|
|
182
|
+
* @returns the class name
|
|
183
|
+
*/
|
|
184
|
+
getClassName() {
|
|
185
|
+
return "GeospatialCameraKeyboardInput";
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Get the friendly name associated with the input class.
|
|
189
|
+
* @returns the input friendly name
|
|
190
|
+
*/
|
|
191
|
+
getSimpleName() {
|
|
192
|
+
return "keyboard";
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
__decorate([
|
|
196
|
+
serialize()
|
|
197
|
+
], GeospatialCameraKeyboardInput.prototype, "keysUp", void 0);
|
|
198
|
+
__decorate([
|
|
199
|
+
serialize()
|
|
200
|
+
], GeospatialCameraKeyboardInput.prototype, "keysDown", void 0);
|
|
201
|
+
__decorate([
|
|
202
|
+
serialize()
|
|
203
|
+
], GeospatialCameraKeyboardInput.prototype, "keysLeft", void 0);
|
|
204
|
+
__decorate([
|
|
205
|
+
serialize()
|
|
206
|
+
], GeospatialCameraKeyboardInput.prototype, "keysRight", void 0);
|
|
207
|
+
__decorate([
|
|
208
|
+
serialize()
|
|
209
|
+
], GeospatialCameraKeyboardInput.prototype, "keysZoomIn", void 0);
|
|
210
|
+
__decorate([
|
|
211
|
+
serialize()
|
|
212
|
+
], GeospatialCameraKeyboardInput.prototype, "keysZoomOut", void 0);
|
|
213
|
+
__decorate([
|
|
214
|
+
serialize()
|
|
215
|
+
], GeospatialCameraKeyboardInput.prototype, "rotationSensitivity", void 0);
|
|
216
|
+
__decorate([
|
|
217
|
+
serialize()
|
|
218
|
+
], GeospatialCameraKeyboardInput.prototype, "panSensitivity", void 0);
|
|
219
|
+
__decorate([
|
|
220
|
+
serialize()
|
|
221
|
+
], GeospatialCameraKeyboardInput.prototype, "zoomSensitivity", void 0);
|
|
222
|
+
CameraInputTypes["GeospatialCameraKeyboardInput"] = GeospatialCameraKeyboardInput;
|
|
223
|
+
//# sourceMappingURL=geospatialCameraKeyboardInput.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"geospatialCameraKeyboardInput.js","sourceRoot":"","sources":["../../../../../dev/core/src/Cameras/Inputs/geospatialCameraKeyboardInput.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from \"../../types\";\r\nimport { serialize } from \"../../Misc/decorators\";\r\nimport type { Observer } from \"../../Misc/observable\";\r\nimport type { Scene } from \"../../scene\";\r\nimport type { GeospatialCamera } from \"../geospatialCamera\";\r\nimport type { ICameraInput } from \"../cameraInputsManager\";\r\nimport { CameraInputTypes } from \"../cameraInputsManager\";\r\nimport type { KeyboardInfo } from \"../../Events/keyboardEvents\";\r\nimport { KeyboardEventTypes } from \"../../Events/keyboardEvents\";\r\nimport { Tools } from \"../../Misc/tools\";\r\nimport type { AbstractEngine } from \"../../Engines/abstractEngine\";\r\n\r\n/**\r\n * Manage the keyboard inputs to control the movement of a geospatial camera.\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/cameras/customizingCameraInputs\r\n */\r\nexport class GeospatialCameraKeyboardInput implements ICameraInput<GeospatialCamera> {\r\n /**\r\n * Defines the camera the input is attached to.\r\n */\r\n public camera: GeospatialCamera;\r\n\r\n /**\r\n * Defines the list of key codes associated with the up action (pan up)\r\n */\r\n @serialize()\r\n public keysUp = [38];\r\n\r\n /**\r\n * Defines the list of key codes associated with the down action (pan down)\r\n */\r\n @serialize()\r\n public keysDown = [40];\r\n\r\n /**\r\n * Defines the list of key codes associated with the left action (pan left)\r\n */\r\n @serialize()\r\n public keysLeft = [37];\r\n\r\n /**\r\n * Defines the list of key codes associated with the right action (pan right)\r\n */\r\n @serialize()\r\n public keysRight = [39];\r\n\r\n /**\r\n * Defines the list of key codes associated with zoom in (+ or =)\r\n */\r\n @serialize()\r\n public keysZoomIn = [187, 107]; // 187 = + key, 107 = numpad +\r\n\r\n /**\r\n * Defines the list of key codes associated with zoom out (-)\r\n */\r\n @serialize()\r\n public keysZoomOut = [189, 109]; // 189 = - key, 109 = numpad -\r\n\r\n /**\r\n * Defines the rotation sensitivity of the inputs.\r\n * (How many pixels of pointer input to apply per keypress, before rotation speed factor is applied by movement class)\r\n */\r\n @serialize()\r\n public rotationSensitivity = 1.0;\r\n\r\n /**\r\n * Defines the panning sensitivity of the inputs.\r\n * (How many pixels of pointer input to apply per keypress, before pan speed factor is applied by movement class)\r\n */\r\n @serialize()\r\n public panSensitivity: number = 1.0;\r\n\r\n /**\r\n * Defines the zooming sensitivity of the inputs.\r\n * (How many pixels of pointer input to apply per keypress, before zoom speed factor is applied by movement class)\r\n */\r\n @serialize()\r\n public zoomSensitivity: number = 1.0;\r\n\r\n private _keys = new Array<number>();\r\n private _ctrlPressed: boolean;\r\n private _onCanvasBlurObserver: Nullable<Observer<AbstractEngine>>;\r\n private _onKeyboardObserver: Nullable<Observer<KeyboardInfo>>;\r\n private _engine: AbstractEngine;\r\n private _scene: Scene;\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 // was there a second variable defined?\r\n noPreventDefault = Tools.BackCompatCameraNoPreventDefault(arguments);\r\n\r\n if (this._onCanvasBlurObserver) {\r\n return;\r\n }\r\n\r\n this._onCanvasBlurObserver = this._engine.onCanvasBlurObservable.add(() => {\r\n this._keys.length = 0;\r\n });\r\n\r\n this._onKeyboardObserver = this._scene.onKeyboardObservable.add((info) => {\r\n const evt = info.event;\r\n if (!evt.metaKey) {\r\n if (info.type === KeyboardEventTypes.KEYDOWN) {\r\n this._ctrlPressed = evt.ctrlKey;\r\n\r\n if (\r\n this.keysUp.indexOf(evt.keyCode) !== -1 ||\r\n this.keysDown.indexOf(evt.keyCode) !== -1 ||\r\n this.keysLeft.indexOf(evt.keyCode) !== -1 ||\r\n this.keysRight.indexOf(evt.keyCode) !== -1 ||\r\n this.keysZoomIn.indexOf(evt.keyCode) !== -1 ||\r\n this.keysZoomOut.indexOf(evt.keyCode) !== -1\r\n ) {\r\n const index = this._keys.indexOf(evt.keyCode);\r\n\r\n if (index === -1) {\r\n this._keys.push(evt.keyCode);\r\n }\r\n\r\n if (evt.preventDefault) {\r\n if (!noPreventDefault) {\r\n evt.preventDefault();\r\n }\r\n }\r\n }\r\n } else {\r\n if (\r\n this.keysUp.indexOf(evt.keyCode) !== -1 ||\r\n this.keysDown.indexOf(evt.keyCode) !== -1 ||\r\n this.keysLeft.indexOf(evt.keyCode) !== -1 ||\r\n this.keysRight.indexOf(evt.keyCode) !== -1 ||\r\n this.keysZoomIn.indexOf(evt.keyCode) !== -1 ||\r\n this.keysZoomOut.indexOf(evt.keyCode) !== -1\r\n ) {\r\n const index = this._keys.indexOf(evt.keyCode);\r\n\r\n if (index >= 0) {\r\n this._keys.splice(index, 1);\r\n }\r\n\r\n if (evt.preventDefault) {\r\n if (!noPreventDefault) {\r\n evt.preventDefault();\r\n }\r\n }\r\n }\r\n }\r\n }\r\n });\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._scene) {\r\n if (this._onKeyboardObserver) {\r\n this._scene.onKeyboardObservable.remove(this._onKeyboardObserver);\r\n }\r\n if (this._onCanvasBlurObserver) {\r\n this._engine.onCanvasBlurObservable.remove(this._onCanvasBlurObserver);\r\n }\r\n this._onKeyboardObserver = null;\r\n this._onCanvasBlurObserver = null;\r\n }\r\n\r\n this._keys.length = 0;\r\n }\r\n\r\n /**\r\n * Update the current camera state depending on the inputs that have been used this frame.\r\n * This is a dynamically created lambda to avoid the performance penalty of looping for inputs in the render loop.\r\n */\r\n public checkInputs(): void {\r\n if (this._onKeyboardObserver) {\r\n const camera = this.camera;\r\n\r\n for (let index = 0; index < this._keys.length; index++) {\r\n const keyCode = this._keys[index];\r\n if (this._ctrlPressed) {\r\n // Rotation\r\n if (this.keysLeft.indexOf(keyCode) !== -1) {\r\n camera.movement.rotationAccumulatedPixels.y -= this.rotationSensitivity;\r\n } else if (this.keysRight.indexOf(keyCode) !== -1) {\r\n camera.movement.rotationAccumulatedPixels.y += this.rotationSensitivity;\r\n } else if (this.keysUp.indexOf(keyCode) !== -1) {\r\n camera.movement.rotationAccumulatedPixels.x -= this.rotationSensitivity;\r\n } else if (this.keysDown.indexOf(keyCode) !== -1) {\r\n camera.movement.rotationAccumulatedPixels.x += this.rotationSensitivity;\r\n }\r\n } else {\r\n // Zoom\r\n if (this.keysZoomIn.indexOf(keyCode) !== -1) {\r\n camera.movement.zoomAccumulatedPixels += this.zoomSensitivity;\r\n } else if (this.keysZoomOut.indexOf(keyCode) !== -1) {\r\n camera.movement.zoomAccumulatedPixels -= this.zoomSensitivity;\r\n } else {\r\n // Call into movement class handleDrag so that behavior matches that of pointer input, simulating drag from center of screen\r\n const centerX = this._engine.getRenderWidth() / 2;\r\n const centerY = this._engine.getRenderHeight() / 2;\r\n camera.movement.startDrag(centerX, centerY);\r\n if (this.keysLeft.indexOf(keyCode) !== -1) {\r\n camera.movement.handleDrag(centerX - this.panSensitivity, centerY);\r\n } else if (this.keysRight.indexOf(keyCode) !== -1) {\r\n camera.movement.handleDrag(centerX + this.panSensitivity, centerY);\r\n } else if (this.keysUp.indexOf(keyCode) !== -1) {\r\n camera.movement.handleDrag(centerX, centerY + this.panSensitivity);\r\n } else if (this.keysDown.indexOf(keyCode) !== -1) {\r\n camera.movement.handleDrag(centerX, centerY - this.panSensitivity);\r\n }\r\n camera.movement.stopDrag();\r\n }\r\n }\r\n }\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 \"GeospatialCameraKeyboardInput\";\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 \"keyboard\";\r\n }\r\n}\r\n\r\n(<any>CameraInputTypes)[\"GeospatialCameraKeyboardInput\"] = GeospatialCameraKeyboardInput;\r\n"]}
|
|
@@ -13,7 +13,7 @@ export class GeospatialCameraMouseWheelInput extends BaseCameraMouseWheelInput {
|
|
|
13
13
|
return "GeospatialCameraMouseWheelInput";
|
|
14
14
|
}
|
|
15
15
|
checkInputs() {
|
|
16
|
-
this.camera.
|
|
16
|
+
this.camera.movement.zoomAccumulatedPixels = this._wheelDeltaY;
|
|
17
17
|
super.checkInputs();
|
|
18
18
|
}
|
|
19
19
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"geospatialCameraMouseWheelInput.js","sourceRoot":"","sources":["../../../../../dev/core/src/Cameras/Inputs/geospatialCameraMouseWheelInput.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AACrE,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AAExE;;;GAGG;AACH,MAAM,OAAO,+BAAgC,SAAQ,yBAAyB;IAM1E;;;OAGG;IACa,YAAY;QACxB,OAAO,iCAAiC,CAAC;IAC7C,CAAC;IAEe,WAAW;QACvB,IAAI,CAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"geospatialCameraMouseWheelInput.js","sourceRoot":"","sources":["../../../../../dev/core/src/Cameras/Inputs/geospatialCameraMouseWheelInput.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AACrE,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AAExE;;;GAGG;AACH,MAAM,OAAO,+BAAgC,SAAQ,yBAAyB;IAM1E;;;OAGG;IACa,YAAY;QACxB,OAAO,iCAAiC,CAAC;IAC7C,CAAC;IAEe,WAAW;QACvB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,qBAAqB,GAAG,IAAI,CAAC,YAAY,CAAC;QAC/D,KAAK,CAAC,WAAW,EAAE,CAAC;IACxB,CAAC;CACJ;AAEK,gBAAiB,CAAC,iCAAiC,CAAC,GAAG,+BAA+B,CAAC","sourcesContent":["import type { GeospatialCamera } from \"../../Cameras/geospatialCamera\";\r\nimport { CameraInputTypes } from \"../../Cameras/cameraInputsManager\";\r\nimport { BaseCameraMouseWheelInput } from \"./BaseCameraMouseWheelInput\";\r\n\r\n/**\r\n * @experimental\r\n * Manage the mouse wheel inputs to control a geospatial camera. As this feature is experimental the API will evolve\r\n */\r\nexport class GeospatialCameraMouseWheelInput extends BaseCameraMouseWheelInput {\r\n /**\r\n * Defines the camera the input is attached to.\r\n */\r\n public camera: GeospatialCamera;\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 override getClassName(): string {\r\n return \"GeospatialCameraMouseWheelInput\";\r\n }\r\n\r\n public override checkInputs(): void {\r\n this.camera.movement.zoomAccumulatedPixels = this._wheelDeltaY;\r\n super.checkInputs();\r\n }\r\n}\r\n\r\n(<any>CameraInputTypes)[\"GeospatialCameraMouseWheelInput\"] = GeospatialCameraMouseWheelInput;\r\n"]}
|