/** * * @param id * @param name * @param sensorLength * @constructor */ GameLib.D3.ComponentPathAI = function ComponentPathAI( id, name, sensorLength ) { this.id = id || GameLib.D3.Tools.RandomId(); if (typeof name == 'undefined') { name = this.constructor.name; } this.name = name; this.parentEntity = null; this.sensorLength = sensorLength || 5; GameLib.D3.Utils.Extend(GameLib.D3.ComponentPathAI, GameLib.D3.ComponentInterface); //#ifdef RUNTIME__ this.sensors = []; //#endif }; //#ifdef RUNTIME__ ///////////////////////// Methods to override ////////////////////////// GameLib.D3.ComponentPathAI.prototype.onUpdate = function( deltaTime, parentEntity ) { var forward = false; var backward = false; var left = false; var right = false; /*if (this.keyForwardPressed) { // Forward [i] this.pathFollowingComponent.direction = 1; } else if (this.keyBackPressed){ this.pathFollowingComponent.direction = -1; } else { this.pathFollowingComponent.direction = 0; } // left right if (this.keyLeftPressed) { // Left [j] this.pathFollowingComponent.offset.x = 0; this.pathFollowingComponent.offset.y = 0; this.pathFollowingComponent.offset.z = 1; } else if (this.keyRightPressed) { // Right [l] this.pathFollowingComponent.offset.x = 0; this.pathFollowingComponent.offset.y = 0; this.pathFollowingComponent.offset.z = -1; }*/ if(this.sensorVisualizer) { for(var i = 0, i = 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[s].sensorMesh.remove(this.sensorVisualizer.sensors[i].arrow); } // create new } } }; GameLib.D3.ComponentPathAI.prototype.onSetParentEntity = function( parentScene, parentEntity ) { this.parentEntity = parentEntity; this.pathFollowingComponent = parentEntity.getComponent(GameLib.D3.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(1, 0, 0); // Create sensors 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.z * this.parentEntity.mesh.scale.z, 0 ) } ); // debug code this.sensorVisualizer = { sensors : [] }; }; //#endif