overte/unpublishedScripts/DomainContent/CellScience/Scripts/showIdentification.js
David Kelly 18849d5416 Fixed sound issue
Long ago, localOnly didn't change volume based on position, let alone
do HTRF.  Now it does, though only the former on stereo .wav files.  So
we were playing the sound at a position far from where you may have
been, and also with a really low volume.  This addresses both.
2016-10-14 14:42:50 -07:00

165 lines
5.2 KiB
JavaScript

// Copyright 2016 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
//
(function() {
var self = this;
var baseURL = "https://hifi-production.s3.amazonaws.com/DomainContent/CellScience/";
var version = 3;
this.preload = function(entityId) {
this.soundPlaying = null;
this.entityId = entityId;
self.initTimeout = null;
this.initialize(entityId);
}
this.initialize = function(entityId) {
//print(' should initialize' + entityId)
var properties = Entities.getEntityProperties(entityId);
if (properties.userData.length === 0 || properties.hasOwnProperty('userData') === false) {
self.initTimeout = Script.setTimeout(function() {
//print(' no user data yet, try again in one second')
self.initialize(entityId);
}, 1000)
} else {
//print(' userdata before parse attempt' + properties.userData)
self.userData = null;
try {
self.userData = JSON.parse(properties.userData);
} catch (err) {
//print(' error parsing json');
//print(' properties are:' + properties.userData);
return;
}
self.labelURL = baseURL + "GUI/labels_" + self.userData.name + ".png?" + version;
self.showDistance = self.userData.showDistance;
self.soundURL = baseURL + "Audio/" + self.userData.name + ".wav";
self.soundOptions = {
stereo: true,
loop: false,
localOnly: true,
volume: 0.45,
};
self.sound = SoundCache.getSound(self.soundURL);
self.buttonImageURL = baseURL + "GUI/GUI_audio.png?" + version;
self.addButton();
}
}
this.addButton = function() {
this.windowDimensions = Controller.getViewportDimensions();
this.buttonWidth = 100;
this.buttonHeight = 100;
this.buttonPadding = 40;
this.buttonPositionX = (self.windowDimensions.x - self.buttonPadding) / 2 - self.buttonWidth / 2;
this.buttonPositionY = (self.windowDimensions.y - self.buttonHeight) - (self.buttonHeight + self.buttonPadding);
this.button = Overlays.addOverlay("image", {
x: self.buttonPositionX,
y: self.buttonPositionY,
width: self.buttonWidth,
height: self.buttonHeight,
imageURL: self.buttonImageURL,
visible: false,
alpha: 1.0
});
this.labelWidth = 256;
this.labelHeight = 64;
this.labelPadding = 0;
this.labelPositionX = (self.windowDimensions.x - self.labelPadding) / 2 - self.labelWidth / 2;
this.labelPositionY = self.labelHeight + self.labelPadding;
// print("adding label " + self.labelURL + " at position " + self.labelPositionX + ", " + self.labelPositionY);
this.label = Overlays.addOverlay("image", {
x: self.labelPositionX,
y: self.labelPositionY,
width: self.labelWidth,
height: self.labelHeight,
imageURL: self.labelURL,
visible: false,
alpha: 1.0
});
}
this.getUserData = function() {
this.properties = Entities.getEntityProperties(this.entityId);
if (self.properties.userData) {
this.userData = JSON.parse(this.properties.userData);
} else {
this.userData = {};
}
}
this.enterEntity = function(entityID) {
// print("entering entity and showing" + self.labelURL);
Overlays.editOverlay(self.button, {
visible: true
});
Overlays.editOverlay(self.label, {
visible: true
});
}
this.leaveEntity = function(entityID) {
// print("leaving entity " + self.userData.name);
print(Overlays);
Overlays.editOverlay(self.button, {
visible: false
});
Overlays.editOverlay(self.label, {
visible: false
});
}
this.onClick = function(event) {
var clickedOverlay = Overlays.getOverlayAtPoint({
x: event.x,
y: event.y
});
if (clickedOverlay == self.button) {
//print("button was clicked");
if (self.sound.downloaded) {
// print("play sound");
Overlays.editOverlay(self.button, {
visible: false
});
self.soundOptions.position = MyAvatar.position;
this.soundPlaying = Audio.playSound(self.sound, self.soundOptions);
} else {
// print("not downloaded");
}
}
}
this.unload = function() {
Overlays.deleteOverlay(self.button);
if (this.soundPlaying !== null) {
this.soundPlaying.stop();
}
if (self.initTimeout !== null) {
Script.clearTimeout(self.initTimeout);
}
Controller.mousePressEvent.disconnect(this.onClick);
}
Controller.mousePressEvent.connect(this.onClick);
});