UNPKG

whs

Version:

Super-fast 3D framework for Web Applications & Games. Based on Three.js

72 lines (61 loc) 1.86 kB
import {Vector3} from 'three'; import {ControlsModule} from '../ControlsModule'; import {ThreeOrbitControls} from './lib/ThreeOrbitControls'; /** * @class OrbitControlsModule * @category modules/app * @param {Object} [params] * @param {Object} [params.object=camera] Object to which controls are applied. * @param {THREE.Vector3} [params.target=new Vector3()] Controls center vector. * @param {Boolean} [params.follow=false] Follow the target * @memberof module:modules/app * @example <caption> Creating a rendering module and passing it to App's modules</caption> * new App([ * new ElementModule(), * new SceneModule(), * new DefineModule('camera', new WHS.PerspectiveCamera({ * position: new THREE.Vector3(0, 6, 18), * far: 10000 * })), * new RenderingModule(), * new OrbitControlsModule() * ]); */ export class OrbitControlsModule extends ControlsModule { constructor(params = {}) { super(params); this.params = Object.assign({ follow: false, object: null, target: new Vector3() }, params); } manager(manager) { super.manager(manager); const {object: obj, follow, target} = this.params; const object = obj ? obj.native : manager.get('camera').native; const controls = new ThreeOrbitControls( object, manager.get('element'), manager.handler ); const updateProcessor = follow ? c => { controls.update(c.getDelta()); controls.target.copy(target); } : c => { controls.update(c.getDelta()); }; this.setControls(controls); this.setUpdate(updateProcessor); manager.update({ camera: camera => { if (obj) return; controls.object = camera.native; }, element: element => { controls.domElement = element; } }); controls.target.copy(target); } }