mirror of
https://github.com/HifiExperiments/overte.git
synced 2025-05-06 22:18:36 +02:00
203 lines
No EOL
6.5 KiB
JavaScript
203 lines
No EOL
6.5 KiB
JavaScript
//
|
|
// #20628: JS Stream Player Domain-Zone
|
|
// *************************************
|
|
//
|
|
// Created by Kevin M. Thomas and Thoys 07/20/15.
|
|
// Copyright 2015 High Fidelity, Inc.
|
|
// kevintown.net
|
|
//
|
|
// JavaScript for the High Fidelity interface that creates a stream player with a UI for playing a domain-zone specificed stream URL in addition to play, stop and volume functionality which is resident only in the domain-zone.
|
|
//
|
|
// Distributed under the Apache License, Version 2.0.
|
|
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
|
//
|
|
|
|
|
|
// Declare variables and set up new WebWindow.
|
|
var stream = "http://listen.radionomy.com/80sMixTape";
|
|
var volume;
|
|
var streamWindow = new WebWindow('Stream', "https://dl.dropboxusercontent.com/u/17344741/jsstreamplayer/jsstreamplayerdomain-zone.html", 0, 0, false);
|
|
var visible = false;
|
|
|
|
// Set up toggleStreamPlayButton overlay.
|
|
var toggleStreamPlayButton = Overlays.addOverlay("text", {
|
|
x: 122,
|
|
y: 310,
|
|
width: 38,
|
|
height: 28,
|
|
backgroundColor: { red: 0, green: 0, blue: 0},
|
|
color: { red: 255, green: 255, blue: 0},
|
|
font: {size: 15},
|
|
topMargin: 8,
|
|
visible: false,
|
|
text: " Play"
|
|
});
|
|
|
|
// Set up toggleStreamStopButton overlay.
|
|
var toggleStreamStopButton = Overlays.addOverlay("text", {
|
|
x: 166,
|
|
y: 310,
|
|
width: 40,
|
|
height: 28,
|
|
backgroundColor: { red: 0, green: 0, blue: 0},
|
|
color: { red: 255, green: 255, blue: 0},
|
|
font: {size: 15},
|
|
topMargin: 8,
|
|
visible: false,
|
|
text: " Stop"
|
|
});
|
|
|
|
// Set up increaseVolumeButton overlay.
|
|
var toggleIncreaseVolumeButton = Overlays.addOverlay("text", {
|
|
x: 211,
|
|
y: 310,
|
|
width: 18,
|
|
height: 28,
|
|
backgroundColor: { red: 0, green: 0, blue: 0},
|
|
color: { red: 255, green: 255, blue: 0},
|
|
font: {size: 15},
|
|
topMargin: 8,
|
|
visible: false,
|
|
text: " +"
|
|
});
|
|
|
|
// Set up decreaseVolumeButton overlay.
|
|
var toggleDecreaseVolumeButton = Overlays.addOverlay("text", {
|
|
x: 234,
|
|
y: 310,
|
|
width: 15,
|
|
height: 28,
|
|
backgroundColor: { red: 0, green: 0, blue: 0},
|
|
color: { red: 255, green: 255, blue: 0},
|
|
font: {size: 15},
|
|
topMargin: 8,
|
|
visible: false,
|
|
text: " -"
|
|
});
|
|
|
|
// Function to change JSON object stream.
|
|
function changeStream(stream) {
|
|
var streamJSON = {
|
|
action: "changeStream",
|
|
stream: stream
|
|
}
|
|
streamWindow.eventBridge.emitScriptEvent(JSON.stringify(streamJSON));
|
|
}
|
|
|
|
// Function to change JSON object volume.
|
|
function changeVolume(volume) {
|
|
var volumeJSON = {
|
|
action: "changeVolume",
|
|
volume: volume
|
|
}
|
|
streamWindow.eventBridge.emitScriptEvent(JSON.stringify(volumeJSON));
|
|
}
|
|
|
|
// Function that adds mousePressEvent functionality to connect UI to enter stream URL, play and stop stream.
|
|
function mousePressEvent(event) {
|
|
if (Overlays.getOverlayAtPoint({x: event.x, y: event.y}) == toggleStreamPlayButton) {
|
|
changeStream(stream);
|
|
volume = 0.25;
|
|
changeVolume(volume);
|
|
}
|
|
if (Overlays.getOverlayAtPoint({x: event.x, y: event.y}) == toggleStreamStopButton) {
|
|
changeStream("");
|
|
}
|
|
if (Overlays.getOverlayAtPoint({x: event.x, y: event.y}) == toggleIncreaseVolumeButton) {
|
|
volume += 0.25;
|
|
changeVolume(volume);
|
|
}
|
|
if (Overlays.getOverlayAtPoint({x: event.x, y: event.y}) == toggleDecreaseVolumeButton) {
|
|
volume -= 0.25;
|
|
changeVolume(volume);
|
|
}
|
|
}
|
|
|
|
// Function checking bool if in proper zone.
|
|
function isOurZone(properties) {
|
|
return properties.type == "Zone" && properties.name == "Zone2";
|
|
}
|
|
|
|
// Function checking if avatar is in zone.
|
|
function isInZone() {
|
|
var entities = Entities.findEntities(MyAvatar.position, 10000);
|
|
|
|
for (var i in entities) {
|
|
var properties = Entities.getEntityProperties(entities[i]);
|
|
|
|
if (isOurZone(properties)) {
|
|
var minX = properties.position.x - (properties.dimensions.x / 2);
|
|
var maxX = properties.position.x + (properties.dimensions.x / 2);
|
|
var minY = properties.position.y - (properties.dimensions.y / 2);
|
|
var maxY = properties.position.y + (properties.dimensions.y / 2);
|
|
var minZ = properties.position.z - (properties.dimensions.z / 2);
|
|
var maxZ = properties.position.z + (properties.dimensions.z / 2);
|
|
|
|
if (MyAvatar.position.x >= minX && MyAvatar.position.x <= maxX && MyAvatar.position.y >= minY && MyAvatar.position.y <= maxY && MyAvatar.position.z >= minZ && MyAvatar.position.z <= maxZ) {
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
// Function to toggle visibile the overlay.
|
|
function toggleVisible(newVisibility) {
|
|
if (newVisibility != visible) {
|
|
visible = newVisibility;
|
|
Overlays.editOverlay(toggleStreamPlayButton, {visible: visible});
|
|
Overlays.editOverlay(toggleStreamStopButton, {visible: visible});
|
|
Overlays.editOverlay(toggleIncreaseVolumeButton, {visible: visible});
|
|
Overlays.editOverlay(toggleDecreaseVolumeButton, {visible: visible});
|
|
}
|
|
}
|
|
|
|
// Function to check if avatar is in proper domain.
|
|
Window.domainChanged.connect(function() {
|
|
if (Window.location.hostname != "Music" && Window.location.hostname != "LiveMusic") {
|
|
Script.stop();
|
|
}
|
|
});
|
|
|
|
// Function to check if avatar is within zone.
|
|
Entities.enterEntity.connect(function(entityID) {
|
|
print("Entered..." + JSON.stringify(entityID));
|
|
var properties = Entities.getEntityProperties(entityID);
|
|
if (isOurZone(properties)) {
|
|
print("Entering Zone!");
|
|
toggleVisible(true);
|
|
}
|
|
})
|
|
|
|
// Function to check if avatar is leaving zone.
|
|
Entities.leaveEntity.connect(function(entityID) {
|
|
print("Left..." + JSON.stringify(entityID));
|
|
var properties = Entities.getEntityProperties(entityID);
|
|
if (isOurZone(properties)) {
|
|
print("Leaving Zone!");
|
|
toggleVisible(false);
|
|
changeStream("");
|
|
}
|
|
})
|
|
|
|
// Function to delete overlays upon exit.
|
|
function onScriptEnding() {
|
|
Overlays.deleteOverlay(toggleStreamPlayButton);
|
|
Overlays.deleteOverlay(toggleStreamStopButton);
|
|
Overlays.deleteOverlay(toggleIncreaseVolumeButton);
|
|
Overlays.deleteOverlay(toggleDecreaseVolumeButton);
|
|
changeStream("");
|
|
streamWindow.deleteLater();
|
|
}
|
|
|
|
// Function call to ensure that if you log in to the zone visibility is true.
|
|
if (isInZone()) {
|
|
toggleVisible(true);
|
|
}
|
|
|
|
// Connect mouse and hide WebWindow.
|
|
Controller.mousePressEvent.connect(mousePressEvent);
|
|
streamWindow.setVisible(false);
|
|
|
|
// Call function upon ending script.
|
|
Script.scriptEnding.connect(onScriptEnding); |