123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 |
- import { __decorate } from "../../tslib.es6.js";
- import { serialize } from "../../Misc/decorators.js";
- import { CameraInputTypes } from "../../Cameras/cameraInputsManager.js";
- import { PointerEventTypes } from "../../Events/pointerEvents.js";
- import { Tools } from "../../Misc/tools.js";
- import { Logger } from "../../Misc/logger.js";
- /**
- * Manage the mouse wheel inputs to control a follow camera.
- * @see https://doc.babylonjs.com/features/featuresDeepDive/cameras/customizingCameraInputs
- */
- export class FollowCameraMouseWheelInput {
- constructor() {
- /**
- * Moue wheel controls zoom. (Mouse wheel modifies camera.radius value.)
- */
- this.axisControlRadius = true;
- /**
- * Moue wheel controls height. (Mouse wheel modifies camera.heightOffset value.)
- */
- this.axisControlHeight = false;
- /**
- * Moue wheel controls angle. (Mouse wheel modifies camera.rotationOffset value.)
- */
- this.axisControlRotation = false;
- /**
- * Gets or Set the mouse wheel precision or how fast is the camera moves in
- * relation to mouseWheel events.
- */
- this.wheelPrecision = 3.0;
- /**
- * wheelDeltaPercentage will be used instead of wheelPrecision if different from 0.
- * It defines the percentage of current camera.radius to use as delta when wheel is used.
- */
- this.wheelDeltaPercentage = 0;
- }
- /**
- * 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 = (p) => {
- // sanity check - this should be a PointerWheel event.
- if (p.type !== PointerEventTypes.POINTERWHEEL) {
- return;
- }
- const event = p.event;
- let delta = 0;
- const wheelDelta = Math.max(-1, Math.min(1, event.deltaY));
- if (this.wheelDeltaPercentage) {
- if (+this.axisControlRadius + +this.axisControlHeight + +this.axisControlRotation) {
- Logger.Warn("wheelDeltaPercentage only usable when mouse wheel " +
- "controls ONE axis. " +
- "Currently enabled: " +
- "axisControlRadius: " +
- this.axisControlRadius +
- ", axisControlHeightOffset: " +
- this.axisControlHeight +
- ", axisControlRotationOffset: " +
- this.axisControlRotation);
- }
- if (this.axisControlRadius) {
- delta = wheelDelta * 0.01 * this.wheelDeltaPercentage * this.camera.radius;
- }
- else if (this.axisControlHeight) {
- delta = wheelDelta * 0.01 * this.wheelDeltaPercentage * this.camera.heightOffset;
- }
- else if (this.axisControlRotation) {
- delta = wheelDelta * 0.01 * this.wheelDeltaPercentage * this.camera.rotationOffset;
- }
- }
- else {
- delta = wheelDelta * this.wheelPrecision;
- }
- if (delta) {
- if (this.axisControlRadius) {
- this.camera.radius += delta;
- }
- else if (this.axisControlHeight) {
- this.camera.heightOffset -= delta;
- }
- else if (this.axisControlRotation) {
- this.camera.rotationOffset -= delta;
- }
- }
- 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;
- }
- }
- /**
- * Gets the class name of the current input.
- * @returns the class name
- */
- getClassName() {
- return "ArcRotateCameraMouseWheelInput";
- }
- /**
- * Get the friendly name associated with the input class.
- * @returns the input friendly name
- */
- getSimpleName() {
- return "mousewheel";
- }
- }
- __decorate([
- serialize()
- ], FollowCameraMouseWheelInput.prototype, "axisControlRadius", void 0);
- __decorate([
- serialize()
- ], FollowCameraMouseWheelInput.prototype, "axisControlHeight", void 0);
- __decorate([
- serialize()
- ], FollowCameraMouseWheelInput.prototype, "axisControlRotation", void 0);
- __decorate([
- serialize()
- ], FollowCameraMouseWheelInput.prototype, "wheelPrecision", void 0);
- __decorate([
- serialize()
- ], FollowCameraMouseWheelInput.prototype, "wheelDeltaPercentage", void 0);
- CameraInputTypes["FollowCameraMouseWheelInput"] = FollowCameraMouseWheelInput;
- //# sourceMappingURL=followCameraMouseWheelInput.js.map
|