mirror of
https://github.com/JulianGro/overte.git
synced 2025-04-13 22:08:32 +02:00
73 lines
No EOL
2.7 KiB
JavaScript
73 lines
No EOL
2.7 KiB
JavaScript
//
|
||
// cameraExample.js
|
||
// examples
|
||
//
|
||
// Copyright 2014 High Fidelity, Inc.
|
||
//
|
||
// This sample script watches your hydra hands and makes clapping sound when they come close together fast
|
||
//
|
||
// Distributed under the Apache License, Version 2.0.
|
||
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
||
//
|
||
|
||
function length(v) {
|
||
return Math.sqrt(v.x * v.x + v.y * v.y + v.z * v.z);
|
||
}
|
||
|
||
|
||
function printVector(v) {
|
||
print(v.x + ", " + v.y + ", " + v.z + "\n");
|
||
}
|
||
|
||
function vMinus(a, b) {
|
||
var rval = { x: a.x - b.x, y: a.y - b.y, z: a.z - b.z };
|
||
return rval;
|
||
}
|
||
|
||
// First, load the clap sound from a URL
|
||
var clap1 = new Sound("https://s3-us-west-1.amazonaws.com/highfidelity-public/sounds/claps/clap1.raw");
|
||
var clap2 = new Sound("https://s3-us-west-1.amazonaws.com/highfidelity-public/sounds/claps/clap2.raw");
|
||
var clap3 = new Sound("https://s3-us-west-1.amazonaws.com/highfidelity-public/sounds/claps/clap3.raw");
|
||
var clap4 = new Sound("https://s3-us-west-1.amazonaws.com/highfidelity-public/sounds/claps/clap4.raw");
|
||
var clap5 = new Sound("https://s3-us-west-1.amazonaws.com/highfidelity-public/sounds/claps/clap5.raw");
|
||
var clap6 = new Sound("https://s3-us-west-1.amazonaws.com/highfidelity-public/sounds/claps/clap6.raw");
|
||
|
||
var clapping = new Array();
|
||
clapping[0] = false;
|
||
clapping[1] = false;
|
||
|
||
function maybePlaySound(deltaTime) {
|
||
// Set the location and other info for the sound to play
|
||
var palm1Position = Controller.getSpatialControlPosition(0);
|
||
var palm2Position = Controller.getSpatialControlPosition(2);
|
||
var distanceBetween = length(vMinus(palm1Position, palm2Position));
|
||
|
||
for (var palm = 0; palm < 2; palm++) {
|
||
var palmVelocity = Controller.getSpatialControlVelocity(palm * 2 + 1);
|
||
var speed = length(palmVelocity);
|
||
|
||
const CLAP_SPEED = 0.2;
|
||
const CLAP_DISTANCE = 0.2;
|
||
|
||
if (!clapping[palm] && (distanceBetween < CLAP_DISTANCE) && (speed > CLAP_SPEED)) {
|
||
var options = new AudioInjectionOptions();
|
||
options.position = palm1Position;
|
||
options.volume = speed / 2.0;
|
||
if (options.volume > 1.0) options.volume = 1.0;
|
||
which = Math.floor((Math.random() * 6) + 1);
|
||
if (which == 1) { Audio.playSound(clap1, options); }
|
||
else if (which == 2) { Audio.playSound(clap2, options); }
|
||
else if (which == 3) { Audio.playSound(clap3, options); }
|
||
else if (which == 4) { Audio.playSound(clap4, options); }
|
||
else if (which == 5) { Audio.playSound(clap5, options); }
|
||
else { Audio.playSound(clap6, options); }
|
||
Audio.playSound(clap, options);
|
||
clapping[palm] = true;
|
||
} else if (clapping[palm] && (speed < (CLAP_SPEED / 4.0))) {
|
||
clapping[palm] = false;
|
||
}
|
||
}
|
||
}
|
||
|
||
// Connect a call back that happens every frame
|
||
Script.update.connect(maybePlaySound); |