diff --git a/src/game-lib-component-a.js b/src/game-lib-component-a.js deleted file mode 100644 index c8c79df..0000000 --- a/src/game-lib-component-a.js +++ /dev/null @@ -1,331 +0,0 @@ -/** - * Common properties of all Components - * @param id - * @param name - * @param componentType GameLib.Component.COMPONENT_* - * @param parentEntity GameLib.Entity - * @param linkedProperties GameLib.D3.LinkedProperty[] - * @constructor - */ -GameLib.Component = function Component( - id, - name, - componentType, - parentEntity, - linkedProperties -) { - this.id = id || GameLib.Utils.RandomId(); - - if (GameLib.Utils.UndefinedOrNull(name)) { - name = this.constructor.name; - } - this.name = name; - - if (GameLib.Utils.UndefinedOrNull(componentType)) { - throw new Error('No Component Type - You should extend from this class not instantiate directly'); - } - this.componentType = componentType; - - if (GameLib.Utils.UndefinedOrNull(parentEntity)) { - parentEntity = null; - } - this.parentEntity = parentEntity; - - if (GameLib.Utils.UndefinedOrNull(linkedProperties)) { - linkedProperties = []; - } - this.linkedProperties = linkedProperties; - - this.linkedProperties.push( - new GameLib.Component.LinkedProperty( - 'parentEntity', - GameLib.Entity - ) - ) -}; - -/** - * Each custom component has some properties which are converted to Strind IDs for storing to API, - * and then linked before Runtime (after loading from API) back to their actual objects (through the ID) - * @param propertyName String - * @param objectType GameLib.D3.Object - * @constructor - */ -GameLib.Component.LinkedProperty = function( - propertyName, - objectType -) { - this.propertyName = propertyName; - this.objectType = objectType; -}; - -GameLib.Component.COMPONENT_INTERFACE = 0x1; -GameLib.Component.COMPONENT_CAMERA = 0x2; -GameLib.Component.COMPONENT_COLOR_FLASH = 0x3; -GameLib.Component.COMPONENT_COLOR_LERP = 0x4; -GameLib.Component.COMPONENT_FLY_CONTROLS = 0x5; -GameLib.Component.COMPONENT_FOLLOW = 0x6; -GameLib.Component.COMPONENT_LOOK_AT = 0x7; -GameLib.Component.COMPONENT_MESH = 0x8; -GameLib.Component.COMPONENT_MESH_PERMUTATION = 0x9; -GameLib.Component.COMPONENT_PATH_AI = 0xA; -GameLib.Component.COMPONENT_PATH_FOLLOWING = 0xB; -GameLib.Component.COMPONENT_PATH_CONTROLS = 0xC; -GameLib.Component.COMPONENT_RAYCAST_VEHICLE_CONTROLS = 0xD; -GameLib.Component.COMPONENT_TRIGGER_BOX_BOX = 0xE; -GameLib.Component.COMPONENT_TRIGGER_BOX_SPHERE = 0xF; -GameLib.Component.COMPONENT_TRIGGER_SPHERE_SPHERE = 0x10; -GameLib.Component.COMPONENT_VEHICLE_AI_OBJECT_AVOIDENCE = 0x11; -GameLib.Component.COMPONENT_VEHICLE_AI_PATH_STEERING = 0x12; - -GameLib.Component.prototype.toApiComponent = function() { - - var apiComponent = new GameLib.API.Component( - this.id, - this.name, - this.componentType, - GameLib.Utils.IdOrNull(this.parentEntity) - ); - - var isObjectProperty; - - for (var property in apiComponent) { - if ( - apiComponent.hasOwnProperty(property) && - this.hasOwnProperty(property) - ) { - isObjectProperty = false; - - for (var l = 0; l < this.linkedProperties.length; l++) { - - var linkedProperty = this.linkedProperties[l]; - - if (linkedProperty.propertyName == property) { - isObjectProperty = true; - break; - } - } - - if (isObjectProperty) { - apiComponent[property] = GameLib.Utils.IdOrNull(this[property]); - } else if ( - this[property] instanceof GameLib.Vector2 || - this[property] instanceof GameLib.Vector3 - ) { - apiComponent[property] = this[property].toApiVector(); - } else if (this[property] instanceof GameLib.Quaternion) { - apiComponent[property] = this[property].toApiQuaternion(); - } else if ( - this[property] instanceof GameLib.Matrix3 || - this[property] instanceof GameLib.Matrix4 - ) { - apiComponent[property] = this[property].toApiMatrix(); - } else { - apiComponent[property] = this[property]; - } - } else if ( - apiComponent.hasOwnProperty(property) - ) { - delete apiComponent[property]; - } - - } - - return apiComponent; -}; - -/** - * Converts and Object component into a proper GameLib.Component - * @param graphics - * @param objectComponent - * @constructor - */ -GameLib.Component.FromObjectComponent = function(graphics, objectComponent) { - - var component = null; - - switch (objectComponent.componentType) { - - case GameLib.Component.COMPONENT_CAMERA : - component = new GameLib.ComponentCamera(); - break; - - case GameLib.Component.COMPONENT_FOLLOW : - component = new GameLib.ComponentFollow(null, null, graphics); - break; - - case GameLib.Component.COMPONENT_LOOK_AT : - component = new GameLib.ComponentLookAt(null, null, graphics); - break; - - case GameLib.Component.COMPONENT_PATH_FOLLOWING : - component = new GameLib.ComponentPathFollowing(null, null, graphics); - break; - case GameLib.Component.COMPONENT_MESH : - component = new GameLib.ComponentMesh(null, null, graphics); - break; - case GameLib.Component.COMPONENT_MESH_PERMUTATION : - component = new GameLib.ComponentMeshPermutation(null, null, graphics); - break; - default: - console.warn('This type of component is not yet read from the database:' + objectComponent.componentType); - - } - - for (var property in component) { - if ( - component.hasOwnProperty(property) && - objectComponent.hasOwnProperty(property) - ) { - if (component[property] instanceof GameLib.Vector2) { - component[property] = new GameLib.Vector2( - graphics, - component, - new GameLib.API.Vector2( - objectComponent[property].x, - objectComponent[property].y - ) - ) - } else if (component[property] instanceof GameLib.Vector3) { - component[property] = new GameLib.Vector3( - graphics, - component, - new GameLib.API.Vector3( - objectComponent[property].x, - objectComponent[property].y, - objectComponent[property].z - ) - ) - } else if (component[property] instanceof GameLib.Quaternion) { - - component[property] = new GameLib.Quaternion( - graphics, - component, - new GameLib.API.Quaternion( - objectComponent[property].x, - objectComponent[property].y, - objectComponent[property].z, - objectComponent[property].w, - new GameLib.API.Vector3( - objectComponent[property].axis.x, - objectComponent[property].axis.y, - objectComponent[property].axis.z - ), - objectComponent[property].angle - ) - ) - - } else if (component[property] instanceof GameLib.D3.Color) { - - component[property] = new GameLib.D3.Color( - graphics, - component, - new GameLib.D3.API.Color( - objectComponent[property].r, - objectComponent[property].g, - objectComponent[property].b, - objectComponent[property].a - ) - ) - - } else if (component[property] instanceof GameLib.Matrix4) { - - component[property] = new GameLib.Matrix4( - graphics, - component, - new GameLib.API.Matrix4( - new GameLib.API.Quaternion( - objectComponent[property].rows[0].x, - objectComponent[property].rows[0].y, - objectComponent[property].rows[0].z, - objectComponent[property].rows[0].w - ), - new GameLib.API.Quaternion( - objectComponent[property].rows[1].x, - objectComponent[property].rows[1].y, - objectComponent[property].rows[1].z, - objectComponent[property].rows[1].w - ), - new GameLib.API.Quaternion( - objectComponent[property].rows[2].x, - objectComponent[property].rows[2].y, - objectComponent[property].rows[2].z, - objectComponent[property].rows[2].w - ), - new GameLib.API.Quaternion( - objectComponent[property].rows[3].x, - objectComponent[property].rows[3].y, - objectComponent[property].rows[3].z, - objectComponent[property].rows[3].w - ) - ) - ) - - } else { - component[property] = objectComponent[property]; - } - } - } - - return component; -}; - -/** - * Gets executed from every entity during each game state loop - * Set the callbacks to null initially to prevent unneccesary function calls - * @param deltaTime - * @override - * @callback - * @default null - */ -GameLib.Component.prototype.onUpdate = null; - -/** - * Gets executed from every entity during each game loop - after onUpdate has been called - * Set the callbacks to null initially to prevent unneccesary function calls - * @param deltaTime - * @override - * @callback - */ -GameLib.Component.prototype.onLateUpdate = null; - - -/** - * Gets executed when component is added to an Entity - * @param entity GameLib.Entity - * @override - * @callback - */ -GameLib.Component.prototype.onAdd = function(entity) {}; - -/** - * Gets executed when a component is removed from an Entity - * @param entity GameLib.Entity - * @override - * @callback - */ -GameLib.Component.prototype.onRemove = function(entity) {}; - -/** - * links object ids to actual objects - * @param idToObject Object linking object components to objects - */ -GameLib.Component.prototype.linkObjects = function(idToObject) { - - this.linkedProperties.forEach( - function (linkedProperty) { - if (this[linkedProperty.propertyName]) { - this[linkedProperty.propertyName] = idToObject[this[linkedProperty.propertyName]]; - } - }.bind(this) - ); -}; - - -/** - * Clones this component - * @returns {*} - */ -GameLib.Component.prototype.clone = function() { - return _.cloneDeep(this); -}; diff --git a/src/game-lib-component-camera.js b/src/game-lib-component-camera.js deleted file mode 100644 index 97bd3c5..0000000 --- a/src/game-lib-component-camera.js +++ /dev/null @@ -1,61 +0,0 @@ -/** - * Creates a camera component which just assigns the position and rotation to whatever its parent position and rotation - * is. - * @param id - * @param name String - * @param parentEntity GameLib.Entity - * @param camera GameLib.D3.Camera - * @constructor - */ -GameLib.ComponentCamera = function ComponentCamera( - id, - name, - parentEntity, - camera -) { - GameLib.Component.call( - this, - id, - name, - GameLib.Component.COMPONENT_CAMERA, - parentEntity, - [ - new GameLib.Component.LinkedProperty( - 'camera', - GameLib.D3.Camera - ) - ] - ); - - if (GameLib.Utils.UndefinedOrNull(camera)) { - camera = null; - } - this.camera = camera; -}; - -GameLib.ComponentCamera.prototype = Object.create(GameLib.Component.prototype); -GameLib.ComponentCamera.prototype.constructor = GameLib.ComponentCamera; - - -/** - * onLateUpdate override method - * @override - * @callback - */ -GameLib.ComponentCamera.prototype.onLateUpdate = function() { - - if (this.camera) { - - this.camera.quaternion.x = this.parentEntity.quaternion.x; - this.camera.quaternion.y = this.parentEntity.quaternion.y; - this.camera.quaternion.z = this.parentEntity.quaternion.z; - this.camera.quaternion.w = this.parentEntity.quaternion.w; - - this.camera.position.x = this.parentEntity.position.x; - this.camera.position.y = this.parentEntity.position.y; - this.camera.position.z = this.parentEntity.position.z; - - this.camera.updateInstance(); - } - -}; \ No newline at end of file diff --git a/src/game-lib-component-colorflash.js b/src/game-lib-component-colorflash.js deleted file mode 100644 index 603bc37..0000000 --- a/src/game-lib-component-colorflash.js +++ /dev/null @@ -1,37 +0,0 @@ -/** - * - * @param id - * @param name - * @constructor - */ -GameLib.ComponentColorFlash = function ComponentColorFlash( - id, - name -) { - this.id = id || GameLib.Utils.RandomId(); - - if (typeof name == 'undefined') { - name = this.constructor.name; - } - this.name = name; - - this.parentEntity = null; - - // Todo: this should be executed somewhere in game-lib-z, so that we don't execute it on every construction of an object. - GameLib.Utils.Extend(GameLib.ComponentColorFlash, GameLib.Component); -}; - -///////////////////////// Methods to override ////////////////////////// -GameLib.ComponentColorFlash.prototype.onUpdate = function( - deltaTime, - parentEntity -) { - this.parentEntity.mesh.material.color = new THREE.Color(Math.random(), Math.random(), Math.random()); -}; - -GameLib.ComponentColorFlash.prototype.onSetParentEntity = function( - parentScene, - parentEntity -) { - parentEntity.mesh.material = new THREE.MeshBasicMaterial(); -}; \ No newline at end of file diff --git a/src/game-lib-component-colorlerp.js b/src/game-lib-component-colorlerp.js deleted file mode 100644 index e832809..0000000 --- a/src/game-lib-component-colorlerp.js +++ /dev/null @@ -1,66 +0,0 @@ -GameLib.ComponentColorLerp = function( - id, - name, - startColor, - endColor, - lerpSpeed -) { - this.id = id|| GameLib.Utils.RandomId(); - if (typeof name == 'undefined') { - name = this.constructor.name; - } - this.name = name; - - this.parentEntity = null; - - // Todo: this should be executed somewhere in game-lib-z, so that we don't execute it on every construction of an object. - GameLib.Utils.Extend(GameLib.ComponentColorLerp, GameLib.Component); - - this.startColor = startColor || new GameLib.API.Vector3(0, 0, 0); - this.endColor = endColor || new GameLib.API.Vector3(1, 1, 1); - this.lerpSpeed = lerpSpeed || 1.0; - - this.lerpTarget = this.endColor; -}; - -///////////////////////// Methods to override ////////////////////////// -GameLib.ComponentColorLerp.prototype.onUpdate = function( - deltaTime, - parentEntity -) { - var t = deltaTime * this.lerpSpeed; - // t = t * t * t * (t * (6.0 * t - 15.0) + 10.0); - - parentEntity.mesh.material.color.r = parentEntity.mesh.material.color.r + (this.endColor.x - parentEntity.mesh.material.color.r) * t; - parentEntity.mesh.material.color.g = parentEntity.mesh.material.color.g + (this.endColor.y - parentEntity.mesh.material.color.g) * t; - parentEntity.mesh.material.color.b = parentEntity.mesh.material.color.b + (this.endColor.z - parentEntity.mesh.material.color.b) * t; - - -/* if( parentEntity.mesh.material.color.r == this.endColor.x - && parentEntity.mesh.material.color.g == this.endColor.y - && parentEntity.mesh.material.color.b == this.endColor.z - ) { - - - console.error("switch target"); - //this.lerpTarget = this.startColor; - - } /!*else if (parentEntity.mesh.material.color.r == this.startColor.x - && parentEntity.mesh.material.color.g == this.startColor.y - && parentEntity.mesh.material.color.b == this.startColor.z) { - - this.lerpTarget = this.endColor; - }*!/*/ - -}; - -GameLib.ComponentColorLerp.prototype.onSetParentEntity = function( - parentScene, - parentEntity -) { - parentEntity.mesh.material.color = new THREE.Color( - this.startColor.x, - this.startColor.y, - this.startColor.z - ); -}; \ No newline at end of file diff --git a/src/game-lib-component-entity-parent.js b/src/game-lib-component-entity-parent.js deleted file mode 100644 index 2147eda..0000000 --- a/src/game-lib-component-entity-parent.js +++ /dev/null @@ -1,117 +0,0 @@ -/** - * - * @param id {String} - * @param name {String} - * @param parent {GameLib.Entity} - * @param centerToOrigin {Boolean} - * @constructor - */ -GameLib.ComponentEntityParent = function ComponentEntityParent( - id, - name, - parent, - centerToOrigin -) { - this.id = id || GameLib.Utils.RandomId(); - - if (typeof name == 'undefined') { - name = this.constructor.name; - } - this.name = name; - this.parent = parent; - - this.parentEntity = null; - this.centerToOrigin = centerToOrigin; - this.originPosition = new GameLib.API.Vector3(0, 0, 0); - - GameLib.Utils.Extend(GameLib.ComponentEntityParent, GameLib.Component); -}; - -//#ifdef RUNTIME__ - -if(typeof THREE !== "undefined") { - ComponentEntityParent_TmpVector = new THREE.Vector3(); - ComponentEntityParent_TmpQuaternion = new THREE.Quaternion(); -} - -///////////////////////// Methods to override ////////////////////////// -GameLib.ComponentEntityParent.prototype.onLateUpdate = function( - deltaTime, - parentEntity -) { - - if(parentEntity && this.parent) { - - if(this.centerToOrigin) { - this.parentEntity.position.x = ((this.parent.origin.x - this.originPosition.x) * this.parent.scale.x); - this.parentEntity.position.y = ((this.parent.origin.y - this.originPosition.y) * this.parent.scale.y); - this.parentEntity.position.z = ((this.parent.origin.z - this.originPosition.z) * this.parent.scale.z); - - // apply quaternion - // - - ComponentEntityParent_TmpQuaternion.set( - this.parent.quaternion.x, - this.parent.quaternion.y, - this.parent.quaternion.z, - this.parent.quaternion.w - ); - - ComponentEntityParent_TmpVector = - ComponentEntityParent_TmpVector.set( - this.parentEntity.position.x, - this.parentEntity.position.y, - this.parentEntity.position.z - ).applyQuaternion( - ComponentEntityParent_TmpQuaternion - ); - - this.parentEntity.position.x = ComponentEntityParent_TmpVector.x + this.parent.position.x; - this.parentEntity.position.y = ComponentEntityParent_TmpVector.y + this.parent.position.y; - this.parentEntity.position.z = ComponentEntityParent_TmpVector.z + this.parent.position.z; - - } else { - this.parentEntity.position.x = this.parent.position.x; - this.parentEntity.position.y = this.parent.position.y; - this.parentEntity.position.z = this.parent.position.z; - } - - this.parentEntity.quaternion.x = this.parent.quaternion.x; - this.parentEntity.quaternion.y = this.parent.quaternion.y; - this.parentEntity.quaternion.z = this.parent.quaternion.z; - this.parentEntity.quaternion.w = this.parent.quaternion.w; - - this.parentEntity.scale.x = this.parent.scale.x; - this.parentEntity.scale.y = this.parent.scale.y; - this.parentEntity.scale.z = this.parent.scale.z; - - this.parentEntity.mesh.updateMatrix(); - } -}; - -GameLib.ComponentEntityParent.prototype.onSetParentEntity = function( - parentScene, - parentEntity -) { - if(parentEntity && parentEntity.mesh) { - - // The entities should already be scaled down and stuff - // The matrix transform should already be applied to the geometry. - - if(this.centerToOrigin) { - - if(GameLib.Utils.UndefinedOrNull(this.parent.origin)) { - this.parent.origin = this.parent.mesh.geometry.center(); - parentEntity.position.x = this.parent.position.x - this.parent.origin.x; - parentEntity.position.y = this.parent.position.y - this.parent.origin.y; - parentEntity.position.z = this.parent.position.z - this.parent.origin.z; - } - - this.originPosition = parentEntity.mesh.geometry.center(); - } - - } - -}; - -//#endif \ No newline at end of file diff --git a/src/game-lib-component-entity-permutation.js b/src/game-lib-component-entity-permutation.js deleted file mode 100644 index ec8d63f..0000000 --- a/src/game-lib-component-entity-permutation.js +++ /dev/null @@ -1,90 +0,0 @@ -/** - * - * @param id - * @param name - * @param positionOffset - * @param quaternionOffset - * @param scaleOffset - * @constructor - */ -GameLib.ComponentEntityPermutation = function ComponentEntityPermutation( - id, - name, - positionOffset, - quaternionOffset, - scaleOffset -) { - this.id = id || GameLib.Utils.RandomId(); - - if (typeof name == 'undefined') { - name = this.constructor.name; - } - this.name = name; - - this.parentEntity = null; - - if(GameLib.Utils.UndefinedOrNull(positionOffset)) { - positionOffset = new GameLib.API.Vector3(0, 0, 0); - } this.positionOffset = positionOffset; - - - if(GameLib.Utils.UndefinedOrNull(quaternionOffset)) { - quaternionOffset = new GameLib.API.Quaternion(0, 0, 0, 1); - } this.quaternionOffset = quaternionOffset; - - - if(GameLib.Utils.UndefinedOrNull(scaleOffset)) { - scaleOffset = new GameLib.API.Vector3(1, 1, 1); - } this.scaleOffset = scaleOffset; - - GameLib.Utils.Extend(GameLib.ComponentEntityPermutation, GameLib.Component); -}; - -//#ifdef RUNTIME__ -if(typeof THREE != "undefined") { - ComponentEntityPermutation_quaternion = new THREE.Quaternion(); - ComponentEntityPermutation_quaternionCopy = new THREE.Quaternion(); - ComponentEntityPermutation_position = new THREE.Vector3(); - ComponentEntityPermutation_scale = new THREE.Vector3(); - ComponentEntityPermutation_offsetQuaternion = new THREE.Quaternion(); - ComponentEntityPermutation_offsetPosition = new THREE.Vector3(); - ComponentEntityPermutation_offsetScale = new THREE.Vector3(); -} - -///////////////////////// Methods to override ////////////////////////// -GameLib.ComponentEntityPermutation.prototype.onUpdate = function( - deltaTime, - parentEntity -) { - - if(parentEntity && parentEntity.mesh) { - ComponentEntityPermutation_quaternion.copy(parentEntity.quaternion); - ComponentEntityPermutation_quaternionCopy.copy(ComponentEntityPermutation_quaternion); - ComponentEntityPermutation_position.copy(parentEntity.position); - - ComponentEntityPermutation_offsetQuaternion.copy(this.quaternionOffset); - ComponentEntityPermutation_quaternion = ComponentEntityPermutation_quaternion.multiply(ComponentEntityPermutation_offsetQuaternion).normalize(); - - ComponentEntityPermutation_offsetPosition.copy(this.positionOffset); - ComponentEntityPermutation_position = ComponentEntityPermutation_position.add(ComponentEntityPermutation_offsetPosition.applyQuaternion(ComponentEntityPermutation_quaternionCopy)); - - ComponentEntityPermutation_scale.copy(parentEntity.scale); - - ComponentEntityPermutation_offsetScale.copy(this.scaleOffset); - ComponentEntityPermutation_scale = ComponentEntityPermutation_scale.multiply(ComponentEntityPermutation_offsetScale); - - parentEntity.position.x = ComponentEntityPermutation_position.x; - parentEntity.position.y = ComponentEntityPermutation_position.y; - parentEntity.position.z = ComponentEntityPermutation_position.z; - - parentEntity.quaternion.x = ComponentEntityPermutation_quaternion.x; - parentEntity.quaternion.y = ComponentEntityPermutation_quaternion.y; - parentEntity.quaternion.z = ComponentEntityPermutation_quaternion.z; - parentEntity.quaternion.w = ComponentEntityPermutation_quaternion.w; - - parentEntity.scale.x = ComponentEntityPermutation_scale.x; - parentEntity.scale.y = ComponentEntityPermutation_scale.y; - parentEntity.scale.z = ComponentEntityPermutation_scale.z; - } -}; -//#endif \ No newline at end of file diff --git a/src/game-lib-component-fly-controls.js b/src/game-lib-component-fly-controls.js deleted file mode 100644 index 0c36f8a..0000000 --- a/src/game-lib-component-fly-controls.js +++ /dev/null @@ -1,260 +0,0 @@ -/** - * - * @param id - * @param name - * @constructor - */ -GameLib.ComponentFlyControls = function ComponentFlyControls( - id, - name -) { - this.id = id || GameLib.Utils.RandomId(); - - if (typeof name == 'undefined') { - name = this.constructor.name; - } - this.name = name; - - this.parentEntity = null; - - // Todo: this should be executed somewhere in game-lib-z, so that we don't execute it on every construction of an object. - GameLib.Utils.Extend(GameLib.ComponentFlyControls, GameLib.Component); - - // Component fields - this.pitch = 0; - this.yaw = 0; - this.canRotate = false; - this.moveSpeed = 22.2; - this.moveForward = false; - this.moveBackward = false; - this.moveLeft = false; - this.moveRight = false; - this.moveUp = false; - this.moveDown = false; - -}; - -///////////////////////// Methods to override ////////////////////////// -GameLib.ComponentFlyControls.prototype.onUpdate = function( - deltaTime, - parentEntity -) { - // Apply rotation - var rotation = new THREE.Euler( - this.pitch, - this.yaw, - 0, - "YXZ" - ); - - var quat = new THREE.Quaternion().setFromEuler( - rotation - ); - - parentEntity.quaternion.x = quat.x; - parentEntity.quaternion.y = quat.y; - parentEntity.quaternion.z = quat.z; - parentEntity.quaternion.w = quat.w; - - // Apply translation - var direction = new THREE.Vector3(0, 0, -1); - direction = direction.applyEuler(rotation).normalize(); - - if(this.moveForward) { - - parentEntity.position.x += direction.x * (deltaTime * this.moveSpeed); - parentEntity.position.y += direction.y * (deltaTime * this.moveSpeed); - parentEntity.position.z += direction.z * (deltaTime * this.moveSpeed); - - } else if(this.moveBackward) { - - parentEntity.position.x -= direction.x * (deltaTime * this.moveSpeed); - parentEntity.position.y -= direction.y * (deltaTime * this.moveSpeed); - parentEntity.position.z -= direction.z * (deltaTime * this.moveSpeed); - - } - - if(this.moveLeft) { - - var right = direction.cross(new THREE.Vector3(0, 1, 0)); - parentEntity.position.x -= right.x * (deltaTime * this.moveSpeed); - parentEntity.position.y -= right.y * (deltaTime * this.moveSpeed); - parentEntity.position.z -= right.z * (deltaTime * this.moveSpeed); - - } else if(this.moveRight) { - - var right = direction.cross(new THREE.Vector3(0, 1, 0)); - parentEntity.position.x += right.x * (deltaTime * this.moveSpeed); - parentEntity.position.y += right.y * (deltaTime * this.moveSpeed); - parentEntity.position.z += right.z * (deltaTime * this.moveSpeed); - - } - - // Absolute Y-Axis - if(this.moveUp) { - - parentEntity.position.y += (deltaTime * this.moveSpeed); - - } else if(this.moveDown) { - - parentEntity.position.y -= (deltaTime * this.moveSpeed); - - } -}; - -/** - * - * @param parentScene - * @param parentEntity - */ -GameLib.ComponentFlyControls.prototype.onSetParentEntity = function( - parentScene, - parentEntity -) { - var component = this; - - // Lock cursor - var havePointerLock = 'pointerLockElement' in document || 'mozPointerLockElement' in document || 'webkitPointerLockElement' in document; - var element = document.body; - - document.addEventListener('click', function(event) { - if(havePointerLock) { - if(event.button == 0) { - component.canRotate = true; - element.requestPointerLock(); - } else if(event.button == 2) { - component.canRotate = false; - document.exitPointerLock(); - } - } - }); - - if(havePointerLock) { - element.requestPointerLock = element.requestPointerLock || element.mozRequestPointerLock || element.webkitRequestPointerLock; - document.exitPointerLock = document.exitPointerLock || document.mozExitPointerLock || document.webkitExitPointerLock; - } - - // Swipe - - document.addEventListener('touchstart', function(evt) { - - component.xDown = evt.touches[0].clientX; - component.yDown = evt.touches[0].clientY; - - }, false); - - document.addEventListener('touchmove', function(evt) { - - if ( ! component.xDown || ! component.yDown ) { - return; - } - - var xUp = evt.touches[0].clientX; - var yUp = evt.touches[0].clientY; - - var xDiff = component.xDown - xUp; - var yDiff = component.yDown - yUp; - - if ( Math.abs( xDiff ) > Math.abs( yDiff ) ) {/*most significant*/ - if ( xDiff > 0 ) { - /* left swipe */ - } else { - /* right swipe */ - } - } else { - if ( yDiff > 0 ) { - /* up swipe */ - } else { - /* down swipe */ - } - } - - component.yaw -= xDiff * 0.002; - component.pitch -= yDiff * 0.002; - - }, false); - - - - // Mouse move - document.addEventListener('mousemove', function (event) { - if(component.canRotate) { - var movementX = event.movementX || event.mozMovementX || event.webkitMovementX || 0; - var movementY = event.movementY || event.mozMovementY || event.webkitMovementY || 0; - - component.yaw -= movementX * 0.002; - component.pitch -= movementY * 0.002; - } - - // Save mouseCoords - sys.mouseCoords.set( - (event.clientX / window.innerWidth) * 2 - 1, - -(event.clientY / window.innerHeight) * 2 + 1 - ); - - }, false); - - - // Hook up keyboard controls - document.addEventListener('keydown', function (event) { - - switch (event.keyCode) { - case 87: // w - component.moveForward = true; - break; - - case 65: // a - component.moveLeft = true; - break; - - case 83: // s - component.moveBackward = true; - break; - - case 68: // d - component.moveRight = true; - break; - - case 32: // space - component.moveUp = true; - break; - - case 16: - component.moveDown = true; - break; - } - }, false); - - document.addEventListener('keyup', function (event) { - switch (event.keyCode) { - case 38: // up - case 87: // w - component.moveForward = false; - break; - - case 37: // left - case 65: // a - component.moveLeft = false; - break; - - case 40: // down - case 83: // s - component.moveBackward = false; - break; - - case 39: // right - case 68: // d - component.moveRight = false; - break; - - case 32: // space - component.moveUp = false; - break; - - case 16: - component.moveDown = false; - break; - } - }, false); - -}; \ No newline at end of file diff --git a/src/game-lib-component-mesh-permutation.js b/src/game-lib-component-mesh-permutation.js deleted file mode 100644 index 7215f1b..0000000 --- a/src/game-lib-component-mesh-permutation.js +++ /dev/null @@ -1,189 +0,0 @@ -/** - * Adjusts a mesh rotation, scale and translation according to parent entity - * @param id - * @param name - * @param graphics GameLib.D3.Graphics - * @param parentEntity GameLib.Entity - * @param mesh GameLib.D3.Mesh - * @param positionOffset GameLib.Vector3 - * @param quaternionOffset GameLib.Quaternion - * @param scaleOffset GameLib.Vector3 - * @constructor - */ -GameLib.ComponentMeshPermutation = function ComponentMeshPermutation( - id, - name, - graphics, - parentEntity, - mesh, - positionOffset, - quaternionOffset, - scaleOffset -) { - this.graphics = graphics; - this.graphics.isNotThreeThrow(); - - GameLib.Component.call( - this, - id, - name, - GameLib.Component.COMPONENT_MESH_PERMUTATION, - parentEntity, - [ - new GameLib.Component.LinkedProperty( - 'mesh', - GameLib.D3.Camera - ) - ] - ); - - if (GameLib.Utils.UndefinedOrNull(mesh)) { - mesh = null; - } - this.mesh = mesh; - - /** - * Position - */ - if (GameLib.Utils.UndefinedOrNull(positionOffset)) { - positionOffset = new GameLib.Vector3( - graphics, - this, - new GameLib.API.Vector3(0, 0, 0) - ); - } - this.positionOffset = positionOffset; - - /** - * Rotation - */ - if (GameLib.Utils.UndefinedOrNull(quaternionOffset)) { - quaternionOffset = new GameLib.Quaternion( - graphics, - this, - new GameLib.API.Quaternion(0, 0, 0, 1) - ); - } - this.quaternionOffset = quaternionOffset; - - /** - * Scale - */ - if (GameLib.Utils.UndefinedOrNull(scaleOffset)) { - scaleOffset = new GameLib.Vector3( - graphics, - this, - new GameLib.API.Vector3(1, 1, 1) - ); - } - this.scaleOffset = scaleOffset; - - /** - * Runtime members - */ - this.quaternion = new GameLib.Quaternion( - graphics, - this, - new GameLib.API.Quaternion() - ); - - this.position = new GameLib.Vector3( - graphics, - this, - new GameLib.API.Vector3() - ); - - this.scale = new GameLib.Vector3( - graphics, - this, - new GameLib.API.Vector3() - ); - - this.customCode = ""; -}; - -GameLib.ComponentMeshPermutation.prototype = Object.create(GameLib.Component.prototype); -GameLib.ComponentMeshPermutation.prototype.constructor = GameLib.ComponentMeshPermutation; - -/** - * onLateUpdate - * @param deltaTime - */ -GameLib.ComponentMeshPermutation.prototype.onUpdate = function(deltaTime) { - - if (this.parentEntity && this.mesh) { - - this.quaternion.x = this.parentEntity.quaternion.x; - this.quaternion.y = this.parentEntity.quaternion.y; - this.quaternion.z = this.parentEntity.quaternion.z; - this.quaternion.w = this.parentEntity.quaternion.w; - - this.position.x = this.parentEntity.position.x; - this.position.y = this.parentEntity.position.y; - this.position.z = this.parentEntity.position.z; - - this.scale.x = this.parentEntity.scale.x; - this.scale.y = this.parentEntity.scale.y; - this.scale.z = this.parentEntity.scale.z; - - - - //this.quaternion.multiply(this.quaternionOffset).normalize(); - - //this.position.add(this.positionOffset.applyQuaternion(this.quaternion)); - - //this.quaternion.updateInstance(); - - //TODO: ifdef debug this --- start - - if (this.customCode) { - eval(this.customCode); - } - - - - //TODO: ifdef debug this --- end - - //this.quaternion.updateInstance(); - - //this.quaternion.setFromAngle(this.quaternionOffset.angle); - - //this.quaternion.normalize(); - - this.mesh.position.x = this.position.x; - this.mesh.position.y = this.position.y; - this.mesh.position.z = this.position.z; - - this.mesh.quaternion.x = this.quaternion.x; - this.mesh.quaternion.y = this.quaternion.y; - this.mesh.quaternion.z = this.quaternion.z; - this.mesh.quaternion.w = this.quaternion.w; - - this.mesh.scale.x = this.scale.x; - this.mesh.scale.y = this.scale.y; - this.mesh.scale.z = this.scale.z; - - this.mesh.updateInstance(); - - // this.updateInstance(); - - // quaternion.copy(this.mesh.quaternion); - // quaternionCopy.copy(quaternion); - // position.copy(this.mesh.position); - // - // offsetQuaternion.copy(this.quaternionOffset); - // quaternion = quaternion.multiply(offsetQuaternion).normalize(); - // - // offsetPosition.copy(this.positionOffset); - // position = position.add(offsetPosition.applyQuaternion(quaternionCopy)); - // - // scale.copy(this.mesh.scale); - // - // offsetScale.copy(this.scaleOffset); - // scale = scale.multiply(offsetScale); - // - // this.mesh.position.copy(position); - // this.mesh.quaternion.copy(quaternion); - // this.mesh.scale.copy(scale); - } -}; diff --git a/src/game-lib-component-mesh.js b/src/game-lib-component-mesh.js deleted file mode 100644 index 47338db..0000000 --- a/src/game-lib-component-mesh.js +++ /dev/null @@ -1,103 +0,0 @@ -/** - * Creates a camera component which just assigns the position and rotation to whatever its parent position and rotation - * is. - * @param id - * @param name String - * @param graphics GameLib.D3.Graphics - * @param parentEntity GameLib.Entity - * @param mesh GameLib.D3.Camera - * @param positionOffset - * @param scaleOffset - * @param quaternionOffset - * @constructor - */ -GameLib.ComponentMesh = function ComponentMesh( - id, - name, - graphics, - parentEntity, - mesh, - positionOffset, - scaleOffset, - quaternionOffset -) { - this.graphics = graphics; - this.graphics.isNotThreeThrow(); - - GameLib.Component.call( - this, - id, - name, - GameLib.Component.COMPONENT_MESH, - parentEntity, - [ - new GameLib.Component.LinkedProperty( - 'mesh', - GameLib.D3.Camera - ) - ] - ); - - if (GameLib.Utils.UndefinedOrNull(mesh)) { - mesh = null; - } - this.mesh = mesh; - - /** - * Position - */ - if (GameLib.Utils.UndefinedOrNull(positionOffset)) { - positionOffset = new GameLib.Vector3( - graphics, - this, - new GameLib.API.Vector3(0, 0, 0) - ); - } - this.positionOffset = positionOffset; - - /** - * Rotation - */ - if (GameLib.Utils.UndefinedOrNull(quaternionOffset)) { - quaternionOffset = new GameLib.Quaternion( - graphics, - this, - new GameLib.API.Quaternion(1, 0, 0, 0) - ); - } - this.quaternionOffset = quaternionOffset; - - /** - * Scale - */ - if (GameLib.Utils.UndefinedOrNull(scaleOffset)) { - scaleOffset = new GameLib.Vector3( - graphics, - this, - new GameLib.API.Vector3(0, 0, 0) - ); - } - this.scaleOffset = scaleOffset; - -}; - -GameLib.ComponentMesh.prototype = Object.create(GameLib.Component.prototype); -GameLib.ComponentMesh.prototype.constructor = GameLib.ComponentMesh; - - -/** - * onUpdate override method - * @override - * @callback - */ -GameLib.ComponentMesh.prototype.onUpdate = function() { - - if (this.mesh) { - - // this.mesh.position = this.parentEntity.position.copy().add(this.positionOffset); - // this.mesh.scale = this.parentEntity.scale.copy().add(this.scaleOffset); - // this.mesh.quaternion = this.parentEntity.quaternion.copy().multiply(this.quaternionOffset).normalize(); - - // this.mesh.updateInstance(); - } -}; \ No newline at end of file diff --git a/src/game-lib-component-offsettor.js b/src/game-lib-component-offsettor.js deleted file mode 100644 index 6ec20ca..0000000 --- a/src/game-lib-component-offsettor.js +++ /dev/null @@ -1,66 +0,0 @@ -/** - * - * @param id - * @param name - * @param axis {GameLib.API.Vector3} - * @param getOffsetFunc {function} - * @param userData {Object} - * @constructor - */ -GameLib.ComponentOffsettor = function ComponentOffsettor( - id, - name, - axis, - getOffsetFunc, - userData -) { - this.id = id || GameLib.Utils.RandomId(); - - if (typeof name == 'undefined') { - name = this.constructor.name; - } - this.name = name; - this.parentEntity = null; - - this.axis = axis || new GameLib.API.Vector3(); - this.offset = 1; - var component = this; - this.getOffsetFunc = getOffsetFunc || function(entity, component, userData){ return component.offset; }; - this.userData = userData; - - GameLib.Utils.Extend(GameLib.ComponentOffsettor, GameLib.Component); -}; - -//#ifdef RUNTIME__ - -///////////////////////// Methods to override ////////////////////////// -GameLib.ComponentOffsettor.prototype.onLateUpdate = function( - deltaTime, - parentEntity -) { - if(parentEntity) { - - var pos = new THREE.Vector3( - this.axis.x, - this.axis.y, - this.axis.z - ).normalize().applyQuaternion( - new THREE.Quaternion( - parentEntity.quaternion.x, - parentEntity.quaternion.y, - parentEntity.quaternion.z, - parentEntity.quaternion.w - ) - ).multiplyScalar(this.getOffsetFunc( - parentEntity, - this, - this.userData - )); - - parentEntity.position.x += pos.x; - parentEntity.position.y += pos.y; - parentEntity.position.z += pos.z; - parentEntity.mesh.updateMatrix(); - } -}; -//#endif \ No newline at end of file diff --git a/src/game-lib-component-path-ai.js b/src/game-lib-component-path-ai.js deleted file mode 100644 index 75b7bdb..0000000 --- a/src/game-lib-component-path-ai.js +++ /dev/null @@ -1,352 +0,0 @@ -/** - * - * @param id - * @param name - * @param sensorLength - * @constructor - */ -GameLib.ComponentPathAI = function ComponentPathAI( - id, - name, - sensorLength -) { - this.id = id || GameLib.Utils.RandomId(); - - if (typeof name == 'undefined') { - name = this.constructor.name; - } - - this.name = name; - this.parentEntity = null; - this.sensorLength = sensorLength || 5; - - GameLib.Utils.Extend(GameLib.ComponentPathAI, GameLib.Component); - - //#ifdef RUNTIME__ - - this.sensors = []; - - //#endif -}; - -//#ifdef RUNTIME__ - - -var componentPathAI_Raycast = function(from, to, settings, world) { - /* var raycastResult = new sys.physicsEngine.instance.RaycastResult(); - world.raycastClosest(from, to, settings, raycastResult); - return raycastResult;*/ -}; - - -///////////////////////// Methods to override ////////////////////////// -GameLib.ComponentPathAI.prototype.onUpdate = function( - deltaTime, - parentEntity -) { - var forward = true; - var backward = false; - var left = false; - var right = false; - - - // Ray tracing part. - - var scaledSensorLengthOffset = this.pathFollowingComponent.currentSpeed; - - /*world.raycastClosest( - fromC, - - toC, - - {}, - - result - );*/ - - - - - if(forward && !backward) { - this.pathFollowingComponent.direction = 1; - } else if (backward && !forward) { - this.pathFollowingComponent.direction = -1; - } else { - this.pathFollowingComponent.direction = 0; - } - - if(left && !right) { - this.pathFollowingComponent.offset.x = 0; - this.pathFollowingComponent.offset.y = 0; - this.pathFollowingComponent.offset.z = 1; - } else if (right && !left) { - this.pathFollowingComponent.offset.x = 0; - this.pathFollowingComponent.offset.y = 0; - this.pathFollowingComponent.offset.z = -1; - } else { - this.pathFollowingComponent.offset.x = 0; - this.pathFollowingComponent.offset.y = 0; - this.pathFollowingComponent.offset.z = 0; - } - - - // - - -- - - - - -- - - - - - - - - - - - - - - - // D E B U G G I N G - // - - - - - - - - - - - - - - - - - - - //#ifdef DEBUG__ - if(this.sensorVisualizer) { - - for(var i = 0, l = this.sensors.length; i < l; ++i) { - - var sensor = this.sensors[i]; - - if(!this.sensorVisualizer.sensors[i]) { - - var emptyGeometry = new THREE.Geometry(); - var sensorMesh = new THREE.Mesh( - emptyGeometry, - new THREE.MeshBasicMaterial( - { - color : sensor.sensorColor, - wireframe : true - } - ) - ); - - this.sensorVisualizer.sensors[i] = { - - sensorMesh : sensorMesh - - }; - - sys.game.scenes["MainScene"].instance.add(this.sensorVisualizer.sensors[i].sensorMesh); - - } - - if(this.sensorVisualizer.sensors[i].arrow) { - - this.sensorVisualizer.sensors[i].sensorMesh.remove(this.sensorVisualizer.sensors[i].arrow); - - } - - // create new - this.sensorVisualizer.sensors[i].arrow = new THREE.ArrowHelper( - new THREE.Vector3( - sensor.sensorDirection.x, - sensor.sensorDirection.y, - sensor.sensorDirection.z - ).applyQuaternion(new THREE.Quaternion( - this.parentEntity.quaternion.x, - this.parentEntity.quaternion.y, - this.parentEntity.quaternion.z, - this.parentEntity.quaternion.w - )).normalize(), - - new THREE.Vector3( - this.parentEntity.position.x, - this.parentEntity.position.y, - this.parentEntity.position.z - ).add(new THREE.Vector3( - sensor.sensorPositionOffset.x, - sensor.sensorPositionOffset.y, - sensor.sensorPositionOffset.z - ).applyQuaternion(new THREE.Quaternion( - this.parentEntity.quaternion.x, - this.parentEntity.quaternion.y, - this.parentEntity.quaternion.z, - this.parentEntity.quaternion.w - ))), - - sensor.sensorLength, - - sensor.sensorColor - ); - - this.sensorVisualizer.sensors[i].sensorMesh.add(this.sensorVisualizer.sensors[i].arrow); - - } - - } - //#endif - - -}; - -GameLib.ComponentPathAI.prototype.onSetParentEntity = function( - parentScene, - parentEntity -) { - this.parentEntity = parentEntity; - this.pathFollowingComponent = parentEntity.getComponent(GameLib.ComponentPathFollowing); - if(!this.pathFollowingComponent) { - console.error("ComponentPathAI. NO PATH FOLLOWING COMPONENT"); - } - - // Compute bounding box - if(!this.parentEntity.mesh.geometry.boundingBox) { - this.parentEntity.mesh.geometry.computeBoundingBox(); - } - - var boundingBox = this.parentEntity.mesh.geometry.boundingBox; - var sensorLength = this.sensorLength; - var sensorColor = new THREE.Color(0, 1, 0); - - // Create sensors - - // Front - this.sensors.push - ( - { - sensorLength : sensorLength, - sensorColor : sensorColor, - sensorDirection : new THREE.Vector3( - -1, - 0, - 0 - ).normalize(), - - sensorPositionOffset : new THREE.Vector3( - -boundingBox.max.x * this.parentEntity.mesh.scale.x, - boundingBox.max.y * this.parentEntity.mesh.scale.y, - 0 - ) - - } - ); - - var sideSensorLengthMultiplier = 0.5; - - // Absolute left - this.sensors.push - ( - { - sensorLength : sensorLength * sideSensorLengthMultiplier, - sensorColor : sensorColor, - sensorDirection : new THREE.Vector3( - 0, - 0, - 1 - ).normalize(), - - sensorPositionOffset : new THREE.Vector3( - -boundingBox.max.x * this.parentEntity.mesh.scale.x, - boundingBox.max.y * this.parentEntity.mesh.scale.y, - boundingBox.max.z * this.parentEntity.mesh.scale.z - ) - - } - ); - - // Tilted left - this.sensors.push - ( - { - sensorLength : sensorLength * sideSensorLengthMultiplier, - sensorColor : sensorColor, - sensorDirection : new THREE.Vector3( - -0.5, - 0, - 0.5 - ).normalize(), - - sensorPositionOffset : new THREE.Vector3( - -boundingBox.max.x * this.parentEntity.mesh.scale.x, - boundingBox.max.y * this.parentEntity.mesh.scale.y, - boundingBox.max.z * this.parentEntity.mesh.scale.z - ) - - } - ); - - // left forward - this.sensors.push - ( - { - sensorLength : sensorLength * sideSensorLengthMultiplier, - sensorColor : sensorColor, - sensorDirection : new THREE.Vector3( - -1, - 0, - 0 - ).normalize(), - - sensorPositionOffset : new THREE.Vector3( - -boundingBox.max.x * this.parentEntity.mesh.scale.x, - boundingBox.max.y * this.parentEntity.mesh.scale.y, - boundingBox.max.z * this.parentEntity.mesh.scale.z - ) - - } - ); - - // Absolute Right - this.sensors.push - ( - { - sensorLength : sensorLength * sideSensorLengthMultiplier, - sensorColor : sensorColor, - sensorDirection : new THREE.Vector3( - 0, - 0, - -1 - ).normalize(), - - sensorPositionOffset : new THREE.Vector3( - -boundingBox.max.x * this.parentEntity.mesh.scale.x, - boundingBox.max.y * this.parentEntity.mesh.scale.y, - -boundingBox.max.z * this.parentEntity.mesh.scale.z - ) - - } - ); - - // right forward - this.sensors.push - ( - { - sensorLength : sensorLength * sideSensorLengthMultiplier, - sensorColor : sensorColor, - sensorDirection : new THREE.Vector3( - -1, - 0, - 0 - ).normalize(), - - sensorPositionOffset : new THREE.Vector3( - -boundingBox.max.x * this.parentEntity.mesh.scale.x, - boundingBox.max.y * this.parentEntity.mesh.scale.y, - -boundingBox.max.z * this.parentEntity.mesh.scale.z - ) - - } - ); - - // Tilted right - this.sensors.push - ( - { - sensorLength : sensorLength * sideSensorLengthMultiplier, - sensorColor : sensorColor, - sensorDirection : new THREE.Vector3( - -0.5, - 0, - -0.5 - ).normalize(), - - sensorPositionOffset : new THREE.Vector3( - -boundingBox.max.x * this.parentEntity.mesh.scale.x, - boundingBox.max.y * this.parentEntity.mesh.scale.y, - -boundingBox.max.z * this.parentEntity.mesh.scale.z - ) - - } - ); - - - // debug code - this.sensorVisualizer = { - sensors : [] - }; -}; - -//#endif \ No newline at end of file diff --git a/src/game-lib-component-path-controls.js b/src/game-lib-component-path-controls.js deleted file mode 100644 index 6b53bc1..0000000 --- a/src/game-lib-component-path-controls.js +++ /dev/null @@ -1,143 +0,0 @@ -/** - * - * @param id - * @param name - * @constructor - */ -GameLib.ComponentPathControls = function ComponentPathControls( - id, - name -) { - this.id = id || GameLib.Utils.RandomId(); - - if (typeof name == 'undefined') { - name = this.constructor.name; - } - - this.name = name; - this.parentEntity = null; - - // runtime - this.pathFollowingComponent = null; - this.keyLeftPressed = false; - this.keyRightPressed = false; - this.keyForwardPressed = false; - this.keyBackPressed = false; - this.keyBreakPressed = false; - - GameLib.Utils.Extend(GameLib.ComponentPathControls, GameLib.Component); -}; - -//#ifdef RUNTIME__ - -///////////////////////// Methods to override ////////////////////////// -GameLib.ComponentPathControls.prototype.onUpdate = function( - deltaTime, - parentEntity -) { - - if (this.keyForwardPressed) { // Forward [i] - this.pathFollowingComponent.direction = 1; - } else if (this.keyBackPressed){ - this.pathFollowingComponent.direction = 0; - // this.pathFollowingComponent.direction = -1; - } else { - this.pathFollowingComponent.direction = 0; - } - - // left right - if (this.keyLeftPressed) { // Left [j] - - this.pathFollowingComponent.offset.x = -1; - this.pathFollowingComponent.offset.y = 0; - this.pathFollowingComponent.offset.z = 0; - - } else if (this.keyRightPressed) { // Right [l] - - this.pathFollowingComponent.offset.x = 1; - this.pathFollowingComponent.offset.y = 0; - this.pathFollowingComponent.offset.z = 0; - - } else if(!this.keyRightPressed && !this.keyLeftPressed){ - - this.pathFollowingComponent.offset.x = 0; - this.pathFollowingComponent.offset.y = 0; - this.pathFollowingComponent.offset.z = 0; - - } -}; - -GameLib.ComponentPathControls.prototype.onSetParentEntity = function( - parentScene, - parentEntity -) { - - this.pathFollowingComponent = parentEntity.getComponent(GameLib.ComponentPathFollowing); - if(!this.pathFollowingComponent) { - console.error("ComponentPathControls. NO PATH FOLLOWING COMPONENT"); - } - - var component = this; - - document.addEventListener('keydown', function(event) { - - if (event.keyCode == 73) { // Forward [i] - - component.keyForwardPressed = true; - - } else if (event.keyCode == 75) { // Back [k] - - component.keyBackPressed = true; - - } - - if (event.keyCode == 74) { // Left [j] - - component.keyLeftPressed = true; - - } else if (event.keyCode == 76) { // Right [l] - - component.keyRightPressed = true; - - } - - if (event.keyCode == 66) { - - component.keyBreakPressed = true; - - } - - }, false); - - document.addEventListener('keyup', function(event) { - - if (event.keyCode == 73) { // Forward [i] - - component.keyForwardPressed = false; - - } else if (event.keyCode == 75) { // Back [k] - - component.keyBackPressed = false; - - } - - if (event.keyCode == 74) { // Left [j] - - component.keyLeftPressed = false; - - } else if (event.keyCode == 76) { // Right [l] - - component.keyRightPressed = false; - - } - - if (event.keyCode == 66) { - - component.keyBreakPressed = false; - - } - - }, false); -}; - -//#endif \ No newline at end of file diff --git a/src/game-lib-component-raycast-vehicle-controls.js b/src/game-lib-component-raycast-vehicle-controls.js deleted file mode 100644 index b33f272..0000000 --- a/src/game-lib-component-raycast-vehicle-controls.js +++ /dev/null @@ -1,190 +0,0 @@ -GameLib.ComponentRaycastVehicleControls = function ComponentRaycastVehicleControls( - id, - name, - frontLWheelIndex, - frontRWheelIndex, - backLWheelIndex, - backRWheelIndex, - maxForce, - steering -) { - this.id = id || GameLib.Utils.RandomId(); - - if (typeof name == 'undefined') { - name = this.constructor.name; - } - this.name = name; - - this.parentEntity = null; - - // maybe we pass this in the constructor - this.raycastVehicleComponent = null; - this.frontLWheelIndex = frontLWheelIndex || 0; - this.frontRWheelIndex = frontRWheelIndex || 1; - this.backLWheelIndex = backLWheelIndex || 2; - this.backRWheelIndex = backRWheelIndex || 3; - - this.maxForce = maxForce || 400; - this.steering = steering || 0.5; - this.brakeForce = 1000000; - - this.currentSteering = 0; - this.steeringSpeed = 8.0; - - this.keyLeftPressed = false; - this.keyRightPressed = false; - this.keyForwardPressed = false; - this.keyBackPressed = false; - this.keyBreakPressed = false; - - // Todo: this should be executed somewhere in game-lib-z, so that we don't execute it on every construction of an object. - GameLib.Utils.Extend(GameLib.ComponentRaycastVehicleControls, GameLib.Component); -}; - -///////////////////////// Methods to override ////////////////////////// -GameLib.ComponentRaycastVehicleControls.prototype.onUpdate = function( - deltaTime, - parentEntity -) { - - - if (this.keyForwardPressed) { // Forward [i] - - this.raycastVehicleComponent.instance.applyEngineForce(-this.maxForce, this.backLWheelIndex); - this.raycastVehicleComponent.instance.applyEngineForce(-this.maxForce, this.backRWheelIndex); - - } else if (this.keyBackPressed) { // Back [k] - - this.raycastVehicleComponent.instance.applyEngineForce(this.maxForce, this.backLWheelIndex); - this.raycastVehicleComponent.instance.applyEngineForce(this.maxForce, this.backRWheelIndex); - - } else if (!this.keyForwardPressed && !this.keyBackPressed) { - this.raycastVehicleComponent.instance.applyEngineForce(0, this.backLWheelIndex); - this.raycastVehicleComponent.instance.applyEngineForce(0, this.backRWheelIndex); - } - - if (this.keyLeftPressed) { // Left [j] - - var t = deltaTime * this.steeringSpeed; - t = t * t * t * (t * (6.0 * t - 15.0) + 10.0); - - this.currentSteering = this.currentSteering + (this.steering - this.currentSteering) * t; - - this.raycastVehicleComponent.instance.setSteeringValue(this.currentSteering, this.frontLWheelIndex); - this.raycastVehicleComponent.instance.setSteeringValue(this.currentSteering, this.frontRWheelIndex); - - } else if (this.keyRightPressed) { // Right [l] - - var t = deltaTime * this.steeringSpeed; - t = t * t * t * (t * (6.0 * t - 15.0) + 10.0); - this.currentSteering = this.currentSteering + ((-this.steering) - this.currentSteering) * t; - - this.raycastVehicleComponent.instance.setSteeringValue(this.currentSteering, this.frontLWheelIndex); - this.raycastVehicleComponent.instance.setSteeringValue(this.currentSteering, this.frontRWheelIndex); - - } else if (!this.keyLeftPressed && !this.keyRightPressed) { - - var t = deltaTime * this.steeringSpeed * 2; - t = t * t * t * (t * (6.0 * t - 15.0) + 10.0); - this.currentSteering = this.currentSteering + (0 - this.currentSteering) * t; - - this.raycastVehicleComponent.instance.setSteeringValue(this.currentSteering, this.frontLWheelIndex); - this.raycastVehicleComponent.instance.setSteeringValue(this.currentSteering, this.frontRWheelIndex); - - } - - - if(this.keyBreakPressed) { - - this.raycastVehicleComponent.instance.setBrake(this.brakeForce, this.frontLWheelIndex); - this.raycastVehicleComponent.instance.setBrake(this.brakeForce, this.frontRWheelIndex); - this.raycastVehicleComponent.instance.setBrake(this.brakeForce, this.backLWheelIndex); - this.raycastVehicleComponent.instance.setBrake(this.brakeForce, this.backRWheelIndex); - - } else { - - this.raycastVehicleComponent.instance.setBrake(0, this.frontLWheelIndex); - this.raycastVehicleComponent.instance.setBrake(0, this.frontRWheelIndex); - this.raycastVehicleComponent.instance.setBrake(0, this.backLWheelIndex); - this.raycastVehicleComponent.instance.setBrake(0, this.backRWheelIndex); - - } - -}; - -GameLib.ComponentRaycastVehicleControls.prototype.onSetParentEntity = function( - parentScene, - parentEntity -) { - - console.log("Set parent!"); - - this.raycastVehicleComponent = parentEntity.getComponent(GameLib.D3.RaycastVehicle); - if(!this.raycastVehicleComponent) { - console.warn("NO RAYCAST VEHICLE FOUND!"); - } else { - - var component = this; - - document.addEventListener('keydown', function(event) { - - if (event.keyCode == 73) { // Forward [i] - - component.keyForwardPressed = true; - - } else if (event.keyCode == 75) { // Back [k] - - component.keyBackPressed = true; - - } - - if (event.keyCode == 74) { // Left [j] - - component.keyLeftPressed = true; - - } else if (event.keyCode == 76) { // Right [l] - - component.keyRightPressed = true; - - } - - if (event.keyCode == 66) { - - component.keyBreakPressed = true; - - } - - }, false); - - document.addEventListener('keyup', function(event) { - - if (event.keyCode == 73) { // Forward [i] - - component.keyForwardPressed = false; - - } else if (event.keyCode == 75) { // Back [k] - - component.keyBackPressed = false; - - } - - if (event.keyCode == 74) { // Left [j] - - component.keyLeftPressed = false; - - } else if (event.keyCode == 76) { // Right [l] - - component.keyRightPressed = false; - - } - - if (event.keyCode == 66) { - - component.keyBreakPressed = false; - - } - - }, false); - - } -}; \ No newline at end of file diff --git a/src/game-lib-component-rotator.js b/src/game-lib-component-rotator.js deleted file mode 100644 index 45f976d..0000000 --- a/src/game-lib-component-rotator.js +++ /dev/null @@ -1,71 +0,0 @@ -/** - * - * @param id - * @param name - * @param axis {GameLib.API.Vector3} - * @param getRotationFunc {Function} - * @param userData {Object} - * @constructor - */ -GameLib.ComponentRotator = function ComponentRotator( - id, - name, - axis, - getRotationFunc, - userData -) { - this.id = id || GameLib.Utils.RandomId(); - - if (typeof name == 'undefined') { - name = this.constructor.name; - } - this.name = name; - this.parentEntity = null; - - this.rotation = 0; - var component = this; - this.axis = axis || new GameLib.API.Vector3(); - this.getRotationFunc = getRotationFunc || function(entity, component, userData){ return component.rotation; }; - this.userData = userData; - - GameLib.Utils.Extend(GameLib.ComponentRotator, GameLib.Component); -}; - -//#ifdef RUNTIME__ - -///////////////////////// Methods to override ////////////////////////// -GameLib.ComponentRotator.prototype.onLateUpdate = function( - deltaTime, - parentEntity -) { - if(parentEntity) { - - var quat = new THREE.Quaternion( - parentEntity.quaternion.x, - parentEntity.quaternion.y, - parentEntity.quaternion.z, - parentEntity.quaternion.w - ).multiply( - new THREE.Quaternion().setFromAxisAngle( - new THREE.Vector3( - this.axis.x, - this.axis.y, - this.axis.z - ), - this.getRotationFunc( - parentEntity, - this, - this.userData - ) - ) - ); - - parentEntity.quaternion.x = quat.x; - parentEntity.quaternion.y = quat.y; - parentEntity.quaternion.z = quat.z; - parentEntity.quaternion.w = quat.w; - - parentEntity.mesh.updateMatrix(); - } -}; -//#endif \ No newline at end of file diff --git a/src/game-lib-component-trigger-box-box.js b/src/game-lib-component-trigger-box-box.js deleted file mode 100644 index 8b8312f..0000000 --- a/src/game-lib-component-trigger-box-box.js +++ /dev/null @@ -1,104 +0,0 @@ -// -// this component operates on it's parent entity's bounding box. -// so, you can't use this component with a null-mesh. -// -GameLib.ComponentTriggerBoxBox = function ComponentTriggerBoxBox( - id, - name, - entitiesToCheck, - onInside, - onEnter, - onLeave, - onSetParent -) { - console.log('triggerbox box!'); - - this.id = id || GameLib.Utils.RandomId(); - - if (typeof name == 'undefined') { - name = this.constructor.name; - } - this.name = name; - - this.parentEntity = null; - - // Todo: this should be executed somewhere in game-lib-z, so that we don't execute it on every construction of an object. - GameLib.Utils.Extend(GameLib.ComponentTriggerBoxBox, GameLib.Component); - - this.entitiesToCheck = entitiesToCheck || []; - this.onInside = onInside || null; - this.onEnter = onEnter || null; - this.onLeave = onLeave || null; - this.onSetParent = onSetParent || null; - - // defines code - this.entitiesInside = []; -}; - - -//#ifdef RUNTIME__ -if(typeof THREE != "undefined") { - ComponentTriggerBoxBox_BB = new THREE.Box3(); - ComponentTriggerBoxBox_BBEntity = new THREE.Box3(); -} - - -///////////////////////// Methods to override ////////////////////////// -GameLib.ComponentTriggerBoxBox.prototype.onUpdate = function( - deltaTime, - parentEntity -) { - - if(parentEntity.mesh) { - // Calculate the current transform here, using the position, orientation and scale of the entity. - - ComponentTriggerBoxBox_BB.setFromObject(parentEntity.mesh); - - for(var e in this.entitiesToCheck) { - var entityToCheck = this.entitiesToCheck[e]; - - ComponentTriggerBoxBox_BBEntity.setFromObject(entityToCheck.mesh); - - if(ComponentTriggerBoxBox_BB.intersectsBox(ComponentTriggerBoxBox_BBEntity)) { - - if(this.entitiesInside.indexOf(entityToCheck) <= -1) { // check if this is the first time the entity enters the trigger - this.entitiesInside.push(entityToCheck); - - if(this.onEnter) { - if(this.onEnter(parentEntity, entityToCheck)) { - break; - } - } - } - - - if(this.onInside) { - if(this.onInside(parentEntity, entityToCheck)) { - break; - } - } - - } else if(this.entitiesInside.indexOf(entityToCheck) > -1) { // entity WAS inside the trigger - this.entitiesInside.splice(this.entitiesInside.indexOf(entityToCheck), 1); - - if(this.onLeave) { - if(this.onLeave(parentEntity, entityToCheck)) { - break; - } - } - } - - } - } -}; -//#endif - - -GameLib.ComponentTriggerBoxBox.prototype.onSetParentEntity = function( - parentScene, - parentEntity -) { - if(this.onSetParent) { - this.onSetParent(parentScene, parentEntity); - } -}; \ No newline at end of file diff --git a/src/game-lib-component-trigger-box-sphere.js b/src/game-lib-component-trigger-box-sphere.js deleted file mode 100644 index 7e0cf3e..0000000 --- a/src/game-lib-component-trigger-box-sphere.js +++ /dev/null @@ -1,128 +0,0 @@ -// -// this component operates on it's parent entity's bounding box. -// so, you can't use this component with a null-mesh. -// -GameLib.ComponentTriggerBoxSphere = function ComponentTriggerBoxSphere( - id, - name, - entitiesToCheck, - onInside, - onEnter, - onLeave, - onSetParent -) { - this.id = id || GameLib.Utils.RandomId(); - - if (typeof name == 'undefined') { - name = this.constructor.name; - } - this.name = name; - - this.parentEntity = null; - - // Todo: this should be executed somewhere in game-lib-z, so that we don't execute it on every construction of an object. - GameLib.Utils.Extend(GameLib.ComponentTriggerBoxSphere, GameLib.Component); - - this.entitiesToCheck = entitiesToCheck || []; - this.onInside = onInside || null; - this.onEnter = onEnter || null; - this.onLeave = onLeave || null; - this.onSetParent = onSetParent || null; - - // defines code - this.entitiesInside = []; -}; - -//#ifdef RUNTIME__ -if(typeof THREE != "undefined") { - ComponentTriggerBoxSphere_TargetPosition_Vec3 = new THREE.Vector3(); - ComponentTriggerBoxSphere_TargetRadius = 0.0; -} - -///////////////////////// Methods to override ////////////////////////// -GameLib.ComponentTriggerBoxSphere.prototype.onUpdate = function( - deltaTime, - parentEntity -) { - - if(parentEntity.mesh) { - // Calculate the current transform here, using the position, orientation and scale of the entity. - - var bb = new THREE.Box3(); - bb.setFromObject(parentEntity.mesh); - - for(var e in this.entitiesToCheck) { - var entityToCheck = this.entitiesToCheck[e]; - - if(entityToCheck.mesh) { - - if (!entityToCheck.mesh.geometry.boundingSphere) { - entityToCheck.mesh.geometry.computeBoundingSphere(); - } - } - - var spherePosition = new THREE.Vector3( - entityToCheck.position.x, - entityToCheck.position.y, - entityToCheck.position.z - ); - - var maxScale = Math.max( - entityToCheck.scale.x, - Math.max( - entityToCheck.scale.y, - entityToCheck.scale.z - ) - ); - - var sphere = new THREE.Sphere( - spherePosition, - entityToCheck.mesh - ? entityToCheck.mesh.geometry.boundingSphere.radius * maxScale - : 1 - ); - - - if(bb.intersectsSphere(sphere)) { - - if(this.entitiesInside.indexOf(entityToCheck) <= -1) { // check if this is the first time the entity enters the trigger - this.entitiesInside.push(entityToCheck); - - if(this.onEnter) { - if(this.onEnter(parentEntity, entityToCheck)) { - break; - } - } - } - - - if(this.onInside) { - if(this.onInside(parentEntity, entityToCheck)) { - break; - } - } - - } else if(this.entitiesInside.indexOf(entityToCheck) > -1) { // entity WAS inside the trigger - this.entitiesInside.splice(this.entitiesInside.indexOf(entityToCheck), 1); - - if(this.onLeave) { - if(this.onLeave(parentEntity, entityToCheck)) { - break; - } - } - } - - } - } -}; - -//#endif - -GameLib.ComponentTriggerBoxSphere.prototype.onSetParentEntity = function( - parentScene, - parentEntity -) { - if(this.onSetParent) { - this.onSetParent(parentScene, parentEntity); - } -}; \ No newline at end of file diff --git a/src/game-lib-component-trigger-sphere-sphere.js b/src/game-lib-component-trigger-sphere-sphere.js deleted file mode 100644 index 0d88b9d..0000000 --- a/src/game-lib-component-trigger-sphere-sphere.js +++ /dev/null @@ -1,139 +0,0 @@ -/** - * Uses the entity position + mesh bounding sphere to check if intersections - * - * @param id - * @param name - * @param sphereRadius - * @param entitiesToCheck - * @param onInside - * @param onEnter - * @param onLeave - * @param onSetParent - * @constructor - */ -GameLib.ComponentTriggerSphereSphere = function ComponentTriggerSphereSphere( - id, - name, - sphereRadius, - entitiesToCheck, - onInside, - onEnter, - onLeave, - onSetParent -) { - this.id = id || GameLib.Utils.RandomId(); - - if (typeof name == 'undefined') { - name = this.constructor.name; - } - - this.name = name; - - this.parentEntity = null; - - // Todo: this should be executed somewhere in game-lib-z, so that we don't execute it on every construction of an object. - GameLib.Utils.Extend(GameLib.ComponentTriggerSphereSphere, GameLib.Component); - - this.entitiesToCheck = entitiesToCheck || []; - this.sphereRadius = sphereRadius || 1.0; - this.onInside = onInside || null; - this.onEnter = onEnter || null; - this.onLeave = onLeave || null; - this.onSetParent = onSetParent || null; - - // defines code - this.entitiesInside = []; -}; - -//#ifdef RUNTIME__ -if(typeof THREE != "undefined") { - ComponentTriggerSphereSphere_spherePosition_Vector3 = new THREE.Vector3(); - ComponentTriggerSphereSphere_targetBoundingSpherePosition_Vector3 = new THREE.Vector3(); - ComponentTriggerSphereSphere_targetBoundingSphereRadius = 0.0; - ComponentTriggerSphereSphere_sphereToSphere_Vector3 = new THREE.Vector3(); -} - -///////////////////////// Methods to override ////////////////////////// -GameLib.ComponentTriggerSphereSphere.prototype.onUpdate = function( - deltaTime, - parentEntity -) { - - ComponentTriggerSphereSphere_spherePosition_Vector3.set( - parentEntity.position.x, - parentEntity.position.y, - parentEntity.position.z - ); - - for(var e in this.entitiesToCheck) { - var entityToCheck = this.entitiesToCheck[e]; - - ComponentTriggerSphereSphere_targetBoundingSpherePosition_Vector3.set( - entityToCheck.position.x, - entityToCheck.position.y, - entityToCheck.position.z - ); - - if(entityToCheck.mesh && entityToCheck.mesh.geometry.boundingSphere) { - var maxScale = Math.max( - entityToCheck.scale.x, - Math.max( - entityToCheck.scale.y, - entityToCheck.scale.z - ) - ); - ComponentTriggerSphereSphere_targetBoundingSphereRadius = entityToCheck.mesh.geometry.boundingSphere.radius * maxScale; - } else { - ComponentTriggerSphereSphere_targetBoundingSphereRadius = 1.0; - } - - // do sphere sphere collision - - ComponentTriggerSphereSphere_sphereToSphere_Vector3.set( - ComponentTriggerSphereSphere_targetBoundingSpherePosition_Vector3.x - ComponentTriggerSphereSphere_spherePosition_Vector3.x, - ComponentTriggerSphereSphere_targetBoundingSpherePosition_Vector3.y - ComponentTriggerSphereSphere_spherePosition_Vector3.y, - ComponentTriggerSphereSphere_targetBoundingSpherePosition_Vector3.z - ComponentTriggerSphereSphere_spherePosition_Vector3.z - ); - - var length = ComponentTriggerSphereSphere_sphereToSphere_Vector3.length(); - - if((length - (ComponentTriggerSphereSphere_targetBoundingSphereRadius + this.sphereRadius)) < 0) { - - if(this.entitiesInside.indexOf(entityToCheck) <= -1) { // check if this is the first time the entity enters the trigger - this.entitiesInside.push(entityToCheck); - - if(this.onEnter) { - if(this.onEnter(parentEntity, entityToCheck)) { - break; - } - } - } - - if(this.onInside) { - if(this.onInside(parentEntity, entityToCheck)) { - break; - } - } - - } else if(this.entitiesInside.indexOf(entityToCheck) > -1) { // entity WAS inside the trigger - this.entitiesInside.splice(this.entitiesInside.indexOf(entityToCheck), 1); - - if(this.onLeave) { - if(this.onLeave(parentEntity, entityToCheck)) { - break; - } - } - } - } -}; - -//#endif - -GameLib.ComponentTriggerSphereSphere.prototype.onSetParentEntity = function( - parentScene, - parentEntity -) { - if(this.onSetParent) { - this.onSetParent(parentScene, parentEntity); - } -}; \ No newline at end of file diff --git a/src/game-lib-component-vehicle-ai-object-avoidance.js b/src/game-lib-component-vehicle-ai-object-avoidance.js deleted file mode 100644 index 0acf399..0000000 --- a/src/game-lib-component-vehicle-ai-object-avoidance.js +++ /dev/null @@ -1,570 +0,0 @@ -/** - * - * @param id - * @param name - * @param world GameLib.D3.World - * @constructor - */ -GameLib.ComponentVehicleAIObjectAvoidance = function( - id, - name, - world -) { - this.id = id|| GameLib.Utils.RandomId(); - if (typeof name == 'undefined') { - name = this.constructor.name; - } - this.name = name; - - this.parentEntity = null; - GameLib.Utils.Extend(GameLib.ComponentVehicleAIObjectAvoidance, GameLib.Component); - - this.raycastVehicleComponent = null; - this.physicsWorld = world || null; - this.sensors = []; - - // debug - this.debugArrows = {}; - - - console.log("constructor for : ComponentVehicleAIObjectAvoidance"); -}; - -//#ifdef RUNTIME__ - -///////////////////////////////////////////////////////////////////////// -///////////////////////// Methods to override /////////////////////////// -///////////////////////////////////////////////////////////////////////// -GameLib.ComponentVehicleAIObjectAvoidance.prototype.onSetParentEntity = function( - parentScene, - parentEntity -) { - this.parentEntity = parentEntity; - this.raycastVehicleComponent = parentEntity.getComponent(GameLib.D3.RaycastVehicle); - - console.log("onSetParentEntity for : ComponentVehicleAIObjectAvoidance"); - - - if(!this.raycastVehicleComponent) { - console.warn("NO RAYCAST VEHICLE FOUND!"); - } - - // create sensors - - var boundingBox = this.parentEntity.mesh.geometry.boundingBox; - // this is taken from the main.js. - // this should be configurable inside the editor - var carBoxScaleModifier = { x : 3 / 4, y : 1 / 2, z : 0.90 }; - - var sensorLength = 7.0; - var sensorColor = new THREE.Color(0, 0, 1); - - // . . . . . . . . . . FRONT . . . . . . . . . . - - // right - this.sensors.push( - { - sensorLength : sensorLength, - - sensorColor : sensorColor, - - sensorDirection : new THREE.Vector3( - 1, - 0, - 0 - ).normalize(), - - sensorPositionOffset : new THREE.Vector3( - boundingBox.max.x * this.parentEntity.mesh.scale.x * carBoxScaleModifier.x, - boundingBox.max.z * this.parentEntity.mesh.scale.z * carBoxScaleModifier.z, - 0//boundingBox.max.y * this.parentEntity.mesh.scale.y * carBoxScaleModifier.y // this is still swapped with y, because cannon. - ) - } - ); - - - // left - this.sensors.push( - { - sensorLength : sensorLength, - - sensorColor : sensorColor, - - sensorDirection : new THREE.Vector3( - 1, - 0, - 0 - ).normalize(), - - sensorPositionOffset : new THREE.Vector3( - boundingBox.max.x * this.parentEntity.mesh.scale.x * carBoxScaleModifier.x, - -boundingBox.max.z * this.parentEntity.mesh.scale.z * carBoxScaleModifier.z, - 0//boundingBox.max.y * this.parentEntity.mesh.scale.y * carBoxScaleModifier.y // this is still swapped with y, because cannon. - ) - } - ); - - - // center - this.sensors.push( - { - sensorLength : sensorLength, - - sensorColor : sensorColor, - - sensorDirection : new THREE.Vector3( - 1, - 0, - 0 - ).normalize(), - - sensorPositionOffset : new THREE.Vector3( - boundingBox.max.x * this.parentEntity.mesh.scale.x * carBoxScaleModifier.x, - 0, - 0 - ) - } - ); - - - // . . . . . . DIAGONAL FRONT . . . . . . . . - // right - this.sensors.push( - { - sensorLength : sensorLength, - - sensorColor : sensorColor, - - sensorDirection : new THREE.Vector3( - 0, - 1, - 0 - ).normalize(), - - sensorPositionOffset : new THREE.Vector3( - boundingBox.max.x * this.parentEntity.mesh.scale.x * carBoxScaleModifier.x, - boundingBox.max.z * this.parentEntity.mesh.scale.z * carBoxScaleModifier.z, - 0//boundingBox.max.y * this.parentEntity.mesh.scale.y * carBoxScaleModifier.y // this is still swapped with y, because cannon. - ) - } - ); - - - // left - this.sensors.push( - { - sensorLength : sensorLength, - - sensorColor : sensorColor, - - sensorDirection : new THREE.Vector3( - 0, - -1, - 0 - ).normalize(), - - sensorPositionOffset : new THREE.Vector3( - boundingBox.max.x * this.parentEntity.mesh.scale.x * carBoxScaleModifier.x, - -boundingBox.max.z * this.parentEntity.mesh.scale.z * carBoxScaleModifier.z, - 0//boundingBox.max.y * this.parentEntity.mesh.scale.y * carBoxScaleModifier.y // this is still swapped with y, because cannon. - ) - } - ); - - // right - this.sensors.push( - { - sensorLength : sensorLength, - - sensorColor : sensorColor, - - sensorDirection : new THREE.Vector3( - 0.5, - 0.5, - 0 - ).normalize(), - - sensorPositionOffset : new THREE.Vector3( - boundingBox.max.x * this.parentEntity.mesh.scale.x * carBoxScaleModifier.x, - boundingBox.max.z * this.parentEntity.mesh.scale.z * carBoxScaleModifier.z, - 0//boundingBox.max.y * this.parentEntity.mesh.scale.y * carBoxScaleModifier.y // this is still swapped with y, because cannon. - ) - } - ); - - - // left - this.sensors.push( - { - sensorLength : sensorLength, - - sensorColor : sensorColor, - - sensorDirection : new THREE.Vector3( - 0.5, - -0.5, - 0 - ).normalize(), - - sensorPositionOffset : new THREE.Vector3( - boundingBox.max.x * this.parentEntity.mesh.scale.x * carBoxScaleModifier.x, - -boundingBox.max.z * this.parentEntity.mesh.scale.z * carBoxScaleModifier.z, - 0//boundingBox.max.y * this.parentEntity.mesh.scale.y * carBoxScaleModifier.y // this is still swapped with y, because cannon. - ) - } - ); - - // right - this.sensors.push( - { - sensorLength : sensorLength, - - sensorColor : sensorColor, - - sensorDirection : new THREE.Vector3( - 0.75, - 0.25, - 0 - ).normalize(), - - sensorPositionOffset : new THREE.Vector3( - boundingBox.max.x * this.parentEntity.mesh.scale.x * carBoxScaleModifier.x, - boundingBox.max.z * this.parentEntity.mesh.scale.z * carBoxScaleModifier.z, - 0//boundingBox.max.y * this.parentEntity.mesh.scale.y * carBoxScaleModifier.y // this is still swapped with y, because cannon. - ) - } - ); - - - // left - this.sensors.push( - { - sensorLength : sensorLength, - - sensorColor : sensorColor, - - sensorDirection : new THREE.Vector3( - 0.75, - -0.25, - 0 - ).normalize(), - - sensorPositionOffset : new THREE.Vector3( - boundingBox.max.x * this.parentEntity.mesh.scale.x * carBoxScaleModifier.x, - -boundingBox.max.z * this.parentEntity.mesh.scale.z * carBoxScaleModifier.z, - 0//boundingBox.max.y * this.parentEntity.mesh.scale.y * carBoxScaleModifier.y // this is still swapped with y, because cannon. - ) - } - ); - - - console.log("pushed sensors", this.sensors.length); - -}; - -GameLib.ComponentVehicleAIObjectAvoidance.prototype.onUpdate = function( - deltaTime, - parentEntity -) { - if(this.raycastVehicleComponent && this.physicsWorld) { - // debug - this.debugArrows.avgDirection = this.debugArrows.avgDirection || {}; - this.debugArrows.sensors = this.debugArrows.sensors || []; - - var vehicleVelocity = this.parentEntity.getComponent(GameLib.D3.RigidBody).instance.velocity; - var vehicleVelocityLength = 12; - - // shoot rays for each sensor & check collisions. - var world = this.physicsWorld.instance; - var result = new CANNON.RaycastResult(); - - this.debugArrows.avgDirection.vector = new THREE.Vector3(); - - for(var s = 0, l = this.sensors.length; s < l; ++s) { - - // debug - if(!this.debugArrows.sensors[s]) { - this.debugArrows.sensors[s] = {}; - } - - - var sensor = this.sensors[s]; - - var from = new THREE.Vector3( - this.parentEntity.position.x, - this.parentEntity.position.y, - this.parentEntity.position.z - ).add(new THREE.Vector3( - sensor.sensorPositionOffset.x, - sensor.sensorPositionOffset.y, - sensor.sensorPositionOffset.z - ).applyQuaternion(new THREE.Quaternion( - this.parentEntity.quaternion.x, - this.parentEntity.quaternion.y, - this.parentEntity.quaternion.z, - this.parentEntity.quaternion.w - ))); - - var fromC = new CANNON.Vec3( - from.x, - from.y, - from.z - ); - - var to = new THREE.Vector3( - sensor.sensorDirection.x, - sensor.sensorDirection.y, - sensor.sensorDirection.z - ).applyQuaternion(new THREE.Quaternion( - this.parentEntity.quaternion.x, - this.parentEntity.quaternion.y, - this.parentEntity.quaternion.z, - this.parentEntity.quaternion.w - )).normalize().multiplyScalar(sensor.sensorLength); - - - var toC = new CANNON.Vec3( - from.x + to.x, - from.y + to.y, - from.z + to.z - ); - - world.raycastClosest( - fromC, - - toC, - - { - collisionFilterMask : 2 // check only group 2 (track) - }, - - result - ); - - if(result.hasHit) { - sensor.sensorColor = new THREE.Color(1, 0, 0); - - var direction = new THREE.Vector3( - sensor.sensorDirection.x, - sensor.sensorDirection.y, - sensor.sensorDirection.z - ).applyQuaternion(new THREE.Quaternion( - this.parentEntity.quaternion.x, - this.parentEntity.quaternion.y, - this.parentEntity.quaternion.z, - this.parentEntity.quaternion.w - )).normalize(); - - /*var reflection = direction.reflect( - new THREE.Vector3( - result.hitNormalWorld.x, - result.hitNormalWorld.y, - result.hitNormalWorld.z - ) - ).normalize();*/ - - var reflection = direction.reflect( - new THREE.Vector3( - result.hitPointWorld.x, - result.hitPointWorld.y, - result.hitPointWorld.z - ).normalize().cross(direction) - ).normalize().negate(); - - var origin = new THREE.Vector3( - this.parentEntity.position.x, - this.parentEntity.position.y, - this.parentEntity.position.z - ).add(new THREE.Vector3( - sensor.sensorPositionOffset.x, - sensor.sensorPositionOffset.y, - sensor.sensorPositionOffset.z - ).applyQuaternion(new THREE.Quaternion( - this.parentEntity.quaternion.x, - this.parentEntity.quaternion.y, - this.parentEntity.quaternion.z, - this.parentEntity.quaternion.w - ))); - - var moveDirection = direction.add(reflection).setY(0).normalize(); - this.debugArrows.avgDirection.vector = this.debugArrows.avgDirection.vector.add(moveDirection); - - if(this.debugArrows.sensors[s].intersectionArrow && this.debugArrows.sensors[s].mesh) { - this.debugArrows.sensors[s].mesh.remove(this.debugArrows.sensors[s].intersectionArrow); - } - - if(this.debugArrows.sensors[s].mesh){ - - var arrow = new THREE.ArrowHelper( - - moveDirection, - - origin, - - 22, - - new THREE.Color(1, 1, 0) - ); - - this.debugArrows.sensors[s].intersectionArrow = arrow; - this.debugArrows.sensors[s].mesh.add(this.debugArrows.sensors[s].intersectionArrow); - } - - } else { - sensor.sensorColor = new THREE.Color(0, 0, 1); - - if(this.debugArrows.sensors[s].intersectionArrow && this.debugArrows.sensors[s].mesh) { - this.debugArrows.sensors[s].mesh.remove(this.debugArrows.sensors[s].intersectionArrow); - } - } - } - - - this.debugArrows.avgDirection.vector = this.debugArrows.avgDirection.vector.normalize(); - // draw the avg move direction - - /*if(!this.debugArrows.avgDirection.mesh) { - this.debugArrows.avgDirection.mesh = new THREE.Mesh( - new THREE.Geometry(), - new THREE.MeshBasicMaterial( - { - color : 0x00ffff, - wireframe : true - } - ) - ); - - sys.game.scenes["MainScene"].instance.add(this.debugArrows.avgDirection.mesh); - } - - if(this.debugArrows.avgDirection.arrow && this.debugArrows.avgDirection.mesh) { - this.debugArrows.avgDirection.mesh.remove(this.debugArrows.avgDirection.arrow); - }*/ - - /*this.debugArrows.avgDirection.arrow = new THREE.ArrowHelper( - this.debugArrows.avgDirection.vector, - - new THREE.Vector3( - this.parentEntity.position.x, - this.parentEntity.position.y, - this.parentEntity.position.z - ), - - 12, - - this.debugArrows.avgDirection.mesh.material.color - );*/ - - //this.debugArrows.avgDirection.mesh.add(this.debugArrows.avgDirection.arrow); - - // draw sensors - /*{ - for(var s = 0, l = this.sensors.length; s < l; ++s) { - - if(!this.debugArrows.sensors[s].mesh) { - - var geometry = new THREE.Geometry(); - var mesh = new THREE.Mesh( - geometry, - new THREE.MeshBasicMaterial( - { - color : 0x000000, - wireframe : true - } - ) - ); - - this.debugArrows.sensors[s].mesh = mesh; - sys.game.scenes["MainScene"].instance.add(this.debugArrows.sensors[s].mesh); - } - - // remove old arrow, if we have one - if(this.debugArrows.sensors[s].arrow) { - this.debugArrows.sensors[s].mesh.remove(this.debugArrows.sensors[s].arrow); - } - - - var sensor = this.sensors[s]; - var sensorLength = sensor.sensorLength; // should get this from the sensor itself - - this.debugArrows.sensors[s].arrow = new THREE.ArrowHelper( - new THREE.Vector3( - sensor.sensorDirection.x, - sensor.sensorDirection.y, - sensor.sensorDirection.z - ).applyQuaternion(new THREE.Quaternion( - this.parentEntity.quaternion.x, - this.parentEntity.quaternion.y, - this.parentEntity.quaternion.z, - this.parentEntity.quaternion.w - )).normalize(), - - new THREE.Vector3( - this.parentEntity.position.x, - this.parentEntity.position.y, - this.parentEntity.position.z - ).add(new THREE.Vector3( - sensor.sensorPositionOffset.x, - sensor.sensorPositionOffset.y, - sensor.sensorPositionOffset.z - ).applyQuaternion(new THREE.Quaternion( - this.parentEntity.quaternion.x, - this.parentEntity.quaternion.y, - this.parentEntity.quaternion.z, - this.parentEntity.quaternion.w - ))), - - sensorLength, - - sensor.sensorColor - ); - - this.debugArrows.sensors[s].mesh.add(this.debugArrows.sensors[s].arrow); - } - }*/ - - - // . . . . . . . . . . . . correct the path . . . . . . . . . . . . . . - if( this.debugArrows.avgDirection.vector.x != 0 - || this.debugArrows.avgDirection.vector.y != 0 - || this.debugArrows.avgDirection.vector.z != 0 - ) { - - // get forward direction OR better the velocity angle of the car - - var avgMoveVector = this.debugArrows.avgDirection.vector; - var forward = new THREE.Vector3( - 1, - 0, - 0 - ).applyQuaternion(new THREE.Quaternion( - this.parentEntity.quaternion.x, - this.parentEntity.quaternion.y, - this.parentEntity.quaternion.z, - this.parentEntity.quaternion.w - )).setY(0).normalize(); - - // get angle and steer. - var cos = avgMoveVector.dot(forward); - - var angleRadians = Math.acos(cos); - var steerAngleModifier = GameLib.API.Vector3.AngleDirection( - forward, - avgMoveVector, - new GameLib.API.Vector3( - 0, - 1, - 0 - ) - ); - - var steerAngle = Math.min(angleRadians, 0.5) * steerAngleModifier; - - this.raycastVehicleComponent.instance.setSteeringValue(steerAngle, 0); - this.raycastVehicleComponent.instance.setSteeringValue(steerAngle, 1); - } - - } -}; - -//#endif \ No newline at end of file diff --git a/src/game-lib-component-vehicle-ai-path-steering.js b/src/game-lib-component-vehicle-ai-path-steering.js deleted file mode 100644 index 537d4fc..0000000 --- a/src/game-lib-component-vehicle-ai-path-steering.js +++ /dev/null @@ -1,244 +0,0 @@ -/** - * - * @param id - * @param name - * @param targetEntity GameLib.Entity - * @param steeringSpeed - * @param maxSteerAngle - * @constructor - */ -GameLib.ComponentVehicleAIPathSteering = function( - id, - name, - targetEntity, - steeringSpeed, - maxSteerAngle -) { - this.id = id|| GameLib.Utils.RandomId(); - if (typeof name == 'undefined') { - name = this.constructor.name; - } - this.name = name; - - this.parentEntity = null; - - // Todo: this should be executed somewhere in game-lib-z, so that we don't execute it on every construction of an object. - GameLib.Utils.Extend(GameLib.ComponentVehicleAIPathSteering, GameLib.Component); - - // - this.targetEntity = targetEntity; - this.steeringSpeed = steeringSpeed || 2.5; - this.maxSteerAngle = maxSteerAngle || 0.5; - - this.raycastVehicleComponent = null; - - this.debugArrows = {}; -}; - -///////////////////////// Methods to override ////////////////////////// - -GameLib.ComponentVehicleAIPathSteering.prototype.onSetParentEntity = function( - parentScene, - parentEntity -) { - this.raycastVehicleComponent = parentEntity.getComponent(GameLib.D3.RaycastVehicle); - this.parentEntity = parentEntity; - - if(!this.raycastVehicleComponent) { - console.warn("NO RAYCAST VEHICLE FOUND!"); - } -}; - -//#ifdef RUNTIME__ -GameLib.ComponentVehicleAIPathSteering.prototype.onUpdate = function( - deltaTime, - parentEntity -) { - - if(this.targetEntity && this.raycastVehicleComponent) { - - var v1 = new THREE.Vector3( - this.parentEntity.position.x, - this.parentEntity.position.y, - this.parentEntity.position.z - ); - - var v2 = new THREE.Vector3( - this.targetEntity.position.x, - this.targetEntity.position.y, - this.targetEntity.position.z - ); - - - // get forward vector of the car. - var v3 = new THREE.Vector3( - 1, - 0, - 0 - ); - - var q1 = new THREE.Quaternion( - this.parentEntity.quaternion.x, - this.parentEntity.quaternion.y, - this.parentEntity.quaternion.z, - this.parentEntity.quaternion.w - ); - - var q2 = new THREE.Quaternion( - this.targetEntity.quaternion.x, - this.targetEntity.quaternion.y, - this.targetEntity.quaternion.z, - this.targetEntity.quaternion.w - ); - - var v1ToV2 = v2.sub(v1); - var forward = v3.applyQuaternion(q1).normalize(); - - var v1v2cpy = new THREE.Vector3( - v1ToV2.x, - v1ToV2.y, - v1ToV2.z - ).applyQuaternion(q2).normalize(); - - v1v2cpy.y = 0; - v1v2cpy = v1v2cpy.normalize(); - - var forwardcpy = new THREE.Vector3( - forward.x, - 0, - forward.z - ).normalize(); - - var cos = v1v2cpy.dot(forwardcpy); - var angleRadians = Math.acos(cos); - var steerAngleModifier = GameLib.API.Vector3.AngleDirection( - forwardcpy, - v1v2cpy, - new GameLib.API.Vector3( - 0, - 1, - 0 - ) - ); - var steerAngle = Math.min(angleRadians, this.maxSteerAngle) * steerAngleModifier; - - if(isNaN(steerAngle)) { - console.log("NOT A NUMBER", steerAngle); - } - - // check if forward & movedirection are pointing in two different directions - /* if(cos < 0) { - console.log("movedirection & forward are pointing in different directions"); - }*/ - - //if(steerAngle > 0.002 || steerAngle < -0.002) { - this.raycastVehicleComponent.instance.setSteeringValue(steerAngle, 0); - this.raycastVehicleComponent.instance.setSteeringValue(steerAngle, 1); - //} - - /*// - - - - - - - - - - - DEBUG ARROW 1 - - - - - - - - - - { - if(!this.debugArrows.v1) { - this.debugArrows.v1 = this.debugArrows.v1 || {}; - } - - if(!this.debugArrows.v1.mesh) { - - var geometryTHREE = new THREE.Geometry(); - var wireframeMesh = new THREE.Mesh( - geometryTHREE, - new THREE.MeshBasicMaterial( - { - color: 0xff0000, - wireframe: true, - opacity: 1 - } - ) - ); - - this.debugArrows.v1.mesh = wireframeMesh; - - sys.game.scenes["MainScene"].instance.add(this.debugArrows.v1.mesh); - } - - if(this.debugArrows.v1.arrow) { - this.debugArrows.v1.mesh.remove(this.debugArrows.v1.arrow); - } - - var len = v1ToV2.length(); - this.debugArrows.v1.arrow = new THREE.ArrowHelper( - v1ToV2.normalize(), - - new THREE.Vector3( - this.parentEntity.position.x, - this.parentEntity.position.y, - this.parentEntity.position.z - ), - - len || 100, - - new THREE.Color( - 0, - 1, - 0 - ) - ); - - this.debugArrows.v1.mesh.add( this.debugArrows.v1.arrow ); - } - - // - - - - - - - - - - - DEBUG ARROW 2 - - - - - - - - - - { - if(!this.debugArrows.v2) { - this.debugArrows.v2 = this.debugArrows.v2 || {}; - } - - if(!this.debugArrows.v2.mesh) { - - var geometryTHREE = new THREE.Geometry(); - var wireframeMesh = new THREE.Mesh( - geometryTHREE, - new THREE.MeshBasicMaterial( - { - color: 0xff0000, - wireframe: true, - opacity: 1 - } - ) - ); - - this.debugArrows.v2.mesh = wireframeMesh; - - sys.game.scenes["MainScene"].instance.add(this.debugArrows.v2.mesh); - } - - if(this.debugArrows.v2.arrow) { - this.debugArrows.v2.mesh.remove(this.debugArrows.v2.arrow); - } - - this.debugArrows.v2.arrow = new THREE.ArrowHelper( - forward, - - new THREE.Vector3( - this.parentEntity.position.x, - this.parentEntity.position.y, - this.parentEntity.position.z - ), - - 12, - - new THREE.Color( - 1.0, - 0.0, - 0.0 - ) - ); - - this.debugArrows.v2.mesh.add( this.debugArrows.v2.arrow ); - }*/ - } - - this.raycastVehicleComponent.instance.applyEngineForce(-3500, 2); - this.raycastVehicleComponent.instance.applyEngineForce(-3500, 3); -}; -//#endif \ No newline at end of file diff --git a/src/game-lib-d3-api-scene.js b/src/game-lib-d3-api-scene.js index eaf7b4f..d1212be 100644 --- a/src/game-lib-d3-api-scene.js +++ b/src/game-lib-d3-api-scene.js @@ -4,15 +4,13 @@ * @param path String * @param name String * @param meshes GameLib.D3.API.Mesh [] - * @param quaternion GameLib.API.Quaternion * @param position GameLib.API.Vector3 - * @param rotation GameLib.API.Vector3 + * @param quaternion GameLib.API.Quaternion * @param scale GameLib.API.Vector3 * @param parentSceneId * @param lights GameLib.D3.API.Light[] * @param worlds GameLib.D3.API.World[] - * @param entities GameLib.API.Entity[] - * @param components GameLib.API.Component[] + * @param entityManager GameLib.EntityManager * @param shapes GameLib.D3.API.Shape[] * @param cameras * @param activeCameraIndex @@ -24,14 +22,13 @@ GameLib.D3.API.Scene = function( path, name, meshes, - quaternion, position, + quaternion, scale, parentSceneId, lights, worlds, - entities, - components, + entityManager, shapes, cameras, activeCameraIndex, @@ -57,16 +54,16 @@ GameLib.D3.API.Scene = function( } this.meshes = meshes; - if (GameLib.Utils.UndefinedOrNull(quaternion)) { - quaternion = new GameLib.API.Quaternion(); - } - this.quaternion = quaternion; - if (GameLib.Utils.UndefinedOrNull(position)) { position = new GameLib.API.Vector3(); } this.position = position; + if (GameLib.Utils.UndefinedOrNull(quaternion)) { + quaternion = new GameLib.API.Quaternion(); + } + this.quaternion = quaternion; + if (GameLib.Utils.UndefinedOrNull(scale)) { scale = new GameLib.API.Vector3(1,1,1); } @@ -87,15 +84,10 @@ GameLib.D3.API.Scene = function( } this.worlds = worlds; - if (GameLib.Utils.UndefinedOrNull(entities)) { - entities = []; + if (GameLib.Utils.UndefinedOrNull(entityManager)) { + entityManager = null; } - this.entities = entities; - - if (GameLib.Utils.UndefinedOrNull(components)) { - components = []; - } - this.components = components; + this.entityManager = entityManager; if (GameLib.Utils.UndefinedOrNull(shapes)) { shapes = []; diff --git a/src/game-lib-d3-scene.js b/src/game-lib-d3-scene.js index 011d239..8230390 100644 --- a/src/game-lib-d3-scene.js +++ b/src/game-lib-d3-scene.js @@ -13,36 +13,46 @@ GameLib.D3.Scene = function Scene( apiScene, imageFactory ) { - - var property; - - for (property in apiScene) { - if (apiScene.hasOwnProperty(property)) { - this[property] = apiScene[property]; - } - } - this.graphics = graphics; this.graphics.isNotThreeThrow(); + GameLib.D3.API.Scene.call( + this, + apiScene.id, + apiScene.path, + apiScene.name, + apiScene.meshes, + apiScene.position, + apiScene.quaternion, + apiScene.scale, + apiScene.parentSceneId, + apiScene.lights, + apiScene.worlds, + apiScene.entityManager, + apiScene.shapes, + apiScene.cameras, + apiScene.activeCameraIndex, + apiScene.splines + ); + this.position = new GameLib.Vector3( graphics, this, this.position ); - this.scale = new GameLib.Vector3( - graphics, - this, - this.scale - ); - this.quaternion = new GameLib.Quaternion( graphics, this, this.quaternion ); + this.scale = new GameLib.Vector3( + graphics, + this, + this.scale + ); + this.progressCallback = progressCallback; this.instance = this.createInstance(); @@ -53,8 +63,6 @@ GameLib.D3.Scene = function Scene( "cameras", "meshes", "lights", - "components", - "entities", "splines" ]; @@ -71,10 +79,11 @@ GameLib.D3.Scene = function Scene( } } } - - this.linkObjects(); }; +GameLib.D3.Scene.prototype = Object.create(GameLib.D3.API.Scene.prototype); +GameLib.D3.Scene.prototype.constructor = GameLib.D3.Scene; + /** * Creates an instance scene * @returns {GameLib.D3.Scene|THREE.Scene|ApiLib.Scene|*|Scene} @@ -122,17 +131,7 @@ GameLib.D3.Scene.prototype.toApiScene = function() { } ); - var apiComponents = this.components.map( - function(component) { - return component.toApiComponent(); - } - ); - - var apiEntities = this.entities.map( - function(entity) { - return entity.toApiEntity(); - } - ); + var apiEntityManager = this.entityManager.toApiEntityManager(); var apiCameras = this.cameras.map( function(camera) { @@ -169,8 +168,7 @@ GameLib.D3.Scene.prototype.toApiScene = function() { this.parentSceneId, apiLights, apiWorlds, - apiEntities, - apiComponents, + apiEntityManager, apiShapes, apiCameras, this.activeCameraIndex, @@ -209,6 +207,11 @@ GameLib.D3.Scene.FromObjectScene = function( ) } ), + new GameLib.API.Vector3( + objectScene.position.x, + objectScene.position.y, + objectScene.position.z + ), new GameLib.API.Quaternion( objectScene.quaternion.x, objectScene.quaternion.y, @@ -221,11 +224,6 @@ GameLib.D3.Scene.FromObjectScene = function( ), objectScene.quaternion.angle ), - new GameLib.API.Vector3( - objectScene.position.x, - objectScene.position.y, - objectScene.position.z - ), new GameLib.API.Vector3( objectScene.scale.x, objectScene.scale.y, @@ -248,21 +246,9 @@ GameLib.D3.Scene.FromObjectScene = function( ); } ), - objectScene.entities.map( - function (objectEntity) { - return GameLib.Entity.FromObjectEntity( - graphics, - objectEntity - ); - } - ), - objectScene.components.map( - function (objectComponent) { - return GameLib.Component.FromObjectComponent( - graphics, - objectComponent - ); - } + GameLib.EntityManager.FromObjectEntityManager( + graphics, + objectScene.entityManager ), objectScene.shapes.map( function (objectShape) { diff --git a/src/game-lib-entity-manager.js b/src/game-lib-entity-manager.js index 048755a..8cf7da6 100644 --- a/src/game-lib-entity-manager.js +++ b/src/game-lib-entity-manager.js @@ -88,7 +88,7 @@ GameLib.EntityManager.prototype.queryComponents = function(components) { * Converts a GameLib.Entity to GameLib.API.Entity * @returns {GameLib.API.Entity} */ -GameLib.EntityManager.prototype.toApiEntity = function() { +GameLib.EntityManager.prototype.toApiEntityManager = function() { //TODO: refactor / fix // var apiEntity = new GameLib.API.Entity(