From e1adfbb990c84b202b45f60c5846e6c1c7358e92 Mon Sep 17 00:00:00 2001 From: -=yb4f310 Date: Fri, 17 Nov 2017 20:25:56 +0100 Subject: [PATCH] updateinstance property for light and camera --- src/game-lib-d3-api-controls.js | 6 ++ src/game-lib-d3-camera.js | 125 +++++++++++++++++++------------- src/game-lib-d3-light.js | 99 ++++++++++--------------- 3 files changed, 121 insertions(+), 109 deletions(-) diff --git a/src/game-lib-d3-api-controls.js b/src/game-lib-d3-api-controls.js index b30e04b..d57048b 100644 --- a/src/game-lib-d3-api-controls.js +++ b/src/game-lib-d3-api-controls.js @@ -12,6 +12,7 @@ GameLib.D3.API.Controls = function( controlsType, name, domElement, + // fullscreen, parentEntity ) { if (GameLib.Utils.UndefinedOrNull(id)) { @@ -70,6 +71,11 @@ GameLib.D3.API.Controls = function( } this.domElement = domElement; + // if (GameLib.Utils.UndefinedOrNull(fullscreen)) { + // fullscreen = false; + // } + // this.fullscreen = fullscreen; + if (GameLib.Utils.UndefinedOrNull(parentEntity)) { parentEntity = null; } diff --git a/src/game-lib-d3-camera.js b/src/game-lib-d3-camera.js index 4817425..0313f66 100644 --- a/src/game-lib-d3-camera.js +++ b/src/game-lib-d3-camera.js @@ -139,68 +139,95 @@ GameLib.D3.Camera.prototype.createInstance = function() { /** * Updates the instance with the current state */ -GameLib.D3.Camera.prototype.updateInstance = function() { +GameLib.D3.Camera.prototype.updateInstance = function(property) { - if ( - this.cameraType === GameLib.D3.Camera.CAMERA_TYPE_ORTHOGONAL && - this.instance instanceof THREE.PerspectiveCamera - ) { - this.createInstance(); + if (GameLib.Utils.UndefinedOrNull(property)) { + console.warn('no camera property specified for : ' + this.name); + } + + if (property === 'cameraType') { + if ( + this.cameraType === GameLib.D3.Camera.CAMERA_TYPE_ORTHOGONAL && + !(this.instance instanceof THREE.OrthographicCamera) + ) { + this.createInstance(); + } + + if ( + this.cameraType === GameLib.D3.Camera.CAMERA_TYPE_PERSPECTIVE && + !(this.instance instanceof THREE.PerspectiveCamera) + ) { + this.createInstance(); + } } if ( - this.cameraType === GameLib.D3.Camera.CAMERA_TYPE_PERSPECTIVE && - this.instance instanceof THREE.OrthographicCamera + property === 'aspect' || + property === 'minX' || + property === 'maxX' || + property === 'minZ' || + property === 'maxZ' || + property === 'offsetX' || + property === 'offsetY' || + property === 'fov' || + property === 'near' || + property === 'far' || + property === 'eyeSeparation' || + property === 'focalLength' ) { - this.createInstance(); + + if (this.cameraType === GameLib.D3.Camera.CAMERA_TYPE_ORTHOGONAL) { + + this.minX = this.aspect * this.minY; + this.maxX = this.aspect * this.maxY; + + this.instance.left = this.minX + this.offsetX; + this.instance.right = this.maxX + this.offsetX; + + this.instance.bottom = this.minY + this.offsetY; + this.instance.top = this.maxY + this.offsetY; + + this.instance.near = this.minZ; + this.instance.far = this.maxZ; + } + + if ( + this.cameraType === GameLib.D3.Camera.CAMERA_TYPE_PERSPECTIVE || + this.cameraType === GameLib.D3.Camera.CAMERA_TYPE_STEREO + ) { + this.instance.fov = this.fov; + this.instance.aspect = this.aspect; + this.instance.near = this.near; + this.instance.far = this.far; + } + + if (this.cameraType === GameLib.D3.Camera.CAMERA_TYPE_STEREO) { + this.instance.eyeSeparation = this.eyeSeparation; + this.instance.focalLength = this.focalLength; + this.instance.update(this.instance); + } } - if (this.cameraType === GameLib.D3.Camera.CAMERA_TYPE_ORTHOGONAL) { - - this.minX = this.aspect * this.minY; - this.maxX = this.aspect * this.maxY; - - this.instance.left = this.minX + this.offsetX; - this.instance.right = this.maxX + this.offsetX; - - this.instance.bottom = this.minY + this.offsetY; - this.instance.top = this.maxY + this.offsetY; - - this.instance.near = this.minZ; - this.instance.far = this.maxZ; + if (property === 'position') { + this.instance.position.x = this.position.x; + this.instance.position.y = this.position.y; + this.instance.position.z = this.position.z; } - if ( - this.cameraType === GameLib.D3.Camera.CAMERA_TYPE_PERSPECTIVE || - this.cameraType === GameLib.D3.Camera.CAMERA_TYPE_STEREO - ) { - this.instance.fov = this.fov; - this.instance.aspect = this.aspect; - this.instance.near = this.near; - this.instance.far = this.far; + if (property === 'quaternion') { + this.instance.quaternion.x = this.quaternion.x; + this.instance.quaternion.y = this.quaternion.y; + this.instance.quaternion.z = this.quaternion.z; + this.instance.quaternion.w = this.quaternion.w; } - if (this.cameraType === GameLib.D3.Camera.CAMERA_TYPE_STEREO) { - this.instance.eyeSeparation = this.eyeSeparation; - this.instance.focalLength = this.focalLength; - this.instance.update(this.instance); + if (property === 'lookAt') { + this.lookAt.instance.x = this.lookAt.x; + this.lookAt.instance.y = this.lookAt.y; + this.lookAt.instance.z = this.lookAt.z; + this.instance.lookAt(this.lookAt.instance); } - this.instance.position.x = this.position.x; - this.instance.position.y = this.position.y; - this.instance.position.z = this.position.z; - - this.instance.quaternion.x = this.quaternion.x; - this.instance.quaternion.y = this.quaternion.y; - this.instance.quaternion.z = this.quaternion.z; - this.instance.quaternion.w = this.quaternion.w; - - this.lookAt.instance.x = this.lookAt.x; - this.lookAt.instance.y = this.lookAt.y; - this.lookAt.instance.z = this.lookAt.z; - - this.instance.lookAt(this.lookAt.instance); - this.instance.updateProjectionMatrix(); }; diff --git a/src/game-lib-d3-light.js b/src/game-lib-d3-light.js index b5c8883..4bcc00f 100644 --- a/src/game-lib-d3-light.js +++ b/src/game-lib-d3-light.js @@ -177,77 +177,56 @@ GameLib.D3.Light.prototype.createInstance = function() { /** * Updates the instance with the current state */ -GameLib.D3.Light.prototype.updateInstance = function() { +GameLib.D3.Light.prototype.updateInstance = function(property) { - if (GameLib.Utils.UndefinedOrNull(this.instance)) { - console.warn('cannot update an non-existent light'); - return + if (GameLib.Utils.UndefinedOrNull(property)) { + console.warn('no property for light: ' + this.name); } - var lightTypeChange = false; - - if ( - this.lightType === GameLib.D3.Light.LIGHT_TYPE_AMBIENT && - !(this.instance instanceof THREE.AmbientLight) - ) { - - lightTypeChange = true; - - } else if ( - this.lightType === GameLib.D3.Light.LIGHT_TYPE_DIRECTIONAL && - !(this.instance instanceof THREE.DirectionalLight) - ) { - - lightTypeChange = true; - - } else if ( - this.lightType === GameLib.D3.Light.LIGHT_TYPE_POINT && - !(this.instance instanceof THREE.PointLight) - ) { - - lightTypeChange = true; - - } else if ( - this.lightType === GameLib.D3.Light.LIGHT_TYPE_SPOT && - !(this.instance instanceof THREE.SpotLight) - ) { - lightTypeChange = true; + if (property === 'lightType') { + this.parentScene.instance.remove(this.instance); + this.createInstance(); + this.parentScene.instance.add(this.instance); } - if (lightTypeChange) { - try { - this.parentScene.instance.remove(this.instance); - this.createInstance(); - this.parentScene.instance.add(this.instance); - } catch (error) { - console.error(error); + if (property === 'name') { + this.instance.name = this.name; + } + + if (property === 'position') { + this.instance.position.x = this.position.x; + this.instance.position.y = this.position.y; + this.instance.position.z = this.position.z; + } + + if (property === 'scale') { + this.instance.scale.x = this.scale.x; + this.instance.scale.y = this.scale.y; + this.instance.scale.z = this.scale.z; + } + + if (property === 'target') { + if (this.instance.target) { + this.instance.target.position.x = this.targetPosition.x; + this.instance.target.position.y = this.targetPosition.y; + this.instance.target.position.z = this.targetPosition.z; } } - this.instance.name = this.name; - - this.instance.position.x = this.position.x; - this.instance.position.y = this.position.y; - this.instance.position.z = this.position.z; - - this.instance.scale.x = this.scale.x; - this.instance.scale.y = this.scale.y; - this.instance.scale.z = this.scale.z; - - if (this.instance.target) { - this.instance.target.position.x = this.targetPosition.x; - this.instance.target.position.y = this.targetPosition.y; - this.instance.target.position.z = this.targetPosition.z; + if (property === 'quaternion') { + this.instance.quaternion.x = this.quaternion.x; + this.instance.quaternion.y = this.quaternion.y; + this.instance.quaternion.z = this.quaternion.z; + this.instance.quaternion.w = this.quaternion.w; } - this.instance.quaternion.x = this.quaternion.x; - this.instance.quaternion.y = this.quaternion.y; - this.instance.quaternion.z = this.quaternion.z; - this.instance.quaternion.w = this.quaternion.w; + if (property === 'intensity') { + this.instance.intensity = this.intensity; + } - this.instance.intensity = this.intensity; - - this.instance.color.set(this.color.toHex()); + if (property === 'color') { + this.instance.color.set(this.color.toHex()); + } }; /**