/** * Controls Superset - The apiControls properties get moved into the Controls object itself, and then the instance is created * @param graphics R3.GraphicsRuntime * @param apiEditorControls * @constructor */ R3.Controls.D3.Editor = function ( graphics, apiEditorControls ) { this.graphics = graphics; this.graphics.isNotThreeThrow(); if (R3.Utils.UndefinedOrNull(apiEditorControls)) { apiEditorControls = { controlsType : R3.API.Controls.CONTROLS_TYPE_EDITOR }; } if (R3.Utils.UndefinedOrNull()) { apiEditorControls.controlsType = R3.API.Controls.CONTROLS_TYPE_EDITOR; } R3.API.Controls.D3.Editor.call( this, apiEditorControls, apiEditorControls.raycaster, apiEditorControls.camera ); if (this.raycaster instanceof R3.D3.API.Raycaster) { this.raycaster = new R3.D3.Raycaster( this.graphics, this.raycaster ); } R3.Controls.call( this, apiEditorControls ); }; /** * Inheritance * @type {R3.Controls} */ R3.Controls.D3.Editor.prototype = Object.create(R3.Controls.D3.prototype); R3.Controls.D3.Editor.prototype.constructor = R3.Controls.D3.Editor; /** * Create Instance */ R3.Controls.D3.Editor.prototype.createInstance = function() { if ( R3.Utils.UndefinedOrNull(this.camera) || R3.Utils.UndefinedOrNull(this.camera.instance) ) { console.warn('no camera at time of editor-controls create instance'); return; } if ( R3.Utils.UndefinedOrNull(this.canvas) || R3.Utils.UndefinedOrNull(this.canvas.instance) ) { console.warn('no canvas at time of editor-controls create instance'); return; } this.instance = new THREE.EditorControls( this.camera.instance, this.canvas.instance ); R3.Controls.prototype.createInstance.call(this); }; /** * Update Instance */ R3.Controls.D3.Editor.prototype.updateInstance = function(property) { if ( property === 'canvas' || property === 'camera' ) { if (R3.Utils.UndefinedOrNull(this.instance)) { this.createInstance(); } else { this.instance.dispose(); this.createInstance(); } } console.warn('an update instance was called on editor controls - which, if not called from within a running system at the right time will affect the order of input event handling and cause system instability'); R3.Controls.prototype.updateInstance.call(this, property); }; /** * Converts a R3.Controls.D3.Editor to a R3.D3.API.Mesh * @returns {R3.API.Controls} */ R3.Controls.D3.Editor.prototype.toApiObject = function() { var apiControls = R3.Controls.prototype.toApiObject.call(this); apiControls.raycaster = R3.Utils.IdOrNull(this.raycaster); apiControls.camera = R3.Utils.IdOrNull(this.camera); return apiControls; };