mirror of
https://github.com/HifiExperiments/overte.git
synced 2025-06-03 21:29:57 +02:00
Merge branch 'ratsteer' of https://github.com/imgntn/hifi into ratsteer
This commit is contained in:
commit
bd58a45d5a
1 changed files with 0 additions and 256 deletions
|
@ -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();
|
|
||||||
// })
|
|
Loading…
Reference in a new issue