changes to path components
parent
a1e9357a7a
commit
87d327cb4a
|
@ -0,0 +1,158 @@
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @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
|
|
@ -35,7 +35,7 @@ GameLib.D3.ComponentPathFollowing = function ComponentPathFollowing(
|
||||||
this.accel = accel || 2.0;
|
this.accel = accel || 2.0;
|
||||||
|
|
||||||
this.baseOffset = baseOffset || new GameLib.D3.Vector3();
|
this.baseOffset = baseOffset || new GameLib.D3.Vector3();
|
||||||
this.maxOffset = maxOffset || new GameLib.D3.Vector3(Number.MAX_SAFE_INTEGER, Number.MAX_SAFE_INTEGER, Number.MAX_SAFE_INTEGER);
|
this.maxOffset = maxOffset || new GameLib.D3.Vector3(10, 10, 10);
|
||||||
this.steeringSpeed = steeringSpeed || 1.0;
|
this.steeringSpeed = steeringSpeed || 1.0;
|
||||||
|
|
||||||
|
|
||||||
|
@ -83,18 +83,20 @@ GameLib.D3.ComponentPathFollowing.prototype.onUpdate = function(
|
||||||
|
|
||||||
{ // update position
|
{ // update position
|
||||||
|
|
||||||
var t = deltaTime * this.accel;
|
var t = deltaTime * ((this.currentSpeed / this.maxSpeed) * this.steeringSpeed); // put this into another variable
|
||||||
t = t * t * t * (t * (6.0 * t - 15.0) + 10.0);
|
t = t * t * t * (t * (6.0 * t - 15.0) + 10.0);
|
||||||
|
|
||||||
|
var targetVector = new THREE.Vector3(
|
||||||
|
this.maxOffset.x * this.offset.x,
|
||||||
|
this.maxOffset.y * this.offset.y,
|
||||||
|
this.maxOffset.z * this.offset.z
|
||||||
|
);
|
||||||
|
|
||||||
var lerpedOffset = new THREE.Vector3(
|
var lerpedOffset = new THREE.Vector3(
|
||||||
this.currentOffset.x,
|
this.currentOffset.x,
|
||||||
this.currentOffset.y,
|
this.currentOffset.y,
|
||||||
this.currentOffset.z
|
this.currentOffset.z
|
||||||
).lerp(new THREE.Vector3(
|
).lerp(targetVector, t);
|
||||||
this.maxOffset.x * this.offset.x,
|
|
||||||
this.maxOffset.y * this.offset.y,
|
|
||||||
this.maxOffset.z * this.offset.z
|
|
||||||
), t);
|
|
||||||
|
|
||||||
this.currentOffset.x = lerpedOffset.x;
|
this.currentOffset.x = lerpedOffset.x;
|
||||||
this.currentOffset.y = lerpedOffset.y;
|
this.currentOffset.y = lerpedOffset.y;
|
||||||
|
|
Loading…
Reference in New Issue