123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140 |
- import { __decorate } from "../../tslib.es6.js";
- import { serialize } from "../../Misc/decorators.js";
- import { Observable } from "../../Misc/observable.js";
- import { PointerEventTypes } from "../../Events/pointerEvents.js";
- import { EventConstants } from "../../Events/deviceInputEvents.js";
- import { Tools } from "../../Misc/tools.js";
- /**
- * Base class for mouse wheel input..
- * See FollowCameraMouseWheelInput in src/Cameras/Inputs/freeCameraMouseWheelInput.ts
- * for example usage.
- */
- export class BaseCameraMouseWheelInput {
- constructor() {
- /**
- * How fast is the camera moves in relation to X axis mouseWheel events.
- * Use negative value to reverse direction.
- */
- this.wheelPrecisionX = 3.0;
- /**
- * How fast is the camera moves in relation to Y axis mouseWheel events.
- * Use negative value to reverse direction.
- */
- this.wheelPrecisionY = 3.0;
- /**
- * How fast is the camera moves in relation to Z axis mouseWheel events.
- * Use negative value to reverse direction.
- */
- this.wheelPrecisionZ = 3.0;
- /**
- * Observable for when a mouse wheel move event occurs.
- */
- this.onChangedObservable = new Observable();
- /**
- * Incremental value of multiple mouse wheel movements of the X axis.
- * Should be zero-ed when read.
- */
- this._wheelDeltaX = 0;
- /**
- * Incremental value of multiple mouse wheel movements of the Y axis.
- * Should be zero-ed when read.
- */
- this._wheelDeltaY = 0;
- /**
- * Incremental value of multiple mouse wheel movements of the Z axis.
- * Should be zero-ed when read.
- */
- this._wheelDeltaZ = 0;
- /**
- * Firefox uses a different scheme to report scroll distances to other
- * browsers. Rather than use complicated methods to calculate the exact
- * multiple we need to apply, let's just cheat and use a constant.
- * https://developer.mozilla.org/en-US/docs/Web/API/WheelEvent/deltaMode
- * https://stackoverflow.com/questions/20110224/what-is-the-height-of-a-line-in-a-wheel-event-deltamode-dom-delta-line
- */
- this._ffMultiplier = 12;
- /**
- * Different event attributes for wheel data fall into a few set ranges.
- * Some relevant but dated date here:
- * https://stackoverflow.com/questions/5527601/normalizing-mousewheel-speed-across-browsers
- */
- this._normalize = 120;
- }
- /**
- * Attach the input controls to a specific dom element to get the input from.
- * @param noPreventDefault Defines whether event caught by the controls
- * should call preventdefault().
- * (https://developer.mozilla.org/en-US/docs/Web/API/Event/preventDefault)
- */
- attachControl(noPreventDefault) {
- noPreventDefault = Tools.BackCompatCameraNoPreventDefault(arguments);
- this._wheel = (pointer) => {
- // sanity check - this should be a PointerWheel event.
- if (pointer.type !== PointerEventTypes.POINTERWHEEL) {
- return;
- }
- const event = pointer.event;
- const platformScale = event.deltaMode === EventConstants.DOM_DELTA_LINE ? this._ffMultiplier : 1; // If this happens to be set to DOM_DELTA_LINE, adjust accordingly
- this._wheelDeltaX += (this.wheelPrecisionX * platformScale * event.deltaX) / this._normalize;
- this._wheelDeltaY -= (this.wheelPrecisionY * platformScale * event.deltaY) / this._normalize;
- this._wheelDeltaZ += (this.wheelPrecisionZ * platformScale * event.deltaZ) / this._normalize;
- if (event.preventDefault) {
- if (!noPreventDefault) {
- event.preventDefault();
- }
- }
- };
- this._observer = this.camera.getScene()._inputManager._addCameraPointerObserver(this._wheel, PointerEventTypes.POINTERWHEEL);
- }
- /**
- * Detach the current controls from the specified dom element.
- */
- detachControl() {
- if (this._observer) {
- this.camera.getScene()._inputManager._removeCameraPointerObserver(this._observer);
- this._observer = null;
- this._wheel = null;
- }
- if (this.onChangedObservable) {
- this.onChangedObservable.clear();
- }
- }
- /**
- * Called for each rendered frame.
- */
- checkInputs() {
- this.onChangedObservable.notifyObservers({
- wheelDeltaX: this._wheelDeltaX,
- wheelDeltaY: this._wheelDeltaY,
- wheelDeltaZ: this._wheelDeltaZ,
- });
- // Clear deltas.
- this._wheelDeltaX = 0;
- this._wheelDeltaY = 0;
- this._wheelDeltaZ = 0;
- }
- /**
- * Gets the class name of the current input.
- * @returns the class name
- */
- getClassName() {
- return "BaseCameraMouseWheelInput";
- }
- /**
- * Get the friendly name associated with the input class.
- * @returns the input friendly name
- */
- getSimpleName() {
- return "mousewheel";
- }
- }
- __decorate([
- serialize()
- ], BaseCameraMouseWheelInput.prototype, "wheelPrecisionX", void 0);
- __decorate([
- serialize()
- ], BaseCameraMouseWheelInput.prototype, "wheelPrecisionY", void 0);
- __decorate([
- serialize()
- ], BaseCameraMouseWheelInput.prototype, "wheelPrecisionZ", void 0);
- //# sourceMappingURL=BaseCameraMouseWheelInput.js.map
|