225 lines · 7.5 KB · JavaScript
RawDownload
"use strict";/* jslint vars: true, plusplus: true */ ////  defaultScripts.js//  examples////  Copyright 2014 High Fidelity, Inc.//  Copyright 2020 Vircadia contributors.//  Copyright 2024 Overte e.V.////  Distributed under the Apache License, Version 2.0.//  See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html// var DEFAULT_SCRIPTS_COMBINED = [    "system/request-service.js",    "system/progress.js",    "system/away.js",    "system/audio.js",    "system/hmd.js",    "system/menu.js",    "system/bubble.js",    "system/snapshot.js",    "system/pal.js", // "system/mod.js", // older UX, if you prefer    "system/avatarapp.js",    "system/settings/settings.js",    "system/makeUserConnection.js",    "system/notifications.js",    "system/create/edit.js",    "system/dialTone.js",    "system/firstPersonHMD.js",    "system/tablet-ui/tabletUI.js",    "system/emote.js",    "system/miniTablet.js",    "system/audioMuteOverlay.js",    "system/inspect.js",    "system/keyboardShortcuts/keyboardShortcuts.js",    "system/onEscape.js",    "system/places/places.js"    //"developer/debugging/scriptMemoryReport.js"];var DEFAULT_SCRIPTS_SEPARATE = [    "system/controllers/controllerScripts.js",    "system/controllers/squeezeHands.js",    "communityScripts/notificationCore/notificationCore.js",    "simplifiedUI/ui/simplifiedNametag/simplifiedNametag.js",    {"stable": "system/more/app-more.js", "beta": "https://more.overte.org/more/app-more.js"},    "communityScripts/armored-chat/armored_chat.js",    "communityScripts/chatBubbles/chatBubbles.js",    "communityScripts/contextMenu.js",    "system/flyCam.js",    //"system/chat.js"]; if (Window.interstitialModeEnabled) {    // Insert interstitial scripts at front so that they're started first.    DEFAULT_SCRIPTS_COMBINED.splice(0, 0, "system/interstitialPage.js", "system/redirectOverlays.js");} // add a menu item for debuggingvar MENU_CATEGORY = "Developer > Scripting";var MENU_ITEM = "Debug defaultScripts.js"; var MENU_BETA_DEFAULT_SCRIPTS_CATEGORY = "Developer > Scripting";var MENU_BETA_DEFAULT_SCRIPTS_ITEM = "Enable Beta Default Scripts"; var SETTINGS_KEY = '_debugDefaultScriptsIsChecked';var SETTINGS_KEY_BETA = '_betaDefaultScriptsIsChecked';var previousSetting = Settings.getValue(SETTINGS_KEY, false);var previousSettingBeta = Settings.getValue(SETTINGS_KEY_BETA, false); if (previousSetting === '' || previousSetting === 'false') {    previousSetting = false;} if (previousSetting === 'true') {    previousSetting = true;} if (previousSettingBeta === '' || previousSettingBeta === 'false') {    previousSettingBeta = false;} if (previousSettingBeta === 'true') {    previousSettingBeta = true;} if (Menu.menuExists(MENU_CATEGORY) && !Menu.menuItemExists(MENU_CATEGORY, MENU_ITEM)) {    Menu.addMenuItem({        menuName: MENU_CATEGORY,        menuItemName: MENU_ITEM,        isCheckable: true,        isChecked: previousSetting    });} if (Menu.menuExists(MENU_BETA_DEFAULT_SCRIPTS_CATEGORY)     && !Menu.menuItemExists(MENU_BETA_DEFAULT_SCRIPTS_CATEGORY, MENU_BETA_DEFAULT_SCRIPTS_ITEM)) {        Menu.addMenuItem({            menuName: MENU_BETA_DEFAULT_SCRIPTS_CATEGORY,            menuItemName: MENU_BETA_DEFAULT_SCRIPTS_ITEM,            isCheckable: true,            isChecked: previousSettingBeta        });} function loadSeparateDefaults() {    var currentlyRunningScripts = ScriptDiscoveryService.getRunning();     for (var i in DEFAULT_SCRIPTS_SEPARATE) {        var shouldLoadCurrentDefaultScript = true;        var scriptItem = DEFAULT_SCRIPTS_SEPARATE[i];        if (typeof scriptItem === "object") {            if (previousSettingBeta) {                console.log("Loading Beta item " + scriptItem.beta);                scriptItem = scriptItem.beta;            } else {                scriptItem = scriptItem.stable;            }        }         for (var j = 0; j < currentlyRunningScripts.length; j++) {            var currentRunningScriptObject = currentlyRunningScripts[j];            var currentDefaultScriptName = scriptItem.substr((scriptItem.lastIndexOf("/") + 1), scriptItem.length);            if (currentDefaultScriptName === currentRunningScriptObject.name) {                if (currentRunningScriptObject.url !== scriptItem) {                    ScriptDiscoveryService.stopScript(currentRunningScriptObject.url);                } else {                    shouldLoadCurrentDefaultScript = false;                }            }        }         if (shouldLoadCurrentDefaultScript) {            Script.load(scriptItem);        }    }} function runDefaultsTogether() {    var currentlyRunningScripts = ScriptDiscoveryService.getRunning();     for (var i = 0; i < DEFAULT_SCRIPTS_COMBINED.length; i++) {        var shouldIncludeCurrentDefaultScript = true;         for (var j = 0; j < currentlyRunningScripts.length; j++) {            var currentRunningScriptObject = currentlyRunningScripts[j];            var currentDefaultScriptName = DEFAULT_SCRIPTS_COMBINED[i].substr((DEFAULT_SCRIPTS_COMBINED[i].lastIndexOf("/") + 1), DEFAULT_SCRIPTS_COMBINED[i].length);            if (currentDefaultScriptName === currentRunningScriptObject.name) {                shouldIncludeCurrentDefaultScript = false;            }        }         if (shouldIncludeCurrentDefaultScript) {            Script.include(DEFAULT_SCRIPTS_COMBINED[i]);        }    }} function runDefaultsSeparately() {    var currentlyRunningScripts = ScriptDiscoveryService.getRunning();     for (var i in DEFAULT_SCRIPTS_COMBINED) {        var shouldLoadCurrentDefaultScript = true;         for (var j = 0; j < currentlyRunningScripts.length; j++) {            var currentRunningScriptObject = currentlyRunningScripts[j];            var currentDefaultScriptName = DEFAULT_SCRIPTS_COMBINED[i].substr((DEFAULT_SCRIPTS_COMBINED[i].lastIndexOf("/") + 1), DEFAULT_SCRIPTS_COMBINED[i].length);            if (currentDefaultScriptName === currentRunningScriptObject.name) {                shouldLoadCurrentDefaultScript = false;            }        }         if (shouldLoadCurrentDefaultScript) {            Script.load(DEFAULT_SCRIPTS_COMBINED[i]);        }    }} // start all scriptsif (Menu.isOptionChecked(MENU_ITEM)) {    // we're debugging individual default scripts    // so we load each into its own ScriptEngine instance    runDefaultsSeparately();} else {    // include all default scripts into this ScriptEngine    runDefaultsTogether();}loadSeparateDefaults(); function menuItemEvent(menuItem) {    if (menuItem === MENU_ITEM) {        var isChecked = Menu.isOptionChecked(MENU_ITEM);        if (isChecked) {            Settings.setValue(SETTINGS_KEY, true);        } else {            Settings.setValue(SETTINGS_KEY, false);        }        Menu.triggerOption("Reload All Scripts");    }     if (menuItem === MENU_BETA_DEFAULT_SCRIPTS_ITEM) {        var isChecked = Menu.isOptionChecked(MENU_BETA_DEFAULT_SCRIPTS_ITEM);        if (isChecked) {            Settings.setValue(SETTINGS_KEY_BETA, true);        } else {            Settings.setValue(SETTINGS_KEY_BETA, false);        }    }} function removeMenuItems() {    if (!Menu.isOptionChecked(MENU_ITEM)) {        Menu.removeMenuItem(MENU_CATEGORY, MENU_ITEM);    }    if (!Menu.isOptionChecked(MENU_BETA_DEFAULT_SCRIPTS_ITEM)) {        Menu.removeMenuItem(MENU_BETA_DEFAULT_SCRIPTS_CATEGORY, MENU_BETA_DEFAULT_SCRIPTS_ITEM);    }} Script.scriptEnding.connect(function () {    removeMenuItems();}); Menu.menuItemEvent.connect(menuItemEvent);