@babylonjs/core
Version:
Getting started? Play directly with the Babylon.js API using our [playground](https://playground.babylonjs.com/). It also contains a lot of samples to learn how to use it.
334 lines • 26.5 kB
JavaScript
import { __esDecorate, __runInitializers } from "../../tslib.es6.js";
import { CameraInputTypes } from "../../Cameras/cameraInputsManager.js";
import { serialize } from "../../Misc/decorators.js";
import { KeyboardEventTypes } from "../../Events/keyboardEvents.js";
import { Tools } from "../../Misc/tools.pure.js";
/**
* Manage the keyboard inputs to control the movement of a follow camera.
* @see https://doc.babylonjs.com/features/featuresDeepDive/cameras/customizingCameraInputs
*/
let FollowCameraKeyboardMoveInput = (() => {
var _a;
let _keysHeightOffsetIncr_decorators;
let _keysHeightOffsetIncr_initializers = [];
let _keysHeightOffsetIncr_extraInitializers = [];
let _keysHeightOffsetDecr_decorators;
let _keysHeightOffsetDecr_initializers = [];
let _keysHeightOffsetDecr_extraInitializers = [];
let _keysHeightOffsetModifierAlt_decorators;
let _keysHeightOffsetModifierAlt_initializers = [];
let _keysHeightOffsetModifierAlt_extraInitializers = [];
let _keysHeightOffsetModifierCtrl_decorators;
let _keysHeightOffsetModifierCtrl_initializers = [];
let _keysHeightOffsetModifierCtrl_extraInitializers = [];
let _keysHeightOffsetModifierShift_decorators;
let _keysHeightOffsetModifierShift_initializers = [];
let _keysHeightOffsetModifierShift_extraInitializers = [];
let _keysRotationOffsetIncr_decorators;
let _keysRotationOffsetIncr_initializers = [];
let _keysRotationOffsetIncr_extraInitializers = [];
let _keysRotationOffsetDecr_decorators;
let _keysRotationOffsetDecr_initializers = [];
let _keysRotationOffsetDecr_extraInitializers = [];
let _keysRotationOffsetModifierAlt_decorators;
let _keysRotationOffsetModifierAlt_initializers = [];
let _keysRotationOffsetModifierAlt_extraInitializers = [];
let _keysRotationOffsetModifierCtrl_decorators;
let _keysRotationOffsetModifierCtrl_initializers = [];
let _keysRotationOffsetModifierCtrl_extraInitializers = [];
let _keysRotationOffsetModifierShift_decorators;
let _keysRotationOffsetModifierShift_initializers = [];
let _keysRotationOffsetModifierShift_extraInitializers = [];
let _keysRadiusIncr_decorators;
let _keysRadiusIncr_initializers = [];
let _keysRadiusIncr_extraInitializers = [];
let _keysRadiusDecr_decorators;
let _keysRadiusDecr_initializers = [];
let _keysRadiusDecr_extraInitializers = [];
let _keysRadiusModifierAlt_decorators;
let _keysRadiusModifierAlt_initializers = [];
let _keysRadiusModifierAlt_extraInitializers = [];
let _keysRadiusModifierCtrl_decorators;
let _keysRadiusModifierCtrl_initializers = [];
let _keysRadiusModifierCtrl_extraInitializers = [];
let _keysRadiusModifierShift_decorators;
let _keysRadiusModifierShift_initializers = [];
let _keysRadiusModifierShift_extraInitializers = [];
let _heightSensibility_decorators;
let _heightSensibility_initializers = [];
let _heightSensibility_extraInitializers = [];
let _rotationSensibility_decorators;
let _rotationSensibility_initializers = [];
let _rotationSensibility_extraInitializers = [];
let _radiusSensibility_decorators;
let _radiusSensibility_initializers = [];
let _radiusSensibility_extraInitializers = [];
return _a = class FollowCameraKeyboardMoveInput {
constructor() {
/**
* Defines the list of key codes associated with the up action (increase heightOffset)
*/
this.keysHeightOffsetIncr = __runInitializers(this, _keysHeightOffsetIncr_initializers, [38]);
/**
* Defines the list of key codes associated with the down action (decrease heightOffset)
*/
this.keysHeightOffsetDecr = (__runInitializers(this, _keysHeightOffsetIncr_extraInitializers), __runInitializers(this, _keysHeightOffsetDecr_initializers, [40]));
/**
* Defines whether the Alt modifier key is required to move up/down (alter heightOffset)
*/
this.keysHeightOffsetModifierAlt = (__runInitializers(this, _keysHeightOffsetDecr_extraInitializers), __runInitializers(this, _keysHeightOffsetModifierAlt_initializers, false));
/**
* Defines whether the Ctrl modifier key is required to move up/down (alter heightOffset)
*/
this.keysHeightOffsetModifierCtrl = (__runInitializers(this, _keysHeightOffsetModifierAlt_extraInitializers), __runInitializers(this, _keysHeightOffsetModifierCtrl_initializers, false));
/**
* Defines whether the Shift modifier key is required to move up/down (alter heightOffset)
*/
this.keysHeightOffsetModifierShift = (__runInitializers(this, _keysHeightOffsetModifierCtrl_extraInitializers), __runInitializers(this, _keysHeightOffsetModifierShift_initializers, false));
/**
* Defines the list of key codes associated with the left action (increase rotationOffset)
*/
this.keysRotationOffsetIncr = (__runInitializers(this, _keysHeightOffsetModifierShift_extraInitializers), __runInitializers(this, _keysRotationOffsetIncr_initializers, [37]));
/**
* Defines the list of key codes associated with the right action (decrease rotationOffset)
*/
this.keysRotationOffsetDecr = (__runInitializers(this, _keysRotationOffsetIncr_extraInitializers), __runInitializers(this, _keysRotationOffsetDecr_initializers, [39]));
/**
* Defines whether the Alt modifier key is required to move left/right (alter rotationOffset)
*/
this.keysRotationOffsetModifierAlt = (__runInitializers(this, _keysRotationOffsetDecr_extraInitializers), __runInitializers(this, _keysRotationOffsetModifierAlt_initializers, false));
/**
* Defines whether the Ctrl modifier key is required to move left/right (alter rotationOffset)
*/
this.keysRotationOffsetModifierCtrl = (__runInitializers(this, _keysRotationOffsetModifierAlt_extraInitializers), __runInitializers(this, _keysRotationOffsetModifierCtrl_initializers, false));
/**
* Defines whether the Shift modifier key is required to move left/right (alter rotationOffset)
*/
this.keysRotationOffsetModifierShift = (__runInitializers(this, _keysRotationOffsetModifierCtrl_extraInitializers), __runInitializers(this, _keysRotationOffsetModifierShift_initializers, false));
/**
* Defines the list of key codes associated with the zoom-in action (decrease radius)
*/
this.keysRadiusIncr = (__runInitializers(this, _keysRotationOffsetModifierShift_extraInitializers), __runInitializers(this, _keysRadiusIncr_initializers, [40]));
/**
* Defines the list of key codes associated with the zoom-out action (increase radius)
*/
this.keysRadiusDecr = (__runInitializers(this, _keysRadiusIncr_extraInitializers), __runInitializers(this, _keysRadiusDecr_initializers, [38]));
/**
* Defines whether the Alt modifier key is required to zoom in/out (alter radius value)
*/
this.keysRadiusModifierAlt = (__runInitializers(this, _keysRadiusDecr_extraInitializers), __runInitializers(this, _keysRadiusModifierAlt_initializers, true));
/**
* Defines whether the Ctrl modifier key is required to zoom in/out (alter radius value)
*/
this.keysRadiusModifierCtrl = (__runInitializers(this, _keysRadiusModifierAlt_extraInitializers), __runInitializers(this, _keysRadiusModifierCtrl_initializers, false));
/**
* Defines whether the Shift modifier key is required to zoom in/out (alter radius value)
*/
this.keysRadiusModifierShift = (__runInitializers(this, _keysRadiusModifierCtrl_extraInitializers), __runInitializers(this, _keysRadiusModifierShift_initializers, false));
/**
* Defines the rate of change of heightOffset.
*/
this.heightSensibility = (__runInitializers(this, _keysRadiusModifierShift_extraInitializers), __runInitializers(this, _heightSensibility_initializers, 1));
/**
* Defines the rate of change of rotationOffset.
*/
this.rotationSensibility = (__runInitializers(this, _heightSensibility_extraInitializers), __runInitializers(this, _rotationSensibility_initializers, 1));
/**
* Defines the rate of change of radius.
*/
this.radiusSensibility = (__runInitializers(this, _rotationSensibility_extraInitializers), __runInitializers(this, _radiusSensibility_initializers, 1));
this._keys = (__runInitializers(this, _radiusSensibility_extraInitializers), new Array());
}
/**
* 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);
if (this._onCanvasBlurObserver) {
return;
}
this._scene = this.camera.getScene();
this._engine = this._scene.getEngine();
this._onCanvasBlurObserver = this._engine.onCanvasBlurObservable.add(() => {
this._keys.length = 0;
});
this._onKeyboardObserver = this._scene.onKeyboardObservable.add((info) => {
const evt = info.event;
if (!evt.metaKey) {
if (info.type === KeyboardEventTypes.KEYDOWN) {
this._ctrlPressed = evt.ctrlKey;
this._altPressed = evt.altKey;
this._shiftPressed = evt.shiftKey;
if (this.keysHeightOffsetIncr.indexOf(evt.keyCode) !== -1 ||
this.keysHeightOffsetDecr.indexOf(evt.keyCode) !== -1 ||
this.keysRotationOffsetIncr.indexOf(evt.keyCode) !== -1 ||
this.keysRotationOffsetDecr.indexOf(evt.keyCode) !== -1 ||
this.keysRadiusIncr.indexOf(evt.keyCode) !== -1 ||
this.keysRadiusDecr.indexOf(evt.keyCode) !== -1) {
const index = this._keys.indexOf(evt.keyCode);
if (index === -1) {
this._keys.push(evt.keyCode);
}
if (evt.preventDefault) {
if (!noPreventDefault) {
evt.preventDefault();
}
}
}
}
else {
if (this.keysHeightOffsetIncr.indexOf(evt.keyCode) !== -1 ||
this.keysHeightOffsetDecr.indexOf(evt.keyCode) !== -1 ||
this.keysRotationOffsetIncr.indexOf(evt.keyCode) !== -1 ||
this.keysRotationOffsetDecr.indexOf(evt.keyCode) !== -1 ||
this.keysRadiusIncr.indexOf(evt.keyCode) !== -1 ||
this.keysRadiusDecr.indexOf(evt.keyCode) !== -1) {
const index = this._keys.indexOf(evt.keyCode);
if (index >= 0) {
this._keys.splice(index, 1);
}
if (evt.preventDefault) {
if (!noPreventDefault) {
evt.preventDefault();
}
}
}
}
}
});
}
/**
* Detach the current controls from the specified dom element.
*/
detachControl() {
if (this._scene) {
if (this._onKeyboardObserver) {
this._scene.onKeyboardObservable.remove(this._onKeyboardObserver);
}
if (this._onCanvasBlurObserver) {
this._engine.onCanvasBlurObservable.remove(this._onCanvasBlurObserver);
}
this._onKeyboardObserver = null;
this._onCanvasBlurObserver = null;
}
this._keys.length = 0;
}
/**
* Update the current camera state depending on the inputs that have been used this frame.
* This is a dynamically created lambda to avoid the performance penalty of looping for inputs in the render loop.
*/
checkInputs() {
if (this._onKeyboardObserver) {
for (const keyCode of this._keys) {
if (this.keysHeightOffsetIncr.indexOf(keyCode) !== -1 && this._modifierHeightOffset()) {
this.camera.heightOffset += this.heightSensibility;
}
else if (this.keysHeightOffsetDecr.indexOf(keyCode) !== -1 && this._modifierHeightOffset()) {
this.camera.heightOffset -= this.heightSensibility;
}
else if (this.keysRotationOffsetIncr.indexOf(keyCode) !== -1 && this._modifierRotationOffset()) {
this.camera.rotationOffset += this.rotationSensibility;
this.camera.rotationOffset %= 360;
}
else if (this.keysRotationOffsetDecr.indexOf(keyCode) !== -1 && this._modifierRotationOffset()) {
this.camera.rotationOffset -= this.rotationSensibility;
this.camera.rotationOffset %= 360;
}
else if (this.keysRadiusIncr.indexOf(keyCode) !== -1 && this._modifierRadius()) {
this.camera.radius += this.radiusSensibility;
}
else if (this.keysRadiusDecr.indexOf(keyCode) !== -1 && this._modifierRadius()) {
this.camera.radius -= this.radiusSensibility;
}
}
}
}
/**
* Gets the class name of the current input.
* @returns the class name
*/
getClassName() {
return "FollowCameraKeyboardMoveInput";
}
/**
* Get the friendly name associated with the input class.
* @returns the input friendly name
*/
getSimpleName() {
return "keyboard";
}
/**
* Check if the pressed modifier keys (Alt/Ctrl/Shift) match those configured to
* allow modification of the heightOffset value.
* @returns true if modifier keys match
*/
_modifierHeightOffset() {
return (this.keysHeightOffsetModifierAlt === this._altPressed &&
this.keysHeightOffsetModifierCtrl === this._ctrlPressed &&
this.keysHeightOffsetModifierShift === this._shiftPressed);
}
/**
* Check if the pressed modifier keys (Alt/Ctrl/Shift) match those configured to
* allow modification of the rotationOffset value.
* @returns true if modifier keys match
*/
_modifierRotationOffset() {
return (this.keysRotationOffsetModifierAlt === this._altPressed &&
this.keysRotationOffsetModifierCtrl === this._ctrlPressed &&
this.keysRotationOffsetModifierShift === this._shiftPressed);
}
/**
* Check if the pressed modifier keys (Alt/Ctrl/Shift) match those configured to
* allow modification of the radius value.
* @returns true if modifier keys match
*/
_modifierRadius() {
return this.keysRadiusModifierAlt === this._altPressed && this.keysRadiusModifierCtrl === this._ctrlPressed && this.keysRadiusModifierShift === this._shiftPressed;
}
},
(() => {
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(null) : void 0;
_keysHeightOffsetIncr_decorators = [serialize()];
_keysHeightOffsetDecr_decorators = [serialize()];
_keysHeightOffsetModifierAlt_decorators = [serialize()];
_keysHeightOffsetModifierCtrl_decorators = [serialize()];
_keysHeightOffsetModifierShift_decorators = [serialize()];
_keysRotationOffsetIncr_decorators = [serialize()];
_keysRotationOffsetDecr_decorators = [serialize()];
_keysRotationOffsetModifierAlt_decorators = [serialize()];
_keysRotationOffsetModifierCtrl_decorators = [serialize()];
_keysRotationOffsetModifierShift_decorators = [serialize()];
_keysRadiusIncr_decorators = [serialize()];
_keysRadiusDecr_decorators = [serialize()];
_keysRadiusModifierAlt_decorators = [serialize()];
_keysRadiusModifierCtrl_decorators = [serialize()];
_keysRadiusModifierShift_decorators = [serialize()];
_heightSensibility_decorators = [serialize()];
_rotationSensibility_decorators = [serialize()];
_radiusSensibility_decorators = [serialize()];
__esDecorate(null, null, _keysHeightOffsetIncr_decorators, { kind: "field", name: "keysHeightOffsetIncr", static: false, private: false, access: { has: obj => "keysHeightOffsetIncr" in obj, get: obj => obj.keysHeightOffsetIncr, set: (obj, value) => { obj.keysHeightOffsetIncr = value; } }, metadata: _metadata }, _keysHeightOffsetIncr_initializers, _keysHeightOffsetIncr_extraInitializers);
__esDecorate(null, null, _keysHeightOffsetDecr_decorators, { kind: "field", name: "keysHeightOffsetDecr", static: false, private: false, access: { has: obj => "keysHeightOffsetDecr" in obj, get: obj => obj.keysHeightOffsetDecr, set: (obj, value) => { obj.keysHeightOffsetDecr = value; } }, metadata: _metadata }, _keysHeightOffsetDecr_initializers, _keysHeightOffsetDecr_extraInitializers);
__esDecorate(null, null, _keysHeightOffsetModifierAlt_decorators, { kind: "field", name: "keysHeightOffsetModifierAlt", static: false, private: false, access: { has: obj => "keysHeightOffsetModifierAlt" in obj, get: obj => obj.keysHeightOffsetModifierAlt, set: (obj, value) => { obj.keysHeightOffsetModifierAlt = value; } }, metadata: _metadata }, _keysHeightOffsetModifierAlt_initializers, _keysHeightOffsetModifierAlt_extraInitializers);
__esDecorate(null, null, _keysHeightOffsetModifierCtrl_decorators, { kind: "field", name: "keysHeightOffsetModifierCtrl", static: false, private: false, access: { has: obj => "keysHeightOffsetModifierCtrl" in obj, get: obj => obj.keysHeightOffsetModifierCtrl, set: (obj, value) => { obj.keysHeightOffsetModifierCtrl = value; } }, metadata: _metadata }, _keysHeightOffsetModifierCtrl_initializers, _keysHeightOffsetModifierCtrl_extraInitializers);
__esDecorate(null, null, _keysHeightOffsetModifierShift_decorators, { kind: "field", name: "keysHeightOffsetModifierShift", static: false, private: false, access: { has: obj => "keysHeightOffsetModifierShift" in obj, get: obj => obj.keysHeightOffsetModifierShift, set: (obj, value) => { obj.keysHeightOffsetModifierShift = value; } }, metadata: _metadata }, _keysHeightOffsetModifierShift_initializers, _keysHeightOffsetModifierShift_extraInitializers);
__esDecorate(null, null, _keysRotationOffsetIncr_decorators, { kind: "field", name: "keysRotationOffsetIncr", static: false, private: false, access: { has: obj => "keysRotationOffsetIncr" in obj, get: obj => obj.keysRotationOffsetIncr, set: (obj, value) => { obj.keysRotationOffsetIncr = value; } }, metadata: _metadata }, _keysRotationOffsetIncr_initializers, _keysRotationOffsetIncr_extraInitializers);
__esDecorate(null, null, _keysRotationOffsetDecr_decorators, { kind: "field", name: "keysRotationOffsetDecr", static: false, private: false, access: { has: obj => "keysRotationOffsetDecr" in obj, get: obj => obj.keysRotationOffsetDecr, set: (obj, value) => { obj.keysRotationOffsetDecr = value; } }, metadata: _metadata }, _keysRotationOffsetDecr_initializers, _keysRotationOffsetDecr_extraInitializers);
__esDecorate(null, null, _keysRotationOffsetModifierAlt_decorators, { kind: "field", name: "keysRotationOffsetModifierAlt", static: false, private: false, access: { has: obj => "keysRotationOffsetModifierAlt" in obj, get: obj => obj.keysRotationOffsetModifierAlt, set: (obj, value) => { obj.keysRotationOffsetModifierAlt = value; } }, metadata: _metadata }, _keysRotationOffsetModifierAlt_initializers, _keysRotationOffsetModifierAlt_extraInitializers);
__esDecorate(null, null, _keysRotationOffsetModifierCtrl_decorators, { kind: "field", name: "keysRotationOffsetModifierCtrl", static: false, private: false, access: { has: obj => "keysRotationOffsetModifierCtrl" in obj, get: obj => obj.keysRotationOffsetModifierCtrl, set: (obj, value) => { obj.keysRotationOffsetModifierCtrl = value; } }, metadata: _metadata }, _keysRotationOffsetModifierCtrl_initializers, _keysRotationOffsetModifierCtrl_extraInitializers);
__esDecorate(null, null, _keysRotationOffsetModifierShift_decorators, { kind: "field", name: "keysRotationOffsetModifierShift", static: false, private: false, access: { has: obj => "keysRotationOffsetModifierShift" in obj, get: obj => obj.keysRotationOffsetModifierShift, set: (obj, value) => { obj.keysRotationOffsetModifierShift = value; } }, metadata: _metadata }, _keysRotationOffsetModifierShift_initializers, _keysRotationOffsetModifierShift_extraInitializers);
__esDecorate(null, null, _keysRadiusIncr_decorators, { kind: "field", name: "keysRadiusIncr", static: false, private: false, access: { has: obj => "keysRadiusIncr" in obj, get: obj => obj.keysRadiusIncr, set: (obj, value) => { obj.keysRadiusIncr = value; } }, metadata: _metadata }, _keysRadiusIncr_initializers, _keysRadiusIncr_extraInitializers);
__esDecorate(null, null, _keysRadiusDecr_decorators, { kind: "field", name: "keysRadiusDecr", static: false, private: false, access: { has: obj => "keysRadiusDecr" in obj, get: obj => obj.keysRadiusDecr, set: (obj, value) => { obj.keysRadiusDecr = value; } }, metadata: _metadata }, _keysRadiusDecr_initializers, _keysRadiusDecr_extraInitializers);
__esDecorate(null, null, _keysRadiusModifierAlt_decorators, { kind: "field", name: "keysRadiusModifierAlt", static: false, private: false, access: { has: obj => "keysRadiusModifierAlt" in obj, get: obj => obj.keysRadiusModifierAlt, set: (obj, value) => { obj.keysRadiusModifierAlt = value; } }, metadata: _metadata }, _keysRadiusModifierAlt_initializers, _keysRadiusModifierAlt_extraInitializers);
__esDecorate(null, null, _keysRadiusModifierCtrl_decorators, { kind: "field", name: "keysRadiusModifierCtrl", static: false, private: false, access: { has: obj => "keysRadiusModifierCtrl" in obj, get: obj => obj.keysRadiusModifierCtrl, set: (obj, value) => { obj.keysRadiusModifierCtrl = value; } }, metadata: _metadata }, _keysRadiusModifierCtrl_initializers, _keysRadiusModifierCtrl_extraInitializers);
__esDecorate(null, null, _keysRadiusModifierShift_decorators, { kind: "field", name: "keysRadiusModifierShift", static: false, private: false, access: { has: obj => "keysRadiusModifierShift" in obj, get: obj => obj.keysRadiusModifierShift, set: (obj, value) => { obj.keysRadiusModifierShift = value; } }, metadata: _metadata }, _keysRadiusModifierShift_initializers, _keysRadiusModifierShift_extraInitializers);
__esDecorate(null, null, _heightSensibility_decorators, { kind: "field", name: "heightSensibility", static: false, private: false, access: { has: obj => "heightSensibility" in obj, get: obj => obj.heightSensibility, set: (obj, value) => { obj.heightSensibility = value; } }, metadata: _metadata }, _heightSensibility_initializers, _heightSensibility_extraInitializers);
__esDecorate(null, null, _rotationSensibility_decorators, { kind: "field", name: "rotationSensibility", static: false, private: false, access: { has: obj => "rotationSensibility" in obj, get: obj => obj.rotationSensibility, set: (obj, value) => { obj.rotationSensibility = value; } }, metadata: _metadata }, _rotationSensibility_initializers, _rotationSensibility_extraInitializers);
__esDecorate(null, null, _radiusSensibility_decorators, { kind: "field", name: "radiusSensibility", static: false, private: false, access: { has: obj => "radiusSensibility" in obj, get: obj => obj.radiusSensibility, set: (obj, value) => { obj.radiusSensibility = value; } }, metadata: _metadata }, _radiusSensibility_initializers, _radiusSensibility_extraInitializers);
if (_metadata) Object.defineProperty(_a, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
})(),
_a;
})();
export { FollowCameraKeyboardMoveInput };
CameraInputTypes["FollowCameraKeyboardMoveInput"] = FollowCameraKeyboardMoveInput;
//# sourceMappingURL=followCameraKeyboardMoveInput.js.map