openglobus/src/og/control/SimpleNavigation.js
2018-03-14 23:39:35 +03:00

111 lines
3.0 KiB
JavaScript

/**
* @module og/control/SimpleNavigation
*/
'use strict';
import * as math from '../math.js';
import { BaseControl } from './BaseControl.js';
import { input } from '../input/input.js';
/**
* Simple keyboard camera navigation with W,S,A,D and shift keys to fly around the scene.
* @class
* @extends {og.control.BaseControl}
* @param {Object} [options] - Control options.
*/
class SimpleNavigation extends BaseControl {
constructor(options) {
options = options || {};
super(options);
this.camera = null;
this.speed = options.speed || 1.0;
}
oninit() {
this.camera = this.renderer.activeCamera;
this.renderer.events.on("keypress", input.KEY_W, this.onCameraMoveForward, this);
this.renderer.events.on("keypress", input.KEY_S, this.onCameraMoveBackward, this);
this.renderer.events.on("keypress", input.KEY_A, this.onCameraStrifeLeft, this);
this.renderer.events.on("keypress", input.KEY_D, this.onCameraStrifeRight, this);
this.renderer.events.on("keypress", input.KEY_UP, this.onCameraLookUp, this);
this.renderer.events.on("keypress", input.KEY_DOWN, this.onCameraLookDown, this);
this.renderer.events.on("keypress", input.KEY_LEFT, this.onCameraTurnLeft, this);
this.renderer.events.on("keypress", input.KEY_RIGHT, this.onCameraTurnRight, this);
this.renderer.events.on("keypress", input.KEY_Q, this.onCameraRollLeft, this);
this.renderer.events.on("keypress", input.KEY_E, this.onCameraRollRight, this);
}
onCameraMoveForward(event) {
var camera = this.camera;
camera.slide(0, 0, -this.speed);
camera.update();
}
onCameraMoveBackward(event) {
var camera = this.camera;
camera.slide(0, 0, this.speed);
camera.update();
}
onCameraStrifeLeft(event) {
var camera = this.camera;
camera.slide(-this.speed, 0, 0);
camera.update();
}
onCameraStrifeRight(event) {
var camera = this.camera;
camera.slide(this.speed, 0, 0);
camera.update();
}
onCameraLookUp(event) {
var cam = this.camera;
cam.pitch(0.5);
cam.update();
}
onCameraLookDown(event) {
var cam = this.camera;
cam.pitch(-0.5);
cam.update();
}
onCameraTurnLeft(event) {
var cam = this.camera;
cam.yaw(0.5);
cam.update();
}
onCameraTurnRight(event) {
var cam = this.camera;
cam.yaw(-0.5);
cam.update();
}
onCameraRollLeft(event) {
var cam = this.camera;
cam.roll(-0.5);
cam.update();
}
onCameraRollRight(event) {
var cam = this.camera;
cam.roll(0.5);
cam.update();
}
};
/**
* Creates simple navigation control instance.
*/
export function simpleNavigation(options) {
return new SimpleNavigation(options);
};
export { SimpleNavigation };