123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162 |
- module BABYLON {
- export class ArcRotateCameraKeyboardMoveInput implements ICameraInput<ArcRotateCamera> {
- camera: ArcRotateCamera;
- private _keys = [];
-
- @serialize()
- public keysUp = [38];
- @serialize()
- public keysDown = [40];
- @serialize()
- public keysLeft = [37];
- @serialize()
- public keysRight = [39];
- @serialize()
- public keysReset = [220];
- @serialize()
- public panningSensibility: number = 50.0;
- @serialize()
- public zoomingSensibility: number = 25.0;
- @serialize()
- public useAltToZoom: boolean = true;
- private _ctrlPressed: boolean;
- private _altPressed: boolean;
- private _onCanvasBlurObserver: Observer<Engine>;
- private _onKeyboardObserver: Observer<KeyboardInfo>;
- private _engine: Engine;
- private _scene: Scene;
- public attachControl(element: HTMLElement, noPreventDefault?: boolean) {
- if (this._onCanvasBlurObserver) {
- return;
- }
-
- this._scene = this.camera.getScene();
- this._engine = this._scene.getEngine();
- this._onCanvasBlurObserver = this._engine.onCanvasBlurObservable.add(()=>{
- this._keys = [];
- });
- this._onKeyboardObserver = this._scene.onKeyboardObservable.add(info => {
- let evt = info.event;
- if (info.type === KeyboardEventTypes.KEYDOWN) {
- this._ctrlPressed = evt.ctrlKey;
- this._altPressed = evt.altKey;
- if (this.keysUp.indexOf(evt.keyCode) !== -1 ||
- this.keysDown.indexOf(evt.keyCode) !== -1 ||
- this.keysLeft.indexOf(evt.keyCode) !== -1 ||
- this.keysRight.indexOf(evt.keyCode) !== -1 ||
- this.keysReset.indexOf(evt.keyCode) !== -1) {
- var index = this._keys.indexOf(evt.keyCode);
- if (index === -1) {
- this._keys.push(evt.keyCode);
- }
- if (evt.preventDefault) {
- if (!noPreventDefault) {
- evt.preventDefault();
- }
- }
- }
- }
- else {
- if (this.keysUp.indexOf(evt.keyCode) !== -1 ||
- this.keysDown.indexOf(evt.keyCode) !== -1 ||
- this.keysLeft.indexOf(evt.keyCode) !== -1 ||
- this.keysRight.indexOf(evt.keyCode) !== -1 ||
- this.keysReset.indexOf(evt.keyCode) !== -1) {
- var index = this._keys.indexOf(evt.keyCode);
-
- if (index >= 0) {
- this._keys.splice(index, 1);
- }
-
- if (evt.preventDefault) {
- if (!noPreventDefault) {
- evt.preventDefault();
- }
- }
- }
- }
- });
- }
- public detachControl(element: HTMLElement) {
- if (this._scene) {
- this._scene.onKeyboardObservable.remove(this._onKeyboardObserver);
- this._engine.onCanvasBlurObservable.remove(this._onCanvasBlurObserver);
- this._onKeyboardObserver = null;
- this._onCanvasBlurObserver = null;
- }
- this._keys = [];
- }
- public checkInputs() {
- if (this._onKeyboardObserver){
- var camera = this.camera;
- for (var index = 0; index < this._keys.length; index++) {
- var keyCode = this._keys[index];
- if (this.keysLeft.indexOf(keyCode) !== -1) {
- if (this._ctrlPressed && this.camera._useCtrlForPanning) {
- camera.inertialPanningX -= 1 / this.panningSensibility;
- } else {
- camera.inertialAlphaOffset -= 0.01;
- }
- } else if (this.keysUp.indexOf(keyCode) !== -1) {
- if (this._ctrlPressed && this.camera._useCtrlForPanning) {
- camera.inertialPanningY += 1 / this.panningSensibility;
- }
- else if (this._altPressed && this.useAltToZoom) {
- camera.inertialRadiusOffset -= 1 / this.zoomingSensibility;
- }
- else {
- camera.inertialBetaOffset -= 0.01;
- }
- } else if (this.keysRight.indexOf(keyCode) !== -1) {
- if (this._ctrlPressed && this.camera._useCtrlForPanning) {
- camera.inertialPanningX += 1 / this.panningSensibility;
- } else {
- camera.inertialAlphaOffset += 0.01;
- }
- } else if (this.keysDown.indexOf(keyCode) !== -1) {
- if (this._ctrlPressed && this.camera._useCtrlForPanning) {
- camera.inertialPanningY -= 1 / this.panningSensibility;
- }
- else if (this._altPressed && this.useAltToZoom) {
- camera.inertialRadiusOffset += 1 / this.zoomingSensibility;
- }
- else {
- camera.inertialBetaOffset += 0.01;
- }
- } else if (this.keysReset.indexOf(keyCode) !== -1) {
- camera.restoreState();
- }
- }
- }
- }
- getClassName(): string {
- return "ArcRotateCameraKeyboardMoveInput";
- }
-
- getSimpleName(){
- return "keyboard";
- }
- }
-
- CameraInputTypes["ArcRotateCameraKeyboardMoveInput"] = ArcRotateCameraKeyboardMoveInput;
- }
|