Merge branch 'ratsteer' of https://github.com/imgntn/hifi into ratsteer

This commit is contained in:
James B. Pollack 2015-11-30 12:44:22 -08:00
commit bd58a45d5a

View file

@ -1,256 +0,0 @@
Script.include('steer.js');
var steer = loadSteer();
Script.include('tween.js');
var TWEEN = loadTween();
var RAT_NEST_LOCATION = {
x: 0,
y: 0,
z: 0
};
var RAT_SPAWNER_LOCATION = {
x: 0,
y: 0,
z: 0
};
var AVOIDER_BLOCK_START_LOCATION = {
x: 0,
y: 0,
z: 0
};
var ratProperties = {
name: 'Hifi-Rat-Nest',
type: 'Box',
color: {
red: 0,
green: 0,
blue: 255
},
dimensions: {
x: 1,
y: 1,
z: 1
},
position: RAT_SPAWNER_LOCATION
};
var targetProperties = {
name: 'Hifi-Rat',
type: 'Box',
color: {
red: 0,
green: 255,
blue: 0
},
dimensions: {
x: 1,
y: 1,
z: 1
},
position: RAT_NEST_LOCATION
// script: Script.resolvePath('rat.js')
};
var target = Entities.addEntity(targetProperties)
function addRat() {
var rat = Entities.addEntity(ratProperties);
rats.push(rat);
}
var rats = [];
addRat();
var avoiders = [];
function addAvoiderBlock() {
var avoiderProperties = {
name: 'Hifi-Rat-Avoider',
type: 'Box',
color: {
red: 255,
green: 0,
blue: 255
},
dimensions: {
x: 1,
y: 1,
z: 1
},
position: {
x: 1,
y: 1,
z: 1
},
collisionsWillMove:false,
ignoreForCollisions:true,
visible: true
}
var avoider = Entities.addEntity(avoiderProperties);
avoiders.push(avoider)
}
addAvoiderBlock();
tweenAvoider(avoiders[0]);
function tweenAvoider(entityID) {
var ANIMATION_DURATION = 500;
var begin = {
x: 1,
y: 1,
z: 1
}
var target = {
x: 3,
y: 1,
z: 3
}
var original = {
x: 1,
y: 1,
z: 1
}
var tweenHead = new TWEEN.Tween(begin).to(target, ANIMATION_DURATION);
function updateTo() {
Entities.editEntity(entityID, {
position: {
x: begin.x,
y: begin.y,
z: begin.z
}
})
}
function updateBack() {
Entities.editEntity(entityID, {
position: {
x: begin.x,
y: begin.y,
z: begin.z
}
})
}
var tweenBack = new TWEEN.Tween(begin).to(original, ANIMATION_DURATION).onUpdate(updateBack);
tweenHead.onUpdate(function() {
updateTo()
})
tweenHead.chain(tweenBack);
tweenBack.chain(tweenHead);
tweenHead.start();
}
function updateTweens() {
TWEEN.update();
}
function moveRats() {
rats.forEach(function(rat) {
// print('debug1')
var avatarFlightVectors = steer.fleeAllAvatars(rat);
print('avatarFlightVectors' + avatarFlightVectors)
var i;
var averageAvatarFlight;
for (i = 0; i < avatarFlightVectors.length; i++) {
print('debug2')
if (i === 0) {
averageAvatarFlight = avatarFlightVectors[0];
} else {
averageAvatarFlight = Vec3.sum(avatarFlightVectors[i - 1], avatarFlightVectors[i])
}
}
averageAvatarFlight = Vec3.multiply(averageAvatarFlight, 1 / avatarFlightVectors.length);
// var avoidBlockVectors = steer.fleeAvoiderBlocks(rat);
// var averageAvoiderFlight;
// for (i = 0; i < avoidBlockVectors.length; i++) {
// if (i === 0) {
// averageAvoiderFlight = avoidBlockVectors[0];
// } else {
// averageAvoiderFlight = Vec3.sum(avoidBlockVectors[i - 1], avoidBlockVectors[i])
// }
// }
// averageAvoiderFlight = Vec3.multiply(averageAvoiderFlight, 1 / avoidBlockVectors.length);
var averageVector;
var seek = steer.arrive(rat, target);
averageVector = seek;
var divisorCount = 1;
if (avatarFlightVectors.length > 0) {
divisorCount++;
averageVector = Vec3.sum(averageVector, averageAvatarFlight);
}
// if (avoidBlockVectors > 0) {
// divisorCount++
// averageVector = Vec3.sum(averageVector, averageAvoiderFlight);
// }
averageVector = Vec3.multiply(averageVector, 1 / divisorCount);
print('AVERAGE VECTOR:::' + JSON.stringify(averageVector))
// castRay(rat);
Entities.editEntity(rat, {
velocity: averageVector
})
})
}
Script.update.connect(moveRats)
Script.update.connect(updateTweens);
function castRay(rat) {
var ratProps = Entities.getEntityProperties(rat, ["position", "rotation"]);
var shotDirection = Quat.getFront(ratProps.rotation);
var pickRay = {
origin: ratProps.position,
direction: shotDirection
};
var intersection = Entities.findRayIntersection(pickRay, true);
if (intersection.intersects) {
var distance = Vec3.subtract(intersection.properties.position, ratProps.position);
distance = Vec3.length(distance);
// print('INTERSECTION:::'+distance);
} else {
print('no intersection')
}
}
function cleanup() {
while (rats.length > 0) {
Entities.deleteEntity(rats.pop());
}
while (avoiders.length > 0) {
Entities.deleteEntity(avoiders.pop());
}
Entities.deleteEntity(target);
Script.update.disconnect(moveRats);
Script.update.disconnect(updateTweens);
}
Script.scriptEnding.connect(cleanup)
// Script.setInterval(function() {
// addRat();
// })