@babylonjs/core 5.13.1 → 5.14.0
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/BaseCameraMouseWheelInput.d.ts +1 -1
- package/Cameras/Inputs/BaseCameraMouseWheelInput.js +2 -9
- package/Cameras/Inputs/BaseCameraMouseWheelInput.js.map +1 -1
- package/Cameras/Inputs/arcRotateCameraMouseWheelInput.d.ts +1 -0
- package/Cameras/Inputs/arcRotateCameraMouseWheelInput.js +2 -9
- package/Cameras/Inputs/arcRotateCameraMouseWheelInput.js.map +1 -1
- package/Cameras/Inputs/followCameraMouseWheelInput.d.ts +1 -0
- package/Cameras/Inputs/followCameraMouseWheelInput.js +2 -8
- package/Cameras/Inputs/followCameraMouseWheelInput.js.map +1 -1
- package/Engines/thinEngine.js +2 -2
- package/Engines/thinEngine.js.map +1 -1
- package/package.json +1 -1
|
@@ -39,7 +39,7 @@ export declare abstract class BaseCameraMouseWheelInput implements ICameraInput<
|
|
|
39
39
|
/**
|
|
40
40
|
* Attach the input controls to a specific dom element to get the input from.
|
|
41
41
|
* @param noPreventDefault Defines whether event caught by the controls
|
|
42
|
-
* should call preventdefault().
|
|
42
|
+
* should call preventdefault(). This param is no longer used because wheel events should be treated as passive.
|
|
43
43
|
* (https://developer.mozilla.org/en-US/docs/Web/API/Event/preventDefault)
|
|
44
44
|
*/
|
|
45
45
|
attachControl(noPreventDefault?: boolean): void;
|
|
@@ -2,7 +2,6 @@ import { __decorate } from "tslib";
|
|
|
2
2
|
import { serialize } from "../../Misc/decorators.js";
|
|
3
3
|
import { Observable } from "../../Misc/observable.js";
|
|
4
4
|
import { PointerEventTypes } from "../../Events/pointerEvents.js";
|
|
5
|
-
import { Tools } from "../../Misc/tools.js";
|
|
6
5
|
import { EventConstants } from "../../Events/deviceInputEvents.js";
|
|
7
6
|
/**
|
|
8
7
|
* Base class for mouse wheel input..
|
|
@@ -63,13 +62,12 @@ var BaseCameraMouseWheelInput = /** @class */ (function () {
|
|
|
63
62
|
/**
|
|
64
63
|
* Attach the input controls to a specific dom element to get the input from.
|
|
65
64
|
* @param noPreventDefault Defines whether event caught by the controls
|
|
66
|
-
* should call preventdefault().
|
|
65
|
+
* should call preventdefault(). This param is no longer used because wheel events should be treated as passive.
|
|
67
66
|
* (https://developer.mozilla.org/en-US/docs/Web/API/Event/preventDefault)
|
|
68
67
|
*/
|
|
68
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
69
69
|
BaseCameraMouseWheelInput.prototype.attachControl = function (noPreventDefault) {
|
|
70
70
|
var _this = this;
|
|
71
|
-
// eslint-disable-next-line prefer-rest-params
|
|
72
|
-
noPreventDefault = Tools.BackCompatCameraNoPreventDefault(arguments);
|
|
73
71
|
this._wheel = function (pointer) {
|
|
74
72
|
// sanity check - this should be a PointerWheel event.
|
|
75
73
|
if (pointer.type !== PointerEventTypes.POINTERWHEEL) {
|
|
@@ -99,11 +97,6 @@ var BaseCameraMouseWheelInput = /** @class */ (function () {
|
|
|
99
97
|
// Maybe others?
|
|
100
98
|
_this._wheelDeltaY -= (_this.wheelPrecisionY * event.wheelDelta) / _this._normalize;
|
|
101
99
|
}
|
|
102
|
-
if (event.preventDefault) {
|
|
103
|
-
if (!noPreventDefault) {
|
|
104
|
-
event.preventDefault();
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
100
|
};
|
|
108
101
|
this._observer = this.camera.getScene().onPointerObservable.add(this._wheel, PointerEventTypes.POINTERWHEEL);
|
|
109
102
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseCameraMouseWheelInput.js","sourceRoot":"","sources":["../../../../../../lts/core/generated/Cameras/Inputs/BaseCameraMouseWheelInput.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 { Observable } from \"../../Misc/observable\";\r\nimport type { Camera } from \"../../Cameras/camera\";\r\nimport type { ICameraInput } from \"../../Cameras/cameraInputsManager\";\r\nimport type { PointerInfo } from \"../../Events/pointerEvents\";\r\nimport { PointerEventTypes } from \"../../Events/pointerEvents\";\r\nimport { Tools } from \"../../Misc/tools\";\r\nimport type { IWheelEvent } from \"../../Events/deviceInputEvents\";\r\nimport { EventConstants } from \"../../Events/deviceInputEvents\";\r\n\r\n/**\r\n * Base class for mouse wheel input..\r\n * See FollowCameraMouseWheelInput in src/Cameras/Inputs/freeCameraMouseWheelInput.ts\r\n * for example usage.\r\n */\r\nexport abstract class BaseCameraMouseWheelInput implements ICameraInput<Camera> {\r\n /**\r\n * Defines the camera the input is attached to.\r\n */\r\n public abstract camera: Camera;\r\n\r\n /**\r\n * How fast is the camera moves in relation to X axis mouseWheel events.\r\n * Use negative value to reverse direction.\r\n */\r\n @serialize()\r\n public wheelPrecisionX = 3.0;\r\n\r\n /**\r\n * How fast is the camera moves in relation to Y axis mouseWheel events.\r\n * Use negative value to reverse direction.\r\n */\r\n @serialize()\r\n public wheelPrecisionY = 3.0;\r\n\r\n /**\r\n * How fast is the camera moves in relation to Z axis mouseWheel events.\r\n * Use negative value to reverse direction.\r\n */\r\n @serialize()\r\n public wheelPrecisionZ = 3.0;\r\n\r\n /**\r\n * Observable for when a mouse wheel move event occurs.\r\n */\r\n public onChangedObservable = new Observable<{ wheelDeltaX: number; wheelDeltaY: number; wheelDeltaZ: number }>();\r\n\r\n private _wheel: Nullable<(pointer: PointerInfo) => 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\r\n * should call preventdefault().\r\n * (https://developer.mozilla.org/en-US/docs/Web/API/Event/preventDefault)\r\n */\r\n public attachControl(noPreventDefault?: boolean): void {\r\n // eslint-disable-next-line prefer-rest-params\r\n noPreventDefault = Tools.BackCompatCameraNoPreventDefault(arguments);\r\n\r\n this._wheel = (pointer) => {\r\n // sanity check - this should be a PointerWheel event.\r\n if (pointer.type !== PointerEventTypes.POINTERWHEEL) {\r\n return;\r\n }\r\n\r\n const event = <IWheelEvent>pointer.event;\r\n\r\n const platformScale = event.deltaMode === EventConstants.DOM_DELTA_LINE ? this._ffMultiplier : 1; // If this happens to be set to DOM_DELTA_LINE, adjust accordingly\r\n\r\n if (event.deltaY !== undefined) {\r\n // Most recent browsers versions have delta properties.\r\n // Firefox >= v17 (Has WebGL >= v4)\r\n // Chrome >= v31 (Has WebGL >= v8)\r\n // Edge >= v12 (Has WebGl >= v12)\r\n // https://developer.mozilla.org/en-US/docs/Web/API/WheelEvent\r\n this._wheelDeltaX += (this.wheelPrecisionX * platformScale * event.deltaX) / this._normalize;\r\n this._wheelDeltaY -= (this.wheelPrecisionY * platformScale * event.deltaY) / this._normalize;\r\n this._wheelDeltaZ += (this.wheelPrecisionZ * platformScale * event.deltaZ) / this._normalize;\r\n } else if ((<any>event).wheelDeltaY !== undefined) {\r\n // Unsure whether these catch anything more. Documentation\r\n // online is contradictory.\r\n this._wheelDeltaX += (this.wheelPrecisionX * platformScale * (<any>event).wheelDeltaX) / this._normalize;\r\n this._wheelDeltaY -= (this.wheelPrecisionY * platformScale * (<any>event).wheelDeltaY) / this._normalize;\r\n this._wheelDeltaZ += (this.wheelPrecisionZ * platformScale * (<any>event).wheelDeltaZ) / this._normalize;\r\n } else if ((<any>event).wheelDelta) {\r\n // IE >= v9 (Has WebGL >= v11)\r\n // Maybe others?\r\n this._wheelDeltaY -= (this.wheelPrecisionY * (<any>event).wheelDelta) / this._normalize;\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().onPointerObservable.add(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().onPointerObservable.remove(this._observer);\r\n this._observer = null;\r\n this._wheel = null;\r\n }\r\n if (this.onChangedObservable) {\r\n this.onChangedObservable.clear();\r\n }\r\n }\r\n\r\n /**\r\n * Called for each rendered frame.\r\n */\r\n public checkInputs(): void {\r\n this.onChangedObservable.notifyObservers({\r\n wheelDeltaX: this._wheelDeltaX,\r\n wheelDeltaY: this._wheelDeltaY,\r\n wheelDeltaZ: this._wheelDeltaZ,\r\n });\r\n\r\n // Clear deltas.\r\n this._wheelDeltaX = 0;\r\n this._wheelDeltaY = 0;\r\n this._wheelDeltaZ = 0;\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 \"BaseCameraMouseWheelInput\";\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 * Incremental value of multiple mouse wheel movements of the X axis.\r\n * Should be zero-ed when read.\r\n */\r\n protected _wheelDeltaX: number = 0;\r\n\r\n /**\r\n * Incremental value of multiple mouse wheel movements of the Y axis.\r\n * Should be zero-ed when read.\r\n */\r\n protected _wheelDeltaY: number = 0;\r\n\r\n /**\r\n * Incremental value of multiple mouse wheel movements of the Z axis.\r\n * Should be zero-ed when read.\r\n */\r\n protected _wheelDeltaZ: number = 0;\r\n\r\n /**\r\n * Firefox uses a different scheme to report scroll distances to other\r\n * browsers. Rather than use complicated methods to calculate the exact\r\n * multiple we need to apply, let's just cheat and use a constant.\r\n * https://developer.mozilla.org/en-US/docs/Web/API/WheelEvent/deltaMode\r\n * https://stackoverflow.com/questions/20110224/what-is-the-height-of-a-line-in-a-wheel-event-deltamode-dom-delta-line\r\n */\r\n private readonly _ffMultiplier = 12;\r\n\r\n /**\r\n * Different event attributes for wheel data fall into a few set ranges.\r\n * Some relevant but dated date here:\r\n * https://stackoverflow.com/questions/5527601/normalizing-mousewheel-speed-across-browsers\r\n */\r\n private readonly _normalize = 120;\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"BaseCameraMouseWheelInput.js","sourceRoot":"","sources":["../../../../../../lts/core/generated/Cameras/Inputs/BaseCameraMouseWheelInput.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 { Observable } from \"../../Misc/observable\";\r\nimport type { Camera } from \"../../Cameras/camera\";\r\nimport type { ICameraInput } 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 { EventConstants } from \"../../Events/deviceInputEvents\";\r\n\r\n/**\r\n * Base class for mouse wheel input..\r\n * See FollowCameraMouseWheelInput in src/Cameras/Inputs/freeCameraMouseWheelInput.ts\r\n * for example usage.\r\n */\r\nexport abstract class BaseCameraMouseWheelInput implements ICameraInput<Camera> {\r\n /**\r\n * Defines the camera the input is attached to.\r\n */\r\n public abstract camera: Camera;\r\n\r\n /**\r\n * How fast is the camera moves in relation to X axis mouseWheel events.\r\n * Use negative value to reverse direction.\r\n */\r\n @serialize()\r\n public wheelPrecisionX = 3.0;\r\n\r\n /**\r\n * How fast is the camera moves in relation to Y axis mouseWheel events.\r\n * Use negative value to reverse direction.\r\n */\r\n @serialize()\r\n public wheelPrecisionY = 3.0;\r\n\r\n /**\r\n * How fast is the camera moves in relation to Z axis mouseWheel events.\r\n * Use negative value to reverse direction.\r\n */\r\n @serialize()\r\n public wheelPrecisionZ = 3.0;\r\n\r\n /**\r\n * Observable for when a mouse wheel move event occurs.\r\n */\r\n public onChangedObservable = new Observable<{ wheelDeltaX: number; wheelDeltaY: number; wheelDeltaZ: number }>();\r\n\r\n private _wheel: Nullable<(pointer: PointerInfo) => 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\r\n * should call preventdefault(). This param is no longer used because wheel events should be treated as passive.\r\n * (https://developer.mozilla.org/en-US/docs/Web/API/Event/preventDefault)\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n public attachControl(noPreventDefault?: boolean): void {\r\n this._wheel = (pointer) => {\r\n // sanity check - this should be a PointerWheel event.\r\n if (pointer.type !== PointerEventTypes.POINTERWHEEL) {\r\n return;\r\n }\r\n\r\n const event = <IWheelEvent>pointer.event;\r\n\r\n const platformScale = event.deltaMode === EventConstants.DOM_DELTA_LINE ? this._ffMultiplier : 1; // If this happens to be set to DOM_DELTA_LINE, adjust accordingly\r\n\r\n if (event.deltaY !== undefined) {\r\n // Most recent browsers versions have delta properties.\r\n // Firefox >= v17 (Has WebGL >= v4)\r\n // Chrome >= v31 (Has WebGL >= v8)\r\n // Edge >= v12 (Has WebGl >= v12)\r\n // https://developer.mozilla.org/en-US/docs/Web/API/WheelEvent\r\n this._wheelDeltaX += (this.wheelPrecisionX * platformScale * event.deltaX) / this._normalize;\r\n this._wheelDeltaY -= (this.wheelPrecisionY * platformScale * event.deltaY) / this._normalize;\r\n this._wheelDeltaZ += (this.wheelPrecisionZ * platformScale * event.deltaZ) / this._normalize;\r\n } else if ((<any>event).wheelDeltaY !== undefined) {\r\n // Unsure whether these catch anything more. Documentation\r\n // online is contradictory.\r\n this._wheelDeltaX += (this.wheelPrecisionX * platformScale * (<any>event).wheelDeltaX) / this._normalize;\r\n this._wheelDeltaY -= (this.wheelPrecisionY * platformScale * (<any>event).wheelDeltaY) / this._normalize;\r\n this._wheelDeltaZ += (this.wheelPrecisionZ * platformScale * (<any>event).wheelDeltaZ) / this._normalize;\r\n } else if ((<any>event).wheelDelta) {\r\n // IE >= v9 (Has WebGL >= v11)\r\n // Maybe others?\r\n this._wheelDeltaY -= (this.wheelPrecisionY * (<any>event).wheelDelta) / this._normalize;\r\n }\r\n };\r\n\r\n this._observer = this.camera.getScene().onPointerObservable.add(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().onPointerObservable.remove(this._observer);\r\n this._observer = null;\r\n this._wheel = null;\r\n }\r\n if (this.onChangedObservable) {\r\n this.onChangedObservable.clear();\r\n }\r\n }\r\n\r\n /**\r\n * Called for each rendered frame.\r\n */\r\n public checkInputs(): void {\r\n this.onChangedObservable.notifyObservers({\r\n wheelDeltaX: this._wheelDeltaX,\r\n wheelDeltaY: this._wheelDeltaY,\r\n wheelDeltaZ: this._wheelDeltaZ,\r\n });\r\n\r\n // Clear deltas.\r\n this._wheelDeltaX = 0;\r\n this._wheelDeltaY = 0;\r\n this._wheelDeltaZ = 0;\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 \"BaseCameraMouseWheelInput\";\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 * Incremental value of multiple mouse wheel movements of the X axis.\r\n * Should be zero-ed when read.\r\n */\r\n protected _wheelDeltaX: number = 0;\r\n\r\n /**\r\n * Incremental value of multiple mouse wheel movements of the Y axis.\r\n * Should be zero-ed when read.\r\n */\r\n protected _wheelDeltaY: number = 0;\r\n\r\n /**\r\n * Incremental value of multiple mouse wheel movements of the Z axis.\r\n * Should be zero-ed when read.\r\n */\r\n protected _wheelDeltaZ: number = 0;\r\n\r\n /**\r\n * Firefox uses a different scheme to report scroll distances to other\r\n * browsers. Rather than use complicated methods to calculate the exact\r\n * multiple we need to apply, let's just cheat and use a constant.\r\n * https://developer.mozilla.org/en-US/docs/Web/API/WheelEvent/deltaMode\r\n * https://stackoverflow.com/questions/20110224/what-is-the-height-of-a-line-in-a-wheel-event-deltamode-dom-delta-line\r\n */\r\n private readonly _ffMultiplier = 12;\r\n\r\n /**\r\n * Different event attributes for wheel data fall into a few set ranges.\r\n * Some relevant but dated date here:\r\n * https://stackoverflow.com/questions/5527601/normalizing-mousewheel-speed-across-browsers\r\n */\r\n private readonly _normalize = 120;\r\n}\r\n"]}
|
|
@@ -36,6 +36,7 @@ export declare class ArcRotateCameraMouseWheelInput implements ICameraInput<ArcR
|
|
|
36
36
|
/**
|
|
37
37
|
* Attach the input controls to a specific dom element to get the input from.
|
|
38
38
|
* @param noPreventDefault Defines whether event caught by the controls should call preventdefault() (https://developer.mozilla.org/en-US/docs/Web/API/Event/preventDefault)
|
|
39
|
+
* This param is no longer used because wheel events should be treated as passive.
|
|
39
40
|
*/
|
|
40
41
|
attachControl(noPreventDefault?: boolean): void;
|
|
41
42
|
/**
|
|
@@ -2,7 +2,6 @@ import { __decorate } from "tslib";
|
|
|
2
2
|
import { serialize } from "../../Misc/decorators.js";
|
|
3
3
|
import { CameraInputTypes } from "../../Cameras/cameraInputsManager.js";
|
|
4
4
|
import { PointerEventTypes } from "../../Events/pointerEvents.js";
|
|
5
|
-
import { Tools } from "../../Misc/tools.js";
|
|
6
5
|
import { Plane } from "../../Maths/math.plane.js";
|
|
7
6
|
import { Vector3, Matrix, TmpVectors } from "../../Maths/math.vector.js";
|
|
8
7
|
import { Epsilon } from "../../Maths/math.constants.js";
|
|
@@ -56,12 +55,11 @@ var ArcRotateCameraMouseWheelInput = /** @class */ (function () {
|
|
|
56
55
|
/**
|
|
57
56
|
* Attach the input controls to a specific dom element to get the input from.
|
|
58
57
|
* @param noPreventDefault Defines whether event caught by the controls should call preventdefault() (https://developer.mozilla.org/en-US/docs/Web/API/Event/preventDefault)
|
|
58
|
+
* This param is no longer used because wheel events should be treated as passive.
|
|
59
59
|
*/
|
|
60
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
60
61
|
ArcRotateCameraMouseWheelInput.prototype.attachControl = function (noPreventDefault) {
|
|
61
62
|
var _this = this;
|
|
62
|
-
// was there a second variable defined?
|
|
63
|
-
// eslint-disable-next-line prefer-rest-params
|
|
64
|
-
noPreventDefault = Tools.BackCompatCameraNoPreventDefault(arguments);
|
|
65
63
|
this._wheel = function (p) {
|
|
66
64
|
//sanity check - this should be a PointerWheel event.
|
|
67
65
|
if (p.type !== PointerEventTypes.POINTERWHEEL) {
|
|
@@ -112,11 +110,6 @@ var ArcRotateCameraMouseWheelInput = /** @class */ (function () {
|
|
|
112
110
|
_this.camera.inertialRadiusOffset += delta;
|
|
113
111
|
}
|
|
114
112
|
}
|
|
115
|
-
if (event.preventDefault) {
|
|
116
|
-
if (!noPreventDefault) {
|
|
117
|
-
event.preventDefault();
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
113
|
};
|
|
121
114
|
this._observer = this.camera.getScene().onPointerObservable.add(this._wheel, PointerEventTypes.POINTERWHEEL);
|
|
122
115
|
if (this.zoomToMouseLocation) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"arcRotateCameraMouseWheelInput.js","sourceRoot":"","sources":["../../../../../../lts/core/generated/Cameras/Inputs/arcRotateCameraMouseWheelInput.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 { ArcRotateCamera } from \"../../Cameras/arcRotateCamera\";\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 { Tools } from \"../../Misc/tools\";\r\nimport { Plane } from \"../../Maths/math.plane\";\r\nimport { Vector3, Matrix, TmpVectors } from \"../../Maths/math.vector\";\r\nimport { Epsilon } from \"../../Maths/math.constants\";\r\nimport type { IWheelEvent } from \"../../Events/deviceInputEvents\";\r\nimport { EventConstants } from \"../../Events/deviceInputEvents\";\r\nimport { Scalar } from \"../../Maths/math.scalar\";\r\n\r\n/**\r\n * Firefox uses a different scheme to report scroll distances to other\r\n * browsers. Rather than use complicated methods to calculate the exact\r\n * multiple we need to apply, let's just cheat and use a constant.\r\n * https://developer.mozilla.org/en-US/docs/Web/API/WheelEvent/deltaMode\r\n * https://stackoverflow.com/questions/20110224/what-is-the-height-of-a-line-in-a-wheel-event-deltamode-dom-delta-line\r\n */\r\nconst ffMultiplier = 40;\r\n\r\n/**\r\n * Manage the mouse wheel inputs to control an arc rotate camera.\r\n * @see https://doc.babylonjs.com/how_to/customizing_camera_inputs\r\n */\r\nexport class ArcRotateCameraMouseWheelInput implements ICameraInput<ArcRotateCamera> {\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 * Gets or Set the mouse wheel precision or how fast is the camera zooming.\r\n */\r\n @serialize()\r\n public wheelPrecision = 3.0;\r\n\r\n /**\r\n * Gets or Set the boolean value that controls whether or not the mouse wheel\r\n * zooms to the location of the mouse pointer or not. The default is false.\r\n */\r\n @serialize()\r\n public zoomToMouseLocation = false;\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 /**\r\n * If set, this function will be used to set the radius delta that will be added to the current camera radius\r\n */\r\n public customComputeDeltaFromMouseWheel: Nullable<(wheelDelta: number, input: ArcRotateCameraMouseWheelInput, event: IWheelEvent) => number> = null;\r\n\r\n private _wheel: Nullable<(p: PointerInfo, s: EventState) => void>;\r\n private _observer: Nullable<Observer<PointerInfo>>;\r\n private _hitPlane: Nullable<Plane>;\r\n\r\n protected _computeDeltaFromMouseWheelLegacyEvent(mouseWheelDelta: number, radius: number) {\r\n let delta = 0;\r\n const wheelDelta = mouseWheelDelta * 0.01 * this.wheelDeltaPercentage * radius;\r\n if (mouseWheelDelta > 0) {\r\n delta = wheelDelta / (1.0 + this.wheelDeltaPercentage);\r\n } else {\r\n delta = wheelDelta * (1.0 + this.wheelDeltaPercentage);\r\n }\r\n return delta;\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 // was there a second variable defined?\r\n // eslint-disable-next-line prefer-rest-params\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 mouseWheelLegacyEvent = event as any;\r\n let wheelDelta = 0;\r\n\r\n const platformScale = event.deltaMode === EventConstants.DOM_DELTA_LINE ? ffMultiplier : 1; // If this happens to be set to DOM_DELTA_LINE, adjust accordingly\r\n if (event.deltaY !== undefined) {\r\n wheelDelta = -(event.deltaY * platformScale);\r\n } else if ((<any>event).wheelDeltaY !== undefined) {\r\n wheelDelta = -((<any>event).wheelDeltaY * platformScale);\r\n } else {\r\n wheelDelta = mouseWheelLegacyEvent.wheelDelta;\r\n }\r\n\r\n if (this.customComputeDeltaFromMouseWheel) {\r\n delta = this.customComputeDeltaFromMouseWheel(wheelDelta, this, event);\r\n } else {\r\n if (this.wheelDeltaPercentage) {\r\n delta = this._computeDeltaFromMouseWheelLegacyEvent(wheelDelta, this.camera.radius);\r\n\r\n // If zooming in, estimate the target radius and use that to compute the delta for inertia\r\n // this will stop multiple scroll events zooming in from adding too much inertia\r\n if (delta > 0) {\r\n let estimatedTargetRadius = this.camera.radius;\r\n let targetInertia = this.camera.inertialRadiusOffset + delta;\r\n for (let i = 0; i < 20 && Math.abs(targetInertia) > 0.001; i++) {\r\n estimatedTargetRadius -= targetInertia;\r\n targetInertia *= this.camera.inertia;\r\n }\r\n estimatedTargetRadius = Scalar.Clamp(estimatedTargetRadius, 0, Number.MAX_VALUE);\r\n delta = this._computeDeltaFromMouseWheelLegacyEvent(wheelDelta, estimatedTargetRadius);\r\n }\r\n } else {\r\n delta = wheelDelta / (this.wheelPrecision * 40);\r\n }\r\n }\r\n\r\n if (delta) {\r\n if (this.zoomToMouseLocation && this._hitPlane) {\r\n this._zoomToMouse(delta);\r\n } else {\r\n this.camera.inertialRadiusOffset += 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().onPointerObservable.add(this._wheel, PointerEventTypes.POINTERWHEEL);\r\n\r\n if (this.zoomToMouseLocation) {\r\n this._inertialPanning.setAll(0);\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._observer) {\r\n this.camera.getScene().onPointerObservable.remove(this._observer);\r\n this._observer = null;\r\n this._wheel = null;\r\n }\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.zoomToMouseLocation) {\r\n return;\r\n }\r\n\r\n const camera = this.camera;\r\n const motion = 0.0 + camera.inertialAlphaOffset + camera.inertialBetaOffset + camera.inertialRadiusOffset;\r\n if (motion) {\r\n // if zooming is still happening as a result of inertia, then we also need to update\r\n // the hit plane.\r\n this._updateHitPlane();\r\n\r\n // Note we cannot use arcRotateCamera.inertialPlanning here because arcRotateCamera panning\r\n // uses a different panningInertia which could cause this panning to get out of sync with\r\n // the zooming, and for this to work they must be exactly in sync.\r\n camera.target.addInPlace(this._inertialPanning);\r\n this._inertialPanning.scaleInPlace(camera.inertia);\r\n this._zeroIfClose(this._inertialPanning);\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 private _updateHitPlane() {\r\n const camera = this.camera;\r\n const direction = camera.target.subtract(camera.position);\r\n this._hitPlane = Plane.FromPositionAndNormal(camera.target, direction);\r\n }\r\n\r\n // Get position on the hit plane\r\n private _getPosition(): Vector3 {\r\n const camera = this.camera;\r\n const scene = camera.getScene();\r\n\r\n // since the _hitPlane is always updated to be orthogonal to the camera position vector\r\n // we don't have to worry about this ray shooting off to infinity. This ray creates\r\n // a vector defining where we want to zoom to.\r\n const ray = scene.createPickingRay(scene.pointerX, scene.pointerY, Matrix.Identity(), camera, false);\r\n let distance = 0;\r\n if (this._hitPlane) {\r\n distance = ray.intersectsPlane(this._hitPlane) ?? 0;\r\n }\r\n\r\n // not using this ray again, so modifying its vectors here is fine\r\n return ray.origin.addInPlace(ray.direction.scaleInPlace(distance));\r\n }\r\n\r\n private _inertialPanning: Vector3 = Vector3.Zero();\r\n\r\n private _zoomToMouse(delta: number) {\r\n const camera = this.camera;\r\n const inertiaComp = 1 - camera.inertia;\r\n if (camera.lowerRadiusLimit) {\r\n const lowerLimit = camera.lowerRadiusLimit ?? 0;\r\n if (camera.radius - (camera.inertialRadiusOffset + delta) / inertiaComp < lowerLimit) {\r\n delta = (camera.radius - lowerLimit) * inertiaComp - camera.inertialRadiusOffset;\r\n }\r\n }\r\n if (camera.upperRadiusLimit) {\r\n const upperLimit = camera.upperRadiusLimit ?? 0;\r\n if (camera.radius - (camera.inertialRadiusOffset + delta) / inertiaComp > upperLimit) {\r\n delta = (camera.radius - upperLimit) * inertiaComp - camera.inertialRadiusOffset;\r\n }\r\n }\r\n\r\n const zoomDistance = delta / inertiaComp;\r\n const ratio = zoomDistance / camera.radius;\r\n const vec = this._getPosition();\r\n\r\n // Now this vector tells us how much we also need to pan the camera\r\n // so the targeted mouse location becomes the center of zooming.\r\n\r\n const directionToZoomLocation = TmpVectors.Vector3[6];\r\n vec.subtractToRef(camera.target, directionToZoomLocation);\r\n directionToZoomLocation.scaleInPlace(ratio);\r\n directionToZoomLocation.scaleInPlace(inertiaComp);\r\n this._inertialPanning.addInPlace(directionToZoomLocation);\r\n\r\n camera.inertialRadiusOffset += delta;\r\n }\r\n\r\n // Sets x y or z of passed in vector to zero if less than Epsilon.\r\n private _zeroIfClose(vec: Vector3) {\r\n if (Math.abs(vec.x) < Epsilon) {\r\n vec.x = 0;\r\n }\r\n if (Math.abs(vec.y) < Epsilon) {\r\n vec.y = 0;\r\n }\r\n if (Math.abs(vec.z) < Epsilon) {\r\n vec.z = 0;\r\n }\r\n }\r\n}\r\n\r\n(<any>CameraInputTypes)[\"ArcRotateCameraMouseWheelInput\"] = ArcRotateCameraMouseWheelInput;\r\n"]}
|
|
1
|
+
{"version":3,"file":"arcRotateCameraMouseWheelInput.js","sourceRoot":"","sources":["../../../../../../lts/core/generated/Cameras/Inputs/arcRotateCameraMouseWheelInput.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 { ArcRotateCamera } from \"../../Cameras/arcRotateCamera\";\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 { Plane } from \"../../Maths/math.plane\";\r\nimport { Vector3, Matrix, TmpVectors } from \"../../Maths/math.vector\";\r\nimport { Epsilon } from \"../../Maths/math.constants\";\r\nimport type { IWheelEvent } from \"../../Events/deviceInputEvents\";\r\nimport { EventConstants } from \"../../Events/deviceInputEvents\";\r\nimport { Scalar } from \"../../Maths/math.scalar\";\r\n\r\n/**\r\n * Firefox uses a different scheme to report scroll distances to other\r\n * browsers. Rather than use complicated methods to calculate the exact\r\n * multiple we need to apply, let's just cheat and use a constant.\r\n * https://developer.mozilla.org/en-US/docs/Web/API/WheelEvent/deltaMode\r\n * https://stackoverflow.com/questions/20110224/what-is-the-height-of-a-line-in-a-wheel-event-deltamode-dom-delta-line\r\n */\r\nconst ffMultiplier = 40;\r\n\r\n/**\r\n * Manage the mouse wheel inputs to control an arc rotate camera.\r\n * @see https://doc.babylonjs.com/how_to/customizing_camera_inputs\r\n */\r\nexport class ArcRotateCameraMouseWheelInput implements ICameraInput<ArcRotateCamera> {\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 * Gets or Set the mouse wheel precision or how fast is the camera zooming.\r\n */\r\n @serialize()\r\n public wheelPrecision = 3.0;\r\n\r\n /**\r\n * Gets or Set the boolean value that controls whether or not the mouse wheel\r\n * zooms to the location of the mouse pointer or not. The default is false.\r\n */\r\n @serialize()\r\n public zoomToMouseLocation = false;\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 /**\r\n * If set, this function will be used to set the radius delta that will be added to the current camera radius\r\n */\r\n public customComputeDeltaFromMouseWheel: Nullable<(wheelDelta: number, input: ArcRotateCameraMouseWheelInput, event: IWheelEvent) => number> = null;\r\n\r\n private _wheel: Nullable<(p: PointerInfo, s: EventState) => void>;\r\n private _observer: Nullable<Observer<PointerInfo>>;\r\n private _hitPlane: Nullable<Plane>;\r\n\r\n protected _computeDeltaFromMouseWheelLegacyEvent(mouseWheelDelta: number, radius: number) {\r\n let delta = 0;\r\n const wheelDelta = mouseWheelDelta * 0.01 * this.wheelDeltaPercentage * radius;\r\n if (mouseWheelDelta > 0) {\r\n delta = wheelDelta / (1.0 + this.wheelDeltaPercentage);\r\n } else {\r\n delta = wheelDelta * (1.0 + this.wheelDeltaPercentage);\r\n }\r\n return delta;\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 * This param is no longer used because wheel events should be treated as passive.\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n public attachControl(noPreventDefault?: boolean): void {\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 mouseWheelLegacyEvent = event as any;\r\n let wheelDelta = 0;\r\n\r\n const platformScale = event.deltaMode === EventConstants.DOM_DELTA_LINE ? ffMultiplier : 1; // If this happens to be set to DOM_DELTA_LINE, adjust accordingly\r\n if (event.deltaY !== undefined) {\r\n wheelDelta = -(event.deltaY * platformScale);\r\n } else if ((<any>event).wheelDeltaY !== undefined) {\r\n wheelDelta = -((<any>event).wheelDeltaY * platformScale);\r\n } else {\r\n wheelDelta = mouseWheelLegacyEvent.wheelDelta;\r\n }\r\n\r\n if (this.customComputeDeltaFromMouseWheel) {\r\n delta = this.customComputeDeltaFromMouseWheel(wheelDelta, this, event);\r\n } else {\r\n if (this.wheelDeltaPercentage) {\r\n delta = this._computeDeltaFromMouseWheelLegacyEvent(wheelDelta, this.camera.radius);\r\n\r\n // If zooming in, estimate the target radius and use that to compute the delta for inertia\r\n // this will stop multiple scroll events zooming in from adding too much inertia\r\n if (delta > 0) {\r\n let estimatedTargetRadius = this.camera.radius;\r\n let targetInertia = this.camera.inertialRadiusOffset + delta;\r\n for (let i = 0; i < 20 && Math.abs(targetInertia) > 0.001; i++) {\r\n estimatedTargetRadius -= targetInertia;\r\n targetInertia *= this.camera.inertia;\r\n }\r\n estimatedTargetRadius = Scalar.Clamp(estimatedTargetRadius, 0, Number.MAX_VALUE);\r\n delta = this._computeDeltaFromMouseWheelLegacyEvent(wheelDelta, estimatedTargetRadius);\r\n }\r\n } else {\r\n delta = wheelDelta / (this.wheelPrecision * 40);\r\n }\r\n }\r\n\r\n if (delta) {\r\n if (this.zoomToMouseLocation && this._hitPlane) {\r\n this._zoomToMouse(delta);\r\n } else {\r\n this.camera.inertialRadiusOffset += delta;\r\n }\r\n }\r\n };\r\n\r\n this._observer = this.camera.getScene().onPointerObservable.add(this._wheel, PointerEventTypes.POINTERWHEEL);\r\n\r\n if (this.zoomToMouseLocation) {\r\n this._inertialPanning.setAll(0);\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._observer) {\r\n this.camera.getScene().onPointerObservable.remove(this._observer);\r\n this._observer = null;\r\n this._wheel = null;\r\n }\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.zoomToMouseLocation) {\r\n return;\r\n }\r\n\r\n const camera = this.camera;\r\n const motion = 0.0 + camera.inertialAlphaOffset + camera.inertialBetaOffset + camera.inertialRadiusOffset;\r\n if (motion) {\r\n // if zooming is still happening as a result of inertia, then we also need to update\r\n // the hit plane.\r\n this._updateHitPlane();\r\n\r\n // Note we cannot use arcRotateCamera.inertialPlanning here because arcRotateCamera panning\r\n // uses a different panningInertia which could cause this panning to get out of sync with\r\n // the zooming, and for this to work they must be exactly in sync.\r\n camera.target.addInPlace(this._inertialPanning);\r\n this._inertialPanning.scaleInPlace(camera.inertia);\r\n this._zeroIfClose(this._inertialPanning);\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 private _updateHitPlane() {\r\n const camera = this.camera;\r\n const direction = camera.target.subtract(camera.position);\r\n this._hitPlane = Plane.FromPositionAndNormal(camera.target, direction);\r\n }\r\n\r\n // Get position on the hit plane\r\n private _getPosition(): Vector3 {\r\n const camera = this.camera;\r\n const scene = camera.getScene();\r\n\r\n // since the _hitPlane is always updated to be orthogonal to the camera position vector\r\n // we don't have to worry about this ray shooting off to infinity. This ray creates\r\n // a vector defining where we want to zoom to.\r\n const ray = scene.createPickingRay(scene.pointerX, scene.pointerY, Matrix.Identity(), camera, false);\r\n let distance = 0;\r\n if (this._hitPlane) {\r\n distance = ray.intersectsPlane(this._hitPlane) ?? 0;\r\n }\r\n\r\n // not using this ray again, so modifying its vectors here is fine\r\n return ray.origin.addInPlace(ray.direction.scaleInPlace(distance));\r\n }\r\n\r\n private _inertialPanning: Vector3 = Vector3.Zero();\r\n\r\n private _zoomToMouse(delta: number) {\r\n const camera = this.camera;\r\n const inertiaComp = 1 - camera.inertia;\r\n if (camera.lowerRadiusLimit) {\r\n const lowerLimit = camera.lowerRadiusLimit ?? 0;\r\n if (camera.radius - (camera.inertialRadiusOffset + delta) / inertiaComp < lowerLimit) {\r\n delta = (camera.radius - lowerLimit) * inertiaComp - camera.inertialRadiusOffset;\r\n }\r\n }\r\n if (camera.upperRadiusLimit) {\r\n const upperLimit = camera.upperRadiusLimit ?? 0;\r\n if (camera.radius - (camera.inertialRadiusOffset + delta) / inertiaComp > upperLimit) {\r\n delta = (camera.radius - upperLimit) * inertiaComp - camera.inertialRadiusOffset;\r\n }\r\n }\r\n\r\n const zoomDistance = delta / inertiaComp;\r\n const ratio = zoomDistance / camera.radius;\r\n const vec = this._getPosition();\r\n\r\n // Now this vector tells us how much we also need to pan the camera\r\n // so the targeted mouse location becomes the center of zooming.\r\n\r\n const directionToZoomLocation = TmpVectors.Vector3[6];\r\n vec.subtractToRef(camera.target, directionToZoomLocation);\r\n directionToZoomLocation.scaleInPlace(ratio);\r\n directionToZoomLocation.scaleInPlace(inertiaComp);\r\n this._inertialPanning.addInPlace(directionToZoomLocation);\r\n\r\n camera.inertialRadiusOffset += delta;\r\n }\r\n\r\n // Sets x y or z of passed in vector to zero if less than Epsilon.\r\n private _zeroIfClose(vec: Vector3) {\r\n if (Math.abs(vec.x) < Epsilon) {\r\n vec.x = 0;\r\n }\r\n if (Math.abs(vec.y) < Epsilon) {\r\n vec.y = 0;\r\n }\r\n if (Math.abs(vec.z) < Epsilon) {\r\n vec.z = 0;\r\n }\r\n }\r\n}\r\n\r\n(<any>CameraInputTypes)[\"ArcRotateCameraMouseWheelInput\"] = ArcRotateCameraMouseWheelInput;\r\n"]}
|
|
@@ -36,6 +36,7 @@ export declare class FollowCameraMouseWheelInput implements ICameraInput<FollowC
|
|
|
36
36
|
/**
|
|
37
37
|
* Attach the input controls to a specific dom element to get the input from.
|
|
38
38
|
* @param noPreventDefault Defines whether event caught by the controls should call preventdefault() (https://developer.mozilla.org/en-US/docs/Web/API/Event/preventDefault)
|
|
39
|
+
* This param is no longer used because wheel events should be treated as passive.
|
|
39
40
|
*/
|
|
40
41
|
attachControl(noPreventDefault?: boolean): void;
|
|
41
42
|
/**
|
|
@@ -2,7 +2,6 @@ import { __decorate } from "tslib";
|
|
|
2
2
|
import { serialize } from "../../Misc/decorators.js";
|
|
3
3
|
import { CameraInputTypes } from "../../Cameras/cameraInputsManager.js";
|
|
4
4
|
import { PointerEventTypes } from "../../Events/pointerEvents.js";
|
|
5
|
-
import { Tools } from "../../Misc/tools.js";
|
|
6
5
|
/**
|
|
7
6
|
* Manage the mouse wheel inputs to control a follow camera.
|
|
8
7
|
* @see https://doc.babylonjs.com/how_to/customizing_camera_inputs
|
|
@@ -35,11 +34,11 @@ var FollowCameraMouseWheelInput = /** @class */ (function () {
|
|
|
35
34
|
/**
|
|
36
35
|
* Attach the input controls to a specific dom element to get the input from.
|
|
37
36
|
* @param noPreventDefault Defines whether event caught by the controls should call preventdefault() (https://developer.mozilla.org/en-US/docs/Web/API/Event/preventDefault)
|
|
37
|
+
* This param is no longer used because wheel events should be treated as passive.
|
|
38
38
|
*/
|
|
39
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
39
40
|
FollowCameraMouseWheelInput.prototype.attachControl = function (noPreventDefault) {
|
|
40
41
|
var _this = this;
|
|
41
|
-
// eslint-disable-next-line prefer-rest-params
|
|
42
|
-
noPreventDefault = Tools.BackCompatCameraNoPreventDefault(arguments);
|
|
43
42
|
this._wheel = function (p) {
|
|
44
43
|
// sanity check - this should be a PointerWheel event.
|
|
45
44
|
if (p.type !== PointerEventTypes.POINTERWHEEL) {
|
|
@@ -85,11 +84,6 @@ var FollowCameraMouseWheelInput = /** @class */ (function () {
|
|
|
85
84
|
_this.camera.rotationOffset -= delta;
|
|
86
85
|
}
|
|
87
86
|
}
|
|
88
|
-
if (event.preventDefault) {
|
|
89
|
-
if (!noPreventDefault) {
|
|
90
|
-
event.preventDefault();
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
87
|
};
|
|
94
88
|
this._observer = this.camera.getScene().onPointerObservable.add(this._wheel, PointerEventTypes.POINTERWHEEL);
|
|
95
89
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"followCameraMouseWheelInput.js","sourceRoot":"","sources":["../../../../../../lts/core/generated/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;
|
|
1
|
+
{"version":3,"file":"followCameraMouseWheelInput.js","sourceRoot":"","sources":["../../../../../../lts/core/generated/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\n\r\n/**\r\n * Manage the mouse wheel inputs to control a follow camera.\r\n * @see https://doc.babylonjs.com/how_to/customizing_camera_inputs\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 * This param is no longer used because wheel events should be treated as passive.\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n public attachControl(noPreventDefault?: boolean): void {\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 // Chrome, Safari: event.deltaY\r\n // IE: event.wheelDelta\r\n // Firefox: event.detail (inverted)\r\n const wheelDelta = Math.max(-1, Math.min(1, event.deltaY || (<any>event).wheelDelta || -(<any>event).detail));\r\n if (this.wheelDeltaPercentage) {\r\n console.assert(\r\n <number>(<unknown>this.axisControlRadius) + <number>(<unknown>this.axisControlHeight) + <number>(<unknown>this.axisControlRotation) <= 1,\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 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\r\n this._observer = this.camera.getScene().onPointerObservable.add(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().onPointerObservable.remove(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"]}
|
package/Engines/thinEngine.js
CHANGED
|
@@ -400,7 +400,7 @@ var ThinEngine = /** @class */ (function () {
|
|
|
400
400
|
*/
|
|
401
401
|
// Not mixed with Version for tooling purpose.
|
|
402
402
|
get: function () {
|
|
403
|
-
return "babylonjs@5.
|
|
403
|
+
return "babylonjs@5.14.0";
|
|
404
404
|
},
|
|
405
405
|
enumerable: false,
|
|
406
406
|
configurable: true
|
|
@@ -410,7 +410,7 @@ var ThinEngine = /** @class */ (function () {
|
|
|
410
410
|
* Returns the current version of the framework
|
|
411
411
|
*/
|
|
412
412
|
get: function () {
|
|
413
|
-
return "5.
|
|
413
|
+
return "5.14.0";
|
|
414
414
|
},
|
|
415
415
|
enumerable: false,
|
|
416
416
|
configurable: true
|