updateinstance property for light and camera

beta.r3js.org
-=yb4f310 2017-11-17 20:25:56 +01:00
parent 5bd229869e
commit e1adfbb990
3 changed files with 121 additions and 109 deletions

View File

@ -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;
}

View File

@ -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();
};

View File

@ -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());
}
};
/**