|
@@ -1,4 +1,4 @@
|
|
|
-import { Observer, EventState } from "../../Misc/observable";
|
|
|
+import { Observer, EventState, Observable } from "../../Misc/observable";
|
|
|
import { serialize } from "../../Misc/decorators";
|
|
|
import { Nullable } from "../../types";
|
|
|
import { ICameraInput, CameraInputTypes } from "../../Cameras/cameraInputsManager";
|
|
@@ -30,7 +30,9 @@ export class FreeCameraMouseInput implements ICameraInput<FreeCamera> {
|
|
|
private _onMouseMove: Nullable<(e: MouseEvent) => any>;
|
|
|
private _observer: Nullable<Observer<PointerInfo>>;
|
|
|
private previousPosition: Nullable<{ x: number, y: number }> = null;
|
|
|
-
|
|
|
+
|
|
|
+ public _onMouseMoved = new Observable<{ offsetX: number, offsetY: number }>();
|
|
|
+ public _moveCamera = true;
|
|
|
/**
|
|
|
* Manage the mouse inputs to control the movement of a free camera.
|
|
|
* @see http://doc.babylonjs.com/how_to/customizing_camera_inputs
|
|
@@ -105,12 +107,15 @@ export class FreeCameraMouseInput implements ICameraInput<FreeCamera> {
|
|
|
}
|
|
|
|
|
|
var offsetX = evt.clientX - this.previousPosition.x;
|
|
|
+ var offsetY = evt.clientY - this.previousPosition.y;
|
|
|
if (this.camera.getScene().useRightHandedSystem) { offsetX *= -1; }
|
|
|
if (this.camera.parent && this.camera.parent._getWorldMatrixDeterminant() < 0) { offsetX *= -1; }
|
|
|
- this.camera.cameraRotation.y += offsetX / this.angularSensibility;
|
|
|
|
|
|
- var offsetY = evt.clientY - this.previousPosition.y;
|
|
|
- this.camera.cameraRotation.x += offsetY / this.angularSensibility;
|
|
|
+ if(this._moveCamera){
|
|
|
+ this.camera.cameraRotation.y += offsetX / this.angularSensibility;
|
|
|
+ this.camera.cameraRotation.x += offsetY / this.angularSensibility;
|
|
|
+ }
|
|
|
+ this._onMouseMoved.notifyObservers({offsetX:offsetX, offsetY:offsetY})
|
|
|
|
|
|
this.previousPosition = {
|
|
|
x: evt.clientX,
|
|
@@ -179,6 +184,10 @@ export class FreeCameraMouseInput implements ICameraInput<FreeCamera> {
|
|
|
element.removeEventListener("contextmenu", <EventListener>this.onContextMenu);
|
|
|
}
|
|
|
|
|
|
+ if (this._onMouseMoved) {
|
|
|
+ this._onMouseMoved.clear();
|
|
|
+ }
|
|
|
+
|
|
|
this._observer = null;
|
|
|
this._onMouseMove = null;
|
|
|
this.previousPosition = null;
|