// // uses the entity position + mesh bounding sphere to check if intersections // GameLib.D3.ComponentTriggerSphereSphere = function( componentId, sphereRadius, entitiesToCheck, callback ) { this.componentId = componentId || GameLib.D3.Tools.RandomId(); 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.D3.Utils.Extend(GameLib.D3.ComponentTriggerSphereSphere, GameLib.D3.ComponentInterface); this.entitiesToCheck = entitiesToCheck || []; this.sphereRadius = sphereRadius || 1.0; this.callback = callback || null; }; 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.D3.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) { ComponentTriggerSphereSphere_targetBoundingSphereRadius = entityToCheck.mesh.geometry.boundingSphere.radius; } else { ComponentTriggerSphereSphere_targetBoundingSphereRadius = 0.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.callback) { this.callback(parentEntity, entityToCheck); } } } };