mirror of
https://github.com/overte-org/overte.git
synced 2025-08-09 23:40:11 +02:00
Merge pull request #6362 from ericrius1/helicopter
Added scripts for helicopter
This commit is contained in:
commit
4ded489d23
2 changed files with 276 additions and 0 deletions
144
examples/drylake/explodeHelicopter.js
Normal file
144
examples/drylake/explodeHelicopter.js
Normal file
|
@ -0,0 +1,144 @@
|
||||||
|
var explosionSound = SoundCache.getSound("https://s3.amazonaws.com/hifi-public/eric/sounds/explosion.wav");
|
||||||
|
|
||||||
|
var partsURLS = [{
|
||||||
|
url: "https://s3.amazonaws.com/hifi-public/eric/models/blade.fbx",
|
||||||
|
dimensions: {
|
||||||
|
x: 2,
|
||||||
|
y: 2,
|
||||||
|
z: 2
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
url: "https://s3.amazonaws.com/hifi-public/eric/models/body.fbx",
|
||||||
|
dimensions: {
|
||||||
|
x: 2.2,
|
||||||
|
y: 2.98,
|
||||||
|
z: 7.96
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
url: "https://s3.amazonaws.com/hifi-public/eric/models/tail.fbx",
|
||||||
|
dimensions: {
|
||||||
|
x: 1,
|
||||||
|
y: 1,
|
||||||
|
z: 1
|
||||||
|
}
|
||||||
|
}];
|
||||||
|
|
||||||
|
var parts = [];
|
||||||
|
var emitters = [];
|
||||||
|
|
||||||
|
var explodePosition;
|
||||||
|
var helicopter;
|
||||||
|
var entities = Entities.findEntities(MyAvatar.position, 2000);
|
||||||
|
for (i = 0; i < entities.length; i++) {
|
||||||
|
var name = Entities.getEntityProperties(entities[i], 'name').name;
|
||||||
|
if (name === "Helicopter") {
|
||||||
|
var helicopter = entities[i];
|
||||||
|
explodeHelicopter(Entities.getEntityProperties(helicopter, 'position').position);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function explodeHelicopter(explodePosition) {
|
||||||
|
Audio.playSound(explosionSound, {
|
||||||
|
position: explodePosition,
|
||||||
|
volume: 0.5
|
||||||
|
});
|
||||||
|
Entities.deleteEntity(helicopter);
|
||||||
|
for (var i = 0; i < partsURLS.length; i++) {
|
||||||
|
var position = Vec3.sum(explodePosition, {
|
||||||
|
x: 1,
|
||||||
|
y: 1,
|
||||||
|
z: 1
|
||||||
|
});
|
||||||
|
var part = Entities.addEntity({
|
||||||
|
type: "Model",
|
||||||
|
modelURL: partsURLS[i].url,
|
||||||
|
dimensions: partsURLS[i].dimensions,
|
||||||
|
position: position,
|
||||||
|
shapeType: "box",
|
||||||
|
collisionsWillMove: true,
|
||||||
|
damping: 0,
|
||||||
|
gravity: {
|
||||||
|
x: 0,
|
||||||
|
y: -9.6,
|
||||||
|
z: 0
|
||||||
|
},
|
||||||
|
velocity: {
|
||||||
|
x: Math.random(),
|
||||||
|
y: -10,
|
||||||
|
z: Math.random()
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
var emitter = Entities.addEntity({
|
||||||
|
type: "ParticleEffect",
|
||||||
|
name: "fire",
|
||||||
|
isEmitting: true,
|
||||||
|
textures: "https://hifi-public.s3.amazonaws.com/alan/Particles/Particle-Sprite-Smoke-1.png",
|
||||||
|
position: explodePosition,
|
||||||
|
emitRate: 100,
|
||||||
|
colorStart: {
|
||||||
|
red: 70,
|
||||||
|
green: 70,
|
||||||
|
blue: 137
|
||||||
|
},
|
||||||
|
color: {
|
||||||
|
red: 200,
|
||||||
|
green: 99,
|
||||||
|
blue: 42
|
||||||
|
},
|
||||||
|
colorFinish: {
|
||||||
|
red: 255,
|
||||||
|
green: 99,
|
||||||
|
blue: 32
|
||||||
|
},
|
||||||
|
radiusSpread: 0.2,
|
||||||
|
radiusStart: 0.3,
|
||||||
|
radiusEnd: 0.04,
|
||||||
|
particleRadius: 0.09,
|
||||||
|
radiusFinish: 0.0,
|
||||||
|
emitSpeed: 0.1,
|
||||||
|
speedSpread: 0.1,
|
||||||
|
alphaStart: 0.1,
|
||||||
|
alpha: 0.7,
|
||||||
|
alphaFinish: 0.1,
|
||||||
|
emitOrientation: Quat.fromPitchYawRollDegrees(-90, 0, 0),
|
||||||
|
emitDimensions: {
|
||||||
|
x: 1,
|
||||||
|
y: 1,
|
||||||
|
z: 0.1
|
||||||
|
},
|
||||||
|
polarFinish: Math.PI,
|
||||||
|
polarStart: 0,
|
||||||
|
|
||||||
|
accelerationSpread: {
|
||||||
|
x: 0.1,
|
||||||
|
y: 0.01,
|
||||||
|
z: 0.1
|
||||||
|
},
|
||||||
|
lifespan: 1,
|
||||||
|
});
|
||||||
|
emitters.push(emitter)
|
||||||
|
parts.push(part);
|
||||||
|
}
|
||||||
|
|
||||||
|
Script.setTimeout(function() {
|
||||||
|
var pos = Entities.getEntityProperties(parts[1], "position").position;
|
||||||
|
Entities.editEntity(emitters[0], {position: Vec3.sum(pos, {x: Math.random(), y: Math.random(), z: Math.random()})});
|
||||||
|
Entities.editEntity(emitters[1], {position: Vec3.sum(pos, {x: Math.random(), y: Math.random(), z: Math.random()})});
|
||||||
|
Entities.editEntity(emitters[2], {position: Vec3.sum(pos, {x: Math.random(), y: Math.random(), z: Math.random()})});
|
||||||
|
}, 5000)
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function cleanup() {
|
||||||
|
parts.forEach(function(part) {
|
||||||
|
Entities.deleteEntity(part);
|
||||||
|
});
|
||||||
|
emitters.forEach(function(emitter){
|
||||||
|
Entities.deleteEntity(emitter);
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
Script.scriptEnding.connect(cleanup);
|
132
examples/drylake/helicopter.js
Normal file
132
examples/drylake/helicopter.js
Normal file
|
@ -0,0 +1,132 @@
|
||||||
|
var modelURL = "https://s3.amazonaws.com/hifi-public/eric/models/helicopter.fbx?v3";
|
||||||
|
var animationURL = "https://s3.amazonaws.com/hifi-public/eric/models/bladeAnimation.fbx?v7";
|
||||||
|
var spawnPosition = {
|
||||||
|
x: 1031,
|
||||||
|
y: 145,
|
||||||
|
z: 1041
|
||||||
|
};
|
||||||
|
|
||||||
|
var speed = 0;
|
||||||
|
|
||||||
|
var helicopterSound = SoundCache.getSound("https://hifi-public.s3.amazonaws.com/ryan/helicopter.L.wav");
|
||||||
|
var audioInjector = Audio.playSound(helicopterSound, {
|
||||||
|
volume: 0.3,
|
||||||
|
loop: true
|
||||||
|
});
|
||||||
|
|
||||||
|
// These constants define the Spotlight position and orientation relative to the model
|
||||||
|
var MODEL_LIGHT_POSITION = {
|
||||||
|
x: 2,
|
||||||
|
y: 0,
|
||||||
|
z: -5
|
||||||
|
};
|
||||||
|
var MODEL_LIGHT_ROTATION = Quat.angleAxis(-90, {
|
||||||
|
x: 1,
|
||||||
|
y: 0,
|
||||||
|
z: 0
|
||||||
|
});
|
||||||
|
|
||||||
|
// Evaluate the world light entity positions and orientations from the model ones
|
||||||
|
function evalLightWorldTransform(modelPos, modelRot) {
|
||||||
|
|
||||||
|
return {
|
||||||
|
p: Vec3.sum(modelPos, Vec3.multiplyQbyV(modelRot, MODEL_LIGHT_POSITION)),
|
||||||
|
q: Quat.multiply(modelRot, MODEL_LIGHT_ROTATION)
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
var helicopter = Entities.addEntity({
|
||||||
|
type: "Model",
|
||||||
|
name: "Helicopter",
|
||||||
|
modelURL: modelURL,
|
||||||
|
animation: {
|
||||||
|
url: animationURL,
|
||||||
|
running: true,
|
||||||
|
fps: 180
|
||||||
|
|
||||||
|
},
|
||||||
|
dimensions: {
|
||||||
|
x: 12.13,
|
||||||
|
y: 3.14,
|
||||||
|
z: 9.92
|
||||||
|
},
|
||||||
|
position: spawnPosition,
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
var spotlight = Entities.addEntity({
|
||||||
|
type: "Light",
|
||||||
|
name: "helicopter light",
|
||||||
|
intensity: 2,
|
||||||
|
color: {
|
||||||
|
red: 200,
|
||||||
|
green: 200,
|
||||||
|
blue: 255
|
||||||
|
},
|
||||||
|
intensity: 1,
|
||||||
|
dimensions: {
|
||||||
|
x: 2,
|
||||||
|
y: 2,
|
||||||
|
z: 200
|
||||||
|
},
|
||||||
|
exponent: 0.01,
|
||||||
|
cutoff: 10,
|
||||||
|
isSpotlight: true
|
||||||
|
});
|
||||||
|
|
||||||
|
var debugLight = Entities.addEntity({
|
||||||
|
type: "Box",
|
||||||
|
dimensions: {
|
||||||
|
x: .1,
|
||||||
|
y: .1,
|
||||||
|
z: .3
|
||||||
|
},
|
||||||
|
color: {
|
||||||
|
red: 200,
|
||||||
|
green: 200,
|
||||||
|
blue: 0
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
function cleanup() {
|
||||||
|
Entities.deleteEntity(debugLight);
|
||||||
|
Entities.deleteEntity(helicopter);
|
||||||
|
Entities.deleteEntity(spotlight);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function update() {
|
||||||
|
var modelProperties = Entities.getEntityProperties(helicopter, ['position', 'rotation']);
|
||||||
|
var lightTransform = evalLightWorldTransform(modelProperties.position, modelProperties.rotation);
|
||||||
|
Entities.editEntity(spotlight, {
|
||||||
|
position: lightTransform.p,
|
||||||
|
rotation: lightTransform.q
|
||||||
|
});
|
||||||
|
Entities.editEntity(debugLight, {
|
||||||
|
position: lightTransform.p,
|
||||||
|
rotation: lightTransform.q
|
||||||
|
});
|
||||||
|
|
||||||
|
audioInjector.setOptions({
|
||||||
|
position: modelProperties.position,
|
||||||
|
});
|
||||||
|
|
||||||
|
//Move forward
|
||||||
|
var newRotation = Quat.multiply(modelProperties.rotation, {
|
||||||
|
x: 0,
|
||||||
|
y: .002,
|
||||||
|
z: 0,
|
||||||
|
w: 1
|
||||||
|
})
|
||||||
|
var newPosition = Vec3.sum(modelProperties.position, Vec3.multiply(speed, Quat.getFront(modelProperties.rotation)));
|
||||||
|
Entities.editEntity(helicopter, {
|
||||||
|
position: newPosition,
|
||||||
|
rotation: newRotation
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Script.update.connect(update);
|
||||||
|
Script.scriptEnding.connect(cleanup);
|
Loading…
Reference in a new issue