From b9cfbfb3beae4d3ed0070d91e1bdac10c540a832 Mon Sep 17 00:00:00 2001 From: Dante Ruiz Date: Fri, 3 Aug 2018 09:59:21 -0700 Subject: [PATCH] adding interstitial page file to default sctipts --- interface/src/Application.cpp | 4 +- libraries/audio-client/src/AudioClient.cpp | 2 +- scripts/defaultScripts.js | 3 +- scripts/system/interstitialPage.js | 414 +++++++++++++++++++++ 4 files changed, 419 insertions(+), 4 deletions(-) create mode 100644 scripts/system/interstitialPage.js diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index bbce49b941..bbe107e69e 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -3713,7 +3713,7 @@ void Application::keyPressEvent(QKeyEvent* event) { _controllerScriptingInterface->emitKeyPressEvent(event); // send events to any registered scripts // if one of our scripts have asked to capture this event, then stop processing it - if (_controllerScriptingInterface->isKeyCaptured(event)) { + if (_controllerScriptingInterface->isKeyCaptured(event) || isInterstitialMode()) { return; } @@ -5603,7 +5603,7 @@ void Application::update(float deltaTime) { // Transfer the user inputs to the driveKeys // FIXME can we drop drive keys and just have the avatar read the action states directly? myAvatar->clearDriveKeys(); - if (_myCamera.getMode() != CAMERA_MODE_INDEPENDENT) { + if (_myCamera.getMode() != CAMERA_MODE_INDEPENDENT && !isInterstitialMode()) { if (!_controllerScriptingInterface->areActionsCaptured() && _myCamera.getMode() != CAMERA_MODE_MIRROR) { myAvatar->setDriveKey(MyAvatar::TRANSLATE_Z, -1.0f * userInputMapper->getActionState(controller::Action::TRANSLATE_Z)); myAvatar->setDriveKey(MyAvatar::TRANSLATE_Y, userInputMapper->getActionState(controller::Action::TRANSLATE_Y)); diff --git a/libraries/audio-client/src/AudioClient.cpp b/libraries/audio-client/src/AudioClient.cpp index a1487fa3ec..380d978fb1 100644 --- a/libraries/audio-client/src/AudioClient.cpp +++ b/libraries/audio-client/src/AudioClient.cpp @@ -2017,7 +2017,7 @@ void AudioClient::loadSettings() { _receivedAudioStream.setDynamicJitterBufferEnabled(dynamicJitterBufferEnabled.get()); _receivedAudioStream.setStaticJitterBufferFrames(staticJitterBufferFrames.get()); - + qCDebug(audioclient) << "---- Initializing Audio Client ----"; auto codecPlugins = PluginManager::getInstance()->getCodecPlugins(); for (auto& plugin : codecPlugins) { qCDebug(audioclient) << "Codec available:" << plugin->getName(); diff --git a/scripts/defaultScripts.js b/scripts/defaultScripts.js index b275660c0f..662120be34 100644 --- a/scripts/defaultScripts.js +++ b/scripts/defaultScripts.js @@ -31,7 +31,8 @@ var DEFAULT_SCRIPTS_COMBINED = [ "system/dialTone.js", "system/firstPersonHMD.js", "system/tablet-ui/tabletUI.js", - "system/emote.js" + "system/emote.js", + "system/interstitialpage" ]; var DEFAULT_SCRIPTS_SEPARATE = [ "system/controllers/controllerScripts.js", diff --git a/scripts/system/interstitialPage.js b/scripts/system/interstitialPage.js new file mode 100644 index 0000000000..af80e94605 --- /dev/null +++ b/scripts/system/interstitialPage.js @@ -0,0 +1,414 @@ +// +// interstitialPage.js +// scripts/system +// +// Created by Dante Ruiz on 08/02/2018. +// Copyright 2012 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 +// + +/* global Script, Controller, Overlays, Quat, MyAvatar, Entities, print, Vec3, AddressManager, Render, Window, Toolbars, + Camera, HMD*/ + +(function() { + var MAX_X_SIZE = 3; + var isVisible = true; + var defaultOffset = 1.5; + var hifi = "HighFidelity"; + var VOLUME = 0.4; + var tune = SoundCache.getSound("http://hifi-content.s3.amazonaws.com/alexia/LoadingScreens/crystals_and_voices.wav"); + var sample = null; + var MAX_LEFT_MARGIN = 1.9; + var INNER_CIRCLE_WIDTH = 4.7; + var DESTINATION_CARD_Y_OFFSET = 2; + var DEFAULT_TONE_MAPPING_EXPOSURE = 0.0; + var MIN_TONE_MAPPING_EXPOSURE = -5.0; + var SYSTEM_TOOL_BAR = "com.highfidelity.interface.toolbar.system"; + var MAX_ELAPSED_TIME = 5 * 1000; // time in ms + function isInFirstPerson() { + return (Camera.mode === "first person"); + } + + var toolbar = Toolbars.getToolbar(SYSTEM_TOOL_BAR); + var renderViewTask = Render.getConfig("RenderMainView"); + + var domainHostnameMap = { + eschatology: "Seth Alves", + blue: "Sam Cake", + thepines: "Roxie", + "dev-mobile": "HighFidelity", + "dev-mobile-master": "HighFidelity", + portalarium: "Bijou", + porange: "Caitlyn", + rust: hifi, + start: hifi, + miimusic: "Madysyn", + codex: "FluffyJenkins", + zaru: hifi, + help: hifi, + therealoasis: "Caitlyn", + vrmacy: "budgiebeats", + niccage: "OneLisa", + impromedia: "GeorgeDeac", + nest: "budgiebeats", + gabworld: "LeeGab", + vrtv: "GeoorgeDeac", + burrow: "budgiebeats", + leftcoast: "Lurks", + lazybones: "LazybonesJurassic", + skyriver: "Chamberlain", + chapel: "www.livin.today", + "hi-studio": hifi, + luskan: "jyoum", + arcadiabay: "Aitolda", + chime: hifi, + standupnow: "diva", + avreng: "GeorgeDeac", + atlas: "rocklin_guy", + steamedhams: "Alan_", + banff: hifi, + operahouse: hifi, + bankofhighfidelity: hifi, + tutorial: "WadeWatts", + nightsky: hifi, + garageband: hifi, + painting: hifi, + windwaker: "bijou", + fumbleland: "Lpasca", + monolith: "Nik", + bijou: "bijou", + morty: "bijou", + "hifiqa-rc-bots": hifi, + fightnight: hifi, + spirited: "Alan_", + "desert-oasis": "ryan", + springfield: "Alan_", + hall: "ryan", + "national-park": "ryan", + vector: "Nik", + bodymart: hifi, + "medievil-village": "ryan", + "villains-lair": "ryan", + "island-breeze": "ryan", + "classy-apartment": "ryan", + voxel: "FlameSoulis", + virtuoso: "noahglaseruc", + avatarisland: hifi, + ioab: "rocklin_guy", + tamait: "rocklin_guy", + konshulabs: "Konshu", + epic: "philip", + poopsburg: "Caitlyn", + east: hifi, + glitched: hifi, + calartsim: hifi, + calarts: hifi, + livin: "rocklin_guy", + fightclub: "philip", + thefactory: "whyroc", + wothal: "Alezia.Kurdis", + udacity: hifi, + json: "WadeWatts", + anonymous: "darlingnotin", + maker: hifi, + elisa: "elisahifi", + volxeltopia: hifi, + cupcake: hifi, + minigolf: hifi, + workshop: hifi, + vankh: "Alezia.Kurdis", + "the-crash-site": "WolfGang", + jjv360: "jjv3600", + distributed2: hifi, + anny: hifi, + university: hifi, + ludus: hifi, + stepford: "darlingnotin", + thespot: hifi + }; + + // Tips have a character limit of 69 + var userTips = [ + "Tip: Visit TheSpot to explore featured domains!", + "Tip: Visit our docs online to learn more about scripting!", + "Tip: Don't want others invading your personal space? Turn on the Bubble!", + "Tip: Want to make a friend? Shake hands with them in VR!", + "Tip: Enjoy live music? Visit Rust to dance your heart out!", + "Tip: Have you visited BodyMart to check out the new avatars recently?", + "Tip: Use the Create app to import models and create custom entities.", + "Tip: We're open source! Feel free to contribute to our code on GitHub!", + "Tip: What emotes have you used in the Emote app?", + "Tip: Take and share your snapshots with the everyone using the Snap app.", + "Tip: Did you know you can show websites in-world by creating a web entity?", + "Tip: Find out more information about domains by visiting our website!", + "Tip: Did you know you can get cool new apps from the Marketplace?", + "Tip: Print your snapshots from the Snap app to share with others!", + "Tip: Log in to make friends, visit new domains, and save avatars!" + ]; + + var loadingSphereID = Overlays.addOverlay("model", { + name: "Loading-Sphere", + position: Vec3.sum(Vec3.sum(MyAvatar.position, {x: 0.0, y: -1.0, z: 0.0}), Vec3.multiplyQbyV(MyAvatar.orientation, {x: 0, y: 0.95, z: 0})), + orientation: Quat.multiply(Quat.fromVec3Degrees({x: 0, y: 180, z: 0}), MyAvatar.orientation), + url: "http://hifi-content.s3.amazonaws.com/alexia/LoadingScreens/black-sphere.fbx", + dimensions: { x: 20, y: 20, z: 20 }, + alpha: 1, + visible: isVisible, + ignoreRayIntersection: true, + drawInFront: true, + grabbable: false + }); + + + var domainName = ""; + var domainNameTextID = Overlays.addOverlay("text3d", { + name: "Loading-Destination-Card-Text", + localPosition: { x: 0.0, y: DESTINATION_CARD_Y_OFFSET + 0.8, z: 5.45 }, + text: domainName, + textAlpha: 1, + backgroundAlpha: 0, + lineHeight: 0.42, + visible: isVisible, + ignoreRayIntersection: true, + drawInFront: true, + grabbable: false, + localOrientation: Quat.fromVec3Degrees({ x: 0, y: 180, z: 0 }), + parentID: loadingSphereID + }); + + var hostName = ""; + + var domainHostname = Overlays.addOverlay("text3d", { + name: "Loading-Hostname", + localPosition: { x: 0.0, y: DESTINATION_CARD_Y_OFFSET + 0.32, z: 5.45 }, + text: hostName, + textAlpha: 1, + backgroundAlpha: 0, + lineHeight: 0.13, + visible: isVisible, + ignoreRayIntersection: true, + drawInFront: true, + grabbable: false, + localOrientation: Quat.fromVec3Degrees({ x: 0, y: 180, z: 0 }), + parentID: loadingSphereID + }); + + var toolTip = ""; + + var domainToolTip = Overlays.addOverlay("text3d", { + name: "Loading-Tooltip", + localPosition: { x: 0.0 , y: DESTINATION_CARD_Y_OFFSET - 1.6, z: 5.45 }, + text: toolTip, + textAlpha: 1, + backgroundAlpha: 0, + lineHeight: 0.13, + visible: isVisible, + ignoreRayIntersection: true, + drawInFront: true, + grabbable: false, + localOrientation: Quat.fromVec3Degrees({ x: 0, y: 180, z: 0 }), + parentID: loadingSphereID + }); + + var loadingToTheSpotID = Overlays.addOverlay("image3d", { + name: "Loading-Destination-Card-Text", + localPosition: { x: 0.0 , y: DESTINATION_CARD_Y_OFFSET - 1.8, z: 5.45 }, + url: "http://hifi-content.s3.amazonaws.com/alexia/LoadingScreens/goTo_button.png", + alpha: 1, + dimensions: { x: 1.2, y: 0.6}, + visible: isVisible, + emissive: true, + ignoreRayIntersection: false, + drawInFront: true, + grabbable: false, + localOrientation: Quat.fromVec3Degrees({ x: 0.0, y: 180.0, z: 0.0 }), + parentID: loadingSphereID + }); + + var loadingBarPlacard = Overlays.addOverlay("image3d", { + name: "Loading-Bar-Placard", + localPosition: { x: 0.0 , y: DESTINATION_CARD_Y_OFFSET - 0.99, z: 5.45 }, + url: "http://hifi-content.s3.amazonaws.com/alexia/LoadingScreens/loadingBar_placard.png", + alpha: 1, + dimensions: { x: 4, y: 2.8}, + visible: isVisible, + emissive: true, + ignoreRayIntersection: false, + drawInFront: true, + grabbable: false, + localOrientation: Quat.fromVec3Degrees({ x: 0.0, y: 180.0, z: 0.0 }), + parentID: loadingSphereID + }); + + var loadingBarProgress = Overlays.addOverlay("image3d", { + name: "Loading-Bar-Progress", + localPosition: { x: 0.0 , y: DESTINATION_CARD_Y_OFFSET - 0.99, z: 5.45 }, + url: "http://hifi-content.s3.amazonaws.com/alexia/LoadingScreens/loadingBar_progress.png", + alpha: 1, + dimensions: { x: 4, y: 2.8}, + visible: isVisible, + emissive: true, + ignoreRayIntersection: false, + drawInFront: true, + grabbable: false, + localOrientation: Quat.fromVec3Degrees({ x: 0.0, y: 180.0, z: 0.0 }), + parentID: loadingSphereID + }); + + var TARGET_UPDATE_HZ = 60; // 50hz good enough, but we're using update + var BASIC_TIMER_INTERVAL_MS = 1000 / TARGET_UPDATE_HZ; + var timerset = false; + var lastInterval = Date.now(); + var timeElapsed = 0; + + + function getLeftMargin(overlayID, text) { + var textSize = Overlays.textSize(overlayID, text); + var sizeDifference = ((INNER_CIRCLE_WIDTH - textSize.width) / 2); + var leftMargin = -(MAX_LEFT_MARGIN - sizeDifference); + return leftMargin; + } + + + function domainChanged(domain) { + var name = AddressManager.placename; + domainName = name.charAt(0).toUpperCase() + name.slice(1); + var domainNameLeftMargin = getLeftMargin(domainNameTextID, domainName); + var textProperties = { + text: domainName, + leftMargin: domainNameLeftMargin + }; + + var BY = "by "; + var host = domainHostnameMap[location.placename]; + var text = BY + host; + var hostLeftMargin = getLeftMargin(domainHostname, text); + var hostnameProperties = { + text: BY + host, + leftMargin: hostLeftMargin + }; + + var randomIndex = Math.floor(Math.random() * userTips.length); + var tip = userTips[randomIndex]; + var tipLeftMargin = getLeftMargin(domainToolTip, tip); + var toolTipProperties = { + text: tip, + leftMargin: tipLeftMargin + }; + + var myAvatarDirection = Vec3.UNIT_NEG_Z; + var cardDirectionPrime = {x: 0 , y: 0, z: 5.5}; + var rotationDelta = Quat.rotationBetween(cardDirectionPrime, myAvatarDirection); + var overlayRotation = Quat.multiply(MyAvatar.orientation, rotationDelta); + var mainSphereProperties = { + orientation: overlayRotation + }; + + Overlays.editOverlay(loadingSphereID, mainSphereProperties); + Overlays.editOverlay(domainNameTextID, textProperties); + Overlays.editOverlay(domainHostname, hostnameProperties); + Overlays.editOverlay(domainToolTip, toolTipProperties); + } + + var THE_PLACE = "hifi://TheSpot"; + function clickedOnOverlay(overlayID, event) { + print(overlayID + " other: " + loadingToTheSpotID); + print(event.button === "Primary"); + if (loadingToTheSpotID === overlayID) { + if (timerset) { + timeElapsed = 0; + } + AddressManager.handleLookupString(THE_PLACE); + } + } + var previousCameraMode = Camera.mode; + var previousPhysicsStatus = 99999; + + function updateOverlays(physicsEnabled) { + var properties = { + visible: !physicsEnabled + }; + + var myAvatarDirection = Vec3.UNIT_NEG_Z; + var cardDirectionPrime = {x: 0 , y: 0, z: 5.5}; + var rotationDelta = Quat.rotationBetween(cardDirectionPrime, myAvatarDirection); + var overlayRotation = Quat.multiply(MyAvatar.orientation, rotationDelta); + var mainSphereProperties = { + visible: !physicsEnabled, + orientation: overlayRotation + }; + + if (!HMD.active) { + toolbar.writeProperty("visible", physicsEnabled); + MyAvatar.headOrientation = Quat.multiply(Quat.cancelOutRollAndPitch(MyAvatar.headOrientation), Quat.fromPitchYawRollDegrees(2.5, 0, 0)); + } + + renderViewTask.getConfig("LightingModel")["enableAmbientLight"] = physicsEnabled; + renderViewTask.getConfig("LightingModel")["enableDirectionalLight"] = physicsEnabled; + renderViewTask.getConfig("LightingModel")["enablePointLight"] = physicsEnabled; + Overlays.editOverlay(loadingSphereID, mainSphereProperties); + Overlays.editOverlay(loadingToTheSpotID, properties); + Overlays.editOverlay(domainNameTextID, properties); + Overlays.editOverlay(domainHostname, properties); + Overlays.editOverlay(domainToolTip, properties); + Overlays.editOverlay(loadingBarPlacard, properties); + Overlays.editOverlay(loadingBarProgress, properties); + } + + function update() { + var physicsEnabled = Window.isPhysicsEnabled(); + var thisInterval = Date.now(); + var deltaTime = (thisInterval - lastInterval); + lastInterval = thisInterval; + if (physicsEnabled !== previousPhysicsStatus) { + if (!physicsEnabled && !timerset) { + updateOverlays(physicsEnabled); + sample = Audio.playSound(tune, { + localOnly: true, + position: MyAvatar.headPosition, + volume: VOLUME + }); + timeElapsed = 0; + timerset = true; + } + previousPhysicsStatus = physicsEnabled; + } + + if (timerset) { + timeElapsed += deltaTime; + if (timeElapsed >= MAX_ELAPSED_TIME) { + updateOverlays(true); + sample.stop(); + sample = null; + timerset = false; + } + + } + + Overlays.editOverlay(loadingSphereID, { + position: Vec3.sum(Vec3.sum(MyAvatar.position, {x: 0.0, y: -1.7, z: 0.0}), Vec3.multiplyQbyV(MyAvatar.orientation, {x: 0, y: 0.95, z: 0})) + }); + Script.setTimeout(update, BASIC_TIMER_INTERVAL_MS); + } + + Script.setTimeout(update, BASIC_TIMER_INTERVAL_MS); + Overlays.mouseReleaseOnOverlay.connect(clickedOnOverlay); + Window.domainChanged.connect(domainChanged); + + function cleanup() { + Overlays.deleteOverlay(loadingSphereID); + Overlays.deleteOverlay(loadingToTheSpotID); + Overlays.deleteOverlay(domainNameTextID); + Overlays.deleteOverlay(domainHostname); + Overlays.deleteOverlay(domainToolTip); + Overlays.deleteOverlay(loadingBarPlacard); + Overlays.deleteOverlay(loadingBarProgress); + try { + } catch (e) { + } + } + + Script.scriptEnding.connect(cleanup); +}());