overte/unpublishedScripts/marketplace/skyboxChanger/skyboxchanger.js
2018-01-19 11:22:37 -07:00

117 lines
No EOL
3.6 KiB
JavaScript

"use strict";
//
// skyboxchanger.js
//
// Created by Cain Kilgore on 9th August 2017
// Copyright 2017 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 TABLET_BUTTON_NAME = "SKYBOX";
var ICONS = {
icon: "http://mpassets.highfidelity.com/05904016-8f7d-4dfc-88e1-2bf9ba3fac20-v1/skyboxedit-i.svg",
activeIcon: "http://mpassets.highfidelity.com/05904016-8f7d-4dfc-88e1-2bf9ba3fac20-v1/skyboxedit-i.svg"
};
var onSkyboxChangerScreen = false;
function onClicked() {
if (onSkyboxChangerScreen) {
tablet.gotoHomeScreen();
} else {
tablet.loadQMLSource("hifi/SkyboxChanger.qml");
}
}
var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system");
var button = tablet.addButton({
icon: ICONS.icon,
activeIcon: ICONS.activeIcon,
text: TABLET_BUTTON_NAME
});
var hasEventBridge = false;
function wireEventBridge(on) {
if (!tablet) {
print("Warning in wireEventBridge(): 'tablet' undefined!");
return;
}
if (on) {
if (!hasEventBridge) {
tablet.fromQml.connect(fromQml);
hasEventBridge = true;
}
} else {
if (hasEventBridge) {
tablet.fromQml.disconnect(fromQml);
hasEventBridge = false;
}
}
}
function onScreenChanged(type, url) {
if (url === "../SkyboxChanger.qml") {
onSkyboxChangerScreen = true;
} else {
onSkyboxChangerScreen = false;
}
button.editProperties({isActive: onSkyboxChangerScreen});
wireEventBridge(onSkyboxChangerScreen);
}
function fromQml(message) {
switch (message.method) {
case 'changeSkybox': // changeSkybox Code
var standingZone;
if (!Entities.canRez()) {
Window.alert("You need to have rez permissions to change the Skybox.");
break;
}
var nearbyEntities = Entities.findEntities(MyAvatar.position, 5);
for (var i = 0; i < nearbyEntities.length; i++) {
if (Entities.getEntityProperties(nearbyEntities[i]).type === "Zone") {
standingZone = nearbyEntities[i];
}
}
if (Entities.getEntityProperties(standingZone).locked) {
Window.alert("This zone is currently locked; the Skybox can't be changed.");
break;
}
var newSkybox = {
skybox: {
url: message.url
},
keyLight: {
ambientURL: message.url
}
};
Entities.editEntity(standingZone, newSkybox);
break;
default:
print('Unrecognized message from QML: ' + JSON.stringify(message));
}
}
button.clicked.connect(onClicked);
tablet.screenChanged.connect(onScreenChanged);
Script.scriptEnding.connect(function () {
if (onSkyboxChangerScreen) {
tablet.gotoHomeScreen();
}
button.clicked.disconnect(onClicked);
tablet.screenChanged.disconnect(onScreenChanged);
tablet.removeButton(button);
});
}());