overte/examples/radio.js
2014-09-15 16:05:26 -07:00

79 lines
2.5 KiB
JavaScript

//
// Radio.js
// examples
//
// Created by Clément Brisset on 8/20/14.
// Copyright 2014 High Fidelity, Inc.
//
// Distributed under the Apache License, Version 2.0.
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
//
var position = { x:1, y: 1, z: 10 };
var rotation = Quat.fromPitchYawRollDegrees(0, 0, 0);
var scale = 1.0;
var modelURL = "https://s3-us-west-1.amazonaws.com/highfidelity-public/models/entities/radio/Speakers2Finished.fbx";
var soundURL = "https://s3-us-west-1.amazonaws.com/highfidelity-public/sounds/FamilyStereo.raw";
var AudioRotationOffset = Quat.fromPitchYawRollDegrees(0, -90, 0);
var audioOptions = new AudioInjectionOptions();
audioOptions.volume = 0.7;
audioOptions.position = position;
audioOptions.orientation = Quat.multiply(AudioRotationOffset, rotation);
audioOptions.loop = true;
audioOptions.isStereo = true;
var injector = null;
var sound = new Sound(soundURL);
var entity = null;
var properties = null;
function update() {
if (entity === null) {
if (sound.downloaded) {
print("Sound file downloaded");
entity = Entities.addEntity({
type: "Model",
position: position,
rotation: rotation,
radius: scale / 2.0,
modelURL: modelURL
});
properties = Entities.getEntityProperties(entity);
injector = Audio.playSound(sound, audioOptions);
}
} else {
var newProperties = Entities.getEntityProperties(entity);
if (newProperties.type === "Model") {
if (newProperties.position != properties.position) {
audioOptions.position = newProperties.position;
}
if (newProperties.orientation != properties.orientation) {
audioOptions.orientation = newProperties.orientation;
}
properties = newProperties;
} else {
entity = null;
Script.update.disconnect(update);
Script.scriptEnding.connect(scriptEnding);
scriptEnding();
}
}
}
function scriptEnding() {
if (entity != null) {
Entities.deleteEntity(entity);
}
if (injector != null) {
injector.stop();
}
}
Script.update.connect(update);
Script.scriptEnding.connect(scriptEnding);