mirror of
https://github.com/openglobus/openglobus.git
synced 2025-12-08 19:25:27 +00:00
111 lines
3.0 KiB
JavaScript
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 };
|