From 0b7d6cb7203a60e7f4b31154b4de8db01c498028 Mon Sep 17 00:00:00 2001 From: Dante Ruiz Date: Tue, 31 Jul 2018 14:10:19 -0700 Subject: [PATCH 001/123] start interstitial page work --- interface/src/Application.cpp | 12 ++++++++++++ interface/src/Application.h | 3 +++ libraries/audio-client/src/AudioClient.cpp | 8 ++++---- 3 files changed, 19 insertions(+), 4 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 136e44855a..b638c51342 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -3412,6 +3412,16 @@ bool Application::isServerlessMode() const { return false; } +bool Application::isInterstitialPage() { + return _interstitialMode; +} + +void Application::setInterstitialMode(bool interstitialMode) { + if (_interstitialMode != interstitialMode) { + _interstitialMode = interstitialMode; + } +} + void Application::setIsServerlessMode(bool serverlessDomain) { auto tree = getEntities()->getTree(); if (tree) { @@ -5471,6 +5481,8 @@ static bool domainLoadingInProgress = false; void Application::update(float deltaTime) { PROFILE_RANGE_EX(app, __FUNCTION__, 0xffff0000, (uint64_t)_renderFrameCount + 1); + auto audioClient = DependencyManager::get(); + audioClient->setMuted(true); if (!_physicsEnabled) { if (!domainLoadingInProgress) { PROFILE_ASYNC_BEGIN(app, "Scene Loading", ""); diff --git a/interface/src/Application.h b/interface/src/Application.h index 94e561e550..c084c0033f 100644 --- a/interface/src/Application.h +++ b/interface/src/Application.h @@ -304,6 +304,7 @@ public: void saveNextPhysicsStats(QString filename); bool isServerlessMode() const; + bool isInterstitialMode() const; void replaceDomainContent(const QString& url); @@ -423,6 +424,7 @@ public slots: void setPreferredCursor(const QString& cursor); void setIsServerlessMode(bool serverlessDomain); + void setIsInterstitialMode(bool interstialMode); void loadServerlessDomain(QUrl domainURL); void updateVerboseLogging(); @@ -624,6 +626,7 @@ private: QSet _keysPressed; bool _enableProcessOctreeThread; + bool _interstitialMode { true }; OctreePacketProcessor _octreeProcessor; EntityEditPacketSender _entityEditSender; diff --git a/libraries/audio-client/src/AudioClient.cpp b/libraries/audio-client/src/AudioClient.cpp index c57360b09f..0eadcc5b66 100644 --- a/libraries/audio-client/src/AudioClient.cpp +++ b/libraries/audio-client/src/AudioClient.cpp @@ -668,7 +668,7 @@ void AudioClient::stop() { void AudioClient::handleAudioEnvironmentDataPacket(QSharedPointer message) { - char bitset; + /*char bitset; message->readPrimitive(&bitset); bool hasReverb = oneAtBit(bitset, HAS_REVERB_BIT); @@ -680,11 +680,11 @@ void AudioClient::handleAudioEnvironmentDataPacket(QSharedPointer message) { - + /* if (message->getType() == PacketType::SilentAudioFrame) { _silentInbound.increment(); } else { @@ -709,7 +709,7 @@ void AudioClient::handleAudioDataPacket(QSharedPointer message) // Audio output must exist and be correctly set up if we're going to process received audio _receivedAudioStream.parseData(*message); #endif - } +}*/ } AudioClient::Gate::Gate(AudioClient* audioClient) : From 048196ec6fb2d56b319509c6dd2c2959e82a9135 Mon Sep 17 00:00:00 2001 From: Dante Ruiz Date: Thu, 2 Aug 2018 11:39:06 -0700 Subject: [PATCH 002/123] disble sending avatar and audio packets during interstitial mode --- interface/src/Application.cpp | 61 ++++++--- interface/src/Application.h | 1 + interface/src/avatar/AvatarManager.cpp | 6 +- interface/src/avatar/MyAvatar.cpp | 1 + libraries/audio-client/src/AudioClient.cpp | 152 ++++++++++----------- libraries/audio-client/src/AudioClient.h | 2 + 6 files changed, 125 insertions(+), 98 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index b638c51342..bbce49b941 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -1372,6 +1372,7 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo }); connect(this, &Application::activeDisplayPluginChanged, reinterpret_cast(audioScriptingInterface.data()), &scripting::Audio::onContextChanged); + connect(this, &Application::interstitialModeChanged, audioIO.data(), &AudioClient::setInterstitialStatus); } // Create the rendering engine. This can be slow on some machines due to lots of @@ -2252,6 +2253,25 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo // Preload Tablet sounds DependencyManager::get()->preloadSounds(); + connect(this, &Application::interstitialModeChanged, this, [this] (bool interstitialMode) { + if (!interstitialMode) { + DependencyManager::get()->negotiateAudioFormat(); + _queryExpiry = SteadyClock::now(); + if (_avatarOverrideUrl.isValid()) { + getMyAvatar()->useFullAvatarURL(_avatarOverrideUrl); + } + static const QUrl empty{}; + if (getMyAvatar()->getFullAvatarURLFromPreferences() != getMyAvatar()->cannonicalSkeletonModelURL(empty)) { + getMyAvatar()->resetFullAvatarURL(); + } + getMyAvatar()->markIdentityDataChanged(); + getMyAvatar()->resetLastSent(); + + // transmit a "sendAll" packet to the AvatarMixer we just connected to. + getMyAvatar()->sendAvatarDataPacket(true); + } + }); + _pendingIdleEvent = false; _pendingRenderEvent = false; @@ -3412,13 +3432,14 @@ bool Application::isServerlessMode() const { return false; } -bool Application::isInterstitialPage() { +bool Application::isInterstitialMode() const { return _interstitialMode; } -void Application::setInterstitialMode(bool interstitialMode) { +void Application::setIsInterstitialMode(bool interstitialMode) { if (_interstitialMode != interstitialMode) { _interstitialMode = interstitialMode; + emit interstitialModeChanged(_interstitialMode); } } @@ -5481,8 +5502,6 @@ static bool domainLoadingInProgress = false; void Application::update(float deltaTime) { PROFILE_RANGE_EX(app, __FUNCTION__, 0xffff0000, (uint64_t)_renderFrameCount + 1); - auto audioClient = DependencyManager::get(); - audioClient->setMuted(true); if (!_physicsEnabled) { if (!domainLoadingInProgress) { PROFILE_ASYNC_BEGIN(app, "Scene Loading", ""); @@ -5504,6 +5523,7 @@ void Application::update(float deltaTime) { // scene is ready to compute its collision shape. if (nearbyEntitiesAreReadyForPhysics() && getMyAvatar()->isReadyForPhysics()) { _physicsEnabled = true; + setIsInterstitialMode(false); getMyAvatar()->updateMotionBehaviorFromMenu(); } } @@ -5909,7 +5929,7 @@ void Application::update(float deltaTime) { // send packet containing downstream audio stats to the AudioMixer { quint64 sinceLastNack = now - _lastSendDownstreamAudioStats; - if (sinceLastNack > TOO_LONG_SINCE_LAST_SEND_DOWNSTREAM_AUDIO_STATS) { + if (sinceLastNack > TOO_LONG_SINCE_LAST_SEND_DOWNSTREAM_AUDIO_STATS && !isInterstitialMode()) { _lastSendDownstreamAudioStats = now; QMetaObject::invokeMethod(DependencyManager::get().data(), "sendDownstreamAudioStatsPacket", Qt::QueuedConnection); @@ -6072,21 +6092,23 @@ void Application::updateRenderArgs(float deltaTime) { } void Application::queryAvatars() { - auto avatarPacket = NLPacket::create(PacketType::AvatarQuery); - auto destinationBuffer = reinterpret_cast(avatarPacket->getPayload()); - unsigned char* bufferStart = destinationBuffer; + if (!isInterstitialMode()) { + auto avatarPacket = NLPacket::create(PacketType::AvatarQuery); + auto destinationBuffer = reinterpret_cast(avatarPacket->getPayload()); + unsigned char* bufferStart = destinationBuffer; - uint8_t numFrustums = (uint8_t)_conicalViews.size(); - memcpy(destinationBuffer, &numFrustums, sizeof(numFrustums)); - destinationBuffer += sizeof(numFrustums); + uint8_t numFrustums = (uint8_t)_conicalViews.size(); + memcpy(destinationBuffer, &numFrustums, sizeof(numFrustums)); + destinationBuffer += sizeof(numFrustums); - for (const auto& view : _conicalViews) { - destinationBuffer += view.serialize(destinationBuffer); + for (const auto& view : _conicalViews) { + destinationBuffer += view.serialize(destinationBuffer); + } + + avatarPacket->setPayloadSize(destinationBuffer - bufferStart); + + DependencyManager::get()->broadcastToNodes(std::move(avatarPacket), NodeSet() << NodeType::AvatarMixer); } - - avatarPacket->setPayloadSize(destinationBuffer - bufferStart); - - DependencyManager::get()->broadcastToNodes(std::move(avatarPacket), NodeSet() << NodeType::AvatarMixer); } @@ -6293,6 +6315,7 @@ void Application::clearDomainOctreeDetails() { qCDebug(interfaceapp) << "Clearing domain octree details..."; resetPhysicsReadyInformation(); + setIsInterstitialMode(true); _octreeServerSceneStats.withWriteLock([&] { _octreeServerSceneStats.clear(); @@ -6367,11 +6390,11 @@ void Application::nodeActivated(SharedNodePointer node) { _octreeQuery.incrementConnectionID(); } - if (node->getType() == NodeType::AudioMixer) { + if (node->getType() == NodeType::AudioMixer && !isInterstitialMode()) { DependencyManager::get()->negotiateAudioFormat(); } - if (node->getType() == NodeType::AvatarMixer) { + if (node->getType() == NodeType::AvatarMixer && !isInterstitialMode()) { _queryExpiry = SteadyClock::now(); // new avatar mixer, send off our identity packet on next update loop diff --git a/interface/src/Application.h b/interface/src/Application.h index c084c0033f..6bdfef78e1 100644 --- a/interface/src/Application.h +++ b/interface/src/Application.h @@ -328,6 +328,7 @@ signals: void activeDisplayPluginChanged(); void uploadRequest(QString path); + void interstitialModeChanged(bool interstitialMode); public slots: QVector pasteEntities(float x, float y, float z); diff --git a/interface/src/avatar/AvatarManager.cpp b/interface/src/avatar/AvatarManager.cpp index fab512f787..0fcc253f53 100644 --- a/interface/src/avatar/AvatarManager.cpp +++ b/interface/src/avatar/AvatarManager.cpp @@ -121,7 +121,7 @@ void AvatarManager::updateMyAvatar(float deltaTime) { quint64 now = usecTimestampNow(); quint64 dt = now - _lastSendAvatarDataTime; - if (dt > MIN_TIME_BETWEEN_MY_AVATAR_DATA_SENDS) { + if (dt > MIN_TIME_BETWEEN_MY_AVATAR_DATA_SENDS && !qApp->isInterstitialMode()) { // send head/hand data to the avatar mixer and voxel server PerformanceTimer perfTimer("send"); _myAvatar->sendAvatarDataPacket(); @@ -755,13 +755,13 @@ void AvatarManager::setAvatarSortCoefficient(const QString& name, const QScriptV QString currentSessionUUID = avatar->getSessionUUID().toString(); if (specificAvatarIdentifiers.isEmpty() || specificAvatarIdentifiers.contains(currentSessionUUID)) { QJsonObject thisAvatarPalData; - + auto myAvatar = DependencyManager::get()->getMyAvatar(); if (currentSessionUUID == myAvatar->getSessionUUID().toString()) { currentSessionUUID = ""; } - + thisAvatarPalData.insert("sessionUUID", currentSessionUUID); thisAvatarPalData.insert("sessionDisplayName", avatar->getSessionDisplayName()); thisAvatarPalData.insert("audioLoudness", avatar->getAudioLoudness()); diff --git a/interface/src/avatar/MyAvatar.cpp b/interface/src/avatar/MyAvatar.cpp index 98fbd8fea2..ec5ca903a0 100755 --- a/interface/src/avatar/MyAvatar.cpp +++ b/interface/src/avatar/MyAvatar.cpp @@ -2212,6 +2212,7 @@ void MyAvatar::setHasScriptedBlendshapes(bool hasScriptedBlendshapes) { // send a forced avatarData update to make sure the script can send neutal blendshapes on unload // without having to wait for the update loop, make sure _hasScriptedBlendShapes is still true // before sending the update, or else it won't send the neutal blendshapes to the receiving clients + sendAvatarDataPacket(true); } _hasScriptedBlendShapes = hasScriptedBlendshapes; diff --git a/libraries/audio-client/src/AudioClient.cpp b/libraries/audio-client/src/AudioClient.cpp index 0eadcc5b66..a1487fa3ec 100644 --- a/libraries/audio-client/src/AudioClient.cpp +++ b/libraries/audio-client/src/AudioClient.cpp @@ -667,8 +667,7 @@ void AudioClient::stop() { } void AudioClient::handleAudioEnvironmentDataPacket(QSharedPointer message) { - - /*char bitset; + char bitset; message->readPrimitive(&bitset); bool hasReverb = oneAtBit(bitset, HAS_REVERB_BIT); @@ -680,11 +679,10 @@ void AudioClient::handleAudioEnvironmentDataPacket(QSharedPointer message) { - /* if (message->getType() == PacketType::SilentAudioFrame) { _silentInbound.increment(); } else { @@ -709,7 +707,7 @@ void AudioClient::handleAudioDataPacket(QSharedPointer message) // Audio output must exist and be correctly set up if we're going to process received audio _receivedAudioStream.parseData(*message); #endif -}*/ + } } AudioClient::Gate::Gate(AudioClient* audioClient) : @@ -1042,80 +1040,82 @@ void AudioClient::handleLocalEchoAndReverb(QByteArray& inputByteArray) { } void AudioClient::handleAudioInput(QByteArray& audioBuffer) { - if (_muted) { - _lastInputLoudness = 0.0f; - _timeSinceLastClip = 0.0f; - } else { - int16_t* samples = reinterpret_cast(audioBuffer.data()); - int numSamples = audioBuffer.size() / AudioConstants::SAMPLE_SIZE; - int numFrames = numSamples / (_isStereoInput ? AudioConstants::STEREO : AudioConstants::MONO); - - if (_isNoiseGateEnabled) { - // The audio gate includes DC removal - _audioGate->render(samples, samples, numFrames); - } else { - _audioGate->removeDC(samples, samples, numFrames); - } - - int32_t loudness = 0; - assert(numSamples < 65536); // int32_t loudness cannot overflow - bool didClip = false; - for (int i = 0; i < numSamples; ++i) { - const int32_t CLIPPING_THRESHOLD = (int32_t)(AudioConstants::MAX_SAMPLE_VALUE * 0.9f); - int32_t sample = std::abs((int32_t)samples[i]); - loudness += sample; - didClip |= (sample > CLIPPING_THRESHOLD); - } - _lastInputLoudness = (float)loudness / numSamples; - - if (didClip) { + if (!_interstitialMode) { + if (_muted) { + _lastInputLoudness = 0.0f; _timeSinceLastClip = 0.0f; - } else if (_timeSinceLastClip >= 0.0f) { - _timeSinceLastClip += (float)numSamples / (float)AudioConstants::SAMPLE_RATE; + } else { + int16_t* samples = reinterpret_cast(audioBuffer.data()); + int numSamples = audioBuffer.size() / AudioConstants::SAMPLE_SIZE; + int numFrames = numSamples / (_isStereoInput ? AudioConstants::STEREO : AudioConstants::MONO); + + if (_isNoiseGateEnabled) { + // The audio gate includes DC removal + _audioGate->render(samples, samples, numFrames); + } else { + _audioGate->removeDC(samples, samples, numFrames); + } + + int32_t loudness = 0; + assert(numSamples < 65536); // int32_t loudness cannot overflow + bool didClip = false; + for (int i = 0; i < numSamples; ++i) { + const int32_t CLIPPING_THRESHOLD = (int32_t)(AudioConstants::MAX_SAMPLE_VALUE * 0.9f); + int32_t sample = std::abs((int32_t)samples[i]); + loudness += sample; + didClip |= (sample > CLIPPING_THRESHOLD); + } + _lastInputLoudness = (float)loudness / numSamples; + + if (didClip) { + _timeSinceLastClip = 0.0f; + } else if (_timeSinceLastClip >= 0.0f) { + _timeSinceLastClip += (float)numSamples / (float)AudioConstants::SAMPLE_RATE; + } + + emit inputReceived(audioBuffer); } - emit inputReceived(audioBuffer); + emit inputLoudnessChanged(_lastInputLoudness); + + // state machine to detect gate opening and closing + bool audioGateOpen = (_lastInputLoudness != 0.0f); + bool openedInLastBlock = !_audioGateOpen && audioGateOpen; // the gate just opened + bool closedInLastBlock = _audioGateOpen && !audioGateOpen; // the gate just closed + _audioGateOpen = audioGateOpen; + + if (openedInLastBlock) { + emit noiseGateOpened(); + } else if (closedInLastBlock) { + emit noiseGateClosed(); + } + + // the codec must be flushed to silence before sending silent packets, + // so delay the transition to silent packets by one packet after becoming silent. + auto packetType = _shouldEchoToServer ? PacketType::MicrophoneAudioWithEcho : PacketType::MicrophoneAudioNoEcho; + if (!audioGateOpen && !closedInLastBlock) { + packetType = PacketType::SilentAudioFrame; + _silentOutbound.increment(); + } else { + _audioOutbound.increment(); + } + + Transform audioTransform; + audioTransform.setTranslation(_positionGetter()); + audioTransform.setRotation(_orientationGetter()); + + QByteArray encodedBuffer; + if (_encoder) { + _encoder->encode(audioBuffer, encodedBuffer); + } else { + encodedBuffer = audioBuffer; + } + + emitAudioPacket(encodedBuffer.data(), encodedBuffer.size(), _outgoingAvatarAudioSequenceNumber, _isStereoInput, + audioTransform, avatarBoundingBoxCorner, avatarBoundingBoxScale, + packetType, _selectedCodecName); + _stats.sentPacket(); } - - emit inputLoudnessChanged(_lastInputLoudness); - - // state machine to detect gate opening and closing - bool audioGateOpen = (_lastInputLoudness != 0.0f); - bool openedInLastBlock = !_audioGateOpen && audioGateOpen; // the gate just opened - bool closedInLastBlock = _audioGateOpen && !audioGateOpen; // the gate just closed - _audioGateOpen = audioGateOpen; - - if (openedInLastBlock) { - emit noiseGateOpened(); - } else if (closedInLastBlock) { - emit noiseGateClosed(); - } - - // the codec must be flushed to silence before sending silent packets, - // so delay the transition to silent packets by one packet after becoming silent. - auto packetType = _shouldEchoToServer ? PacketType::MicrophoneAudioWithEcho : PacketType::MicrophoneAudioNoEcho; - if (!audioGateOpen && !closedInLastBlock) { - packetType = PacketType::SilentAudioFrame; - _silentOutbound.increment(); - } else { - _audioOutbound.increment(); - } - - Transform audioTransform; - audioTransform.setTranslation(_positionGetter()); - audioTransform.setRotation(_orientationGetter()); - - QByteArray encodedBuffer; - if (_encoder) { - _encoder->encode(audioBuffer, encodedBuffer); - } else { - encodedBuffer = audioBuffer; - } - - emitAudioPacket(encodedBuffer.data(), encodedBuffer.size(), _outgoingAvatarAudioSequenceNumber, _isStereoInput, - audioTransform, avatarBoundingBoxCorner, avatarBoundingBoxScale, - packetType, _selectedCodecName); - _stats.sentPacket(); } void AudioClient::handleMicAudioInput() { @@ -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/libraries/audio-client/src/AudioClient.h b/libraries/audio-client/src/AudioClient.h index 9ee7bcfeba..b665f85a13 100644 --- a/libraries/audio-client/src/AudioClient.h +++ b/libraries/audio-client/src/AudioClient.h @@ -188,6 +188,7 @@ public slots: void handleRecordedAudioInput(const QByteArray& audio); void reset(); void audioMixerKilled(); + void setInterstitialStatus(bool interstitialMode) { _interstitialMode = interstitialMode; } void setMuted(bool muted, bool emitSignal = true); bool isMuted() { return _muted; } @@ -417,6 +418,7 @@ private: QVector _activeLocalAudioInjectors; bool _isPlayingBackRecording { false }; + bool _interstitialMode { true }; CodecPluginPointer _codec; QString _selectedCodecName; From b9cfbfb3beae4d3ed0070d91e1bdac10c540a832 Mon Sep 17 00:00:00 2001 From: Dante Ruiz Date: Fri, 3 Aug 2018 09:59:21 -0700 Subject: [PATCH 003/123] 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); +}()); From a2717e2efa9af8405b496b5a91cf653dacdd62ac Mon Sep 17 00:00:00 2001 From: Dante Ruiz Date: Fri, 3 Aug 2018 10:47:20 -0700 Subject: [PATCH 004/123] editing interstitialPage.js --- scripts/defaultScripts.js | 2 +- scripts/system/interstitialPage.js | 111 +---------------------------- 2 files changed, 4 insertions(+), 109 deletions(-) diff --git a/scripts/defaultScripts.js b/scripts/defaultScripts.js index 662120be34..a11ec98c40 100644 --- a/scripts/defaultScripts.js +++ b/scripts/defaultScripts.js @@ -32,7 +32,7 @@ var DEFAULT_SCRIPTS_COMBINED = [ "system/firstPersonHMD.js", "system/tablet-ui/tabletUI.js", "system/emote.js", - "system/interstitialpage" + "system/interstitialPage.js" ]; var DEFAULT_SCRIPTS_SEPARATE = [ "system/controllers/controllerScripts.js", diff --git a/scripts/system/interstitialPage.js b/scripts/system/interstitialPage.js index af80e94605..f90256b964 100644 --- a/scripts/system/interstitialPage.js +++ b/scripts/system/interstitialPage.js @@ -16,119 +16,18 @@ 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!", @@ -282,11 +181,10 @@ }; var BY = "by "; - var host = domainHostnameMap[location.placename]; - var text = BY + host; + var text = BY var hostLeftMargin = getLeftMargin(domainHostname, text); var hostnameProperties = { - text: BY + host, + text: BY, leftMargin: hostLeftMargin }; @@ -323,7 +221,7 @@ AddressManager.handleLookupString(THE_PLACE); } } - var previousCameraMode = Camera.mode; + var previousPhysicsStatus = 99999; function updateOverlays(physicsEnabled) { @@ -405,9 +303,6 @@ Overlays.deleteOverlay(domainToolTip); Overlays.deleteOverlay(loadingBarPlacard); Overlays.deleteOverlay(loadingBarProgress); - try { - } catch (e) { - } } Script.scriptEnding.connect(cleanup); From 237762620316fb48c7ea2ec779c0e9775ef6ac88 Mon Sep 17 00:00:00 2001 From: Dante Ruiz Date: Tue, 29 May 2018 13:22:20 -0700 Subject: [PATCH 005/123] exposing physics progress --- interface/src/Application.cpp | 5 +++++ interface/src/Application.h | 5 +++++ .../src/scripting/WindowScriptingInterface.cpp | 13 +++++++++++++ interface/src/scripting/WindowScriptingInterface.h | 4 ++++ 4 files changed, 27 insertions(+) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 12dbf823b3..496c133aeb 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -5301,6 +5301,7 @@ void Application::resetPhysicsReadyInformation() { _fullSceneCounterAtLastPhysicsCheck = 0; _nearbyEntitiesCountAtLastPhysicsCheck = 0; _nearbyEntitiesStabilityCount = 0; + _nearbyEntitiesReadyCount = 0; _physicsEnabled = false; } @@ -6546,6 +6547,7 @@ bool Application::nearbyEntitiesAreReadyForPhysics() { _nearbyEntitiesCountAtLastPhysicsCheck = nearbyCount; const uint32_t MINIMUM_NEARBY_ENTITIES_STABILITY_COUNT = 3; + uint32_t readyNearbyEntities = 0; if (_nearbyEntitiesStabilityCount >= MINIMUM_NEARBY_ENTITIES_STABILITY_COUNT) { // We've seen the same number of nearby entities for several stats packets in a row. assume we've got all // the local entities. @@ -6555,8 +6557,11 @@ bool Application::nearbyEntitiesAreReadyForPhysics() { HIFI_FCDEBUG(interfaceapp(), "Physics disabled until entity loads: " << entity->getID() << entity->getName()); // don't break here because we want all the relevant entities to start their downloads result = false; + } else { + readyNearbyEntities++; } } + _nearbyEntitiesReadyCount = readyNearbyEntities; return result; } return false; diff --git a/interface/src/Application.h b/interface/src/Application.h index 6bdfef78e1..88aea0379f 100644 --- a/interface/src/Application.h +++ b/interface/src/Application.h @@ -224,6 +224,10 @@ public: void setHmdTabletBecomesToolbarSetting(bool value); bool getPreferStylusOverLaser() { return _preferStylusOverLaserSetting.get(); } void setPreferStylusOverLaser(bool value); + + uint32_t getEntitiesStabilityCount() { return _nearbyEntitiesStabilityCount; } + uint32_t getNearbyEntitiesReadyCount() { return _nearbyEntitiesReadyCount; } + uint32_t getNearbyEntitiesCount() { return _nearbyEntitiesCountAtLastPhysicsCheck; } // FIXME: Remove setting completely or make available through JavaScript API? //bool getPreferAvatarFingerOverStylus() { return _preferAvatarFingerOverStylusSetting.get(); } bool getPreferAvatarFingerOverStylus() { return false; } @@ -723,6 +727,7 @@ private: uint32_t _fullSceneCounterAtLastPhysicsCheck { 0 }; // _fullSceneReceivedCounter last time we checked physics ready uint32_t _nearbyEntitiesCountAtLastPhysicsCheck { 0 }; // how many in-range entities last time we checked physics ready uint32_t _nearbyEntitiesStabilityCount { 0 }; // how many times has _nearbyEntitiesCountAtLastPhysicsCheck been the same + uint32_t _nearbyEntitiesReadyCount { 0 }; quint64 _lastPhysicsCheckTime { usecTimestampNow() }; // when did we last check to see if physics was ready bool _keyboardDeviceHasFocus { true }; diff --git a/interface/src/scripting/WindowScriptingInterface.cpp b/interface/src/scripting/WindowScriptingInterface.cpp index ba86925581..965e183023 100644 --- a/interface/src/scripting/WindowScriptingInterface.cpp +++ b/interface/src/scripting/WindowScriptingInterface.cpp @@ -584,3 +584,16 @@ void WindowScriptingInterface::onMessageBoxSelected(int button) { _messageBoxes.remove(id); } } + + +int WindowScriptingInterface::getPhysicsNearbyEntitiesReadyCount() { + return qApp->getNearbyEntitiesReadyCount(); +} + +int WindowScriptingInterface::getPhysicsNearbyEntitiesStabilityCount() { + return qApp->getEntitiesStabilityCount(); +} + +int WindowScriptingInterface::getPhysicsNearbyEntitiesCount() { + return qApp->getNearbyEntitiesCount(); +} diff --git a/interface/src/scripting/WindowScriptingInterface.h b/interface/src/scripting/WindowScriptingInterface.h index 77895e0e76..035dcae9d0 100644 --- a/interface/src/scripting/WindowScriptingInterface.h +++ b/interface/src/scripting/WindowScriptingInterface.h @@ -561,6 +561,10 @@ public slots: */ void closeMessageBox(int id); + int getPhysicsNearbyEntitiesReadyCount(); + int getPhysicsNearbyEntitiesStabilityCount(); + int getPhysicsNearbyEntitiesCount(); + private slots: void onWindowGeometryChanged(const QRect& geometry); void onMessageBoxSelected(int button); From 6a4a56cee38aa3dc14a0ac50ab72f7000a33055d Mon Sep 17 00:00:00 2001 From: Dante Ruiz Date: Mon, 6 Aug 2018 17:42:21 -0700 Subject: [PATCH 006/123] imporving the interstitial page script --- interface/src/Application.cpp | 1 + .../scripting/WindowScriptingInterface.cpp | 3 + .../src/scripting/WindowScriptingInterface.h | 3 + interface/src/ui/Stats.cpp | 4 + scripts/defaultScripts.js | 4 +- scripts/system/interstitialPage.js | 169 ++++++++++-------- 6 files changed, 108 insertions(+), 76 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index ac14e2d636..a594756a80 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -3458,6 +3458,7 @@ bool Application::isInterstitialMode() const { void Application::setIsInterstitialMode(bool interstitialMode) { if (_interstitialMode != interstitialMode) { + qDebug() << "-------> interstitial mode changed: " << _interstitialMode << " ------------> "; _interstitialMode = interstitialMode; emit interstitialModeChanged(_interstitialMode); } diff --git a/interface/src/scripting/WindowScriptingInterface.cpp b/interface/src/scripting/WindowScriptingInterface.cpp index 965e183023..68be55f88a 100644 --- a/interface/src/scripting/WindowScriptingInterface.cpp +++ b/interface/src/scripting/WindowScriptingInterface.cpp @@ -53,6 +53,9 @@ WindowScriptingInterface::WindowScriptingInterface() { }); connect(qApp->getWindow(), &MainWindow::windowGeometryChanged, this, &WindowScriptingInterface::onWindowGeometryChanged); + connect(qApp, &Application::interstitialModeChanged, [this] (bool interstitialStatus) { + emit interstitialStatusChanged(interstitialStatus); + }); } WindowScriptingInterface::~WindowScriptingInterface() { diff --git a/interface/src/scripting/WindowScriptingInterface.h b/interface/src/scripting/WindowScriptingInterface.h index 035dcae9d0..7b0b6435f7 100644 --- a/interface/src/scripting/WindowScriptingInterface.h +++ b/interface/src/scripting/WindowScriptingInterface.h @@ -746,6 +746,9 @@ signals: */ void geometryChanged(QRect geometry); + + void interstitialStatusChanged(bool intersititalMode); + private: QString getPreviousBrowseLocation() const; void setPreviousBrowseLocation(const QString& location); diff --git a/interface/src/ui/Stats.cpp b/interface/src/ui/Stats.cpp index 6bb615948c..991dee9980 100644 --- a/interface/src/ui/Stats.cpp +++ b/interface/src/ui/Stats.cpp @@ -105,6 +105,10 @@ extern std::atomic DECIMATED_TEXTURE_COUNT; extern std::atomic RECTIFIED_TEXTURE_COUNT; void Stats::updateStats(bool force) { + + if (qApp->isInterstitialMode()) { + return; + } QQuickItem* parent = parentItem(); if (!force) { if (!Menu::getInstance()->isOptionChecked(MenuOption::Stats)) { diff --git a/scripts/defaultScripts.js b/scripts/defaultScripts.js index a11ec98c40..31510831c8 100644 --- a/scripts/defaultScripts.js +++ b/scripts/defaultScripts.js @@ -31,11 +31,11 @@ var DEFAULT_SCRIPTS_COMBINED = [ "system/dialTone.js", "system/firstPersonHMD.js", "system/tablet-ui/tabletUI.js", - "system/emote.js", - "system/interstitialPage.js" + "system/emote.js" ]; var DEFAULT_SCRIPTS_SEPARATE = [ "system/controllers/controllerScripts.js", + "system/interstitialPage.js" //"system/chat.js" ]; diff --git a/scripts/system/interstitialPage.js b/scripts/system/interstitialPage.js index f90256b964..6960272e11 100644 --- a/scripts/system/interstitialPage.js +++ b/scripts/system/interstitialPage.js @@ -13,9 +13,11 @@ Camera, HMD*/ (function() { - var MAX_X_SIZE = 3; - var isVisible = true; - var defaultOffset = 1.5; + var MAX_X_SIZE = 5; + var EPSILON = 0.25; + var isVisible = false; + var STABILITY = 3.0; + var defaultOffset = -0.5; var VOLUME = 0.4; var tune = SoundCache.getSound("http://hifi-content.s3.amazonaws.com/alexia/LoadingScreens/crystals_and_voices.wav"); var sample = null; @@ -50,14 +52,15 @@ 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), + orientation: Quat.multiply(Quat.fromVec3Degrees({x: 10, 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 + grabbable: false, + parentID: MyAvatar.SELF_ID }); @@ -128,7 +131,7 @@ var loadingBarPlacard = Overlays.addOverlay("image3d", { name: "Loading-Bar-Placard", - localPosition: { x: 0.0 , y: DESTINATION_CARD_Y_OFFSET - 0.99, z: 5.45 }, + localPosition: { x: 0.0 , y: DESTINATION_CARD_Y_OFFSET - 0.99, z: 5.52 }, url: "http://hifi-content.s3.amazonaws.com/alexia/LoadingScreens/loadingBar_placard.png", alpha: 1, dimensions: { x: 4, y: 2.8}, @@ -161,6 +164,9 @@ var timerset = false; var lastInterval = Date.now(); var timeElapsed = 0; + var currentDomain = ""; + var timer = null; + var target = 0; function getLeftMargin(overlayID, text) { @@ -171,43 +177,58 @@ } + function resetValues() { + } + + function lerp(a, b, t) { + return ((1 - t) * a + t * b); + } + + function startInterstitialPage() { + if (timer === null) { + print("--------> start page <--------"); + updateOverlays(Window.isPhysicsEnabled()); + target = 0; + currentProgress = 0.1; + timer = Script.setTimeout(update, BASIC_TIMER_INTERVAL_MS); + } + } + 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 - }; + if (domain !== currentDomain) { + print("----------> domain changed <-------------->"); + 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 text = BY - var hostLeftMargin = getLeftMargin(domainHostname, text); - var hostnameProperties = { - text: BY, - leftMargin: hostLeftMargin - }; + var BY = "by "; + var text = BY + var hostLeftMargin = getLeftMargin(domainHostname, text); + var hostnameProperties = { + text: BY, + 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 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(domainNameTextID, textProperties); + Overlays.editOverlay(domainHostname, hostnameProperties); + Overlays.editOverlay(domainToolTip, toolTipProperties); - Overlays.editOverlay(loadingSphereID, mainSphereProperties); - Overlays.editOverlay(domainNameTextID, textProperties); - Overlays.editOverlay(domainHostname, hostnameProperties); - Overlays.editOverlay(domainToolTip, toolTipProperties); + + startInterstitialPage(); + currentDomain = domain; + } } var THE_PLACE = "hifi://TheSpot"; @@ -222,26 +243,18 @@ } } - var previousPhysicsStatus = 99999; + var currentProgress = 0.1; 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 + visible: !physicsEnabled }; - if (!HMD.active) { - toolbar.writeProperty("visible", physicsEnabled); - MyAvatar.headOrientation = Quat.multiply(Quat.cancelOutRollAndPitch(MyAvatar.headOrientation), Quat.fromPitchYawRollDegrees(2.5, 0, 0)); - } + Menu.setIsOptionChecked("Show Overlays", physicsEnabled); renderViewTask.getConfig("LightingModel")["enableAmbientLight"] = physicsEnabled; renderViewTask.getConfig("LightingModel")["enableDirectionalLight"] = physicsEnabled; @@ -260,38 +273,46 @@ 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; + timeElapsed += deltaTime; + + var nearbyEntitiesReadyCount = Window.getPhysicsNearbyEntitiesReadyCount(); + var stabilityCount = Window.getPhysicsNearbyEntitiesStabilityCount(); + var nearbyEntitiesCount = Window.getPhysicsNearbyEntitiesCount(); + + var stabilityPercentage = (stabilityCount / STABILITY); + if (stabilityPercentage > 1) { + stabilityPercentage = 1; } - if (timerset) { - timeElapsed += deltaTime; - if (timeElapsed >= MAX_ELAPSED_TIME) { - updateOverlays(true); - sample.stop(); - sample = null; - timerset = false; - } + var stabilityProgress = (MAX_X_SIZE * 0.75) * stabilityPercentage; + var entitiesLoadedPercentage = 1; + if (nearbyEntitiesCount > 0) { + entitiesLoadedPercentage = nearbyEntitiesReadyCount / nearbyEntitiesCount; } + var entitiesLoadedProgress = (MAX_X_SIZE * 0.25) * entitiesLoadedPercentage; + var progress = stabilityProgress + entitiesLoadedProgress; + if (progress >= target) { + target = progress; + } + currentProgress = lerp(currentProgress, target, 0.2); + var properties = { + localPosition: { x: -(currentProgress / 2) + 2, y: DESTINATION_CARD_Y_OFFSET - 0.99, z: 5.45 }, + dimensions: { + x: currentProgress, + y: 2.8 + } + }; - 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); + Overlays.editOverlay(loadingBarProgress, properties); + if (physicsEnabled && (currentProgress >= (MAX_X_SIZE - EPSILON))) { + updateOverlays(physicsEnabled); + timer = null; + return; + } + timer = Script.setTimeout(update, BASIC_TIMER_INTERVAL_MS); } - Script.setTimeout(update, BASIC_TIMER_INTERVAL_MS); Overlays.mouseReleaseOnOverlay.connect(clickedOnOverlay); Window.domainChanged.connect(domainChanged); From a9fd034f09ca9e8b8f024d188549f92cd9326f53 Mon Sep 17 00:00:00 2001 From: Dante Ruiz Date: Tue, 7 Aug 2018 16:02:54 -0700 Subject: [PATCH 007/123] switching to location api --- interface/src/Application.cpp | 4 ++-- scripts/system/interstitialPage.js | 26 ++++++++++++-------------- 2 files changed, 14 insertions(+), 16 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index a594756a80..39c24d7562 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -1640,7 +1640,7 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo audioClient->setMuted(!audioClient->isMuted()); } else if (action == controller::toInt(controller::Action::CYCLE_CAMERA)) { cycleCamera(); - } else if (action == controller::toInt(controller::Action::CONTEXT_MENU)) { + } else if (action == controller::toInt(controller::Action::CONTEXT_MENU) && !isInterstitialMode()) { toggleTabletUI(); } else if (action == controller::toInt(controller::Action::RETICLE_X)) { auto oldPos = getApplicationCompositor().getReticlePosition(); @@ -7806,7 +7806,7 @@ float Application::getRenderResolutionScale() const { } void Application::notifyPacketVersionMismatch() { - if (!_notifiedPacketVersionMismatchThisDomain) { + if (!_notifiedPacketVersionMismatchThisDomain && !isInterstitialMode()) { _notifiedPacketVersionMismatchThisDomain = true; QString message = "The location you are visiting is running an incompatible server version.\n"; diff --git a/scripts/system/interstitialPage.js b/scripts/system/interstitialPage.js index 6960272e11..b18d88d796 100644 --- a/scripts/system/interstitialPage.js +++ b/scripts/system/interstitialPage.js @@ -186,7 +186,6 @@ function startInterstitialPage() { if (timer === null) { - print("--------> start page <--------"); updateOverlays(Window.isPhysicsEnabled()); target = 0; currentProgress = 0.1; @@ -195,8 +194,9 @@ } function domainChanged(domain) { + print("domain changed: " + domain); if (domain !== currentDomain) { - print("----------> domain changed <-------------->"); + MyAvatar.restoreAnimation(); var name = AddressManager.placename; domainName = name.charAt(0).toUpperCase() + name.slice(1); var domainNameLeftMargin = getLeftMargin(domainNameTextID, domainName); @@ -205,13 +205,11 @@ leftMargin: domainNameLeftMargin }; - var BY = "by "; - var text = BY - var hostLeftMargin = getLeftMargin(domainHostname, text); + /*var hostLeftMargin = getLeftMargin(domainHostname, text); var hostnameProperties = { text: BY, leftMargin: hostLeftMargin - }; + };*/ var randomIndex = Math.floor(Math.random() * userTips.length); var tip = userTips[randomIndex]; @@ -222,7 +220,7 @@ }; Overlays.editOverlay(domainNameTextID, textProperties); - Overlays.editOverlay(domainHostname, hostnameProperties); + // Overlays.editOverlay(domainHostname, hostnameProperties); Overlays.editOverlay(domainToolTip, toolTipProperties); @@ -234,12 +232,9 @@ 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); + print("-------> heading to theb spot <--------"); + location.handleLookupString(THE_PLACE); } } @@ -254,7 +249,7 @@ visible: !physicsEnabled }; - Menu.setIsOptionChecked("Show Overlays", physicsEnabled); + // Menu.setIsOptionChecked("Show Overlays", physicsEnabled); renderViewTask.getConfig("LightingModel")["enableAmbientLight"] = physicsEnabled; renderViewTask.getConfig("LightingModel")["enableDirectionalLight"] = physicsEnabled; @@ -314,7 +309,10 @@ } Overlays.mouseReleaseOnOverlay.connect(clickedOnOverlay); - Window.domainChanged.connect(domainChanged); + location.hostChanged.connect(domainChanged); + location.lookupResultsFinished.connect(function() { + print("connected: " + location.isConnected()); + }); function cleanup() { Overlays.deleteOverlay(loadingSphereID); From 0fed48bd0e7b8ce0411dc25f5944ed2d1a3d0d3d Mon Sep 17 00:00:00 2001 From: Dante Ruiz Date: Wed, 8 Aug 2018 18:15:27 -0700 Subject: [PATCH 008/123] improving interstitial page --- scripts/system/interstitialPage.js | 199 ++++++++++++++++++++++++----- 1 file changed, 164 insertions(+), 35 deletions(-) diff --git a/scripts/system/interstitialPage.js b/scripts/system/interstitialPage.js index b18d88d796..76900bd77c 100644 --- a/scripts/system/interstitialPage.js +++ b/scripts/system/interstitialPage.js @@ -10,25 +10,30 @@ // /* global Script, Controller, Overlays, Quat, MyAvatar, Entities, print, Vec3, AddressManager, Render, Window, Toolbars, - Camera, HMD*/ + Camera, HMD, location, Account*/ (function() { + Script.include("/~/system/libraries/Xform.js"); + var DEBUG = true; var MAX_X_SIZE = 5; var EPSILON = 0.25; var isVisible = false; var STABILITY = 3.0; - var defaultOffset = -0.5; 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 SYSTEM_TOOL_BAR = "com.highfidelity.interface.toolbar.system"; - var MAX_ELAPSED_TIME = 5 * 1000; // time in ms + var DEFAULT_Z_OFFSET = 5.45; - var toolbar = Toolbars.getToolbar(SYSTEM_TOOL_BAR); var renderViewTask = Render.getConfig("RenderMainView"); + var request = Script.require('request').request; + var BUTTON_PROPERTIES = { + text: "Interstitial" + }; + var tablet = null; + var button = null; // Tips have a character limit of 69 var userTips = [ @@ -49,12 +54,14 @@ "Tip: Log in to make friends, visit new domains, and save avatars!" ]; + var DEFAULT_DIMENSIONS = { x: 20, y: 20, z: 20 }; + 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: 10, y: 180, z: 0}), MyAvatar.orientation), + 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 }, + dimensions: DEFAULT_DIMENSIONS, alpha: 1, visible: isVisible, ignoreRayIntersection: true, @@ -63,11 +70,23 @@ parentID: MyAvatar.SELF_ID }); + var anchorOverlay = Overlays.addOverlay("cube", { + dimensions: {x: 0.2, y: 0.2, z: 0.2}, + visible: true, + grabbable: false, + ignoreRayIntersection: true, + localPosition: {x: 0.0, y: getAnchorLocalYOffset(), z: DEFAULT_Z_OFFSET }, + orientation: Quat.multiply(Quat.fromVec3Degrees({x: 0, y: 180, z: 0}), MyAvatar.orientation), + solid: true, + drawInFront: true, + parentID: MyAvatar.SELF_ID + }); - var domainName = ""; + + var domainName = "Test"; var domainNameTextID = Overlays.addOverlay("text3d", { name: "Loading-Destination-Card-Text", - localPosition: { x: 0.0, y: DESTINATION_CARD_Y_OFFSET + 0.8, z: 5.45 }, + localPosition: { x: 0.0, y: 0.8, z: 0.0 }, text: domainName, textAlpha: 1, backgroundAlpha: 0, @@ -77,15 +96,15 @@ drawInFront: true, grabbable: false, localOrientation: Quat.fromVec3Degrees({ x: 0, y: 180, z: 0 }), - parentID: loadingSphereID + parentID: anchorOverlay }); - var hostName = ""; + var domainText = ""; - var domainHostname = Overlays.addOverlay("text3d", { + var domainDescription = Overlays.addOverlay("text3d", { name: "Loading-Hostname", - localPosition: { x: 0.0, y: DESTINATION_CARD_Y_OFFSET + 0.32, z: 5.45 }, - text: hostName, + localPosition: { x: 0.0, y: 0.32, z: 0.0 }, + text: domainText, textAlpha: 1, backgroundAlpha: 0, lineHeight: 0.13, @@ -94,14 +113,14 @@ drawInFront: true, grabbable: false, localOrientation: Quat.fromVec3Degrees({ x: 0, y: 180, z: 0 }), - parentID: loadingSphereID + parentID: anchorOverlay }); var toolTip = ""; var domainToolTip = Overlays.addOverlay("text3d", { name: "Loading-Tooltip", - localPosition: { x: 0.0 , y: DESTINATION_CARD_Y_OFFSET - 1.6, z: 5.45 }, + localPosition: { x: 0.0 , y: -1.6, z: 0.0 }, text: toolTip, textAlpha: 1, backgroundAlpha: 0, @@ -111,12 +130,12 @@ drawInFront: true, grabbable: false, localOrientation: Quat.fromVec3Degrees({ x: 0, y: 180, z: 0 }), - parentID: loadingSphereID + parentID: anchorOverlay }); var loadingToTheSpotID = Overlays.addOverlay("image3d", { name: "Loading-Destination-Card-Text", - localPosition: { x: 0.0 , y: DESTINATION_CARD_Y_OFFSET - 1.8, z: 5.45 }, + localPosition: { x: 0.0 , y: -1.8, z: 0.0 }, url: "http://hifi-content.s3.amazonaws.com/alexia/LoadingScreens/goTo_button.png", alpha: 1, dimensions: { x: 1.2, y: 0.6}, @@ -126,12 +145,12 @@ drawInFront: true, grabbable: false, localOrientation: Quat.fromVec3Degrees({ x: 0.0, y: 180.0, z: 0.0 }), - parentID: loadingSphereID + parentID: anchorOverlay }); var loadingBarPlacard = Overlays.addOverlay("image3d", { name: "Loading-Bar-Placard", - localPosition: { x: 0.0 , y: DESTINATION_CARD_Y_OFFSET - 0.99, z: 5.52 }, + localPosition: { x: 0.0 , y: -0.99, z: 0.07 }, url: "http://hifi-content.s3.amazonaws.com/alexia/LoadingScreens/loadingBar_placard.png", alpha: 1, dimensions: { x: 4, y: 2.8}, @@ -141,12 +160,12 @@ drawInFront: true, grabbable: false, localOrientation: Quat.fromVec3Degrees({ x: 0.0, y: 180.0, z: 0.0 }), - parentID: loadingSphereID + parentID: anchorOverlay }); var loadingBarProgress = Overlays.addOverlay("image3d", { name: "Loading-Bar-Progress", - localPosition: { x: 0.0 , y: DESTINATION_CARD_Y_OFFSET - 0.99, z: 5.45 }, + localPosition: { x: 0.0 , y: -0.99, z: 0.0 }, url: "http://hifi-content.s3.amazonaws.com/alexia/LoadingScreens/loadingBar_progress.png", alpha: 1, dimensions: { x: 4, y: 2.8}, @@ -156,7 +175,7 @@ drawInFront: true, grabbable: false, localOrientation: Quat.fromVec3Degrees({ x: 0.0, y: 180.0, z: 0.0 }), - parentID: loadingSphereID + parentID: anchorOverlay }); var TARGET_UPDATE_HZ = 60; // 50hz good enough, but we're using update @@ -169,6 +188,16 @@ var target = 0; + function getAnchorLocalYOffset() { + var loadingSpherePosition = Overlays.getProperty(loadingSphereID, "position"); + var loadingSphereOrientation = Overlays.getProperty(loadingSphereID, "rotation"); + var overlayXform = new Xform(loadingSphereOrientation, loadingSpherePosition); + var worldToOverlayXform = overlayXform.inv(); + var headPosition = MyAvatar.getHeadPosition(); + var headPositionInOverlaySpace = worldToOverlayXform.xformPoint(headPosition); + return headPositionInOverlaySpace.y; + } + function getLeftMargin(overlayID, text) { var textSize = Overlays.textSize(overlayID, text); var sizeDifference = ((INNER_CIRCLE_WIDTH - textSize.width) / 2); @@ -176,7 +205,6 @@ return leftMargin; } - function resetValues() { } @@ -186,13 +214,28 @@ function startInterstitialPage() { if (timer === null) { + print("----------> starting <----------"); updateOverlays(Window.isPhysicsEnabled()); + startAudio(); target = 0; currentProgress = 0.1; timer = Script.setTimeout(update, BASIC_TIMER_INTERVAL_MS); } } + function startAudio() { + sample = Audio.playSound(tune, { + localOnly: true, + position: MyAvatar.getHeadPosition(), + volume: VOLUME + }); + } + + function endAudio() { + sample.stop(); + sample = null; + } + function domainChanged(domain) { print("domain changed: " + domain); if (domain !== currentDomain) { @@ -205,11 +248,23 @@ leftMargin: domainNameLeftMargin }; - /*var hostLeftMargin = getLeftMargin(domainHostname, text); - var hostnameProperties = { - text: BY, - leftMargin: hostLeftMargin - };*/ + var url = Account.metaverseServerURL + '/api/v1/places/' + domain; + request({ + uri: url + }, function(error, data) { + if (data.status === "success") { + print("-----------> settings domain description <----------"); + var domainInfo = data.data; + var domainDescriptionText = domainInfo.place.description; + print("domainText: " + domainDescriptionText); + var leftMargin = getLeftMargin(domainDescription, domainDescriptionText); + var domainDescriptionProperties = { + text: domainDescriptionText, + leftMargin: leftMargin + }; + Overlays.editOverlay(domainDescription, domainDescriptionProperties); + } + }); var randomIndex = Math.floor(Math.random() * userTips.length); var tip = userTips[randomIndex]; @@ -220,7 +275,6 @@ }; Overlays.editOverlay(domainNameTextID, textProperties); - // Overlays.editOverlay(domainHostname, hostnameProperties); Overlays.editOverlay(domainToolTip, toolTipProperties); @@ -233,7 +287,6 @@ function clickedOnOverlay(overlayID, event) { print(overlayID + " other: " + loadingToTheSpotID); if (loadingToTheSpotID === overlayID) { - print("-------> heading to theb spot <--------"); location.handleLookupString(THE_PLACE); } } @@ -249,18 +302,70 @@ visible: !physicsEnabled }; + var domainTextProperties = { + text: domainText, + visible: !physicsEnabled + }; + // Menu.setIsOptionChecked("Show Overlays", physicsEnabled); + if (!HMD.active) { + MyAvatar.headOrientation = Quat.multiply(Quat.cancelOutRollAndPitch(MyAvatar.headOrientation), Quat.fromPitchYawRollDegrees(-3.0, 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(domainDescription, domainTextProperties); Overlays.editOverlay(domainToolTip, properties); Overlays.editOverlay(loadingBarPlacard, properties); Overlays.editOverlay(loadingBarProgress, properties); + + Camera.mode = "first person"; + } + + + function scaleInterstitialPage(sensorToWorldScale) { + var yOffset = getAnchorLocalYOffset(); + var localPosition = { + x: 0.0, + y: yOffset, + z: 5.45 + }; + + Overlays.editOverlay(anchorOverlay, { localPosition: localPosition }); + } + + var progress = 0; + function updateProgress() { + print("updateProgress"); + var thisInterval = Date.now(); + var deltaTime = (thisInterval - lastInterval); + lastInterval = thisInterval; + timeElapsed += deltaTime; + + progress += MAX_X_SIZE * (deltaTime / 1000); + print(progress); + var properties = { + localPosition: { x: -(progress / 1.98) + 2, y: -0.99, z: 0.0 }, + dimensions: { + x: progress, + y: 2.8 + } + }; + + if (progress > MAX_X_SIZE) { + progress = 0; + } + + Overlays.editOverlay(loadingBarProgress, properties); + + if (!toggle) { + Script.setTimeout(updateProgress, BASIC_TIMER_INTERVAL_MS); + } } function update() { @@ -292,7 +397,7 @@ } currentProgress = lerp(currentProgress, target, 0.2); var properties = { - localPosition: { x: -(currentProgress / 2) + 2, y: DESTINATION_CARD_Y_OFFSET - 0.99, z: 5.45 }, + localPosition: { x: -(currentProgress / 2) + 2, y: 0.99, z: 5.45 }, dimensions: { x: currentProgress, y: 2.8 @@ -301,7 +406,9 @@ Overlays.editOverlay(loadingBarProgress, properties); if (physicsEnabled && (currentProgress >= (MAX_X_SIZE - EPSILON))) { + print("----------> ending <--------"); updateOverlays(physicsEnabled); + endAudio(); timer = null; return; } @@ -311,17 +418,39 @@ Overlays.mouseReleaseOnOverlay.connect(clickedOnOverlay); location.hostChanged.connect(domainChanged); location.lookupResultsFinished.connect(function() { - print("connected: " + location.isConnected()); + print("connected: " + location.isConnected); }); + MyAvatar.sensorToWorldScaleChanged.connect(scaleInterstitialPage); + + var toggle = true; + if (DEBUG) { + tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); + button = tablet.addButton(BUTTON_PROPERTIES); + + button.clicked.connect(function() { + toggle = !toggle; + updateOverlays(toggle); + + if (!toggle) { + Script.setTimeout(updateProgress, BASIC_TIMER_INTERVAL_MS); + } + }); + } + function cleanup() { Overlays.deleteOverlay(loadingSphereID); Overlays.deleteOverlay(loadingToTheSpotID); Overlays.deleteOverlay(domainNameTextID); - Overlays.deleteOverlay(domainHostname); + Overlays.deleteOverlay(domainDescription); Overlays.deleteOverlay(domainToolTip); Overlays.deleteOverlay(loadingBarPlacard); Overlays.deleteOverlay(loadingBarProgress); + Overlays.deleteOverlay(anchorOverlay); + + if (DEBUG) { + tablet.removeButton(button); + } } Script.scriptEnding.connect(cleanup); From 353121be7d374ae58061ac55db8106a60b0d163c Mon Sep 17 00:00:00 2001 From: Dante Ruiz Date: Thu, 9 Aug 2018 16:29:37 -0700 Subject: [PATCH 009/123] making some changes --- interface/resources/images/loadingBar_v1.png | Bin 0 -> 20323 bytes scripts/system/interstitialPage.js | 38 ++++++++++--------- 2 files changed, 21 insertions(+), 17 deletions(-) create mode 100644 interface/resources/images/loadingBar_v1.png diff --git a/interface/resources/images/loadingBar_v1.png b/interface/resources/images/loadingBar_v1.png new file mode 100644 index 0000000000000000000000000000000000000000..b5c77054c4b2e185da0992a2237d2eb80d9033fc GIT binary patch literal 20323 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 X0pQ4zmm92`e;f&>qNQA^X!iD>8RVDV literal 0 HcmV?d00001 diff --git a/scripts/system/interstitialPage.js b/scripts/system/interstitialPage.js index 76900bd77c..ae1f71d0dd 100644 --- a/scripts/system/interstitialPage.js +++ b/scripts/system/interstitialPage.js @@ -15,7 +15,7 @@ (function() { Script.include("/~/system/libraries/Xform.js"); var DEBUG = true; - var MAX_X_SIZE = 5; + var MAX_X_SIZE = 4; var EPSILON = 0.25; var isVisible = false; var STABILITY = 3.0; @@ -67,7 +67,6 @@ ignoreRayIntersection: true, drawInFront: true, grabbable: false, - parentID: MyAvatar.SELF_ID }); var anchorOverlay = Overlays.addOverlay("cube", { @@ -79,7 +78,7 @@ orientation: Quat.multiply(Quat.fromVec3Degrees({x: 0, y: 180, z: 0}), MyAvatar.orientation), solid: true, drawInFront: true, - parentID: MyAvatar.SELF_ID + parentID: loadingSphereID }); @@ -100,7 +99,6 @@ }); var domainText = ""; - var domainDescription = Overlays.addOverlay("text3d", { name: "Loading-Hostname", localPosition: { x: 0.0, y: 0.32, z: 0.0 }, @@ -150,7 +148,7 @@ var loadingBarPlacard = Overlays.addOverlay("image3d", { name: "Loading-Bar-Placard", - localPosition: { x: 0.0 , y: -0.99, z: 0.07 }, + localPosition: { x: 0.0, y: -0.99, z: 0.0 }, url: "http://hifi-content.s3.amazonaws.com/alexia/LoadingScreens/loadingBar_placard.png", alpha: 1, dimensions: { x: 4, y: 2.8}, @@ -165,10 +163,10 @@ var loadingBarProgress = Overlays.addOverlay("image3d", { name: "Loading-Bar-Progress", - localPosition: { x: 0.0 , y: -0.99, z: 0.0 }, - url: "http://hifi-content.s3.amazonaws.com/alexia/LoadingScreens/loadingBar_progress.png", + localPosition: { x: 0.0, y: -0.99, z: 0.0 }, + url: Script.resourcesPath() + "images/loadingBar_v1.png", alpha: 1, - dimensions: { x: 4, y: 2.8}, + dimensions: {x: 4, y: 2.8}, visible: isVisible, emissive: true, ignoreRayIntersection: false, @@ -187,6 +185,8 @@ var timer = null; var target = 0; + var connectionToDomainFailed = false; + function getAnchorLocalYOffset() { var loadingSpherePosition = Overlays.getProperty(loadingSphereID, "position"); @@ -219,6 +219,7 @@ startAudio(); target = 0; currentProgress = 0.1; + connectionToDomainFailed = false; timer = Script.setTimeout(update, BASIC_TIMER_INTERVAL_MS); } } @@ -313,9 +314,9 @@ MyAvatar.headOrientation = Quat.multiply(Quat.cancelOutRollAndPitch(MyAvatar.headOrientation), Quat.fromPitchYawRollDegrees(-3.0, 0, 0)); } - renderViewTask.getConfig("LightingModel")["enableAmbientLight"] = physicsEnabled; - renderViewTask.getConfig("LightingModel")["enableDirectionalLight"] = physicsEnabled; - renderViewTask.getConfig("LightingModel")["enablePointLight"] = physicsEnabled; + //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); @@ -350,7 +351,7 @@ progress += MAX_X_SIZE * (deltaTime / 1000); print(progress); var properties = { - localPosition: { x: -(progress / 1.98) + 2, y: -0.99, z: 0.0 }, + localPosition: { x: -(progress / 2) + 2, y: -0.99, z: 0.0 }, dimensions: { x: progress, y: 2.8 @@ -403,11 +404,11 @@ y: 2.8 } }; - + print("progress: " + currentProgress); Overlays.editOverlay(loadingBarProgress, properties); - if (physicsEnabled && (currentProgress >= (MAX_X_SIZE - EPSILON))) { + if (((physicsEnabled && (currentProgress >= (MAX_X_SIZE - EPSILON))) || connectionToDomainFailed)) { print("----------> ending <--------"); - updateOverlays(physicsEnabled); + updateOverlays((physicsEnabled || connectionToDomainFailed)); endAudio(); timer = null; return; @@ -418,7 +419,10 @@ Overlays.mouseReleaseOnOverlay.connect(clickedOnOverlay); location.hostChanged.connect(domainChanged); location.lookupResultsFinished.connect(function() { - print("connected: " + location.isConnected); + Script.setTimeout(function() { + print("location connected: " + location.isConnected); + connectionToDomainFailed = !location.isConnected; + }, 300); }); MyAvatar.sensorToWorldScaleChanged.connect(scaleInterstitialPage); @@ -433,7 +437,7 @@ updateOverlays(toggle); if (!toggle) { - Script.setTimeout(updateProgress, BASIC_TIMER_INTERVAL_MS); + //Script.setTimeout(updateProgress, BASIC_TIMER_INTERVAL_MS); } }); } From 46297c6b22aa4b1f2128ac4ef4acde155e1b4500 Mon Sep 17 00:00:00 2001 From: Dante Ruiz Date: Fri, 10 Aug 2018 10:20:39 -0700 Subject: [PATCH 010/123] interstitial page --- scripts/system/interstitialPage.js | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/scripts/system/interstitialPage.js b/scripts/system/interstitialPage.js index ae1f71d0dd..149e1e141b 100644 --- a/scripts/system/interstitialPage.js +++ b/scripts/system/interstitialPage.js @@ -67,11 +67,12 @@ ignoreRayIntersection: true, drawInFront: true, grabbable: false, + parentID: MyAvatar.SELF_ID }); var anchorOverlay = Overlays.addOverlay("cube", { dimensions: {x: 0.2, y: 0.2, z: 0.2}, - visible: true, + visible: false, grabbable: false, ignoreRayIntersection: true, localPosition: {x: 0.0, y: getAnchorLocalYOffset(), z: DEFAULT_Z_OFFSET }, @@ -314,9 +315,9 @@ MyAvatar.headOrientation = Quat.multiply(Quat.cancelOutRollAndPitch(MyAvatar.headOrientation), Quat.fromPitchYawRollDegrees(-3.0, 0, 0)); } - //renderViewTask.getConfig("LightingModel")["enableAmbientLight"] = physicsEnabled; - //renderViewTask.getConfig("LightingModel")["enableDirectionalLight"] = physicsEnabled; - //renderViewTask.getConfig("LightingModel")["enablePointLight"] = physicsEnabled; + 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); @@ -350,15 +351,18 @@ progress += MAX_X_SIZE * (deltaTime / 1000); print(progress); + if (progress > MAX_X_SIZE) { + progress = 4; + } var properties = { - localPosition: { x: -(progress / 2) + 2, y: -0.99, z: 0.0 }, + localPosition: { x: 2.0 - (progress / 2), y: -0.99, z: -0.3 }, dimensions: { x: progress, y: 2.8 } }; - if (progress > MAX_X_SIZE) { + if (progress >= MAX_X_SIZE) { progress = 0; } @@ -398,7 +402,7 @@ } currentProgress = lerp(currentProgress, target, 0.2); var properties = { - localPosition: { x: -(currentProgress / 2) + 2, y: 0.99, z: 5.45 }, + localPosition: { x: 2 - (currentProgress / 2), y: -0.99, z: -0.3 }, dimensions: { x: currentProgress, y: 2.8 From 75cc1c62c05b8c9e6b52d8b4166fda533c72bbe6 Mon Sep 17 00:00:00 2001 From: Dante Ruiz Date: Fri, 10 Aug 2018 16:53:34 -0700 Subject: [PATCH 011/123] mostly done interstitial page --- .../resources/images/loadingBar_placard.png | Bin 0 -> 2737 bytes .../resources/images/loadingBar_progress.png | Bin 0 -> 20396 bytes interface/resources/images/loadingBar_v1.png | Bin 20323 -> 0 bytes interface/src/Application.cpp | 11 ++++-- interface/src/Application.h | 2 +- interface/src/Menu.cpp | 1 + scripts/defaultScripts.js | 3 +- scripts/system/interstitialPage.js | 37 ++++++++++-------- 8 files changed, 32 insertions(+), 22 deletions(-) create mode 100644 interface/resources/images/loadingBar_placard.png create mode 100644 interface/resources/images/loadingBar_progress.png delete mode 100644 interface/resources/images/loadingBar_v1.png diff --git a/interface/resources/images/loadingBar_placard.png b/interface/resources/images/loadingBar_placard.png new file mode 100644 index 0000000000000000000000000000000000000000..9fd4c9e71f433d71be2c220d29e30e938abc3a8c GIT binary patch literal 2737 zcmbVOYgAL&6+S_Mk%u^n;AkCU5C;bH4hac)pahUA6fsj&#E{%vBm>C}Nq_(%_&}tH zTA3+ON5Nu!R*$r%{NYL|Ba#!@Hz%4sN7g zi^EDK99*ld+XHJ@JMVBqJ*)21Ueof(eDQXT5Hy46T5gz^>v0U{oQ4k^{YD5Ym znLr}SWN2L0fK}=!_x<=`;o-{A_~laDI(?^ z&-?JyAbN=ZdMb?>#OIUA!TwAV&7U6X8c_-mBx$Y+A`=ibqDnv%*q|V+ceGS4LDEz{=n1_Im=7zZsjwtOiO8_l6tkr7 zF)yZxDRdEuil;#o2A)c$#p6XJKR>*P?hi?*P`p2dPQtyzOa9-~5xH145v`N|sGGU1 zD1HdK{H_bQ*zfxYmPt5$$OaBaWtl?@bIaIu`Ww7wkM>TkZk1gtC(Wj24*_J1TZ#ahTl8wL3ZEH66R1oH| zWLiy!7l2E$afSq4eo1%q!YcefedhrHN{+SjUZynX-6x+Dx87dcnYHKfMi8 zbT7!69fpcH9-#TyV&tH1JkVY|~ZKbPSH$6b68j77A8h zmA;#0kmxM`x*DFmq;Yj4&tpP1IMP;@*i(59M4}nK@@T(h`_5=Kfg+FfiHv^=jhQ+h z-td^N3$1SLvJG^bA-2p6vtKeeatGr+E*jRao&IiV);{d|64PI8slL9fK2N;87*tFV zLEG)G@Hexy&xFyyNwo$&BKDEsz~$x+oARD2rf*!@U|Hc%40)2?01nx@b(=jB9Ly=6 z=6L{+hP(pxXR3T_#`ofVCwr#Pf0l}5E@><+ExlD;K9PQ9B(?t4r@$3W>n7!>FcA}} z8y{EdU-joGq2?T=k zge4}{W>J&n7S4Qb9oJW}@?K@DW07`nE+?`XwhS$U>Kz zgYx^6qsbqeFSQH9wNx+;q4kj8b-cj7f8cNVr@KjmULYWK@ZnNN)8!g*r_kJy>vpt* z(KV81t%LJIV+1l&d}>C>t~3_)C)$UMk;5DJlUcaU4ZXbjPH*c()HB=GMBmxU{ zBB#MJPI{V{SP*=Jl(6|Gngu5U=6HaG_j(7bKYQUrrfyQIvTLl}lV)mjcLD&=ib2Y> z^VR7`$?hP_T`xfIXwcWzA(Pu^>b4)Ne=`q&#tI+X&s(p}X8y@G&=mB{9)O%NH=E~E ze{swaPOU`|2_D8*X7;env*SX00Kj4WWFG;vHoqR<->D^_j0d}qRb|2-dk8U#S6!Dc zRhM{}e+dAHOZsDDKkn$!uYq^gX4>KbRMpeboNnOy4R(JX1HQ^Hz3(1fhmM7*JPRg0 zqf+<0j|k+w4Od+qfB&Ej+;zWzJ}z>ao@*!j0dGZDv)NsmW5SN?V1Nb~MRRBc0p zIc{%f?LfHoSnOx7jg}b(lmSA+Q09uAV0Gc`p{-9&R9}x;dC4u-eabS4GM&Ybx_onI z+mRblhQY@bcOS%rj;(QM#?|YG%c?o9^<^!6Q0G|0xrz1{{dc}V0h_k0Y8Nd0BDis& zq-e~vC*xq&ii&IVu_v>|$## z4d)zx(|l?qwSHQhNjp_mn2wg<3)hR*V!7uPIOD&-R18Hl?_R>p7}#uXYUnT)JkaUb zAB=Vi_Hu8|UhE^+i+c;0%W6K^X%r`w6$}+!aucYoqBhyXr?szzznJ!|?S=x}RX&FL zlEjorn++TH<>ux-*bL4*=Qz%MU6hyA rCh-3_{NLiN_rMP*e&o{V7|zDn0e-CSeh1(ji#iw<9Ko+#AGhz{XO8;| literal 0 HcmV?d00001 diff --git a/interface/resources/images/loadingBar_progress.png b/interface/resources/images/loadingBar_progress.png new file mode 100644 index 0000000000000000000000000000000000000000..2b1fb089d97f0acce5cfe62a07075328ee6316f2 GIT binary patch literal 20396 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 literal 0 HcmV?d00001 diff --git a/interface/resources/images/loadingBar_v1.png b/interface/resources/images/loadingBar_v1.png deleted file mode 100644 index b5c77054c4b2e185da0992a2237d2eb80d9033fc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20323 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 X0pQ4zmm92`e;f&>qNQA^X!iD>8RVDV diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index cac201f34b..12a3ebf887 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -2973,6 +2973,9 @@ void Application::initializeUi() { if (_window && _window->isFullScreen()) { setFullscreen(nullptr, true); } + + + setIsInterstitialMode(true); } @@ -3451,13 +3454,15 @@ bool Application::isServerlessMode() const { } bool Application::isInterstitialMode() const { - return _interstitialMode; + bool interstitialModeEnabled = Menu::getInstance()->isOptionChecked("Enable Interstitial"); + return interstitialModeEnabled ? _interstitialMode : false; } void Application::setIsInterstitialMode(bool interstitialMode) { - if (_interstitialMode != interstitialMode) { - qDebug() << "-------> interstitial mode changed: " << _interstitialMode << " ------------> "; + bool interstitialModeEnabled = Menu::getInstance()->isOptionChecked("Enable Interstitial"); + if (_interstitialMode != interstitialMode && interstitialModeEnabled) { _interstitialMode = interstitialMode; + qDebug() << "-------> interstitial mode changed: " << _interstitialMode << " ------------> "; emit interstitialModeChanged(_interstitialMode); } } diff --git a/interface/src/Application.h b/interface/src/Application.h index 88aea0379f..856e2d199e 100644 --- a/interface/src/Application.h +++ b/interface/src/Application.h @@ -631,7 +631,7 @@ private: QSet _keysPressed; bool _enableProcessOctreeThread; - bool _interstitialMode { true }; + bool _interstitialMode { false }; OctreePacketProcessor _octreeProcessor; EntityEditPacketSender _entityEditSender; diff --git a/interface/src/Menu.cpp b/interface/src/Menu.cpp index 130c2c0b89..9b0e8d83c1 100644 --- a/interface/src/Menu.cpp +++ b/interface/src/Menu.cpp @@ -781,6 +781,7 @@ Menu::Menu() { // Developer > Show Overlays addCheckableActionToQMenuAndActionHash(developerMenu, MenuOption::Overlays, 0, true); + addCheckableActionToQMenuAndActionHash(developerMenu, "Enable Interstitial", 0, false); #if 0 /// -------------- REMOVED FOR NOW -------------- addDisabledActionAndSeparator(navigateMenu, "History"); diff --git a/scripts/defaultScripts.js b/scripts/defaultScripts.js index 31510831c8..c333a0c8c2 100644 --- a/scripts/defaultScripts.js +++ b/scripts/defaultScripts.js @@ -34,8 +34,7 @@ var DEFAULT_SCRIPTS_COMBINED = [ "system/emote.js" ]; var DEFAULT_SCRIPTS_SEPARATE = [ - "system/controllers/controllerScripts.js", - "system/interstitialPage.js" + "system/controllers/controllerScripts.js" //"system/chat.js" ]; diff --git a/scripts/system/interstitialPage.js b/scripts/system/interstitialPage.js index 149e1e141b..87f415130f 100644 --- a/scripts/system/interstitialPage.js +++ b/scripts/system/interstitialPage.js @@ -15,8 +15,8 @@ (function() { Script.include("/~/system/libraries/Xform.js"); var DEBUG = true; - var MAX_X_SIZE = 4; - var EPSILON = 0.25; + var MAX_X_SIZE = 3.8; + var EPSILON = 0.01; var isVisible = false; var STABILITY = 3.0; var VOLUME = 0.4; @@ -149,8 +149,8 @@ var loadingBarPlacard = Overlays.addOverlay("image3d", { name: "Loading-Bar-Placard", - localPosition: { x: 0.0, y: -0.99, z: 0.0 }, - url: "http://hifi-content.s3.amazonaws.com/alexia/LoadingScreens/loadingBar_placard.png", + localPosition: { x: 0.0, y: -0.99, z: 0.3 }, + url: Script.resourcesPath() + "images/loadingBar_placard.png", alpha: 1, dimensions: { x: 4, y: 2.8}, visible: isVisible, @@ -164,10 +164,10 @@ var loadingBarProgress = Overlays.addOverlay("image3d", { name: "Loading-Bar-Progress", - localPosition: { x: 0.0, y: -0.99, z: 0.0 }, - url: Script.resourcesPath() + "images/loadingBar_v1.png", + localPosition: { x: 0.0, y: -0.90, z: 0.0 }, + url: Script.resourcesPath() + "images/loadingBar_progress.png", alpha: 1, - dimensions: {x: 4, y: 2.8}, + dimensions: {x: 3.8, y: 2.8}, visible: isVisible, emissive: true, ignoreRayIntersection: false, @@ -285,7 +285,7 @@ } } - var THE_PLACE = "hifi://TheSpot"; + var THE_PLACE = "hifi://TheSpot-dev"; function clickedOnOverlay(overlayID, event) { print(overlayID + " other: " + loadingToTheSpotID); if (loadingToTheSpotID === overlayID) { @@ -309,6 +309,11 @@ visible: !physicsEnabled }; + var loadingBarProperties = { + dimensions: { x: 0.0, y: 2.8 }, + visible: !physicsEnabled + }; + // Menu.setIsOptionChecked("Show Overlays", physicsEnabled); if (!HMD.active) { @@ -324,7 +329,7 @@ Overlays.editOverlay(domainDescription, domainTextProperties); Overlays.editOverlay(domainToolTip, properties); Overlays.editOverlay(loadingBarPlacard, properties); - Overlays.editOverlay(loadingBarProgress, properties); + Overlays.editOverlay(loadingBarProgress, loadingBarProperties); Camera.mode = "first person"; } @@ -349,13 +354,13 @@ lastInterval = thisInterval; timeElapsed += deltaTime; - progress += MAX_X_SIZE * (deltaTime / 1000); - print(progress); + progress += (deltaTime / 1000); if (progress > MAX_X_SIZE) { - progress = 4; + progress = MAX_X_SIZE; } + var properties = { - localPosition: { x: 2.0 - (progress / 2), y: -0.99, z: -0.3 }, + localPosition: { x: (1.85 - (progress / 2) - (-0.029 * (progress / MAX_X_SIZE))), y: -0.935, z: 0.0 }, dimensions: { x: progress, y: 2.8 @@ -402,7 +407,7 @@ } currentProgress = lerp(currentProgress, target, 0.2); var properties = { - localPosition: { x: 2 - (currentProgress / 2), y: -0.99, z: -0.3 }, + localPosition: { x: (1.85 - (progress / 2) - (-0.029 * (progress / MAX_X_SIZE))), y: -0.935, z: 0.0 }, dimensions: { x: currentProgress, y: 2.8 @@ -410,7 +415,7 @@ }; print("progress: " + currentProgress); Overlays.editOverlay(loadingBarProgress, properties); - if (((physicsEnabled && (currentProgress >= (MAX_X_SIZE - EPSILON))) || connectionToDomainFailed)) { + if ((physicsEnabled && (currentProgress >= (MAX_X_SIZE - EPSILON)))) { print("----------> ending <--------"); updateOverlays((physicsEnabled || connectionToDomainFailed)); endAudio(); @@ -441,7 +446,7 @@ updateOverlays(toggle); if (!toggle) { - //Script.setTimeout(updateProgress, BASIC_TIMER_INTERVAL_MS); + // Script.setTimeout(updateProgress, BASIC_TIMER_INTERVAL_MS); } }); } From 2261ad2bcbde983c607a4249477db4c7104d9dc6 Mon Sep 17 00:00:00 2001 From: Dante Ruiz Date: Mon, 20 Aug 2018 11:14:48 -0700 Subject: [PATCH 012/123] clean up the interstitial page --- interface/src/Application.cpp | 5 +-- scripts/system/interstitialPage.js | 58 ++++-------------------------- 2 files changed, 9 insertions(+), 54 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 12a3ebf887..89d1b24736 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -3459,10 +3459,11 @@ bool Application::isInterstitialMode() const { } void Application::setIsInterstitialMode(bool interstitialMode) { - bool interstitialModeEnabled = Menu::getInstance()->isOptionChecked("Enable Interstitial"); + auto menu = Menu::getInstance(); + bool interstitialModeEnabled = menu->isOptionChecked("Enable Interstitial"); if (_interstitialMode != interstitialMode && interstitialModeEnabled) { _interstitialMode = interstitialMode; - qDebug() << "-------> interstitial mode changed: " << _interstitialMode << " ------------> "; + menu->setIsOptionChecked(MenuOption::Overlays, !_interstitialMode); emit interstitialModeChanged(_interstitialMode); } } diff --git a/scripts/system/interstitialPage.js b/scripts/system/interstitialPage.js index 87f415130f..dde3448b11 100644 --- a/scripts/system/interstitialPage.js +++ b/scripts/system/interstitialPage.js @@ -10,11 +10,11 @@ // /* global Script, Controller, Overlays, Quat, MyAvatar, Entities, print, Vec3, AddressManager, Render, Window, Toolbars, - Camera, HMD, location, Account*/ + Camera, HMD, location, Account, Xform*/ (function() { Script.include("/~/system/libraries/Xform.js"); - var DEBUG = true; + var DEBUG = false; var MAX_X_SIZE = 3.8; var EPSILON = 0.01; var isVisible = false; @@ -24,7 +24,6 @@ var sample = null; var MAX_LEFT_MARGIN = 1.9; var INNER_CIRCLE_WIDTH = 4.7; - var DESTINATION_CARD_Y_OFFSET = 2; var DEFAULT_Z_OFFSET = 5.45; var renderViewTask = Render.getConfig("RenderMainView"); @@ -83,7 +82,7 @@ }); - var domainName = "Test"; + var domainName = ""; var domainNameTextID = Overlays.addOverlay("text3d", { name: "Loading-Destination-Card-Text", localPosition: { x: 0.0, y: 0.8, z: 0.0 }, @@ -179,9 +178,7 @@ 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; var currentDomain = ""; var timer = null; var target = 0; @@ -206,16 +203,12 @@ return leftMargin; } - function resetValues() { - } - function lerp(a, b, t) { return ((1 - t) * a + t * b); } function startInterstitialPage() { if (timer === null) { - print("----------> starting <----------"); updateOverlays(Window.isPhysicsEnabled()); startAudio(); target = 0; @@ -255,7 +248,6 @@ uri: url }, function(error, data) { if (data.status === "success") { - print("-----------> settings domain description <----------"); var domainInfo = data.data; var domainDescriptionText = domainInfo.place.description; print("domainText: " + domainDescriptionText); @@ -346,44 +338,11 @@ Overlays.editOverlay(anchorOverlay, { localPosition: localPosition }); } - var progress = 0; - function updateProgress() { - print("updateProgress"); - var thisInterval = Date.now(); - var deltaTime = (thisInterval - lastInterval); - lastInterval = thisInterval; - timeElapsed += deltaTime; - - progress += (deltaTime / 1000); - if (progress > MAX_X_SIZE) { - progress = MAX_X_SIZE; - } - - var properties = { - localPosition: { x: (1.85 - (progress / 2) - (-0.029 * (progress / MAX_X_SIZE))), y: -0.935, z: 0.0 }, - dimensions: { - x: progress, - y: 2.8 - } - }; - - if (progress >= MAX_X_SIZE) { - progress = 0; - } - - Overlays.editOverlay(loadingBarProgress, properties); - - if (!toggle) { - Script.setTimeout(updateProgress, BASIC_TIMER_INTERVAL_MS); - } - } - function update() { var physicsEnabled = Window.isPhysicsEnabled(); var thisInterval = Date.now(); var deltaTime = (thisInterval - lastInterval); lastInterval = thisInterval; - timeElapsed += deltaTime; var nearbyEntitiesReadyCount = Window.getPhysicsNearbyEntitiesReadyCount(); var stabilityCount = Window.getPhysicsNearbyEntitiesStabilityCount(); @@ -407,16 +366,15 @@ } currentProgress = lerp(currentProgress, target, 0.2); var properties = { - localPosition: { x: (1.85 - (progress / 2) - (-0.029 * (progress / MAX_X_SIZE))), y: -0.935, z: 0.0 }, + localPosition: { x: (1.85 - (currentProgress / 2) - (-0.029 * (currentProgress / MAX_X_SIZE))), y: -0.935, z: 0.0 }, dimensions: { x: currentProgress, y: 2.8 } }; - print("progress: " + currentProgress); + Overlays.editOverlay(loadingBarProgress, properties); if ((physicsEnabled && (currentProgress >= (MAX_X_SIZE - EPSILON)))) { - print("----------> ending <--------"); updateOverlays((physicsEnabled || connectionToDomainFailed)); endAudio(); timer = null; @@ -431,7 +389,7 @@ Script.setTimeout(function() { print("location connected: " + location.isConnected); connectionToDomainFailed = !location.isConnected; - }, 300); + }, 1200); }); MyAvatar.sensorToWorldScaleChanged.connect(scaleInterstitialPage); @@ -444,10 +402,6 @@ button.clicked.connect(function() { toggle = !toggle; updateOverlays(toggle); - - if (!toggle) { - // Script.setTimeout(updateProgress, BASIC_TIMER_INTERVAL_MS); - } }); } From b2fb2c7f9832c529d8c1530f5b350e80db5a31e7 Mon Sep 17 00:00:00 2001 From: Dante Ruiz Date: Tue, 21 Aug 2018 10:45:59 -0700 Subject: [PATCH 013/123] fix build error --- interface/src/Application.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index afad67b43e..9d5a7a01f8 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -1373,7 +1373,7 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo }); connect(this, &Application::activeDisplayPluginChanged, reinterpret_cast(audioScriptingInterface.data()), &scripting::Audio::onContextChanged); - connect(this, &Application::interstitialModeChanged, audioIO.data(), &AudioClient::setInterstitialStatus); + connect(this, &Application::interstitialModeChanged, audioIO, &AudioClient::setInterstitialStatus); } // Create the rendering engine. This can be slow on some machines due to lots of From 26a30edec9f2d1c659d65b598a9bb9844c77040f Mon Sep 17 00:00:00 2001 From: Dante Ruiz Date: Tue, 21 Aug 2018 18:27:21 -0700 Subject: [PATCH 014/123] trying to fix loading bar --- interface/src/Application.h | 2 ++ .../src/octree/OctreePacketProcessor.cpp | 4 ++++ interface/src/octree/OctreePacketProcessor.h | 1 + interface/src/octree/SafeLanding.cpp | 18 +++++++++++++++ interface/src/octree/SafeLanding.h | 2 ++ .../scripting/WindowScriptingInterface.cpp | 12 ++-------- .../src/scripting/WindowScriptingInterface.h | 4 +--- scripts/system/interstitialPage.js | 23 ++++++------------- 8 files changed, 37 insertions(+), 29 deletions(-) diff --git a/interface/src/Application.h b/interface/src/Application.h index 312920c4ac..db637f57e8 100644 --- a/interface/src/Application.h +++ b/interface/src/Application.h @@ -232,6 +232,8 @@ public: bool getPreferAvatarFingerOverStylus() { return false; } void setPreferAvatarFingerOverStylus(bool value); + float getDomainLoadProgress() { return _octreeProcessor.domainLoadProgress(); } + float getSettingConstrainToolbarPosition() { return _constrainToolbarPosition.get(); } void setSettingConstrainToolbarPosition(bool setting); diff --git a/interface/src/octree/OctreePacketProcessor.cpp b/interface/src/octree/OctreePacketProcessor.cpp index 4bc6817a9e..11f6bbae13 100644 --- a/interface/src/octree/OctreePacketProcessor.cpp +++ b/interface/src/octree/OctreePacketProcessor.cpp @@ -137,3 +137,7 @@ void OctreePacketProcessor::startEntitySequence() { bool OctreePacketProcessor::isLoadSequenceComplete() const { return _safeLanding->isLoadSequenceComplete(); } + +float OctreePacketProcessor::domainLoadProgress() { + return _safeLanding->loadingProgressPercentage(); +} diff --git a/interface/src/octree/OctreePacketProcessor.h b/interface/src/octree/OctreePacketProcessor.h index f9c24ddc51..fb8f0b581a 100644 --- a/interface/src/octree/OctreePacketProcessor.h +++ b/interface/src/octree/OctreePacketProcessor.h @@ -27,6 +27,7 @@ public: void startEntitySequence(); bool isLoadSequenceComplete() const; + float domainLoadProgress(); signals: void packetVersionMismatch(); diff --git a/interface/src/octree/SafeLanding.cpp b/interface/src/octree/SafeLanding.cpp index 31106457fb..8c0d51a344 100644 --- a/interface/src/octree/SafeLanding.cpp +++ b/interface/src/octree/SafeLanding.cpp @@ -53,6 +53,7 @@ void SafeLanding::startEntitySequence(QSharedPointer entityT void SafeLanding::stopEntitySequence() { Locker lock(_lock); _trackingEntities = false; + _maxTrackedEntityCount = 0; _initialStart = INVALID_SEQUENCE; _initialEnd = INVALID_SEQUENCE; _trackedEntities.clear(); @@ -75,6 +76,11 @@ void SafeLanding::addTrackedEntity(const EntityItemID& entityID) { if (hasAABox && downloadedCollisionTypes.count(modelEntity->getShapeType()) != 0) { // Only track entities with downloaded collision bodies. _trackedEntities.emplace(entityID, entity); + int currentTrackedEntityCount = _trackedEntities.size(); + if (currentTrackedEntityCount > _maxTrackedEntityCount) { + _maxTrackedEntityCount = currentTrackedEntityCount; + } + qCDebug(interfaceapp) << "Safe Landing: Tracking entity " << entity->getItemName(); } } @@ -116,6 +122,18 @@ bool SafeLanding::isLoadSequenceComplete() { return !_trackingEntities; } +float SafeLanding::loadingProgressPercentage() { + float percentage = 0; + + if (_maxTrackedEntityCount != 0) { + int trackedEntityCount = _trackedEntities.size(); + percentage = (_maxTrackedEntityCount - trackedEntityCount) / _maxTrackedEntityCount; + } + + qDebug() << "----------> percentage: " << percentage << " <--------"; + return percentage; +} + bool SafeLanding::isSequenceNumbersComplete() { if (_initialStart != INVALID_SEQUENCE) { Locker lock(_lock); diff --git a/interface/src/octree/SafeLanding.h b/interface/src/octree/SafeLanding.h index 210dfbac25..8ef88a055e 100644 --- a/interface/src/octree/SafeLanding.h +++ b/interface/src/octree/SafeLanding.h @@ -29,6 +29,7 @@ public: void setCompletionSequenceNumbers(int first, int last); void noteReceivedsequenceNumber(int sequenceNumber); bool isLoadSequenceComplete(); + float loadingProgressPercentage(); private slots: void addTrackedEntity(const EntityItemID& entityID); @@ -49,6 +50,7 @@ private: static constexpr int INVALID_SEQUENCE = -1; int _initialStart { INVALID_SEQUENCE }; int _initialEnd { INVALID_SEQUENCE }; + int _maxTrackedEntityCount { 0 }; struct SequenceLessThan { bool operator()(const int& a, const int& b) const; diff --git a/interface/src/scripting/WindowScriptingInterface.cpp b/interface/src/scripting/WindowScriptingInterface.cpp index 68be55f88a..f422a6a8fa 100644 --- a/interface/src/scripting/WindowScriptingInterface.cpp +++ b/interface/src/scripting/WindowScriptingInterface.cpp @@ -589,14 +589,6 @@ void WindowScriptingInterface::onMessageBoxSelected(int button) { } -int WindowScriptingInterface::getPhysicsNearbyEntitiesReadyCount() { - return qApp->getNearbyEntitiesReadyCount(); -} - -int WindowScriptingInterface::getPhysicsNearbyEntitiesStabilityCount() { - return qApp->getEntitiesStabilityCount(); -} - -int WindowScriptingInterface::getPhysicsNearbyEntitiesCount() { - return qApp->getNearbyEntitiesCount(); +float WindowScriptingInterface::domainLoadingProgress() { + return qApp->getDomainLoadProgress(); } diff --git a/interface/src/scripting/WindowScriptingInterface.h b/interface/src/scripting/WindowScriptingInterface.h index 7b0b6435f7..3dcd8cfeed 100644 --- a/interface/src/scripting/WindowScriptingInterface.h +++ b/interface/src/scripting/WindowScriptingInterface.h @@ -561,9 +561,7 @@ public slots: */ void closeMessageBox(int id); - int getPhysicsNearbyEntitiesReadyCount(); - int getPhysicsNearbyEntitiesStabilityCount(); - int getPhysicsNearbyEntitiesCount(); + float domainLoadingProgress(); private slots: void onWindowGeometryChanged(const QRect& geometry); diff --git a/scripts/system/interstitialPage.js b/scripts/system/interstitialPage.js index dde3448b11..76d2a8b958 100644 --- a/scripts/system/interstitialPage.js +++ b/scripts/system/interstitialPage.js @@ -344,26 +344,17 @@ var deltaTime = (thisInterval - lastInterval); lastInterval = thisInterval; - var nearbyEntitiesReadyCount = Window.getPhysicsNearbyEntitiesReadyCount(); - var stabilityCount = Window.getPhysicsNearbyEntitiesStabilityCount(); - var nearbyEntitiesCount = Window.getPhysicsNearbyEntitiesCount(); + var domainLoadingProgressPercentage = Window.domainLoadingProgress(); - var stabilityPercentage = (stabilityCount / STABILITY); - if (stabilityPercentage > 1) { - stabilityPercentage = 1; - } - - var stabilityProgress = (MAX_X_SIZE * 0.75) * stabilityPercentage; - - var entitiesLoadedPercentage = 1; - if (nearbyEntitiesCount > 0) { - entitiesLoadedPercentage = nearbyEntitiesReadyCount / nearbyEntitiesCount; - } - var entitiesLoadedProgress = (MAX_X_SIZE * 0.25) * entitiesLoadedPercentage; - var progress = stabilityProgress + entitiesLoadedProgress; + var progress = MAX_X_SIZE * domainLoadingProgressPercentage; + print(progress); if (progress >= target) { target = progress; } + + if (physicsEnabled && target < MAX_X_SIZE) { + target = MAX_X_SIZE; + } currentProgress = lerp(currentProgress, target, 0.2); var properties = { localPosition: { x: (1.85 - (currentProgress / 2) - (-0.029 * (currentProgress / MAX_X_SIZE))), y: -0.935, z: 0.0 }, From 54236e5c59ab8f33a52b1af381b1cbd31c2fdae1 Mon Sep 17 00:00:00 2001 From: Dante Ruiz Date: Wed, 22 Aug 2018 10:58:55 -0700 Subject: [PATCH 015/123] fixing loading bar --- interface/src/octree/SafeLanding.cpp | 42 +++++++++++++--------------- interface/src/octree/SafeLanding.h | 2 +- 2 files changed, 21 insertions(+), 23 deletions(-) diff --git a/interface/src/octree/SafeLanding.cpp b/interface/src/octree/SafeLanding.cpp index 8c0d51a344..354a4046fa 100644 --- a/interface/src/octree/SafeLanding.cpp +++ b/interface/src/octree/SafeLanding.cpp @@ -66,23 +66,20 @@ void SafeLanding::addTrackedEntity(const EntityItemID& entityID) { EntityItemPointer entity = _entityTree->findEntityByID(entityID); if (entity && !entity->getCollisionless()) { - const auto& entityType = entity->getType(); - if (entityType == EntityTypes::Model) { - ModelEntityItem * modelEntity = std::dynamic_pointer_cast(entity).get(); - static const std::set downloadedCollisionTypes - { SHAPE_TYPE_COMPOUND, SHAPE_TYPE_SIMPLE_COMPOUND, SHAPE_TYPE_STATIC_MESH, SHAPE_TYPE_SIMPLE_HULL }; - bool hasAABox; - entity->getAABox(hasAABox); - if (hasAABox && downloadedCollisionTypes.count(modelEntity->getShapeType()) != 0) { - // Only track entities with downloaded collision bodies. - _trackedEntities.emplace(entityID, entity); - int currentTrackedEntityCount = _trackedEntities.size(); - if (currentTrackedEntityCount > _maxTrackedEntityCount) { - _maxTrackedEntityCount = currentTrackedEntityCount; - } + static const std::set downloadedCollisionTypes + { SHAPE_TYPE_COMPOUND, SHAPE_TYPE_SIMPLE_COMPOUND, SHAPE_TYPE_STATIC_MESH, SHAPE_TYPE_SIMPLE_HULL }; + bool hasAABox; + entity->getAABox(hasAABox); + if (hasAABox && downloadedCollisionTypes.count(entity->getShapeType()) != 0) { + // Only track entities with downloaded collision bodies. + _trackedEntities.emplace(entityID, entity); - qCDebug(interfaceapp) << "Safe Landing: Tracking entity " << entity->getItemName(); + float trackedEntityCount = (float)_trackedEntities.size(); + + if (trackedEntityCount > _maxTrackedEntityCount) { + _maxTrackedEntityCount = trackedEntityCount; } + qCDebug(interfaceapp) << "Safe Landing: Tracking entity " << entity->getItemName(); } } } @@ -123,15 +120,15 @@ bool SafeLanding::isLoadSequenceComplete() { } float SafeLanding::loadingProgressPercentage() { - float percentage = 0; - - if (_maxTrackedEntityCount != 0) { - int trackedEntityCount = _trackedEntities.size(); - percentage = (_maxTrackedEntityCount - trackedEntityCount) / _maxTrackedEntityCount; + Locker lock(_lock); + if (_maxTrackedEntityCount > 0) { + float trackedEntityCount = (float)_trackedEntities.size(); + qDebug() << "pocessed: " << (_maxTrackedEntityCount - trackedEntityCount) << " -> total: " << _maxTrackedEntityCount; + qDebug() << ((_maxTrackedEntityCount - trackedEntityCount) / _maxTrackedEntityCount); + return ((_maxTrackedEntityCount - trackedEntityCount) / _maxTrackedEntityCount); } - qDebug() << "----------> percentage: " << percentage << " <--------"; - return percentage; + return 0.0f; } bool SafeLanding::isSequenceNumbersComplete() { @@ -158,6 +155,7 @@ bool SafeLanding::isEntityPhysicsComplete() { auto entity = entityMapIter->second; if (!entity->shouldBePhysical() || entity->isReadyToComputeShape()) { entityMapIter = _trackedEntities.erase(entityMapIter); + qDebug() << "--> removing entity <--"; if (entityMapIter == _trackedEntities.end()) { break; } diff --git a/interface/src/octree/SafeLanding.h b/interface/src/octree/SafeLanding.h index 8ef88a055e..e1288f86ce 100644 --- a/interface/src/octree/SafeLanding.h +++ b/interface/src/octree/SafeLanding.h @@ -50,7 +50,7 @@ private: static constexpr int INVALID_SEQUENCE = -1; int _initialStart { INVALID_SEQUENCE }; int _initialEnd { INVALID_SEQUENCE }; - int _maxTrackedEntityCount { 0 }; + float _maxTrackedEntityCount { 0.0f }; struct SequenceLessThan { bool operator()(const int& a, const int& b) const; From 535fdf32cfbbb89df0775a6899e74c113ac4077e Mon Sep 17 00:00:00 2001 From: Dante Ruiz Date: Wed, 22 Aug 2018 13:13:00 -0700 Subject: [PATCH 016/123] saving changes --- interface/src/octree/SafeLanding.cpp | 27 +++++++++++++++------------ interface/src/ui/OverlayConductor.cpp | 1 + scripts/system/interstitialPage.js | 20 ++++++++++++++++++++ 3 files changed, 36 insertions(+), 12 deletions(-) diff --git a/interface/src/octree/SafeLanding.cpp b/interface/src/octree/SafeLanding.cpp index 354a4046fa..c1556b908d 100644 --- a/interface/src/octree/SafeLanding.cpp +++ b/interface/src/octree/SafeLanding.cpp @@ -66,20 +66,24 @@ void SafeLanding::addTrackedEntity(const EntityItemID& entityID) { EntityItemPointer entity = _entityTree->findEntityByID(entityID); if (entity && !entity->getCollisionless()) { - static const std::set downloadedCollisionTypes - { SHAPE_TYPE_COMPOUND, SHAPE_TYPE_SIMPLE_COMPOUND, SHAPE_TYPE_STATIC_MESH, SHAPE_TYPE_SIMPLE_HULL }; - bool hasAABox; - entity->getAABox(hasAABox); - if (hasAABox && downloadedCollisionTypes.count(entity->getShapeType()) != 0) { - // Only track entities with downloaded collision bodies. - _trackedEntities.emplace(entityID, entity); + const auto& entityType = entity->getType(); + if (entityType == EntityTypes::Model) { + ModelEntityItem * modelEntity = std::dynamic_pointer_cast(entity).get(); + static const std::set downloadedCollisionTypes + { SHAPE_TYPE_COMPOUND, SHAPE_TYPE_SIMPLE_COMPOUND, SHAPE_TYPE_STATIC_MESH, SHAPE_TYPE_SIMPLE_HULL }; + bool hasAABox; + entity->getAABox(hasAABox); + if (hasAABox && downloadedCollisionTypes.count(modelEntity->getShapeType()) != 0) { + // Only track entities with downloaded collision bodies. + _trackedEntities.emplace(entityID, entity); - float trackedEntityCount = (float)_trackedEntities.size(); + float trackedEntityCount = (float)_trackedEntities.size(); - if (trackedEntityCount > _maxTrackedEntityCount) { - _maxTrackedEntityCount = trackedEntityCount; + if (trackedEntityCount > _maxTrackedEntityCount) { + _maxTrackedEntityCount = trackedEntityCount; + } + qCDebug(interfaceapp) << "Safe Landing: Tracking entity " << entity->getItemName(); } - qCDebug(interfaceapp) << "Safe Landing: Tracking entity " << entity->getItemName(); } } } @@ -155,7 +159,6 @@ bool SafeLanding::isEntityPhysicsComplete() { auto entity = entityMapIter->second; if (!entity->shouldBePhysical() || entity->isReadyToComputeShape()) { entityMapIter = _trackedEntities.erase(entityMapIter); - qDebug() << "--> removing entity <--"; if (entityMapIter == _trackedEntities.end()) { break; } diff --git a/interface/src/ui/OverlayConductor.cpp b/interface/src/ui/OverlayConductor.cpp index e27001567f..398f9cf147 100644 --- a/interface/src/ui/OverlayConductor.cpp +++ b/interface/src/ui/OverlayConductor.cpp @@ -103,6 +103,7 @@ void OverlayConductor::update(float dt) { bool targetVisible = Menu::getInstance()->isOptionChecked(MenuOption::Overlays) && !_suppressedByHead; if (targetVisible != currentVisible) { + qDebug() << "setting pinned: " << !targetVisible; offscreenUi->setPinned(!targetVisible); } if (shouldRecenter && !_suppressedByHead) { diff --git a/scripts/system/interstitialPage.js b/scripts/system/interstitialPage.js index 76d2a8b958..ddfc8b3a32 100644 --- a/scripts/system/interstitialPage.js +++ b/scripts/system/interstitialPage.js @@ -207,6 +207,18 @@ return ((1 - t) * a + t * b); } + function resetValues() { + var properties = { + localPosition: { x: 1.85, y: -0.935, z: 0.0 }, + dimensions: { + x: 0.1, + y: 2.8 + } + }; + + Overlays.editOverlay(loadingBarProgress, properties); + } + function startInterstitialPage() { if (timer === null) { updateOverlays(Window.isPhysicsEnabled()); @@ -323,6 +335,10 @@ Overlays.editOverlay(loadingBarPlacard, properties); Overlays.editOverlay(loadingBarProgress, loadingBarProperties); + if (physicsEnabled) { + resetValues(); + } + Camera.mode = "first person"; } @@ -409,6 +425,10 @@ if (DEBUG) { tablet.removeButton(button); } + + renderViewTask.getConfig("LightingModel")["enableAmbientLight"] = true; + renderViewTask.getConfig("LightingModel")["enableDirectionalLight"] = true; + renderViewTask.getConfig("LightingModel")["enablePointLight"] = true; } Script.scriptEnding.connect(cleanup); From 78458d62de4b6ee94ae1cd2673d1b1c8286584dd Mon Sep 17 00:00:00 2001 From: Dante Ruiz Date: Wed, 22 Aug 2018 15:20:56 -0700 Subject: [PATCH 017/123] revert some changes and fix toolbar issue --- interface/src/Application.cpp | 3 ++- interface/src/octree/SafeLanding.cpp | 2 -- scripts/system/interstitialPage.js | 2 ++ 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 9d5a7a01f8..b437e7bd28 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -3458,7 +3458,8 @@ void Application::setIsInterstitialMode(bool interstitialMode) { bool interstitialModeEnabled = menu->isOptionChecked("Enable Interstitial"); if (_interstitialMode != interstitialMode && interstitialModeEnabled) { _interstitialMode = interstitialMode; - menu->setIsOptionChecked(MenuOption::Overlays, !_interstitialMode); + + DependencyManager::get()->setPinned(_interstitialMode); emit interstitialModeChanged(_interstitialMode); } } diff --git a/interface/src/octree/SafeLanding.cpp b/interface/src/octree/SafeLanding.cpp index c1556b908d..d8d9a1720a 100644 --- a/interface/src/octree/SafeLanding.cpp +++ b/interface/src/octree/SafeLanding.cpp @@ -127,8 +127,6 @@ float SafeLanding::loadingProgressPercentage() { Locker lock(_lock); if (_maxTrackedEntityCount > 0) { float trackedEntityCount = (float)_trackedEntities.size(); - qDebug() << "pocessed: " << (_maxTrackedEntityCount - trackedEntityCount) << " -> total: " << _maxTrackedEntityCount; - qDebug() << ((_maxTrackedEntityCount - trackedEntityCount) / _maxTrackedEntityCount); return ((_maxTrackedEntityCount - trackedEntityCount) / _maxTrackedEntityCount); } diff --git a/scripts/system/interstitialPage.js b/scripts/system/interstitialPage.js index ddfc8b3a32..3f1fc58b55 100644 --- a/scripts/system/interstitialPage.js +++ b/scripts/system/interstitialPage.js @@ -27,6 +27,7 @@ var DEFAULT_Z_OFFSET = 5.45; var renderViewTask = Render.getConfig("RenderMainView"); + var toolbar = Toolbars.getToolbar("com.highfidelity.interface.toolbar.system"); var request = Script.require('request').request; var BUTTON_PROPERTIES = { text: "Interstitial" @@ -336,6 +337,7 @@ Overlays.editOverlay(loadingBarProgress, loadingBarProperties); if (physicsEnabled) { + toolbar.writeProperty("visible", true); resetValues(); } From db8e1bdfa34610031d9dd6ca8aa86bd15fb275af Mon Sep 17 00:00:00 2001 From: Dante Ruiz Date: Wed, 22 Aug 2018 16:47:18 -0700 Subject: [PATCH 018/123] compile error fix --- interface/src/Application.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index cc8736a481..6b2781417d 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -2258,8 +2258,8 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo if (_avatarOverrideUrl.isValid()) { getMyAvatar()->useFullAvatarURL(_avatarOverrideUrl); } - static const QUrl empty{}; - if (getMyAvatar()->getFullAvatarURLFromPreferences() != getMyAvatar()->cannonicalSkeletonModelURL(empty)) { + + if (getMyAvatar()->getFullAvatarURLFromPreferences() != getMyAvatar()->getSkeletonModelURL()) { getMyAvatar()->resetFullAvatarURL(); } getMyAvatar()->markIdentityDataChanged(); From bb83a2f620955a56d8ccdf30d218dc3066fe6bff Mon Sep 17 00:00:00 2001 From: Dante Ruiz Date: Wed, 22 Aug 2018 16:48:10 -0700 Subject: [PATCH 019/123] interstitial script ending cleanup fixes --- scripts/system/interstitialPage.js | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/system/interstitialPage.js b/scripts/system/interstitialPage.js index 3f1fc58b55..1507c7bd9a 100644 --- a/scripts/system/interstitialPage.js +++ b/scripts/system/interstitialPage.js @@ -431,6 +431,7 @@ renderViewTask.getConfig("LightingModel")["enableAmbientLight"] = true; renderViewTask.getConfig("LightingModel")["enableDirectionalLight"] = true; renderViewTask.getConfig("LightingModel")["enablePointLight"] = true; + toolbar.writeProperty("visible", true); } Script.scriptEnding.connect(cleanup); From 8c422cb0ebf6f29ff90682eb1431f5b44357b717 Mon Sep 17 00:00:00 2001 From: David Back Date: Wed, 22 Aug 2018 16:54:59 -0700 Subject: [PATCH 020/123] change corner cubes to center cube, replace spheres with cubes --- .../system/libraries/entitySelectionTool.js | 362 +++++++----------- 1 file changed, 134 insertions(+), 228 deletions(-) diff --git a/scripts/system/libraries/entitySelectionTool.js b/scripts/system/libraries/entitySelectionTool.js index 1c7d5244a1..bc36024e07 100644 --- a/scripts/system/libraries/entitySelectionTool.js +++ b/scripts/system/libraries/entitySelectionTool.js @@ -433,14 +433,14 @@ SelectionDisplay = (function() { var ROTATE_DISPLAY_SIZE_Y_MULTIPLIER = 0.09; var ROTATE_DISPLAY_LINE_HEIGHT_MULTIPLIER = 0.07; - var STRETCH_SPHERE_OFFSET = 0.06; - var STRETCH_SPHERE_CAMERA_DISTANCE_MULTIPLE = 0.01; + var STRETCH_CUBE_OFFSET = 0.06; + var STRETCH_CUBE_CAMERA_DISTANCE_MULTIPLE = 0.02; var STRETCH_MINIMUM_DIMENSION = 0.001; var STRETCH_ALL_MINIMUM_DIMENSION = 0.01; var STRETCH_DIRECTION_ALL_CAMERA_DISTANCE_MULTIPLE = 6; var STRETCH_PANEL_WIDTH = 0.01; - var SCALE_CUBE_OFFSET = 0.5; + var SCALE_EDGE_OFFSET = 0.5; var SCALE_CUBE_CAMERA_DISTANCE_MULTIPLE = 0.0125; var CLONER_OFFSET = { x: 0.9, y: -0.9, z: 0.9 }; @@ -589,20 +589,18 @@ SelectionDisplay = (function() { leftMargin: 0 }); - var handlePropertiesStretchSpheres = { - alpha: 1, - shape: "Sphere", + var handlePropertiesStretchCubes = { solid: true, visible: false, ignoreRayIntersection: false, drawInFront: true }; - var handleStretchXSphere = Overlays.addOverlay("shape", handlePropertiesStretchSpheres); - Overlays.editOverlay(handleStretchXSphere, { color: COLOR_RED }); - var handleStretchYSphere = Overlays.addOverlay("shape", handlePropertiesStretchSpheres); - Overlays.editOverlay(handleStretchYSphere, { color: COLOR_GREEN }); - var handleStretchZSphere = Overlays.addOverlay("shape", handlePropertiesStretchSpheres); - Overlays.editOverlay(handleStretchZSphere, { color: COLOR_BLUE }); + var handleStretchXCube = Overlays.addOverlay("cube", handlePropertiesStretchCubes); + Overlays.editOverlay(handleStretchXCube, { color: COLOR_RED }); + var handleStretchYCube = Overlays.addOverlay("cube", handlePropertiesStretchCubes); + Overlays.editOverlay(handleStretchYCube, { color: COLOR_GREEN }); + var handleStretchZCube = Overlays.addOverlay("cube", handlePropertiesStretchCubes); + Overlays.editOverlay(handleStretchZCube, { color: COLOR_BLUE }); var handlePropertiesStretchPanel = { shape: "Quad", @@ -619,8 +617,7 @@ SelectionDisplay = (function() { var handleStretchZPanel = Overlays.addOverlay("shape", handlePropertiesStretchPanel); Overlays.editOverlay(handleStretchZPanel, { color: COLOR_BLUE }); - var handlePropertiesScaleCubes = { - alpha: 1, + var handleScaleCube = Overlays.addOverlay("cube", { size: 0.025, color: COLOR_SCALE_CUBE, solid: true, @@ -628,15 +625,7 @@ SelectionDisplay = (function() { ignoreRayIntersection: false, drawInFront: true, borderSize: 1.4 - }; - var handleScaleLBNCube = Overlays.addOverlay("cube", handlePropertiesScaleCubes); // (-x, -y, -z) - var handleScaleRBNCube = Overlays.addOverlay("cube", handlePropertiesScaleCubes); // ( x, -y, -z) - var handleScaleLBFCube = Overlays.addOverlay("cube", handlePropertiesScaleCubes); // (-x, -y, z) - var handleScaleRBFCube = Overlays.addOverlay("cube", handlePropertiesScaleCubes); // ( x, -y, z) - var handleScaleLTNCube = Overlays.addOverlay("cube", handlePropertiesScaleCubes); // (-x, y, -z) - var handleScaleRTNCube = Overlays.addOverlay("cube", handlePropertiesScaleCubes); // ( x, y, -z) - var handleScaleLTFCube = Overlays.addOverlay("cube", handlePropertiesScaleCubes); // (-x, y, z) - var handleScaleRTFCube = Overlays.addOverlay("cube", handlePropertiesScaleCubes); // ( x, y, z) + }); var handlePropertiesScaleEdge = { alpha: 1, @@ -738,20 +727,13 @@ SelectionDisplay = (function() { handleRotateRollRing, handleRotateCurrentRing, rotationDegreesDisplay, - handleStretchXSphere, - handleStretchYSphere, - handleStretchZSphere, + handleStretchXCube, + handleStretchYCube, + handleStretchZCube, handleStretchXPanel, handleStretchYPanel, handleStretchZPanel, - handleScaleLBNCube, - handleScaleRBNCube, - handleScaleLBFCube, - handleScaleRBFCube, - handleScaleLTNCube, - handleScaleRTNCube, - handleScaleLTFCube, - handleScaleRTFCube, + handleScaleCube, handleScaleTREdge, handleScaleTLEdge, handleScaleTFEdge, @@ -787,21 +769,14 @@ SelectionDisplay = (function() { overlayNames[handleRotateCurrentRing] = "handleRotateCurrentRing"; overlayNames[rotationDegreesDisplay] = "rotationDegreesDisplay"; - overlayNames[handleStretchXSphere] = "handleStretchXSphere"; - overlayNames[handleStretchYSphere] = "handleStretchYSphere"; - overlayNames[handleStretchZSphere] = "handleStretchZSphere"; + overlayNames[handleStretchXCube] = "handleStretchXCube"; + overlayNames[handleStretchYCube] = "handleStretchYCube"; + overlayNames[handleStretchZCube] = "handleStretchZCube"; overlayNames[handleStretchXPanel] = "handleStretchXPanel"; overlayNames[handleStretchYPanel] = "handleStretchYPanel"; overlayNames[handleStretchZPanel] = "handleStretchZPanel"; - overlayNames[handleScaleLBNCube] = "handleScaleLBNCube"; - overlayNames[handleScaleRBNCube] = "handleScaleRBNCube"; - overlayNames[handleScaleLBFCube] = "handleScaleLBFCube"; - overlayNames[handleScaleRBFCube] = "handleScaleRBFCube"; - overlayNames[handleScaleLTNCube] = "handleScaleLTNCube"; - overlayNames[handleScaleRTNCube] = "handleScaleRTNCube"; - overlayNames[handleScaleLTFCube] = "handleScaleLTFCube"; - overlayNames[handleScaleRTFCube] = "handleScaleRTFCube"; + overlayNames[handleScaleCube] = "handleScaleCube"; overlayNames[handleScaleTREdge] = "handleScaleTREdge"; overlayNames[handleScaleTLEdge] = "handleScaleTLEdge"; @@ -1021,32 +996,25 @@ SelectionDisplay = (function() { case handleTranslateXCone: case handleTranslateXCylinder: case handleRotatePitchRing: - case handleStretchXSphere: + case handleStretchXCube: pickedColor = COLOR_RED; highlightNeeded = true; break; case handleTranslateYCone: case handleTranslateYCylinder: case handleRotateYawRing: - case handleStretchYSphere: + case handleStretchYCube: pickedColor = COLOR_GREEN; highlightNeeded = true; break; case handleTranslateZCone: case handleTranslateZCylinder: case handleRotateRollRing: - case handleStretchZSphere: + case handleStretchZCube: pickedColor = COLOR_BLUE; highlightNeeded = true; break; - case handleScaleLBNCube: - case handleScaleRBNCube: - case handleScaleLBFCube: - case handleScaleRBFCube: - case handleScaleLTNCube: - case handleScaleRTNCube: - case handleScaleLTFCube: - case handleScaleRTFCube: + case handleScaleCube: pickedColor = COLOR_SCALE_CUBE; highlightNeeded = true; break; @@ -1424,127 +1392,83 @@ SelectionDisplay = (function() { dimensions: arrowConeDimensions }); - // UPDATE SCALE CUBES - var scaleCubeOffsetX = SCALE_CUBE_OFFSET * dimensions.x; - var scaleCubeOffsetY = SCALE_CUBE_OFFSET * dimensions.y; - var scaleCubeOffsetZ = SCALE_CUBE_OFFSET * dimensions.z; - var scaleCubeRotation = spaceMode === SPACE_LOCAL ? rotation : Quat.IDENTITY; - var scaleLBNCubePosition = { x: -scaleCubeOffsetX, y: -scaleCubeOffsetY, z: -scaleCubeOffsetZ }; - scaleLBNCubePosition = Vec3.sum(position, Vec3.multiplyQbyV(rotation, scaleLBNCubePosition)); - var scaleLBNCubeToCamera = getDistanceToCamera(scaleLBNCubePosition); - var scaleRBNCubePosition = { x: scaleCubeOffsetX, y: -scaleCubeOffsetY, z: -scaleCubeOffsetZ }; - scaleRBNCubePosition = Vec3.sum(position, Vec3.multiplyQbyV(rotation, scaleRBNCubePosition)); - var scaleRBNCubeToCamera = getDistanceToCamera(scaleRBNCubePosition); - var scaleLBFCubePosition = { x: -scaleCubeOffsetX, y: -scaleCubeOffsetY, z: scaleCubeOffsetZ }; - scaleLBFCubePosition = Vec3.sum(position, Vec3.multiplyQbyV(rotation, scaleLBFCubePosition)); - var scaleLBFCubeToCamera = getDistanceToCamera(scaleLBFCubePosition); - var scaleRBFCubePosition = { x: scaleCubeOffsetX, y: -scaleCubeOffsetY, z: scaleCubeOffsetZ }; - scaleRBFCubePosition = Vec3.sum(position, Vec3.multiplyQbyV(rotation, scaleRBFCubePosition)); - var scaleRBFCubeToCamera = getDistanceToCamera(scaleRBFCubePosition); - var scaleLTNCubePosition = { x: -scaleCubeOffsetX, y: scaleCubeOffsetY, z: -scaleCubeOffsetZ }; - scaleLTNCubePosition = Vec3.sum(position, Vec3.multiplyQbyV(rotation, scaleLTNCubePosition)); - var scaleLTNCubeToCamera = getDistanceToCamera(scaleLTNCubePosition); - var scaleRTNCubePosition = { x: scaleCubeOffsetX, y: scaleCubeOffsetY, z: -scaleCubeOffsetZ }; - scaleRTNCubePosition = Vec3.sum(position, Vec3.multiplyQbyV(rotation, scaleRTNCubePosition)); - var scaleRTNCubeToCamera = getDistanceToCamera(scaleRTNCubePosition); - var scaleLTFCubePosition = { x: -scaleCubeOffsetX, y: scaleCubeOffsetY, z: scaleCubeOffsetZ }; - scaleLTFCubePosition = Vec3.sum(position, Vec3.multiplyQbyV(rotation, scaleLTFCubePosition)); - var scaleLTFCubeToCamera = getDistanceToCamera(scaleLTFCubePosition); - var scaleRTFCubePosition = { x: scaleCubeOffsetX, y: scaleCubeOffsetY, z: scaleCubeOffsetZ }; - scaleRTFCubePosition = Vec3.sum(position, Vec3.multiplyQbyV(rotation, scaleRTFCubePosition)); - var scaleRTFCubeToCamera = getDistanceToCamera(scaleRTFCubePosition); - - var scaleCubeToCamera = Math.min(scaleLBNCubeToCamera, scaleRBNCubeToCamera, scaleLBFCubeToCamera, - scaleRBFCubeToCamera, scaleLTNCubeToCamera, scaleRTNCubeToCamera, - scaleLTFCubeToCamera, scaleRTFCubeToCamera); - var scaleCubeDimension = scaleCubeToCamera * SCALE_CUBE_CAMERA_DISTANCE_MULTIPLE; + // UPDATE SCALE CUBE + var scaleCubeRotation = spaceMode === SPACE_LOCAL ? rotation : Quat.IDENTITY; + var scaleCubeDimension = rotateDimension * SCALE_CUBE_CAMERA_DISTANCE_MULTIPLE / + ROTATE_RING_CAMERA_DISTANCE_MULTIPLE; var scaleCubeDimensions = { x: scaleCubeDimension, y: scaleCubeDimension, z: scaleCubeDimension }; - - Overlays.editOverlay(handleScaleLBNCube, { - position: scaleLBNCubePosition, - rotation: scaleCubeRotation, - dimensions: scaleCubeDimensions - }); - Overlays.editOverlay(handleScaleRBNCube, { - position: scaleRBNCubePosition, - rotation: scaleCubeRotation, - dimensions: scaleCubeDimensions - }); - Overlays.editOverlay(handleScaleLBFCube, { - position: scaleLBFCubePosition, - rotation: scaleCubeRotation, - dimensions: scaleCubeDimensions - }); - Overlays.editOverlay(handleScaleRBFCube, { - position: scaleRBFCubePosition, - rotation: scaleCubeRotation, - dimensions: scaleCubeDimensions - }); - Overlays.editOverlay(handleScaleLTNCube, { - position: scaleLTNCubePosition, - rotation: scaleCubeRotation, - dimensions: scaleCubeDimensions - }); - Overlays.editOverlay(handleScaleRTNCube, { - position: scaleRTNCubePosition, - rotation: scaleCubeRotation, - dimensions: scaleCubeDimensions - }); - Overlays.editOverlay(handleScaleLTFCube, { - position: scaleLTFCubePosition, - rotation: scaleCubeRotation, - dimensions: scaleCubeDimensions - }); - Overlays.editOverlay(handleScaleRTFCube, { - position: scaleRTFCubePosition, + Overlays.editOverlay(handleScaleCube, { + position: position, rotation: scaleCubeRotation, dimensions: scaleCubeDimensions }); // UPDATE SCALE EDGES - Overlays.editOverlay(handleScaleTREdge, { start: scaleRTNCubePosition, end: scaleRTFCubePosition }); - Overlays.editOverlay(handleScaleTLEdge, { start: scaleLTNCubePosition, end: scaleLTFCubePosition }); - Overlays.editOverlay(handleScaleTFEdge, { start: scaleLTFCubePosition, end: scaleRTFCubePosition }); - Overlays.editOverlay(handleScaleTNEdge, { start: scaleLTNCubePosition, end: scaleRTNCubePosition }); - Overlays.editOverlay(handleScaleBREdge, { start: scaleRBNCubePosition, end: scaleRBFCubePosition }); - Overlays.editOverlay(handleScaleBLEdge, { start: scaleLBNCubePosition, end: scaleLBFCubePosition }); - Overlays.editOverlay(handleScaleBFEdge, { start: scaleLBFCubePosition, end: scaleRBFCubePosition }); - Overlays.editOverlay(handleScaleBNEdge, { start: scaleLBNCubePosition, end: scaleRBNCubePosition }); - Overlays.editOverlay(handleScaleNREdge, { start: scaleRTNCubePosition, end: scaleRBNCubePosition }); - Overlays.editOverlay(handleScaleNLEdge, { start: scaleLTNCubePosition, end: scaleLBNCubePosition }); - Overlays.editOverlay(handleScaleFREdge, { start: scaleRTFCubePosition, end: scaleRBFCubePosition }); - Overlays.editOverlay(handleScaleFLEdge, { start: scaleLTFCubePosition, end: scaleLBFCubePosition }); + var edgeOffsetX = SCALE_EDGE_OFFSET * dimensions.x; + var edgeOffsetY = SCALE_EDGE_OFFSET * dimensions.y; + var edgeOffsetZ = SCALE_EDGE_OFFSET * dimensions.z; + var LBNPosition = { x: -edgeOffsetX, y: -edgeOffsetY, z: -edgeOffsetZ }; + LBNPosition = Vec3.sum(position, Vec3.multiplyQbyV(rotation, LBNPosition)); + var RBNPosition = { x: edgeOffsetX, y: -edgeOffsetY, z: -edgeOffsetZ }; + RBNPosition = Vec3.sum(position, Vec3.multiplyQbyV(rotation, RBNPosition)); + var LBFPosition = { x: -edgeOffsetX, y: -edgeOffsetY, z: edgeOffsetZ }; + LBFPosition = Vec3.sum(position, Vec3.multiplyQbyV(rotation, LBFPosition)); + var RBFPosition = { x: edgeOffsetX, y: -edgeOffsetY, z: edgeOffsetZ }; + RBFPosition = Vec3.sum(position, Vec3.multiplyQbyV(rotation, RBFPosition)); + var LTNPosition = { x: -edgeOffsetX, y: edgeOffsetY, z: -edgeOffsetZ }; + LTNPosition = Vec3.sum(position, Vec3.multiplyQbyV(rotation, LTNPosition)); + var RTNPosition = { x: edgeOffsetX, y: edgeOffsetY, z: -edgeOffsetZ }; + RTNPosition = Vec3.sum(position, Vec3.multiplyQbyV(rotation, RTNPosition)); + var LTFPosition = { x: -edgeOffsetX, y: edgeOffsetY, z: edgeOffsetZ }; + LTFPosition = Vec3.sum(position, Vec3.multiplyQbyV(rotation, LTFPosition)); + var RTFPosition = { x: edgeOffsetX, y: edgeOffsetY, z: edgeOffsetZ }; + RTFPosition = Vec3.sum(position, Vec3.multiplyQbyV(rotation, RTFPosition)); + Overlays.editOverlay(handleScaleTREdge, { start: RTNPosition, end: RTFPosition }); + Overlays.editOverlay(handleScaleTLEdge, { start: LTNPosition, end: LTFPosition }); + Overlays.editOverlay(handleScaleTFEdge, { start: LTFPosition, end: RTFPosition }); + Overlays.editOverlay(handleScaleTNEdge, { start: LTNPosition, end: RTNPosition }); + Overlays.editOverlay(handleScaleBREdge, { start: RBNPosition, end: RBFPosition }); + Overlays.editOverlay(handleScaleBLEdge, { start: LBNPosition, end: LBFPosition }); + Overlays.editOverlay(handleScaleBFEdge, { start: LBFPosition, end: RBFPosition }); + Overlays.editOverlay(handleScaleBNEdge, { start: LBNPosition, end: RBNPosition }); + Overlays.editOverlay(handleScaleNREdge, { start: RTNPosition, end: RBNPosition }); + Overlays.editOverlay(handleScaleNLEdge, { start: LTNPosition, end: LBNPosition }); + Overlays.editOverlay(handleScaleFREdge, { start: RTFPosition, end: RBFPosition }); + Overlays.editOverlay(handleScaleFLEdge, { start: LTFPosition, end: LBFPosition }); - // UPDATE STRETCH SPHERES - var stretchSphereDimension = rotateDimension * STRETCH_SPHERE_CAMERA_DISTANCE_MULTIPLE / + // UPDATE STRETCH CUBES + var stretchCubeDimension = rotateDimension * STRETCH_CUBE_CAMERA_DISTANCE_MULTIPLE / ROTATE_RING_CAMERA_DISTANCE_MULTIPLE; - var stretchSphereDimensions = { x: stretchSphereDimension, y: stretchSphereDimension, z: stretchSphereDimension }; - var stretchSphereOffset = rotateDimension * STRETCH_SPHERE_OFFSET / ROTATE_RING_CAMERA_DISTANCE_MULTIPLE; - var stretchXPosition = { x: stretchSphereOffset, y: 0, z: 0 }; + var stretchCubeDimensions = { x: stretchCubeDimension, y: stretchCubeDimension, z: stretchCubeDimension }; + var stretchCubeOffset = rotateDimension * STRETCH_CUBE_OFFSET / ROTATE_RING_CAMERA_DISTANCE_MULTIPLE; + var stretchXPosition = { x: stretchCubeOffset, y: 0, z: 0 }; stretchXPosition = Vec3.sum(position, Vec3.multiplyQbyV(rotation, stretchXPosition)); - Overlays.editOverlay(handleStretchXSphere, { + Overlays.editOverlay(handleStretchXCube, { position: stretchXPosition, - dimensions: stretchSphereDimensions + rotation: rotationX, + dimensions: stretchCubeDimensions }); - var stretchYPosition = { x: 0, y: stretchSphereOffset, z: 0 }; + var stretchYPosition = { x: 0, y: stretchCubeOffset, z: 0 }; stretchYPosition = Vec3.sum(position, Vec3.multiplyQbyV(rotation, stretchYPosition)); - Overlays.editOverlay(handleStretchYSphere, { + Overlays.editOverlay(handleStretchYCube, { position: stretchYPosition, - dimensions: stretchSphereDimensions + rotation: rotationY, + dimensions: stretchCubeDimensions }); - var stretchZPosition = { x: 0, y: 0, z: stretchSphereOffset }; + var stretchZPosition = { x: 0, y: 0, z: stretchCubeOffset }; stretchZPosition = Vec3.sum(position, Vec3.multiplyQbyV(rotation, stretchZPosition)); - Overlays.editOverlay(handleStretchZSphere, { - position: stretchZPosition, - dimensions: stretchSphereDimensions + Overlays.editOverlay(handleStretchZCube, { + position: stretchZPosition, + rotation: rotationZ, + dimensions: stretchCubeDimensions }); // UPDATE STRETCH HIGHLIGHT PANELS - var scaleRBFCubePositionRotated = Vec3.multiplyQbyV(rotationInverse, scaleRBFCubePosition); - var scaleRTFCubePositionRotated = Vec3.multiplyQbyV(rotationInverse, scaleRTFCubePosition); - var scaleLTNCubePositionRotated = Vec3.multiplyQbyV(rotationInverse, scaleLTNCubePosition); - var scaleRTNCubePositionRotated = Vec3.multiplyQbyV(rotationInverse, scaleRTNCubePosition); - var stretchPanelXDimensions = Vec3.subtract(scaleRTNCubePositionRotated, scaleRBFCubePositionRotated); + var RBFPositionRotated = Vec3.multiplyQbyV(rotationInverse, RBFPosition); + var RTFPositionRotated = Vec3.multiplyQbyV(rotationInverse, RTFPosition); + var LTNPositionRotated = Vec3.multiplyQbyV(rotationInverse, LTNPosition); + var RTNPositionRotated = Vec3.multiplyQbyV(rotationInverse, RTNPosition); + var stretchPanelXDimensions = Vec3.subtract(RTNPositionRotated, RBFPositionRotated); var tempY = Math.abs(stretchPanelXDimensions.y); stretchPanelXDimensions.x = STRETCH_PANEL_WIDTH; stretchPanelXDimensions.y = Math.abs(stretchPanelXDimensions.z); @@ -1555,7 +1479,7 @@ SelectionDisplay = (function() { rotation: rotationZ, dimensions: stretchPanelXDimensions }); - var stretchPanelYDimensions = Vec3.subtract(scaleLTNCubePositionRotated, scaleRTFCubePositionRotated); + var stretchPanelYDimensions = Vec3.subtract(LTNPositionRotated, RTFPositionRotated); var tempX = Math.abs(stretchPanelYDimensions.x); stretchPanelYDimensions.x = Math.abs(stretchPanelYDimensions.z); stretchPanelYDimensions.y = STRETCH_PANEL_WIDTH; @@ -1566,7 +1490,7 @@ SelectionDisplay = (function() { rotation: rotationY, dimensions: stretchPanelYDimensions }); - var stretchPanelZDimensions = Vec3.subtract(scaleLTNCubePositionRotated, scaleRBFCubePositionRotated); + var stretchPanelZDimensions = Vec3.subtract(LTNPositionRotated, RBFPositionRotated); tempX = Math.abs(stretchPanelZDimensions.x); stretchPanelZDimensions.x = Math.abs(stretchPanelZDimensions.y); stretchPanelZDimensions.y = tempX; @@ -1622,15 +1546,10 @@ SelectionDisplay = (function() { that.setHandleRotateRollVisible(!activeTool || isActiveTool(handleRotateRollRing)); var showScaleStretch = !activeTool && SelectionManager.selections.length === 1 && spaceMode === SPACE_LOCAL; - that.setHandleStretchXVisible(showScaleStretch || isActiveTool(handleStretchXSphere)); - that.setHandleStretchYVisible(showScaleStretch || isActiveTool(handleStretchYSphere)); - that.setHandleStretchZVisible(showScaleStretch || isActiveTool(handleStretchZSphere)); - that.setHandleScaleCubeVisible(showScaleStretch || isActiveTool(handleScaleLBNCube) || - isActiveTool(handleScaleRBNCube) || isActiveTool(handleScaleLBFCube) || - isActiveTool(handleScaleRBFCube) || isActiveTool(handleScaleLTNCube) || - isActiveTool(handleScaleRTNCube) || isActiveTool(handleScaleLTFCube) || - isActiveTool(handleScaleRTFCube) || isActiveTool(handleStretchXSphere) || - isActiveTool(handleStretchYSphere) || isActiveTool(handleStretchZSphere)); + that.setHandleStretchXVisible(showScaleStretch || isActiveTool(handleStretchXCube)); + that.setHandleStretchYVisible(showScaleStretch || isActiveTool(handleStretchYCube)); + that.setHandleStretchZVisible(showScaleStretch || isActiveTool(handleStretchZCube)); + that.setHandleScaleCubeVisible(showScaleStretch || isActiveTool(handleScaleCube)); var showOutlineForZone = (SelectionManager.selections.length === 1 && typeof SelectionManager.savedProperties[SelectionManager.selections[0]] !== "undefined" && @@ -1721,15 +1640,15 @@ SelectionDisplay = (function() { }; that.setHandleStretchXVisible = function(isVisible) { - Overlays.editOverlay(handleStretchXSphere, { visible: isVisible }); + Overlays.editOverlay(handleStretchXCube, { visible: isVisible }); }; that.setHandleStretchYVisible = function(isVisible) { - Overlays.editOverlay(handleStretchYSphere, { visible: isVisible }); + Overlays.editOverlay(handleStretchYCube, { visible: isVisible }); }; that.setHandleStretchZVisible = function(isVisible) { - Overlays.editOverlay(handleStretchZSphere, { visible: isVisible }); + Overlays.editOverlay(handleStretchZCube, { visible: isVisible }); }; // FUNCTION: SET HANDLE SCALE VISIBLE @@ -1739,14 +1658,7 @@ SelectionDisplay = (function() { }; that.setHandleScaleCubeVisible = function(isVisible) { - Overlays.editOverlay(handleScaleLBNCube, { visible: isVisible }); - Overlays.editOverlay(handleScaleRBNCube, { visible: isVisible }); - Overlays.editOverlay(handleScaleLBFCube, { visible: isVisible }); - Overlays.editOverlay(handleScaleRBFCube, { visible: isVisible }); - Overlays.editOverlay(handleScaleLTNCube, { visible: isVisible }); - Overlays.editOverlay(handleScaleRTNCube, { visible: isVisible }); - Overlays.editOverlay(handleScaleLTFCube, { visible: isVisible }); - Overlays.editOverlay(handleScaleRTFCube, { visible: isVisible }); + Overlays.editOverlay(handleScaleCube, { visible: isVisible }); }; that.setHandleScaleEdgeVisible = function(isVisible) { @@ -2157,6 +2069,8 @@ SelectionDisplay = (function() { var previousPickRay = null; var onBegin = function(event, pickRay, pickResult) { + var proportional = directionEnum === STRETCH_DIRECTION.ALL; + var properties = Entities.getEntityProperties(SelectionManager.selections[0]); initialProperties = properties; rotation = (spaceMode === SPACE_LOCAL) ? properties.rotation : Quat.IDENTITY; @@ -2244,9 +2158,17 @@ SelectionDisplay = (function() { } planeNormal = Vec3.multiplyQbyV(rotation, planeNormal); - lastPick = rayPlaneIntersection(pickRay, - pickRayPosition, - planeNormal); + + if (proportional) { + lastPick = pickRay.origin; + } else { + lastPick = rayPlaneIntersection(pickRay, + pickRayPosition, + planeNormal); + } + + Vec3.print("DBACK TEST begin pickRayPosition ", pickRayPosition); + Vec3.print("DBACK TEST begin lastPick ", lastPick); var planeNormal3D = { x: 0, @@ -2351,7 +2273,23 @@ SelectionDisplay = (function() { vector = grid.snapToSpacing(vector); var changeInDimensions = Vec3.multiply(NEGATE_VECTOR, vec3Mult(localSigns, vector)); - if (directionEnum === STRETCH_DIRECTION.ALL) { + + if (proportional) { + newPick = pickRay.origin; + var pickDifference = Vec3.subtract(newPick, lastPick); + Vec3.print("DBACK TEST move newPick ", newPick); + Vec3.print("DBACK TEST move pickDifference ", pickDifference); + changeInDimensions = + } + + //Vec3.print("DBACK TEST move pickRay.origin ", pickRay.origin); + //Vec3.print("DBACK TEST move pickRay.direction ", pickRay.direction); + //Vec3.print("DBACK TEST move newPick ", newPick); + //Vec3.print("DBACK TEST move vector ", vector); + //Vec3.print("DBACK TEST move changeInDimensions ", changeInDimensions); + + + if (proportional) { var toCameraDistance = getDistanceToCamera(position); var dimensionsMultiple = toCameraDistance * STRETCH_DIRECTION_ALL_CAMERA_DISTANCE_MULTIPLE; changeInDimensions = Vec3.multiply(changeInDimensions, dimensionsMultiple); @@ -2393,9 +2331,9 @@ SelectionDisplay = (function() { newDimensions.z = minimumDimension; changeInDimensions.z = minimumDimension - initialDimensions.z; } - + var changeInPosition = Vec3.multiplyQbyV(rotation, vec3Mult(localDeltaPivot, changeInDimensions)); - if (directionEnum === STRETCH_DIRECTION.ALL) { + if (proportional) { changeInPosition = { x: 0, y: 0, z: 0 }; } var newPosition = Vec3.sum(initialPosition, changeInPosition); @@ -2446,35 +2384,10 @@ SelectionDisplay = (function() { } // TOOL DEFINITION: HANDLE SCALE TOOL - function addHandleScaleTool(overlay, mode, directionEnum) { - var directionVector, offset, selectedHandle; - if (directionEnum === SCALE_DIRECTION.LBN) { - directionVector = { x: 1, y: 1, z: 1 }; - selectedHandle = handleScaleLBNCube; - } else if (directionEnum === SCALE_DIRECTION.RBN) { - directionVector = { x: -1, y: 1, z: 1 }; - selectedHandle = handleScaleRBNCube; - } else if (directionEnum === SCALE_DIRECTION.LBF) { - directionVector = { x: 1, y: 1, z: -1 }; - selectedHandle = handleScaleLBFCube; - } else if (directionEnum === SCALE_DIRECTION.RBF) { - directionVector = { x: -1, y: 1, z: -1 }; - selectedHandle = handleScaleRBFCube; - } else if (directionEnum === SCALE_DIRECTION.LTN) { - directionVector = { x: 1, y: -1, z: 1 }; - selectedHandle = handleScaleLTNCube; - } else if (directionEnum === SCALE_DIRECTION.RTN) { - directionVector = { x: -1, y: -1, z: 1 }; - selectedHandle = handleScaleRTNCube; - } else if (directionEnum === SCALE_DIRECTION.LTF) { - directionVector = { x: 1, y: -1, z: -1 }; - selectedHandle = handleScaleLTFCube; - } else if (directionEnum === SCALE_DIRECTION.RTF) { - directionVector = { x: -1, y: -1, z: -1 }; - selectedHandle = handleScaleRTFCube; - } - offset = Vec3.multiply(directionVector, NEGATE_VECTOR); - var tool = makeStretchTool(mode, STRETCH_DIRECTION.ALL, directionVector, directionVector, offset, null, selectedHandle); + function addHandleScaleTool(overlay, mode) { + var directionVector = { x:0, y:0, z:0 }; + var offset = { x:0, y:0, z:0 }; + var tool = makeStretchTool(mode, STRETCH_DIRECTION.ALL, directionVector, directionVector, offset, null, handleScaleCube); return addHandleTool(overlay, tool); } @@ -2747,18 +2660,11 @@ SelectionDisplay = (function() { addHandleRotateTool(handleRotateYawRing, "ROTATE_YAW", ROTATE_DIRECTION.YAW); addHandleRotateTool(handleRotateRollRing, "ROTATE_ROLL", ROTATE_DIRECTION.ROLL); - addHandleStretchTool(handleStretchXSphere, "STRETCH_X", STRETCH_DIRECTION.X); - addHandleStretchTool(handleStretchYSphere, "STRETCH_Y", STRETCH_DIRECTION.Y); - addHandleStretchTool(handleStretchZSphere, "STRETCH_Z", STRETCH_DIRECTION.Z); - - addHandleScaleTool(handleScaleLBNCube, "SCALE_LBN", SCALE_DIRECTION.LBN); - addHandleScaleTool(handleScaleRBNCube, "SCALE_RBN", SCALE_DIRECTION.RBN); - addHandleScaleTool(handleScaleLBFCube, "SCALE_LBF", SCALE_DIRECTION.LBF); - addHandleScaleTool(handleScaleRBFCube, "SCALE_RBF", SCALE_DIRECTION.RBF); - addHandleScaleTool(handleScaleLTNCube, "SCALE_LTN", SCALE_DIRECTION.LTN); - addHandleScaleTool(handleScaleRTNCube, "SCALE_RTN", SCALE_DIRECTION.RTN); - addHandleScaleTool(handleScaleLTFCube, "SCALE_LTF", SCALE_DIRECTION.LTF); - addHandleScaleTool(handleScaleRTFCube, "SCALE_RTF", SCALE_DIRECTION.RTF); + addHandleStretchTool(handleStretchXCube, "STRETCH_X", STRETCH_DIRECTION.X); + addHandleStretchTool(handleStretchYCube, "STRETCH_Y", STRETCH_DIRECTION.Y); + addHandleStretchTool(handleStretchZCube, "STRETCH_Z", STRETCH_DIRECTION.Z); + addHandleScaleTool(handleScaleCube, "SCALE"); + return that; }()); From 8eddb36c825acb3f6e5fffdc861bb6dc89bb7f31 Mon Sep 17 00:00:00 2001 From: David Back Date: Wed, 22 Aug 2018 17:29:40 -0700 Subject: [PATCH 021/123] resize scale cube --- .../system/libraries/entitySelectionTool.js | 70 +++++++------------ 1 file changed, 25 insertions(+), 45 deletions(-) diff --git a/scripts/system/libraries/entitySelectionTool.js b/scripts/system/libraries/entitySelectionTool.js index bc36024e07..f251a1611c 100644 --- a/scripts/system/libraries/entitySelectionTool.js +++ b/scripts/system/libraries/entitySelectionTool.js @@ -441,7 +441,7 @@ SelectionDisplay = (function() { var STRETCH_PANEL_WIDTH = 0.01; var SCALE_EDGE_OFFSET = 0.5; - var SCALE_CUBE_CAMERA_DISTANCE_MULTIPLE = 0.0125; + var SCALE_CUBE_CAMERA_DISTANCE_MULTIPLE = 0.02; var CLONER_OFFSET = { x: 0.9, y: -0.9, z: 0.9 }; @@ -617,7 +617,7 @@ SelectionDisplay = (function() { var handleStretchZPanel = Overlays.addOverlay("shape", handlePropertiesStretchPanel); Overlays.editOverlay(handleStretchZPanel, { color: COLOR_BLUE }); - var handleScaleCube = Overlays.addOverlay("cube", { + var handleScaleCube = Overlays.addOverlay("cube", { size: 0.025, color: COLOR_SCALE_CUBE, solid: true, @@ -1393,8 +1393,8 @@ SelectionDisplay = (function() { }); // UPDATE SCALE CUBE - var scaleCubeRotation = spaceMode === SPACE_LOCAL ? rotation : Quat.IDENTITY; - var scaleCubeDimension = rotateDimension * SCALE_CUBE_CAMERA_DISTANCE_MULTIPLE / + var scaleCubeRotation = spaceMode === SPACE_LOCAL ? rotation : Quat.IDENTITY; + var scaleCubeDimension = rotateDimension * SCALE_CUBE_CAMERA_DISTANCE_MULTIPLE / ROTATE_RING_CAMERA_DISTANCE_MULTIPLE; var scaleCubeDimensions = { x: scaleCubeDimension, y: scaleCubeDimension, z: scaleCubeDimension }; Overlays.editOverlay(handleScaleCube, { @@ -1404,10 +1404,10 @@ SelectionDisplay = (function() { }); // UPDATE SCALE EDGES - var edgeOffsetX = SCALE_EDGE_OFFSET * dimensions.x; - var edgeOffsetY = SCALE_EDGE_OFFSET * dimensions.y; - var edgeOffsetZ = SCALE_EDGE_OFFSET * dimensions.z; - var LBNPosition = { x: -edgeOffsetX, y: -edgeOffsetY, z: -edgeOffsetZ }; + var edgeOffsetX = SCALE_EDGE_OFFSET * dimensions.x; + var edgeOffsetY = SCALE_EDGE_OFFSET * dimensions.y; + var edgeOffsetZ = SCALE_EDGE_OFFSET * dimensions.z; + var LBNPosition = { x: -edgeOffsetX, y: -edgeOffsetY, z: -edgeOffsetZ }; LBNPosition = Vec3.sum(position, Vec3.multiplyQbyV(rotation, LBNPosition)); var RBNPosition = { x: edgeOffsetX, y: -edgeOffsetY, z: -edgeOffsetZ }; RBNPosition = Vec3.sum(position, Vec3.multiplyQbyV(rotation, RBNPosition)); @@ -1445,21 +1445,21 @@ SelectionDisplay = (function() { stretchXPosition = Vec3.sum(position, Vec3.multiplyQbyV(rotation, stretchXPosition)); Overlays.editOverlay(handleStretchXCube, { position: stretchXPosition, - rotation: rotationX, + rotation: rotationX, dimensions: stretchCubeDimensions }); var stretchYPosition = { x: 0, y: stretchCubeOffset, z: 0 }; stretchYPosition = Vec3.sum(position, Vec3.multiplyQbyV(rotation, stretchYPosition)); Overlays.editOverlay(handleStretchYCube, { position: stretchYPosition, - rotation: rotationY, + rotation: rotationY, dimensions: stretchCubeDimensions }); var stretchZPosition = { x: 0, y: 0, z: stretchCubeOffset }; stretchZPosition = Vec3.sum(position, Vec3.multiplyQbyV(rotation, stretchZPosition)); Overlays.editOverlay(handleStretchZCube, { position: stretchZPosition, - rotation: rotationZ, + rotation: rotationZ, dimensions: stretchCubeDimensions }); @@ -2067,10 +2067,9 @@ SelectionDisplay = (function() { var pickRayPosition3D = null; var rotation = null; var previousPickRay = null; + var beginMouseEvent = null; - var onBegin = function(event, pickRay, pickResult) { - var proportional = directionEnum === STRETCH_DIRECTION.ALL; - + var onBegin = function(event, pickRay, pickResult) { var properties = Entities.getEntityProperties(SelectionManager.selections[0]); initialProperties = properties; rotation = (spaceMode === SPACE_LOCAL) ? properties.rotation : Quat.IDENTITY; @@ -2158,17 +2157,7 @@ SelectionDisplay = (function() { } planeNormal = Vec3.multiplyQbyV(rotation, planeNormal); - - if (proportional) { - lastPick = pickRay.origin; - } else { - lastPick = rayPlaneIntersection(pickRay, - pickRayPosition, - planeNormal); - } - - Vec3.print("DBACK TEST begin pickRayPosition ", pickRayPosition); - Vec3.print("DBACK TEST begin lastPick ", lastPick); + lastPick = rayPlaneIntersection(pickRay, pickRayPosition, planeNormal); var planeNormal3D = { x: 0, @@ -2208,6 +2197,7 @@ SelectionDisplay = (function() { } previousPickRay = pickRay; + beginMouseEvent = event; }; var onEnd = function(event, reason) { @@ -2273,23 +2263,13 @@ SelectionDisplay = (function() { vector = grid.snapToSpacing(vector); var changeInDimensions = Vec3.multiply(NEGATE_VECTOR, vec3Mult(localSigns, vector)); - - if (proportional) { - newPick = pickRay.origin; - var pickDifference = Vec3.subtract(newPick, lastPick); - Vec3.print("DBACK TEST move newPick ", newPick); - Vec3.print("DBACK TEST move pickDifference ", pickDifference); - changeInDimensions = - } - - //Vec3.print("DBACK TEST move pickRay.origin ", pickRay.origin); - //Vec3.print("DBACK TEST move pickRay.direction ", pickRay.direction); - //Vec3.print("DBACK TEST move newPick ", newPick); - //Vec3.print("DBACK TEST move vector ", vector); - //Vec3.print("DBACK TEST move changeInDimensions ", changeInDimensions); - - - if (proportional) { + + if (proportional) { + var viewportDimensions = Controller.getViewportDimensions(); + var mouseXDifference = (event.x - beginMouseEvent.x) / viewportDimensions.x; + var mouseYDifference = (beginMouseEvent.y - event.y) / viewportDimensions.y; + var mouseDifference = mouseXDifference + mouseYDifference; + changeInDimensions = { x:mouseDifference, y:mouseDifference, z:mouseDifference }; var toCameraDistance = getDistanceToCamera(position); var dimensionsMultiple = toCameraDistance * STRETCH_DIRECTION_ALL_CAMERA_DISTANCE_MULTIPLE; changeInDimensions = Vec3.multiply(changeInDimensions, dimensionsMultiple); @@ -2385,8 +2365,8 @@ SelectionDisplay = (function() { // TOOL DEFINITION: HANDLE SCALE TOOL function addHandleScaleTool(overlay, mode) { - var directionVector = { x:0, y:0, z:0 }; - var offset = { x:0, y:0, z:0 }; + var directionVector = { x:0, y:0, z:0 }; + var offset = { x:0, y:0, z:0 }; var tool = makeStretchTool(mode, STRETCH_DIRECTION.ALL, directionVector, directionVector, offset, null, handleScaleCube); return addHandleTool(overlay, tool); } @@ -2665,6 +2645,6 @@ SelectionDisplay = (function() { addHandleStretchTool(handleStretchZCube, "STRETCH_Z", STRETCH_DIRECTION.Z); addHandleScaleTool(handleScaleCube, "SCALE"); - + return that; }()); From 30c6975198c7e15f55c6b37f1e1975d708d541fe Mon Sep 17 00:00:00 2001 From: David Back Date: Fri, 24 Aug 2018 11:53:03 -0700 Subject: [PATCH 022/123] maintain stretch cube position vs mouse when stretching --- .../system/libraries/entitySelectionTool.js | 100 +++++++++++------- 1 file changed, 61 insertions(+), 39 deletions(-) diff --git a/scripts/system/libraries/entitySelectionTool.js b/scripts/system/libraries/entitySelectionTool.js index f251a1611c..2478160293 100644 --- a/scripts/system/libraries/entitySelectionTool.js +++ b/scripts/system/libraries/entitySelectionTool.js @@ -495,6 +495,8 @@ SelectionDisplay = (function() { var worldRotationX; var worldRotationY; var worldRotationZ; + + var activeStretchCubePanelOffset = null; var previousHandle = null; var previousHandleHelper = null; @@ -1435,34 +1437,7 @@ SelectionDisplay = (function() { Overlays.editOverlay(handleScaleNLEdge, { start: LTNPosition, end: LBNPosition }); Overlays.editOverlay(handleScaleFREdge, { start: RTFPosition, end: RBFPosition }); Overlays.editOverlay(handleScaleFLEdge, { start: LTFPosition, end: LBFPosition }); - - // UPDATE STRETCH CUBES - var stretchCubeDimension = rotateDimension * STRETCH_CUBE_CAMERA_DISTANCE_MULTIPLE / - ROTATE_RING_CAMERA_DISTANCE_MULTIPLE; - var stretchCubeDimensions = { x: stretchCubeDimension, y: stretchCubeDimension, z: stretchCubeDimension }; - var stretchCubeOffset = rotateDimension * STRETCH_CUBE_OFFSET / ROTATE_RING_CAMERA_DISTANCE_MULTIPLE; - var stretchXPosition = { x: stretchCubeOffset, y: 0, z: 0 }; - stretchXPosition = Vec3.sum(position, Vec3.multiplyQbyV(rotation, stretchXPosition)); - Overlays.editOverlay(handleStretchXCube, { - position: stretchXPosition, - rotation: rotationX, - dimensions: stretchCubeDimensions - }); - var stretchYPosition = { x: 0, y: stretchCubeOffset, z: 0 }; - stretchYPosition = Vec3.sum(position, Vec3.multiplyQbyV(rotation, stretchYPosition)); - Overlays.editOverlay(handleStretchYCube, { - position: stretchYPosition, - rotation: rotationY, - dimensions: stretchCubeDimensions - }); - var stretchZPosition = { x: 0, y: 0, z: stretchCubeOffset }; - stretchZPosition = Vec3.sum(position, Vec3.multiplyQbyV(rotation, stretchZPosition)); - Overlays.editOverlay(handleStretchZCube, { - position: stretchZPosition, - rotation: rotationZ, - dimensions: stretchCubeDimensions - }); - + // UPDATE STRETCH HIGHLIGHT PANELS var RBFPositionRotated = Vec3.multiplyQbyV(rotationInverse, RBFPosition); var RTFPositionRotated = Vec3.multiplyQbyV(rotationInverse, RTFPosition); @@ -1502,6 +1477,46 @@ SelectionDisplay = (function() { dimensions: stretchPanelZDimensions }); + // UPDATE STRETCH CUBES + var stretchCubeDimension = rotateDimension * STRETCH_CUBE_CAMERA_DISTANCE_MULTIPLE / + ROTATE_RING_CAMERA_DISTANCE_MULTIPLE; + var stretchCubeDimensions = { x: stretchCubeDimension, y: stretchCubeDimension, z: stretchCubeDimension }; + var stretchCubeOffset = rotateDimension * STRETCH_CUBE_OFFSET / ROTATE_RING_CAMERA_DISTANCE_MULTIPLE; + var stretchXPosition, stretchYPosition, stretchZPosition; + if (isActiveTool(handleStretchXCube)) { + stretchXPosition = Vec3.subtract(stretchPanelXPosition, activeStretchCubePanelOffset); + } else { + stretchXPosition = { x: stretchCubeOffset, y: 0, z: 0 }; + stretchXPosition = Vec3.sum(position, Vec3.multiplyQbyV(rotation, stretchXPosition)); + } + if (isActiveTool(handleStretchYCube)) { + stretchYPosition = Vec3.subtract(stretchPanelYPosition, activeStretchCubePanelOffset); + } else { + stretchYPosition = { x: 0, y: stretchCubeOffset, z: 0 }; + stretchYPosition = Vec3.sum(position, Vec3.multiplyQbyV(rotation, stretchYPosition)); + } + if (isActiveTool(handleStretchZCube)) { + stretchZPosition = Vec3.subtract(stretchPanelZPosition, activeStretchCubePanelOffset); + } else { + stretchZPosition = { x: 0, y: 0, z: stretchCubeOffset }; + stretchZPosition = Vec3.sum(position, Vec3.multiplyQbyV(rotation, stretchZPosition)); + } + Overlays.editOverlay(handleStretchXCube, { + position: stretchXPosition, + rotation: rotationX, + dimensions: stretchCubeDimensions + }); + Overlays.editOverlay(handleStretchYCube, { + position: stretchYPosition, + rotation: rotationY, + dimensions: stretchCubeDimensions + }); + Overlays.editOverlay(handleStretchZCube, { + position: stretchZPosition, + rotation: rotationZ, + dimensions: stretchCubeDimensions + }); + // UPDATE SELECTION BOX (CURRENTLY INVISIBLE WITH 0 ALPHA FOR TRANSLATE XZ TOOL) var inModeRotate = isActiveTool(handleRotatePitchRing) || isActiveTool(handleRotateYawRing) || @@ -2035,7 +2050,7 @@ SelectionDisplay = (function() { }; // TOOL DEFINITION: HANDLE STRETCH TOOL - function makeStretchTool(stretchMode, directionEnum, directionVec, pivot, offset, stretchPanel, scaleHandle) { + function makeStretchTool(stretchMode, directionEnum, directionVec, pivot, offset, stretchPanel, cubeHandle) { var directionFor3DStretch = directionVec; var distanceFor3DStretch = 0; var DISTANCE_INFLUENCE_THRESHOLD = 1.2; @@ -2069,7 +2084,9 @@ SelectionDisplay = (function() { var previousPickRay = null; var beginMouseEvent = null; - var onBegin = function(event, pickRay, pickResult) { + var onBegin = function(event, pickRay, pickResult) { + var proportional = directionEnum === STRETCH_DIRECTION.ALL; + var properties = Entities.getEntityProperties(SelectionManager.selections[0]); initialProperties = properties; rotation = (spaceMode === SPACE_LOCAL) ? properties.rotation : Quat.IDENTITY; @@ -2185,10 +2202,7 @@ SelectionDisplay = (function() { if (stretchPanel !== null) { Overlays.editOverlay(stretchPanel, { visible: true }); } - if (scaleHandle !== null) { - Overlays.editOverlay(scaleHandle, { color: COLOR_SCALE_CUBE_SELECTED }); - } - + var collisionToRemove = "myAvatar"; if (properties.collidesWith.indexOf(collisionToRemove) > -1) { var newCollidesWith = properties.collidesWith.replace(collisionToRemove, ""); @@ -2196,6 +2210,12 @@ SelectionDisplay = (function() { that.replaceCollisionsAfterStretch = true; } + if (!proportional) { + var stretchCubePosition = Overlays.getProperty(cubeHandle, "position"); + var stretchPanelPosition = Overlays.getProperty(stretchPanel, "position"); + activeStretchCubePanelOffset = Vec3.subtract(stretchPanelPosition, stretchCubePosition); + } + previousPickRay = pickRay; beginMouseEvent = event; }; @@ -2204,9 +2224,6 @@ SelectionDisplay = (function() { if (stretchPanel !== null) { Overlays.editOverlay(stretchPanel, { visible: false }); } - if (scaleHandle !== null) { - Overlays.editOverlay(scaleHandle, { color: COLOR_SCALE_CUBE }); - } if (that.replaceCollisionsAfterStretch) { var newCollidesWith = SelectionManager.savedProperties[SelectionManager.selections[0]].collidesWith; @@ -2214,6 +2231,8 @@ SelectionDisplay = (function() { that.replaceCollisionsAfterStretch = false; } + activeStretchCubePanelOffset = null; + pushCommandForSelections(); }; @@ -2347,19 +2366,22 @@ SelectionDisplay = (function() { } function addHandleStretchTool(overlay, mode, directionEnum) { - var directionVector, offset, stretchPanel; + var directionVector, offset, stretchPanel, handleStretchCube; if (directionEnum === STRETCH_DIRECTION.X) { stretchPanel = handleStretchXPanel; + handleStretchCube = handleStretchXCube; directionVector = { x: -1, y: 0, z: 0 }; } else if (directionEnum === STRETCH_DIRECTION.Y) { stretchPanel = handleStretchYPanel; + handleStretchCube = handleStretchYCube; directionVector = { x: 0, y: -1, z: 0 }; } else if (directionEnum === STRETCH_DIRECTION.Z) { stretchPanel = handleStretchZPanel; + handleStretchCube = handleStretchZCube; directionVector = { x: 0, y: 0, z: -1 }; } offset = Vec3.multiply(directionVector, NEGATE_VECTOR); - var tool = makeStretchTool(mode, directionEnum, directionVector, directionVector, offset, stretchPanel, null); + var tool = makeStretchTool(mode, directionEnum, directionVector, directionVector, offset, stretchPanel, handleStretchCube); return addHandleTool(overlay, tool); } From 3796675123214960ed569f7f83c2788a3005a942 Mon Sep 17 00:00:00 2001 From: Dante Ruiz Date: Fri, 24 Aug 2018 15:46:39 -0700 Subject: [PATCH 023/123] script update and visuallyReady entities --- interface/src/Application.cpp | 5 ++- .../src/octree/OctreePacketProcessor.cpp | 4 +++ interface/src/octree/OctreePacketProcessor.h | 1 + interface/src/octree/SafeLanding.cpp | 33 +++++++++++++++---- interface/src/octree/SafeLanding.h | 3 ++ .../src/RenderableModelEntityItem.cpp | 10 +++++- .../src/RenderableModelEntityItem.h | 6 +++- .../src/RenderableZoneEntityItem.cpp | 10 ++++++ libraries/entities/src/EntityItem.h | 3 ++ libraries/entities/src/ModelEntityItem.cpp | 1 + libraries/entities/src/ZoneEntityItem.cpp | 1 + scripts/system/interstitialPage.js | 19 ++++++++--- 12 files changed, 83 insertions(+), 13 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 6b2781417d..a4ced55a2d 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -5519,6 +5519,7 @@ void Application::update(float deltaTime) { return; } + if (!_physicsEnabled) { if (!domainLoadingInProgress) { PROFILE_ASYNC_BEGIN(app, "Scene Loading", ""); @@ -5528,7 +5529,9 @@ void Application::update(float deltaTime) { // we haven't yet enabled physics. we wait until we think we have all the collision information // for nearby entities before starting bullet up. quint64 now = usecTimestampNow(); - if (isServerlessMode() || _octreeProcessor.isLoadSequenceComplete()) { + bool renderReady = _octreeProcessor.isEntitiesRenderReady(); + qDebug() << "--> render ready: " << renderReady; + if (isServerlessMode() || (_octreeProcessor.isLoadSequenceComplete() && renderReady)) { // we've received a new full-scene octree stats packet, or it's been long enough to try again anyway _lastPhysicsCheckTime = now; _fullSceneCounterAtLastPhysicsCheck = _fullSceneReceivedCounter; diff --git a/interface/src/octree/OctreePacketProcessor.cpp b/interface/src/octree/OctreePacketProcessor.cpp index 11f6bbae13..e02c603415 100644 --- a/interface/src/octree/OctreePacketProcessor.cpp +++ b/interface/src/octree/OctreePacketProcessor.cpp @@ -138,6 +138,10 @@ bool OctreePacketProcessor::isLoadSequenceComplete() const { return _safeLanding->isLoadSequenceComplete(); } +bool OctreePacketProcessor::isEntitiesRenderReady() const { + return _safeLanding->entitiesRenderReady(); +} + float OctreePacketProcessor::domainLoadProgress() { return _safeLanding->loadingProgressPercentage(); } diff --git a/interface/src/octree/OctreePacketProcessor.h b/interface/src/octree/OctreePacketProcessor.h index fb8f0b581a..8e771de556 100644 --- a/interface/src/octree/OctreePacketProcessor.h +++ b/interface/src/octree/OctreePacketProcessor.h @@ -27,6 +27,7 @@ public: void startEntitySequence(); bool isLoadSequenceComplete() const; + bool isEntitiesRenderReady() const; float domainLoadProgress(); signals: diff --git a/interface/src/octree/SafeLanding.cpp b/interface/src/octree/SafeLanding.cpp index 4b8edd5934..bdaaa58fcc 100644 --- a/interface/src/octree/SafeLanding.cpp +++ b/interface/src/octree/SafeLanding.cpp @@ -36,6 +36,7 @@ void SafeLanding::startEntitySequence(QSharedPointer entityT if (entityTree) { Locker lock(_lock); _entityTree = entityTree; + _trackedEntitiesRenderStatus.clear(); _trackedEntities.clear(); _trackingEntities = true; connect(std::const_pointer_cast(_entityTree).get(), @@ -76,22 +77,24 @@ void SafeLanding::addTrackedEntity(const EntityItemID& entityID) { if (hasAABox && downloadedCollisionTypes.count(modelEntity->getShapeType()) != 0) { // Only track entities with downloaded collision bodies. _trackedEntities.emplace(entityID, entity); - - float trackedEntityCount = (float)_trackedEntities.size(); - - if (trackedEntityCount > _maxTrackedEntityCount) { - _maxTrackedEntityCount = trackedEntityCount; - } qCDebug(interfaceapp) << "Safe Landing: Tracking entity " << entity->getItemName(); } } } + + _trackedEntitiesRenderStatus.emplace(entityID, entity); + float trackedEntityCount = (float)_trackedEntitiesRenderStatus.size(); + + if (trackedEntityCount > _maxTrackedEntityCount) { + _maxTrackedEntityCount = trackedEntityCount; + } } } void SafeLanding::deleteTrackedEntity(const EntityItemID& entityID) { Locker lock(_lock); _trackedEntities.erase(entityID); + _trackedEntitiesRenderStatus.erase(entityID); } void SafeLanding::setCompletionSequenceNumbers(int first, int last) { @@ -165,6 +168,24 @@ bool SafeLanding::isEntityPhysicsComplete() { return _trackedEntities.empty(); } +bool SafeLanding::entitiesRenderReady() { + Locker lock(_lock); + + for (auto entityMapIter = _trackedEntitiesRenderStatus.begin(); entityMapIter != _trackedEntitiesRenderStatus.end(); ++entityMapIter) { + auto entity = entityMapIter->second; + bool visuallyReady = entity->isVisuallyReady(); + qDebug() << "is entityType: " << EntityTypes::getEntityTypeName(entity->getType()) << " " << visuallyReady; + if (visuallyReady) { + entityMapIter = _trackedEntitiesRenderStatus.erase(entityMapIter); + if (entityMapIter == _trackedEntitiesRenderStatus.end()) { + break; + } + } + } + qDebug() << "list size: -> " << _trackedEntitiesRenderStatus.size(); + return _trackedEntitiesRenderStatus.empty(); +} + float SafeLanding::ElevatedPriority(const EntityItem& entityItem) { return entityItem.getCollisionless() ? 0.0f : 10.0f; } diff --git a/interface/src/octree/SafeLanding.h b/interface/src/octree/SafeLanding.h index 4bede579dc..611b75ab79 100644 --- a/interface/src/octree/SafeLanding.h +++ b/interface/src/octree/SafeLanding.h @@ -18,6 +18,7 @@ #include #include "EntityItem.h" +#include "EntityDynamicInterface.h" class EntityTreeRenderer; class EntityItemID; @@ -29,6 +30,7 @@ public: void setCompletionSequenceNumbers(int first, int last); // 'last' exclusive. void noteReceivedsequenceNumber(int sequenceNumber); bool isLoadSequenceComplete(); + bool entitiesRenderReady(); float loadingProgressPercentage(); private slots: @@ -46,6 +48,7 @@ private: EntityTreePointer _entityTree; using EntityMap = std::map; EntityMap _trackedEntities; + EntityMap _trackedEntitiesRenderStatus; static constexpr int INVALID_SEQUENCE = -1; int _initialStart { INVALID_SEQUENCE }; diff --git a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp index 34936c2c48..c3cc634236 100644 --- a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp @@ -1441,7 +1441,7 @@ void ModelEntityRenderer::doRenderUpdateSynchronousTyped(const ScenePointer& sce // That is where _currentFrame and _lastAnimated were updated. if (_animating) { DETAILED_PROFILE_RANGE(simulation_physics, "Animate"); - + if (!jointsMapped()) { mapJoints(entity, model->getJointNames()); //else the joint have been mapped before but we have a new animation to load @@ -1457,6 +1457,14 @@ void ModelEntityRenderer::doRenderUpdateSynchronousTyped(const ScenePointer& sce } } + +void ModelEntityRenderer::doRenderUpdateAsynchronousTyped(const TypedEntityPointer& entity) { + withWriteLock([&] { + bool visuallyReady = (_prevModelLoaded && _texturesLoaded); + entity->setVisuallyReady(visuallyReady); + }); +} + void ModelEntityRenderer::setIsVisibleInSecondaryCamera(bool value) { Parent::setIsVisibleInSecondaryCamera(value); setKey(_didLastVisualGeometryRequestSucceed); diff --git a/libraries/entities-renderer/src/RenderableModelEntityItem.h b/libraries/entities-renderer/src/RenderableModelEntityItem.h index 45892fdd7f..bcf7296456 100644 --- a/libraries/entities-renderer/src/RenderableModelEntityItem.h +++ b/libraries/entities-renderer/src/RenderableModelEntityItem.h @@ -38,11 +38,13 @@ class ModelEntityWrapper : public ModelEntityItem { using Parent = ModelEntityItem; friend class render::entities::ModelEntityRenderer; +public: + bool isModelLoaded() const; + protected: ModelEntityWrapper(const EntityItemID& entityItemID) : Parent(entityItemID) {} void setModel(const ModelPointer& model); ModelPointer getModel() const; - bool isModelLoaded() const; bool _needsInitialSimulation{ true }; private: @@ -162,6 +164,8 @@ protected: virtual void doRender(RenderArgs* args) override; virtual void doRenderUpdateSynchronousTyped(const ScenePointer& scene, Transaction& transaction, const TypedEntityPointer& entity) override; + virtual void doRenderUpdateAsynchronousTyped(const TypedEntityPointer& entity) override; + render::hifi::Tag getTagMask() const override; void setIsVisibleInSecondaryCamera(bool value) override; diff --git a/libraries/entities-renderer/src/RenderableZoneEntityItem.cpp b/libraries/entities-renderer/src/RenderableZoneEntityItem.cpp index c5035431f6..598b3d1449 100644 --- a/libraries/entities-renderer/src/RenderableZoneEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableZoneEntityItem.cpp @@ -258,6 +258,16 @@ void ZoneEntityRenderer::doRenderUpdateSynchronousTyped(const ScenePointer& scen if (hazeChanged) { updateHazeFromEntity(entity); } + + bool visuallyReady = true; + uint32_t skyboxMode = entity->getSkyboxMode(); + if (skyboxMode == COMPONENT_MODE_ENABLED) { + bool skyboxLoadedOrFailed = (_skyboxTexture && (_skyboxTexture->isLoaded() || _skyboxTexture->isFailed())); + qDebug() << "------> " << skyboxLoadedOrFailed; + visuallyReady = (!_skyboxTextureURL.isEmpty() || skyboxLoadedOrFailed); + } + + entity->setVisuallyReady(visuallyReady); } void ZoneEntityRenderer::doRenderUpdateAsynchronousTyped(const TypedEntityPointer& entity) { diff --git a/libraries/entities/src/EntityItem.h b/libraries/entities/src/EntityItem.h index 47ae8de9ad..490f9b9e6b 100644 --- a/libraries/entities/src/EntityItem.h +++ b/libraries/entities/src/EntityItem.h @@ -305,6 +305,7 @@ public: void setDynamic(bool value); virtual bool shouldBePhysical() const { return false; } + bool isVisuallyReady() const { return _visuallyReady; } bool getLocked() const; void setLocked(bool value); @@ -527,6 +528,7 @@ public: void removeCloneID(const QUuid& cloneID); const QVector getCloneIDs() const; void setCloneIDs(const QVector& cloneIDs); + void setVisuallyReady(bool visuallyReady) { _visuallyReady = visuallyReady; } signals: void requestRenderUpdate(); @@ -639,6 +641,7 @@ protected: EntityTreeElementPointer _element; // set by EntityTreeElement void* _physicsInfo { nullptr }; // set by EntitySimulation bool _simulated { false }; // set by EntitySimulation + bool _visuallyReady { true }; bool addActionInternal(EntitySimulationPointer simulation, EntityDynamicPointer action); bool removeActionInternal(const QUuid& actionID, EntitySimulationPointer simulation = nullptr); diff --git a/libraries/entities/src/ModelEntityItem.cpp b/libraries/entities/src/ModelEntityItem.cpp index 5d5344c9c8..774559a628 100644 --- a/libraries/entities/src/ModelEntityItem.cpp +++ b/libraries/entities/src/ModelEntityItem.cpp @@ -40,6 +40,7 @@ ModelEntityItem::ModelEntityItem(const EntityItemID& entityItemID) : EntityItem( _type = EntityTypes::Model; _lastKnownCurrentFrame = -1; _color[0] = _color[1] = _color[2] = 0; + _visuallyReady = false; } const QString ModelEntityItem::getTextures() const { diff --git a/libraries/entities/src/ZoneEntityItem.cpp b/libraries/entities/src/ZoneEntityItem.cpp index f2550e5d3c..58d5ba79c9 100644 --- a/libraries/entities/src/ZoneEntityItem.cpp +++ b/libraries/entities/src/ZoneEntityItem.cpp @@ -42,6 +42,7 @@ ZoneEntityItem::ZoneEntityItem(const EntityItemID& entityItemID) : EntityItem(en _shapeType = DEFAULT_SHAPE_TYPE; _compoundShapeURL = DEFAULT_COMPOUND_SHAPE_URL; + _visuallyReady = false; } EntityItemProperties ZoneEntityItem::getProperties(EntityPropertyFlags desiredProperties) const { diff --git a/scripts/system/interstitialPage.js b/scripts/system/interstitialPage.js index 1507c7bd9a..a5e5e7c0a2 100644 --- a/scripts/system/interstitialPage.js +++ b/scripts/system/interstitialPage.js @@ -32,6 +32,7 @@ var BUTTON_PROPERTIES = { text: "Interstitial" }; + var tablet = null; var button = null; @@ -336,11 +337,12 @@ Overlays.editOverlay(loadingBarPlacard, properties); Overlays.editOverlay(loadingBarProgress, loadingBarProperties); - if (physicsEnabled) { + if (physicsEnabled && !HMD.active) { toolbar.writeProperty("visible", true); - resetValues(); } + resetValues(); + Camera.mode = "first person"; } @@ -356,7 +358,13 @@ Overlays.editOverlay(anchorOverlay, { localPosition: localPosition }); } + + Window.interstitialStatusChanged.connect(function(interstitialMode) { + print("------> insterstitial mode changed " + interstitialMode + " <------"); + }); + function update() { + var downloadInfo = GlobalServices.getDownloadInfo(); var physicsEnabled = Window.isPhysicsEnabled(); var thisInterval = Date.now(); var deltaTime = (thisInterval - lastInterval); @@ -365,7 +373,7 @@ var domainLoadingProgressPercentage = Window.domainLoadingProgress(); var progress = MAX_X_SIZE * domainLoadingProgressPercentage; - print(progress); + //print(progress); if (progress >= target) { target = progress; } @@ -383,6 +391,7 @@ }; Overlays.editOverlay(loadingBarProgress, properties); + print(JSON.stringify(downloadInfo)); if ((physicsEnabled && (currentProgress >= (MAX_X_SIZE - EPSILON)))) { updateOverlays((physicsEnabled || connectionToDomainFailed)); endAudio(); @@ -431,7 +440,9 @@ renderViewTask.getConfig("LightingModel")["enableAmbientLight"] = true; renderViewTask.getConfig("LightingModel")["enableDirectionalLight"] = true; renderViewTask.getConfig("LightingModel")["enablePointLight"] = true; - toolbar.writeProperty("visible", true); + if (!HMD.active) { + toolbar.writeProperty("visible", true); + } } Script.scriptEnding.connect(cleanup); From 92acaade2b736eab9c711d1f3586d90107f097e8 Mon Sep 17 00:00:00 2001 From: Dante Ruiz Date: Fri, 24 Aug 2018 17:13:57 -0700 Subject: [PATCH 024/123] trying to fix problems --- interface/src/octree/SafeLanding.cpp | 2 +- .../entities-renderer/src/RenderableModelEntityItem.cpp | 5 +---- libraries/entities-renderer/src/RenderableModelEntityItem.h | 2 -- libraries/entities-renderer/src/RenderableZoneEntityItem.cpp | 4 ++-- 4 files changed, 4 insertions(+), 9 deletions(-) diff --git a/interface/src/octree/SafeLanding.cpp b/interface/src/octree/SafeLanding.cpp index bdaaa58fcc..262f0b30c2 100644 --- a/interface/src/octree/SafeLanding.cpp +++ b/interface/src/octree/SafeLanding.cpp @@ -174,7 +174,7 @@ bool SafeLanding::entitiesRenderReady() { for (auto entityMapIter = _trackedEntitiesRenderStatus.begin(); entityMapIter != _trackedEntitiesRenderStatus.end(); ++entityMapIter) { auto entity = entityMapIter->second; bool visuallyReady = entity->isVisuallyReady(); - qDebug() << "is entityType: " << EntityTypes::getEntityTypeName(entity->getType()) << " " << visuallyReady; + qDebug() << "is entityType: " << EntityTypes::getEntityTypeName(entity->getType()) << " " << visuallyReady << " " << entityMapIter->first; if (visuallyReady) { entityMapIter = _trackedEntitiesRenderStatus.erase(entityMapIter); if (entityMapIter == _trackedEntitiesRenderStatus.end()) { diff --git a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp index c3cc634236..ec46a37a1c 100644 --- a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp @@ -1455,12 +1455,9 @@ void ModelEntityRenderer::doRenderUpdateSynchronousTyped(const ScenePointer& sce } emit requestRenderUpdate(); } -} - -void ModelEntityRenderer::doRenderUpdateAsynchronousTyped(const TypedEntityPointer& entity) { withWriteLock([&] { - bool visuallyReady = (_prevModelLoaded && _texturesLoaded); + bool visuallyReady = ((_prevModelLoaded && _texturesLoaded) || model->getURL().isEmpty()); entity->setVisuallyReady(visuallyReady); }); } diff --git a/libraries/entities-renderer/src/RenderableModelEntityItem.h b/libraries/entities-renderer/src/RenderableModelEntityItem.h index bcf7296456..3540fa1127 100644 --- a/libraries/entities-renderer/src/RenderableModelEntityItem.h +++ b/libraries/entities-renderer/src/RenderableModelEntityItem.h @@ -164,8 +164,6 @@ protected: virtual void doRender(RenderArgs* args) override; virtual void doRenderUpdateSynchronousTyped(const ScenePointer& scene, Transaction& transaction, const TypedEntityPointer& entity) override; - virtual void doRenderUpdateAsynchronousTyped(const TypedEntityPointer& entity) override; - render::hifi::Tag getTagMask() const override; void setIsVisibleInSecondaryCamera(bool value) override; diff --git a/libraries/entities-renderer/src/RenderableZoneEntityItem.cpp b/libraries/entities-renderer/src/RenderableZoneEntityItem.cpp index ba561cd8b2..2f36796f84 100644 --- a/libraries/entities-renderer/src/RenderableZoneEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableZoneEntityItem.cpp @@ -293,8 +293,8 @@ void ZoneEntityRenderer::doRenderUpdateSynchronousTyped(const ScenePointer& scen uint32_t skyboxMode = entity->getSkyboxMode(); if (skyboxMode == COMPONENT_MODE_ENABLED) { bool skyboxLoadedOrFailed = (_skyboxTexture && (_skyboxTexture->isLoaded() || _skyboxTexture->isFailed())); - qDebug() << "------> " << skyboxLoadedOrFailed; - visuallyReady = (!_skyboxTextureURL.isEmpty() || skyboxLoadedOrFailed); + qDebug() << entity->getEntityItemID() << "------> " << _skyboxTexture->isFailed() << _skyboxTexture->isLoaded() << _skyboxTextureURL.isEmpty(); + visuallyReady = (_skyboxTextureURL.isEmpty() || skyboxLoadedOrFailed); } entity->setVisuallyReady(visuallyReady); From e4293d9ad57705cfb778737c337ff8018a9a8b13 Mon Sep 17 00:00:00 2001 From: danteruiz Date: Sun, 26 Aug 2018 21:50:01 -0700 Subject: [PATCH 025/123] fixing some entity visual problems --- interface/src/Application.cpp | 1 - interface/src/octree/SafeLanding.cpp | 9 +++++--- .../src/RenderableModelEntityItem.cpp | 21 ++++++++++++------- .../src/RenderableZoneEntityItem.cpp | 7 ++++--- scripts/system/interstitialPage.js | 13 ++++-------- 5 files changed, 28 insertions(+), 23 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 092fb51a2a..37e31650a0 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -5544,7 +5544,6 @@ void Application::update(float deltaTime) { // for nearby entities before starting bullet up. quint64 now = usecTimestampNow(); bool renderReady = _octreeProcessor.isEntitiesRenderReady(); - qDebug() << "--> render ready: " << renderReady; if (isServerlessMode() || (_octreeProcessor.isLoadSequenceComplete() && renderReady)) { // we've received a new full-scene octree stats packet, or it's been long enough to try again anyway _lastPhysicsCheckTime = now; diff --git a/interface/src/octree/SafeLanding.cpp b/interface/src/octree/SafeLanding.cpp index 262f0b30c2..8d36b3fcb0 100644 --- a/interface/src/octree/SafeLanding.cpp +++ b/interface/src/octree/SafeLanding.cpp @@ -13,6 +13,7 @@ #include "EntityTreeRenderer.h" #include "ModelEntityItem.h" #include "InterfaceLogging.h" +#include "Application.h" const int SafeLanding::SEQUENCE_MODULO = std::numeric_limits::max() + 1; @@ -129,7 +130,7 @@ bool SafeLanding::isLoadSequenceComplete() { float SafeLanding::loadingProgressPercentage() { Locker lock(_lock); if (_maxTrackedEntityCount > 0) { - float trackedEntityCount = (float)_trackedEntities.size(); + float trackedEntityCount = (float)_trackedEntitiesRenderStatus.size(); return ((_maxTrackedEntityCount - trackedEntityCount) / _maxTrackedEntityCount); } @@ -170,16 +171,18 @@ bool SafeLanding::isEntityPhysicsComplete() { bool SafeLanding::entitiesRenderReady() { Locker lock(_lock); - + auto entityTree = qApp->getEntities(); for (auto entityMapIter = _trackedEntitiesRenderStatus.begin(); entityMapIter != _trackedEntitiesRenderStatus.end(); ++entityMapIter) { auto entity = entityMapIter->second; bool visuallyReady = entity->isVisuallyReady(); qDebug() << "is entityType: " << EntityTypes::getEntityTypeName(entity->getType()) << " " << visuallyReady << " " << entityMapIter->first; - if (visuallyReady) { + if (visuallyReady || !entityTree->renderableForEntityId(entityMapIter->first)) { entityMapIter = _trackedEntitiesRenderStatus.erase(entityMapIter); if (entityMapIter == _trackedEntitiesRenderStatus.end()) { break; } + } else { + entity->requestRenderUpdate(); } } qDebug() << "list size: -> " << _trackedEntitiesRenderStatus.size(); diff --git a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp index ec46a37a1c..baa20a0583 100644 --- a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp @@ -1297,9 +1297,21 @@ void ModelEntityRenderer::doRenderUpdateSynchronousTyped(const ScenePointer& sce } }); - // Check for removal ModelPointer model; withReadLock([&] { model = _model; }); + + withWriteLock([&] { + bool visuallyReady = true; + if (_hasModel) { + if (model && _didLastVisualGeometryRequestSucceed) { + visuallyReady = (_prevModelLoaded && _texturesLoaded); + // qDebug() << visuallyReady; + } + } + entity->setVisuallyReady(visuallyReady); + }); + + // Check for removal if (!_hasModel) { if (model) { model->removeFromScene(scene, transaction); @@ -1445,7 +1457,7 @@ void ModelEntityRenderer::doRenderUpdateSynchronousTyped(const ScenePointer& sce if (!jointsMapped()) { mapJoints(entity, model->getJointNames()); //else the joint have been mapped before but we have a new animation to load - } else if (_animation && (_animation->getURL().toString() != entity->getAnimationURL())) { + } else if (_animation && (_animation->getURL().toString() != entity->getAnimationURL())) { _animation = DependencyManager::get()->getAnimation(entity->getAnimationURL()); _jointMappingCompleted = false; mapJoints(entity, model->getJointNames()); @@ -1455,11 +1467,6 @@ void ModelEntityRenderer::doRenderUpdateSynchronousTyped(const ScenePointer& sce } emit requestRenderUpdate(); } - - withWriteLock([&] { - bool visuallyReady = ((_prevModelLoaded && _texturesLoaded) || model->getURL().isEmpty()); - entity->setVisuallyReady(visuallyReady); - }); } void ModelEntityRenderer::setIsVisibleInSecondaryCamera(bool value) { diff --git a/libraries/entities-renderer/src/RenderableZoneEntityItem.cpp b/libraries/entities-renderer/src/RenderableZoneEntityItem.cpp index 2f36796f84..cf452c9cf7 100644 --- a/libraries/entities-renderer/src/RenderableZoneEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableZoneEntityItem.cpp @@ -291,11 +291,12 @@ void ZoneEntityRenderer::doRenderUpdateSynchronousTyped(const ScenePointer& scen bool visuallyReady = true; uint32_t skyboxMode = entity->getSkyboxMode(); - if (skyboxMode == COMPONENT_MODE_ENABLED) { + if (skyboxMode == COMPONENT_MODE_ENABLED && !_skyboxTextureURL.isEmpty()) { bool skyboxLoadedOrFailed = (_skyboxTexture && (_skyboxTexture->isLoaded() || _skyboxTexture->isFailed())); - qDebug() << entity->getEntityItemID() << "------> " << _skyboxTexture->isFailed() << _skyboxTexture->isLoaded() << _skyboxTextureURL.isEmpty(); - visuallyReady = (_skyboxTextureURL.isEmpty() || skyboxLoadedOrFailed); + + visuallyReady = skyboxLoadedOrFailed; } + entity->setVisuallyReady(visuallyReady); if (bloomChanged) { diff --git a/scripts/system/interstitialPage.js b/scripts/system/interstitialPage.js index a5e5e7c0a2..cf06e222c9 100644 --- a/scripts/system/interstitialPage.js +++ b/scripts/system/interstitialPage.js @@ -223,7 +223,7 @@ function startInterstitialPage() { if (timer === null) { - updateOverlays(Window.isPhysicsEnabled()); + updateOverlays(false); startAudio(); target = 0; currentProgress = 0.1; @@ -364,7 +364,6 @@ }); function update() { - var downloadInfo = GlobalServices.getDownloadInfo(); var physicsEnabled = Window.isPhysicsEnabled(); var thisInterval = Date.now(); var deltaTime = (thisInterval - lastInterval); @@ -373,14 +372,11 @@ var domainLoadingProgressPercentage = Window.domainLoadingProgress(); var progress = MAX_X_SIZE * domainLoadingProgressPercentage; - //print(progress); - if (progress >= target) { + print(progress); + //if (progress >= target) { target = progress; - } + //} - if (physicsEnabled && target < MAX_X_SIZE) { - target = MAX_X_SIZE; - } currentProgress = lerp(currentProgress, target, 0.2); var properties = { localPosition: { x: (1.85 - (currentProgress / 2) - (-0.029 * (currentProgress / MAX_X_SIZE))), y: -0.935, z: 0.0 }, @@ -391,7 +387,6 @@ }; Overlays.editOverlay(loadingBarProgress, properties); - print(JSON.stringify(downloadInfo)); if ((physicsEnabled && (currentProgress >= (MAX_X_SIZE - EPSILON)))) { updateOverlays((physicsEnabled || connectionToDomainFailed)); endAudio(); From e2cd695dfb9ada63d8a14664d4e75b13bf2ec978 Mon Sep 17 00:00:00 2001 From: danteruiz Date: Mon, 27 Aug 2018 11:01:29 -0700 Subject: [PATCH 026/123] PR code clean up --- interface/src/Application.h | 2 +- interface/src/avatar/MyAvatar.cpp | 1 - interface/src/octree/OctreePacketProcessor.cpp | 2 +- interface/src/octree/OctreePacketProcessor.h | 2 +- interface/src/scripting/WindowScriptingInterface.cpp | 2 +- interface/src/ui/OverlayConductor.cpp | 1 - libraries/entities-renderer/src/RenderableModelEntityItem.cpp | 1 - libraries/entities-renderer/src/RenderableModelEntityItem.h | 4 +--- 8 files changed, 5 insertions(+), 10 deletions(-) diff --git a/interface/src/Application.h b/interface/src/Application.h index a6258403a9..f3db4e718d 100644 --- a/interface/src/Application.h +++ b/interface/src/Application.h @@ -233,7 +233,7 @@ public: bool getPreferAvatarFingerOverStylus() { return false; } void setPreferAvatarFingerOverStylus(bool value); - float getDomainLoadProgress() { return _octreeProcessor.domainLoadProgress(); } + float getDomainLoadingProgress() { return _octreeProcessor.domainLoadingProgress(); } float getSettingConstrainToolbarPosition() { return _constrainToolbarPosition.get(); } void setSettingConstrainToolbarPosition(bool setting); diff --git a/interface/src/avatar/MyAvatar.cpp b/interface/src/avatar/MyAvatar.cpp index 545ca99109..923d071cc0 100755 --- a/interface/src/avatar/MyAvatar.cpp +++ b/interface/src/avatar/MyAvatar.cpp @@ -2432,7 +2432,6 @@ void MyAvatar::setHasScriptedBlendshapes(bool hasScriptedBlendshapes) { // send a forced avatarData update to make sure the script can send neutal blendshapes on unload // without having to wait for the update loop, make sure _hasScriptedBlendShapes is still true // before sending the update, or else it won't send the neutal blendshapes to the receiving clients - sendAvatarDataPacket(true); } _hasScriptedBlendShapes = hasScriptedBlendshapes; diff --git a/interface/src/octree/OctreePacketProcessor.cpp b/interface/src/octree/OctreePacketProcessor.cpp index e02c603415..e670153a77 100644 --- a/interface/src/octree/OctreePacketProcessor.cpp +++ b/interface/src/octree/OctreePacketProcessor.cpp @@ -142,6 +142,6 @@ bool OctreePacketProcessor::isEntitiesRenderReady() const { return _safeLanding->entitiesRenderReady(); } -float OctreePacketProcessor::domainLoadProgress() { +float OctreePacketProcessor::domainLoadingProgress() { return _safeLanding->loadingProgressPercentage(); } diff --git a/interface/src/octree/OctreePacketProcessor.h b/interface/src/octree/OctreePacketProcessor.h index 8e771de556..71e22bf240 100644 --- a/interface/src/octree/OctreePacketProcessor.h +++ b/interface/src/octree/OctreePacketProcessor.h @@ -28,7 +28,7 @@ public: void startEntitySequence(); bool isLoadSequenceComplete() const; bool isEntitiesRenderReady() const; - float domainLoadProgress(); + float domainLoadingProgress(); signals: void packetVersionMismatch(); diff --git a/interface/src/scripting/WindowScriptingInterface.cpp b/interface/src/scripting/WindowScriptingInterface.cpp index f422a6a8fa..b4c1563795 100644 --- a/interface/src/scripting/WindowScriptingInterface.cpp +++ b/interface/src/scripting/WindowScriptingInterface.cpp @@ -590,5 +590,5 @@ void WindowScriptingInterface::onMessageBoxSelected(int button) { float WindowScriptingInterface::domainLoadingProgress() { - return qApp->getDomainLoadProgress(); + return qApp->getDomainLoadingProgress(); } diff --git a/interface/src/ui/OverlayConductor.cpp b/interface/src/ui/OverlayConductor.cpp index 398f9cf147..e27001567f 100644 --- a/interface/src/ui/OverlayConductor.cpp +++ b/interface/src/ui/OverlayConductor.cpp @@ -103,7 +103,6 @@ void OverlayConductor::update(float dt) { bool targetVisible = Menu::getInstance()->isOptionChecked(MenuOption::Overlays) && !_suppressedByHead; if (targetVisible != currentVisible) { - qDebug() << "setting pinned: " << !targetVisible; offscreenUi->setPinned(!targetVisible); } if (shouldRecenter && !_suppressedByHead) { diff --git a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp index baa20a0583..8be5b172ce 100644 --- a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp @@ -1305,7 +1305,6 @@ void ModelEntityRenderer::doRenderUpdateSynchronousTyped(const ScenePointer& sce if (_hasModel) { if (model && _didLastVisualGeometryRequestSucceed) { visuallyReady = (_prevModelLoaded && _texturesLoaded); - // qDebug() << visuallyReady; } } entity->setVisuallyReady(visuallyReady); diff --git a/libraries/entities-renderer/src/RenderableModelEntityItem.h b/libraries/entities-renderer/src/RenderableModelEntityItem.h index 3540fa1127..45892fdd7f 100644 --- a/libraries/entities-renderer/src/RenderableModelEntityItem.h +++ b/libraries/entities-renderer/src/RenderableModelEntityItem.h @@ -38,13 +38,11 @@ class ModelEntityWrapper : public ModelEntityItem { using Parent = ModelEntityItem; friend class render::entities::ModelEntityRenderer; -public: - bool isModelLoaded() const; - protected: ModelEntityWrapper(const EntityItemID& entityItemID) : Parent(entityItemID) {} void setModel(const ModelPointer& model); ModelPointer getModel() const; + bool isModelLoaded() const; bool _needsInitialSimulation{ true }; private: From 8a9ad421e7fd69338e74236dea9a629519f35ad1 Mon Sep 17 00:00:00 2001 From: Wayne Chen Date: Tue, 28 Aug 2018 15:50:14 -0700 Subject: [PATCH 027/123] adding serverless file + redirection if conn fail --- interface/CMakeLists.txt | 5 +++ interface/resources/serverless/redirect.json | 1 + interface/src/Application.cpp | 33 ++++++++++++++++++++ interface/src/Application.h | 1 + libraries/networking/src/AddressManager.cpp | 2 +- libraries/networking/src/AddressManager.h | 1 + 6 files changed, 42 insertions(+), 1 deletion(-) create mode 100644 interface/resources/serverless/redirect.json diff --git a/interface/CMakeLists.txt b/interface/CMakeLists.txt index 990d84a774..cd058add94 100644 --- a/interface/CMakeLists.txt +++ b/interface/CMakeLists.txt @@ -341,6 +341,8 @@ else() set(INTERFACE_EXEC_DIR "$") set(RESOURCES_DEV_DIR "${INTERFACE_EXEC_DIR}/resources") + message(STATUS "${RESOURCES_DEV_DIR}") + # copy the resources files beside the executable add_custom_command(TARGET ${TARGET_NAME} POST_BUILD COMMAND "${CMAKE_COMMAND}" -E copy_if_different @@ -360,6 +362,9 @@ else() COMMAND "${CMAKE_COMMAND}" -E copy_if_different "${PROJECT_SOURCE_DIR}/resources/serverless/tutorial.json" "${RESOURCES_DEV_DIR}/serverless/tutorial.json" + COMMAND "${CMAKE_COMMAND}" -E copy_if_different + "${PROJECT_SOURCE_DIR}/resources/serverless/redirect.json" + "${RESOURCES_DEV_DIR}/serverless/redirect.json" # copy JSDoc files beside the executable COMMAND "${CMAKE_COMMAND}" -E copy_directory "${CMAKE_SOURCE_DIR}/tools/jsdoc/out" diff --git a/interface/resources/serverless/redirect.json b/interface/resources/serverless/redirect.json new file mode 100644 index 0000000000..d97f44220a --- /dev/null +++ b/interface/resources/serverless/redirect.json @@ -0,0 +1 @@ +{"DataVersion": 0, "Entities": [{"clientOnly": true, "created": "2018-08-28T16:44:23Z", "id": "{9a50eca4-5c97-4e21-8cb9-5197bb09770e}", "lastEdited": 1535474935077402, "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "materialData": "{\"materials\":{\"albedoMap\":\"file:///C:/users/wayne/development/hifi-fork/interface/resources/images/buttonBezel.png\"}}", "materialURL": "materialData", "owningAvatarID": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "parentID": "{00000000-0000-0000-0000-000000000001}", "parentMaterialName": "2", "position": {"blue": 5.94891357421875, "green": 0, "red": 0.9275937080383301, "x": -3.07240629196167, "y": -9.5, "z": 1.94891357421875}, "priority": 1, "queryAACube": {"scale": 0.5196152329444885, "x": -5.904480457305908, "y": 0.8614521026611328, "z": -2.4799537658691406}, "type": "Material", "userData": "{\"grabbableKey\":{\"grabbable\":false}}", "visible": false}, {"clientOnly": true, "created": "2018-08-28T16:44:23Z", "id": "{2d90745c-2fe2-4f9c-9dcf-b715f7a9d0c0}", "lastEdited": 1535474935076550, "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "materialData": "{\"materials\":{\"albedoMap\":\"file:///C:/users/wayne/development/hifi-fork/interface/resources/images/buttonBezel.png\"}}", "materialURL": "materialData", "owningAvatarID": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "parentID": "{00000000-0000-0000-0000-000000000001}", "parentMaterialName": "2", "position": {"blue": 5.94891357421875, "green": 0, "red": 0.9275937080383301, "x": -3.07240629196167, "y": -9.5, "z": 1.94891357421875}, "priority": 1, "queryAACube": {"scale": 0.5196152329444885, "x": -5.904480457305908, "y": 0.8614521026611328, "z": -2.4799537658691406}, "type": "Material", "userData": "{\"grabbableKey\":{\"grabbable\":false}}", "visible": false}, {"clientOnly": true, "created": "2018-08-28T16:44:23Z", "id": "{dcbca0fd-e1d8-4248-b2b4-b91346224876}", "lastEdited": 1535474935077745, "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "materialData": "{\"materials\":{\"emissiveMap\":\"file:///C:/users/wayne/development/hifi-fork/interface/resources/images/buttonBezel_highlight.png\"}}", "materialURL": "materialData", "owningAvatarID": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "parentID": "{00000000-0000-0000-0000-000000000001}", "parentMaterialName": "2", "position": {"blue": 5.94891357421875, "green": 0, "red": 0.927593469619751, "x": -3.072406530380249, "y": -9.5, "z": 1.94891357421875}, "queryAACube": {"scale": 0.5196152329444885, "x": -5.904480457305908, "y": 0.8614521026611328, "z": -2.479954719543457}, "type": "Material", "userData": "{\"grabbableKey\":{\"grabbable\":false}}", "visible": false}, {"clientOnly": true, "created": "2018-08-28T16:44:23Z", "id": "{3df15ffb-9614-4ec1-81a8-e278d1917748}", "lastEdited": 1535474935076889, "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "materialData": "{\"materials\":{\"emissiveMap\":\"file:///C:/users/wayne/development/hifi-fork/interface/resources/images/buttonBezel_highlight.png\"}}", "materialURL": "materialData", "owningAvatarID": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "parentID": "{00000000-0000-0000-0000-000000000001}", "parentMaterialName": "2", "position": {"blue": 5.94891357421875, "green": 0, "red": 0.9275937080383301, "x": -3.07240629196167, "y": -9.5, "z": 1.94891357421875}, "queryAACube": {"scale": 0.5196152329444885, "x": -5.904480457305908, "y": 0.8614521026611328, "z": -2.4799537658691406}, "type": "Material", "userData": "{\"grabbableKey\":{\"grabbable\":false}}", "visible": false}, {"clientOnly": true, "created": "2018-08-28T16:44:23Z", "id": "{fd138f98-d436-41d2-863a-cbef6e41e1cb}", "lastEdited": 1535474935078215, "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "materialData": "{\"materials\":{\"albedoMap\":\"file:///C:/users/wayne/development/hifi-fork/interface/resources/images/buttonBezel.png\"}}", "materialURL": "materialData", "owningAvatarID": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "parentID": "{00000000-0000-0000-0000-000000000001}", "parentMaterialName": "2", "position": {"blue": 5.94891357421875, "green": 0, "red": 0.9275937080383301, "x": -3.07240629196167, "y": -9.5, "z": 1.94891357421875}, "priority": 1, "queryAACube": {"scale": 0.5196152329444885, "x": -5.904480457305908, "y": 0.8614521026611328, "z": -2.4799537658691406}, "type": "Material", "userData": "{\"grabbableKey\":{\"grabbable\":false}}", "visible": false}, {"clientOnly": true, "created": "2018-08-28T16:44:23Z", "id": "{b2a90f9e-a5ec-4faa-a6a3-bc457516f5ee}", "lastEdited": 1535474935077505, "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "materialData": "{\"materials\":{\"albedoMap\":\"file:///C:/users/wayne/development/hifi-fork/interface/resources/images/buttonBezel.png\"}}", "materialURL": "materialData", "owningAvatarID": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "parentID": "{00000000-0000-0000-0000-000000000001}", "parentMaterialName": "2", "position": {"blue": 5.94891357421875, "green": 0, "red": 0.9275937080383301, "x": -3.07240629196167, "y": -9.5, "z": 1.94891357421875}, "priority": 1, "queryAACube": {"scale": 0.5196152329444885, "x": -5.904480457305908, "y": 0.8614521026611328, "z": -2.4799537658691406}, "type": "Material", "userData": "{\"grabbableKey\":{\"grabbable\":false}}", "visible": false}, {"clientOnly": true, "created": "2018-08-28T16:44:23Z", "id": "{5c9ef440-f022-4d21-9f00-22827851b522}", "lastEdited": 1535474935077201, "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "materialData": "{\"materials\":{\"emissiveMap\":\"file:///C:/users/wayne/development/hifi-fork/interface/resources/images/buttonBezel_highlight.png\"}}", "materialURL": "materialData", "owningAvatarID": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "parentID": "{00000000-0000-0000-0000-000000000001}", "parentMaterialName": "2", "position": {"blue": 5.948914527893066, "green": 0.16741032898426056, "red": 0.9275782108306885, "x": -3.0724217891693115, "y": -9.33258967101574, "z": 1.9489145278930664}, "queryAACube": {"scale": 0.5196152329444885, "x": -5.904473781585693, "y": 1.028862476348877, "z": -2.479969024658203}, "type": "Material", "userData": "{\"grabbableKey\":{\"grabbable\":false}}", "visible": false}, {"clientOnly": true, "created": "2018-08-28T16:44:23Z", "id": "{2fe2296a-d74d-4ee7-bf7d-c9665bc63237}", "lastEdited": 1535474935076656, "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "materialData": "{\"materials\":{\"emissiveMap\":\"file:///C:/users/wayne/development/hifi-fork/interface/resources/images/buttonBezel_highlight.png\"}}", "materialURL": "materialData", "owningAvatarID": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "parentID": "{00000000-0000-0000-0000-000000000001}", "parentMaterialName": "2", "position": {"blue": 5.94891357421875, "green": 0, "red": 0.9275937080383301, "x": -3.07240629196167, "y": -9.5, "z": 1.94891357421875}, "queryAACube": {"scale": 0.5196152329444885, "x": -5.904480457305908, "y": 0.8614521026611328, "z": -2.4799537658691406}, "type": "Material", "userData": "{\"grabbableKey\":{\"grabbable\":false}}", "visible": false}, {"clientOnly": true, "created": "2018-08-28T16:44:23Z", "id": "{86f1ba10-2921-45ad-bb74-dcbe5c49bc69}", "lastEdited": 1535474935077298, "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "materialData": "{\"materials\":{\"emissiveMap\":\"file:///C:/users/wayne/development/hifi-fork/interface/resources/images/buttonBezel_highlight.png\"}}", "materialURL": "materialData", "owningAvatarID": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "parentID": "{00000000-0000-0000-0000-000000000001}", "parentMaterialName": "2", "position": {"blue": 5.94891357421875, "green": 0, "red": 0.9275937080383301, "x": -3.07240629196167, "y": -9.5, "z": 1.94891357421875}, "queryAACube": {"scale": 0.5196152329444885, "x": -5.904480457305908, "y": 0.8614521026611328, "z": -2.4799537658691406}, "type": "Material", "userData": "{\"grabbableKey\":{\"grabbable\":false}}", "visible": false}, {"clientOnly": true, "created": "2018-08-28T16:44:23Z", "id": "{1023380c-13dd-445d-bb57-1e02574e5cb3}", "lastEdited": 1535474935076124, "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "materialData": "{\"materials\":{\"emissiveMap\":\"file:///C:/users/wayne/development/hifi-fork/interface/resources/images/buttonBezel_highlight.png\"}}", "materialURL": "materialData", "owningAvatarID": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "parentID": "{00000000-0000-0000-0000-000000000001}", "parentMaterialName": "2", "position": {"blue": 5.94891357421875, "green": 0, "red": 0.9275937080383301, "x": -3.07240629196167, "y": -9.5, "z": 1.94891357421875}, "queryAACube": {"scale": 0.5196152329444885, "x": -5.904480457305908, "y": 0.8614521026611328, "z": -2.4799537658691406}, "type": "Material", "userData": "{\"grabbableKey\":{\"grabbable\":false}}", "visible": false}, {"clientOnly": true, "created": "2018-08-28T16:44:23Z", "id": "{d5d841b2-0cc0-4ab2-84fe-dce3d20f6b04}", "lastEdited": 1535474935077609, "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "materialData": "{\"materials\":{\"emissiveMap\":\"file:///C:/users/wayne/development/hifi-fork/interface/resources/images/buttonBezel_highlight.png\"}}", "materialURL": "materialData", "owningAvatarID": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "parentID": "{00000000-0000-0000-0000-000000000001}", "parentMaterialName": "2", "position": {"blue": 5.94891357421875, "green": 0, "red": 0.927593469619751, "x": -3.072406530380249, "y": -9.5, "z": 1.94891357421875}, "queryAACube": {"scale": 0.5196152329444885, "x": -5.904480457305908, "y": 0.8614521026611328, "z": -2.479954719543457}, "type": "Material", "userData": "{\"grabbableKey\":{\"grabbable\":false}}", "visible": false}, {"clientOnly": true, "created": "2018-08-28T16:44:23Z", "id": "{02da6c73-bab0-4e7e-b8fc-a9c0500ac66e}", "lastEdited": 1535474935075994, "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "materialData": "{\"materials\":{\"albedoMap\":\"file:///C:/users/wayne/development/hifi-fork/interface/resources/images/buttonBezel.png\"}}", "materialURL": "materialData", "owningAvatarID": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "parentID": "{00000000-0000-0000-0000-000000000001}", "parentMaterialName": "2", "position": {"blue": 5.94891357421875, "green": 0, "red": 0.9275937080383301, "x": -3.07240629196167, "y": -9.5, "z": 1.94891357421875}, "priority": 1, "queryAACube": {"scale": 0.5196152329444885, "x": -5.904480457305908, "y": 0.8614521026611328, "z": -2.4799537658691406}, "type": "Material", "userData": "{\"grabbableKey\":{\"grabbable\":false}}", "visible": false}, {"clientOnly": true, "created": "2018-08-28T16:44:23Z", "id": "{f1c2110e-1429-49b2-949d-6c73718b2d65}", "lastEdited": 1535474935078059, "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "materialData": "{\"materials\":{\"albedoMap\":\"file:///C:/users/wayne/development/hifi-fork/interface/resources/images/buttonBezel.png\"}}", "materialURL": "materialData", "owningAvatarID": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "parentID": "{00000000-0000-0000-0000-000000000001}", "parentMaterialName": "2", "position": {"blue": 5.94891357421875, "green": 0, "red": 0.9275937080383301, "x": -3.07240629196167, "y": -9.5, "z": 1.94891357421875}, "priority": 1, "queryAACube": {"scale": 0.5196152329444885, "x": -5.904480457305908, "y": 0.8614521026611328, "z": -2.4799537658691406}, "type": "Material", "userData": "{\"grabbableKey\":{\"grabbable\":false}}", "visible": false}, {"clientOnly": true, "created": "2018-08-28T16:44:23Z", "id": "{1e09084f-c0d7-4bd4-a78d-290c03391579}", "lastEdited": 1535474935076234, "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "materialData": "{\"materials\":{\"emissiveMap\":\"file:///C:/users/wayne/development/hifi-fork/interface/resources/images/buttonBezel_highlight.png\"}}", "materialURL": "materialData", "owningAvatarID": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "parentID": "{00000000-0000-0000-0000-000000000001}", "parentMaterialName": "2", "position": {"blue": 5.94891357421875, "green": 0, "red": 0.927593469619751, "x": -3.072406530380249, "y": -9.5, "z": 1.94891357421875}, "queryAACube": {"scale": 0.5196152329444885, "x": -5.904480457305908, "y": 0.8614521026611328, "z": -2.479954719543457}, "type": "Material", "userData": "{\"grabbableKey\":{\"grabbable\":false}}", "visible": false}, {"clientOnly": true, "created": "2018-08-28T16:44:23Z", "id": "{e8282a17-76a5-4cd8-9f0e-473f097c8ad1}", "lastEdited": 1535474935077902, "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "materialData": "{\"materials\":{\"albedoMap\":\"file:///C:/users/wayne/development/hifi-fork/interface/resources/images/buttonBezel.png\"}}", "materialURL": "materialData", "owningAvatarID": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "parentID": "{00000000-0000-0000-0000-000000000001}", "parentMaterialName": "2", "position": {"blue": 5.94891357421875, "green": 0, "red": 0.9275937080383301, "x": -3.07240629196167, "y": -9.5, "z": 1.94891357421875}, "priority": 1, "queryAACube": {"scale": 0.5196152329444885, "x": -5.904480457305908, "y": 0.8614521026611328, "z": -2.4799537658691406}, "type": "Material", "userData": "{\"grabbableKey\":{\"grabbable\":false}}", "visible": false}, {"clientOnly": true, "created": "2018-08-28T16:44:23Z", "id": "{46fbad8a-5bc0-44c8-a9ca-beb38f672d2a}", "lastEdited": 1535474935076994, "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "materialData": "{\"materials\":{\"albedoMap\":\"file:///C:/users/wayne/development/hifi-fork/interface/resources/images/buttonBezel.png\"}}", "materialURL": "materialData", "owningAvatarID": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "parentID": "{00000000-0000-0000-0000-000000000001}", "parentMaterialName": "2", "position": {"blue": 5.94891357421875, "green": 0, "red": 0.9275937080383301, "x": -3.07240629196167, "y": -9.5, "z": 1.94891357421875}, "priority": 1, "queryAACube": {"scale": 0.5196152329444885, "x": -5.904480457305908, "y": 0.8614521026611328, "z": -2.4799537658691406}, "type": "Material", "userData": "{\"grabbableKey\":{\"grabbable\":false}}", "visible": false}, {"clientOnly": true, "created": "2018-08-28T16:44:23Z", "id": "{2861b544-1c03-439a-85ad-3758ba87ca55}", "lastEdited": 1535474935076339, "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "materialData": "{\"materials\":{\"emissiveMap\":\"file:///C:/users/wayne/development/hifi-fork/interface/resources/images/buttonBezel_highlight.png\"}}", "materialURL": "materialData", "owningAvatarID": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "parentID": "{00000000-0000-0000-0000-000000000001}", "parentMaterialName": "2", "position": {"blue": 5.94891357421875, "green": 0, "red": 0.9275937080383301, "x": -3.07240629196167, "y": -9.5, "z": 1.94891357421875}, "queryAACube": {"scale": 0.5196152329444885, "x": -5.904480457305908, "y": 0.8614521026611328, "z": -2.4799537658691406}, "type": "Material", "userData": "{\"grabbableKey\":{\"grabbable\":false}}", "visible": false}, {"clientOnly": true, "created": "2018-08-28T16:44:23Z", "id": "{59b7fc7f-0100-4115-a9f8-55d5b45da540}", "lastEdited": 1535474935077098, "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "materialData": "{\"materials\":{\"albedoMap\":\"file:///C:/users/wayne/development/hifi-fork/interface/resources/images/buttonBezel.png\"}}", "materialURL": "materialData", "owningAvatarID": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "parentID": "{00000000-0000-0000-0000-000000000001}", "parentMaterialName": "2", "position": {"blue": 5.94891357421875, "green": 0, "red": 0.9275937080383301, "x": -3.07240629196167, "y": -9.5, "z": 1.94891357421875}, "priority": 1, "queryAACube": {"scale": 0.5196152329444885, "x": -5.904480457305908, "y": 0.8614521026611328, "z": -2.4799537658691406}, "type": "Material", "userData": "{\"grabbableKey\":{\"grabbable\":false}}", "visible": false}, {"clientOnly": true, "created": "2018-08-28T16:44:23Z", "id": "{2888e4b0-6eb1-4468-9b95-893dcb3e99a5}", "lastEdited": 1535474935076443, "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "materialData": "{\"materials\":{\"emissiveMap\":\"file:///C:/users/wayne/development/hifi-fork/interface/resources/images/buttonBezel_highlight.png\"}}", "materialURL": "materialData", "owningAvatarID": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "parentID": "{00000000-0000-0000-0000-000000000001}", "parentMaterialName": "2", "position": {"blue": 5.94891357421875, "green": 0, "red": 0.9275937080383301, "x": -3.07240629196167, "y": -9.5, "z": 1.94891357421875}, "queryAACube": {"scale": 0.5196152329444885, "x": -5.904480457305908, "y": 0.8614521026611328, "z": -2.4799537658691406}, "type": "Material", "userData": "{\"grabbableKey\":{\"grabbable\":false}}", "visible": false}, {"clientOnly": true, "created": "2018-08-28T16:44:23Z", "id": "{36f00cad-64b0-415f-9f70-e92cd85836d8}", "lastEdited": 1535474935076783, "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "materialData": "{\"materials\":{\"albedoMap\":\"file:///C:/users/wayne/development/hifi-fork/interface/resources/images/buttonBezel.png\"}}", "materialURL": "materialData", "owningAvatarID": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "parentID": "{00000000-0000-0000-0000-000000000001}", "parentMaterialName": "2", "position": {"blue": 5.94891357421875, "green": 0, "red": 0.9275937080383301, "x": -3.07240629196167, "y": -9.5, "z": 1.94891357421875}, "priority": 1, "queryAACube": {"scale": 0.5196152329444885, "x": -5.904480457305908, "y": 0.8614521026611328, "z": -2.4799537658691406}, "type": "Material", "userData": "{\"grabbableKey\":{\"grabbable\":false}}", "visible": false}, {"clientOnly": false, "created": "2018-08-28T16:44:23Z", "dimensions": {"blue": 14.40000057220459, "green": 14.40000057220459, "red": 14.40000057220459, "x": 14.40000057220459, "y": 14.40000057220459, "z": 14.40000057220459}, "id": "{2cefd6b6-6a00-49c3-87c8-71b9c83f96f1}", "lastEdited": 1535474935056115, "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", "position": {"blue": 2.3440732955932617, "green": 1.7684326171875, "red": 1.8812973499298096, "x": -2.1187026500701904, "y": -7.7315673828125, "z": -1.6559267044067383}, "queryAACube": {"scale": 24.9415340423584, "x": -10.589469909667969, "y": -10.7023344039917, "z": -10.126693725585938}, "rotation": {"w": 0.8697794675827026, "x": -1.52587890625e-05, "y": 0.4933699369430542, "z": -4.57763671875e-05}, "shapeType": "box", "skyboxMode": "enabled", "type": "Zone", "userData": "{\"grabbableKey\":{\"grabbable\":false}}"}, {"clientOnly": false, "color": {"blue": 0, "green": 0, "red": 0}, "created": "2018-08-28T16:44:23Z", "dimensions": {"blue": 11.117486953735352, "green": 3.580313205718994, "red": 0.20000000298023224, "x": 0.20000000298023224, "y": 3.580313205718994, "z": 11.117486953735352}, "id": "{efde7819-3a7a-4984-ac3e-28bcf69c6b1e}", "lastEdited": 1535474935053285, "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", "position": {"blue": 0, "green": 1.1583251953125, "red": 4.971565246582031, "x": 0.9715652465820312, "y": -8.3416748046875, "z": -4}, "queryAACube": {"scale": 11.681488037109375, "x": -0.8691787719726562, "y": -4.6824188232421875, "z": -5.8407440185546875}, "rotation": {"w": 0.8637980222702026, "x": -4.57763671875e-05, "y": 0.5038070678710938, "z": -1.52587890625e-05}, "shape": "Cube", "type": "Box", "userData": "{\"grabbableKey\":{\"grabbable\":false}}", "visible": false}, {"clientOnly": false, "color": {"blue": 0, "green": 0, "red": 0}, "created": "2018-08-28T16:44:23Z", "dimensions": {"blue": 11.117486953735352, "green": 3.580313205718994, "red": 0.20000000298023224, "x": 0.20000000298023224, "y": 3.580313205718994, "z": 11.117486953735352}, "id": "{fe8d6b12-3697-4fcd-9092-af5b7f49a7f5}", "lastEdited": 1535474947253763, "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", "position": {"blue": 5.268576622009277, "green": 1.1588134765625, "red": 6.100250244140625, "x": 2.100250244140625, "y": -8.3411865234375, "z": 1.2685766220092773}, "queryAACube": {"scale": 11.681488037109375, "x": 0.2595062255859375, "y": -4.6819305419921875, "z": -0.5721673965454102}, "rotation": {"w": 0.9662165641784668, "x": -4.57763671875e-05, "y": -0.2576791048049927, "z": 1.52587890625e-05}, "shape": "Cube", "type": "Box", "userData": "{\"grabbableKey\":{\"grabbable\":false}}", "visible": false}, {"clientOnly": false, "created": "2018-08-28T16:44:23Z", "dimensions": {"blue": 0.06014331430196762, "green": 2.582186460494995, "red": 2.582186698913574, "x": 2.582186698913574, "y": 2.582186460494995, "z": 0.06014331430196762}, "id": "{c8f9b1b1-3bd7-473c-8c2a-a8644a7acdd7}", "lastEdited": 1535474935054058, "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "modelURL": "http://hifi-content.s3.amazonaws.com/alexia/LoadingScreens/oopsDialog.fbx", "name": "Oops Dialog", "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", "position": {"blue": 1.45927095413208, "green": 1.6763916015625, "red": 0, "x": -4, "y": -7.8236083984375, "z": -2.54072904586792}, "queryAACube": {"scale": 3.6522583961486816, "x": -1.8261291980743408, "y": -0.14973759651184082, "z": -0.36685824394226074}, "rotation": {"w": 0.8684672117233276, "x": -4.57763671875e-05, "y": 0.4957197904586792, "z": -7.62939453125e-05}, "type": "Model", "userData": "{\"grabbableKey\":{\"grabbable\":false}}"}, {"angularDamping": 0, "clientOnly": false, "color": {"blue": 0, "green": 0, "red": 255}, "created": "2018-08-28T16:44:23Z", "dimensions": {"blue": 0.20000000298023224, "green": 0.20000000298023224, "red": 0.20000000298023224, "x": 0.20000000298023224, "y": 0.20000000298023224, "z": 0.20000000298023224}, "id": "{d0b0491a-5c7d-4cd2-9ebe-492b709a702b}", "lastEdited": 1535474935052912, "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "name": "Particle Rotate", "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", "position": {"blue": 3.8216662406921387, "green": 0, "red": 1.2409718036651611, "x": -2.759028196334839, "y": -9.5, "z": -0.17833375930786133}, "queryAACube": {"scale": 0.3464101552963257, "x": 1.0677666664123535, "y": -0.17320507764816284, "z": 3.648461103439331}, "rotation": {"w": 0.6444342136383057, "x": -0.08220034837722778, "y": -0.6649118661880493, "z": 0.3684900999069214}, "script": "http://hifi-content.s3.amazonaws.com/alexia/Models/Portal/rotate.js", "scriptTimestamp": 1532724769253, "shape": "Cube", "type": "Box", "userData": "{\"grabbableKey\":{\"grabbable\":false}}", "visible": false}, {"angularDamping": 0, "clientOnly": false, "color": {"blue": 0, "green": 0, "red": 255}, "created": "2018-08-28T16:44:23Z", "dimensions": {"blue": 0.20000000298023224, "green": 0.20000000298023224, "red": 0.20000000298023224, "x": 0.20000000298023224, "y": 0.20000000298023224, "z": 0.20000000298023224}, "id": "{ae4a84ee-4e95-4e6b-b63d-399893a9b3f9}", "lastEdited": 1535474935052114, "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "name": "Particle Rotate", "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", "position": {"blue": 1.3116319179534912, "green": 0, "red": 2.705613613128662, "x": -1.294386386871338, "y": -9.5, "z": -2.688368082046509}, "queryAACube": {"scale": 0.3464101552963257, "x": 2.5324084758758545, "y": -0.17320507764816284, "z": 1.1384267807006836}, "rotation": {"w": 0.9127794504165649, "x": 0.2575265169143677, "y": 0.15553522109985352, "z": 0.2761729955673218}, "script": "http://hifi-content.s3.amazonaws.com/alexia/Models/Portal/rotate.js", "scriptTimestamp": 1532724769253, "shape": "Cube", "type": "Box", "userData": "{\"grabbableKey\":{\"grabbable\":false}}", "visible": false}, {"angularDamping": 0, "clientOnly": false, "color": {"blue": 0, "green": 0, "red": 255}, "created": "2018-08-28T16:44:23Z", "dimensions": {"blue": 0.20000000298023224, "green": 0.20000000298023224, "red": 0.20000000298023224, "x": 0.20000000298023224, "y": 0.20000000298023224, "z": 0.20000000298023224}, "id": "{c1404297-9c6a-4d2d-b91d-c844ddd391db}", "lastEdited": 1535474935051740, "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "name": "Particle Rotate", "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", "position": {"blue": 3.8216662406921387, "green": 0.0772705078125, "red": 1.2409718036651611, "x": -2.759028196334839, "y": -9.4227294921875, "z": -0.17833375930786133}, "queryAACube": {"scale": 0.3464101552963257, "x": 1.0677666664123535, "y": -0.09593456983566284, "z": 3.648461103439331}, "rotation": {"w": 0.926024317741394, "x": 0.20308232307434082, "y": -0.010269343852996826, "z": 0.3179827928543091}, "script": "http://hifi-content.s3.amazonaws.com/alexia/Models/Portal/rotate.js", "scriptTimestamp": 1532724769253, "shape": "Cube", "type": "Box", "userData": "{\"grabbableKey\":{\"grabbable\":false}}", "visible": false}, {"clientOnly": false, "created": "2018-08-28T16:44:23Z", "dimensions": {"blue": 9.030570983886719, "green": 0.0719478651881218, "red": 9.030570983886719, "x": 9.030570983886719, "y": 0.0719478651881218, "z": 9.030570983886719}, "id": "{f17920f3-1571-4c5e-b002-e328cf202037}", "lastEdited": 1535474950564649, "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "modelURL": "http://hifi-content.s3.amazonaws.com/alexia/LoadingScreens/floor.fbx", "name": "Floor", "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", "position": {"blue": 4.2324604988098145, "green": 0.17547607421875, "red": 4.802988529205322, "x": 0.8029885292053223, "y": -9.32452392578125, "z": 0.23246049880981445}, "queryAACube": {"scale": 12.771358489990234, "x": -1.582690715789795, "y": -6.210203170776367, "z": -2.1532187461853027}, "rotation": {"w": 0.8648051023483276, "x": -1.52587890625e-05, "y": 0.5020675659179688, "z": -4.57763671875e-05}, "shapeType": "simple-hull", "type": "Model", "userData": "{\"grabbableKey\":{\"grabbable\":false}}"}, {"alpha": 0, "alphaFinish": 0, "alphaStart": 0.25, "clientOnly": false, "colorFinish": {"blue": 0, "green": 0, "red": 0, "x": 0, "y": 0, "z": 0}, "colorStart": {"blue": 255, "green": 255, "red": 255, "x": 255, "y": 255, "z": 255}, "created": "2018-08-28T16:44:23Z", "dimensions": {"blue": 13.24000072479248, "green": 13.24000072479248, "red": 13.24000072479248, "x": 13.24000072479248, "y": 13.24000072479248, "z": 13.24000072479248}, "emitAcceleration": {"blue": 0, "green": 0.10000000149011612, "red": 0, "x": 0, "y": 0.10000000149011612, "z": 0}, "emitDimensions": {"blue": 1, "green": 1, "red": 1, "x": 1, "y": 1, "z": 1}, "emitOrientation": {"w": 1, "x": -1.52587890625e-05, "y": -1.52587890625e-05, "z": -1.52587890625e-05}, "emitRate": 6, "emitSpeed": 0, "id": "{7561445a-4f9c-41aa-96b9-b8ce8ad686d3}", "lastEdited": 1535474935056499, "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "lifespan": 10, "maxParticles": 10, "name": "Stars", "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", "particleRadius": 0.07000000029802322, "polarFinish": 3.1415927410125732, "position": {"blue": 1.3712034225463867, "green": 0.5220947265625, "red": 2.6281180381774902, "x": -1.3718819618225098, "y": -8.9779052734375, "z": -2.6287965774536133}, "queryAACube": {"scale": 22.932353973388672, "x": -8.838058471679688, "y": -10.944082260131836, "z": -10.09497356414795}, "radiusFinish": 0, "radiusStart": 0, "rotation": {"w": 0.9852597713470459, "x": -1.52587890625e-05, "y": -0.17106890678405762, "z": -7.62939453125e-05}, "speedSpread": 0, "spinFinish": null, "spinStart": null, "textures": "http://hifi-content.s3.amazonaws.com/alexia/Models/Portal/star.png", "type": "ParticleEffect", "userData": "{\"grabbableKey\":{\"grabbable\":false}}"}, {"alpha": 0, "alphaFinish": 0, "alphaStart": 1, "clientOnly": false, "color": {"blue": 255, "green": 205, "red": 3}, "colorFinish": {"blue": 0, "green": 0, "red": 0, "x": 0, "y": 0, "z": 0}, "colorStart": {"blue": 255, "green": 204, "red": 0, "x": 0, "y": 204, "z": 255}, "created": "2018-08-28T16:44:23Z", "dimensions": {"blue": 2.5, "green": 2.5, "red": 2.5, "x": 2.5, "y": 2.5, "z": 2.5}, "emitAcceleration": {"blue": 0, "green": 0, "red": 0, "x": 0, "y": 0, "z": 0}, "emitDimensions": {"blue": 1, "green": 1, "red": 1, "x": 1, "y": 1, "z": 1}, "emitOrientation": {"w": 0.9993909597396851, "x": 0.034897372126579285, "y": -1.525880907138344e-05, "z": -1.525880907138344e-05}, "emitRate": 2, "emitSpeed": 0, "emitterShouldTrail": true, "id": "{7c59b77f-2f88-4c35-899b-3e42bd486ed6}", "lastEdited": 1535474935050547, "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "lifespan": 10, "maxParticles": 40, "name": "Rays", "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", "particleRadius": 0.75, "polarFinish": 3.1415927410125732, "position": {"blue": 3.814434051513672, "green": 1.44122314453125, "red": 1.2319090366363525, "x": -2.7680909633636475, "y": -8.05877685546875, "z": -0.18556594848632812}, "queryAACube": {"scale": 4.330127239227295, "x": -0.9331545829772949, "y": -0.7238404750823975, "z": 1.6493704319000244}, "radiusFinish": 0.10000000149011612, "radiusStart": 0, "rotation": {"w": 0.9594720602035522, "x": -1.52587890625e-05, "y": 0.28178834915161133, "z": -4.57763671875e-05}, "speedSpread": 0, "spinFinish": null, "spinStart": null, "textures": "http://hifi-content.s3.amazonaws.com/alexia/Models/Portal/stripe.png", "type": "ParticleEffect", "userData": "{\"grabbableKey\":{\"grabbable\":false}}"}, {"angularDamping": 0, "clientOnly": false, "color": {"blue": 0, "green": 0, "red": 255}, "created": "2018-08-28T16:44:23Z", "dimensions": {"blue": 0.20000000298023224, "green": 0.20000000298023224, "red": 0.20000000298023224, "x": 0.20000000298023224, "y": 0.20000000298023224, "z": 0.20000000298023224}, "id": "{55dd2b28-1c53-431b-b2ea-61155dfc6652}", "lastEdited": 1535474935055239, "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "name": "Particle Rotate", "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", "position": {"blue": 1.3116319179534912, "green": 0.15618896484375, "red": 2.705613613128662, "x": -1.294386386871338, "y": -9.34381103515625, "z": -2.688368082046509}, "queryAACube": {"scale": 0.3464101552963257, "x": 2.5324084758758545, "y": -0.017016112804412842, "z": 1.1384267807006836}, "rotation": {"w": 0.46953535079956055, "x": -0.16719311475753784, "y": -0.7982757091522217, "z": 0.3380941152572632}, "script": "http://hifi-content.s3.amazonaws.com/alexia/Models/Portal/rotate.js", "scriptTimestamp": 1532724769253, "shape": "Cube", "type": "Box", "userData": "{\"grabbableKey\":{\"grabbable\":false}}", "visible": false}, {"angularDamping": 0, "clientOnly": false, "color": {"blue": 0, "green": 0, "red": 255}, "created": "2018-08-28T16:44:23Z", "dimensions": {"blue": 0.20000000298023224, "green": 0.20000000298023224, "red": 0.20000000298023224, "x": 0.20000000298023224, "y": 0.20000000298023224, "z": 0.20000000298023224}, "id": "{f40563f7-01e3-4faf-ad1b-19cab7a386a1}", "lastEdited": 1535474935054426, "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "name": "Particle Rotate", "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", "position": {"blue": 1.3116319179534912, "green": 0.0772705078125, "red": 2.705613613128662, "x": -1.294386386871338, "y": -9.4227294921875, "z": -2.688368082046509}, "queryAACube": {"scale": 0.3464101552963257, "x": 2.5324084758758545, "y": -0.09593456983566284, "z": 1.1384267807006836}, "rotation": {"w": -0.38777750730514526, "x": -0.37337303161621094, "y": -0.8409399390220642, "z": 0.055222392082214355}, "script": "http://hifi-content.s3.amazonaws.com/alexia/Models/Portal/rotate.js", "scriptTimestamp": 1532724769253, "shape": "Cube", "type": "Box", "userData": "{\"grabbableKey\":{\"grabbable\":false}}", "visible": false}, {"alpha": 0, "alphaFinish": 0, "alphaStart": 1, "clientOnly": false, "color": {"blue": 211, "green": 227, "red": 104}, "colorFinish": {"blue": 0, "green": 0, "red": 0, "x": 0, "y": 0, "z": 0}, "colorStart": {"blue": 211, "green": 227, "red": 104, "x": 104, "y": 227, "z": 211}, "created": "2018-08-28T16:44:23Z", "dimensions": {"blue": 2.5, "green": 2.5, "red": 2.5, "x": 2.5, "y": 2.5, "z": 2.5}, "emitAcceleration": {"blue": 0, "green": 0, "red": 0, "x": 0, "y": 0, "z": 0}, "emitDimensions": {"blue": 1, "green": 1, "red": 1, "x": 1, "y": 1, "z": 1}, "emitOrientation": {"w": 0.9993909597396851, "x": 0.034897372126579285, "y": -1.525880907138344e-05, "z": -1.525880907138344e-05}, "emitRate": 2, "emitSpeed": 0, "id": "{c4a86707-2eaa-41f5-a1ad-3e6029178d75}", "lastEdited": 1535474935052538, "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "lifespan": 10, "maxParticles": 40, "name": "Rays", "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", "particleRadius": 0.75, "polarFinish": 3.1415927410125732, "position": {"blue": 1.3553659915924072, "green": 1.44122314453125, "red": 2.572803497314453, "x": -1.4271965026855469, "y": -8.05877685546875, "z": -2.6446340084075928}, "queryAACube": {"scale": 4.330127239227295, "x": 0.40773987770080566, "y": -0.7238404750823975, "z": -0.8096976280212402}, "radiusFinish": 0.10000000149011612, "radiusStart": 0, "rotation": {"w": 0.9803768396377563, "x": -1.52587890625e-05, "y": 0.19707024097442627, "z": -7.62939453125e-05}, "speedSpread": 0, "spinFinish": null, "spinStart": null, "textures": "http://hifi-content.s3.amazonaws.com/alexia/Models/Portal/stripe.png", "type": "ParticleEffect", "userData": "{\"grabbableKey\":{\"grabbable\":false}}"}, {"angularDamping": 0, "clientOnly": false, "color": {"blue": 0, "green": 0, "red": 255}, "created": "2018-08-28T16:44:23Z", "dimensions": {"blue": 0.20000000298023224, "green": 0.20000000298023224, "red": 0.20000000298023224, "x": 0.20000000298023224, "y": 0.20000000298023224, "z": 0.20000000298023224}, "id": "{65dd9c7f-815d-4b50-ba3b-24709691aed1}", "lastEdited": 1535474935056805, "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "name": "Particle Rotate", "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", "position": {"blue": 3.8216662406921387, "green": 0.15618896484375, "red": 1.2409718036651611, "x": -2.759028196334839, "y": -9.34381103515625, "z": -0.17833375930786133}, "queryAACube": {"scale": 0.3464101552963257, "x": 1.0677666664123535, "y": -0.017016112804412842, "z": 3.648461103439331}, "rotation": {"w": 0.6747081279754639, "x": -0.06532388925552368, "y": -0.6342412233352661, "z": 0.37175559997558594}, "script": "http://hifi-content.s3.amazonaws.com/alexia/Models/Portal/rotate.js", "scriptTimestamp": 1532724769253, "shape": "Cube", "type": "Box", "userData": "{\"grabbableKey\":{\"grabbable\":false}}", "visible": false}, {"clientOnly": false, "color": {"blue": 0, "green": 0, "red": 0}, "created": "2018-08-28T16:44:23Z", "dimensions": {"blue": 11.117486953735352, "green": 3.580313205718994, "red": 0.20000000298023224, "x": 0.20000000298023224, "y": 3.580313205718994, "z": 11.117486953735352}, "id": "{4e0f3381-ac88-48ab-9378-0b7818188234}", "lastEdited": 1535474935053657, "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", "position": {"blue": 6.1806135177612305, "green": 1.1588134765625, "red": 1.4755167961120605, "x": -2.5244832038879395, "y": -8.3411865234375, "z": 2.1806135177612305}, "queryAACube": {"scale": 11.681488037109375, "x": -4.365227222442627, "y": -4.6819305419921875, "z": 0.33986949920654297}, "rotation": {"w": 0.8637980222702026, "x": -4.57763671875e-05, "y": 0.5038070678710938, "z": -1.52587890625e-05}, "shape": "Cube", "type": "Box", "userData": "{\"grabbableKey\":{\"grabbable\":false}}", "visible": false}, {"clientOnly": false, "color": {"blue": 0, "green": 0, "red": 0}, "created": "2018-08-28T16:44:23Z", "dimensions": {"blue": 11.117486953735352, "green": 3.580313205718994, "red": 0.20000000298023224, "x": 0.20000000298023224, "y": 3.580313205718994, "z": 11.117486953735352}, "id": "{2da3a1d6-c757-4cc3-b20c-d7ec87eedd52}", "lastEdited": 1535474935050931, "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", "position": {"blue": 1.9063844680786133, "green": 1.15850830078125, "red": 0.16632509231567383, "x": -3.833674907684326, "y": -8.34149169921875, "z": -2.0936155319213867}, "queryAACube": {"scale": 11.681488037109375, "x": -5.674418926239014, "y": -4.6822357177734375, "z": -3.934359550476074}, "rotation": {"w": 0.9666743278503418, "x": -4.57763671875e-05, "y": -0.2560006380081177, "z": 1.52587890625e-05}, "shape": "Cube", "type": "Box", "userData": "{\"grabbableKey\":{\"grabbable\":false}}", "visible": false}, {"alpha": 0, "alphaFinish": 0, "alphaStart": 0.25, "clientOnly": false, "colorFinish": {"blue": 0, "green": 0, "red": 0, "x": 0, "y": 0, "z": 0}, "colorStart": {"blue": 255, "green": 255, "red": 255, "x": 255, "y": 255, "z": 255}, "created": "2018-08-28T16:44:23Z", "dimensions": {"blue": 13.24000072479248, "green": 13.24000072479248, "red": 13.24000072479248, "x": 13.24000072479248, "y": 13.24000072479248, "z": 13.24000072479248}, "emitAcceleration": {"blue": 0, "green": 0.10000000149011612, "red": 0, "x": 0, "y": 0.10000000149011612, "z": 0}, "emitDimensions": {"blue": 1, "green": 1, "red": 1, "x": 1, "y": 1, "z": 1}, "emitOrientation": {"w": 1, "x": -1.52587890625e-05, "y": -1.52587890625e-05, "z": -1.52587890625e-05}, "emitRate": 6, "emitSpeed": 0, "emitterShouldTrail": true, "id": "{7db57102-9a57-48d6-9937-bcec7892c3d9}", "lastEdited": 1535474935058139, "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "lifespan": 10, "maxParticles": 10, "name": "Stars", "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", "particleRadius": 0.07000000029802322, "polarFinish": 3.1415927410125732, "position": {"blue": 3.78922963142395, "green": 0.5220947265625, "red": 1.1928560733795166, "x": -2.8071439266204834, "y": -8.9779052734375, "z": -0.2107703685760498}, "queryAACube": {"scale": 22.932353973388672, "x": -10.273321151733398, "y": -10.944082260131836, "z": -7.676947593688965}, "radiusFinish": 0, "radiusStart": 0, "rotation": {"w": 0.996429443359375, "x": -1.52587890625e-05, "y": -0.08442819118499756, "z": -4.57763671875e-05}, "speedSpread": 0, "spinFinish": null, "spinStart": null, "textures": "http://hifi-content.s3.amazonaws.com/alexia/Models/Portal/star.png", "type": "ParticleEffect", "userData": "{\"grabbableKey\":{\"grabbable\":false}}"}, {"clientOnly": false, "created": "2018-08-28T16:44:23Z", "dimensions": {"blue": 2.1097896099090576, "green": 0.04847164824604988, "red": 1.458284616470337, "x": 1.458284616470337, "y": 0.04847164824604988, "z": 2.1097896099090576}, "id": "{434940be-0b45-4ca2-97db-91e698c20bfd}", "lastEdited": 1535474935055655, "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "modelURL": "http://hifi-content.s3.amazonaws.com/alexia/Models/Portal/portal2.fbx", "name": "Back", "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", "position": {"blue": 1.5835940837860107, "green": 0.2467041015625, "red": 3.0345542430877686, "x": -0.9654457569122314, "y": -9.2532958984375, "z": -2.4164059162139893}, "queryAACube": {"scale": 2.5651814937591553, "x": 1.751963496208191, "y": -1.0358866453170776, "z": 0.3010033369064331}, "rotation": {"w": 0.9084458351135254, "x": -1.52587890625e-05, "y": 0.4179598093032837, "z": -0.0001068115234375}, "type": "Model", "userData": "{\"grabbableKey\":{\"grabbable\":true}}"}, {"clientOnly": false, "created": "2018-08-28T16:44:23Z", "dimensions": {"blue": 2.1097896099090576, "green": 0.04847164824604988, "red": 1.458284616470337, "x": 1.458284616470337, "y": 0.04847164824604988, "z": 2.1097896099090576}, "id": "{5f853b12-33b9-4f40-92a8-4506047fdcd8}", "lastEdited": 1535474935051356, "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "modelURL": "http://hifi-content.s3.amazonaws.com/alexia/Models/Portal/portal1.fbx", "name": "Try Again", "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", "position": {"blue": 3.946338653564453, "green": 0.2467041015625, "red": 1.6013128757476807, "x": -2.3986871242523193, "y": -9.2532958984375, "z": -0.053661346435546875}, "queryAACube": {"scale": 2.5651814937591553, "x": 0.318722128868103, "y": -1.0358866453170776, "z": 2.663747787475586}, "rotation": {"w": 0.8220492601394653, "x": -1.52587890625e-05, "y": 0.5693598985671997, "z": -0.0001068115234375}, "type": "Model", "userData": "{\"grabbableKey\":{\"grabbable\":true}}"}], "Id": "{aa6032b9-9c35-4481-acd9-03b97400b83a}", "Version": 93} \ No newline at end of file diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index e290531471..7a8dd6c767 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -1193,7 +1193,11 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo getOverlays().deleteOverlay(getTabletHomeButtonID()); getOverlays().deleteOverlay(getTabletFrameID()); }); +#if defined(Q_OS_ANDROID) connect(&domainHandler, &DomainHandler::domainConnectionRefused, this, &Application::domainConnectionRefused); +#else + connect(&domainHandler, &DomainHandler::domainConnectionRefused, this, &Application::domainConnectionRedirect); +#endif // We could clear ATP assets only when changing domains, but it's possible that the domain you are connected // to has gone down and switched to a new content set, so when you reconnect the cached ATP assets will no longer be valid. @@ -2313,6 +2317,35 @@ void Application::domainConnectionRefused(const QString& reasonMessage, int reas } } +void Application::domainConnectionRedirect(const QString& reasonMessage, int reasonCodeInt, const QString& extraInfo) { + DomainHandler::ConnectionRefusedReason reasonCode = static_cast(reasonCodeInt); + auto addressManager = DependencyManager::get(); + + if (reasonCode == DomainHandler::ConnectionRefusedReason::TooManyUsers && !extraInfo.isEmpty()) { + addressManager->handleLookupString(extraInfo); + return; + } + + switch (reasonCode) { + case DomainHandler::ConnectionRefusedReason::ProtocolMismatch: + case DomainHandler::ConnectionRefusedReason::TooManyUsers: + case DomainHandler::ConnectionRefusedReason::Unknown: { + QString message = "Unable to connect to the location you are visiting.\n"; + message += reasonMessage; + //OffscreenUi::asyncWarning("", message); + addressManager->handleLookupString(REDIRECT_HIFI_ADDRESS); + getMyAvatar()->setWorldVelocity(glm::vec3(0.0f)); + // in (w, x, y, z) component-structure for the constructor + getMyAvatar()->setWorldOrientation(glm::quat(0.8775935173034668f, 0.0f, 0.4794054925441742f, 0.0f)); + break; + } + default: + // nothing to do. + break; + } +} + + QString Application::getUserAgent() { if (QThread::currentThread() != thread()) { QString userAgent; diff --git a/interface/src/Application.h b/interface/src/Application.h index ae7e686f35..5255bb7d63 100644 --- a/interface/src/Application.h +++ b/interface/src/Application.h @@ -471,6 +471,7 @@ private slots: void updateDisplayMode(); void setDisplayPlugin(DisplayPluginPointer newPlugin); void domainConnectionRefused(const QString& reasonMessage, int reason, const QString& extraInfo); + void domainConnectionRedirect(const QString& reasonMessage, int reason, const QString& extraInfo); void addAssetToWorldCheckModelSize(); diff --git a/libraries/networking/src/AddressManager.cpp b/libraries/networking/src/AddressManager.cpp index 00e552af89..0b69fda3fa 100644 --- a/libraries/networking/src/AddressManager.cpp +++ b/libraries/networking/src/AddressManager.cpp @@ -31,6 +31,7 @@ #include "udt/PacketHeaders.h" const QString DEFAULT_HIFI_ADDRESS = "file:///~/serverless/tutorial.json"; +const QString REDIRECT_HIFI_ADDRESS = "file:///~/serverless/redirect.json"; const QString ADDRESS_MANAGER_SETTINGS_GROUP = "AddressManager"; const QString SETTINGS_CURRENT_ADDRESS_KEY = "address"; @@ -709,7 +710,6 @@ bool AddressManager::handleViewpoint(const QString& viewpointString, bool should // We use _newHostLookupPath to determine if the client has already stored its last address // before moving to a new host thanks to the information in the same lookup URL. - if (definitelyPathOnly || (!pathString.isEmpty() && pathString != _newHostLookupPath) || trigger == Back || trigger == Forward) { addCurrentAddressToHistory(trigger); diff --git a/libraries/networking/src/AddressManager.h b/libraries/networking/src/AddressManager.h index 37b85a9acd..245517d8cd 100644 --- a/libraries/networking/src/AddressManager.h +++ b/libraries/networking/src/AddressManager.h @@ -23,6 +23,7 @@ #include "AccountManager.h" extern const QString DEFAULT_HIFI_ADDRESS; +extern const QString REDIRECT_HIFI_ADDRESS; const QString SANDBOX_HIFI_ADDRESS = "hifi://localhost"; const QString INDEX_PATH = "/"; From 223f86108f62b6b89a53c2542f2c26a7cd3cc957 Mon Sep 17 00:00:00 2001 From: Wayne Chen Date: Tue, 28 Aug 2018 17:34:48 -0700 Subject: [PATCH 028/123] adding debugging stuff --- libraries/networking/src/AddressManager.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/libraries/networking/src/AddressManager.cpp b/libraries/networking/src/AddressManager.cpp index 0b69fda3fa..732a2d7963 100644 --- a/libraries/networking/src/AddressManager.cpp +++ b/libraries/networking/src/AddressManager.cpp @@ -48,6 +48,8 @@ QString AddressManager::getProtocol() const { QUrl AddressManager::currentAddress(bool domainOnly) const { QUrl hifiURL = _domainURL; + auto urlStr = hifiURL.toString().toStdString(); + if (!domainOnly && hifiURL.scheme() == URL_SCHEME_HIFI) { hifiURL.setPath(currentPath()); } From 442644381ad20d829459fa281b7fc5c67e959db4 Mon Sep 17 00:00:00 2001 From: Wayne Chen Date: Tue, 28 Aug 2018 20:16:55 -0700 Subject: [PATCH 029/123] adding other connection refused suppressions --- interface/src/ConnectionMonitor.cpp | 4 ++-- scripts/system/notifications.js | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/interface/src/ConnectionMonitor.cpp b/interface/src/ConnectionMonitor.cpp index 8deddbda82..7d535d9eaf 100644 --- a/interface/src/ConnectionMonitor.cpp +++ b/interface/src/ConnectionMonitor.cpp @@ -38,7 +38,7 @@ void ConnectionMonitor::init() { connect(&_timer, &QTimer::timeout, this, []() { qDebug() << "ConnectionMonitor: Showing connection failure window"; - DependencyManager::get()->setDomainConnectionFailureVisibility(true); + //DependencyManager::get()->setDomainConnectionFailureVisibility(true); }); } @@ -48,5 +48,5 @@ void ConnectionMonitor::startTimer() { void ConnectionMonitor::stopTimer() { _timer.stop(); - DependencyManager::get()->setDomainConnectionFailureVisibility(false); + //DependencyManager::get()->setDomainConnectionFailureVisibility(false); } diff --git a/scripts/system/notifications.js b/scripts/system/notifications.js index 0778e2a44b..13d500b909 100644 --- a/scripts/system/notifications.js +++ b/scripts/system/notifications.js @@ -624,7 +624,7 @@ Controller.keyReleaseEvent.connect(keyReleaseEvent); Script.update.connect(update); Script.scriptEnding.connect(scriptEnding); - Window.domainConnectionRefused.connect(onDomainConnectionRefused); + //Window.domainConnectionRefused.connect(onDomainConnectionRefused); Window.stillSnapshotTaken.connect(onSnapshotTaken); Window.snapshot360Taken.connect(onSnapshotTaken); Window.processingGifStarted.connect(processingGif); From 6cdcae33496f20c6c9096648eb169e88f49ad959 Mon Sep 17 00:00:00 2001 From: Wayne Chen Date: Wed, 29 Aug 2018 16:11:51 -0700 Subject: [PATCH 030/123] switching address syntax, updating redirection domain --- interface/CMakeLists.txt | 2 - .../qml/hifi/tablet/TabletAddressDialog.qml | 4 +- interface/resources/serverless/redirect.json | 1155 ++++++++++++++++- 3 files changed, 1156 insertions(+), 5 deletions(-) diff --git a/interface/CMakeLists.txt b/interface/CMakeLists.txt index cd058add94..ded77b9013 100644 --- a/interface/CMakeLists.txt +++ b/interface/CMakeLists.txt @@ -341,8 +341,6 @@ else() set(INTERFACE_EXEC_DIR "$") set(RESOURCES_DEV_DIR "${INTERFACE_EXEC_DIR}/resources") - message(STATUS "${RESOURCES_DEV_DIR}") - # copy the resources files beside the executable add_custom_command(TARGET ${TARGET_NAME} POST_BUILD COMMAND "${CMAKE_COMMAND}" -E copy_if_different diff --git a/interface/resources/qml/hifi/tablet/TabletAddressDialog.qml b/interface/resources/qml/hifi/tablet/TabletAddressDialog.qml index c9d05aea51..bec3d82c56 100644 --- a/interface/resources/qml/hifi/tablet/TabletAddressDialog.qml +++ b/interface/resources/qml/hifi/tablet/TabletAddressDialog.qml @@ -79,7 +79,7 @@ StackView { return; } location.text = targetString; - toggleOrGo(true, targetString); + toggleOrGo(targetString, true); clearAddressLineTimer.start(); } @@ -401,7 +401,7 @@ StackView { } } - function toggleOrGo(fromSuggestions, address) { + function toggleOrGo(address, fromSuggestions) { if (address !== undefined && address !== "") { addressBarDialog.loadAddress(address, fromSuggestions); clearAddressLineTimer.start(); diff --git a/interface/resources/serverless/redirect.json b/interface/resources/serverless/redirect.json index d97f44220a..9e3b29cc26 100644 --- a/interface/resources/serverless/redirect.json +++ b/interface/resources/serverless/redirect.json @@ -1 +1,1154 @@ -{"DataVersion": 0, "Entities": [{"clientOnly": true, "created": "2018-08-28T16:44:23Z", "id": "{9a50eca4-5c97-4e21-8cb9-5197bb09770e}", "lastEdited": 1535474935077402, "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "materialData": "{\"materials\":{\"albedoMap\":\"file:///C:/users/wayne/development/hifi-fork/interface/resources/images/buttonBezel.png\"}}", "materialURL": "materialData", "owningAvatarID": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "parentID": "{00000000-0000-0000-0000-000000000001}", "parentMaterialName": "2", "position": {"blue": 5.94891357421875, "green": 0, "red": 0.9275937080383301, "x": -3.07240629196167, "y": -9.5, "z": 1.94891357421875}, "priority": 1, "queryAACube": {"scale": 0.5196152329444885, "x": -5.904480457305908, "y": 0.8614521026611328, "z": -2.4799537658691406}, "type": "Material", "userData": "{\"grabbableKey\":{\"grabbable\":false}}", "visible": false}, {"clientOnly": true, "created": "2018-08-28T16:44:23Z", "id": "{2d90745c-2fe2-4f9c-9dcf-b715f7a9d0c0}", "lastEdited": 1535474935076550, "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "materialData": "{\"materials\":{\"albedoMap\":\"file:///C:/users/wayne/development/hifi-fork/interface/resources/images/buttonBezel.png\"}}", "materialURL": "materialData", "owningAvatarID": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "parentID": "{00000000-0000-0000-0000-000000000001}", "parentMaterialName": "2", "position": {"blue": 5.94891357421875, "green": 0, "red": 0.9275937080383301, "x": -3.07240629196167, "y": -9.5, "z": 1.94891357421875}, "priority": 1, "queryAACube": {"scale": 0.5196152329444885, "x": -5.904480457305908, "y": 0.8614521026611328, "z": -2.4799537658691406}, "type": "Material", "userData": "{\"grabbableKey\":{\"grabbable\":false}}", "visible": false}, {"clientOnly": true, "created": "2018-08-28T16:44:23Z", "id": "{dcbca0fd-e1d8-4248-b2b4-b91346224876}", "lastEdited": 1535474935077745, "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "materialData": "{\"materials\":{\"emissiveMap\":\"file:///C:/users/wayne/development/hifi-fork/interface/resources/images/buttonBezel_highlight.png\"}}", "materialURL": "materialData", "owningAvatarID": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "parentID": "{00000000-0000-0000-0000-000000000001}", "parentMaterialName": "2", "position": {"blue": 5.94891357421875, "green": 0, "red": 0.927593469619751, "x": -3.072406530380249, "y": -9.5, "z": 1.94891357421875}, "queryAACube": {"scale": 0.5196152329444885, "x": -5.904480457305908, "y": 0.8614521026611328, "z": -2.479954719543457}, "type": "Material", "userData": "{\"grabbableKey\":{\"grabbable\":false}}", "visible": false}, {"clientOnly": true, "created": "2018-08-28T16:44:23Z", "id": "{3df15ffb-9614-4ec1-81a8-e278d1917748}", "lastEdited": 1535474935076889, "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "materialData": "{\"materials\":{\"emissiveMap\":\"file:///C:/users/wayne/development/hifi-fork/interface/resources/images/buttonBezel_highlight.png\"}}", "materialURL": "materialData", "owningAvatarID": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "parentID": "{00000000-0000-0000-0000-000000000001}", "parentMaterialName": "2", "position": {"blue": 5.94891357421875, "green": 0, "red": 0.9275937080383301, "x": -3.07240629196167, "y": -9.5, "z": 1.94891357421875}, "queryAACube": {"scale": 0.5196152329444885, "x": -5.904480457305908, "y": 0.8614521026611328, "z": -2.4799537658691406}, "type": "Material", "userData": "{\"grabbableKey\":{\"grabbable\":false}}", "visible": false}, {"clientOnly": true, "created": "2018-08-28T16:44:23Z", "id": "{fd138f98-d436-41d2-863a-cbef6e41e1cb}", "lastEdited": 1535474935078215, "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "materialData": "{\"materials\":{\"albedoMap\":\"file:///C:/users/wayne/development/hifi-fork/interface/resources/images/buttonBezel.png\"}}", "materialURL": "materialData", "owningAvatarID": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "parentID": "{00000000-0000-0000-0000-000000000001}", "parentMaterialName": "2", "position": {"blue": 5.94891357421875, "green": 0, "red": 0.9275937080383301, "x": -3.07240629196167, "y": -9.5, "z": 1.94891357421875}, "priority": 1, "queryAACube": {"scale": 0.5196152329444885, "x": -5.904480457305908, "y": 0.8614521026611328, "z": -2.4799537658691406}, "type": "Material", "userData": "{\"grabbableKey\":{\"grabbable\":false}}", "visible": false}, {"clientOnly": true, "created": "2018-08-28T16:44:23Z", "id": "{b2a90f9e-a5ec-4faa-a6a3-bc457516f5ee}", "lastEdited": 1535474935077505, "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "materialData": "{\"materials\":{\"albedoMap\":\"file:///C:/users/wayne/development/hifi-fork/interface/resources/images/buttonBezel.png\"}}", "materialURL": "materialData", "owningAvatarID": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "parentID": "{00000000-0000-0000-0000-000000000001}", "parentMaterialName": "2", "position": {"blue": 5.94891357421875, "green": 0, "red": 0.9275937080383301, "x": -3.07240629196167, "y": -9.5, "z": 1.94891357421875}, "priority": 1, "queryAACube": {"scale": 0.5196152329444885, "x": -5.904480457305908, "y": 0.8614521026611328, "z": -2.4799537658691406}, "type": "Material", "userData": "{\"grabbableKey\":{\"grabbable\":false}}", "visible": false}, {"clientOnly": true, "created": "2018-08-28T16:44:23Z", "id": "{5c9ef440-f022-4d21-9f00-22827851b522}", "lastEdited": 1535474935077201, "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "materialData": "{\"materials\":{\"emissiveMap\":\"file:///C:/users/wayne/development/hifi-fork/interface/resources/images/buttonBezel_highlight.png\"}}", "materialURL": "materialData", "owningAvatarID": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "parentID": "{00000000-0000-0000-0000-000000000001}", "parentMaterialName": "2", "position": {"blue": 5.948914527893066, "green": 0.16741032898426056, "red": 0.9275782108306885, "x": -3.0724217891693115, "y": -9.33258967101574, "z": 1.9489145278930664}, "queryAACube": {"scale": 0.5196152329444885, "x": -5.904473781585693, "y": 1.028862476348877, "z": -2.479969024658203}, "type": "Material", "userData": "{\"grabbableKey\":{\"grabbable\":false}}", "visible": false}, {"clientOnly": true, "created": "2018-08-28T16:44:23Z", "id": "{2fe2296a-d74d-4ee7-bf7d-c9665bc63237}", "lastEdited": 1535474935076656, "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "materialData": "{\"materials\":{\"emissiveMap\":\"file:///C:/users/wayne/development/hifi-fork/interface/resources/images/buttonBezel_highlight.png\"}}", "materialURL": "materialData", "owningAvatarID": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "parentID": "{00000000-0000-0000-0000-000000000001}", "parentMaterialName": "2", "position": {"blue": 5.94891357421875, "green": 0, "red": 0.9275937080383301, "x": -3.07240629196167, "y": -9.5, "z": 1.94891357421875}, "queryAACube": {"scale": 0.5196152329444885, "x": -5.904480457305908, "y": 0.8614521026611328, "z": -2.4799537658691406}, "type": "Material", "userData": "{\"grabbableKey\":{\"grabbable\":false}}", "visible": false}, {"clientOnly": true, "created": "2018-08-28T16:44:23Z", "id": "{86f1ba10-2921-45ad-bb74-dcbe5c49bc69}", "lastEdited": 1535474935077298, "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "materialData": "{\"materials\":{\"emissiveMap\":\"file:///C:/users/wayne/development/hifi-fork/interface/resources/images/buttonBezel_highlight.png\"}}", "materialURL": "materialData", "owningAvatarID": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "parentID": "{00000000-0000-0000-0000-000000000001}", "parentMaterialName": "2", "position": {"blue": 5.94891357421875, "green": 0, "red": 0.9275937080383301, "x": -3.07240629196167, "y": -9.5, "z": 1.94891357421875}, "queryAACube": {"scale": 0.5196152329444885, "x": -5.904480457305908, "y": 0.8614521026611328, "z": -2.4799537658691406}, "type": "Material", "userData": "{\"grabbableKey\":{\"grabbable\":false}}", "visible": false}, {"clientOnly": true, "created": "2018-08-28T16:44:23Z", "id": "{1023380c-13dd-445d-bb57-1e02574e5cb3}", "lastEdited": 1535474935076124, "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "materialData": "{\"materials\":{\"emissiveMap\":\"file:///C:/users/wayne/development/hifi-fork/interface/resources/images/buttonBezel_highlight.png\"}}", "materialURL": "materialData", "owningAvatarID": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "parentID": "{00000000-0000-0000-0000-000000000001}", "parentMaterialName": "2", "position": {"blue": 5.94891357421875, "green": 0, "red": 0.9275937080383301, "x": -3.07240629196167, "y": -9.5, "z": 1.94891357421875}, "queryAACube": {"scale": 0.5196152329444885, "x": -5.904480457305908, "y": 0.8614521026611328, "z": -2.4799537658691406}, "type": "Material", "userData": "{\"grabbableKey\":{\"grabbable\":false}}", "visible": false}, {"clientOnly": true, "created": "2018-08-28T16:44:23Z", "id": "{d5d841b2-0cc0-4ab2-84fe-dce3d20f6b04}", "lastEdited": 1535474935077609, "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "materialData": "{\"materials\":{\"emissiveMap\":\"file:///C:/users/wayne/development/hifi-fork/interface/resources/images/buttonBezel_highlight.png\"}}", "materialURL": "materialData", "owningAvatarID": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "parentID": "{00000000-0000-0000-0000-000000000001}", "parentMaterialName": "2", "position": {"blue": 5.94891357421875, "green": 0, "red": 0.927593469619751, "x": -3.072406530380249, "y": -9.5, "z": 1.94891357421875}, "queryAACube": {"scale": 0.5196152329444885, "x": -5.904480457305908, "y": 0.8614521026611328, "z": -2.479954719543457}, "type": "Material", "userData": "{\"grabbableKey\":{\"grabbable\":false}}", "visible": false}, {"clientOnly": true, "created": "2018-08-28T16:44:23Z", "id": "{02da6c73-bab0-4e7e-b8fc-a9c0500ac66e}", "lastEdited": 1535474935075994, "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "materialData": "{\"materials\":{\"albedoMap\":\"file:///C:/users/wayne/development/hifi-fork/interface/resources/images/buttonBezel.png\"}}", "materialURL": "materialData", "owningAvatarID": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "parentID": "{00000000-0000-0000-0000-000000000001}", "parentMaterialName": "2", "position": {"blue": 5.94891357421875, "green": 0, "red": 0.9275937080383301, "x": -3.07240629196167, "y": -9.5, "z": 1.94891357421875}, "priority": 1, "queryAACube": {"scale": 0.5196152329444885, "x": -5.904480457305908, "y": 0.8614521026611328, "z": -2.4799537658691406}, "type": "Material", "userData": "{\"grabbableKey\":{\"grabbable\":false}}", "visible": false}, {"clientOnly": true, "created": "2018-08-28T16:44:23Z", "id": "{f1c2110e-1429-49b2-949d-6c73718b2d65}", "lastEdited": 1535474935078059, "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "materialData": "{\"materials\":{\"albedoMap\":\"file:///C:/users/wayne/development/hifi-fork/interface/resources/images/buttonBezel.png\"}}", "materialURL": "materialData", "owningAvatarID": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "parentID": "{00000000-0000-0000-0000-000000000001}", "parentMaterialName": "2", "position": {"blue": 5.94891357421875, "green": 0, "red": 0.9275937080383301, "x": -3.07240629196167, "y": -9.5, "z": 1.94891357421875}, "priority": 1, "queryAACube": {"scale": 0.5196152329444885, "x": -5.904480457305908, "y": 0.8614521026611328, "z": -2.4799537658691406}, "type": "Material", "userData": "{\"grabbableKey\":{\"grabbable\":false}}", "visible": false}, {"clientOnly": true, "created": "2018-08-28T16:44:23Z", "id": "{1e09084f-c0d7-4bd4-a78d-290c03391579}", "lastEdited": 1535474935076234, "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "materialData": "{\"materials\":{\"emissiveMap\":\"file:///C:/users/wayne/development/hifi-fork/interface/resources/images/buttonBezel_highlight.png\"}}", "materialURL": "materialData", "owningAvatarID": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "parentID": "{00000000-0000-0000-0000-000000000001}", "parentMaterialName": "2", "position": {"blue": 5.94891357421875, "green": 0, "red": 0.927593469619751, "x": -3.072406530380249, "y": -9.5, "z": 1.94891357421875}, "queryAACube": {"scale": 0.5196152329444885, "x": -5.904480457305908, "y": 0.8614521026611328, "z": -2.479954719543457}, "type": "Material", "userData": "{\"grabbableKey\":{\"grabbable\":false}}", "visible": false}, {"clientOnly": true, "created": "2018-08-28T16:44:23Z", "id": "{e8282a17-76a5-4cd8-9f0e-473f097c8ad1}", "lastEdited": 1535474935077902, "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "materialData": "{\"materials\":{\"albedoMap\":\"file:///C:/users/wayne/development/hifi-fork/interface/resources/images/buttonBezel.png\"}}", "materialURL": "materialData", "owningAvatarID": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "parentID": "{00000000-0000-0000-0000-000000000001}", "parentMaterialName": "2", "position": {"blue": 5.94891357421875, "green": 0, "red": 0.9275937080383301, "x": -3.07240629196167, "y": -9.5, "z": 1.94891357421875}, "priority": 1, "queryAACube": {"scale": 0.5196152329444885, "x": -5.904480457305908, "y": 0.8614521026611328, "z": -2.4799537658691406}, "type": "Material", "userData": "{\"grabbableKey\":{\"grabbable\":false}}", "visible": false}, {"clientOnly": true, "created": "2018-08-28T16:44:23Z", "id": "{46fbad8a-5bc0-44c8-a9ca-beb38f672d2a}", "lastEdited": 1535474935076994, "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "materialData": "{\"materials\":{\"albedoMap\":\"file:///C:/users/wayne/development/hifi-fork/interface/resources/images/buttonBezel.png\"}}", "materialURL": "materialData", "owningAvatarID": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "parentID": "{00000000-0000-0000-0000-000000000001}", "parentMaterialName": "2", "position": {"blue": 5.94891357421875, "green": 0, "red": 0.9275937080383301, "x": -3.07240629196167, "y": -9.5, "z": 1.94891357421875}, "priority": 1, "queryAACube": {"scale": 0.5196152329444885, "x": -5.904480457305908, "y": 0.8614521026611328, "z": -2.4799537658691406}, "type": "Material", "userData": "{\"grabbableKey\":{\"grabbable\":false}}", "visible": false}, {"clientOnly": true, "created": "2018-08-28T16:44:23Z", "id": "{2861b544-1c03-439a-85ad-3758ba87ca55}", "lastEdited": 1535474935076339, "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "materialData": "{\"materials\":{\"emissiveMap\":\"file:///C:/users/wayne/development/hifi-fork/interface/resources/images/buttonBezel_highlight.png\"}}", "materialURL": "materialData", "owningAvatarID": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "parentID": "{00000000-0000-0000-0000-000000000001}", "parentMaterialName": "2", "position": {"blue": 5.94891357421875, "green": 0, "red": 0.9275937080383301, "x": -3.07240629196167, "y": -9.5, "z": 1.94891357421875}, "queryAACube": {"scale": 0.5196152329444885, "x": -5.904480457305908, "y": 0.8614521026611328, "z": -2.4799537658691406}, "type": "Material", "userData": "{\"grabbableKey\":{\"grabbable\":false}}", "visible": false}, {"clientOnly": true, "created": "2018-08-28T16:44:23Z", "id": "{59b7fc7f-0100-4115-a9f8-55d5b45da540}", "lastEdited": 1535474935077098, "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "materialData": "{\"materials\":{\"albedoMap\":\"file:///C:/users/wayne/development/hifi-fork/interface/resources/images/buttonBezel.png\"}}", "materialURL": "materialData", "owningAvatarID": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "parentID": "{00000000-0000-0000-0000-000000000001}", "parentMaterialName": "2", "position": {"blue": 5.94891357421875, "green": 0, "red": 0.9275937080383301, "x": -3.07240629196167, "y": -9.5, "z": 1.94891357421875}, "priority": 1, "queryAACube": {"scale": 0.5196152329444885, "x": -5.904480457305908, "y": 0.8614521026611328, "z": -2.4799537658691406}, "type": "Material", "userData": "{\"grabbableKey\":{\"grabbable\":false}}", "visible": false}, {"clientOnly": true, "created": "2018-08-28T16:44:23Z", "id": "{2888e4b0-6eb1-4468-9b95-893dcb3e99a5}", "lastEdited": 1535474935076443, "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "materialData": "{\"materials\":{\"emissiveMap\":\"file:///C:/users/wayne/development/hifi-fork/interface/resources/images/buttonBezel_highlight.png\"}}", "materialURL": "materialData", "owningAvatarID": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "parentID": "{00000000-0000-0000-0000-000000000001}", "parentMaterialName": "2", "position": {"blue": 5.94891357421875, "green": 0, "red": 0.9275937080383301, "x": -3.07240629196167, "y": -9.5, "z": 1.94891357421875}, "queryAACube": {"scale": 0.5196152329444885, "x": -5.904480457305908, "y": 0.8614521026611328, "z": -2.4799537658691406}, "type": "Material", "userData": "{\"grabbableKey\":{\"grabbable\":false}}", "visible": false}, {"clientOnly": true, "created": "2018-08-28T16:44:23Z", "id": "{36f00cad-64b0-415f-9f70-e92cd85836d8}", "lastEdited": 1535474935076783, "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "materialData": "{\"materials\":{\"albedoMap\":\"file:///C:/users/wayne/development/hifi-fork/interface/resources/images/buttonBezel.png\"}}", "materialURL": "materialData", "owningAvatarID": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "parentID": "{00000000-0000-0000-0000-000000000001}", "parentMaterialName": "2", "position": {"blue": 5.94891357421875, "green": 0, "red": 0.9275937080383301, "x": -3.07240629196167, "y": -9.5, "z": 1.94891357421875}, "priority": 1, "queryAACube": {"scale": 0.5196152329444885, "x": -5.904480457305908, "y": 0.8614521026611328, "z": -2.4799537658691406}, "type": "Material", "userData": "{\"grabbableKey\":{\"grabbable\":false}}", "visible": false}, {"clientOnly": false, "created": "2018-08-28T16:44:23Z", "dimensions": {"blue": 14.40000057220459, "green": 14.40000057220459, "red": 14.40000057220459, "x": 14.40000057220459, "y": 14.40000057220459, "z": 14.40000057220459}, "id": "{2cefd6b6-6a00-49c3-87c8-71b9c83f96f1}", "lastEdited": 1535474935056115, "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", "position": {"blue": 2.3440732955932617, "green": 1.7684326171875, "red": 1.8812973499298096, "x": -2.1187026500701904, "y": -7.7315673828125, "z": -1.6559267044067383}, "queryAACube": {"scale": 24.9415340423584, "x": -10.589469909667969, "y": -10.7023344039917, "z": -10.126693725585938}, "rotation": {"w": 0.8697794675827026, "x": -1.52587890625e-05, "y": 0.4933699369430542, "z": -4.57763671875e-05}, "shapeType": "box", "skyboxMode": "enabled", "type": "Zone", "userData": "{\"grabbableKey\":{\"grabbable\":false}}"}, {"clientOnly": false, "color": {"blue": 0, "green": 0, "red": 0}, "created": "2018-08-28T16:44:23Z", "dimensions": {"blue": 11.117486953735352, "green": 3.580313205718994, "red": 0.20000000298023224, "x": 0.20000000298023224, "y": 3.580313205718994, "z": 11.117486953735352}, "id": "{efde7819-3a7a-4984-ac3e-28bcf69c6b1e}", "lastEdited": 1535474935053285, "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", "position": {"blue": 0, "green": 1.1583251953125, "red": 4.971565246582031, "x": 0.9715652465820312, "y": -8.3416748046875, "z": -4}, "queryAACube": {"scale": 11.681488037109375, "x": -0.8691787719726562, "y": -4.6824188232421875, "z": -5.8407440185546875}, "rotation": {"w": 0.8637980222702026, "x": -4.57763671875e-05, "y": 0.5038070678710938, "z": -1.52587890625e-05}, "shape": "Cube", "type": "Box", "userData": "{\"grabbableKey\":{\"grabbable\":false}}", "visible": false}, {"clientOnly": false, "color": {"blue": 0, "green": 0, "red": 0}, "created": "2018-08-28T16:44:23Z", "dimensions": {"blue": 11.117486953735352, "green": 3.580313205718994, "red": 0.20000000298023224, "x": 0.20000000298023224, "y": 3.580313205718994, "z": 11.117486953735352}, "id": "{fe8d6b12-3697-4fcd-9092-af5b7f49a7f5}", "lastEdited": 1535474947253763, "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", "position": {"blue": 5.268576622009277, "green": 1.1588134765625, "red": 6.100250244140625, "x": 2.100250244140625, "y": -8.3411865234375, "z": 1.2685766220092773}, "queryAACube": {"scale": 11.681488037109375, "x": 0.2595062255859375, "y": -4.6819305419921875, "z": -0.5721673965454102}, "rotation": {"w": 0.9662165641784668, "x": -4.57763671875e-05, "y": -0.2576791048049927, "z": 1.52587890625e-05}, "shape": "Cube", "type": "Box", "userData": "{\"grabbableKey\":{\"grabbable\":false}}", "visible": false}, {"clientOnly": false, "created": "2018-08-28T16:44:23Z", "dimensions": {"blue": 0.06014331430196762, "green": 2.582186460494995, "red": 2.582186698913574, "x": 2.582186698913574, "y": 2.582186460494995, "z": 0.06014331430196762}, "id": "{c8f9b1b1-3bd7-473c-8c2a-a8644a7acdd7}", "lastEdited": 1535474935054058, "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "modelURL": "http://hifi-content.s3.amazonaws.com/alexia/LoadingScreens/oopsDialog.fbx", "name": "Oops Dialog", "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", "position": {"blue": 1.45927095413208, "green": 1.6763916015625, "red": 0, "x": -4, "y": -7.8236083984375, "z": -2.54072904586792}, "queryAACube": {"scale": 3.6522583961486816, "x": -1.8261291980743408, "y": -0.14973759651184082, "z": -0.36685824394226074}, "rotation": {"w": 0.8684672117233276, "x": -4.57763671875e-05, "y": 0.4957197904586792, "z": -7.62939453125e-05}, "type": "Model", "userData": "{\"grabbableKey\":{\"grabbable\":false}}"}, {"angularDamping": 0, "clientOnly": false, "color": {"blue": 0, "green": 0, "red": 255}, "created": "2018-08-28T16:44:23Z", "dimensions": {"blue": 0.20000000298023224, "green": 0.20000000298023224, "red": 0.20000000298023224, "x": 0.20000000298023224, "y": 0.20000000298023224, "z": 0.20000000298023224}, "id": "{d0b0491a-5c7d-4cd2-9ebe-492b709a702b}", "lastEdited": 1535474935052912, "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "name": "Particle Rotate", "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", "position": {"blue": 3.8216662406921387, "green": 0, "red": 1.2409718036651611, "x": -2.759028196334839, "y": -9.5, "z": -0.17833375930786133}, "queryAACube": {"scale": 0.3464101552963257, "x": 1.0677666664123535, "y": -0.17320507764816284, "z": 3.648461103439331}, "rotation": {"w": 0.6444342136383057, "x": -0.08220034837722778, "y": -0.6649118661880493, "z": 0.3684900999069214}, "script": "http://hifi-content.s3.amazonaws.com/alexia/Models/Portal/rotate.js", "scriptTimestamp": 1532724769253, "shape": "Cube", "type": "Box", "userData": "{\"grabbableKey\":{\"grabbable\":false}}", "visible": false}, {"angularDamping": 0, "clientOnly": false, "color": {"blue": 0, "green": 0, "red": 255}, "created": "2018-08-28T16:44:23Z", "dimensions": {"blue": 0.20000000298023224, "green": 0.20000000298023224, "red": 0.20000000298023224, "x": 0.20000000298023224, "y": 0.20000000298023224, "z": 0.20000000298023224}, "id": "{ae4a84ee-4e95-4e6b-b63d-399893a9b3f9}", "lastEdited": 1535474935052114, "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "name": "Particle Rotate", "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", "position": {"blue": 1.3116319179534912, "green": 0, "red": 2.705613613128662, "x": -1.294386386871338, "y": -9.5, "z": -2.688368082046509}, "queryAACube": {"scale": 0.3464101552963257, "x": 2.5324084758758545, "y": -0.17320507764816284, "z": 1.1384267807006836}, "rotation": {"w": 0.9127794504165649, "x": 0.2575265169143677, "y": 0.15553522109985352, "z": 0.2761729955673218}, "script": "http://hifi-content.s3.amazonaws.com/alexia/Models/Portal/rotate.js", "scriptTimestamp": 1532724769253, "shape": "Cube", "type": "Box", "userData": "{\"grabbableKey\":{\"grabbable\":false}}", "visible": false}, {"angularDamping": 0, "clientOnly": false, "color": {"blue": 0, "green": 0, "red": 255}, "created": "2018-08-28T16:44:23Z", "dimensions": {"blue": 0.20000000298023224, "green": 0.20000000298023224, "red": 0.20000000298023224, "x": 0.20000000298023224, "y": 0.20000000298023224, "z": 0.20000000298023224}, "id": "{c1404297-9c6a-4d2d-b91d-c844ddd391db}", "lastEdited": 1535474935051740, "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "name": "Particle Rotate", "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", "position": {"blue": 3.8216662406921387, "green": 0.0772705078125, "red": 1.2409718036651611, "x": -2.759028196334839, "y": -9.4227294921875, "z": -0.17833375930786133}, "queryAACube": {"scale": 0.3464101552963257, "x": 1.0677666664123535, "y": -0.09593456983566284, "z": 3.648461103439331}, "rotation": {"w": 0.926024317741394, "x": 0.20308232307434082, "y": -0.010269343852996826, "z": 0.3179827928543091}, "script": "http://hifi-content.s3.amazonaws.com/alexia/Models/Portal/rotate.js", "scriptTimestamp": 1532724769253, "shape": "Cube", "type": "Box", "userData": "{\"grabbableKey\":{\"grabbable\":false}}", "visible": false}, {"clientOnly": false, "created": "2018-08-28T16:44:23Z", "dimensions": {"blue": 9.030570983886719, "green": 0.0719478651881218, "red": 9.030570983886719, "x": 9.030570983886719, "y": 0.0719478651881218, "z": 9.030570983886719}, "id": "{f17920f3-1571-4c5e-b002-e328cf202037}", "lastEdited": 1535474950564649, "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "modelURL": "http://hifi-content.s3.amazonaws.com/alexia/LoadingScreens/floor.fbx", "name": "Floor", "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", "position": {"blue": 4.2324604988098145, "green": 0.17547607421875, "red": 4.802988529205322, "x": 0.8029885292053223, "y": -9.32452392578125, "z": 0.23246049880981445}, "queryAACube": {"scale": 12.771358489990234, "x": -1.582690715789795, "y": -6.210203170776367, "z": -2.1532187461853027}, "rotation": {"w": 0.8648051023483276, "x": -1.52587890625e-05, "y": 0.5020675659179688, "z": -4.57763671875e-05}, "shapeType": "simple-hull", "type": "Model", "userData": "{\"grabbableKey\":{\"grabbable\":false}}"}, {"alpha": 0, "alphaFinish": 0, "alphaStart": 0.25, "clientOnly": false, "colorFinish": {"blue": 0, "green": 0, "red": 0, "x": 0, "y": 0, "z": 0}, "colorStart": {"blue": 255, "green": 255, "red": 255, "x": 255, "y": 255, "z": 255}, "created": "2018-08-28T16:44:23Z", "dimensions": {"blue": 13.24000072479248, "green": 13.24000072479248, "red": 13.24000072479248, "x": 13.24000072479248, "y": 13.24000072479248, "z": 13.24000072479248}, "emitAcceleration": {"blue": 0, "green": 0.10000000149011612, "red": 0, "x": 0, "y": 0.10000000149011612, "z": 0}, "emitDimensions": {"blue": 1, "green": 1, "red": 1, "x": 1, "y": 1, "z": 1}, "emitOrientation": {"w": 1, "x": -1.52587890625e-05, "y": -1.52587890625e-05, "z": -1.52587890625e-05}, "emitRate": 6, "emitSpeed": 0, "id": "{7561445a-4f9c-41aa-96b9-b8ce8ad686d3}", "lastEdited": 1535474935056499, "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "lifespan": 10, "maxParticles": 10, "name": "Stars", "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", "particleRadius": 0.07000000029802322, "polarFinish": 3.1415927410125732, "position": {"blue": 1.3712034225463867, "green": 0.5220947265625, "red": 2.6281180381774902, "x": -1.3718819618225098, "y": -8.9779052734375, "z": -2.6287965774536133}, "queryAACube": {"scale": 22.932353973388672, "x": -8.838058471679688, "y": -10.944082260131836, "z": -10.09497356414795}, "radiusFinish": 0, "radiusStart": 0, "rotation": {"w": 0.9852597713470459, "x": -1.52587890625e-05, "y": -0.17106890678405762, "z": -7.62939453125e-05}, "speedSpread": 0, "spinFinish": null, "spinStart": null, "textures": "http://hifi-content.s3.amazonaws.com/alexia/Models/Portal/star.png", "type": "ParticleEffect", "userData": "{\"grabbableKey\":{\"grabbable\":false}}"}, {"alpha": 0, "alphaFinish": 0, "alphaStart": 1, "clientOnly": false, "color": {"blue": 255, "green": 205, "red": 3}, "colorFinish": {"blue": 0, "green": 0, "red": 0, "x": 0, "y": 0, "z": 0}, "colorStart": {"blue": 255, "green": 204, "red": 0, "x": 0, "y": 204, "z": 255}, "created": "2018-08-28T16:44:23Z", "dimensions": {"blue": 2.5, "green": 2.5, "red": 2.5, "x": 2.5, "y": 2.5, "z": 2.5}, "emitAcceleration": {"blue": 0, "green": 0, "red": 0, "x": 0, "y": 0, "z": 0}, "emitDimensions": {"blue": 1, "green": 1, "red": 1, "x": 1, "y": 1, "z": 1}, "emitOrientation": {"w": 0.9993909597396851, "x": 0.034897372126579285, "y": -1.525880907138344e-05, "z": -1.525880907138344e-05}, "emitRate": 2, "emitSpeed": 0, "emitterShouldTrail": true, "id": "{7c59b77f-2f88-4c35-899b-3e42bd486ed6}", "lastEdited": 1535474935050547, "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "lifespan": 10, "maxParticles": 40, "name": "Rays", "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", "particleRadius": 0.75, "polarFinish": 3.1415927410125732, "position": {"blue": 3.814434051513672, "green": 1.44122314453125, "red": 1.2319090366363525, "x": -2.7680909633636475, "y": -8.05877685546875, "z": -0.18556594848632812}, "queryAACube": {"scale": 4.330127239227295, "x": -0.9331545829772949, "y": -0.7238404750823975, "z": 1.6493704319000244}, "radiusFinish": 0.10000000149011612, "radiusStart": 0, "rotation": {"w": 0.9594720602035522, "x": -1.52587890625e-05, "y": 0.28178834915161133, "z": -4.57763671875e-05}, "speedSpread": 0, "spinFinish": null, "spinStart": null, "textures": "http://hifi-content.s3.amazonaws.com/alexia/Models/Portal/stripe.png", "type": "ParticleEffect", "userData": "{\"grabbableKey\":{\"grabbable\":false}}"}, {"angularDamping": 0, "clientOnly": false, "color": {"blue": 0, "green": 0, "red": 255}, "created": "2018-08-28T16:44:23Z", "dimensions": {"blue": 0.20000000298023224, "green": 0.20000000298023224, "red": 0.20000000298023224, "x": 0.20000000298023224, "y": 0.20000000298023224, "z": 0.20000000298023224}, "id": "{55dd2b28-1c53-431b-b2ea-61155dfc6652}", "lastEdited": 1535474935055239, "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "name": "Particle Rotate", "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", "position": {"blue": 1.3116319179534912, "green": 0.15618896484375, "red": 2.705613613128662, "x": -1.294386386871338, "y": -9.34381103515625, "z": -2.688368082046509}, "queryAACube": {"scale": 0.3464101552963257, "x": 2.5324084758758545, "y": -0.017016112804412842, "z": 1.1384267807006836}, "rotation": {"w": 0.46953535079956055, "x": -0.16719311475753784, "y": -0.7982757091522217, "z": 0.3380941152572632}, "script": "http://hifi-content.s3.amazonaws.com/alexia/Models/Portal/rotate.js", "scriptTimestamp": 1532724769253, "shape": "Cube", "type": "Box", "userData": "{\"grabbableKey\":{\"grabbable\":false}}", "visible": false}, {"angularDamping": 0, "clientOnly": false, "color": {"blue": 0, "green": 0, "red": 255}, "created": "2018-08-28T16:44:23Z", "dimensions": {"blue": 0.20000000298023224, "green": 0.20000000298023224, "red": 0.20000000298023224, "x": 0.20000000298023224, "y": 0.20000000298023224, "z": 0.20000000298023224}, "id": "{f40563f7-01e3-4faf-ad1b-19cab7a386a1}", "lastEdited": 1535474935054426, "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "name": "Particle Rotate", "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", "position": {"blue": 1.3116319179534912, "green": 0.0772705078125, "red": 2.705613613128662, "x": -1.294386386871338, "y": -9.4227294921875, "z": -2.688368082046509}, "queryAACube": {"scale": 0.3464101552963257, "x": 2.5324084758758545, "y": -0.09593456983566284, "z": 1.1384267807006836}, "rotation": {"w": -0.38777750730514526, "x": -0.37337303161621094, "y": -0.8409399390220642, "z": 0.055222392082214355}, "script": "http://hifi-content.s3.amazonaws.com/alexia/Models/Portal/rotate.js", "scriptTimestamp": 1532724769253, "shape": "Cube", "type": "Box", "userData": "{\"grabbableKey\":{\"grabbable\":false}}", "visible": false}, {"alpha": 0, "alphaFinish": 0, "alphaStart": 1, "clientOnly": false, "color": {"blue": 211, "green": 227, "red": 104}, "colorFinish": {"blue": 0, "green": 0, "red": 0, "x": 0, "y": 0, "z": 0}, "colorStart": {"blue": 211, "green": 227, "red": 104, "x": 104, "y": 227, "z": 211}, "created": "2018-08-28T16:44:23Z", "dimensions": {"blue": 2.5, "green": 2.5, "red": 2.5, "x": 2.5, "y": 2.5, "z": 2.5}, "emitAcceleration": {"blue": 0, "green": 0, "red": 0, "x": 0, "y": 0, "z": 0}, "emitDimensions": {"blue": 1, "green": 1, "red": 1, "x": 1, "y": 1, "z": 1}, "emitOrientation": {"w": 0.9993909597396851, "x": 0.034897372126579285, "y": -1.525880907138344e-05, "z": -1.525880907138344e-05}, "emitRate": 2, "emitSpeed": 0, "id": "{c4a86707-2eaa-41f5-a1ad-3e6029178d75}", "lastEdited": 1535474935052538, "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "lifespan": 10, "maxParticles": 40, "name": "Rays", "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", "particleRadius": 0.75, "polarFinish": 3.1415927410125732, "position": {"blue": 1.3553659915924072, "green": 1.44122314453125, "red": 2.572803497314453, "x": -1.4271965026855469, "y": -8.05877685546875, "z": -2.6446340084075928}, "queryAACube": {"scale": 4.330127239227295, "x": 0.40773987770080566, "y": -0.7238404750823975, "z": -0.8096976280212402}, "radiusFinish": 0.10000000149011612, "radiusStart": 0, "rotation": {"w": 0.9803768396377563, "x": -1.52587890625e-05, "y": 0.19707024097442627, "z": -7.62939453125e-05}, "speedSpread": 0, "spinFinish": null, "spinStart": null, "textures": "http://hifi-content.s3.amazonaws.com/alexia/Models/Portal/stripe.png", "type": "ParticleEffect", "userData": "{\"grabbableKey\":{\"grabbable\":false}}"}, {"angularDamping": 0, "clientOnly": false, "color": {"blue": 0, "green": 0, "red": 255}, "created": "2018-08-28T16:44:23Z", "dimensions": {"blue": 0.20000000298023224, "green": 0.20000000298023224, "red": 0.20000000298023224, "x": 0.20000000298023224, "y": 0.20000000298023224, "z": 0.20000000298023224}, "id": "{65dd9c7f-815d-4b50-ba3b-24709691aed1}", "lastEdited": 1535474935056805, "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "name": "Particle Rotate", "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", "position": {"blue": 3.8216662406921387, "green": 0.15618896484375, "red": 1.2409718036651611, "x": -2.759028196334839, "y": -9.34381103515625, "z": -0.17833375930786133}, "queryAACube": {"scale": 0.3464101552963257, "x": 1.0677666664123535, "y": -0.017016112804412842, "z": 3.648461103439331}, "rotation": {"w": 0.6747081279754639, "x": -0.06532388925552368, "y": -0.6342412233352661, "z": 0.37175559997558594}, "script": "http://hifi-content.s3.amazonaws.com/alexia/Models/Portal/rotate.js", "scriptTimestamp": 1532724769253, "shape": "Cube", "type": "Box", "userData": "{\"grabbableKey\":{\"grabbable\":false}}", "visible": false}, {"clientOnly": false, "color": {"blue": 0, "green": 0, "red": 0}, "created": "2018-08-28T16:44:23Z", "dimensions": {"blue": 11.117486953735352, "green": 3.580313205718994, "red": 0.20000000298023224, "x": 0.20000000298023224, "y": 3.580313205718994, "z": 11.117486953735352}, "id": "{4e0f3381-ac88-48ab-9378-0b7818188234}", "lastEdited": 1535474935053657, "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", "position": {"blue": 6.1806135177612305, "green": 1.1588134765625, "red": 1.4755167961120605, "x": -2.5244832038879395, "y": -8.3411865234375, "z": 2.1806135177612305}, "queryAACube": {"scale": 11.681488037109375, "x": -4.365227222442627, "y": -4.6819305419921875, "z": 0.33986949920654297}, "rotation": {"w": 0.8637980222702026, "x": -4.57763671875e-05, "y": 0.5038070678710938, "z": -1.52587890625e-05}, "shape": "Cube", "type": "Box", "userData": "{\"grabbableKey\":{\"grabbable\":false}}", "visible": false}, {"clientOnly": false, "color": {"blue": 0, "green": 0, "red": 0}, "created": "2018-08-28T16:44:23Z", "dimensions": {"blue": 11.117486953735352, "green": 3.580313205718994, "red": 0.20000000298023224, "x": 0.20000000298023224, "y": 3.580313205718994, "z": 11.117486953735352}, "id": "{2da3a1d6-c757-4cc3-b20c-d7ec87eedd52}", "lastEdited": 1535474935050931, "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", "position": {"blue": 1.9063844680786133, "green": 1.15850830078125, "red": 0.16632509231567383, "x": -3.833674907684326, "y": -8.34149169921875, "z": -2.0936155319213867}, "queryAACube": {"scale": 11.681488037109375, "x": -5.674418926239014, "y": -4.6822357177734375, "z": -3.934359550476074}, "rotation": {"w": 0.9666743278503418, "x": -4.57763671875e-05, "y": -0.2560006380081177, "z": 1.52587890625e-05}, "shape": "Cube", "type": "Box", "userData": "{\"grabbableKey\":{\"grabbable\":false}}", "visible": false}, {"alpha": 0, "alphaFinish": 0, "alphaStart": 0.25, "clientOnly": false, "colorFinish": {"blue": 0, "green": 0, "red": 0, "x": 0, "y": 0, "z": 0}, "colorStart": {"blue": 255, "green": 255, "red": 255, "x": 255, "y": 255, "z": 255}, "created": "2018-08-28T16:44:23Z", "dimensions": {"blue": 13.24000072479248, "green": 13.24000072479248, "red": 13.24000072479248, "x": 13.24000072479248, "y": 13.24000072479248, "z": 13.24000072479248}, "emitAcceleration": {"blue": 0, "green": 0.10000000149011612, "red": 0, "x": 0, "y": 0.10000000149011612, "z": 0}, "emitDimensions": {"blue": 1, "green": 1, "red": 1, "x": 1, "y": 1, "z": 1}, "emitOrientation": {"w": 1, "x": -1.52587890625e-05, "y": -1.52587890625e-05, "z": -1.52587890625e-05}, "emitRate": 6, "emitSpeed": 0, "emitterShouldTrail": true, "id": "{7db57102-9a57-48d6-9937-bcec7892c3d9}", "lastEdited": 1535474935058139, "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "lifespan": 10, "maxParticles": 10, "name": "Stars", "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", "particleRadius": 0.07000000029802322, "polarFinish": 3.1415927410125732, "position": {"blue": 3.78922963142395, "green": 0.5220947265625, "red": 1.1928560733795166, "x": -2.8071439266204834, "y": -8.9779052734375, "z": -0.2107703685760498}, "queryAACube": {"scale": 22.932353973388672, "x": -10.273321151733398, "y": -10.944082260131836, "z": -7.676947593688965}, "radiusFinish": 0, "radiusStart": 0, "rotation": {"w": 0.996429443359375, "x": -1.52587890625e-05, "y": -0.08442819118499756, "z": -4.57763671875e-05}, "speedSpread": 0, "spinFinish": null, "spinStart": null, "textures": "http://hifi-content.s3.amazonaws.com/alexia/Models/Portal/star.png", "type": "ParticleEffect", "userData": "{\"grabbableKey\":{\"grabbable\":false}}"}, {"clientOnly": false, "created": "2018-08-28T16:44:23Z", "dimensions": {"blue": 2.1097896099090576, "green": 0.04847164824604988, "red": 1.458284616470337, "x": 1.458284616470337, "y": 0.04847164824604988, "z": 2.1097896099090576}, "id": "{434940be-0b45-4ca2-97db-91e698c20bfd}", "lastEdited": 1535474935055655, "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "modelURL": "http://hifi-content.s3.amazonaws.com/alexia/Models/Portal/portal2.fbx", "name": "Back", "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", "position": {"blue": 1.5835940837860107, "green": 0.2467041015625, "red": 3.0345542430877686, "x": -0.9654457569122314, "y": -9.2532958984375, "z": -2.4164059162139893}, "queryAACube": {"scale": 2.5651814937591553, "x": 1.751963496208191, "y": -1.0358866453170776, "z": 0.3010033369064331}, "rotation": {"w": 0.9084458351135254, "x": -1.52587890625e-05, "y": 0.4179598093032837, "z": -0.0001068115234375}, "type": "Model", "userData": "{\"grabbableKey\":{\"grabbable\":true}}"}, {"clientOnly": false, "created": "2018-08-28T16:44:23Z", "dimensions": {"blue": 2.1097896099090576, "green": 0.04847164824604988, "red": 1.458284616470337, "x": 1.458284616470337, "y": 0.04847164824604988, "z": 2.1097896099090576}, "id": "{5f853b12-33b9-4f40-92a8-4506047fdcd8}", "lastEdited": 1535474935051356, "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "modelURL": "http://hifi-content.s3.amazonaws.com/alexia/Models/Portal/portal1.fbx", "name": "Try Again", "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", "position": {"blue": 3.946338653564453, "green": 0.2467041015625, "red": 1.6013128757476807, "x": -2.3986871242523193, "y": -9.2532958984375, "z": -0.053661346435546875}, "queryAACube": {"scale": 2.5651814937591553, "x": 0.318722128868103, "y": -1.0358866453170776, "z": 2.663747787475586}, "rotation": {"w": 0.8220492601394653, "x": -1.52587890625e-05, "y": 0.5693598985671997, "z": -0.0001068115234375}, "type": "Model", "userData": "{\"grabbableKey\":{\"grabbable\":true}}"}], "Id": "{aa6032b9-9c35-4481-acd9-03b97400b83a}", "Version": 93} \ No newline at end of file +{ + "DataVersion": 0, + "Entities": [ + { + "clientOnly": false, + "collidesWith": "static,dynamic,kinematic,otherAvatar,", + "collisionMask": 23, + "created": "2018-08-29T22:59:44Z", + "dimensions": { + "blue": 0.26190000772476196, + "green": 0.5595999956130981, + "red": 0.5318999886512756, + "x": 0.5318999886512756, + "y": 0.5595999956130981, + "z": 0.26190000772476196 + }, + "id": "{4782f05d-ca51-41d4-9d19-21b8cad5ec2d}", + "lastEdited": 1535584079688600, + "lastEditedBy": "{f5457c14-32ca-45c2-9dde-4f5b30b3be1b}", + "name": "Try Again Box", + "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", + "position": { + "blue": 4.54052734375, + "green": 1.722428798675537, + "red": 4.593362331390381, + "x": 4.593362331390381, + "y": 1.722428798675537, + "z": 4.54052734375 + }, + "queryAACube": { + "scale": 0.8152676820755005, + "x": 4.185728549957275, + "y": 1.3147950172424316, + "z": 4.1328935623168945 + }, + "rotation": { + "w": 0.9868703484535217, + "x": -0.010178769007325172, + "y": -0.15702557563781738, + "z": 0.03642075136303902 + }, + "script": "file:///C:/Users/wayne/development/tryAgainBoxEntityScript.js", + "shape": "Cube", + "type": "Box", + "userData": "{\"grabbableKey\":{\"grabbable\":false}}", + "visible": false + }, + { + "clientOnly": false, + "created": "2018-08-29T23:01:55Z", + "dimensions": { + "blue": 0.26190000772476196, + "green": 0.5595999956130981, + "red": 0.5318999886512756, + "x": 0.5318999886512756, + "y": 0.5595999956130981, + "z": 0.26190000772476196 + }, + "id": "{8c9287c8-3826-4f2e-944e-05d8d4715fb8}", + "lastEdited": 1535584095676575, + "lastEditedBy": "{f5457c14-32ca-45c2-9dde-4f5b30b3be1b}", + "name": "Back Box", + "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", + "position": { + "blue": 3.9590959548950195, + "green": 1.738053798675537, + "red": 5.0181121826171875, + "x": 5.0181121826171875, + "y": 1.738053798675537, + "z": 3.9590959548950195 + }, + "queryAACube": { + "scale": 0.8152676820755005, + "x": 4.610478401184082, + "y": 1.3304200172424316, + "z": 3.551462173461914 + }, + "rotation": { + "w": 0.9366722106933594, + "x": 0, + "y": -0.3502073884010315, + "z": 0 + }, + "script": "file:///C:/Users/wayne/development/backBoxEntityScript.js", + "shape": "Cube", + "type": "Box", + "userData": "{\"grabbableKey\":{\"grabbable\":true}}", + "visible": false + }, + { + "clientOnly": false, + "created": "2018-08-29T22:57:33Z", + "dimensions": { + "blue": 14.40000057220459, + "green": 14.40000057220459, + "red": 14.40000057220459, + "x": 14.40000057220459, + "y": 14.40000057220459, + "z": 14.40000057220459 + }, + "id": "{8e6bd656-d764-4724-a89d-7b4ff96abf8a}", + "lastEdited": 1535583477860044, + "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", + "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", + "position": { + "blue": 2.3440732955932617, + "green": 1.7684326171875, + "red": 1.8812973499298096, + "x": 1.8812973499298096, + "y": 1.7684326171875, + "z": 2.3440732955932617 + }, + "queryAACube": { + "scale": 24.9415340423584, + "x": -10.589469909667969, + "y": -10.7023344039917, + "z": -10.126693725585938 + }, + "rotation": { + "w": 0.8697794675827026, + "x": -1.52587890625e-05, + "y": 0.4933699369430542, + "z": -4.57763671875e-05 + }, + "shapeType": "box", + "skyboxMode": "enabled", + "type": "Zone", + "userData": "{\"grabbableKey\":{\"grabbable\":false}}" + }, + { + "alpha": 0, + "alphaFinish": 0, + "alphaStart": 0.25, + "clientOnly": false, + "colorFinish": { + "blue": 0, + "green": 0, + "red": 0, + "x": 0, + "y": 0, + "z": 0 + }, + "colorStart": { + "blue": 255, + "green": 255, + "red": 255, + "x": 255, + "y": 255, + "z": 255 + }, + "created": "2018-08-29T22:57:33Z", + "dimensions": { + "blue": 13.24000072479248, + "green": 13.24000072479248, + "red": 13.24000072479248, + "x": 13.24000072479248, + "y": 13.24000072479248, + "z": 13.24000072479248 + }, + "emitAcceleration": { + "blue": 0, + "green": 0.10000000149011612, + "red": 0, + "x": 0, + "y": 0.10000000149011612, + "z": 0 + }, + "emitDimensions": { + "blue": 1, + "green": 1, + "red": 1, + "x": 1, + "y": 1, + "z": 1 + }, + "emitOrientation": { + "w": 1, + "x": -1.52587890625e-05, + "y": -1.52587890625e-05, + "z": -1.52587890625e-05 + }, + "emitRate": 6, + "emitSpeed": 0, + "id": "{b5ba3aa4-2eb9-4cfd-aec7-43635511c6b7}", + "lastEdited": 1535583477861791, + "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", + "lifespan": 10, + "maxParticles": 10, + "name": "Stars", + "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", + "particleRadius": 0.07000000029802322, + "polarFinish": 3.1415927410125732, + "position": { + "blue": 1.3712034225463867, + "green": 0.5220947265625, + "red": 2.6281180381774902, + "x": 2.6281180381774902, + "y": 0.5220947265625, + "z": 1.3712034225463867 + }, + "queryAACube": { + "scale": 22.932353973388672, + "x": -8.838058471679688, + "y": -10.944082260131836, + "z": -10.09497356414795 + }, + "radiusFinish": 0, + "radiusStart": 0, + "rotation": { + "w": 0.9852597713470459, + "x": -1.52587890625e-05, + "y": -0.17106890678405762, + "z": -7.62939453125e-05 + }, + "speedSpread": 0, + "spinFinish": null, + "spinStart": null, + "textures": "http://hifi-content.s3.amazonaws.com/alexia/Models/Portal/star.png", + "type": "ParticleEffect", + "userData": "{\"grabbableKey\":{\"grabbable\":false}}" + }, + { + "clientOnly": false, + "color": { + "blue": 0, + "green": 0, + "red": 0 + }, + "created": "2018-08-29T22:57:33Z", + "dimensions": { + "blue": 11.117486953735352, + "green": 3.580313205718994, + "red": 0.20000000298023224, + "x": 0.20000000298023224, + "y": 3.580313205718994, + "z": 11.117486953735352 + }, + "id": "{12a26c55-c411-4c4c-a124-cac9c80f9532}", + "lastEdited": 1535583681180522, + "lastEditedBy": "{f5457c14-32ca-45c2-9dde-4f5b30b3be1b}", + "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", + "position": { + "blue": 1.9063844680786133, + "green": 1.15850830078125, + "red": 0.16632509231567383, + "x": 0.16632509231567383, + "y": 1.15850830078125, + "z": 1.9063844680786133 + }, + "queryAACube": { + "scale": 11.681488037109375, + "x": -5.674418926239014, + "y": -4.6822357177734375, + "z": -3.934359550476074 + }, + "rotation": { + "w": 0.9666743278503418, + "x": -4.57763671875e-05, + "y": -0.2560006380081177, + "z": 1.52587890625e-05 + }, + "shape": "Cube", + "type": "Box", + "userData": "{\"grabbableKey\":{\"grabbable\":false}}", + "visible": false + }, + { + "angularDamping": 0, + "clientOnly": false, + "color": { + "blue": 0, + "green": 0, + "red": 255 + }, + "created": "2018-08-29T22:57:33Z", + "dimensions": { + "blue": 0.20000000298023224, + "green": 0.20000000298023224, + "red": 0.20000000298023224, + "x": 0.20000000298023224, + "y": 0.20000000298023224, + "z": 0.20000000298023224 + }, + "id": "{e8fd2c79-1303-49e4-8e4a-823272d6558c}", + "lastEdited": 1535583477862445, + "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", + "name": "Particle Rotate", + "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", + "position": { + "blue": 1.3116319179534912, + "green": 0.0772705078125, + "red": 2.705613613128662, + "x": 2.705613613128662, + "y": 0.0772705078125, + "z": 1.3116319179534912 + }, + "queryAACube": { + "scale": 0.3464101552963257, + "x": 2.5324084758758545, + "y": -0.09593456983566284, + "z": 1.1384267807006836 + }, + "rotation": { + "w": -0.38777750730514526, + "x": -0.37337303161621094, + "y": -0.8409399390220642, + "z": 0.055222392082214355 + }, + "script": "http://hifi-content.s3.amazonaws.com/alexia/Models/Portal/rotate.js", + "scriptTimestamp": 1532724769253, + "shape": "Cube", + "type": "Box", + "userData": "{\"grabbableKey\":{\"grabbable\":false}}", + "visible": false + }, + { + "clientOnly": false, + "created": "2018-08-29T22:57:33Z", + "dimensions": { + "blue": 9.030570983886719, + "green": 0.0719478651881218, + "red": 9.030570983886719, + "x": 9.030570983886719, + "y": 0.0719478651881218, + "z": 9.030570983886719 + }, + "id": "{85b4551d-c05d-4038-b188-30ad5db9c23a}", + "lastEdited": 1535583477861514, + "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", + "modelURL": "http://hifi-content.s3.amazonaws.com/alexia/LoadingScreens/floor.fbx", + "name": "Floor", + "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", + "position": { + "blue": 4.2324604988098145, + "green": 0.17547607421875, + "red": 4.802988529205322, + "x": 4.802988529205322, + "y": 0.17547607421875, + "z": 4.2324604988098145 + }, + "queryAACube": { + "scale": 12.771358489990234, + "x": -1.582690715789795, + "y": -6.210203170776367, + "z": -2.1532187461853027 + }, + "rotation": { + "w": 0.8648051023483276, + "x": -1.52587890625e-05, + "y": 0.5020675659179688, + "z": -4.57763671875e-05 + }, + "shapeType": "simple-hull", + "type": "Model", + "userData": "{\"grabbableKey\":{\"grabbable\":false}}" + }, + { + "clientOnly": false, + "created": "2018-08-29T22:57:33Z", + "dimensions": { + "blue": 0.06014331430196762, + "green": 2.582186460494995, + "red": 2.582186698913574, + "x": 2.582186698913574, + "y": 2.582186460494995, + "z": 0.06014331430196762 + }, + "id": "{8e4d8047-c2e2-4b2c-bfa2-c732d419d59a}", + "lastEdited": 1535583477860645, + "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", + "modelURL": "http://hifi-content.s3.amazonaws.com/alexia/LoadingScreens/oopsDialog.fbx", + "name": "Oops Dialog", + "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", + "position": { + "blue": 1.45927095413208, + "green": 1.6763916015625, + "red": 0, + "x": 0, + "y": 1.6763916015625, + "z": 1.45927095413208 + }, + "queryAACube": { + "scale": 3.6522583961486816, + "x": -1.8261291980743408, + "y": -0.14973759651184082, + "z": -0.36685824394226074 + }, + "rotation": { + "w": 0.8684672117233276, + "x": -4.57763671875e-05, + "y": 0.4957197904586792, + "z": -7.62939453125e-05 + }, + "type": "Model", + "userData": "{\"grabbableKey\":{\"grabbable\":false}}" + }, + { + "angularDamping": 0, + "clientOnly": false, + "color": { + "blue": 0, + "green": 0, + "red": 255 + }, + "created": "2018-08-29T22:57:33Z", + "dimensions": { + "blue": 0.20000000298023224, + "green": 0.20000000298023224, + "red": 0.20000000298023224, + "x": 0.20000000298023224, + "y": 0.20000000298023224, + "z": 0.20000000298023224 + }, + "id": "{4fc1436d-00e7-43ec-83e1-f70cff544885}", + "lastEdited": 1535583477862827, + "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", + "name": "Particle Rotate", + "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", + "position": { + "blue": 3.8216662406921387, + "green": 0.15618896484375, + "red": 1.2409718036651611, + "x": 1.2409718036651611, + "y": 0.15618896484375, + "z": 3.8216662406921387 + }, + "queryAACube": { + "scale": 0.3464101552963257, + "x": 1.0677666664123535, + "y": -0.017016112804412842, + "z": 3.648461103439331 + }, + "rotation": { + "w": 0.6747081279754639, + "x": -0.06532388925552368, + "y": -0.6342412233352661, + "z": 0.37175559997558594 + }, + "script": "http://hifi-content.s3.amazonaws.com/alexia/Models/Portal/rotate.js", + "scriptTimestamp": 1532724769253, + "shape": "Cube", + "type": "Box", + "userData": "{\"grabbableKey\":{\"grabbable\":false}}", + "visible": false + }, + { + "clientOnly": false, + "color": { + "blue": 0, + "green": 0, + "red": 0 + }, + "created": "2018-08-29T22:57:33Z", + "dimensions": { + "blue": 11.117486953735352, + "green": 3.580313205718994, + "red": 0.20000000298023224, + "x": 0.20000000298023224, + "y": 3.580313205718994, + "z": 11.117486953735352 + }, + "id": "{81a7c620-88ea-4056-b148-449d963c7eb5}", + "lastEdited": 1535583477860260, + "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", + "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", + "position": { + "blue": 0, + "green": 1.1583251953125, + "red": 4.971565246582031, + "x": 4.971565246582031, + "y": 1.1583251953125, + "z": 0 + }, + "queryAACube": { + "scale": 11.681488037109375, + "x": -0.8691787719726562, + "y": -4.6824188232421875, + "z": -5.8407440185546875 + }, + "rotation": { + "w": 0.8637980222702026, + "x": -4.57763671875e-05, + "y": 0.5038070678710938, + "z": -1.52587890625e-05 + }, + "shape": "Cube", + "type": "Box", + "userData": "{\"grabbableKey\":{\"grabbable\":false}}", + "visible": false + }, + { + "clientOnly": false, + "created": "2018-08-29T22:57:33Z", + "dimensions": { + "blue": 2.1097896099090576, + "green": 0.04847164824604988, + "red": 1.458284616470337, + "x": 1.458284616470337, + "y": 0.04847164824604988, + "z": 2.1097896099090576 + }, + "id": "{09436993-6042-49ff-bfec-0fd28f792251}", + "lastEdited": 1535583477863518, + "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", + "modelURL": "http://hifi-content.s3.amazonaws.com/alexia/Models/Portal/portal1.fbx", + "name": "Try Again", + "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", + "position": { + "blue": 3.946338653564453, + "green": 0.2467041015625, + "red": 1.6013128757476807, + "x": 1.6013128757476807, + "y": 0.2467041015625, + "z": 3.946338653564453 + }, + "queryAACube": { + "scale": 2.5651814937591553, + "x": 0.318722128868103, + "y": -1.0358866453170776, + "z": 2.663747787475586 + }, + "rotation": { + "w": 0.8220492601394653, + "x": -1.52587890625e-05, + "y": 0.5693598985671997, + "z": -0.0001068115234375 + }, + "script": "file:///C:/Users/wayne/development/tryAgainEntityScript.js", + "shapeType": "static-mesh", + "type": "Model", + "userData": "{\"grabbableKey\":{\"grabbable\":false}}" + }, + { + "angularDamping": 0, + "clientOnly": false, + "color": { + "blue": 0, + "green": 0, + "red": 255 + }, + "created": "2018-08-29T22:57:33Z", + "dimensions": { + "blue": 0.20000000298023224, + "green": 0.20000000298023224, + "red": 0.20000000298023224, + "x": 0.20000000298023224, + "y": 0.20000000298023224, + "z": 0.20000000298023224 + }, + "id": "{86188ae0-6b36-4753-a5c0-0ba31b8ca89a}", + "lastEdited": 1535583477861108, + "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", + "name": "Particle Rotate", + "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", + "position": { + "blue": 1.3116319179534912, + "green": 0, + "red": 2.705613613128662, + "x": 2.705613613128662, + "y": 0, + "z": 1.3116319179534912 + }, + "queryAACube": { + "scale": 0.3464101552963257, + "x": 2.5324084758758545, + "y": -0.17320507764816284, + "z": 1.1384267807006836 + }, + "rotation": { + "w": 0.9127794504165649, + "x": 0.2575265169143677, + "y": 0.15553522109985352, + "z": 0.2761729955673218 + }, + "script": "http://hifi-content.s3.amazonaws.com/alexia/Models/Portal/rotate.js", + "scriptTimestamp": 1532724769253, + "shape": "Cube", + "type": "Box", + "userData": "{\"grabbableKey\":{\"grabbable\":false}}", + "visible": false + }, + { + "angularDamping": 0, + "clientOnly": false, + "color": { + "blue": 0, + "green": 0, + "red": 255 + }, + "created": "2018-08-29T22:57:33Z", + "dimensions": { + "blue": 0.20000000298023224, + "green": 0.20000000298023224, + "red": 0.20000000298023224, + "x": 0.20000000298023224, + "y": 0.20000000298023224, + "z": 0.20000000298023224 + }, + "id": "{ffa954a9-43e4-47b1-82c9-b921ed3414b0}", + "lastEdited": 1535583477861316, + "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", + "name": "Particle Rotate", + "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", + "position": { + "blue": 3.8216662406921387, + "green": 0.0772705078125, + "red": 1.2409718036651611, + "x": 1.2409718036651611, + "y": 0.0772705078125, + "z": 3.8216662406921387 + }, + "queryAACube": { + "scale": 0.3464101552963257, + "x": 1.0677666664123535, + "y": -0.09593456983566284, + "z": 3.648461103439331 + }, + "rotation": { + "w": 0.926024317741394, + "x": 0.20308232307434082, + "y": -0.010269343852996826, + "z": 0.3179827928543091 + }, + "script": "http://hifi-content.s3.amazonaws.com/alexia/Models/Portal/rotate.js", + "scriptTimestamp": 1532724769253, + "shape": "Cube", + "type": "Box", + "userData": "{\"grabbableKey\":{\"grabbable\":false}}", + "visible": false + }, + { + "angularDamping": 0, + "clientOnly": false, + "color": { + "blue": 0, + "green": 0, + "red": 255 + }, + "created": "2018-08-29T22:57:33Z", + "dimensions": { + "blue": 0.20000000298023224, + "green": 0.20000000298023224, + "red": 0.20000000298023224, + "x": 0.20000000298023224, + "y": 0.20000000298023224, + "z": 0.20000000298023224 + }, + "id": "{e86df231-a55a-4ca7-ae68-d3271a543d10}", + "lastEdited": 1535583477860886, + "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", + "name": "Particle Rotate", + "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", + "position": { + "blue": 3.8216662406921387, + "green": 0, + "red": 1.2409718036651611, + "x": 1.2409718036651611, + "y": 0, + "z": 3.8216662406921387 + }, + "queryAACube": { + "scale": 0.3464101552963257, + "x": 1.0677666664123535, + "y": -0.17320507764816284, + "z": 3.648461103439331 + }, + "rotation": { + "w": 0.6444342136383057, + "x": -0.08220034837722778, + "y": -0.6649118661880493, + "z": 0.3684900999069214 + }, + "script": "http://hifi-content.s3.amazonaws.com/alexia/Models/Portal/rotate.js", + "scriptTimestamp": 1532724769253, + "shape": "Cube", + "type": "Box", + "userData": "{\"grabbableKey\":{\"grabbable\":false}}", + "visible": false + }, + { + "angularDamping": 0, + "clientOnly": false, + "color": { + "blue": 0, + "green": 0, + "red": 255 + }, + "created": "2018-08-29T22:57:33Z", + "dimensions": { + "blue": 0.20000000298023224, + "green": 0.20000000298023224, + "red": 0.20000000298023224, + "x": 0.20000000298023224, + "y": 0.20000000298023224, + "z": 0.20000000298023224 + }, + "id": "{252ffb06-db92-4732-9315-7ee293c24ab8}", + "lastEdited": 1535583477862267, + "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", + "name": "Particle Rotate", + "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", + "position": { + "blue": 1.3116319179534912, + "green": 0.15618896484375, + "red": 2.705613613128662, + "x": 2.705613613128662, + "y": 0.15618896484375, + "z": 1.3116319179534912 + }, + "queryAACube": { + "scale": 0.3464101552963257, + "x": 2.5324084758758545, + "y": -0.017016112804412842, + "z": 1.1384267807006836 + }, + "rotation": { + "w": 0.46953535079956055, + "x": -0.16719311475753784, + "y": -0.7982757091522217, + "z": 0.3380941152572632 + }, + "script": "http://hifi-content.s3.amazonaws.com/alexia/Models/Portal/rotate.js", + "scriptTimestamp": 1532724769253, + "shape": "Cube", + "type": "Box", + "userData": "{\"grabbableKey\":{\"grabbable\":false}}", + "visible": false + }, + { + "clientOnly": false, + "color": { + "blue": 0, + "green": 0, + "red": 0 + }, + "created": "2018-08-29T22:57:33Z", + "dimensions": { + "blue": 11.117486953735352, + "green": 3.580313205718994, + "red": 0.20000000298023224, + "x": 0.20000000298023224, + "y": 3.580313205718994, + "z": 11.117486953735352 + }, + "id": "{1c93807b-311d-48cd-af5e-b477d33b2811}", + "lastEdited": 1535583477860455, + "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", + "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", + "position": { + "blue": 5.268576622009277, + "green": 1.1588134765625, + "red": 6.100250244140625, + "x": 6.100250244140625, + "y": 1.1588134765625, + "z": 5.268576622009277 + }, + "queryAACube": { + "scale": 11.681488037109375, + "x": 0.2595062255859375, + "y": -4.6819305419921875, + "z": -0.5721673965454102 + }, + "rotation": { + "w": 0.9662165641784668, + "x": -4.57763671875e-05, + "y": -0.2576791048049927, + "z": 1.52587890625e-05 + }, + "shape": "Cube", + "type": "Box", + "userData": "{\"grabbableKey\":{\"grabbable\":false}}", + "visible": false + }, + { + "alpha": 0, + "alphaFinish": 0, + "alphaStart": 1, + "clientOnly": false, + "color": { + "blue": 255, + "green": 205, + "red": 3 + }, + "colorFinish": { + "blue": 0, + "green": 0, + "red": 0, + "x": 0, + "y": 0, + "z": 0 + }, + "colorStart": { + "blue": 255, + "green": 204, + "red": 0, + "x": 0, + "y": 204, + "z": 255 + }, + "created": "2018-08-29T22:57:33Z", + "dimensions": { + "blue": 2.5, + "green": 2.5, + "red": 2.5, + "x": 2.5, + "y": 2.5, + "z": 2.5 + }, + "emitAcceleration": { + "blue": 0, + "green": 0, + "red": 0, + "x": 0, + "y": 0, + "z": 0 + }, + "emitDimensions": { + "blue": 1, + "green": 1, + "red": 1, + "x": 1, + "y": 1, + "z": 1 + }, + "emitOrientation": { + "w": 0.9993909597396851, + "x": 0.034897372126579285, + "y": -1.525880907138344e-05, + "z": -1.525880907138344e-05 + }, + "emitRate": 2, + "emitSpeed": 0, + "emitterShouldTrail": true, + "id": "{4cb534d1-5494-4aaa-aa28-ff5cee6e0b8f}", + "lastEdited": 1535583477862081, + "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", + "lifespan": 10, + "maxParticles": 40, + "name": "Rays", + "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", + "particleRadius": 0.75, + "polarFinish": 3.1415927410125732, + "position": { + "blue": 3.814434051513672, + "green": 1.44122314453125, + "red": 1.2319090366363525, + "x": 1.2319090366363525, + "y": 1.44122314453125, + "z": 3.814434051513672 + }, + "queryAACube": { + "scale": 4.330127239227295, + "x": -0.9331545829772949, + "y": -0.7238404750823975, + "z": 1.6493704319000244 + }, + "radiusFinish": 0.10000000149011612, + "radiusStart": 0, + "rotation": { + "w": 0.9594720602035522, + "x": -1.52587890625e-05, + "y": 0.28178834915161133, + "z": -4.57763671875e-05 + }, + "script": "file:///C:/Users/wayne/development/raysTryAgainEntityScript.js", + "speedSpread": 0, + "spinFinish": null, + "spinStart": null, + "textures": "http://hifi-content.s3.amazonaws.com/alexia/Models/Portal/stripe.png", + "type": "ParticleEffect", + "userData": "{\"grabbableKey\":{\"grabbable\":false}}" + }, + { + "clientOnly": false, + "color": { + "blue": 0, + "green": 0, + "red": 0 + }, + "created": "2018-08-29T22:57:33Z", + "dimensions": { + "blue": 11.117486953735352, + "green": 3.580313205718994, + "red": 0.20000000298023224, + "x": 0.20000000298023224, + "y": 3.580313205718994, + "z": 11.117486953735352 + }, + "id": "{a58a8ffe-17ee-4154-b8bb-54e2f0ca9a9d}", + "lastEdited": 1535583477862953, + "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", + "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", + "position": { + "blue": 6.1806135177612305, + "green": 1.1588134765625, + "red": 1.4755167961120605, + "x": 1.4755167961120605, + "y": 1.1588134765625, + "z": 6.1806135177612305 + }, + "queryAACube": { + "scale": 11.681488037109375, + "x": -4.365227222442627, + "y": -4.6819305419921875, + "z": 0.33986949920654297 + }, + "rotation": { + "w": 0.8637980222702026, + "x": -4.57763671875e-05, + "y": 0.5038070678710938, + "z": -1.52587890625e-05 + }, + "shape": "Cube", + "type": "Box", + "userData": "{\"grabbableKey\":{\"grabbable\":false}}", + "visible": false + }, + { + "alpha": 0, + "alphaFinish": 0, + "alphaStart": 0.25, + "clientOnly": false, + "colorFinish": { + "blue": 0, + "green": 0, + "red": 0, + "x": 0, + "y": 0, + "z": 0 + }, + "colorStart": { + "blue": 255, + "green": 255, + "red": 255, + "x": 255, + "y": 255, + "z": 255 + }, + "created": "2018-08-29T22:57:33Z", + "dimensions": { + "blue": 13.24000072479248, + "green": 13.24000072479248, + "red": 13.24000072479248, + "x": 13.24000072479248, + "y": 13.24000072479248, + "z": 13.24000072479248 + }, + "emitAcceleration": { + "blue": 0, + "green": 0.10000000149011612, + "red": 0, + "x": 0, + "y": 0.10000000149011612, + "z": 0 + }, + "emitDimensions": { + "blue": 1, + "green": 1, + "red": 1, + "x": 1, + "y": 1, + "z": 1 + }, + "emitOrientation": { + "w": 1, + "x": -1.52587890625e-05, + "y": -1.52587890625e-05, + "z": -1.52587890625e-05 + }, + "emitRate": 6, + "emitSpeed": 0, + "emitterShouldTrail": true, + "id": "{b6c56e83-f098-422d-a0e8-fd1497c62fbe}", + "lastEdited": 1535583477863251, + "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", + "lifespan": 10, + "maxParticles": 10, + "name": "Stars", + "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", + "particleRadius": 0.07000000029802322, + "polarFinish": 3.1415927410125732, + "position": { + "blue": 3.78922963142395, + "green": 0.5220947265625, + "red": 1.1928560733795166, + "x": 1.1928560733795166, + "y": 0.5220947265625, + "z": 3.78922963142395 + }, + "queryAACube": { + "scale": 22.932353973388672, + "x": -10.273321151733398, + "y": -10.944082260131836, + "z": -7.676947593688965 + }, + "radiusFinish": 0, + "radiusStart": 0, + "rotation": { + "w": 0.996429443359375, + "x": -1.52587890625e-05, + "y": -0.08442819118499756, + "z": -4.57763671875e-05 + }, + "speedSpread": 0, + "spinFinish": null, + "spinStart": null, + "textures": "http://hifi-content.s3.amazonaws.com/alexia/Models/Portal/star.png", + "type": "ParticleEffect", + "userData": "{\"grabbableKey\":{\"grabbable\":false}}" + }, + { + "alpha": 0, + "alphaFinish": 0, + "alphaStart": 1, + "clientOnly": false, + "color": { + "blue": 211, + "green": 227, + "red": 104 + }, + "colorFinish": { + "blue": 0, + "green": 0, + "red": 0, + "x": 0, + "y": 0, + "z": 0 + }, + "colorStart": { + "blue": 211, + "green": 227, + "red": 104, + "x": 104, + "y": 227, + "z": 211 + }, + "created": "2018-08-29T22:57:33Z", + "dimensions": { + "blue": 2.5, + "green": 2.5, + "red": 2.5, + "x": 2.5, + "y": 2.5, + "z": 2.5 + }, + "emitAcceleration": { + "blue": 0, + "green": 0, + "red": 0, + "x": 0, + "y": 0, + "z": 0 + }, + "emitDimensions": { + "blue": 1, + "green": 1, + "red": 1, + "x": 1, + "y": 1, + "z": 1 + }, + "emitOrientation": { + "w": 0.9993909597396851, + "x": 0.034897372126579285, + "y": -1.525880907138344e-05, + "z": -1.525880907138344e-05 + }, + "emitRate": 2, + "emitSpeed": 0, + "id": "{f87fab56-c8d8-4ff8-abf0-35a76dfccf2b}", + "lastEdited": 1535583477862685, + "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", + "lifespan": 10, + "maxParticles": 40, + "name": "Rays", + "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", + "particleRadius": 0.75, + "polarFinish": 3.1415927410125732, + "position": { + "blue": 1.3553659915924072, + "green": 1.44122314453125, + "red": 2.572803497314453, + "x": 2.572803497314453, + "y": 1.44122314453125, + "z": 1.3553659915924072 + }, + "queryAACube": { + "scale": 4.330127239227295, + "x": 0.40773987770080566, + "y": -0.7238404750823975, + "z": -0.8096976280212402 + }, + "radiusFinish": 0.10000000149011612, + "radiusStart": 0, + "rotation": { + "w": 0.9803768396377563, + "x": -1.52587890625e-05, + "y": 0.19707024097442627, + "z": -7.62939453125e-05 + }, + "script": "file:///C:/Users/wayne/development/raysBackEntityScript.js", + "speedSpread": 0, + "spinFinish": null, + "spinStart": null, + "textures": "http://hifi-content.s3.amazonaws.com/alexia/Models/Portal/stripe.png", + "type": "ParticleEffect", + "userData": "{\"grabbableKey\":{\"grabbable\":false}}" + }, + { + "clientOnly": false, + "created": "2018-08-29T22:57:33Z", + "dimensions": { + "blue": 2.1097896099090576, + "green": 0.04847164824604988, + "red": 1.458284616470337, + "x": 1.458284616470337, + "y": 0.04847164824604988, + "z": 2.1097896099090576 + }, + "id": "{1af53cfc-0cce-467a-96e0-a937f2651ce2}", + "lastEdited": 1535583477863389, + "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", + "modelURL": "http://hifi-content.s3.amazonaws.com/alexia/Models/Portal/portal2.fbx", + "name": "Back", + "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", + "position": { + "blue": 1.5835940837860107, + "green": 0.2467041015625, + "red": 3.0345542430877686, + "x": 3.0345542430877686, + "y": 0.2467041015625, + "z": 1.5835940837860107 + }, + "queryAACube": { + "scale": 2.5651814937591553, + "x": 1.751963496208191, + "y": -1.0358866453170776, + "z": 0.3010033369064331 + }, + "rotation": { + "w": 0.9084458351135254, + "x": -1.52587890625e-05, + "y": 0.4179598093032837, + "z": -0.0001068115234375 + }, + "script": "file:///C:/Users/wayne/development/tryAgainEntityScript.js", + "shapeType": "static-mesh", + "type": "Model", + "userData": "{\"grabbableKey\":{\"grabbable\":false}}" + } + ], + "Id": "{351e561a-ee5e-4e8b-87ab-d28677d3b374}", + "Version": 93 +} From a5243fbd7e5048c0a17ed28d1b712e5a713298c2 Mon Sep 17 00:00:00 2001 From: Wayne Chen Date: Wed, 29 Aug 2018 16:12:50 -0700 Subject: [PATCH 031/123] commenting out notification for script --- scripts/system/notifications.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/system/notifications.js b/scripts/system/notifications.js index 0778e2a44b..13d500b909 100644 --- a/scripts/system/notifications.js +++ b/scripts/system/notifications.js @@ -624,7 +624,7 @@ Controller.keyReleaseEvent.connect(keyReleaseEvent); Script.update.connect(update); Script.scriptEnding.connect(scriptEnding); - Window.domainConnectionRefused.connect(onDomainConnectionRefused); + //Window.domainConnectionRefused.connect(onDomainConnectionRefused); Window.stillSnapshotTaken.connect(onSnapshotTaken); Window.snapshot360Taken.connect(onSnapshotTaken); Window.processingGifStarted.connect(processingGif); From eb29c9c4a298bd13ec87832800edb1a24597e748 Mon Sep 17 00:00:00 2001 From: Wayne Chen Date: Wed, 29 Aug 2018 16:53:22 -0700 Subject: [PATCH 032/123] updating with default landing location --- interface/resources/serverless/redirect.json | 130 ++++++++++--------- interface/src/Application.cpp | 1 - 2 files changed, 67 insertions(+), 64 deletions(-) diff --git a/interface/resources/serverless/redirect.json b/interface/resources/serverless/redirect.json index 9e3b29cc26..71dfae4212 100644 --- a/interface/resources/serverless/redirect.json +++ b/interface/resources/serverless/redirect.json @@ -23,9 +23,9 @@ "blue": 4.54052734375, "green": 1.722428798675537, "red": 4.593362331390381, - "x": 4.593362331390381, - "y": 1.722428798675537, - "z": 4.54052734375 + "x": 0.5933623313903809, + "y": -7.777571201324463, + "z": 0.54052734375 }, "queryAACube": { "scale": 0.8152676820755005, @@ -65,9 +65,9 @@ "blue": 3.9590959548950195, "green": 1.738053798675537, "red": 5.0181121826171875, - "x": 5.0181121826171875, - "y": 1.738053798675537, - "z": 3.9590959548950195 + "x": 1.0181121826171875, + "y": -7.761946201324463, + "z": -0.04090404510498047 }, "queryAACube": { "scale": 0.8152676820755005, @@ -106,9 +106,9 @@ "blue": 2.3440732955932617, "green": 1.7684326171875, "red": 1.8812973499298096, - "x": 1.8812973499298096, - "y": 1.7684326171875, - "z": 2.3440732955932617 + "x": -2.1187026500701904, + "y": -7.7315673828125, + "z": -1.6559267044067383 }, "queryAACube": { "scale": 24.9415340423584, @@ -194,9 +194,9 @@ "blue": 1.3712034225463867, "green": 0.5220947265625, "red": 2.6281180381774902, - "x": 2.6281180381774902, - "y": 0.5220947265625, - "z": 1.3712034225463867 + "x": -1.3718819618225098, + "y": -8.9779052734375, + "z": -2.6287965774536133 }, "queryAACube": { "scale": 22.932353973388672, @@ -243,9 +243,9 @@ "blue": 1.9063844680786133, "green": 1.15850830078125, "red": 0.16632509231567383, - "x": 0.16632509231567383, - "y": 1.15850830078125, - "z": 1.9063844680786133 + "x": -3.833674907684326, + "y": -8.34149169921875, + "z": -2.0936155319213867 }, "queryAACube": { "scale": 11.681488037109375, @@ -290,9 +290,9 @@ "blue": 1.3116319179534912, "green": 0.0772705078125, "red": 2.705613613128662, - "x": 2.705613613128662, - "y": 0.0772705078125, - "z": 1.3116319179534912 + "x": -1.294386386871338, + "y": -9.4227294921875, + "z": -2.688368082046509 }, "queryAACube": { "scale": 0.3464101552963257, @@ -334,9 +334,9 @@ "blue": 4.2324604988098145, "green": 0.17547607421875, "red": 4.802988529205322, - "x": 4.802988529205322, - "y": 0.17547607421875, - "z": 4.2324604988098145 + "x": 0.8029885292053223, + "y": -9.32452392578125, + "z": 0.23246049880981445 }, "queryAACube": { "scale": 12.771358489990234, @@ -375,9 +375,9 @@ "blue": 1.45927095413208, "green": 1.6763916015625, "red": 0, - "x": 0, - "y": 1.6763916015625, - "z": 1.45927095413208 + "x": -4, + "y": -7.8236083984375, + "z": -2.54072904586792 }, "queryAACube": { "scale": 3.6522583961486816, @@ -420,9 +420,9 @@ "blue": 3.8216662406921387, "green": 0.15618896484375, "red": 1.2409718036651611, - "x": 1.2409718036651611, - "y": 0.15618896484375, - "z": 3.8216662406921387 + "x": -2.759028196334839, + "y": -9.34381103515625, + "z": -0.17833375930786133 }, "queryAACube": { "scale": 0.3464101552963257, @@ -467,9 +467,9 @@ "blue": 0, "green": 1.1583251953125, "red": 4.971565246582031, - "x": 4.971565246582031, - "y": 1.1583251953125, - "z": 0 + "x": 0.9715652465820312, + "y": -8.3416748046875, + "z": -4 }, "queryAACube": { "scale": 11.681488037109375, @@ -509,9 +509,9 @@ "blue": 3.946338653564453, "green": 0.2467041015625, "red": 1.6013128757476807, - "x": 1.6013128757476807, - "y": 0.2467041015625, - "z": 3.946338653564453 + "x": -2.3986871242523193, + "y": -9.2532958984375, + "z": -0.053661346435546875 }, "queryAACube": { "scale": 2.5651814937591553, @@ -556,9 +556,9 @@ "blue": 1.3116319179534912, "green": 0, "red": 2.705613613128662, - "x": 2.705613613128662, - "y": 0, - "z": 1.3116319179534912 + "x": -1.294386386871338, + "y": -9.5, + "z": -2.688368082046509 }, "queryAACube": { "scale": 0.3464101552963257, @@ -605,9 +605,9 @@ "blue": 3.8216662406921387, "green": 0.0772705078125, "red": 1.2409718036651611, - "x": 1.2409718036651611, - "y": 0.0772705078125, - "z": 3.8216662406921387 + "x": -2.759028196334839, + "y": -9.4227294921875, + "z": -0.17833375930786133 }, "queryAACube": { "scale": 0.3464101552963257, @@ -654,9 +654,9 @@ "blue": 3.8216662406921387, "green": 0, "red": 1.2409718036651611, - "x": 1.2409718036651611, - "y": 0, - "z": 3.8216662406921387 + "x": -2.759028196334839, + "y": -9.5, + "z": -0.17833375930786133 }, "queryAACube": { "scale": 0.3464101552963257, @@ -703,9 +703,9 @@ "blue": 1.3116319179534912, "green": 0.15618896484375, "red": 2.705613613128662, - "x": 2.705613613128662, - "y": 0.15618896484375, - "z": 1.3116319179534912 + "x": -1.294386386871338, + "y": -9.34381103515625, + "z": -2.688368082046509 }, "queryAACube": { "scale": 0.3464101552963257, @@ -750,9 +750,9 @@ "blue": 5.268576622009277, "green": 1.1588134765625, "red": 6.100250244140625, - "x": 6.100250244140625, - "y": 1.1588134765625, - "z": 5.268576622009277 + "x": 2.100250244140625, + "y": -8.3411865234375, + "z": 1.2685766220092773 }, "queryAACube": { "scale": 11.681488037109375, @@ -844,9 +844,9 @@ "blue": 3.814434051513672, "green": 1.44122314453125, "red": 1.2319090366363525, - "x": 1.2319090366363525, - "y": 1.44122314453125, - "z": 3.814434051513672 + "x": -2.7680909633636475, + "y": -8.05877685546875, + "z": -0.18556594848632812 }, "queryAACube": { "scale": 4.330127239227295, @@ -894,9 +894,9 @@ "blue": 6.1806135177612305, "green": 1.1588134765625, "red": 1.4755167961120605, - "x": 1.4755167961120605, - "y": 1.1588134765625, - "z": 6.1806135177612305 + "x": -2.5244832038879395, + "y": -8.3411865234375, + "z": 2.1806135177612305 }, "queryAACube": { "scale": 11.681488037109375, @@ -983,9 +983,9 @@ "blue": 3.78922963142395, "green": 0.5220947265625, "red": 1.1928560733795166, - "x": 1.1928560733795166, - "y": 0.5220947265625, - "z": 3.78922963142395 + "x": -2.8071439266204834, + "y": -8.9779052734375, + "z": -0.2107703685760498 }, "queryAACube": { "scale": 22.932353973388672, @@ -1080,9 +1080,9 @@ "blue": 1.3553659915924072, "green": 1.44122314453125, "red": 2.572803497314453, - "x": 2.572803497314453, - "y": 1.44122314453125, - "z": 1.3553659915924072 + "x": -1.4271965026855469, + "y": -8.05877685546875, + "z": -2.6446340084075928 }, "queryAACube": { "scale": 4.330127239227295, @@ -1127,9 +1127,9 @@ "blue": 1.5835940837860107, "green": 0.2467041015625, "red": 3.0345542430877686, - "x": 3.0345542430877686, - "y": 0.2467041015625, - "z": 1.5835940837860107 + "x": -0.9654457569122314, + "y": -9.2532958984375, + "z": -2.4164059162139893 }, "queryAACube": { "scale": 2.5651814937591553, @@ -1149,6 +1149,10 @@ "userData": "{\"grabbableKey\":{\"grabbable\":false}}" } ], + "Paths": + { + "/": "/1.46,-9,0.7/0,0.487,0,0.86663" + }, "Id": "{351e561a-ee5e-4e8b-87ab-d28677d3b374}", "Version": 93 } diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 6e15cc0dd8..348d1d5690 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -2369,7 +2369,6 @@ void Application::domainConnectionRedirect(const QString& reasonMessage, int rea addressManager->handleLookupString(REDIRECT_HIFI_ADDRESS); getMyAvatar()->setWorldVelocity(glm::vec3(0.0f)); // in (w, x, y, z) component-structure for the constructor - getMyAvatar()->setWorldOrientation(glm::quat(0.8775935173034668f, 0.0f, 0.4794054925441742f, 0.0f)); break; } default: From 93b0f151166d818fb019e4e2e48353d112738fcd Mon Sep 17 00:00:00 2001 From: Dante Ruiz Date: Thu, 30 Aug 2018 13:22:17 -0700 Subject: [PATCH 033/123] addressing some feedback --- scripts/system/interstitialPage.js | 74 +++++++++++++++++------------- 1 file changed, 43 insertions(+), 31 deletions(-) diff --git a/scripts/system/interstitialPage.js b/scripts/system/interstitialPage.js index cf06e222c9..86a9e744e9 100644 --- a/scripts/system/interstitialPage.js +++ b/scripts/system/interstitialPage.js @@ -18,13 +18,13 @@ var MAX_X_SIZE = 3.8; var EPSILON = 0.01; var isVisible = false; - var STABILITY = 3.0; 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 DEFAULT_Z_OFFSET = 5.45; + var previousCameraMode = Camera.mode; var renderViewTask = Render.getConfig("RenderMainView"); var toolbar = Toolbars.getToolbar("com.highfidelity.interface.toolbar.system"); @@ -181,7 +181,7 @@ var TARGET_UPDATE_HZ = 60; // 50hz good enough, but we're using update var BASIC_TIMER_INTERVAL_MS = 1000 / TARGET_UPDATE_HZ; var lastInterval = Date.now(); - var currentDomain = ""; + var currentDomain = "no domain"; var timer = null; var target = 0; @@ -228,6 +228,8 @@ target = 0; currentProgress = 0.1; connectionToDomainFailed = false; + previousCameraMode = Camera.mode; + Camera.mode = "first person"; timer = Script.setTimeout(update, BASIC_TIMER_INTERVAL_MS); } } @@ -249,30 +251,42 @@ print("domain changed: " + domain); if (domain !== currentDomain) { MyAvatar.restoreAnimation(); - var name = AddressManager.placename; + var name = location.placename; domainName = name.charAt(0).toUpperCase() + name.slice(1); + var doRequest = true; + if (name.length === 0 && location.href === "file:///~/serverless/tutorial.json") { + domainName = "Serveless Domain (Tutorial)"; + doRequest = false; + } var domainNameLeftMargin = getLeftMargin(domainNameTextID, domainName); var textProperties = { text: domainName, leftMargin: domainNameLeftMargin }; - var url = Account.metaverseServerURL + '/api/v1/places/' + domain; - request({ - uri: url - }, function(error, data) { - if (data.status === "success") { - var domainInfo = data.data; - var domainDescriptionText = domainInfo.place.description; - print("domainText: " + domainDescriptionText); - var leftMargin = getLeftMargin(domainDescription, domainDescriptionText); - var domainDescriptionProperties = { - text: domainDescriptionText, - leftMargin: leftMargin - }; - Overlays.editOverlay(domainDescription, domainDescriptionProperties); - } - }); + if (doRequest) { + var url = Account.metaverseServerURL + '/api/v1/places/' + domain; + request({ + uri: url + }, function(error, data) { + if (data.status === "success") { + var domainInfo = data.data; + var domainDescriptionText = domainInfo.place.description; + print("domainText: " + domainDescriptionText); + var leftMargin = getLeftMargin(domainDescription, domainDescriptionText); + var domainDescriptionProperties = { + text: domainDescriptionText, + leftMargin: leftMargin + }; + Overlays.editOverlay(domainDescription, domainDescriptionProperties); + } + }); + } else { + var domainDescriptionProperties = { + text: "" + }; + Overlays.editOverlay(domainDescription, domainDescriptionProperties); + } var randomIndex = Math.floor(Math.random() * userTips.length); var tip = userTips[randomIndex]; @@ -320,8 +334,6 @@ visible: !physicsEnabled }; - // Menu.setIsOptionChecked("Show Overlays", physicsEnabled); - if (!HMD.active) { MyAvatar.headOrientation = Quat.multiply(Quat.cancelOutRollAndPitch(MyAvatar.headOrientation), Quat.fromPitchYawRollDegrees(-3.0, 0, 0)); } @@ -343,7 +355,9 @@ resetValues(); - Camera.mode = "first person"; + if (physicsEnabled) { + Camera.mode = previousCameraMode; + } } @@ -358,11 +372,6 @@ Overlays.editOverlay(anchorOverlay, { localPosition: localPosition }); } - - Window.interstitialStatusChanged.connect(function(interstitialMode) { - print("------> insterstitial mode changed " + interstitialMode + " <------"); - }); - function update() { var physicsEnabled = Window.isPhysicsEnabled(); var thisInterval = Date.now(); @@ -372,10 +381,13 @@ var domainLoadingProgressPercentage = Window.domainLoadingProgress(); var progress = MAX_X_SIZE * domainLoadingProgressPercentage; - print(progress); - //if (progress >= target) { + if (progress >= target) { target = progress; - //} + } + + if ((physicsEnabled && (currentProgress < MAX_X_SIZE))) { + target = MAX_X_SIZE; + } currentProgress = lerp(currentProgress, target, 0.2); var properties = { @@ -393,6 +405,7 @@ timer = null; return; } + timer = Script.setTimeout(update, BASIC_TIMER_INTERVAL_MS); } @@ -400,7 +413,6 @@ location.hostChanged.connect(domainChanged); location.lookupResultsFinished.connect(function() { Script.setTimeout(function() { - print("location connected: " + location.isConnected); connectionToDomainFailed = !location.isConnected; }, 1200); }); From 03ede9371e1a070700952e4c504c445f1a51022a Mon Sep 17 00:00:00 2001 From: Dante Ruiz Date: Thu, 30 Aug 2018 14:26:39 -0700 Subject: [PATCH 034/123] cleaning code --- interface/src/octree/SafeLanding.cpp | 2 -- interface/src/scripting/WindowScriptingInterface.cpp | 3 --- interface/src/scripting/WindowScriptingInterface.h | 3 --- 3 files changed, 8 deletions(-) diff --git a/interface/src/octree/SafeLanding.cpp b/interface/src/octree/SafeLanding.cpp index 8d36b3fcb0..6b7a0f582c 100644 --- a/interface/src/octree/SafeLanding.cpp +++ b/interface/src/octree/SafeLanding.cpp @@ -175,7 +175,6 @@ bool SafeLanding::entitiesRenderReady() { for (auto entityMapIter = _trackedEntitiesRenderStatus.begin(); entityMapIter != _trackedEntitiesRenderStatus.end(); ++entityMapIter) { auto entity = entityMapIter->second; bool visuallyReady = entity->isVisuallyReady(); - qDebug() << "is entityType: " << EntityTypes::getEntityTypeName(entity->getType()) << " " << visuallyReady << " " << entityMapIter->first; if (visuallyReady || !entityTree->renderableForEntityId(entityMapIter->first)) { entityMapIter = _trackedEntitiesRenderStatus.erase(entityMapIter); if (entityMapIter == _trackedEntitiesRenderStatus.end()) { @@ -185,7 +184,6 @@ bool SafeLanding::entitiesRenderReady() { entity->requestRenderUpdate(); } } - qDebug() << "list size: -> " << _trackedEntitiesRenderStatus.size(); return _trackedEntitiesRenderStatus.empty(); } diff --git a/interface/src/scripting/WindowScriptingInterface.cpp b/interface/src/scripting/WindowScriptingInterface.cpp index b4c1563795..9e13e2affb 100644 --- a/interface/src/scripting/WindowScriptingInterface.cpp +++ b/interface/src/scripting/WindowScriptingInterface.cpp @@ -53,9 +53,6 @@ WindowScriptingInterface::WindowScriptingInterface() { }); connect(qApp->getWindow(), &MainWindow::windowGeometryChanged, this, &WindowScriptingInterface::onWindowGeometryChanged); - connect(qApp, &Application::interstitialModeChanged, [this] (bool interstitialStatus) { - emit interstitialStatusChanged(interstitialStatus); - }); } WindowScriptingInterface::~WindowScriptingInterface() { diff --git a/interface/src/scripting/WindowScriptingInterface.h b/interface/src/scripting/WindowScriptingInterface.h index 3dcd8cfeed..626d142785 100644 --- a/interface/src/scripting/WindowScriptingInterface.h +++ b/interface/src/scripting/WindowScriptingInterface.h @@ -744,9 +744,6 @@ signals: */ void geometryChanged(QRect geometry); - - void interstitialStatusChanged(bool intersititalMode); - private: QString getPreviousBrowseLocation() const; void setPreviousBrowseLocation(const QString& location); From daf81bbcb8cb963ea5b020e0a70bf7640f7ca762 Mon Sep 17 00:00:00 2001 From: Alexander Ivash Date: Fri, 31 Aug 2018 00:29:06 +0300 Subject: [PATCH 035/123] FB17982 Avatar App reloads existing selected bookmark on app relaunch --- interface/resources/qml/hifi/AvatarApp.qml | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/interface/resources/qml/hifi/AvatarApp.qml b/interface/resources/qml/hifi/AvatarApp.qml index d8eae311d8..0c950a49d8 100644 --- a/interface/resources/qml/hifi/AvatarApp.qml +++ b/interface/resources/qml/hifi/AvatarApp.qml @@ -175,7 +175,14 @@ Rectangle { displayNameInput.text = getAvatarsData.displayName; currentAvatarSettings = getAvatarsData.currentAvatarSettings; - updateCurrentAvatarInBookmarks(currentAvatar); + var bookmarkAvatarIndex = allAvatars.findAvatarIndexByValue(currentAvatar); + if (bookmarkAvatarIndex === -1) { + currentAvatar.name = ''; + } else { + currentAvatar.name = allAvatars.get(bookmarkAvatarIndex).name; + allAvatars.move(bookmarkAvatarIndex, 0, 1); + } + view.setPage(0); } else if (message.method === 'updateAvatarInBookmarks') { updateCurrentAvatarInBookmarks(currentAvatar); } else if (message.method === 'selectAvatarEntity') { From 5f43f5b27626d8120b67134bca2decb3d91db58a Mon Sep 17 00:00:00 2001 From: Wayne Chen Date: Thu, 30 Aug 2018 17:40:13 -0700 Subject: [PATCH 036/123] adding different method for handling redirect --- interface/src/Application.cpp | 32 ++++----------------- interface/src/Application.h | 2 +- libraries/networking/src/AddressManager.cpp | 4 ++- libraries/networking/src/DomainHandler.cpp | 14 +++++++++ libraries/networking/src/DomainHandler.h | 6 ++++ 5 files changed, 29 insertions(+), 29 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 348d1d5690..1041ab64ca 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -1197,11 +1197,9 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo getOverlays().deleteOverlay(getTabletHomeButtonID()); getOverlays().deleteOverlay(getTabletFrameID()); }); -#if defined(Q_OS_ANDROID) connect(&domainHandler, &DomainHandler::domainConnectionRefused, this, &Application::domainConnectionRefused); -#else - connect(&domainHandler, &DomainHandler::domainConnectionRefused, this, &Application::domainConnectionRedirect); -#endif + + &domainHandler.setErrorDomainURL(QUrl(REDIRECT_HIFI_ADDRESS)); // We could clear ATP assets only when changing domains, but it's possible that the domain you are connected // to has gone down and switched to a new content set, so when you reconnect the cached ATP assets will no longer be valid. @@ -2350,31 +2348,11 @@ void Application::domainConnectionRefused(const QString& reasonMessage, int reas } } -void Application::domainConnectionRedirect(const QString& reasonMessage, int reasonCodeInt, const QString& extraInfo) { - DomainHandler::ConnectionRefusedReason reasonCode = static_cast(reasonCodeInt); +void Application::domainConnectionRedirect() { auto addressManager = DependencyManager::get(); - if (reasonCode == DomainHandler::ConnectionRefusedReason::TooManyUsers && !extraInfo.isEmpty()) { - addressManager->handleLookupString(extraInfo); - return; - } - - switch (reasonCode) { - case DomainHandler::ConnectionRefusedReason::ProtocolMismatch: - case DomainHandler::ConnectionRefusedReason::TooManyUsers: - case DomainHandler::ConnectionRefusedReason::Unknown: { - QString message = "Unable to connect to the location you are visiting.\n"; - message += reasonMessage; - //OffscreenUi::asyncWarning("", message); - addressManager->handleLookupString(REDIRECT_HIFI_ADDRESS); - getMyAvatar()->setWorldVelocity(glm::vec3(0.0f)); - // in (w, x, y, z) component-structure for the constructor - break; - } - default: - // nothing to do. - break; - } + addressManager->handleLookupString(REDIRECT_HIFI_ADDRESS); + getMyAvatar()->setWorldVelocity(glm::vec3(0.0f)); } diff --git a/interface/src/Application.h b/interface/src/Application.h index 61548f203b..e38b5a3919 100644 --- a/interface/src/Application.h +++ b/interface/src/Application.h @@ -474,7 +474,7 @@ private slots: void updateDisplayMode(); void setDisplayPlugin(DisplayPluginPointer newPlugin); void domainConnectionRefused(const QString& reasonMessage, int reason, const QString& extraInfo); - void domainConnectionRedirect(const QString& reasonMessage, int reason, const QString& extraInfo); + void domainConnectionRedirect(); void addAssetToWorldCheckModelSize(); diff --git a/libraries/networking/src/AddressManager.cpp b/libraries/networking/src/AddressManager.cpp index 732a2d7963..01db8dfd79 100644 --- a/libraries/networking/src/AddressManager.cpp +++ b/libraries/networking/src/AddressManager.cpp @@ -319,7 +319,9 @@ bool AddressManager::handleUrl(const QUrl& lookupUrl, LookupTrigger trigger) { // lookupUrl.scheme() == URL_SCHEME_HTTPS || _previousLookup.clear(); _shareablePlaceName.clear(); - setDomainInfo(lookupUrl, trigger); + if (lookupUrl.toString() != REDIRECT_HIFI_ADDRESS) { + setDomainInfo(lookupUrl, trigger); + } emit lookupResultsFinished(); QString path = DOMAIN_SPAWNING_POINT; diff --git a/libraries/networking/src/DomainHandler.cpp b/libraries/networking/src/DomainHandler.cpp index 39c8b5b1a1..827232129f 100644 --- a/libraries/networking/src/DomainHandler.cpp +++ b/libraries/networking/src/DomainHandler.cpp @@ -128,6 +128,10 @@ void DomainHandler::hardReset() { _pendingPath.clear(); } +void DomainHandler::setErrorDomainURL(const QUrl& url) { + return; +} + void DomainHandler::setSockAddr(const HifiSockAddr& sockAddr, const QString& hostname) { if (_sockAddr != sockAddr) { // we should reset on a sockAddr change @@ -451,7 +455,17 @@ void DomainHandler::processDomainServerConnectionDeniedPacket(QSharedPointer(); diff --git a/libraries/networking/src/DomainHandler.h b/libraries/networking/src/DomainHandler.h index a428110db6..473cac9133 100644 --- a/libraries/networking/src/DomainHandler.h +++ b/libraries/networking/src/DomainHandler.h @@ -50,6 +50,9 @@ public: QString getHostname() const { return _domainURL.host(); } + QUrl getErrorDomainURL(){ return _errorDomainURL; } + void setErrorDomainURL(const QUrl& url); + const QHostAddress& getIP() const { return _sockAddr.getAddress(); } void setIPToLocalhost() { _sockAddr.setAddress(QHostAddress(QHostAddress::LocalHost)); } @@ -179,6 +182,7 @@ signals: void settingsReceiveFail(); void domainConnectionRefused(QString reasonMessage, int reason, const QString& extraInfo); + void redirectToErrorDomainURL(); void limitOfSilentDomainCheckInsReached(); @@ -190,6 +194,7 @@ private: QUuid _uuid; Node::LocalID _localID; QUrl _domainURL; + QUrl _errorDomainURL; HifiSockAddr _sockAddr; QUuid _assignmentUUID; QUuid _connectionToken; @@ -198,6 +203,7 @@ private: HifiSockAddr _iceServerSockAddr; NetworkPeer _icePeer; bool _isConnected { false }; + bool _isInErrorState { false }; QJsonObject _settingsObject; QString _pendingPath; QTimer _settingsTimer; From b6d23843dde70d5970c61d025a48a35606491ac9 Mon Sep 17 00:00:00 2001 From: Wayne Chen Date: Thu, 30 Aug 2018 22:32:02 -0700 Subject: [PATCH 037/123] adding fix to domain redirection URL --- interface/src/Application.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index a927853fb0..86a1421127 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -1199,7 +1199,7 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo }); connect(&domainHandler, &DomainHandler::domainConnectionRefused, this, &Application::domainConnectionRefused); - &domainHandler.setErrorDomainURL(QUrl(REDIRECT_HIFI_ADDRESS)); + nodeList->getDomainHandler().setErrorDomainURL(QUrl(REDIRECT_HIFI_ADDRESS)); // We could clear ATP assets only when changing domains, but it's possible that the domain you are connected // to has gone down and switched to a new content set, so when you reconnect the cached ATP assets will no longer be valid. From c95cb97b9bbf29e69971a8fb3faa8dcd89f5295d Mon Sep 17 00:00:00 2001 From: Wayne Chen Date: Fri, 31 Aug 2018 19:29:48 -0700 Subject: [PATCH 038/123] adding working version with networking signals --- interface/resources/serverless/redirect.json | 1609 +++++++++--------- interface/src/Application.cpp | 31 +- interface/src/Application.h | 4 +- libraries/networking/src/AddressManager.cpp | 44 +- libraries/networking/src/AddressManager.h | 12 +- libraries/networking/src/DomainHandler.cpp | 21 +- libraries/networking/src/DomainHandler.h | 4 +- 7 files changed, 891 insertions(+), 834 deletions(-) diff --git a/interface/resources/serverless/redirect.json b/interface/resources/serverless/redirect.json index 71dfae4212..fd81b6d433 100644 --- a/interface/resources/serverless/redirect.json +++ b/interface/resources/serverless/redirect.json @@ -5,91 +5,91 @@ "clientOnly": false, "collidesWith": "static,dynamic,kinematic,otherAvatar,", "collisionMask": 23, - "created": "2018-08-29T22:59:44Z", + "created": "2018-08-31T21:40:18Z", "dimensions": { - "blue": 0.26190000772476196, - "green": 0.5595999956130981, - "red": 0.5318999886512756, - "x": 0.5318999886512756, - "y": 0.5595999956130981, - "z": 0.26190000772476196 + "blue": 0.8231174349784851, + "green": 1.8264780044555664, + "red": 1.2112245559692383, + "x": 1.2112245559692383, + "y": 1.8264780044555664, + "z": 0.8231174349784851 }, - "id": "{4782f05d-ca51-41d4-9d19-21b8cad5ec2d}", - "lastEdited": 1535584079688600, - "lastEditedBy": "{f5457c14-32ca-45c2-9dde-4f5b30b3be1b}", - "name": "Try Again Box", + "id": "{1a8bf6e0-6f03-4761-9aba-1f624fae1236}", + "lastEdited": 1535751992686833, + "lastEditedBy": "{ace8f357-ad94-49e1-b4d0-39c4d5a936f3}", + "name": "Try Again Zone", "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", "position": { - "blue": 4.54052734375, - "green": 1.722428798675537, - "red": 4.593362331390381, - "x": 0.5933623313903809, - "y": -7.777571201324463, - "z": 0.54052734375 + "blue": 4.442525863647461, + "green": 1.9289360046386719, + "red": 2.600449562072754, + "x": -1.399550437927246, + "y": -7.571063995361328, + "z": 0.44252586364746094 }, "queryAACube": { - "scale": 0.8152676820755005, - "x": 4.185728549957275, - "y": 1.3147950172424316, - "z": 4.1328935623168945 + "scale": 2.3410699367523193, + "x": 1.4299145936965942, + "y": 0.7584010362625122, + "z": 3.2719907760620117 }, "rotation": { - "w": 0.9868703484535217, - "x": -0.010178769007325172, - "y": -0.15702557563781738, - "z": 0.03642075136303902 - }, - "script": "file:///C:/Users/wayne/development/tryAgainBoxEntityScript.js", - "shape": "Cube", - "type": "Box", - "userData": "{\"grabbableKey\":{\"grabbable\":false}}", - "visible": false - }, - { - "clientOnly": false, - "created": "2018-08-29T23:01:55Z", - "dimensions": { - "blue": 0.26190000772476196, - "green": 0.5595999956130981, - "red": 0.5318999886512756, - "x": 0.5318999886512756, - "y": 0.5595999956130981, - "z": 0.26190000772476196 - }, - "id": "{8c9287c8-3826-4f2e-944e-05d8d4715fb8}", - "lastEdited": 1535584095676575, - "lastEditedBy": "{f5457c14-32ca-45c2-9dde-4f5b30b3be1b}", - "name": "Back Box", - "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", - "position": { - "blue": 3.9590959548950195, - "green": 1.738053798675537, - "red": 5.0181121826171875, - "x": 1.0181121826171875, - "y": -7.761946201324463, - "z": -0.04090404510498047 - }, - "queryAACube": { - "scale": 0.8152676820755005, - "x": 4.610478401184082, - "y": 1.3304200172424316, - "z": 3.551462173461914 - }, - "rotation": { - "w": 0.9366722106933594, + "w": 0.9743700623512268, "x": 0, - "y": -0.3502073884010315, + "y": -0.22495104372501373, "z": 0 }, - "script": "file:///C:/Users/wayne/development/backBoxEntityScript.js", - "shape": "Cube", - "type": "Box", - "userData": "{\"grabbableKey\":{\"grabbable\":true}}", - "visible": false + "script": "file:///C:/Users/wayne/development/zoneTryAgainEntityScript.js", + "shapeType": "box", + "type": "Zone", + "userData": "{\"grabbableKey\":{\"grabbable\":false}}" }, { "clientOnly": false, - "created": "2018-08-29T22:57:33Z", + "collidesWith": "static,dynamic,kinematic,otherAvatar,", + "collisionMask": 23, + "created": "2018-08-31T21:44:40Z", + "dimensions": { + "blue": 0.7544999718666077, + "green": 1.8265000581741333, + "red": 1.0555000305175781, + "x": 1.0555000305175781, + "y": 1.8265000581741333, + "z": 0.7544999718666077 + }, + "id": "{eb439982-948a-4393-8e8c-fdd833e6d9a7}", + "lastEdited": 1535752005525769, + "lastEditedBy": "{ace8f357-ad94-49e1-b4d0-39c4d5a936f3}", + "name": "Back Zone", + "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", + "position": { + "blue": 2.538674831390381, + "green": 1.8022732734680176, + "red": 3.5101304054260254, + "x": -0.4898695945739746, + "y": -7.697726726531982, + "z": -1.4613251686096191 + }, + "queryAACube": { + "scale": 2.2404136657714844, + "x": 2.389923572540283, + "y": 0.6820664405822754, + "z": 1.4184679985046387 + }, + "rotation": { + "w": 0.9304176568984985, + "x": 0, + "y": -0.36650121212005615, + "z": 0 + }, + "script": "file:///C:/Users/wayne/development/zoneBackEntityScript.js", + "shapeType": "box", + "type": "Zone", + "userData": "{\"grabbableKey\":{\"grabbable\":false}}" + }, + { + "clientOnly": false, + "created": "2018-08-31T21:35:56Z", "dimensions": { "blue": 14.40000057220459, "green": 14.40000057220459, @@ -98,9 +98,9 @@ "y": 14.40000057220459, "z": 14.40000057220459 }, - "id": "{8e6bd656-d764-4724-a89d-7b4ff96abf8a}", - "lastEdited": 1535583477860044, - "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", + "id": "{dbae0b3a-a7ff-4eb1-9177-fd1f20b3cec8}", + "lastEdited": 1535751789461074, + "lastEditedBy": "{ace8f357-ad94-49e1-b4d0-39c4d5a936f3}", "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", "position": { "blue": 2.3440732955932617, @@ -127,6 +127,239 @@ "type": "Zone", "userData": "{\"grabbableKey\":{\"grabbable\":false}}" }, + { + "clientOnly": false, + "color": { + "blue": 0, + "green": 0, + "red": 0 + }, + "created": "2018-08-31T21:35:56Z", + "dimensions": { + "blue": 11.117486953735352, + "green": 3.580313205718994, + "red": 0.20000000298023224, + "x": 0.20000000298023224, + "y": 3.580313205718994, + "z": 11.117486953735352 + }, + "id": "{c92b026b-e13c-448a-903c-2773f9fdc2e8}", + "lastEdited": 1535751961512543, + "lastEditedBy": "{ace8f357-ad94-49e1-b4d0-39c4d5a936f3}", + "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", + "position": { + "blue": 1.9063844680786133, + "green": 1.15850830078125, + "red": 0.16632509231567383, + "x": -3.833674907684326, + "y": -8.34149169921875, + "z": -2.0936155319213867 + }, + "queryAACube": { + "scale": 11.681488037109375, + "x": -5.674418926239014, + "y": -4.6822357177734375, + "z": -3.934359550476074 + }, + "rotation": { + "w": 0.9666743278503418, + "x": -4.57763671875e-05, + "y": -0.2560006380081177, + "z": 1.52587890625e-05 + }, + "shape": "Cube", + "type": "Box", + "userData": "{\"grabbableKey\":{\"grabbable\":false}}", + "visible": false + }, + { + "clientOnly": false, + "color": { + "blue": 0, + "green": 0, + "red": 0 + }, + "created": "2018-08-31T21:35:56Z", + "dimensions": { + "blue": 11.117486953735352, + "green": 3.580313205718994, + "red": 0.20000000298023224, + "x": 0.20000000298023224, + "y": 3.580313205718994, + "z": 11.117486953735352 + }, + "id": "{cd72debb-75a6-420d-b39f-b903fb069798}", + "lastEdited": 1535751362199714, + "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", + "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", + "position": { + "blue": 6.1806135177612305, + "green": 1.1588134765625, + "red": 1.4755167961120605, + "x": -2.5244832038879395, + "y": -8.3411865234375, + "z": 2.1806135177612305 + }, + "queryAACube": { + "scale": 11.681488037109375, + "x": -4.365227222442627, + "y": -4.6819305419921875, + "z": 0.33986949920654297 + }, + "rotation": { + "w": 0.8637980222702026, + "x": -4.57763671875e-05, + "y": 0.5038070678710938, + "z": -1.52587890625e-05 + }, + "shape": "Cube", + "type": "Box", + "userData": "{\"grabbableKey\":{\"grabbable\":false}}", + "visible": false + }, + { + "clientOnly": false, + "color": { + "blue": 0, + "green": 0, + "red": 0 + }, + "created": "2018-08-31T21:35:56Z", + "dimensions": { + "blue": 11.117486953735352, + "green": 3.580313205718994, + "red": 0.20000000298023224, + "x": 0.20000000298023224, + "y": 3.580313205718994, + "z": 11.117486953735352 + }, + "id": "{abe300d5-32b8-4d0c-bf82-e78005b79b70}", + "lastEdited": 1535751362199153, + "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", + "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", + "position": { + "blue": 5.268576622009277, + "green": 1.1588134765625, + "red": 6.100250244140625, + "x": 2.100250244140625, + "y": -8.3411865234375, + "z": 1.2685766220092773 + }, + "queryAACube": { + "scale": 11.681488037109375, + "x": 0.2595062255859375, + "y": -4.6819305419921875, + "z": -0.5721673965454102 + }, + "rotation": { + "w": 0.9662165641784668, + "x": -4.57763671875e-05, + "y": -0.2576791048049927, + "z": 1.52587890625e-05 + }, + "shape": "Cube", + "type": "Box", + "userData": "{\"grabbableKey\":{\"grabbable\":false}}", + "visible": false + }, + { + "angularDamping": 0, + "clientOnly": false, + "color": { + "blue": 0, + "green": 0, + "red": 255 + }, + "created": "2018-08-31T21:35:56Z", + "dimensions": { + "blue": 0.20000000298023224, + "green": 0.20000000298023224, + "red": 0.20000000298023224, + "x": 0.20000000298023224, + "y": 0.20000000298023224, + "z": 0.20000000298023224 + }, + "id": "{66757fda-b7ad-4858-83ab-724b01710cc2}", + "lastEdited": 1535751362198937, + "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", + "name": "Particle Rotate", + "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", + "position": { + "blue": 1.3116319179534912, + "green": 0.15618896484375, + "red": 2.705613613128662, + "x": -1.294386386871338, + "y": -9.34381103515625, + "z": -2.688368082046509 + }, + "queryAACube": { + "scale": 0.3464101552963257, + "x": 2.5324084758758545, + "y": -0.017016112804412842, + "z": 1.1384267807006836 + }, + "rotation": { + "w": 0.46953535079956055, + "x": -0.16719311475753784, + "y": -0.7982757091522217, + "z": 0.3380941152572632 + }, + "script": "http://hifi-content.s3.amazonaws.com/alexia/Models/Portal/rotate.js", + "scriptTimestamp": 1532724769253, + "shape": "Cube", + "type": "Box", + "userData": "{\"grabbableKey\":{\"grabbable\":false}}", + "visible": false + }, + { + "angularDamping": 0, + "clientOnly": false, + "color": { + "blue": 0, + "green": 0, + "red": 255 + }, + "created": "2018-08-31T21:35:56Z", + "dimensions": { + "blue": 0.20000000298023224, + "green": 0.20000000298023224, + "red": 0.20000000298023224, + "x": 0.20000000298023224, + "y": 0.20000000298023224, + "z": 0.20000000298023224 + }, + "id": "{24eda146-92f8-4e43-b084-fb555626427b}", + "lastEdited": 1535751362198263, + "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", + "name": "Particle Rotate", + "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", + "position": { + "blue": 1.3116319179534912, + "green": 0, + "red": 2.705613613128662, + "x": -1.294386386871338, + "y": -9.5, + "z": -2.688368082046509 + }, + "queryAACube": { + "scale": 0.3464101552963257, + "x": 2.5324084758758545, + "y": -0.17320507764816284, + "z": 1.1384267807006836 + }, + "rotation": { + "w": 0.9127794504165649, + "x": 0.2575265169143677, + "y": 0.15553522109985352, + "z": 0.2761729955673218 + }, + "script": "http://hifi-content.s3.amazonaws.com/alexia/Models/Portal/rotate.js", + "scriptTimestamp": 1532724769253, + "shape": "Cube", + "type": "Box", + "userData": "{\"grabbableKey\":{\"grabbable\":false}}", + "visible": false + }, { "alpha": 0, "alphaFinish": 0, @@ -148,7 +381,7 @@ "y": 255, "z": 255 }, - "created": "2018-08-29T22:57:33Z", + "created": "2018-08-31T21:35:56Z", "dimensions": { "blue": 13.24000072479248, "green": 13.24000072479248, @@ -181,8 +414,419 @@ }, "emitRate": 6, "emitSpeed": 0, - "id": "{b5ba3aa4-2eb9-4cfd-aec7-43635511c6b7}", - "lastEdited": 1535583477861791, + "emitterShouldTrail": true, + "id": "{b9a46e3e-f982-4a46-b38d-2a38e5cc5fbc}", + "lastEdited": 1535751362199964, + "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", + "lifespan": 10, + "maxParticles": 10, + "name": "Stars", + "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", + "particleRadius": 0.07000000029802322, + "polarFinish": 3.1415927410125732, + "position": { + "blue": 3.78922963142395, + "green": 0.5220947265625, + "red": 1.1928560733795166, + "x": -2.8071439266204834, + "y": -8.9779052734375, + "z": -0.2107703685760498 + }, + "queryAACube": { + "scale": 22.932353973388672, + "x": -10.273321151733398, + "y": -10.944082260131836, + "z": -7.676947593688965 + }, + "radiusFinish": 0, + "radiusStart": 0, + "rotation": { + "w": 0.996429443359375, + "x": -1.52587890625e-05, + "y": -0.08442819118499756, + "z": -4.57763671875e-05 + }, + "speedSpread": 0, + "spinFinish": null, + "spinStart": null, + "textures": "http://hifi-content.s3.amazonaws.com/alexia/Models/Portal/star.png", + "type": "ParticleEffect", + "userData": "{\"grabbableKey\":{\"grabbable\":false}}" + }, + { + "clientOnly": false, + "color": { + "blue": 0, + "green": 0, + "red": 0 + }, + "created": "2018-08-31T21:35:56Z", + "dimensions": { + "blue": 11.117486953735352, + "green": 3.580313205718994, + "red": 0.20000000298023224, + "x": 0.20000000298023224, + "y": 3.580313205718994, + "z": 11.117486953735352 + }, + "id": "{e6897ca3-1c22-429f-a1b6-173ff47397a7}", + "lastEdited": 1535751362197848, + "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", + "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", + "position": { + "blue": 0, + "green": 1.1583251953125, + "red": 4.971565246582031, + "x": 0.9715652465820312, + "y": -8.3416748046875, + "z": -4 + }, + "queryAACube": { + "scale": 11.681488037109375, + "x": -0.8691787719726562, + "y": -4.6824188232421875, + "z": -5.8407440185546875 + }, + "rotation": { + "w": 0.8637980222702026, + "x": -4.57763671875e-05, + "y": 0.5038070678710938, + "z": -1.52587890625e-05 + }, + "shape": "Cube", + "type": "Box", + "userData": "{\"grabbableKey\":{\"grabbable\":false}}", + "visible": false + }, + { + "angularDamping": 0, + "clientOnly": false, + "color": { + "blue": 0, + "green": 0, + "red": 255 + }, + "created": "2018-08-31T21:35:56Z", + "dimensions": { + "blue": 0.20000000298023224, + "green": 0.20000000298023224, + "red": 0.20000000298023224, + "x": 0.20000000298023224, + "y": 0.20000000298023224, + "z": 0.20000000298023224 + }, + "id": "{16ca16ab-eee3-41b1-b583-159245aa2010}", + "lastEdited": 1535751362197055, + "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", + "name": "Particle Rotate", + "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", + "position": { + "blue": 1.3116319179534912, + "green": 0.0772705078125, + "red": 2.705613613128662, + "x": -1.294386386871338, + "y": -9.4227294921875, + "z": -2.688368082046509 + }, + "queryAACube": { + "scale": 0.3464101552963257, + "x": 2.5324084758758545, + "y": -0.09593456983566284, + "z": 1.1384267807006836 + }, + "rotation": { + "w": -0.38777750730514526, + "x": -0.37337303161621094, + "y": -0.8409399390220642, + "z": 0.055222392082214355 + }, + "script": "http://hifi-content.s3.amazonaws.com/alexia/Models/Portal/rotate.js", + "scriptTimestamp": 1532724769253, + "shape": "Cube", + "type": "Box", + "userData": "{\"grabbableKey\":{\"grabbable\":false}}", + "visible": false + }, + { + "clientOnly": false, + "created": "2018-08-31T21:35:56Z", + "dimensions": { + "blue": 2.1097896099090576, + "green": 0.04847164824604988, + "red": 1.458284616470337, + "x": 1.458284616470337, + "y": 0.04847164824604988, + "z": 2.1097896099090576 + }, + "id": "{482ae172-c411-41fb-9a41-4215eef25478}", + "lastEdited": 1535751754378548, + "lastEditedBy": "{ace8f357-ad94-49e1-b4d0-39c4d5a936f3}", + "modelURL": "http://hifi-content.s3.amazonaws.com/alexia/Models/Portal/portal2.fbx", + "name": "Back", + "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", + "position": { + "blue": 1.5835940837860107, + "green": 0.2467041015625, + "red": 3.0345542430877686, + "x": -0.9654457569122314, + "y": -9.2532958984375, + "z": -2.4164059162139893 + }, + "queryAACube": { + "scale": 2.5651814937591553, + "x": 1.751963496208191, + "y": -1.0358866453170776, + "z": 0.3010033369064331 + }, + "rotation": { + "w": 0.9084458351135254, + "x": -1.52587890625e-05, + "y": 0.4179598093032837, + "z": -0.0001068115234375 + }, + "script": "file:///C:/Users/wayne/development/backEntityScript.js", + "scriptTimestamp": 1535751754379, + "shapeType": "static-mesh", + "type": "Model", + "userData": "{\"grabbableKey\":{\"grabbable\":false}}" + }, + { + "clientOnly": false, + "created": "2018-08-31T21:35:56Z", + "dimensions": { + "blue": 9.030570983886719, + "green": 0.0719478651881218, + "red": 9.030570983886719, + "x": 9.030570983886719, + "y": 0.0719478651881218, + "z": 9.030570983886719 + }, + "id": "{33440bf8-f9ce-4d52-9b29-1b321e226982}", + "lastEdited": 1535751362197214, + "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", + "modelURL": "http://hifi-content.s3.amazonaws.com/alexia/LoadingScreens/floor.fbx", + "name": "Floor", + "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", + "position": { + "blue": 4.2324604988098145, + "green": 0.17547607421875, + "red": 4.802988529205322, + "x": 0.8029885292053223, + "y": -9.32452392578125, + "z": 0.23246049880981445 + }, + "queryAACube": { + "scale": 12.771358489990234, + "x": -1.582690715789795, + "y": -6.210203170776367, + "z": -2.1532187461853027 + }, + "rotation": { + "w": 0.8648051023483276, + "x": -1.52587890625e-05, + "y": 0.5020675659179688, + "z": -4.57763671875e-05 + }, + "shapeType": "simple-hull", + "type": "Model", + "userData": "{\"grabbableKey\":{\"grabbable\":false}}" + }, + { + "angularDamping": 0, + "clientOnly": false, + "color": { + "blue": 0, + "green": 0, + "red": 255 + }, + "created": "2018-08-31T21:35:56Z", + "dimensions": { + "blue": 0.20000000298023224, + "green": 0.20000000298023224, + "red": 0.20000000298023224, + "x": 0.20000000298023224, + "y": 0.20000000298023224, + "z": 0.20000000298023224 + }, + "id": "{7639140e-cd6f-4f86-97f7-00a19f50253e}", + "lastEdited": 1535751362198721, + "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", + "name": "Particle Rotate", + "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", + "position": { + "blue": 3.8216662406921387, + "green": 0, + "red": 1.2409718036651611, + "x": -2.759028196334839, + "y": -9.5, + "z": -0.17833375930786133 + }, + "queryAACube": { + "scale": 0.3464101552963257, + "x": 1.0677666664123535, + "y": -0.17320507764816284, + "z": 3.648461103439331 + }, + "rotation": { + "w": 0.6444342136383057, + "x": -0.08220034837722778, + "y": -0.6649118661880493, + "z": 0.3684900999069214 + }, + "script": "http://hifi-content.s3.amazonaws.com/alexia/Models/Portal/rotate.js", + "scriptTimestamp": 1532724769253, + "shape": "Cube", + "type": "Box", + "userData": "{\"grabbableKey\":{\"grabbable\":false}}", + "visible": false + }, + { + "clientOnly": false, + "created": "2018-08-31T21:35:56Z", + "dimensions": { + "blue": 2.1097896099090576, + "green": 0.04847164824604988, + "red": 1.458284616470337, + "x": 1.458284616470337, + "y": 0.04847164824604988, + "z": 2.1097896099090576 + }, + "id": "{7755bf99-b026-490d-a682-edadd3f65701}", + "lastEdited": 1535751900322535, + "lastEditedBy": "{ace8f357-ad94-49e1-b4d0-39c4d5a936f3}", + "modelURL": "http://hifi-content.s3.amazonaws.com/alexia/Models/Portal/portal1.fbx", + "name": "Try Again", + "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", + "position": { + "blue": 3.946338653564453, + "green": 0.2467041015625, + "red": 1.6013128757476807, + "x": -2.3986871242523193, + "y": -9.2532958984375, + "z": -0.053661346435546875 + }, + "queryAACube": { + "scale": 2.5651814937591553, + "x": 0.318722128868103, + "y": -1.0358866453170776, + "z": 2.663747787475586 + }, + "rotation": { + "w": 0.8220492601394653, + "x": -1.52587890625e-05, + "y": 0.5693598985671997, + "z": -0.0001068115234375 + }, + "script": "file:///C:/Users/wayne/development/tryAgainEntityScript.js", + "shapeType": "static-mesh", + "type": "Model", + "userData": "{\"grabbableKey\":{\"grabbable\":false}}" + }, + { + "angularDamping": 0, + "clientOnly": false, + "color": { + "blue": 0, + "green": 0, + "red": 255 + }, + "created": "2018-08-31T21:35:56Z", + "dimensions": { + "blue": 0.20000000298023224, + "green": 0.20000000298023224, + "red": 0.20000000298023224, + "x": 0.20000000298023224, + "y": 0.20000000298023224, + "z": 0.20000000298023224 + }, + "id": "{81207b9c-e3f2-4ee1-bb81-0e14f37e4687}", + "lastEdited": 1535751362197613, + "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", + "name": "Particle Rotate", + "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", + "position": { + "blue": 3.8216662406921387, + "green": 0.15618896484375, + "red": 1.2409718036651611, + "x": -2.759028196334839, + "y": -9.34381103515625, + "z": -0.17833375930786133 + }, + "queryAACube": { + "scale": 0.3464101552963257, + "x": 1.0677666664123535, + "y": -0.017016112804412842, + "z": 3.648461103439331 + }, + "rotation": { + "w": 0.6747081279754639, + "x": -0.06532388925552368, + "y": -0.6342412233352661, + "z": 0.37175559997558594 + }, + "script": "http://hifi-content.s3.amazonaws.com/alexia/Models/Portal/rotate.js", + "scriptTimestamp": 1532724769253, + "shape": "Cube", + "type": "Box", + "userData": "{\"grabbableKey\":{\"grabbable\":false}}", + "visible": false + }, + { + "alpha": 0, + "alphaFinish": 0, + "alphaStart": 0.25, + "clientOnly": false, + "colorFinish": { + "blue": 0, + "green": 0, + "red": 0, + "x": 0, + "y": 0, + "z": 0 + }, + "colorStart": { + "blue": 255, + "green": 255, + "red": 255, + "x": 255, + "y": 255, + "z": 255 + }, + "created": "2018-08-31T21:35:56Z", + "dimensions": { + "blue": 13.24000072479248, + "green": 13.24000072479248, + "red": 13.24000072479248, + "x": 13.24000072479248, + "y": 13.24000072479248, + "z": 13.24000072479248 + }, + "emitAcceleration": { + "blue": 0, + "green": 0.10000000149011612, + "red": 0, + "x": 0, + "y": 0.10000000149011612, + "z": 0 + }, + "emitDimensions": { + "blue": 1, + "green": 1, + "red": 1, + "x": 1, + "y": 1, + "z": 1 + }, + "emitOrientation": { + "w": 1, + "x": -1.52587890625e-05, + "y": -1.52587890625e-05, + "z": -1.52587890625e-05 + }, + "emitRate": 6, + "emitSpeed": 0, + "id": "{b8f11bf5-410e-4e35-b4c3-91c86c01351d}", + "lastEdited": 1535751362196710, "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "lifespan": 10, "maxParticles": 10, @@ -219,558 +863,6 @@ "type": "ParticleEffect", "userData": "{\"grabbableKey\":{\"grabbable\":false}}" }, - { - "clientOnly": false, - "color": { - "blue": 0, - "green": 0, - "red": 0 - }, - "created": "2018-08-29T22:57:33Z", - "dimensions": { - "blue": 11.117486953735352, - "green": 3.580313205718994, - "red": 0.20000000298023224, - "x": 0.20000000298023224, - "y": 3.580313205718994, - "z": 11.117486953735352 - }, - "id": "{12a26c55-c411-4c4c-a124-cac9c80f9532}", - "lastEdited": 1535583681180522, - "lastEditedBy": "{f5457c14-32ca-45c2-9dde-4f5b30b3be1b}", - "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", - "position": { - "blue": 1.9063844680786133, - "green": 1.15850830078125, - "red": 0.16632509231567383, - "x": -3.833674907684326, - "y": -8.34149169921875, - "z": -2.0936155319213867 - }, - "queryAACube": { - "scale": 11.681488037109375, - "x": -5.674418926239014, - "y": -4.6822357177734375, - "z": -3.934359550476074 - }, - "rotation": { - "w": 0.9666743278503418, - "x": -4.57763671875e-05, - "y": -0.2560006380081177, - "z": 1.52587890625e-05 - }, - "shape": "Cube", - "type": "Box", - "userData": "{\"grabbableKey\":{\"grabbable\":false}}", - "visible": false - }, - { - "angularDamping": 0, - "clientOnly": false, - "color": { - "blue": 0, - "green": 0, - "red": 255 - }, - "created": "2018-08-29T22:57:33Z", - "dimensions": { - "blue": 0.20000000298023224, - "green": 0.20000000298023224, - "red": 0.20000000298023224, - "x": 0.20000000298023224, - "y": 0.20000000298023224, - "z": 0.20000000298023224 - }, - "id": "{e8fd2c79-1303-49e4-8e4a-823272d6558c}", - "lastEdited": 1535583477862445, - "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", - "name": "Particle Rotate", - "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", - "position": { - "blue": 1.3116319179534912, - "green": 0.0772705078125, - "red": 2.705613613128662, - "x": -1.294386386871338, - "y": -9.4227294921875, - "z": -2.688368082046509 - }, - "queryAACube": { - "scale": 0.3464101552963257, - "x": 2.5324084758758545, - "y": -0.09593456983566284, - "z": 1.1384267807006836 - }, - "rotation": { - "w": -0.38777750730514526, - "x": -0.37337303161621094, - "y": -0.8409399390220642, - "z": 0.055222392082214355 - }, - "script": "http://hifi-content.s3.amazonaws.com/alexia/Models/Portal/rotate.js", - "scriptTimestamp": 1532724769253, - "shape": "Cube", - "type": "Box", - "userData": "{\"grabbableKey\":{\"grabbable\":false}}", - "visible": false - }, - { - "clientOnly": false, - "created": "2018-08-29T22:57:33Z", - "dimensions": { - "blue": 9.030570983886719, - "green": 0.0719478651881218, - "red": 9.030570983886719, - "x": 9.030570983886719, - "y": 0.0719478651881218, - "z": 9.030570983886719 - }, - "id": "{85b4551d-c05d-4038-b188-30ad5db9c23a}", - "lastEdited": 1535583477861514, - "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", - "modelURL": "http://hifi-content.s3.amazonaws.com/alexia/LoadingScreens/floor.fbx", - "name": "Floor", - "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", - "position": { - "blue": 4.2324604988098145, - "green": 0.17547607421875, - "red": 4.802988529205322, - "x": 0.8029885292053223, - "y": -9.32452392578125, - "z": 0.23246049880981445 - }, - "queryAACube": { - "scale": 12.771358489990234, - "x": -1.582690715789795, - "y": -6.210203170776367, - "z": -2.1532187461853027 - }, - "rotation": { - "w": 0.8648051023483276, - "x": -1.52587890625e-05, - "y": 0.5020675659179688, - "z": -4.57763671875e-05 - }, - "shapeType": "simple-hull", - "type": "Model", - "userData": "{\"grabbableKey\":{\"grabbable\":false}}" - }, - { - "clientOnly": false, - "created": "2018-08-29T22:57:33Z", - "dimensions": { - "blue": 0.06014331430196762, - "green": 2.582186460494995, - "red": 2.582186698913574, - "x": 2.582186698913574, - "y": 2.582186460494995, - "z": 0.06014331430196762 - }, - "id": "{8e4d8047-c2e2-4b2c-bfa2-c732d419d59a}", - "lastEdited": 1535583477860645, - "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", - "modelURL": "http://hifi-content.s3.amazonaws.com/alexia/LoadingScreens/oopsDialog.fbx", - "name": "Oops Dialog", - "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", - "position": { - "blue": 1.45927095413208, - "green": 1.6763916015625, - "red": 0, - "x": -4, - "y": -7.8236083984375, - "z": -2.54072904586792 - }, - "queryAACube": { - "scale": 3.6522583961486816, - "x": -1.8261291980743408, - "y": -0.14973759651184082, - "z": -0.36685824394226074 - }, - "rotation": { - "w": 0.8684672117233276, - "x": -4.57763671875e-05, - "y": 0.4957197904586792, - "z": -7.62939453125e-05 - }, - "type": "Model", - "userData": "{\"grabbableKey\":{\"grabbable\":false}}" - }, - { - "angularDamping": 0, - "clientOnly": false, - "color": { - "blue": 0, - "green": 0, - "red": 255 - }, - "created": "2018-08-29T22:57:33Z", - "dimensions": { - "blue": 0.20000000298023224, - "green": 0.20000000298023224, - "red": 0.20000000298023224, - "x": 0.20000000298023224, - "y": 0.20000000298023224, - "z": 0.20000000298023224 - }, - "id": "{4fc1436d-00e7-43ec-83e1-f70cff544885}", - "lastEdited": 1535583477862827, - "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", - "name": "Particle Rotate", - "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", - "position": { - "blue": 3.8216662406921387, - "green": 0.15618896484375, - "red": 1.2409718036651611, - "x": -2.759028196334839, - "y": -9.34381103515625, - "z": -0.17833375930786133 - }, - "queryAACube": { - "scale": 0.3464101552963257, - "x": 1.0677666664123535, - "y": -0.017016112804412842, - "z": 3.648461103439331 - }, - "rotation": { - "w": 0.6747081279754639, - "x": -0.06532388925552368, - "y": -0.6342412233352661, - "z": 0.37175559997558594 - }, - "script": "http://hifi-content.s3.amazonaws.com/alexia/Models/Portal/rotate.js", - "scriptTimestamp": 1532724769253, - "shape": "Cube", - "type": "Box", - "userData": "{\"grabbableKey\":{\"grabbable\":false}}", - "visible": false - }, - { - "clientOnly": false, - "color": { - "blue": 0, - "green": 0, - "red": 0 - }, - "created": "2018-08-29T22:57:33Z", - "dimensions": { - "blue": 11.117486953735352, - "green": 3.580313205718994, - "red": 0.20000000298023224, - "x": 0.20000000298023224, - "y": 3.580313205718994, - "z": 11.117486953735352 - }, - "id": "{81a7c620-88ea-4056-b148-449d963c7eb5}", - "lastEdited": 1535583477860260, - "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", - "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", - "position": { - "blue": 0, - "green": 1.1583251953125, - "red": 4.971565246582031, - "x": 0.9715652465820312, - "y": -8.3416748046875, - "z": -4 - }, - "queryAACube": { - "scale": 11.681488037109375, - "x": -0.8691787719726562, - "y": -4.6824188232421875, - "z": -5.8407440185546875 - }, - "rotation": { - "w": 0.8637980222702026, - "x": -4.57763671875e-05, - "y": 0.5038070678710938, - "z": -1.52587890625e-05 - }, - "shape": "Cube", - "type": "Box", - "userData": "{\"grabbableKey\":{\"grabbable\":false}}", - "visible": false - }, - { - "clientOnly": false, - "created": "2018-08-29T22:57:33Z", - "dimensions": { - "blue": 2.1097896099090576, - "green": 0.04847164824604988, - "red": 1.458284616470337, - "x": 1.458284616470337, - "y": 0.04847164824604988, - "z": 2.1097896099090576 - }, - "id": "{09436993-6042-49ff-bfec-0fd28f792251}", - "lastEdited": 1535583477863518, - "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", - "modelURL": "http://hifi-content.s3.amazonaws.com/alexia/Models/Portal/portal1.fbx", - "name": "Try Again", - "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", - "position": { - "blue": 3.946338653564453, - "green": 0.2467041015625, - "red": 1.6013128757476807, - "x": -2.3986871242523193, - "y": -9.2532958984375, - "z": -0.053661346435546875 - }, - "queryAACube": { - "scale": 2.5651814937591553, - "x": 0.318722128868103, - "y": -1.0358866453170776, - "z": 2.663747787475586 - }, - "rotation": { - "w": 0.8220492601394653, - "x": -1.52587890625e-05, - "y": 0.5693598985671997, - "z": -0.0001068115234375 - }, - "script": "file:///C:/Users/wayne/development/tryAgainEntityScript.js", - "shapeType": "static-mesh", - "type": "Model", - "userData": "{\"grabbableKey\":{\"grabbable\":false}}" - }, - { - "angularDamping": 0, - "clientOnly": false, - "color": { - "blue": 0, - "green": 0, - "red": 255 - }, - "created": "2018-08-29T22:57:33Z", - "dimensions": { - "blue": 0.20000000298023224, - "green": 0.20000000298023224, - "red": 0.20000000298023224, - "x": 0.20000000298023224, - "y": 0.20000000298023224, - "z": 0.20000000298023224 - }, - "id": "{86188ae0-6b36-4753-a5c0-0ba31b8ca89a}", - "lastEdited": 1535583477861108, - "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", - "name": "Particle Rotate", - "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", - "position": { - "blue": 1.3116319179534912, - "green": 0, - "red": 2.705613613128662, - "x": -1.294386386871338, - "y": -9.5, - "z": -2.688368082046509 - }, - "queryAACube": { - "scale": 0.3464101552963257, - "x": 2.5324084758758545, - "y": -0.17320507764816284, - "z": 1.1384267807006836 - }, - "rotation": { - "w": 0.9127794504165649, - "x": 0.2575265169143677, - "y": 0.15553522109985352, - "z": 0.2761729955673218 - }, - "script": "http://hifi-content.s3.amazonaws.com/alexia/Models/Portal/rotate.js", - "scriptTimestamp": 1532724769253, - "shape": "Cube", - "type": "Box", - "userData": "{\"grabbableKey\":{\"grabbable\":false}}", - "visible": false - }, - { - "angularDamping": 0, - "clientOnly": false, - "color": { - "blue": 0, - "green": 0, - "red": 255 - }, - "created": "2018-08-29T22:57:33Z", - "dimensions": { - "blue": 0.20000000298023224, - "green": 0.20000000298023224, - "red": 0.20000000298023224, - "x": 0.20000000298023224, - "y": 0.20000000298023224, - "z": 0.20000000298023224 - }, - "id": "{ffa954a9-43e4-47b1-82c9-b921ed3414b0}", - "lastEdited": 1535583477861316, - "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", - "name": "Particle Rotate", - "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", - "position": { - "blue": 3.8216662406921387, - "green": 0.0772705078125, - "red": 1.2409718036651611, - "x": -2.759028196334839, - "y": -9.4227294921875, - "z": -0.17833375930786133 - }, - "queryAACube": { - "scale": 0.3464101552963257, - "x": 1.0677666664123535, - "y": -0.09593456983566284, - "z": 3.648461103439331 - }, - "rotation": { - "w": 0.926024317741394, - "x": 0.20308232307434082, - "y": -0.010269343852996826, - "z": 0.3179827928543091 - }, - "script": "http://hifi-content.s3.amazonaws.com/alexia/Models/Portal/rotate.js", - "scriptTimestamp": 1532724769253, - "shape": "Cube", - "type": "Box", - "userData": "{\"grabbableKey\":{\"grabbable\":false}}", - "visible": false - }, - { - "angularDamping": 0, - "clientOnly": false, - "color": { - "blue": 0, - "green": 0, - "red": 255 - }, - "created": "2018-08-29T22:57:33Z", - "dimensions": { - "blue": 0.20000000298023224, - "green": 0.20000000298023224, - "red": 0.20000000298023224, - "x": 0.20000000298023224, - "y": 0.20000000298023224, - "z": 0.20000000298023224 - }, - "id": "{e86df231-a55a-4ca7-ae68-d3271a543d10}", - "lastEdited": 1535583477860886, - "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", - "name": "Particle Rotate", - "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", - "position": { - "blue": 3.8216662406921387, - "green": 0, - "red": 1.2409718036651611, - "x": -2.759028196334839, - "y": -9.5, - "z": -0.17833375930786133 - }, - "queryAACube": { - "scale": 0.3464101552963257, - "x": 1.0677666664123535, - "y": -0.17320507764816284, - "z": 3.648461103439331 - }, - "rotation": { - "w": 0.6444342136383057, - "x": -0.08220034837722778, - "y": -0.6649118661880493, - "z": 0.3684900999069214 - }, - "script": "http://hifi-content.s3.amazonaws.com/alexia/Models/Portal/rotate.js", - "scriptTimestamp": 1532724769253, - "shape": "Cube", - "type": "Box", - "userData": "{\"grabbableKey\":{\"grabbable\":false}}", - "visible": false - }, - { - "angularDamping": 0, - "clientOnly": false, - "color": { - "blue": 0, - "green": 0, - "red": 255 - }, - "created": "2018-08-29T22:57:33Z", - "dimensions": { - "blue": 0.20000000298023224, - "green": 0.20000000298023224, - "red": 0.20000000298023224, - "x": 0.20000000298023224, - "y": 0.20000000298023224, - "z": 0.20000000298023224 - }, - "id": "{252ffb06-db92-4732-9315-7ee293c24ab8}", - "lastEdited": 1535583477862267, - "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", - "name": "Particle Rotate", - "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", - "position": { - "blue": 1.3116319179534912, - "green": 0.15618896484375, - "red": 2.705613613128662, - "x": -1.294386386871338, - "y": -9.34381103515625, - "z": -2.688368082046509 - }, - "queryAACube": { - "scale": 0.3464101552963257, - "x": 2.5324084758758545, - "y": -0.017016112804412842, - "z": 1.1384267807006836 - }, - "rotation": { - "w": 0.46953535079956055, - "x": -0.16719311475753784, - "y": -0.7982757091522217, - "z": 0.3380941152572632 - }, - "script": "http://hifi-content.s3.amazonaws.com/alexia/Models/Portal/rotate.js", - "scriptTimestamp": 1532724769253, - "shape": "Cube", - "type": "Box", - "userData": "{\"grabbableKey\":{\"grabbable\":false}}", - "visible": false - }, - { - "clientOnly": false, - "color": { - "blue": 0, - "green": 0, - "red": 0 - }, - "created": "2018-08-29T22:57:33Z", - "dimensions": { - "blue": 11.117486953735352, - "green": 3.580313205718994, - "red": 0.20000000298023224, - "x": 0.20000000298023224, - "y": 3.580313205718994, - "z": 11.117486953735352 - }, - "id": "{1c93807b-311d-48cd-af5e-b477d33b2811}", - "lastEdited": 1535583477860455, - "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", - "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", - "position": { - "blue": 5.268576622009277, - "green": 1.1588134765625, - "red": 6.100250244140625, - "x": 2.100250244140625, - "y": -8.3411865234375, - "z": 1.2685766220092773 - }, - "queryAACube": { - "scale": 11.681488037109375, - "x": 0.2595062255859375, - "y": -4.6819305419921875, - "z": -0.5721673965454102 - }, - "rotation": { - "w": 0.9662165641784668, - "x": -4.57763671875e-05, - "y": -0.2576791048049927, - "z": 1.52587890625e-05 - }, - "shape": "Cube", - "type": "Box", - "userData": "{\"grabbableKey\":{\"grabbable\":false}}", - "visible": false - }, { "alpha": 0, "alphaFinish": 0, @@ -797,7 +889,7 @@ "y": 204, "z": 255 }, - "created": "2018-08-29T22:57:33Z", + "created": "2018-08-31T21:35:56Z", "dimensions": { "blue": 2.5, "green": 2.5, @@ -831,8 +923,8 @@ "emitRate": 2, "emitSpeed": 0, "emitterShouldTrail": true, - "id": "{4cb534d1-5494-4aaa-aa28-ff5cee6e0b8f}", - "lastEdited": 1535583477862081, + "id": "{4e72df75-67d7-4ce2-bdea-e78adae8904a}", + "lastEdited": 1535751362199482, "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "lifespan": 10, "maxParticles": 40, @@ -870,144 +962,6 @@ "type": "ParticleEffect", "userData": "{\"grabbableKey\":{\"grabbable\":false}}" }, - { - "clientOnly": false, - "color": { - "blue": 0, - "green": 0, - "red": 0 - }, - "created": "2018-08-29T22:57:33Z", - "dimensions": { - "blue": 11.117486953735352, - "green": 3.580313205718994, - "red": 0.20000000298023224, - "x": 0.20000000298023224, - "y": 3.580313205718994, - "z": 11.117486953735352 - }, - "id": "{a58a8ffe-17ee-4154-b8bb-54e2f0ca9a9d}", - "lastEdited": 1535583477862953, - "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", - "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", - "position": { - "blue": 6.1806135177612305, - "green": 1.1588134765625, - "red": 1.4755167961120605, - "x": -2.5244832038879395, - "y": -8.3411865234375, - "z": 2.1806135177612305 - }, - "queryAACube": { - "scale": 11.681488037109375, - "x": -4.365227222442627, - "y": -4.6819305419921875, - "z": 0.33986949920654297 - }, - "rotation": { - "w": 0.8637980222702026, - "x": -4.57763671875e-05, - "y": 0.5038070678710938, - "z": -1.52587890625e-05 - }, - "shape": "Cube", - "type": "Box", - "userData": "{\"grabbableKey\":{\"grabbable\":false}}", - "visible": false - }, - { - "alpha": 0, - "alphaFinish": 0, - "alphaStart": 0.25, - "clientOnly": false, - "colorFinish": { - "blue": 0, - "green": 0, - "red": 0, - "x": 0, - "y": 0, - "z": 0 - }, - "colorStart": { - "blue": 255, - "green": 255, - "red": 255, - "x": 255, - "y": 255, - "z": 255 - }, - "created": "2018-08-29T22:57:33Z", - "dimensions": { - "blue": 13.24000072479248, - "green": 13.24000072479248, - "red": 13.24000072479248, - "x": 13.24000072479248, - "y": 13.24000072479248, - "z": 13.24000072479248 - }, - "emitAcceleration": { - "blue": 0, - "green": 0.10000000149011612, - "red": 0, - "x": 0, - "y": 0.10000000149011612, - "z": 0 - }, - "emitDimensions": { - "blue": 1, - "green": 1, - "red": 1, - "x": 1, - "y": 1, - "z": 1 - }, - "emitOrientation": { - "w": 1, - "x": -1.52587890625e-05, - "y": -1.52587890625e-05, - "z": -1.52587890625e-05 - }, - "emitRate": 6, - "emitSpeed": 0, - "emitterShouldTrail": true, - "id": "{b6c56e83-f098-422d-a0e8-fd1497c62fbe}", - "lastEdited": 1535583477863251, - "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", - "lifespan": 10, - "maxParticles": 10, - "name": "Stars", - "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", - "particleRadius": 0.07000000029802322, - "polarFinish": 3.1415927410125732, - "position": { - "blue": 3.78922963142395, - "green": 0.5220947265625, - "red": 1.1928560733795166, - "x": -2.8071439266204834, - "y": -8.9779052734375, - "z": -0.2107703685760498 - }, - "queryAACube": { - "scale": 22.932353973388672, - "x": -10.273321151733398, - "y": -10.944082260131836, - "z": -7.676947593688965 - }, - "radiusFinish": 0, - "radiusStart": 0, - "rotation": { - "w": 0.996429443359375, - "x": -1.52587890625e-05, - "y": -0.08442819118499756, - "z": -4.57763671875e-05 - }, - "speedSpread": 0, - "spinFinish": null, - "spinStart": null, - "textures": "http://hifi-content.s3.amazonaws.com/alexia/Models/Portal/star.png", - "type": "ParticleEffect", - "userData": "{\"grabbableKey\":{\"grabbable\":false}}" - }, { "alpha": 0, "alphaFinish": 0, @@ -1034,7 +988,7 @@ "y": 227, "z": 211 }, - "created": "2018-08-29T22:57:33Z", + "created": "2018-08-31T21:35:56Z", "dimensions": { "blue": 2.5, "green": 2.5, @@ -1067,8 +1021,8 @@ }, "emitRate": 2, "emitSpeed": 0, - "id": "{f87fab56-c8d8-4ff8-abf0-35a76dfccf2b}", - "lastEdited": 1535583477862685, + "id": "{3482eecd-0acc-4fb9-bd67-b160fa7c14d7}", + "lastEdited": 1535751362200185, "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", "lifespan": 10, "maxParticles": 40, @@ -1108,51 +1062,94 @@ }, { "clientOnly": false, - "created": "2018-08-29T22:57:33Z", + "created": "2018-08-31T21:35:56Z", "dimensions": { - "blue": 2.1097896099090576, - "green": 0.04847164824604988, - "red": 1.458284616470337, - "x": 1.458284616470337, - "y": 0.04847164824604988, - "z": 2.1097896099090576 + "blue": 0.06014331430196762, + "green": 2.582186460494995, + "red": 2.582186698913574, + "x": 2.582186698913574, + "y": 2.582186460494995, + "z": 0.06014331430196762 }, - "id": "{1af53cfc-0cce-467a-96e0-a937f2651ce2}", - "lastEdited": 1535583477863389, + "id": "{729e9f39-5750-42a4-97a8-0fc79b300a32}", + "lastEdited": 1535751362197365, "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", - "modelURL": "http://hifi-content.s3.amazonaws.com/alexia/Models/Portal/portal2.fbx", - "name": "Back", + "modelURL": "http://hifi-content.s3.amazonaws.com/alexia/LoadingScreens/oopsDialog.fbx", + "name": "Oops Dialog", "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", "position": { - "blue": 1.5835940837860107, - "green": 0.2467041015625, - "red": 3.0345542430877686, - "x": -0.9654457569122314, - "y": -9.2532958984375, - "z": -2.4164059162139893 + "blue": 1.45927095413208, + "green": 1.6763916015625, + "red": 0, + "x": -4, + "y": -7.8236083984375, + "z": -2.54072904586792 }, "queryAACube": { - "scale": 2.5651814937591553, - "x": 1.751963496208191, - "y": -1.0358866453170776, - "z": 0.3010033369064331 + "scale": 3.6522583961486816, + "x": -1.8261291980743408, + "y": -0.14973759651184082, + "z": -0.36685824394226074 }, "rotation": { - "w": 0.9084458351135254, - "x": -1.52587890625e-05, - "y": 0.4179598093032837, - "z": -0.0001068115234375 + "w": 0.8684672117233276, + "x": -4.57763671875e-05, + "y": 0.4957197904586792, + "z": -7.62939453125e-05 }, - "script": "file:///C:/Users/wayne/development/tryAgainEntityScript.js", - "shapeType": "static-mesh", "type": "Model", "userData": "{\"grabbableKey\":{\"grabbable\":false}}" + }, + { + "angularDamping": 0, + "clientOnly": false, + "color": { + "blue": 0, + "green": 0, + "red": 255 + }, + "created": "2018-08-31T21:35:56Z", + "dimensions": { + "blue": 0.20000000298023224, + "green": 0.20000000298023224, + "red": 0.20000000298023224, + "x": 0.20000000298023224, + "y": 0.20000000298023224, + "z": 0.20000000298023224 + }, + "id": "{bd032130-bbd7-4c0b-9b98-ab9c9362be9b}", + "lastEdited": 1535751362198499, + "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", + "name": "Particle Rotate", + "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", + "position": { + "blue": 3.8216662406921387, + "green": 0.0772705078125, + "red": 1.2409718036651611, + "x": -2.759028196334839, + "y": -9.4227294921875, + "z": -0.17833375930786133 + }, + "queryAACube": { + "scale": 0.3464101552963257, + "x": 1.0677666664123535, + "y": -0.09593456983566284, + "z": 3.648461103439331 + }, + "rotation": { + "w": 0.926024317741394, + "x": 0.20308232307434082, + "y": -0.010269343852996826, + "z": 0.3179827928543091 + }, + "script": "http://hifi-content.s3.amazonaws.com/alexia/Models/Portal/rotate.js", + "scriptTimestamp": 1532724769253, + "shape": "Cube", + "type": "Box", + "userData": "{\"grabbableKey\":{\"grabbable\":false}}", + "visible": false } ], - "Paths": - { - "/": "/1.46,-9,0.7/0,0.487,0,0.86663" - }, - "Id": "{351e561a-ee5e-4e8b-87ab-d28677d3b374}", + "Id": "{99bc5288-05fd-4d80-a406-a44c948f7066}", "Version": 93 -} +} \ No newline at end of file diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 86a1421127..e50473bf29 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -1185,6 +1185,7 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo const DomainHandler& domainHandler = nodeList->getDomainHandler(); connect(&domainHandler, SIGNAL(domainURLChanged(QUrl)), SLOT(domainURLChanged(QUrl))); + connect(&domainHandler, SIGNAL(redirectToErrorDomainURL(QUrl)), SLOT(goToErrorDomainURL(QUrl))); connect(&domainHandler, &DomainHandler::domainURLChanged, [](QUrl domainURL){ setCrashAnnotation("domain", domainURL.toString().toStdString()); }); @@ -2251,6 +2252,7 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo connect(this, &QCoreApplication::aboutToQuit, this, &Application::addAssetToWorldMessageClose); connect(&domainHandler, &DomainHandler::domainURLChanged, this, &Application::addAssetToWorldMessageClose); + connect(&domainHandler, &DomainHandler::redirectToErrorDomainURL, this, &Application::addAssetToWorldMessageClose); updateSystemTabletMode(); @@ -2343,14 +2345,6 @@ void Application::domainConnectionRefused(const QString& reasonMessage, int reas } } -void Application::domainConnectionRedirect() { - auto addressManager = DependencyManager::get(); - - addressManager->handleLookupString(REDIRECT_HIFI_ADDRESS); - getMyAvatar()->setWorldVelocity(glm::vec3(0.0f)); -} - - QString Application::getUserAgent() { if (QThread::currentThread() != thread()) { QString userAgent; @@ -3481,7 +3475,7 @@ void Application::setIsServerlessMode(bool serverlessDomain) { } } -void Application::loadServerlessDomain(QUrl domainURL) { +void Application::loadServerlessDomain(QUrl domainURL, bool errorDomain) { if (QThread::currentThread() != thread()) { QMetaObject::invokeMethod(this, "loadServerlessDomain", Q_ARG(QUrl, domainURL)); return; @@ -3515,8 +3509,11 @@ void Application::loadServerlessDomain(QUrl domainURL) { } std::map namedPaths = tmpTree->getNamedPaths(); - nodeList->getDomainHandler().connectedToServerless(namedPaths); - + if (errorDomain) { + nodeList->getDomainHandler().loadedErrorDomain(namedPaths); + } else { + nodeList->getDomainHandler().connectedToServerless(namedPaths); + } _fullSceneReceivedCounter++; } @@ -6381,6 +6378,7 @@ void Application::clearDomainAvatars() { void Application::domainURLChanged(QUrl domainURL) { // disable physics until we have enough information about our new location to not cause craziness. resetPhysicsReadyInformation(); + auto urlStr = domainURL.toString().toStdString(); setIsServerlessMode(domainURL.scheme() != URL_SCHEME_HIFI); if (isServerlessMode()) { loadServerlessDomain(domainURL); @@ -6388,6 +6386,17 @@ void Application::domainURLChanged(QUrl domainURL) { updateWindowTitle(); } +void Application::goToErrorDomainURL(QUrl errorDomainURL) { + // disable physics until we have enough information about our new location to not cause craziness. + resetPhysicsReadyInformation(); + auto urlStr = errorDomainURL.toString().toStdString(); + setIsServerlessMode(errorDomainURL.scheme() != URL_SCHEME_HIFI); + if (isServerlessMode()) { + loadServerlessDomain(errorDomainURL, true); + } + updateWindowTitle(); +} + void Application::resettingDomain() { _notifiedPacketVersionMismatchThisDomain = false; diff --git a/interface/src/Application.h b/interface/src/Application.h index e38b5a3919..7fe88e9b6a 100644 --- a/interface/src/Application.h +++ b/interface/src/Application.h @@ -426,7 +426,7 @@ public slots: void setPreferredCursor(const QString& cursor); void setIsServerlessMode(bool serverlessDomain); - void loadServerlessDomain(QUrl domainURL); + void loadServerlessDomain(QUrl domainURL, bool errorDomain = false); void updateVerboseLogging(); @@ -465,6 +465,7 @@ private slots: void setSessionUUID(const QUuid& sessionUUID) const; void domainURLChanged(QUrl domainURL); + void goToErrorDomainURL(QUrl errorDomainURL); void updateWindowTitle() const; void nodeAdded(SharedNodePointer node) const; void nodeActivated(SharedNodePointer node); @@ -474,7 +475,6 @@ private slots: void updateDisplayMode(); void setDisplayPlugin(DisplayPluginPointer newPlugin); void domainConnectionRefused(const QString& reasonMessage, int reason, const QString& extraInfo); - void domainConnectionRedirect(); void addAssetToWorldCheckModelSize(); diff --git a/libraries/networking/src/AddressManager.cpp b/libraries/networking/src/AddressManager.cpp index 01db8dfd79..62cd79a609 100644 --- a/libraries/networking/src/AddressManager.cpp +++ b/libraries/networking/src/AddressManager.cpp @@ -114,6 +114,9 @@ QUrl AddressManager::currentFacingPublicAddress() const { return shareableAddress; } +QUrl AddressManager::lastAddress() const { + return _lastVisitedURL; +} void AddressManager::loadSettings(const QString& lookupString) { #if defined(USE_GLES) && defined(Q_OS_WIN) @@ -151,6 +154,12 @@ void AddressManager::goForward() { } } +void AddressManager::goToLastAddress() { + // this should always return something as long as the URL isn't empty. + auto urlStr = _lastVisitedURL.toString().toStdString(); + handleUrl(_lastVisitedURL, LookupTrigger::AttemptedRefresh); +} + void AddressManager::storeCurrentAddress() { auto url = currentAddress(); @@ -250,9 +259,12 @@ bool AddressManager::handleUrl(const QUrl& lookupUrl, LookupTrigger trigger) { UserActivityLogger::getInstance().wentTo(trigger, URL_TYPE_USER, lookupUrl.toString()); + // save the last visited domain URL. + _lastVisitedURL = lookupUrl; + // in case we're failing to connect to where we thought this user was // store their username as previous lookup so we can refresh their location via API - _previousLookup = lookupUrl; + _previousAPILookup = lookupUrl; } else { // we're assuming this is either a network address or global place name // check if it is a network address first @@ -262,8 +274,11 @@ bool AddressManager::handleUrl(const QUrl& lookupUrl, LookupTrigger trigger) { UserActivityLogger::getInstance().wentTo(trigger, URL_TYPE_NETWORK_ADDRESS, lookupUrl.toString()); + // save the last visited domain URL. + _lastVisitedURL = lookupUrl; + // a network address lookup clears the previous lookup since we don't expect to re-attempt it - _previousLookup.clear(); + _previousAPILookup.clear(); // If the host changed then we have already saved to history if (hostChanged) { @@ -281,8 +296,11 @@ bool AddressManager::handleUrl(const QUrl& lookupUrl, LookupTrigger trigger) { } else if (handleDomainID(lookupUrl.host())){ UserActivityLogger::getInstance().wentTo(trigger, URL_TYPE_DOMAIN_ID, lookupUrl.toString()); + // save the last visited domain URL. + _lastVisitedURL = lookupUrl; + // store this domain ID as the previous lookup in case we're failing to connect and want to refresh API info - _previousLookup = lookupUrl; + _previousAPILookup = lookupUrl; // no place name - this is probably a domain ID // try to look up the domain ID on the metaverse API @@ -290,8 +308,11 @@ bool AddressManager::handleUrl(const QUrl& lookupUrl, LookupTrigger trigger) { } else { UserActivityLogger::getInstance().wentTo(trigger, URL_TYPE_PLACE, lookupUrl.toString()); + // save the last visited domain URL. + _lastVisitedURL = lookupUrl; + // store this place name as the previous lookup in case we fail to connect and want to refresh API info - _previousLookup = lookupUrl; + _previousAPILookup = lookupUrl; // wasn't an address - lookup the place name // we may have a path that defines a relative viewpoint - pass that through the lookup so we can go to it after @@ -305,7 +326,7 @@ bool AddressManager::handleUrl(const QUrl& lookupUrl, LookupTrigger trigger) { qCDebug(networking) << "Going to relative path" << lookupUrl.path(); // a path lookup clears the previous lookup since we don't expect to re-attempt it - _previousLookup.clear(); + _previousAPILookup.clear(); // if this is a relative path then handle it as a relative viewpoint handlePath(lookupUrl.path(), trigger, true); @@ -317,7 +338,10 @@ bool AddressManager::handleUrl(const QUrl& lookupUrl, LookupTrigger trigger) { // be loaded over http(s) // lookupUrl.scheme() == URL_SCHEME_HTTP || // lookupUrl.scheme() == URL_SCHEME_HTTPS || - _previousLookup.clear(); + // TODO once a file can return a connection refusal if there were to be some kind of load error, we'd + // need to store the previous domain tried in _lastVisitedURL. For now , do not store it. + + _previousAPILookup.clear(); _shareablePlaceName.clear(); if (lookupUrl.toString() != REDIRECT_HIFI_ADDRESS) { setDomainInfo(lookupUrl, trigger); @@ -386,7 +410,7 @@ void AddressManager::handleAPIResponse(QNetworkReply* requestReply) { QJsonObject dataObject = responseObject["data"].toObject(); // Lookup succeeded, don't keep re-trying it (especially on server restarts) - _previousLookup.clear(); + _previousAPILookup.clear(); if (!dataObject.isEmpty()) { goToAddressFromObject(dataObject.toVariantMap(), requestReply); @@ -552,7 +576,7 @@ void AddressManager::handleAPIError(QNetworkReply* errorReply) { if (errorReply->error() == QNetworkReply::ContentNotFoundError) { // if this is a lookup that has no result, don't keep re-trying it - _previousLookup.clear(); + _previousAPILookup.clear(); emit lookupResultIsNotFound(); } @@ -847,8 +871,8 @@ void AddressManager::goToUser(const QString& username, bool shouldMatchOrientati void AddressManager::refreshPreviousLookup() { // if we have a non-empty previous lookup, fire it again now (but don't re-store it in the history) - if (!_previousLookup.isEmpty()) { - handleUrl(_previousLookup, LookupTrigger::AttemptedRefresh); + if (!_previousAPILookup.isEmpty()) { + handleUrl(_previousAPILookup, LookupTrigger::AttemptedRefresh); } else { handleUrl(currentAddress(), LookupTrigger::AttemptedRefresh); } diff --git a/libraries/networking/src/AddressManager.h b/libraries/networking/src/AddressManager.h index 245517d8cd..fab2bdd6cb 100644 --- a/libraries/networking/src/AddressManager.h +++ b/libraries/networking/src/AddressManager.h @@ -145,6 +145,7 @@ public: UserInput, Back, Forward, + //Retry, StartupFromSettings, DomainPathResponse, Internal, @@ -165,6 +166,8 @@ public: QString currentPath(bool withOrientation = true) const; QString currentFacingPath() const; + QUrl lastAddress() const; + const QUuid& getRootPlaceID() const { return _rootPlaceID; } QString getPlaceName() const; QString getDomainID() const; @@ -246,6 +249,12 @@ public slots: */ void goToUser(const QString& username, bool shouldMatchOrientation = true); + /**jsdoc + * Go to the last address tried. This will be the last URL tried from location.handleLookupString + * @function location.goToLastAddress + */ + void goToLastAddress(); + /**jsdoc * Refresh the current address, e.g., after connecting to a domain in order to position the user to the desired location. * @function location.refreshPreviousLookup @@ -447,6 +456,7 @@ private: void addCurrentAddressToHistory(LookupTrigger trigger); QUrl _domainURL; + QUrl _lastVisitedURL; QUuid _rootPlaceID; PositionGetter _positionGetter; @@ -460,7 +470,7 @@ private: QString _newHostLookupPath; - QUrl _previousLookup; + QUrl _previousAPILookup; }; #endif // hifi_AddressManager_h diff --git a/libraries/networking/src/DomainHandler.cpp b/libraries/networking/src/DomainHandler.cpp index 827232129f..0febe1e155 100644 --- a/libraries/networking/src/DomainHandler.cpp +++ b/libraries/networking/src/DomainHandler.cpp @@ -99,6 +99,7 @@ void DomainHandler::softReset() { clearSettings(); + _isInErrorState = false; _connectionDenialsSinceKeypairRegen = 0; _checkInPacketsSinceLastReply = 0; @@ -129,6 +130,7 @@ void DomainHandler::hardReset() { } void DomainHandler::setErrorDomainURL(const QUrl& url) { + _errorDomainURL = url; return; } @@ -175,7 +177,8 @@ void DomainHandler::setURLAndID(QUrl domainURL, QUuid domainID) { domainPort = DEFAULT_DOMAIN_SERVER_PORT; } - if (_domainURL != domainURL || _sockAddr.getPort() != domainPort) { + // if it's in the error state, reset and try again. + if ((_domainURL != domainURL || _sockAddr.getPort() != domainPort) || _isInErrorState) { // re-set the domain info so that auth information is reloaded hardReset(); @@ -210,7 +213,8 @@ void DomainHandler::setURLAndID(QUrl domainURL, QUuid domainID) { void DomainHandler::setIceServerHostnameAndID(const QString& iceServerHostname, const QUuid& id) { - if (_iceServerSockAddr.getAddress().toString() != iceServerHostname || id != _pendingDomainID) { + // if it's in the error state, reset and try again. + if ((_iceServerSockAddr.getAddress().toString() != iceServerHostname || id != _pendingDomainID) || _isInErrorState) { // re-set the domain info to connect to new domain hardReset(); @@ -320,6 +324,17 @@ void DomainHandler::connectedToServerless(std::map namedPaths) setIsConnected(true); } +void DomainHandler::loadedErrorDomain(std::map namedPaths) { + auto lookup = namedPaths.find("/"); + QString viewpoint; + if (lookup != namedPaths.end()) { + viewpoint = lookup->second; + } else { + viewpoint = DOMAIN_SPAWNING_POINT; + } + DependencyManager::get()->goToViewpointForPath(viewpoint, QString()); +} + void DomainHandler::requestDomainSettings() { qCDebug(networking) << "Requesting settings from domain server"; @@ -461,7 +476,7 @@ void DomainHandler::processDomainServerConnectionDeniedPacket(QSharedPointer namedPaths); + void DomainHandler::loadedErrorDomain(std::map namedPaths); + QString getViewPointFromNamedPath(QString namedPath); bool hasSettings() const { return !_settingsObject.isEmpty(); } @@ -182,7 +184,7 @@ signals: void settingsReceiveFail(); void domainConnectionRefused(QString reasonMessage, int reason, const QString& extraInfo); - void redirectToErrorDomainURL(); + void redirectToErrorDomainURL(QUrl errorDomaunURL); void limitOfSilentDomainCheckInsReached(); From a7abebd7aac88535d4753def06fc6f88c929a533 Mon Sep 17 00:00:00 2001 From: Wayne Chen Date: Tue, 4 Sep 2018 11:11:34 -0700 Subject: [PATCH 039/123] adding redirect json to post build in Mac --- interface/CMakeLists.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/interface/CMakeLists.txt b/interface/CMakeLists.txt index ded77b9013..cc9fe8ef4c 100644 --- a/interface/CMakeLists.txt +++ b/interface/CMakeLists.txt @@ -332,6 +332,10 @@ if (APPLE) COMMAND "${CMAKE_COMMAND}" -E copy_directory "${PROJECT_SOURCE_DIR}/resources/fonts" "${RESOURCES_DEV_DIR}/fonts" + # add redirect json to macOS builds. + COMMAND "${CMAKE_COMMAND}" -E copy_if_different + "${PROJECT_SOURCE_DIR}/resources/serverless/redirect.json" + "${RESOURCES_DEV_DIR}/serverless/redirect.json" ) # call the fixup_interface macro to add required bundling commands for installation From 22a8164401080f8d55cc3f6ae70eedc2f35a14f6 Mon Sep 17 00:00:00 2001 From: Wayne Chen Date: Tue, 4 Sep 2018 13:53:03 -0700 Subject: [PATCH 040/123] adding back refusal notifications + domain bounds/floor --- interface/resources/serverless/redirect.json | 1591 +++++++++--------- scripts/system/notifications.js | 2 +- 2 files changed, 833 insertions(+), 760 deletions(-) diff --git a/interface/resources/serverless/redirect.json b/interface/resources/serverless/redirect.json index fd81b6d433..72c4abc16b 100644 --- a/interface/resources/serverless/redirect.json +++ b/interface/resources/serverless/redirect.json @@ -1,37 +1,42 @@ { "DataVersion": 0, + "Paths": + { + "/": "/4,1.4,4/0,0.49544,0,0.868645" + }, "Entities": [ { "clientOnly": false, "collidesWith": "static,dynamic,kinematic,otherAvatar,", "collisionMask": 23, - "created": "2018-08-31T21:40:18Z", + "created": "2018-09-04T20:35:23Z", "dimensions": { - "blue": 0.8231174349784851, - "green": 1.8264780044555664, - "red": 1.2112245559692383, - "x": 1.2112245559692383, - "y": 1.8264780044555664, - "z": 0.8231174349784851 + "blue": 0.8660923838615417, + "green": 1.921838402748108, + "red": 1.2744625806808472, + "x": 1.2744625806808472, + "y": 1.921838402748108, + "z": 0.8660923838615417 }, - "id": "{1a8bf6e0-6f03-4761-9aba-1f624fae1236}", - "lastEdited": 1535751992686833, - "lastEditedBy": "{ace8f357-ad94-49e1-b4d0-39c4d5a936f3}", + "id": "{3889145e-9db2-46dc-9765-9ba7594457dc}", + "lastEdited": 1536093329670067, + "lastEditedBy": "{b5bba536-25e5-4b12-a1be-5c7cd196a06a}", + "locked": true, "name": "Try Again Zone", "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", "position": { - "blue": 4.442525863647461, + "blue": 4.524896621704102, "green": 1.9289360046386719, - "red": 2.600449562072754, - "x": -1.399550437927246, - "y": -7.571063995361328, - "z": 0.44252586364746094 + "red": 2.893861770629883, + "x": 2.893861770629883, + "y": 1.9289360046386719, + "z": 4.524896621704102 }, "queryAACube": { - "scale": 2.3410699367523193, - "x": 1.4299145936965942, - "y": 0.7584010362625122, - "z": 3.2719907760620117 + "scale": 2.4632973670959473, + "x": 1.6622130870819092, + "y": 0.6972873210906982, + "z": 3.293247938156128 }, "rotation": { "w": 0.9743700623512268, @@ -39,7 +44,7 @@ "y": -0.22495104372501373, "z": 0 }, - "script": "file:///C:/Users/wayne/development/zoneTryAgainEntityScript.js", + "script": "https://raw.githubusercontent.com/wayne-chen/hifi/404DomainRedirect/scripts/redirect/zoneTryAgainEntityScript.js", "shapeType": "box", "type": "Zone", "userData": "{\"grabbableKey\":{\"grabbable\":false}}" @@ -48,33 +53,34 @@ "clientOnly": false, "collidesWith": "static,dynamic,kinematic,otherAvatar,", "collisionMask": 23, - "created": "2018-08-31T21:44:40Z", + "created": "2018-09-04T20:35:23Z", "dimensions": { - "blue": 0.7544999718666077, - "green": 1.8265000581741333, - "red": 1.0555000305175781, - "x": 1.0555000305175781, - "y": 1.8265000581741333, - "z": 0.7544999718666077 + "blue": 1.159199833869934, + "green": 2.8062009811401367, + "red": 1.6216505765914917, + "x": 1.6216505765914917, + "y": 2.8062009811401367, + "z": 1.159199833869934 }, - "id": "{eb439982-948a-4393-8e8c-fdd833e6d9a7}", - "lastEdited": 1535752005525769, - "lastEditedBy": "{ace8f357-ad94-49e1-b4d0-39c4d5a936f3}", + "id": "{8facc8e1-bc17-4460-8a9c-868b07c1b387}", + "lastEdited": 1536093329669913, + "lastEditedBy": "{b5bba536-25e5-4b12-a1be-5c7cd196a06a}", + "locked": true, "name": "Back Zone", "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", "position": { - "blue": 2.538674831390381, + "blue": 1.8632707595825195, "green": 1.8022732734680176, - "red": 3.5101304054260254, - "x": -0.4898695945739746, - "y": -7.697726726531982, - "z": -1.4613251686096191 + "red": 3.3276727199554443, + "x": 3.3276727199554443, + "y": 1.8022732734680176, + "z": 1.8632707595825195 }, "queryAACube": { - "scale": 2.2404136657714844, - "x": 2.389923572540283, - "y": 0.6820664405822754, - "z": 1.4184679985046387 + "scale": 3.4421300888061523, + "x": 1.6066076755523682, + "y": 0.0812082290649414, + "z": 0.14220571517944336 }, "rotation": { "w": 0.9304176568984985, @@ -82,186 +88,11 @@ "y": -0.36650121212005615, "z": 0 }, - "script": "file:///C:/Users/wayne/development/zoneBackEntityScript.js", + "script": "https://raw.githubusercontent.com/wayne-chen/hifi/404DomainRedirect/scripts/redirect/zoneBackEntityScript.js", "shapeType": "box", "type": "Zone", "userData": "{\"grabbableKey\":{\"grabbable\":false}}" }, - { - "clientOnly": false, - "created": "2018-08-31T21:35:56Z", - "dimensions": { - "blue": 14.40000057220459, - "green": 14.40000057220459, - "red": 14.40000057220459, - "x": 14.40000057220459, - "y": 14.40000057220459, - "z": 14.40000057220459 - }, - "id": "{dbae0b3a-a7ff-4eb1-9177-fd1f20b3cec8}", - "lastEdited": 1535751789461074, - "lastEditedBy": "{ace8f357-ad94-49e1-b4d0-39c4d5a936f3}", - "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", - "position": { - "blue": 2.3440732955932617, - "green": 1.7684326171875, - "red": 1.8812973499298096, - "x": -2.1187026500701904, - "y": -7.7315673828125, - "z": -1.6559267044067383 - }, - "queryAACube": { - "scale": 24.9415340423584, - "x": -10.589469909667969, - "y": -10.7023344039917, - "z": -10.126693725585938 - }, - "rotation": { - "w": 0.8697794675827026, - "x": -1.52587890625e-05, - "y": 0.4933699369430542, - "z": -4.57763671875e-05 - }, - "shapeType": "box", - "skyboxMode": "enabled", - "type": "Zone", - "userData": "{\"grabbableKey\":{\"grabbable\":false}}" - }, - { - "clientOnly": false, - "color": { - "blue": 0, - "green": 0, - "red": 0 - }, - "created": "2018-08-31T21:35:56Z", - "dimensions": { - "blue": 11.117486953735352, - "green": 3.580313205718994, - "red": 0.20000000298023224, - "x": 0.20000000298023224, - "y": 3.580313205718994, - "z": 11.117486953735352 - }, - "id": "{c92b026b-e13c-448a-903c-2773f9fdc2e8}", - "lastEdited": 1535751961512543, - "lastEditedBy": "{ace8f357-ad94-49e1-b4d0-39c4d5a936f3}", - "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", - "position": { - "blue": 1.9063844680786133, - "green": 1.15850830078125, - "red": 0.16632509231567383, - "x": -3.833674907684326, - "y": -8.34149169921875, - "z": -2.0936155319213867 - }, - "queryAACube": { - "scale": 11.681488037109375, - "x": -5.674418926239014, - "y": -4.6822357177734375, - "z": -3.934359550476074 - }, - "rotation": { - "w": 0.9666743278503418, - "x": -4.57763671875e-05, - "y": -0.2560006380081177, - "z": 1.52587890625e-05 - }, - "shape": "Cube", - "type": "Box", - "userData": "{\"grabbableKey\":{\"grabbable\":false}}", - "visible": false - }, - { - "clientOnly": false, - "color": { - "blue": 0, - "green": 0, - "red": 0 - }, - "created": "2018-08-31T21:35:56Z", - "dimensions": { - "blue": 11.117486953735352, - "green": 3.580313205718994, - "red": 0.20000000298023224, - "x": 0.20000000298023224, - "y": 3.580313205718994, - "z": 11.117486953735352 - }, - "id": "{cd72debb-75a6-420d-b39f-b903fb069798}", - "lastEdited": 1535751362199714, - "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", - "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", - "position": { - "blue": 6.1806135177612305, - "green": 1.1588134765625, - "red": 1.4755167961120605, - "x": -2.5244832038879395, - "y": -8.3411865234375, - "z": 2.1806135177612305 - }, - "queryAACube": { - "scale": 11.681488037109375, - "x": -4.365227222442627, - "y": -4.6819305419921875, - "z": 0.33986949920654297 - }, - "rotation": { - "w": 0.8637980222702026, - "x": -4.57763671875e-05, - "y": 0.5038070678710938, - "z": -1.52587890625e-05 - }, - "shape": "Cube", - "type": "Box", - "userData": "{\"grabbableKey\":{\"grabbable\":false}}", - "visible": false - }, - { - "clientOnly": false, - "color": { - "blue": 0, - "green": 0, - "red": 0 - }, - "created": "2018-08-31T21:35:56Z", - "dimensions": { - "blue": 11.117486953735352, - "green": 3.580313205718994, - "red": 0.20000000298023224, - "x": 0.20000000298023224, - "y": 3.580313205718994, - "z": 11.117486953735352 - }, - "id": "{abe300d5-32b8-4d0c-bf82-e78005b79b70}", - "lastEdited": 1535751362199153, - "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", - "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", - "position": { - "blue": 5.268576622009277, - "green": 1.1588134765625, - "red": 6.100250244140625, - "x": 2.100250244140625, - "y": -8.3411865234375, - "z": 1.2685766220092773 - }, - "queryAACube": { - "scale": 11.681488037109375, - "x": 0.2595062255859375, - "y": -4.6819305419921875, - "z": -0.5721673965454102 - }, - "rotation": { - "w": 0.9662165641784668, - "x": -4.57763671875e-05, - "y": -0.2576791048049927, - "z": 1.52587890625e-05 - }, - "shape": "Cube", - "type": "Box", - "userData": "{\"grabbableKey\":{\"grabbable\":false}}", - "visible": false - }, { "angularDamping": 0, "clientOnly": false, @@ -270,7 +101,7 @@ "green": 0, "red": 255 }, - "created": "2018-08-31T21:35:56Z", + "created": "2018-09-04T20:35:23Z", "dimensions": { "blue": 0.20000000298023224, "green": 0.20000000298023224, @@ -279,18 +110,19 @@ "y": 0.20000000298023224, "z": 0.20000000298023224 }, - "id": "{66757fda-b7ad-4858-83ab-724b01710cc2}", - "lastEdited": 1535751362198937, - "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", + "id": "{ed4142db-f3c9-441b-9091-cd1755b6aeb1}", + "lastEdited": 1536093329672493, + "lastEditedBy": "{b5bba536-25e5-4b12-a1be-5c7cd196a06a}", + "locked": true, "name": "Particle Rotate", "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", "position": { "blue": 1.3116319179534912, "green": 0.15618896484375, "red": 2.705613613128662, - "x": -1.294386386871338, - "y": -9.34381103515625, - "z": -2.688368082046509 + "x": 2.705613613128662, + "y": 0.15618896484375, + "z": 1.3116319179534912 }, "queryAACube": { "scale": 0.3464101552963257, @@ -311,148 +143,6 @@ "userData": "{\"grabbableKey\":{\"grabbable\":false}}", "visible": false }, - { - "angularDamping": 0, - "clientOnly": false, - "color": { - "blue": 0, - "green": 0, - "red": 255 - }, - "created": "2018-08-31T21:35:56Z", - "dimensions": { - "blue": 0.20000000298023224, - "green": 0.20000000298023224, - "red": 0.20000000298023224, - "x": 0.20000000298023224, - "y": 0.20000000298023224, - "z": 0.20000000298023224 - }, - "id": "{24eda146-92f8-4e43-b084-fb555626427b}", - "lastEdited": 1535751362198263, - "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", - "name": "Particle Rotate", - "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", - "position": { - "blue": 1.3116319179534912, - "green": 0, - "red": 2.705613613128662, - "x": -1.294386386871338, - "y": -9.5, - "z": -2.688368082046509 - }, - "queryAACube": { - "scale": 0.3464101552963257, - "x": 2.5324084758758545, - "y": -0.17320507764816284, - "z": 1.1384267807006836 - }, - "rotation": { - "w": 0.9127794504165649, - "x": 0.2575265169143677, - "y": 0.15553522109985352, - "z": 0.2761729955673218 - }, - "script": "http://hifi-content.s3.amazonaws.com/alexia/Models/Portal/rotate.js", - "scriptTimestamp": 1532724769253, - "shape": "Cube", - "type": "Box", - "userData": "{\"grabbableKey\":{\"grabbable\":false}}", - "visible": false - }, - { - "alpha": 0, - "alphaFinish": 0, - "alphaStart": 0.25, - "clientOnly": false, - "colorFinish": { - "blue": 0, - "green": 0, - "red": 0, - "x": 0, - "y": 0, - "z": 0 - }, - "colorStart": { - "blue": 255, - "green": 255, - "red": 255, - "x": 255, - "y": 255, - "z": 255 - }, - "created": "2018-08-31T21:35:56Z", - "dimensions": { - "blue": 13.24000072479248, - "green": 13.24000072479248, - "red": 13.24000072479248, - "x": 13.24000072479248, - "y": 13.24000072479248, - "z": 13.24000072479248 - }, - "emitAcceleration": { - "blue": 0, - "green": 0.10000000149011612, - "red": 0, - "x": 0, - "y": 0.10000000149011612, - "z": 0 - }, - "emitDimensions": { - "blue": 1, - "green": 1, - "red": 1, - "x": 1, - "y": 1, - "z": 1 - }, - "emitOrientation": { - "w": 1, - "x": -1.52587890625e-05, - "y": -1.52587890625e-05, - "z": -1.52587890625e-05 - }, - "emitRate": 6, - "emitSpeed": 0, - "emitterShouldTrail": true, - "id": "{b9a46e3e-f982-4a46-b38d-2a38e5cc5fbc}", - "lastEdited": 1535751362199964, - "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", - "lifespan": 10, - "maxParticles": 10, - "name": "Stars", - "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", - "particleRadius": 0.07000000029802322, - "polarFinish": 3.1415927410125732, - "position": { - "blue": 3.78922963142395, - "green": 0.5220947265625, - "red": 1.1928560733795166, - "x": -2.8071439266204834, - "y": -8.9779052734375, - "z": -0.2107703685760498 - }, - "queryAACube": { - "scale": 22.932353973388672, - "x": -10.273321151733398, - "y": -10.944082260131836, - "z": -7.676947593688965 - }, - "radiusFinish": 0, - "radiusStart": 0, - "rotation": { - "w": 0.996429443359375, - "x": -1.52587890625e-05, - "y": -0.08442819118499756, - "z": -4.57763671875e-05 - }, - "speedSpread": 0, - "spinFinish": null, - "spinStart": null, - "textures": "http://hifi-content.s3.amazonaws.com/alexia/Models/Portal/star.png", - "type": "ParticleEffect", - "userData": "{\"grabbableKey\":{\"grabbable\":false}}" - }, { "clientOnly": false, "color": { @@ -460,7 +150,7 @@ "green": 0, "red": 0 }, - "created": "2018-08-31T21:35:56Z", + "created": "2018-09-04T20:35:23Z", "dimensions": { "blue": 11.117486953735352, "green": 3.580313205718994, @@ -469,17 +159,18 @@ "y": 3.580313205718994, "z": 11.117486953735352 }, - "id": "{e6897ca3-1c22-429f-a1b6-173ff47397a7}", - "lastEdited": 1535751362197848, - "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", + "id": "{d49f29ca-72b6-473d-917c-f7bf7d66f219}", + "lastEdited": 1536093329670344, + "lastEditedBy": "{b5bba536-25e5-4b12-a1be-5c7cd196a06a}", + "locked": true, "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", "position": { "blue": 0, "green": 1.1583251953125, "red": 4.971565246582031, - "x": 0.9715652465820312, - "y": -8.3416748046875, - "z": -4 + "x": 4.971565246582031, + "y": 1.1583251953125, + "z": 0 }, "queryAACube": { "scale": 11.681488037109375, @@ -498,6 +189,47 @@ "userData": "{\"grabbableKey\":{\"grabbable\":false}}", "visible": false }, + { + "clientOnly": false, + "created": "2018-09-04T20:35:23Z", + "dimensions": { + "blue": 0.06014331430196762, + "green": 2.582186460494995, + "red": 2.582186698913574, + "x": 2.582186698913574, + "y": 2.582186460494995, + "z": 0.06014331430196762 + }, + "id": "{6ccf519b-4e0b-4c23-a51b-305d0a64ab06}", + "lastEdited": 1536093329671943, + "lastEditedBy": "{b5bba536-25e5-4b12-a1be-5c7cd196a06a}", + "locked": true, + "modelURL": "http://hifi-content.s3.amazonaws.com/alexia/LoadingScreens/oopsDialog.fbx", + "name": "Oops Dialog", + "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", + "position": { + "blue": 1.45927095413208, + "green": 1.6763916015625, + "red": 0, + "x": 0, + "y": 1.6763916015625, + "z": 1.45927095413208 + }, + "queryAACube": { + "scale": 3.6522583961486816, + "x": -1.8261291980743408, + "y": -0.14973759651184082, + "z": -0.36685824394226074 + }, + "rotation": { + "w": 0.8684672117233276, + "x": -4.57763671875e-05, + "y": 0.4957197904586792, + "z": -7.62939453125e-05 + }, + "type": "Model", + "userData": "{\"grabbableKey\":{\"grabbable\":false}}" + }, { "angularDamping": 0, "clientOnly": false, @@ -506,7 +238,7 @@ "green": 0, "red": 255 }, - "created": "2018-08-31T21:35:56Z", + "created": "2018-09-04T20:35:23Z", "dimensions": { "blue": 0.20000000298023224, "green": 0.20000000298023224, @@ -515,18 +247,19 @@ "y": 0.20000000298023224, "z": 0.20000000298023224 }, - "id": "{16ca16ab-eee3-41b1-b583-159245aa2010}", - "lastEdited": 1535751362197055, - "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", + "id": "{625c95a4-1592-4996-bd48-7aa3fdbe6aee}", + "lastEdited": 1536093329671797, + "lastEditedBy": "{b5bba536-25e5-4b12-a1be-5c7cd196a06a}", + "locked": true, "name": "Particle Rotate", "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", "position": { "blue": 1.3116319179534912, "green": 0.0772705078125, "red": 2.705613613128662, - "x": -1.294386386871338, - "y": -9.4227294921875, - "z": -2.688368082046509 + "x": 2.705613613128662, + "y": 0.0772705078125, + "z": 1.3116319179534912 }, "queryAACube": { "scale": 0.3464101552963257, @@ -549,7 +282,53 @@ }, { "clientOnly": false, - "created": "2018-08-31T21:35:56Z", + "color": { + "blue": 0, + "green": 0, + "red": 255 + }, + "created": "2018-09-04T20:35:23Z", + "dimensions": { + "blue": 8.645400047302246, + "green": 0.20000000298023224, + "red": 20.025121688842773, + "x": 20.025121688842773, + "y": 0.20000000298023224, + "z": 8.645400047302246 + }, + "id": "{d356bb44-7888-476a-821e-961ae7d9330e}", + "lastEdited": 1536093329671479, + "lastEditedBy": "{b5bba536-25e5-4b12-a1be-5c7cd196a06a}", + "locked": true, + "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", + "position": { + "blue": 4.846520900726318, + "green": 3.0651936531066895, + "red": 5.746071815490723, + "x": 5.746071815490723, + "y": 3.0651936531066895, + "z": 4.846520900726318 + }, + "queryAACube": { + "scale": 21.812576293945312, + "x": -5.160216331481934, + "y": -7.841094493865967, + "z": -6.059767246246338 + }, + "rotation": { + "w": 0.970295786857605, + "x": 0, + "y": -0.24192190170288086, + "z": 0 + }, + "shape": "Cube", + "type": "Box", + "userData": "{\"grabbableKey\":{\"grabbable\":false}}", + "visible": false + }, + { + "clientOnly": false, + "created": "2018-09-04T20:35:23Z", "dimensions": { "blue": 2.1097896099090576, "green": 0.04847164824604988, @@ -558,9 +337,10 @@ "y": 0.04847164824604988, "z": 2.1097896099090576 }, - "id": "{482ae172-c411-41fb-9a41-4215eef25478}", - "lastEdited": 1535751754378548, - "lastEditedBy": "{ace8f357-ad94-49e1-b4d0-39c4d5a936f3}", + "id": "{737f1b31-0342-4764-89fb-2ef7ddf83983}", + "lastEdited": 1536093329672351, + "lastEditedBy": "{b5bba536-25e5-4b12-a1be-5c7cd196a06a}", + "locked": true, "modelURL": "http://hifi-content.s3.amazonaws.com/alexia/Models/Portal/portal2.fbx", "name": "Back", "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", @@ -568,9 +348,9 @@ "blue": 1.5835940837860107, "green": 0.2467041015625, "red": 3.0345542430877686, - "x": -0.9654457569122314, - "y": -9.2532958984375, - "z": -2.4164059162139893 + "x": 3.0345542430877686, + "y": 0.2467041015625, + "z": 1.5835940837860107 }, "queryAACube": { "scale": 2.5651814937591553, @@ -584,97 +364,53 @@ "y": 0.4179598093032837, "z": -0.0001068115234375 }, - "script": "file:///C:/Users/wayne/development/backEntityScript.js", + "script": "https://raw.githubusercontent.com/wayne-chen/hifi/404DomainRedirect/scripts/redirect/backEntityScript.js", "scriptTimestamp": 1535751754379, "shapeType": "static-mesh", "type": "Model", "userData": "{\"grabbableKey\":{\"grabbable\":false}}" }, { - "clientOnly": false, - "created": "2018-08-31T21:35:56Z", - "dimensions": { - "blue": 9.030570983886719, - "green": 0.0719478651881218, - "red": 9.030570983886719, - "x": 9.030570983886719, - "y": 0.0719478651881218, - "z": 9.030570983886719 - }, - "id": "{33440bf8-f9ce-4d52-9b29-1b321e226982}", - "lastEdited": 1535751362197214, - "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", - "modelURL": "http://hifi-content.s3.amazonaws.com/alexia/LoadingScreens/floor.fbx", - "name": "Floor", - "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", - "position": { - "blue": 4.2324604988098145, - "green": 0.17547607421875, - "red": 4.802988529205322, - "x": 0.8029885292053223, - "y": -9.32452392578125, - "z": 0.23246049880981445 - }, - "queryAACube": { - "scale": 12.771358489990234, - "x": -1.582690715789795, - "y": -6.210203170776367, - "z": -2.1532187461853027 - }, - "rotation": { - "w": 0.8648051023483276, - "x": -1.52587890625e-05, - "y": 0.5020675659179688, - "z": -4.57763671875e-05 - }, - "shapeType": "simple-hull", - "type": "Model", - "userData": "{\"grabbableKey\":{\"grabbable\":false}}" - }, - { - "angularDamping": 0, "clientOnly": false, "color": { "blue": 0, "green": 0, - "red": 255 + "red": 0 }, - "created": "2018-08-31T21:35:56Z", + "created": "2018-09-04T20:35:23Z", "dimensions": { - "blue": 0.20000000298023224, - "green": 0.20000000298023224, + "blue": 11.117486953735352, + "green": 3.580313205718994, "red": 0.20000000298023224, "x": 0.20000000298023224, - "y": 0.20000000298023224, - "z": 0.20000000298023224 + "y": 3.580313205718994, + "z": 11.117486953735352 }, - "id": "{7639140e-cd6f-4f86-97f7-00a19f50253e}", - "lastEdited": 1535751362198721, - "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", - "name": "Particle Rotate", + "id": "{87f734c8-37bb-4ac0-b300-5028f7fe6f9d}", + "lastEdited": 1536093329670472, + "lastEditedBy": "{b5bba536-25e5-4b12-a1be-5c7cd196a06a}", + "locked": true, "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", "position": { - "blue": 3.8216662406921387, - "green": 0, - "red": 1.2409718036651611, - "x": -2.759028196334839, - "y": -9.5, - "z": -0.17833375930786133 + "blue": 2.662257671356201, + "green": 1.1585893630981445, + "red": 1.493349552154541, + "x": 1.493349552154541, + "y": 1.1585893630981445, + "z": 2.662257671356201 }, "queryAACube": { - "scale": 0.3464101552963257, - "x": 1.0677666664123535, - "y": -0.17320507764816284, - "z": 3.648461103439331 + "scale": 11.681488037109375, + "x": -4.3473944664001465, + "y": -4.682154655456543, + "z": -3.1784863471984863 }, "rotation": { - "w": 0.6444342136383057, - "x": -0.08220034837722778, - "y": -0.6649118661880493, - "z": 0.3684900999069214 + "w": 0.9666743278503418, + "x": -4.57763671875e-05, + "y": -0.2560006380081177, + "z": 1.52587890625e-05 }, - "script": "http://hifi-content.s3.amazonaws.com/alexia/Models/Portal/rotate.js", - "scriptTimestamp": 1532724769253, "shape": "Cube", "type": "Box", "userData": "{\"grabbableKey\":{\"grabbable\":false}}", @@ -682,7 +418,7 @@ }, { "clientOnly": false, - "created": "2018-08-31T21:35:56Z", + "created": "2018-09-04T20:35:23Z", "dimensions": { "blue": 2.1097896099090576, "green": 0.04847164824604988, @@ -691,9 +427,10 @@ "y": 0.04847164824604988, "z": 2.1097896099090576 }, - "id": "{7755bf99-b026-490d-a682-edadd3f65701}", - "lastEdited": 1535751900322535, - "lastEditedBy": "{ace8f357-ad94-49e1-b4d0-39c4d5a936f3}", + "id": "{9584bb57-b543-4d2b-af98-f3de618eef19}", + "lastEdited": 1536093329672070, + "lastEditedBy": "{b5bba536-25e5-4b12-a1be-5c7cd196a06a}", + "locked": true, "modelURL": "http://hifi-content.s3.amazonaws.com/alexia/Models/Portal/portal1.fbx", "name": "Try Again", "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", @@ -701,9 +438,9 @@ "blue": 3.946338653564453, "green": 0.2467041015625, "red": 1.6013128757476807, - "x": -2.3986871242523193, - "y": -9.2532958984375, - "z": -0.053661346435546875 + "x": 1.6013128757476807, + "y": 0.2467041015625, + "z": 3.946338653564453 }, "queryAACube": { "scale": 2.5651814937591553, @@ -717,251 +454,11 @@ "y": 0.5693598985671997, "z": -0.0001068115234375 }, - "script": "file:///C:/Users/wayne/development/tryAgainEntityScript.js", + "script": "https://raw.githubusercontent.com/wayne-chen/hifi/404DomainRedirect/scripts/redirect/tryAgainEntityScript.js", "shapeType": "static-mesh", "type": "Model", "userData": "{\"grabbableKey\":{\"grabbable\":false}}" }, - { - "angularDamping": 0, - "clientOnly": false, - "color": { - "blue": 0, - "green": 0, - "red": 255 - }, - "created": "2018-08-31T21:35:56Z", - "dimensions": { - "blue": 0.20000000298023224, - "green": 0.20000000298023224, - "red": 0.20000000298023224, - "x": 0.20000000298023224, - "y": 0.20000000298023224, - "z": 0.20000000298023224 - }, - "id": "{81207b9c-e3f2-4ee1-bb81-0e14f37e4687}", - "lastEdited": 1535751362197613, - "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", - "name": "Particle Rotate", - "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", - "position": { - "blue": 3.8216662406921387, - "green": 0.15618896484375, - "red": 1.2409718036651611, - "x": -2.759028196334839, - "y": -9.34381103515625, - "z": -0.17833375930786133 - }, - "queryAACube": { - "scale": 0.3464101552963257, - "x": 1.0677666664123535, - "y": -0.017016112804412842, - "z": 3.648461103439331 - }, - "rotation": { - "w": 0.6747081279754639, - "x": -0.06532388925552368, - "y": -0.6342412233352661, - "z": 0.37175559997558594 - }, - "script": "http://hifi-content.s3.amazonaws.com/alexia/Models/Portal/rotate.js", - "scriptTimestamp": 1532724769253, - "shape": "Cube", - "type": "Box", - "userData": "{\"grabbableKey\":{\"grabbable\":false}}", - "visible": false - }, - { - "alpha": 0, - "alphaFinish": 0, - "alphaStart": 0.25, - "clientOnly": false, - "colorFinish": { - "blue": 0, - "green": 0, - "red": 0, - "x": 0, - "y": 0, - "z": 0 - }, - "colorStart": { - "blue": 255, - "green": 255, - "red": 255, - "x": 255, - "y": 255, - "z": 255 - }, - "created": "2018-08-31T21:35:56Z", - "dimensions": { - "blue": 13.24000072479248, - "green": 13.24000072479248, - "red": 13.24000072479248, - "x": 13.24000072479248, - "y": 13.24000072479248, - "z": 13.24000072479248 - }, - "emitAcceleration": { - "blue": 0, - "green": 0.10000000149011612, - "red": 0, - "x": 0, - "y": 0.10000000149011612, - "z": 0 - }, - "emitDimensions": { - "blue": 1, - "green": 1, - "red": 1, - "x": 1, - "y": 1, - "z": 1 - }, - "emitOrientation": { - "w": 1, - "x": -1.52587890625e-05, - "y": -1.52587890625e-05, - "z": -1.52587890625e-05 - }, - "emitRate": 6, - "emitSpeed": 0, - "id": "{b8f11bf5-410e-4e35-b4c3-91c86c01351d}", - "lastEdited": 1535751362196710, - "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", - "lifespan": 10, - "maxParticles": 10, - "name": "Stars", - "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", - "particleRadius": 0.07000000029802322, - "polarFinish": 3.1415927410125732, - "position": { - "blue": 1.3712034225463867, - "green": 0.5220947265625, - "red": 2.6281180381774902, - "x": -1.3718819618225098, - "y": -8.9779052734375, - "z": -2.6287965774536133 - }, - "queryAACube": { - "scale": 22.932353973388672, - "x": -8.838058471679688, - "y": -10.944082260131836, - "z": -10.09497356414795 - }, - "radiusFinish": 0, - "radiusStart": 0, - "rotation": { - "w": 0.9852597713470459, - "x": -1.52587890625e-05, - "y": -0.17106890678405762, - "z": -7.62939453125e-05 - }, - "speedSpread": 0, - "spinFinish": null, - "spinStart": null, - "textures": "http://hifi-content.s3.amazonaws.com/alexia/Models/Portal/star.png", - "type": "ParticleEffect", - "userData": "{\"grabbableKey\":{\"grabbable\":false}}" - }, - { - "alpha": 0, - "alphaFinish": 0, - "alphaStart": 1, - "clientOnly": false, - "color": { - "blue": 255, - "green": 205, - "red": 3 - }, - "colorFinish": { - "blue": 0, - "green": 0, - "red": 0, - "x": 0, - "y": 0, - "z": 0 - }, - "colorStart": { - "blue": 255, - "green": 204, - "red": 0, - "x": 0, - "y": 204, - "z": 255 - }, - "created": "2018-08-31T21:35:56Z", - "dimensions": { - "blue": 2.5, - "green": 2.5, - "red": 2.5, - "x": 2.5, - "y": 2.5, - "z": 2.5 - }, - "emitAcceleration": { - "blue": 0, - "green": 0, - "red": 0, - "x": 0, - "y": 0, - "z": 0 - }, - "emitDimensions": { - "blue": 1, - "green": 1, - "red": 1, - "x": 1, - "y": 1, - "z": 1 - }, - "emitOrientation": { - "w": 0.9993909597396851, - "x": 0.034897372126579285, - "y": -1.525880907138344e-05, - "z": -1.525880907138344e-05 - }, - "emitRate": 2, - "emitSpeed": 0, - "emitterShouldTrail": true, - "id": "{4e72df75-67d7-4ce2-bdea-e78adae8904a}", - "lastEdited": 1535751362199482, - "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", - "lifespan": 10, - "maxParticles": 40, - "name": "Rays", - "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", - "particleRadius": 0.75, - "polarFinish": 3.1415927410125732, - "position": { - "blue": 3.814434051513672, - "green": 1.44122314453125, - "red": 1.2319090366363525, - "x": -2.7680909633636475, - "y": -8.05877685546875, - "z": -0.18556594848632812 - }, - "queryAACube": { - "scale": 4.330127239227295, - "x": -0.9331545829772949, - "y": -0.7238404750823975, - "z": 1.6493704319000244 - }, - "radiusFinish": 0.10000000149011612, - "radiusStart": 0, - "rotation": { - "w": 0.9594720602035522, - "x": -1.52587890625e-05, - "y": 0.28178834915161133, - "z": -4.57763671875e-05 - }, - "script": "file:///C:/Users/wayne/development/raysTryAgainEntityScript.js", - "speedSpread": 0, - "spinFinish": null, - "spinStart": null, - "textures": "http://hifi-content.s3.amazonaws.com/alexia/Models/Portal/stripe.png", - "type": "ParticleEffect", - "userData": "{\"grabbableKey\":{\"grabbable\":false}}" - }, { "alpha": 0, "alphaFinish": 0, @@ -988,7 +485,7 @@ "y": 227, "z": 211 }, - "created": "2018-08-31T21:35:56Z", + "created": "2018-09-04T20:35:23Z", "dimensions": { "blue": 2.5, "green": 2.5, @@ -1021,10 +518,11 @@ }, "emitRate": 2, "emitSpeed": 0, - "id": "{3482eecd-0acc-4fb9-bd67-b160fa7c14d7}", - "lastEdited": 1535751362200185, - "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", + "id": "{4b942dd2-dcfa-4959-8758-073c56d6a380}", + "lastEdited": 1536093329670643, + "lastEditedBy": "{b5bba536-25e5-4b12-a1be-5c7cd196a06a}", "lifespan": 10, + "locked": true, "maxParticles": 40, "name": "Rays", "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", @@ -1034,9 +532,9 @@ "blue": 1.3553659915924072, "green": 1.44122314453125, "red": 2.572803497314453, - "x": -1.4271965026855469, - "y": -8.05877685546875, - "z": -2.6446340084075928 + "x": 2.572803497314453, + "y": 1.44122314453125, + "z": 1.3553659915924072 }, "queryAACube": { "scale": 4.330127239227295, @@ -1052,7 +550,6 @@ "y": 0.19707024097442627, "z": -7.62939453125e-05 }, - "script": "file:///C:/Users/wayne/development/raysBackEntityScript.js", "speedSpread": 0, "spinFinish": null, "spinStart": null, @@ -1060,46 +557,6 @@ "type": "ParticleEffect", "userData": "{\"grabbableKey\":{\"grabbable\":false}}" }, - { - "clientOnly": false, - "created": "2018-08-31T21:35:56Z", - "dimensions": { - "blue": 0.06014331430196762, - "green": 2.582186460494995, - "red": 2.582186698913574, - "x": 2.582186698913574, - "y": 2.582186460494995, - "z": 0.06014331430196762 - }, - "id": "{729e9f39-5750-42a4-97a8-0fc79b300a32}", - "lastEdited": 1535751362197365, - "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", - "modelURL": "http://hifi-content.s3.amazonaws.com/alexia/LoadingScreens/oopsDialog.fbx", - "name": "Oops Dialog", - "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", - "position": { - "blue": 1.45927095413208, - "green": 1.6763916015625, - "red": 0, - "x": -4, - "y": -7.8236083984375, - "z": -2.54072904586792 - }, - "queryAACube": { - "scale": 3.6522583961486816, - "x": -1.8261291980743408, - "y": -0.14973759651184082, - "z": -0.36685824394226074 - }, - "rotation": { - "w": 0.8684672117233276, - "x": -4.57763671875e-05, - "y": 0.4957197904586792, - "z": -7.62939453125e-05 - }, - "type": "Model", - "userData": "{\"grabbableKey\":{\"grabbable\":false}}" - }, { "angularDamping": 0, "clientOnly": false, @@ -1108,7 +565,7 @@ "green": 0, "red": 255 }, - "created": "2018-08-31T21:35:56Z", + "created": "2018-09-04T20:35:23Z", "dimensions": { "blue": 0.20000000298023224, "green": 0.20000000298023224, @@ -1117,18 +574,163 @@ "y": 0.20000000298023224, "z": 0.20000000298023224 }, - "id": "{bd032130-bbd7-4c0b-9b98-ab9c9362be9b}", - "lastEdited": 1535751362198499, - "lastEditedBy": "{8cc0d68c-b354-4c5f-992d-56b89e8072c5}", + "id": "{3b13d766-763a-4d44-99d8-42c7b9d7139e}", + "lastEdited": 1536093329671361, + "lastEditedBy": "{b5bba536-25e5-4b12-a1be-5c7cd196a06a}", + "locked": true, + "name": "Particle Rotate", + "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", + "position": { + "blue": 3.8216662406921387, + "green": 0, + "red": 1.2409718036651611, + "x": 1.2409718036651611, + "y": 0, + "z": 3.8216662406921387 + }, + "queryAACube": { + "scale": 0.3464101552963257, + "x": 1.0677666664123535, + "y": -0.17320507764816284, + "z": 3.648461103439331 + }, + "rotation": { + "w": 0.6444342136383057, + "x": -0.08220034837722778, + "y": -0.6649118661880493, + "z": 0.3684900999069214 + }, + "script": "http://hifi-content.s3.amazonaws.com/alexia/Models/Portal/rotate.js", + "scriptTimestamp": 1532724769253, + "shape": "Cube", + "type": "Box", + "userData": "{\"grabbableKey\":{\"grabbable\":false}}", + "visible": false + }, + { + "alpha": 0, + "alphaFinish": 0, + "alphaStart": 0.25, + "clientOnly": false, + "colorFinish": { + "blue": 0, + "green": 0, + "red": 0, + "x": 0, + "y": 0, + "z": 0 + }, + "colorStart": { + "blue": 255, + "green": 255, + "red": 255, + "x": 255, + "y": 255, + "z": 255 + }, + "created": "2018-09-04T20:35:23Z", + "dimensions": { + "blue": 13.24000072479248, + "green": 13.24000072479248, + "red": 13.24000072479248, + "x": 13.24000072479248, + "y": 13.24000072479248, + "z": 13.24000072479248 + }, + "emitAcceleration": { + "blue": 0, + "green": 0.10000000149011612, + "red": 0, + "x": 0, + "y": 0.10000000149011612, + "z": 0 + }, + "emitDimensions": { + "blue": 1, + "green": 1, + "red": 1, + "x": 1, + "y": 1, + "z": 1 + }, + "emitOrientation": { + "w": 1, + "x": -1.52587890625e-05, + "y": -1.52587890625e-05, + "z": -1.52587890625e-05 + }, + "emitRate": 6, + "emitSpeed": 0, + "emitterShouldTrail": true, + "id": "{e36388d2-7209-4f26-974b-54d314e106a5}", + "lastEdited": 1536093329671654, + "lastEditedBy": "{b5bba536-25e5-4b12-a1be-5c7cd196a06a}", + "lifespan": 10, + "locked": true, + "maxParticles": 10, + "name": "Stars", + "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", + "particleRadius": 0.07000000029802322, + "polarFinish": 3.1415927410125732, + "position": { + "blue": 3.78922963142395, + "green": 0.5220947265625, + "red": 1.1928560733795166, + "x": 1.1928560733795166, + "y": 0.5220947265625, + "z": 3.78922963142395 + }, + "queryAACube": { + "scale": 22.932353973388672, + "x": -10.273321151733398, + "y": -10.944082260131836, + "z": -7.676947593688965 + }, + "radiusFinish": 0, + "radiusStart": 0, + "rotation": { + "w": 0.996429443359375, + "x": -1.52587890625e-05, + "y": -0.08442819118499756, + "z": -4.57763671875e-05 + }, + "speedSpread": 0, + "spinFinish": null, + "spinStart": null, + "textures": "http://hifi-content.s3.amazonaws.com/alexia/Models/Portal/star.png", + "type": "ParticleEffect", + "userData": "{\"grabbableKey\":{\"grabbable\":false}}" + }, + { + "angularDamping": 0, + "clientOnly": false, + "color": { + "blue": 0, + "green": 0, + "red": 255 + }, + "created": "2018-09-04T20:35:23Z", + "dimensions": { + "blue": 0.20000000298023224, + "green": 0.20000000298023224, + "red": 0.20000000298023224, + "x": 0.20000000298023224, + "y": 0.20000000298023224, + "z": 0.20000000298023224 + }, + "id": "{1dbde8e2-c715-4c09-814e-e411803278c9}", + "lastEdited": 1536093329670778, + "lastEditedBy": "{b5bba536-25e5-4b12-a1be-5c7cd196a06a}", + "locked": true, "name": "Particle Rotate", "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", "position": { "blue": 3.8216662406921387, "green": 0.0772705078125, "red": 1.2409718036651611, - "x": -2.759028196334839, - "y": -9.4227294921875, - "z": -0.17833375930786133 + "x": 1.2409718036651611, + "y": 0.0772705078125, + "z": 3.8216662406921387 }, "queryAACube": { "scale": 0.3464101552963257, @@ -1148,8 +750,479 @@ "type": "Box", "userData": "{\"grabbableKey\":{\"grabbable\":false}}", "visible": false + }, + { + "clientOnly": false, + "color": { + "blue": 0, + "green": 0, + "red": 0 + }, + "created": "2018-09-04T20:35:23Z", + "dimensions": { + "blue": 11.117486953735352, + "green": 3.580313205718994, + "red": 0.20000000298023224, + "x": 0.20000000298023224, + "y": 3.580313205718994, + "z": 11.117486953735352 + }, + "id": "{a06f47da-06e5-4bcd-baa2-37816130f2bd}", + "lastEdited": 1536093329671244, + "lastEditedBy": "{b5bba536-25e5-4b12-a1be-5c7cd196a06a}", + "locked": true, + "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", + "position": { + "blue": 6.1806135177612305, + "green": 1.1588134765625, + "red": 1.4755167961120605, + "x": 1.4755167961120605, + "y": 1.1588134765625, + "z": 6.1806135177612305 + }, + "queryAACube": { + "scale": 11.681488037109375, + "x": -4.365227222442627, + "y": -4.6819305419921875, + "z": 0.33986949920654297 + }, + "rotation": { + "w": 0.8637980222702026, + "x": -4.57763671875e-05, + "y": 0.5038070678710938, + "z": -1.52587890625e-05 + }, + "shape": "Cube", + "type": "Box", + "userData": "{\"grabbableKey\":{\"grabbable\":false}}", + "visible": false + }, + { + "alpha": 0, + "alphaFinish": 0, + "alphaStart": 1, + "clientOnly": false, + "color": { + "blue": 255, + "green": 205, + "red": 3 + }, + "colorFinish": { + "blue": 0, + "green": 0, + "red": 0, + "x": 0, + "y": 0, + "z": 0 + }, + "colorStart": { + "blue": 255, + "green": 204, + "red": 0, + "x": 0, + "y": 204, + "z": 255 + }, + "created": "2018-09-04T20:35:23Z", + "dimensions": { + "blue": 2.5, + "green": 2.5, + "red": 2.5, + "x": 2.5, + "y": 2.5, + "z": 2.5 + }, + "emitAcceleration": { + "blue": 0, + "green": 0, + "red": 0, + "x": 0, + "y": 0, + "z": 0 + }, + "emitDimensions": { + "blue": 1, + "green": 1, + "red": 1, + "x": 1, + "y": 1, + "z": 1 + }, + "emitOrientation": { + "w": 0.9993909597396851, + "x": 0.034897372126579285, + "y": -1.525880907138344e-05, + "z": -1.525880907138344e-05 + }, + "emitRate": 2, + "emitSpeed": 0, + "emitterShouldTrail": true, + "id": "{0b1d2de0-39bf-4416-ac72-aae7ddbb3ff0}", + "lastEdited": 1536093329672220, + "lastEditedBy": "{b5bba536-25e5-4b12-a1be-5c7cd196a06a}", + "lifespan": 10, + "locked": true, + "maxParticles": 40, + "name": "Rays", + "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", + "particleRadius": 0.75, + "polarFinish": 3.1415927410125732, + "position": { + "blue": 3.814434051513672, + "green": 1.44122314453125, + "red": 1.2319090366363525, + "x": 1.2319090366363525, + "y": 1.44122314453125, + "z": 3.814434051513672 + }, + "queryAACube": { + "scale": 4.330127239227295, + "x": -0.9331545829772949, + "y": -0.7238404750823975, + "z": 1.6493704319000244 + }, + "radiusFinish": 0.10000000149011612, + "radiusStart": 0, + "rotation": { + "w": 0.9594720602035522, + "x": -1.52587890625e-05, + "y": 0.28178834915161133, + "z": -4.57763671875e-05 + }, + "speedSpread": 0, + "spinFinish": null, + "spinStart": null, + "textures": "http://hifi-content.s3.amazonaws.com/alexia/Models/Portal/stripe.png", + "type": "ParticleEffect", + "userData": "{\"grabbableKey\":{\"grabbable\":false}}" + }, + { + "angularDamping": 0, + "clientOnly": false, + "color": { + "blue": 0, + "green": 0, + "red": 255 + }, + "created": "2018-09-04T20:35:23Z", + "dimensions": { + "blue": 0.20000000298023224, + "green": 0.20000000298023224, + "red": 0.20000000298023224, + "x": 0.20000000298023224, + "y": 0.20000000298023224, + "z": 0.20000000298023224 + }, + "id": "{01d9478b-50ae-4f09-b67a-e62a4d133cdf}", + "lastEdited": 1536093329672981, + "lastEditedBy": "{b5bba536-25e5-4b12-a1be-5c7cd196a06a}", + "locked": true, + "name": "Particle Rotate", + "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", + "position": { + "blue": 3.8216662406921387, + "green": 0.15618896484375, + "red": 1.2409718036651611, + "x": 1.2409718036651611, + "y": 0.15618896484375, + "z": 3.8216662406921387 + }, + "queryAACube": { + "scale": 0.3464101552963257, + "x": 1.0677666664123535, + "y": -0.017016112804412842, + "z": 3.648461103439331 + }, + "rotation": { + "w": 0.6747081279754639, + "x": -0.06532388925552368, + "y": -0.6342412233352661, + "z": 0.37175559997558594 + }, + "script": "http://hifi-content.s3.amazonaws.com/alexia/Models/Portal/rotate.js", + "scriptTimestamp": 1532724769253, + "shape": "Cube", + "type": "Box", + "userData": "{\"grabbableKey\":{\"grabbable\":false}}", + "visible": false + }, + { + "clientOnly": false, + "color": { + "blue": 0, + "green": 0, + "red": 0 + }, + "created": "2018-09-04T20:35:23Z", + "dimensions": { + "blue": 6.9401350021362305, + "green": 0.04553089290857315, + "red": 7.004304885864258, + "x": 7.004304885864258, + "y": 0.04553089290857315, + "z": 6.9401350021362305 + }, + "id": "{718b3532-0c3c-4689-ac41-dca8fedffc4a}", + "lastEdited": 1536093496994604, + "lastEditedBy": "{4eecd88f-ef9b-4a83-bb9a-7f7496209c6b}", + "locked": true, + "name": "floor", + "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", + "position": { + "blue": 3.6175529956817627, + "green": 0.15221074223518372, + "red": 4.108861923217773, + "x": 4.108861923217773, + "y": 0.15221074223518372, + "z": 3.6175529956817627 + }, + "queryAACube": { + "scale": 9.860417366027832, + "x": -0.8213467597961426, + "y": -4.777997970581055, + "z": -1.3126556873321533 + }, + "rotation": { + "w": 0.8660253882408142, + "x": -1.5922749298624694e-05, + "y": 0.5, + "z": -4.572480611386709e-05 + }, + "shape": "Cube", + "type": "Box", + "userData": "{\"grabbableKey\":{\"grabbable\":false}}" + }, + { + "clientOnly": false, + "color": { + "blue": 0, + "green": 0, + "red": 0 + }, + "created": "2018-09-04T20:35:23Z", + "dimensions": { + "blue": 11.117486953735352, + "green": 3.580313205718994, + "red": 0.20000000298023224, + "x": 0.20000000298023224, + "y": 3.580313205718994, + "z": 11.117486953735352 + }, + "id": "{44442e52-e0cf-45d3-9916-678b8aa56a22}", + "lastEdited": 1536093329672691, + "lastEditedBy": "{b5bba536-25e5-4b12-a1be-5c7cd196a06a}", + "locked": true, + "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", + "position": { + "blue": 5.268576622009277, + "green": 1.1588134765625, + "red": 6.100250244140625, + "x": 6.100250244140625, + "y": 1.1588134765625, + "z": 5.268576622009277 + }, + "queryAACube": { + "scale": 11.681488037109375, + "x": 0.2595062255859375, + "y": -4.6819305419921875, + "z": -0.5721673965454102 + }, + "rotation": { + "w": 0.9662165641784668, + "x": -4.57763671875e-05, + "y": -0.2576791048049927, + "z": 1.52587890625e-05 + }, + "shape": "Cube", + "type": "Box", + "userData": "{\"grabbableKey\":{\"grabbable\":false}}", + "visible": false + }, + { + "clientOnly": false, + "created": "2018-09-04T20:35:23Z", + "dimensions": { + "blue": 14.40000057220459, + "green": 14.40000057220459, + "red": 14.40000057220459, + "x": 14.40000057220459, + "y": 14.40000057220459, + "z": 14.40000057220459 + }, + "id": "{8a045310-b82f-4021-9963-0b98d317995c}", + "lastEdited": 1536093329670891, + "lastEditedBy": "{b5bba536-25e5-4b12-a1be-5c7cd196a06a}", + "locked": true, + "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", + "position": { + "blue": 2.3440732955932617, + "green": 1.7684326171875, + "red": 1.8812973499298096, + "x": 1.8812973499298096, + "y": 1.7684326171875, + "z": 2.3440732955932617 + }, + "queryAACube": { + "scale": 24.9415340423584, + "x": -10.589469909667969, + "y": -10.7023344039917, + "z": -10.126693725585938 + }, + "rotation": { + "w": 0.8697794675827026, + "x": -1.52587890625e-05, + "y": 0.4933699369430542, + "z": -4.57763671875e-05 + }, + "shapeType": "box", + "skyboxMode": "enabled", + "type": "Zone", + "userData": "{\"grabbableKey\":{\"grabbable\":false}}" + }, + { + "alpha": 0, + "alphaFinish": 0, + "alphaStart": 0.25, + "clientOnly": false, + "colorFinish": { + "blue": 0, + "green": 0, + "red": 0, + "x": 0, + "y": 0, + "z": 0 + }, + "colorStart": { + "blue": 255, + "green": 255, + "red": 255, + "x": 255, + "y": 255, + "z": 255 + }, + "created": "2018-09-04T20:35:23Z", + "dimensions": { + "blue": 13.24000072479248, + "green": 13.24000072479248, + "red": 13.24000072479248, + "x": 13.24000072479248, + "y": 13.24000072479248, + "z": 13.24000072479248 + }, + "emitAcceleration": { + "blue": 0, + "green": 0.10000000149011612, + "red": 0, + "x": 0, + "y": 0.10000000149011612, + "z": 0 + }, + "emitDimensions": { + "blue": 1, + "green": 1, + "red": 1, + "x": 1, + "y": 1, + "z": 1 + }, + "emitOrientation": { + "w": 1, + "x": -1.52587890625e-05, + "y": -1.52587890625e-05, + "z": -1.52587890625e-05 + }, + "emitRate": 6, + "emitSpeed": 0, + "id": "{b310070f-6af8-4c1d-9ad7-ea1070b53763}", + "lastEdited": 1536093329670211, + "lastEditedBy": "{b5bba536-25e5-4b12-a1be-5c7cd196a06a}", + "lifespan": 10, + "locked": true, + "maxParticles": 10, + "name": "Stars", + "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", + "particleRadius": 0.07000000029802322, + "polarFinish": 3.1415927410125732, + "position": { + "blue": 1.3712034225463867, + "green": 0.5220947265625, + "red": 2.6281180381774902, + "x": 2.6281180381774902, + "y": 0.5220947265625, + "z": 1.3712034225463867 + }, + "queryAACube": { + "scale": 22.932353973388672, + "x": -8.838058471679688, + "y": -10.944082260131836, + "z": -10.09497356414795 + }, + "radiusFinish": 0, + "radiusStart": 0, + "rotation": { + "w": 0.9852597713470459, + "x": -1.52587890625e-05, + "y": -0.17106890678405762, + "z": -7.62939453125e-05 + }, + "speedSpread": 0, + "spinFinish": null, + "spinStart": null, + "textures": "http://hifi-content.s3.amazonaws.com/alexia/Models/Portal/star.png", + "type": "ParticleEffect", + "userData": "{\"grabbableKey\":{\"grabbable\":false}}" + }, + { + "angularDamping": 0, + "clientOnly": false, + "color": { + "blue": 0, + "green": 0, + "red": 255 + }, + "created": "2018-09-04T20:35:23Z", + "dimensions": { + "blue": 0.20000000298023224, + "green": 0.20000000298023224, + "red": 0.20000000298023224, + "x": 0.20000000298023224, + "y": 0.20000000298023224, + "z": 0.20000000298023224 + }, + "id": "{7c24a30b-47d3-4cf6-af92-5a7959a3cb5d}", + "lastEdited": 1536093329671011, + "lastEditedBy": "{b5bba536-25e5-4b12-a1be-5c7cd196a06a}", + "locked": true, + "name": "Particle Rotate", + "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", + "position": { + "blue": 1.3116319179534912, + "green": 0, + "red": 2.705613613128662, + "x": 2.705613613128662, + "y": 0, + "z": 1.3116319179534912 + }, + "queryAACube": { + "scale": 0.3464101552963257, + "x": 2.5324084758758545, + "y": -0.17320507764816284, + "z": 1.1384267807006836 + }, + "rotation": { + "w": 0.9127794504165649, + "x": 0.2575265169143677, + "y": 0.15553522109985352, + "z": 0.2761729955673218 + }, + "script": "http://hifi-content.s3.amazonaws.com/alexia/Models/Portal/rotate.js", + "scriptTimestamp": 1532724769253, + "shape": "Cube", + "type": "Box", + "userData": "{\"grabbableKey\":{\"grabbable\":false}}", + "visible": false } ], - "Id": "{99bc5288-05fd-4d80-a406-a44c948f7066}", + "Id": "{c9a2e576-13f3-44fa-8d41-a466b33d16c6}", "Version": 93 -} \ No newline at end of file +} diff --git a/scripts/system/notifications.js b/scripts/system/notifications.js index 13d500b909..0778e2a44b 100644 --- a/scripts/system/notifications.js +++ b/scripts/system/notifications.js @@ -624,7 +624,7 @@ Controller.keyReleaseEvent.connect(keyReleaseEvent); Script.update.connect(update); Script.scriptEnding.connect(scriptEnding); - //Window.domainConnectionRefused.connect(onDomainConnectionRefused); + Window.domainConnectionRefused.connect(onDomainConnectionRefused); Window.stillSnapshotTaken.connect(onSnapshotTaken); Window.snapshot360Taken.connect(onSnapshotTaken); Window.processingGifStarted.connect(processingGif); From 002c6547ee182eb32b24e366a5c2811dd6bd9fb5 Mon Sep 17 00:00:00 2001 From: Wayne Chen Date: Tue, 4 Sep 2018 14:08:13 -0700 Subject: [PATCH 041/123] entity script URL update --- interface/resources/serverless/redirect.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/interface/resources/serverless/redirect.json b/interface/resources/serverless/redirect.json index 72c4abc16b..0f58574c1e 100644 --- a/interface/resources/serverless/redirect.json +++ b/interface/resources/serverless/redirect.json @@ -44,7 +44,7 @@ "y": -0.22495104372501373, "z": 0 }, - "script": "https://raw.githubusercontent.com/wayne-chen/hifi/404DomainRedirect/scripts/redirect/zoneTryAgainEntityScript.js", + "script": "https://hifi-content.s3.amazonaws.com/wayne/404redirectionScripts/zoneTryAgainEntityScript.js", "shapeType": "box", "type": "Zone", "userData": "{\"grabbableKey\":{\"grabbable\":false}}" @@ -88,7 +88,7 @@ "y": -0.36650121212005615, "z": 0 }, - "script": "https://raw.githubusercontent.com/wayne-chen/hifi/404DomainRedirect/scripts/redirect/zoneBackEntityScript.js", + "script": "https://hifi-content.s3.amazonaws.com/wayne/404redirectionScripts/zoneBackEntityScript.js", "shapeType": "box", "type": "Zone", "userData": "{\"grabbableKey\":{\"grabbable\":false}}" @@ -364,7 +364,7 @@ "y": 0.4179598093032837, "z": -0.0001068115234375 }, - "script": "https://raw.githubusercontent.com/wayne-chen/hifi/404DomainRedirect/scripts/redirect/backEntityScript.js", + "script": "https://hifi-content.s3.amazonaws.com/wayne/404redirectionScripts/backEntityScript.js", "scriptTimestamp": 1535751754379, "shapeType": "static-mesh", "type": "Model", @@ -454,7 +454,7 @@ "y": 0.5693598985671997, "z": -0.0001068115234375 }, - "script": "https://raw.githubusercontent.com/wayne-chen/hifi/404DomainRedirect/scripts/redirect/tryAgainEntityScript.js", + "script": "https://hifi-content.s3.amazonaws.com/wayne/404redirectionScripts/tryAgainEntityScript.js", "shapeType": "static-mesh", "type": "Model", "userData": "{\"grabbableKey\":{\"grabbable\":false}}" From 9e0fa08cf12af8009328dbe1a70506099b92043f Mon Sep 17 00:00:00 2001 From: Wayne Chen Date: Tue, 4 Sep 2018 17:46:23 -0700 Subject: [PATCH 042/123] adding property to location, updating domain --- interface/resources/serverless/redirect.json | 1317 +++++++----------- interface/src/Application.cpp | 2 + libraries/networking/src/AddressManager.cpp | 4 +- libraries/networking/src/AddressManager.h | 38 +- libraries/networking/src/DomainHandler.cpp | 1 + libraries/networking/src/DomainHandler.h | 2 + 6 files changed, 545 insertions(+), 819 deletions(-) diff --git a/interface/resources/serverless/redirect.json b/interface/resources/serverless/redirect.json index 0f58574c1e..f983a7ffef 100644 --- a/interface/resources/serverless/redirect.json +++ b/interface/resources/serverless/redirect.json @@ -9,7 +9,7 @@ "clientOnly": false, "collidesWith": "static,dynamic,kinematic,otherAvatar,", "collisionMask": 23, - "created": "2018-09-04T20:35:23Z", + "created": "2018-09-05T00:40:03Z", "dimensions": { "blue": 0.8660923838615417, "green": 1.921838402748108, @@ -18,25 +18,25 @@ "y": 1.921838402748108, "z": 0.8660923838615417 }, - "id": "{3889145e-9db2-46dc-9765-9ba7594457dc}", - "lastEdited": 1536093329670067, - "lastEditedBy": "{b5bba536-25e5-4b12-a1be-5c7cd196a06a}", + "id": "{781e26c7-ecfa-44b2-b7ef-4e3278787fbc}", + "lastEdited": 1536108183362142, + "lastEditedBy": "{4656d4a8-5e61-4230-ab34-2888d7945bd6}", "locked": true, "name": "Try Again Zone", "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", "position": { - "blue": 4.524896621704102, - "green": 1.9289360046386719, - "red": 2.893861770629883, - "x": 2.893861770629883, - "y": 1.9289360046386719, - "z": 4.524896621704102 + "blue": 4.225754737854004, + "green": 1.7677892446517944, + "red": 2.778148889541626, + "x": 2.778148889541626, + "y": 1.7677892446517944, + "z": 4.225754737854004 }, "queryAACube": { "scale": 2.4632973670959473, - "x": 1.6622130870819092, - "y": 0.6972873210906982, - "z": 3.293247938156128 + "x": 1.5465002059936523, + "y": 0.5361405611038208, + "z": 2.9941060543060303 }, "rotation": { "w": 0.9743700623512268, @@ -50,244 +50,13 @@ "userData": "{\"grabbableKey\":{\"grabbable\":false}}" }, { - "clientOnly": false, - "collidesWith": "static,dynamic,kinematic,otherAvatar,", - "collisionMask": 23, - "created": "2018-09-04T20:35:23Z", - "dimensions": { - "blue": 1.159199833869934, - "green": 2.8062009811401367, - "red": 1.6216505765914917, - "x": 1.6216505765914917, - "y": 2.8062009811401367, - "z": 1.159199833869934 - }, - "id": "{8facc8e1-bc17-4460-8a9c-868b07c1b387}", - "lastEdited": 1536093329669913, - "lastEditedBy": "{b5bba536-25e5-4b12-a1be-5c7cd196a06a}", - "locked": true, - "name": "Back Zone", - "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", - "position": { - "blue": 1.8632707595825195, - "green": 1.8022732734680176, - "red": 3.3276727199554443, - "x": 3.3276727199554443, - "y": 1.8022732734680176, - "z": 1.8632707595825195 - }, - "queryAACube": { - "scale": 3.4421300888061523, - "x": 1.6066076755523682, - "y": 0.0812082290649414, - "z": 0.14220571517944336 - }, - "rotation": { - "w": 0.9304176568984985, - "x": 0, - "y": -0.36650121212005615, - "z": 0 - }, - "script": "https://hifi-content.s3.amazonaws.com/wayne/404redirectionScripts/zoneBackEntityScript.js", - "shapeType": "box", - "type": "Zone", - "userData": "{\"grabbableKey\":{\"grabbable\":false}}" - }, - { - "angularDamping": 0, "clientOnly": false, "color": { "blue": 0, "green": 0, "red": 255 }, - "created": "2018-09-04T20:35:23Z", - "dimensions": { - "blue": 0.20000000298023224, - "green": 0.20000000298023224, - "red": 0.20000000298023224, - "x": 0.20000000298023224, - "y": 0.20000000298023224, - "z": 0.20000000298023224 - }, - "id": "{ed4142db-f3c9-441b-9091-cd1755b6aeb1}", - "lastEdited": 1536093329672493, - "lastEditedBy": "{b5bba536-25e5-4b12-a1be-5c7cd196a06a}", - "locked": true, - "name": "Particle Rotate", - "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", - "position": { - "blue": 1.3116319179534912, - "green": 0.15618896484375, - "red": 2.705613613128662, - "x": 2.705613613128662, - "y": 0.15618896484375, - "z": 1.3116319179534912 - }, - "queryAACube": { - "scale": 0.3464101552963257, - "x": 2.5324084758758545, - "y": -0.017016112804412842, - "z": 1.1384267807006836 - }, - "rotation": { - "w": 0.46953535079956055, - "x": -0.16719311475753784, - "y": -0.7982757091522217, - "z": 0.3380941152572632 - }, - "script": "http://hifi-content.s3.amazonaws.com/alexia/Models/Portal/rotate.js", - "scriptTimestamp": 1532724769253, - "shape": "Cube", - "type": "Box", - "userData": "{\"grabbableKey\":{\"grabbable\":false}}", - "visible": false - }, - { - "clientOnly": false, - "color": { - "blue": 0, - "green": 0, - "red": 0 - }, - "created": "2018-09-04T20:35:23Z", - "dimensions": { - "blue": 11.117486953735352, - "green": 3.580313205718994, - "red": 0.20000000298023224, - "x": 0.20000000298023224, - "y": 3.580313205718994, - "z": 11.117486953735352 - }, - "id": "{d49f29ca-72b6-473d-917c-f7bf7d66f219}", - "lastEdited": 1536093329670344, - "lastEditedBy": "{b5bba536-25e5-4b12-a1be-5c7cd196a06a}", - "locked": true, - "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", - "position": { - "blue": 0, - "green": 1.1583251953125, - "red": 4.971565246582031, - "x": 4.971565246582031, - "y": 1.1583251953125, - "z": 0 - }, - "queryAACube": { - "scale": 11.681488037109375, - "x": -0.8691787719726562, - "y": -4.6824188232421875, - "z": -5.8407440185546875 - }, - "rotation": { - "w": 0.8637980222702026, - "x": -4.57763671875e-05, - "y": 0.5038070678710938, - "z": -1.52587890625e-05 - }, - "shape": "Cube", - "type": "Box", - "userData": "{\"grabbableKey\":{\"grabbable\":false}}", - "visible": false - }, - { - "clientOnly": false, - "created": "2018-09-04T20:35:23Z", - "dimensions": { - "blue": 0.06014331430196762, - "green": 2.582186460494995, - "red": 2.582186698913574, - "x": 2.582186698913574, - "y": 2.582186460494995, - "z": 0.06014331430196762 - }, - "id": "{6ccf519b-4e0b-4c23-a51b-305d0a64ab06}", - "lastEdited": 1536093329671943, - "lastEditedBy": "{b5bba536-25e5-4b12-a1be-5c7cd196a06a}", - "locked": true, - "modelURL": "http://hifi-content.s3.amazonaws.com/alexia/LoadingScreens/oopsDialog.fbx", - "name": "Oops Dialog", - "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", - "position": { - "blue": 1.45927095413208, - "green": 1.6763916015625, - "red": 0, - "x": 0, - "y": 1.6763916015625, - "z": 1.45927095413208 - }, - "queryAACube": { - "scale": 3.6522583961486816, - "x": -1.8261291980743408, - "y": -0.14973759651184082, - "z": -0.36685824394226074 - }, - "rotation": { - "w": 0.8684672117233276, - "x": -4.57763671875e-05, - "y": 0.4957197904586792, - "z": -7.62939453125e-05 - }, - "type": "Model", - "userData": "{\"grabbableKey\":{\"grabbable\":false}}" - }, - { - "angularDamping": 0, - "clientOnly": false, - "color": { - "blue": 0, - "green": 0, - "red": 255 - }, - "created": "2018-09-04T20:35:23Z", - "dimensions": { - "blue": 0.20000000298023224, - "green": 0.20000000298023224, - "red": 0.20000000298023224, - "x": 0.20000000298023224, - "y": 0.20000000298023224, - "z": 0.20000000298023224 - }, - "id": "{625c95a4-1592-4996-bd48-7aa3fdbe6aee}", - "lastEdited": 1536093329671797, - "lastEditedBy": "{b5bba536-25e5-4b12-a1be-5c7cd196a06a}", - "locked": true, - "name": "Particle Rotate", - "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", - "position": { - "blue": 1.3116319179534912, - "green": 0.0772705078125, - "red": 2.705613613128662, - "x": 2.705613613128662, - "y": 0.0772705078125, - "z": 1.3116319179534912 - }, - "queryAACube": { - "scale": 0.3464101552963257, - "x": 2.5324084758758545, - "y": -0.09593456983566284, - "z": 1.1384267807006836 - }, - "rotation": { - "w": -0.38777750730514526, - "x": -0.37337303161621094, - "y": -0.8409399390220642, - "z": 0.055222392082214355 - }, - "script": "http://hifi-content.s3.amazonaws.com/alexia/Models/Portal/rotate.js", - "scriptTimestamp": 1532724769253, - "shape": "Cube", - "type": "Box", - "userData": "{\"grabbableKey\":{\"grabbable\":false}}", - "visible": false - }, - { - "clientOnly": false, - "color": { - "blue": 0, - "green": 0, - "red": 255 - }, - "created": "2018-09-04T20:35:23Z", + "created": "2018-09-05T00:40:03Z", "dimensions": { "blue": 8.645400047302246, "green": 0.20000000298023224, @@ -296,23 +65,24 @@ "y": 0.20000000298023224, "z": 8.645400047302246 }, - "id": "{d356bb44-7888-476a-821e-961ae7d9330e}", - "lastEdited": 1536093329671479, - "lastEditedBy": "{b5bba536-25e5-4b12-a1be-5c7cd196a06a}", + "id": "{e44fb546-b34a-4966-9b11-73556f800d21}", + "lastEdited": 1536107948776951, + "lastEditedBy": "{ce82d352-3002-44ae-9b76-66492989a1db}", "locked": true, + "name": "ceiling", "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", "position": { "blue": 4.846520900726318, - "green": 3.0651936531066895, - "red": 5.746071815490723, - "x": 5.746071815490723, - "y": 3.0651936531066895, + "green": 2.912982940673828, + "red": 5.739595890045166, + "x": 5.739595890045166, + "y": 2.912982940673828, "z": 4.846520900726318 }, "queryAACube": { "scale": 21.812576293945312, - "x": -5.160216331481934, - "y": -7.841094493865967, + "x": -5.16669225692749, + "y": -7.993305206298828, "z": -6.059767246246338 }, "rotation": { @@ -328,46 +98,48 @@ }, { "clientOnly": false, - "created": "2018-09-04T20:35:23Z", - "dimensions": { - "blue": 2.1097896099090576, - "green": 0.04847164824604988, - "red": 1.458284616470337, - "x": 1.458284616470337, - "y": 0.04847164824604988, - "z": 2.1097896099090576 + "color": { + "blue": 0, + "green": 0, + "red": 0 }, - "id": "{737f1b31-0342-4764-89fb-2ef7ddf83983}", - "lastEdited": 1536093329672351, - "lastEditedBy": "{b5bba536-25e5-4b12-a1be-5c7cd196a06a}", + "created": "2018-09-05T00:40:03Z", + "dimensions": { + "blue": 6.9401350021362305, + "green": 0.04553089290857315, + "red": 7.004304885864258, + "x": 7.004304885864258, + "y": 0.04553089290857315, + "z": 6.9401350021362305 + }, + "id": "{8cd93fe5-16c0-44b7-b1e9-e7e06c4e9228}", + "lastEdited": 1536107948774796, + "lastEditedBy": "{4eecd88f-ef9b-4a83-bb9a-7f7496209c6b}", "locked": true, - "modelURL": "http://hifi-content.s3.amazonaws.com/alexia/Models/Portal/portal2.fbx", - "name": "Back", + "name": "floor", "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", "position": { - "blue": 1.5835940837860107, - "green": 0.2467041015625, - "red": 3.0345542430877686, - "x": 3.0345542430877686, - "y": 0.2467041015625, - "z": 1.5835940837860107 + "blue": 3.6175529956817627, + "green": 0, + "red": 4.102385997772217, + "x": 4.102385997772217, + "y": 0, + "z": 3.6175529956817627 }, "queryAACube": { - "scale": 2.5651814937591553, - "x": 1.751963496208191, - "y": -1.0358866453170776, - "z": 0.3010033369064331 + "scale": 9.860417366027832, + "x": -0.8278226852416992, + "y": -4.930208683013916, + "z": -1.3126556873321533 }, "rotation": { - "w": 0.9084458351135254, - "x": -1.52587890625e-05, - "y": 0.4179598093032837, - "z": -0.0001068115234375 + "w": 0.8660253882408142, + "x": -1.5922749298624694e-05, + "y": 0.5, + "z": -4.572480611386709e-05 }, - "script": "https://hifi-content.s3.amazonaws.com/wayne/404redirectionScripts/backEntityScript.js", - "scriptTimestamp": 1535751754379, - "shapeType": "static-mesh", - "type": "Model", + "shape": "Cube", + "type": "Box", "userData": "{\"grabbableKey\":{\"grabbable\":false}}" }, { @@ -377,7 +149,7 @@ "green": 0, "red": 0 }, - "created": "2018-09-04T20:35:23Z", + "created": "2018-09-05T00:40:03Z", "dimensions": { "blue": 11.117486953735352, "green": 3.580313205718994, @@ -386,29 +158,77 @@ "y": 3.580313205718994, "z": 11.117486953735352 }, - "id": "{87f734c8-37bb-4ac0-b300-5028f7fe6f9d}", - "lastEdited": 1536093329670472, - "lastEditedBy": "{b5bba536-25e5-4b12-a1be-5c7cd196a06a}", + "id": "{147272dc-a344-4171-9621-efc1c2095997}", + "lastEdited": 1536107948776823, + "lastEditedBy": "{ce82d352-3002-44ae-9b76-66492989a1db}", "locked": true, + "name": "leftWall", "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", "position": { - "blue": 2.662257671356201, - "green": 1.1585893630981445, - "red": 1.493349552154541, - "x": 1.493349552154541, - "y": 1.1585893630981445, - "z": 2.662257671356201 + "blue": 6.1806135177612305, + "green": 1.0066027641296387, + "red": 1.4690406322479248, + "x": 1.4690406322479248, + "y": 1.0066027641296387, + "z": 6.1806135177612305 }, "queryAACube": { "scale": 11.681488037109375, - "x": -4.3473944664001465, - "y": -4.682154655456543, - "z": -3.1784863471984863 + "x": -4.371703147888184, + "y": -4.834141254425049, + "z": 0.33986949920654297 }, "rotation": { - "w": 0.9666743278503418, + "w": 0.8637980222702026, "x": -4.57763671875e-05, - "y": -0.2560006380081177, + "y": 0.5038070678710938, + "z": -1.52587890625e-05 + }, + "shape": "Cube", + "type": "Box", + "userData": "{\"grabbableKey\":{\"grabbable\":false}}", + "visible": false + }, + { + "clientOnly": false, + "color": { + "blue": 0, + "green": 0, + "red": 0 + }, + "created": "2018-09-05T00:40:03Z", + "dimensions": { + "blue": 11.117486953735352, + "green": 3.580313205718994, + "red": 0.20000000298023224, + "x": 0.20000000298023224, + "y": 3.580313205718994, + "z": 11.117486953735352 + }, + "id": "{5f2b89b8-47e3-4915-a966-d46307a40f06}", + "lastEdited": 1536107948774605, + "lastEditedBy": "{ce82d352-3002-44ae-9b76-66492989a1db}", + "locked": true, + "name": "backWall", + "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", + "position": { + "blue": 5.268576622009277, + "green": 1.0066027641296387, + "red": 6.093774318695068, + "x": 6.093774318695068, + "y": 1.0066027641296387, + "z": 5.268576622009277 + }, + "queryAACube": { + "scale": 11.681488037109375, + "x": 0.25303030014038086, + "y": -4.834141254425049, + "z": -0.5721673965454102 + }, + "rotation": { + "w": 0.9662165641784668, + "x": -4.57763671875e-05, + "y": -0.2576791048049927, "z": 1.52587890625e-05 }, "shape": "Cube", @@ -418,45 +238,43 @@ }, { "clientOnly": false, - "created": "2018-09-04T20:35:23Z", + "created": "2018-09-05T00:40:03Z", "dimensions": { - "blue": 2.1097896099090576, - "green": 0.04847164824604988, - "red": 1.458284616470337, - "x": 1.458284616470337, - "y": 0.04847164824604988, - "z": 2.1097896099090576 + "blue": 14.40000057220459, + "green": 14.40000057220459, + "red": 14.40000057220459, + "x": 14.40000057220459, + "y": 14.40000057220459, + "z": 14.40000057220459 }, - "id": "{9584bb57-b543-4d2b-af98-f3de618eef19}", - "lastEdited": 1536093329672070, + "id": "{baf96345-8f68-4068-af4c-3c690035852a}", + "lastEdited": 1536107948775591, "lastEditedBy": "{b5bba536-25e5-4b12-a1be-5c7cd196a06a}", "locked": true, - "modelURL": "http://hifi-content.s3.amazonaws.com/alexia/Models/Portal/portal1.fbx", - "name": "Try Again", "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", "position": { - "blue": 3.946338653564453, - "green": 0.2467041015625, - "red": 1.6013128757476807, - "x": 1.6013128757476807, - "y": 0.2467041015625, - "z": 3.946338653564453 + "blue": 2.3440732955932617, + "green": 1.6162219047546387, + "red": 1.8748211860656738, + "x": 1.8748211860656738, + "y": 1.6162219047546387, + "z": 2.3440732955932617 }, "queryAACube": { - "scale": 2.5651814937591553, - "x": 0.318722128868103, - "y": -1.0358866453170776, - "z": 2.663747787475586 + "scale": 24.9415340423584, + "x": -10.595945358276367, + "y": -10.854545593261719, + "z": -10.126693725585938 }, "rotation": { - "w": 0.8220492601394653, + "w": 0.8697794675827026, "x": -1.52587890625e-05, - "y": 0.5693598985671997, - "z": -0.0001068115234375 + "y": 0.4933699369430542, + "z": -4.57763671875e-05 }, - "script": "https://hifi-content.s3.amazonaws.com/wayne/404redirectionScripts/tryAgainEntityScript.js", - "shapeType": "static-mesh", - "type": "Model", + "shapeType": "box", + "skyboxMode": "enabled", + "type": "Zone", "userData": "{\"grabbableKey\":{\"grabbable\":false}}" }, { @@ -485,7 +303,7 @@ "y": 227, "z": 211 }, - "created": "2018-09-04T20:35:23Z", + "created": "2018-09-05T00:40:03Z", "dimensions": { "blue": 2.5, "green": 2.5, @@ -518,8 +336,8 @@ }, "emitRate": 2, "emitSpeed": 0, - "id": "{4b942dd2-dcfa-4959-8758-073c56d6a380}", - "lastEdited": 1536093329670643, + "id": "{639a51f0-8613-4e46-bc7e-fef24597df73}", + "lastEdited": 1536107948776693, "lastEditedBy": "{b5bba536-25e5-4b12-a1be-5c7cd196a06a}", "lifespan": 10, "locked": true, @@ -530,16 +348,16 @@ "polarFinish": 3.1415927410125732, "position": { "blue": 1.3553659915924072, - "green": 1.44122314453125, - "red": 2.572803497314453, - "x": 2.572803497314453, - "y": 1.44122314453125, + "green": 1.2890124320983887, + "red": 2.5663273334503174, + "x": 2.5663273334503174, + "y": 1.2890124320983887, "z": 1.3553659915924072 }, "queryAACube": { "scale": 4.330127239227295, - "x": 0.40773987770080566, - "y": -0.7238404750823975, + "x": 0.4012637138366699, + "y": -0.8760511875152588, "z": -0.8096976280212402 }, "radiusFinish": 0.10000000149011612, @@ -557,246 +375,6 @@ "type": "ParticleEffect", "userData": "{\"grabbableKey\":{\"grabbable\":false}}" }, - { - "angularDamping": 0, - "clientOnly": false, - "color": { - "blue": 0, - "green": 0, - "red": 255 - }, - "created": "2018-09-04T20:35:23Z", - "dimensions": { - "blue": 0.20000000298023224, - "green": 0.20000000298023224, - "red": 0.20000000298023224, - "x": 0.20000000298023224, - "y": 0.20000000298023224, - "z": 0.20000000298023224 - }, - "id": "{3b13d766-763a-4d44-99d8-42c7b9d7139e}", - "lastEdited": 1536093329671361, - "lastEditedBy": "{b5bba536-25e5-4b12-a1be-5c7cd196a06a}", - "locked": true, - "name": "Particle Rotate", - "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", - "position": { - "blue": 3.8216662406921387, - "green": 0, - "red": 1.2409718036651611, - "x": 1.2409718036651611, - "y": 0, - "z": 3.8216662406921387 - }, - "queryAACube": { - "scale": 0.3464101552963257, - "x": 1.0677666664123535, - "y": -0.17320507764816284, - "z": 3.648461103439331 - }, - "rotation": { - "w": 0.6444342136383057, - "x": -0.08220034837722778, - "y": -0.6649118661880493, - "z": 0.3684900999069214 - }, - "script": "http://hifi-content.s3.amazonaws.com/alexia/Models/Portal/rotate.js", - "scriptTimestamp": 1532724769253, - "shape": "Cube", - "type": "Box", - "userData": "{\"grabbableKey\":{\"grabbable\":false}}", - "visible": false - }, - { - "alpha": 0, - "alphaFinish": 0, - "alphaStart": 0.25, - "clientOnly": false, - "colorFinish": { - "blue": 0, - "green": 0, - "red": 0, - "x": 0, - "y": 0, - "z": 0 - }, - "colorStart": { - "blue": 255, - "green": 255, - "red": 255, - "x": 255, - "y": 255, - "z": 255 - }, - "created": "2018-09-04T20:35:23Z", - "dimensions": { - "blue": 13.24000072479248, - "green": 13.24000072479248, - "red": 13.24000072479248, - "x": 13.24000072479248, - "y": 13.24000072479248, - "z": 13.24000072479248 - }, - "emitAcceleration": { - "blue": 0, - "green": 0.10000000149011612, - "red": 0, - "x": 0, - "y": 0.10000000149011612, - "z": 0 - }, - "emitDimensions": { - "blue": 1, - "green": 1, - "red": 1, - "x": 1, - "y": 1, - "z": 1 - }, - "emitOrientation": { - "w": 1, - "x": -1.52587890625e-05, - "y": -1.52587890625e-05, - "z": -1.52587890625e-05 - }, - "emitRate": 6, - "emitSpeed": 0, - "emitterShouldTrail": true, - "id": "{e36388d2-7209-4f26-974b-54d314e106a5}", - "lastEdited": 1536093329671654, - "lastEditedBy": "{b5bba536-25e5-4b12-a1be-5c7cd196a06a}", - "lifespan": 10, - "locked": true, - "maxParticles": 10, - "name": "Stars", - "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", - "particleRadius": 0.07000000029802322, - "polarFinish": 3.1415927410125732, - "position": { - "blue": 3.78922963142395, - "green": 0.5220947265625, - "red": 1.1928560733795166, - "x": 1.1928560733795166, - "y": 0.5220947265625, - "z": 3.78922963142395 - }, - "queryAACube": { - "scale": 22.932353973388672, - "x": -10.273321151733398, - "y": -10.944082260131836, - "z": -7.676947593688965 - }, - "radiusFinish": 0, - "radiusStart": 0, - "rotation": { - "w": 0.996429443359375, - "x": -1.52587890625e-05, - "y": -0.08442819118499756, - "z": -4.57763671875e-05 - }, - "speedSpread": 0, - "spinFinish": null, - "spinStart": null, - "textures": "http://hifi-content.s3.amazonaws.com/alexia/Models/Portal/star.png", - "type": "ParticleEffect", - "userData": "{\"grabbableKey\":{\"grabbable\":false}}" - }, - { - "angularDamping": 0, - "clientOnly": false, - "color": { - "blue": 0, - "green": 0, - "red": 255 - }, - "created": "2018-09-04T20:35:23Z", - "dimensions": { - "blue": 0.20000000298023224, - "green": 0.20000000298023224, - "red": 0.20000000298023224, - "x": 0.20000000298023224, - "y": 0.20000000298023224, - "z": 0.20000000298023224 - }, - "id": "{1dbde8e2-c715-4c09-814e-e411803278c9}", - "lastEdited": 1536093329670778, - "lastEditedBy": "{b5bba536-25e5-4b12-a1be-5c7cd196a06a}", - "locked": true, - "name": "Particle Rotate", - "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", - "position": { - "blue": 3.8216662406921387, - "green": 0.0772705078125, - "red": 1.2409718036651611, - "x": 1.2409718036651611, - "y": 0.0772705078125, - "z": 3.8216662406921387 - }, - "queryAACube": { - "scale": 0.3464101552963257, - "x": 1.0677666664123535, - "y": -0.09593456983566284, - "z": 3.648461103439331 - }, - "rotation": { - "w": 0.926024317741394, - "x": 0.20308232307434082, - "y": -0.010269343852996826, - "z": 0.3179827928543091 - }, - "script": "http://hifi-content.s3.amazonaws.com/alexia/Models/Portal/rotate.js", - "scriptTimestamp": 1532724769253, - "shape": "Cube", - "type": "Box", - "userData": "{\"grabbableKey\":{\"grabbable\":false}}", - "visible": false - }, - { - "clientOnly": false, - "color": { - "blue": 0, - "green": 0, - "red": 0 - }, - "created": "2018-09-04T20:35:23Z", - "dimensions": { - "blue": 11.117486953735352, - "green": 3.580313205718994, - "red": 0.20000000298023224, - "x": 0.20000000298023224, - "y": 3.580313205718994, - "z": 11.117486953735352 - }, - "id": "{a06f47da-06e5-4bcd-baa2-37816130f2bd}", - "lastEdited": 1536093329671244, - "lastEditedBy": "{b5bba536-25e5-4b12-a1be-5c7cd196a06a}", - "locked": true, - "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", - "position": { - "blue": 6.1806135177612305, - "green": 1.1588134765625, - "red": 1.4755167961120605, - "x": 1.4755167961120605, - "y": 1.1588134765625, - "z": 6.1806135177612305 - }, - "queryAACube": { - "scale": 11.681488037109375, - "x": -4.365227222442627, - "y": -4.6819305419921875, - "z": 0.33986949920654297 - }, - "rotation": { - "w": 0.8637980222702026, - "x": -4.57763671875e-05, - "y": 0.5038070678710938, - "z": -1.52587890625e-05 - }, - "shape": "Cube", - "type": "Box", - "userData": "{\"grabbableKey\":{\"grabbable\":false}}", - "visible": false - }, { "alpha": 0, "alphaFinish": 0, @@ -823,7 +401,7 @@ "y": 204, "z": 255 }, - "created": "2018-09-04T20:35:23Z", + "created": "2018-09-05T00:40:03Z", "dimensions": { "blue": 2.5, "green": 2.5, @@ -857,8 +435,8 @@ "emitRate": 2, "emitSpeed": 0, "emitterShouldTrail": true, - "id": "{0b1d2de0-39bf-4416-ac72-aae7ddbb3ff0}", - "lastEdited": 1536093329672220, + "id": "{e62ced49-fa18-4ae1-977f-abef5bc0f3ba}", + "lastEdited": 1536107948775366, "lastEditedBy": "{b5bba536-25e5-4b12-a1be-5c7cd196a06a}", "lifespan": 10, "locked": true, @@ -869,16 +447,16 @@ "polarFinish": 3.1415927410125732, "position": { "blue": 3.814434051513672, - "green": 1.44122314453125, - "red": 1.2319090366363525, - "x": 1.2319090366363525, - "y": 1.44122314453125, + "green": 1.2890124320983887, + "red": 1.2254328727722168, + "x": 1.2254328727722168, + "y": 1.2890124320983887, "z": 3.814434051513672 }, "queryAACube": { "scale": 4.330127239227295, - "x": -0.9331545829772949, - "y": -0.7238404750823975, + "x": -0.9396307468414307, + "y": -0.8760511875152588, "z": 1.6493704319000244 }, "radiusFinish": 0.10000000149011612, @@ -896,189 +474,6 @@ "type": "ParticleEffect", "userData": "{\"grabbableKey\":{\"grabbable\":false}}" }, - { - "angularDamping": 0, - "clientOnly": false, - "color": { - "blue": 0, - "green": 0, - "red": 255 - }, - "created": "2018-09-04T20:35:23Z", - "dimensions": { - "blue": 0.20000000298023224, - "green": 0.20000000298023224, - "red": 0.20000000298023224, - "x": 0.20000000298023224, - "y": 0.20000000298023224, - "z": 0.20000000298023224 - }, - "id": "{01d9478b-50ae-4f09-b67a-e62a4d133cdf}", - "lastEdited": 1536093329672981, - "lastEditedBy": "{b5bba536-25e5-4b12-a1be-5c7cd196a06a}", - "locked": true, - "name": "Particle Rotate", - "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", - "position": { - "blue": 3.8216662406921387, - "green": 0.15618896484375, - "red": 1.2409718036651611, - "x": 1.2409718036651611, - "y": 0.15618896484375, - "z": 3.8216662406921387 - }, - "queryAACube": { - "scale": 0.3464101552963257, - "x": 1.0677666664123535, - "y": -0.017016112804412842, - "z": 3.648461103439331 - }, - "rotation": { - "w": 0.6747081279754639, - "x": -0.06532388925552368, - "y": -0.6342412233352661, - "z": 0.37175559997558594 - }, - "script": "http://hifi-content.s3.amazonaws.com/alexia/Models/Portal/rotate.js", - "scriptTimestamp": 1532724769253, - "shape": "Cube", - "type": "Box", - "userData": "{\"grabbableKey\":{\"grabbable\":false}}", - "visible": false - }, - { - "clientOnly": false, - "color": { - "blue": 0, - "green": 0, - "red": 0 - }, - "created": "2018-09-04T20:35:23Z", - "dimensions": { - "blue": 6.9401350021362305, - "green": 0.04553089290857315, - "red": 7.004304885864258, - "x": 7.004304885864258, - "y": 0.04553089290857315, - "z": 6.9401350021362305 - }, - "id": "{718b3532-0c3c-4689-ac41-dca8fedffc4a}", - "lastEdited": 1536093496994604, - "lastEditedBy": "{4eecd88f-ef9b-4a83-bb9a-7f7496209c6b}", - "locked": true, - "name": "floor", - "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", - "position": { - "blue": 3.6175529956817627, - "green": 0.15221074223518372, - "red": 4.108861923217773, - "x": 4.108861923217773, - "y": 0.15221074223518372, - "z": 3.6175529956817627 - }, - "queryAACube": { - "scale": 9.860417366027832, - "x": -0.8213467597961426, - "y": -4.777997970581055, - "z": -1.3126556873321533 - }, - "rotation": { - "w": 0.8660253882408142, - "x": -1.5922749298624694e-05, - "y": 0.5, - "z": -4.572480611386709e-05 - }, - "shape": "Cube", - "type": "Box", - "userData": "{\"grabbableKey\":{\"grabbable\":false}}" - }, - { - "clientOnly": false, - "color": { - "blue": 0, - "green": 0, - "red": 0 - }, - "created": "2018-09-04T20:35:23Z", - "dimensions": { - "blue": 11.117486953735352, - "green": 3.580313205718994, - "red": 0.20000000298023224, - "x": 0.20000000298023224, - "y": 3.580313205718994, - "z": 11.117486953735352 - }, - "id": "{44442e52-e0cf-45d3-9916-678b8aa56a22}", - "lastEdited": 1536093329672691, - "lastEditedBy": "{b5bba536-25e5-4b12-a1be-5c7cd196a06a}", - "locked": true, - "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", - "position": { - "blue": 5.268576622009277, - "green": 1.1588134765625, - "red": 6.100250244140625, - "x": 6.100250244140625, - "y": 1.1588134765625, - "z": 5.268576622009277 - }, - "queryAACube": { - "scale": 11.681488037109375, - "x": 0.2595062255859375, - "y": -4.6819305419921875, - "z": -0.5721673965454102 - }, - "rotation": { - "w": 0.9662165641784668, - "x": -4.57763671875e-05, - "y": -0.2576791048049927, - "z": 1.52587890625e-05 - }, - "shape": "Cube", - "type": "Box", - "userData": "{\"grabbableKey\":{\"grabbable\":false}}", - "visible": false - }, - { - "clientOnly": false, - "created": "2018-09-04T20:35:23Z", - "dimensions": { - "blue": 14.40000057220459, - "green": 14.40000057220459, - "red": 14.40000057220459, - "x": 14.40000057220459, - "y": 14.40000057220459, - "z": 14.40000057220459 - }, - "id": "{8a045310-b82f-4021-9963-0b98d317995c}", - "lastEdited": 1536093329670891, - "lastEditedBy": "{b5bba536-25e5-4b12-a1be-5c7cd196a06a}", - "locked": true, - "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", - "position": { - "blue": 2.3440732955932617, - "green": 1.7684326171875, - "red": 1.8812973499298096, - "x": 1.8812973499298096, - "y": 1.7684326171875, - "z": 2.3440732955932617 - }, - "queryAACube": { - "scale": 24.9415340423584, - "x": -10.589469909667969, - "y": -10.7023344039917, - "z": -10.126693725585938 - }, - "rotation": { - "w": 0.8697794675827026, - "x": -1.52587890625e-05, - "y": 0.4933699369430542, - "z": -4.57763671875e-05 - }, - "shapeType": "box", - "skyboxMode": "enabled", - "type": "Zone", - "userData": "{\"grabbableKey\":{\"grabbable\":false}}" - }, { "alpha": 0, "alphaFinish": 0, @@ -1100,7 +495,7 @@ "y": 255, "z": 255 }, - "created": "2018-09-04T20:35:23Z", + "created": "2018-09-05T00:40:03Z", "dimensions": { "blue": 13.24000072479248, "green": 13.24000072479248, @@ -1133,8 +528,8 @@ }, "emitRate": 6, "emitSpeed": 0, - "id": "{b310070f-6af8-4c1d-9ad7-ea1070b53763}", - "lastEdited": 1536093329670211, + "id": "{298c0571-cbd8-487b-8640-64037d6a8414}", + "lastEdited": 1536107948776382, "lastEditedBy": "{b5bba536-25e5-4b12-a1be-5c7cd196a06a}", "lifespan": 10, "locked": true, @@ -1145,16 +540,16 @@ "polarFinish": 3.1415927410125732, "position": { "blue": 1.3712034225463867, - "green": 0.5220947265625, - "red": 2.6281180381774902, - "x": 2.6281180381774902, - "y": 0.5220947265625, + "green": 0.3698839843273163, + "red": 2.6216418743133545, + "x": 2.6216418743133545, + "y": 0.3698839843273163, "z": 1.3712034225463867 }, "queryAACube": { "scale": 22.932353973388672, - "x": -8.838058471679688, - "y": -10.944082260131836, + "x": -8.844534873962402, + "y": -11.096293449401855, "z": -10.09497356414795 }, "radiusFinish": 0, @@ -1173,56 +568,368 @@ "userData": "{\"grabbableKey\":{\"grabbable\":false}}" }, { - "angularDamping": 0, + "clientOnly": false, + "created": "2018-09-05T00:40:03Z", + "dimensions": { + "blue": 2.1097896099090576, + "green": 0.04847164824604988, + "red": 1.458284616470337, + "x": 1.458284616470337, + "y": 0.04847164824604988, + "z": 2.1097896099090576 + }, + "id": "{6625dbb8-ff25-458d-a92e-644b58460604}", + "lastEdited": 1536107948776195, + "lastEditedBy": "{b5bba536-25e5-4b12-a1be-5c7cd196a06a}", + "locked": true, + "modelURL": "http://hifi-content.s3.amazonaws.com/alexia/Models/Portal/portal1.fbx", + "name": "Try Again", + "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", + "position": { + "blue": 3.946338653564453, + "green": 0.09449335932731628, + "red": 1.594836711883545, + "x": 1.594836711883545, + "y": 0.09449335932731628, + "z": 3.946338653564453 + }, + "queryAACube": { + "scale": 2.5651814937591553, + "x": 0.3122459650039673, + "y": -1.188097357749939, + "z": 2.663747787475586 + }, + "rotation": { + "w": 0.8220492601394653, + "x": -1.52587890625e-05, + "y": 0.5693598985671997, + "z": -0.0001068115234375 + }, + "script": "https://hifi-content.s3.amazonaws.com/wayne/404redirectionScripts/tryAgainEntityScript.js", + "shapeType": "static-mesh", + "type": "Model", + "userData": "{\"grabbableKey\":{\"grabbable\":false}}" + }, + { + "clientOnly": false, + "created": "2018-09-05T00:40:03Z", + "dimensions": { + "blue": 0.06014331430196762, + "green": 2.582186460494995, + "red": 2.582186698913574, + "x": 2.582186698913574, + "y": 2.582186460494995, + "z": 0.06014331430196762 + }, + "id": "{dfe92dce-f09d-4e9e-b3ed-c68ecd4d476f}", + "lastEdited": 1536108160862286, + "lastEditedBy": "{4656d4a8-5e61-4230-ab34-2888d7945bd6}", + "locked": true, + "modelURL": "http://hifi-content.s3.amazonaws.com/wayne/models/oopsDialog_protocol.fbx", + "name": "Oops Dialog", + "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", + "position": { + "blue": 1.45927095413208, + "green": 1.6763916015625, + "red": 0, + "x": 0, + "y": 1.6763916015625, + "z": 1.45927095413208 + }, + "queryAACube": { + "scale": 3.6522583961486816, + "x": -1.8261291980743408, + "y": -0.14973759651184082, + "z": -0.36685824394226074 + }, + "rotation": { + "w": 0.8684672117233276, + "x": -4.57763671875e-05, + "y": 0.4957197904586792, + "z": -7.62939453125e-05 + }, + "script": "https://hifi-content.s3.amazonaws.com/wayne/404redirectionScripts/oopsEntityScript.js", + "scriptTimestamp": 1536102551825, + "type": "Model", + "userData": "{\"grabbableKey\":{\"grabbable\":false}}" + }, + { "clientOnly": false, "color": { "blue": 0, "green": 0, - "red": 255 + "red": 0 }, - "created": "2018-09-04T20:35:23Z", + "created": "2018-09-05T00:40:03Z", "dimensions": { - "blue": 0.20000000298023224, - "green": 0.20000000298023224, + "blue": 11.117486953735352, + "green": 3.580313205718994, "red": 0.20000000298023224, "x": 0.20000000298023224, - "y": 0.20000000298023224, - "z": 0.20000000298023224 + "y": 3.580313205718994, + "z": 11.117486953735352 }, - "id": "{7c24a30b-47d3-4cf6-af92-5a7959a3cb5d}", - "lastEdited": 1536093329671011, - "lastEditedBy": "{b5bba536-25e5-4b12-a1be-5c7cd196a06a}", + "id": "{144a8cf4-b0e8-489a-9403-d74d4dc4cb3e}", + "lastEdited": 1536107948775774, + "lastEditedBy": "{ce82d352-3002-44ae-9b76-66492989a1db}", "locked": true, - "name": "Particle Rotate", + "name": "rightWall", "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", "position": { - "blue": 1.3116319179534912, - "green": 0, - "red": 2.705613613128662, - "x": 2.705613613128662, - "y": 0, - "z": 1.3116319179534912 + "blue": 0, + "green": 1.0061144828796387, + "red": 4.965089321136475, + "x": 4.965089321136475, + "y": 1.0061144828796387, + "z": 0 }, "queryAACube": { - "scale": 0.3464101552963257, - "x": 2.5324084758758545, - "y": -0.17320507764816284, - "z": 1.1384267807006836 + "scale": 11.681488037109375, + "x": -0.8756546974182129, + "y": -4.834629535675049, + "z": -5.8407440185546875 }, "rotation": { - "w": 0.9127794504165649, - "x": 0.2575265169143677, - "y": 0.15553522109985352, - "z": 0.2761729955673218 + "w": 0.8637980222702026, + "x": -4.57763671875e-05, + "y": 0.5038070678710938, + "z": -1.52587890625e-05 }, - "script": "http://hifi-content.s3.amazonaws.com/alexia/Models/Portal/rotate.js", - "scriptTimestamp": 1532724769253, "shape": "Cube", "type": "Box", "userData": "{\"grabbableKey\":{\"grabbable\":false}}", "visible": false + }, + { + "clientOnly": false, + "collidesWith": "static,dynamic,kinematic,otherAvatar,", + "collisionMask": 23, + "created": "2018-09-05T00:40:03Z", + "dimensions": { + "blue": 1.159199833869934, + "green": 2.8062009811401367, + "red": 1.6216505765914917, + "x": 1.6216505765914917, + "y": 2.8062009811401367, + "z": 1.159199833869934 + }, + "id": "{37f53408-3d0c-42a5-9891-e6c40a227349}", + "lastEdited": 1536107948775010, + "lastEditedBy": "{b5bba536-25e5-4b12-a1be-5c7cd196a06a}", + "locked": true, + "name": "Back Zone", + "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", + "position": { + "blue": 1.8632707595825195, + "green": 1.6500625610351562, + "red": 3.3211965560913086, + "x": 3.3211965560913086, + "y": 1.6500625610351562, + "z": 1.8632707595825195 + }, + "queryAACube": { + "scale": 3.4421300888061523, + "x": 1.6001315116882324, + "y": -0.07100248336791992, + "z": 0.14220571517944336 + }, + "rotation": { + "w": 0.9304176568984985, + "x": 0, + "y": -0.36650121212005615, + "z": 0 + }, + "script": "https://hifi-content.s3.amazonaws.com/wayne/404redirectionScripts/zoneBackEntityScript.js", + "shapeType": "box", + "type": "Zone", + "userData": "{\"grabbableKey\":{\"grabbable\":false}}" + }, + { + "clientOnly": false, + "color": { + "blue": 0, + "green": 0, + "red": 0 + }, + "created": "2018-09-05T00:40:03Z", + "dimensions": { + "blue": 11.117486953735352, + "green": 3.580313205718994, + "red": 0.20000000298023224, + "x": 0.20000000298023224, + "y": 3.580313205718994, + "z": 11.117486953735352 + }, + "id": "{aa6e680c-6750-4776-95bc-ef3118cace5c}", + "lastEdited": 1536107948775945, + "lastEditedBy": "{ce82d352-3002-44ae-9b76-66492989a1db}", + "locked": true, + "name": "frontWall", + "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", + "position": { + "blue": 2.662257671356201, + "green": 1.0063786506652832, + "red": 1.4868733882904053, + "x": 1.4868733882904053, + "y": 1.0063786506652832, + "z": 2.662257671356201 + }, + "queryAACube": { + "scale": 11.681488037109375, + "x": -4.353870391845703, + "y": -4.834365367889404, + "z": -3.1784863471984863 + }, + "rotation": { + "w": 0.9666743278503418, + "x": -4.57763671875e-05, + "y": -0.2560006380081177, + "z": 1.52587890625e-05 + }, + "shape": "Cube", + "type": "Box", + "userData": "{\"grabbableKey\":{\"grabbable\":false}}", + "visible": false + }, + { + "clientOnly": false, + "created": "2018-09-05T00:40:03Z", + "dimensions": { + "blue": 2.1097896099090576, + "green": 0.04847164824604988, + "red": 1.458284616470337, + "x": 1.458284616470337, + "y": 0.04847164824604988, + "z": 2.1097896099090576 + }, + "id": "{303631f1-04f3-42a6-b8a8-8dd4b65d1231}", + "lastEdited": 1536107948776513, + "lastEditedBy": "{b5bba536-25e5-4b12-a1be-5c7cd196a06a}", + "locked": true, + "modelURL": "http://hifi-content.s3.amazonaws.com/alexia/Models/Portal/portal2.fbx", + "name": "Back", + "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", + "position": { + "blue": 1.5835940837860107, + "green": 0.09449335932731628, + "red": 3.028078079223633, + "x": 3.028078079223633, + "y": 0.09449335932731628, + "z": 1.5835940837860107 + }, + "queryAACube": { + "scale": 2.5651814937591553, + "x": 1.7454873323440552, + "y": -1.188097357749939, + "z": 0.3010033369064331 + }, + "rotation": { + "w": 0.9084458351135254, + "x": -1.52587890625e-05, + "y": 0.4179598093032837, + "z": -0.0001068115234375 + }, + "script": "https://hifi-content.s3.amazonaws.com/wayne/404redirectionScripts/backEntityScript.js", + "scriptTimestamp": 1535751754379, + "shapeType": "static-mesh", + "type": "Model", + "userData": "{\"grabbableKey\":{\"grabbable\":false}}" + }, + { + "alpha": 0, + "alphaFinish": 0, + "alphaStart": 0.25, + "clientOnly": false, + "colorFinish": { + "blue": 0, + "green": 0, + "red": 0, + "x": 0, + "y": 0, + "z": 0 + }, + "colorStart": { + "blue": 255, + "green": 255, + "red": 255, + "x": 255, + "y": 255, + "z": 255 + }, + "created": "2018-09-05T00:40:03Z", + "dimensions": { + "blue": 13.24000072479248, + "green": 13.24000072479248, + "red": 13.24000072479248, + "x": 13.24000072479248, + "y": 13.24000072479248, + "z": 13.24000072479248 + }, + "emitAcceleration": { + "blue": 0, + "green": 0.10000000149011612, + "red": 0, + "x": 0, + "y": 0.10000000149011612, + "z": 0 + }, + "emitDimensions": { + "blue": 1, + "green": 1, + "red": 1, + "x": 1, + "y": 1, + "z": 1 + }, + "emitOrientation": { + "w": 1, + "x": -1.52587890625e-05, + "y": -1.52587890625e-05, + "z": -1.52587890625e-05 + }, + "emitRate": 6, + "emitSpeed": 0, + "emitterShouldTrail": true, + "id": "{8ded39e6-303c-48f2-be79-81b715cca9f7}", + "lastEdited": 1536107948777127, + "lastEditedBy": "{b5bba536-25e5-4b12-a1be-5c7cd196a06a}", + "lifespan": 10, + "locked": true, + "maxParticles": 10, + "name": "Stars", + "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", + "particleRadius": 0.07000000029802322, + "polarFinish": 3.1415927410125732, + "position": { + "blue": 3.78922963142395, + "green": 0.3698839843273163, + "red": 1.1863799095153809, + "x": 1.1863799095153809, + "y": 0.3698839843273163, + "z": 3.78922963142395 + }, + "queryAACube": { + "scale": 22.932353973388672, + "x": -10.279796600341797, + "y": -11.096293449401855, + "z": -7.676947593688965 + }, + "radiusFinish": 0, + "radiusStart": 0, + "rotation": { + "w": 0.996429443359375, + "x": -1.52587890625e-05, + "y": -0.08442819118499756, + "z": -4.57763671875e-05 + }, + "speedSpread": 0, + "spinFinish": null, + "spinStart": null, + "textures": "http://hifi-content.s3.amazonaws.com/alexia/Models/Portal/star.png", + "type": "ParticleEffect", + "userData": "{\"grabbableKey\":{\"grabbable\":false}}" } ], - "Id": "{c9a2e576-13f3-44fa-8d41-a466b33d16c6}", + "Id": "{18abccad-2d57-4176-9d89-24dc424916f5}", "Version": 93 } diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index e50473bf29..9405915bcf 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -1211,6 +1211,8 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo auto discoverabilityManager = DependencyManager::get(); connect(&locationUpdateTimer, &QTimer::timeout, discoverabilityManager.data(), &DiscoverabilityManager::updateLocation); + connect(&domainHandler, &DomainHandler::domainConnectionErrorChanged, DependencyManager::get().data(), + &AddressManager::setLastDomainConnectionError); connect(&locationUpdateTimer, &QTimer::timeout, DependencyManager::get().data(), &AddressManager::storeCurrentAddress); locationUpdateTimer.start(DATA_SERVER_LOCATION_CHANGE_UPDATE_MSECS); diff --git a/libraries/networking/src/AddressManager.cpp b/libraries/networking/src/AddressManager.cpp index 62cd79a609..1b258e14b1 100644 --- a/libraries/networking/src/AddressManager.cpp +++ b/libraries/networking/src/AddressManager.cpp @@ -343,9 +343,7 @@ bool AddressManager::handleUrl(const QUrl& lookupUrl, LookupTrigger trigger) { _previousAPILookup.clear(); _shareablePlaceName.clear(); - if (lookupUrl.toString() != REDIRECT_HIFI_ADDRESS) { - setDomainInfo(lookupUrl, trigger); - } + setDomainInfo(lookupUrl, trigger); emit lookupResultsFinished(); QString path = DOMAIN_SPAWNING_POINT; diff --git a/libraries/networking/src/AddressManager.h b/libraries/networking/src/AddressManager.h index fab2bdd6cb..7226e92451 100644 --- a/libraries/networking/src/AddressManager.h +++ b/libraries/networking/src/AddressManager.h @@ -56,6 +56,8 @@ const QString GET_PLACE = "/api/v1/places/%1"; * Read-only. * @property {boolean} isConnected - true if you're connected to the domain in your current href * metaverse address, otherwise false. + * @property {Window.ConnectionRefusedReason} lastDomainConnectionError - The last error saved from connecting to a domain + * unsuccessfully. * Read-only. * @property {string} pathname - The location and orientation in your current href metaverse address * (e.g., "/15,-10,26/0,0,0,1"). @@ -74,6 +76,7 @@ class AddressManager : public QObject, public Dependency { Q_PROPERTY(QUrl href READ currentShareableAddress) Q_PROPERTY(QString protocol READ getProtocol) Q_PROPERTY(QString hostname READ getHost) + Q_PROPERTY(int lastDomainConnectionError READ getLastDomainConnectionError) Q_PROPERTY(QString pathname READ currentPath) Q_PROPERTY(QString placename READ getPlaceName) Q_PROPERTY(QString domainID READ getDomainID) @@ -141,7 +144,8 @@ public: * * @typedef {number} location.LookupTrigger */ - enum LookupTrigger { + enum LookupTrigger + { UserInput, Back, Forward, @@ -184,6 +188,9 @@ public: QUrl getDomainURL() { return _domainURL; } + int getLastDomainConnectionError() { return _lastDomainConnectionError; } + void setLastDomainConnectionError(int reasonCode) { _lastDomainConnectionError = reasonCode; } + public slots: /**jsdoc * Go to a specified metaverse address. @@ -195,7 +202,7 @@ public slots: * Helps ensure that user's location history is correctly maintained. */ void handleLookupString(const QString& lookupString, bool fromSuggestions = false); - + /**jsdoc * Go to a position and orientation resulting from a lookup for a named path in the domain (set in the domain server's * settings). @@ -208,8 +215,9 @@ public slots: // functions and signals that should be exposed are moved to a scripting interface class. // // we currently expect this to be called from NodeList once handleLookupString has been called with a path - bool goToViewpointForPath(const QString& viewpointString, const QString& pathString) - { return handleViewpoint(viewpointString, false, DomainPathResponse, false, pathString); } + bool goToViewpointForPath(const QString& viewpointString, const QString& pathString) { + return handleViewpoint(viewpointString, false, DomainPathResponse, false, pathString); + } /**jsdoc * Go back to the previous location in your navigation history, if there is one. @@ -230,8 +238,10 @@ public slots: * @param {location.LookupTrigger} trigger=StartupFromSettings - The reason for the function call. Helps ensure that user's * location history is correctly maintained. */ - void goToLocalSandbox(QString path = "", LookupTrigger trigger = LookupTrigger::StartupFromSettings) { handleUrl(SANDBOX_HIFI_ADDRESS + path, trigger); } - + void goToLocalSandbox(QString path = "", LookupTrigger trigger = LookupTrigger::StartupFromSettings) { + handleUrl(SANDBOX_HIFI_ADDRESS + path, trigger); + } + /**jsdoc * Go to the default "welcome" metaverse address. * @function location.goToEntry @@ -362,7 +372,8 @@ signals: * location.locationChangeRequired.connect(onLocationChangeRequired); */ void locationChangeRequired(const glm::vec3& newPosition, - bool hasOrientationChange, const glm::quat& newOrientation, + bool hasOrientationChange, + const glm::quat& newOrientation, bool shouldFaceLocation); /**jsdoc @@ -433,7 +444,7 @@ private slots: void handleShareableNameAPIResponse(QNetworkReply* requestReply); private: - void goToAddressFromObject(const QVariantMap& addressMap, const QNetworkReply* reply); + void goToAddressFromObject(const QVariantMap& addressMap, const QNetworkReply* reply); // Set host and port, and return `true` if it was changed. bool setHost(const QString& host, LookupTrigger trigger, quint16 port = 0); @@ -445,8 +456,11 @@ private: bool handleNetworkAddress(const QString& lookupString, LookupTrigger trigger, bool& hostChanged); void handlePath(const QString& path, LookupTrigger trigger, bool wasPathOnly = false); - bool handleViewpoint(const QString& viewpointString, bool shouldFace, LookupTrigger trigger, - bool definitelyPathOnly = false, const QString& pathString = QString()); + bool handleViewpoint(const QString& viewpointString, + bool shouldFace, + LookupTrigger trigger, + bool definitelyPathOnly = false, + const QString& pathString = QString()); bool handleUsername(const QString& lookupString); bool handleDomainID(const QString& host); @@ -457,6 +471,8 @@ private: QUrl _domainURL; QUrl _lastVisitedURL; + // domain connection error from domain handler. + int _lastDomainConnectionError{ -1 }; QUuid _rootPlaceID; PositionGetter _positionGetter; @@ -473,4 +489,4 @@ private: QUrl _previousAPILookup; }; -#endif // hifi_AddressManager_h +#endif // hifi_AddressManager_h diff --git a/libraries/networking/src/DomainHandler.cpp b/libraries/networking/src/DomainHandler.cpp index 0febe1e155..75d670cd3d 100644 --- a/libraries/networking/src/DomainHandler.cpp +++ b/libraries/networking/src/DomainHandler.cpp @@ -480,6 +480,7 @@ void DomainHandler::processDomainServerConnectionDeniedPacket(QSharedPointer Date: Tue, 4 Sep 2018 18:24:01 -0700 Subject: [PATCH 043/123] fixing loadServerlessDomain function to be from 404 redirect --- interface/src/Application.cpp | 2 +- interface/src/Application.h | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index b4a8c43be7..91f064dfa2 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -3518,7 +3518,7 @@ void Application::setIsServerlessMode(bool serverlessDomain) { void Application::loadServerlessDomain(QUrl domainURL, bool errorDomain) { if (QThread::currentThread() != thread()) { - QMetaObject::invokeMethod(this, "loadServerlessDomain", Q_ARG(QUrl, domainURL)); + QMetaObject::invokeMethod(this, "loadServerlessDomain", Q_ARG(QUrl, domainURL), Q_ARG(bool, errorDomain)); return; } diff --git a/interface/src/Application.h b/interface/src/Application.h index 35f998a04d..c82dae3b05 100644 --- a/interface/src/Application.h +++ b/interface/src/Application.h @@ -436,7 +436,6 @@ public slots: void setIsServerlessMode(bool serverlessDomain); void loadServerlessDomain(QUrl domainURL, bool errorDomain = false); void setIsInterstitialMode(bool interstialMode); - void loadServerlessDomain(QUrl domainURL); void updateVerboseLogging(); From 1ce6c84c089e55c9c3f8118cb4b760ef4cadfbda Mon Sep 17 00:00:00 2001 From: Wayne Chen Date: Tue, 4 Sep 2018 18:24:49 -0700 Subject: [PATCH 044/123] updating metacall for loadServerlessDomain --- interface/src/Application.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 9405915bcf..1104e153df 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -3479,7 +3479,7 @@ void Application::setIsServerlessMode(bool serverlessDomain) { void Application::loadServerlessDomain(QUrl domainURL, bool errorDomain) { if (QThread::currentThread() != thread()) { - QMetaObject::invokeMethod(this, "loadServerlessDomain", Q_ARG(QUrl, domainURL)); + QMetaObject::invokeMethod(this, "loadServerlessDomain", Q_ARG(QUrl, domainURL), Q_ARG(bool, errorDomain)); return; } From 98c4d05b4ada1a76c469363769e9078054fea8ed Mon Sep 17 00:00:00 2001 From: Wayne Chen Date: Tue, 4 Sep 2018 19:54:30 -0700 Subject: [PATCH 045/123] fixing typo in domain handler --- libraries/networking/src/DomainHandler.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/networking/src/DomainHandler.h b/libraries/networking/src/DomainHandler.h index 2784605961..5e9d0f14e9 100644 --- a/libraries/networking/src/DomainHandler.h +++ b/libraries/networking/src/DomainHandler.h @@ -84,7 +84,7 @@ public: void connectedToServerless(std::map namedPaths); - void DomainHandler::loadedErrorDomain(std::map namedPaths); + void loadedErrorDomain(std::map namedPaths); QString getViewPointFromNamedPath(QString namedPath); From 0be7a5ffaa92949954a0c5a2148eb9eb573bfdfd Mon Sep 17 00:00:00 2001 From: Wayne Chen Date: Tue, 4 Sep 2018 19:58:56 -0700 Subject: [PATCH 046/123] fixing typo in domain handler --- libraries/networking/src/DomainHandler.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/networking/src/DomainHandler.h b/libraries/networking/src/DomainHandler.h index 2784605961..5e9d0f14e9 100644 --- a/libraries/networking/src/DomainHandler.h +++ b/libraries/networking/src/DomainHandler.h @@ -84,7 +84,7 @@ public: void connectedToServerless(std::map namedPaths); - void DomainHandler::loadedErrorDomain(std::map namedPaths); + void loadedErrorDomain(std::map namedPaths); QString getViewPointFromNamedPath(QString namedPath); From af1c473a9c62ae0039f4705d2bbfb8b3d2f754b7 Mon Sep 17 00:00:00 2001 From: Wayne Chen Date: Tue, 4 Sep 2018 22:17:33 -0700 Subject: [PATCH 047/123] updating with models in meshes folder --- .../meshes/redirect/oopsDialog_auth.fbx | Bin 0 -> 32304 bytes .../meshes/redirect/oopsDialog_auth.png | Bin 0 -> 5012 bytes .../meshes/redirect/oopsDialog_protocol.fbx | Bin 0 -> 32256 bytes .../meshes/redirect/oopsDialog_protocol.png | Bin 0 -> 4899 bytes .../meshes/redirect/oopsDialog_vague.fbx | Bin 0 -> 32480 bytes .../meshes/redirect/oopsDialog_vague.png | Bin 0 -> 5139 bytes interface/resources/serverless/redirect.json | 4 +- scripts/system/oopsEntityScript.js | 41 ++++++++++++++++++ 8 files changed, 43 insertions(+), 2 deletions(-) create mode 100644 interface/resources/meshes/redirect/oopsDialog_auth.fbx create mode 100644 interface/resources/meshes/redirect/oopsDialog_auth.png create mode 100644 interface/resources/meshes/redirect/oopsDialog_protocol.fbx create mode 100644 interface/resources/meshes/redirect/oopsDialog_protocol.png create mode 100644 interface/resources/meshes/redirect/oopsDialog_vague.fbx create mode 100644 interface/resources/meshes/redirect/oopsDialog_vague.png create mode 100644 scripts/system/oopsEntityScript.js diff --git a/interface/resources/meshes/redirect/oopsDialog_auth.fbx b/interface/resources/meshes/redirect/oopsDialog_auth.fbx new file mode 100644 index 0000000000000000000000000000000000000000..3360de993f31b3b2ba600056ed9cd08365c7a473 GIT binary patch literal 32304 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 literal 0 HcmV?d00001 diff --git a/interface/resources/meshes/redirect/oopsDialog_protocol.png b/interface/resources/meshes/redirect/oopsDialog_protocol.png new file mode 100644 index 0000000000000000000000000000000000000000..63c6e00c4eaa31798af10e5d5f9165290628bc0f GIT binary patch literal 4899 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 literal 0 HcmV?d00001 diff --git a/interface/resources/meshes/redirect/oopsDialog_vague.fbx b/interface/resources/meshes/redirect/oopsDialog_vague.fbx new file mode 100644 index 0000000000000000000000000000000000000000..324d90578b833552f01a1199fbded078b49900ba GIT binary patch literal 32480 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 G%l`rndU6E- literal 0 HcmV?d00001 diff --git a/interface/resources/meshes/redirect/oopsDialog_vague.png b/interface/resources/meshes/redirect/oopsDialog_vague.png new file mode 100644 index 0000000000000000000000000000000000000000..8a02ad2c277d5b218b45d96429b48c02f636b50d GIT binary patch literal 5139 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 Mv$| 0) { + this.entityID = entities[0]; + } + } + var error = location.lastDomainConnectionError; + var newModel = ""; + var hostedSite = Script.resourcesPath() + "meshes/redirect"; + if (error === PROTOCOL_MISMATCH) { + newModel = "oopsDialog_protocol"; + } else if (error === NOT_AUTHORIZED) { + newModel = "oopsDialog_auth"; + } else { + newModel = "oopsDialog_vague"; + } + var props = Entities.getEntityProperties(this.entityID, ["modelURL"]); + var newModelURL = hostedSite + newModel + ".fbx"; + if(props.modelURL !== newModelURL) { + var newFileURL = newModelURL + "/" + newModel + ".png"; + var newTextures = {"file16": newFileURL, "file17": newFileURL}; + Entities.editEntity(this.entityID, {modelURL: newModelURL, originalTextures: JSON.stringify(newTextures)}); + } + }; + var ping = Script.setInterval(pingError, 5000); + + function cleanup() { + Script.clearInterval(ping); + }; + + Script.scriptEnding.connect(cleanup); +}); From 8b6c21e0bbd94f4e0b1ed66aca3188aee8d58d23 Mon Sep 17 00:00:00 2001 From: Wayne Chen Date: Tue, 4 Sep 2018 22:19:12 -0700 Subject: [PATCH 048/123] updating script path TODO: will fix with s3 hosted script --- interface/resources/serverless/redirect.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/resources/serverless/redirect.json b/interface/resources/serverless/redirect.json index ec172561af..00bbe17691 100644 --- a/interface/resources/serverless/redirect.json +++ b/interface/resources/serverless/redirect.json @@ -648,7 +648,7 @@ "y": 0.4957197904586792, "z": -7.62939453125e-05 }, - "script": "https://raw.githubusercontent.com/wayne-chen/hifi/404DomainRedirect/scripts/system/oopsEntityScript.js", + "script": "https://raw.githubusercontent.com/wayne-chen/hifi/interstitalMerged/scripts/system/oopsEntityScript.js", "scriptTimestamp": 1536102551825, "type": "Model", "userData": "{\"grabbableKey\":{\"grabbable\":false}}" From afd7321e7f81a19f48b797887849cc7ebb7e9612 Mon Sep 17 00:00:00 2001 From: Wayne Chen Date: Tue, 4 Sep 2018 23:16:54 -0700 Subject: [PATCH 049/123] updating redirect with proper fbx TODO: fix path when uploaded the fbx files --- interface/resources/serverless/redirect.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/resources/serverless/redirect.json b/interface/resources/serverless/redirect.json index ec172561af..17799b952d 100644 --- a/interface/resources/serverless/redirect.json +++ b/interface/resources/serverless/redirect.json @@ -625,7 +625,7 @@ "lastEdited": 1536108160862286, "lastEditedBy": "{4656d4a8-5e61-4230-ab34-2888d7945bd6}", "locked": true, - "modelURL": Script.resourcesPath() + "meshes/redirect/oopsDialog_protocol.fbx", + "modelURL": "https://raw.githubusercontent.com/wayne-chen/hifi/404DomainRedirect/interface/resources/meshes/redirect/oopsDialog_protocol.fbx", "name": "Oops Dialog", "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", "position": { From d6442b350c4da1110db0111a6d3283b593f5cc80 Mon Sep 17 00:00:00 2001 From: Wayne Chen Date: Tue, 4 Sep 2018 23:18:52 -0700 Subject: [PATCH 050/123] updating redirect to the interstitial page url TODO: Fix this link to s3 bucket hosted file --- interface/resources/serverless/redirect.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/resources/serverless/redirect.json b/interface/resources/serverless/redirect.json index 511c1c410c..539e92203b 100644 --- a/interface/resources/serverless/redirect.json +++ b/interface/resources/serverless/redirect.json @@ -625,7 +625,7 @@ "lastEdited": 1536108160862286, "lastEditedBy": "{4656d4a8-5e61-4230-ab34-2888d7945bd6}", "locked": true, - "modelURL": "https://raw.githubusercontent.com/wayne-chen/hifi/404DomainRedirect/interface/resources/meshes/redirect/oopsDialog_protocol.fbx", + "modelURL": "https://raw.githubusercontent.com/wayne-chen/hifi/interstitalMerged/interface/resources/meshes/redirect/oopsDialog_protocol.fbx", "name": "Oops Dialog", "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", "position": { From f38a26a1ffd0e95aeffa229ae4fc9a08be98cfbe Mon Sep 17 00:00:00 2001 From: Wayne Chen Date: Wed, 5 Sep 2018 09:04:17 -0700 Subject: [PATCH 051/123] updating location of oops dialog script --- interface/resources/serverless/redirect.json | 4 +- scripts/system/oopsEntityScript.js | 41 -------------------- 2 files changed, 2 insertions(+), 43 deletions(-) delete mode 100644 scripts/system/oopsEntityScript.js diff --git a/interface/resources/serverless/redirect.json b/interface/resources/serverless/redirect.json index 17799b952d..1bb2aa80c7 100644 --- a/interface/resources/serverless/redirect.json +++ b/interface/resources/serverless/redirect.json @@ -625,7 +625,7 @@ "lastEdited": 1536108160862286, "lastEditedBy": "{4656d4a8-5e61-4230-ab34-2888d7945bd6}", "locked": true, - "modelURL": "https://raw.githubusercontent.com/wayne-chen/hifi/404DomainRedirect/interface/resources/meshes/redirect/oopsDialog_protocol.fbx", + "modelURL": "", "name": "Oops Dialog", "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", "position": { @@ -648,7 +648,7 @@ "y": 0.4957197904586792, "z": -7.62939453125e-05 }, - "script": "https://raw.githubusercontent.com/wayne-chen/hifi/404DomainRedirect/scripts/system/oopsEntityScript.js", + "script": "https://hifi-content.s3.amazonaws.com/wayne/404redirectionScripts/oopsEntityScript.js", "scriptTimestamp": 1536102551825, "type": "Model", "userData": "{\"grabbableKey\":{\"grabbable\":false}}" diff --git a/scripts/system/oopsEntityScript.js b/scripts/system/oopsEntityScript.js deleted file mode 100644 index bf10fbb9dd..0000000000 --- a/scripts/system/oopsEntityScript.js +++ /dev/null @@ -1,41 +0,0 @@ -(function() { - var PROTOCOL_MISMATCH = 1; - var NOT_AUTHORIZED = 3; - - this.entityID = Uuid.NULL; - this.preload = function(entityID) { - this.entityID = entityID; - }; - function pingError() { - if(this.entityID === undefined) { - var entities = Entities.findEntitiesByName("Oops Dialog", MyAvatar.position, 10); - if(entities.length > 0) { - this.entityID = entities[0]; - } - } - var error = location.lastDomainConnectionError; - var newModel = ""; - var hostedSite = Script.resourcesPath() + "meshes/redirect"; - if (error === PROTOCOL_MISMATCH) { - newModel = "oopsDialog_protocol"; - } else if (error === NOT_AUTHORIZED) { - newModel = "oopsDialog_auth"; - } else { - newModel = "oopsDialog_vague"; - } - var props = Entities.getEntityProperties(this.entityID, ["modelURL"]); - var newModelURL = hostedSite + newModel + ".fbx"; - if(props.modelURL !== newModelURL) { - var newFileURL = newModelURL + "/" + newModel + ".png"; - var newTextures = {"file16": newFileURL, "file17": newFileURL}; - Entities.editEntity(this.entityID, {modelURL: newModelURL, originalTextures: JSON.stringify(newTextures)}); - } - }; - var ping = Script.setInterval(pingError, 5000); - - function cleanup() { - Script.clearInterval(ping); - }; - - Script.scriptEnding.connect(cleanup); -}); From 179138aa106895efafdf6a26469a31061946a9a8 Mon Sep 17 00:00:00 2001 From: Wayne Chen Date: Wed, 5 Sep 2018 10:36:06 -0700 Subject: [PATCH 052/123] updating serverless file to have dynamic oops --- interface/resources/serverless/redirect.json | 1 - 1 file changed, 1 deletion(-) diff --git a/interface/resources/serverless/redirect.json b/interface/resources/serverless/redirect.json index 1bb2aa80c7..48b1a7078f 100644 --- a/interface/resources/serverless/redirect.json +++ b/interface/resources/serverless/redirect.json @@ -624,7 +624,6 @@ "id": "{dfe92dce-f09d-4e9e-b3ed-c68ecd4d476f}", "lastEdited": 1536108160862286, "lastEditedBy": "{4656d4a8-5e61-4230-ab34-2888d7945bd6}", - "locked": true, "modelURL": "", "name": "Oops Dialog", "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", From c6229c5c604731e3154d31455e5f5fe46b6242ff Mon Sep 17 00:00:00 2001 From: Wayne Chen Date: Wed, 5 Sep 2018 10:37:45 -0700 Subject: [PATCH 053/123] updating serverless file to have dynamic oops --- interface/resources/serverless/redirect.json | 1 - 1 file changed, 1 deletion(-) diff --git a/interface/resources/serverless/redirect.json b/interface/resources/serverless/redirect.json index 1bb2aa80c7..48b1a7078f 100644 --- a/interface/resources/serverless/redirect.json +++ b/interface/resources/serverless/redirect.json @@ -624,7 +624,6 @@ "id": "{dfe92dce-f09d-4e9e-b3ed-c68ecd4d476f}", "lastEdited": 1536108160862286, "lastEditedBy": "{4656d4a8-5e61-4230-ab34-2888d7945bd6}", - "locked": true, "modelURL": "", "name": "Oops Dialog", "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", From 1bea6c9ea38f223d730f409542bb965d43858b93 Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Wed, 5 Sep 2018 10:38:12 -0700 Subject: [PATCH 054/123] if not already logged in, show login dialog at launch-time rather than connect-to-domain-time --- interface/src/Application.cpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 67dbcf355f..a2f5033622 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -2299,6 +2299,19 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo connect(&AndroidHelper::instance(), &AndroidHelper::enterForeground, this, &Application::enterForeground); AndroidHelper::instance().notifyLoadComplete(); #endif + + static int CHECK_LOGIN_TIMER = 3000; + QTimer* checkLoginTimer = new QTimer(this); + checkLoginTimer->setInterval(CHECK_LOGIN_TIMER); + checkLoginTimer->setSingleShot(true); + connect(checkLoginTimer, &QTimer::timeout, this, []() { + auto accountManager = DependencyManager::get(); + auto dialogsManager = DependencyManager::get(); + if (!accountManager->isLoggedIn()) { + dialogsManager->showLoginDialog(); + } + }); + checkLoginTimer->start(); } void Application::updateVerboseLogging() { From 77bb6fa4d54b0f7cccdcd6aa6b86d7fd58b963b4 Mon Sep 17 00:00:00 2001 From: Wayne Chen Date: Wed, 5 Sep 2018 11:53:49 -0700 Subject: [PATCH 055/123] adding position to try again zone; updating whitespace --- interface/resources/serverless/redirect.json | 44 ++++++++++---------- libraries/networking/src/AddressManager.cpp | 4 +- 2 files changed, 24 insertions(+), 24 deletions(-) diff --git a/interface/resources/serverless/redirect.json b/interface/resources/serverless/redirect.json index 48b1a7078f..64cb4d8a3f 100644 --- a/interface/resources/serverless/redirect.json +++ b/interface/resources/serverless/redirect.json @@ -9,39 +9,39 @@ "clientOnly": false, "collidesWith": "static,dynamic,kinematic,otherAvatar,", "collisionMask": 23, - "created": "2018-09-05T00:40:03Z", + "created": "2018-09-05T18:13:00Z", "dimensions": { - "blue": 0.8660923838615417, - "green": 1.921838402748108, - "red": 1.2744625806808472, - "x": 1.2744625806808472, - "y": 1.921838402748108, - "z": 0.8660923838615417 + "blue": 1.159199833869934, + "green": 2.8062009811401367, + "red": 1.6216505765914917, + "x": 1.6216505765914917, + "y": 2.8062009811401367, + "z": 1.159199833869934 }, - "id": "{781e26c7-ecfa-44b2-b7ef-4e3278787fbc}", - "lastEdited": 1536108183362142, - "lastEditedBy": "{4656d4a8-5e61-4230-ab34-2888d7945bd6}", + "id": "{d0ed60b8-9174-4c56-8e78-2c5399329ae0}", + "lastEdited": 1536171372916208, + "lastEditedBy": "{151cb20e-715a-4c80-aa0d-5b58b1c8a0c9}", "locked": true, "name": "Try Again Zone", "owningAvatarID": "{00000000-0000-0000-0000-000000000000}", "position": { - "blue": 4.225754737854004, - "green": 1.7677892446517944, - "red": 2.778148889541626, - "x": 2.778148889541626, - "y": 1.7677892446517944, - "z": 4.225754737854004 + "blue":4.015342712402344, + "green":1.649999976158142, + "red":2.00921893119812, + "x":2.00921893119812, + "y":1.649999976158142, + "z":4.015342712402344 }, "queryAACube": { - "scale": 2.4632973670959473, - "x": 1.5465002059936523, - "y": 0.5361405611038208, - "z": 2.9941060543060303 + "scale": 3.4421300888061523, + "x": 1.6001315116882324, + "y": -0.07100248336791992, + "z": 0.14220571517944336 }, "rotation": { - "w": 0.9743700623512268, + "w": 0.9914448857307434, "x": 0, - "y": -0.22495104372501373, + "y": -0.13052619993686676, "z": 0 }, "script": "https://hifi-content.s3.amazonaws.com/wayne/404redirectionScripts/zoneTryAgainEntityScript.js", diff --git a/libraries/networking/src/AddressManager.cpp b/libraries/networking/src/AddressManager.cpp index 1b258e14b1..6ebd516063 100644 --- a/libraries/networking/src/AddressManager.cpp +++ b/libraries/networking/src/AddressManager.cpp @@ -259,8 +259,8 @@ bool AddressManager::handleUrl(const QUrl& lookupUrl, LookupTrigger trigger) { UserActivityLogger::getInstance().wentTo(trigger, URL_TYPE_USER, lookupUrl.toString()); - // save the last visited domain URL. - _lastVisitedURL = lookupUrl; + // save the last visited domain URL. + _lastVisitedURL = lookupUrl; // in case we're failing to connect to where we thought this user was // store their username as previous lookup so we can refresh their location via API From dcf2e00bd7b38482fde9d69bf41d42ccfc72fd1f Mon Sep 17 00:00:00 2001 From: Alexia Mandeville Date: Wed, 5 Sep 2018 14:55:12 -0700 Subject: [PATCH 056/123] Adding placeholder text --- interface/resources/qml/LoginDialog/LinkAccountBody.qml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/interface/resources/qml/LoginDialog/LinkAccountBody.qml b/interface/resources/qml/LoginDialog/LinkAccountBody.qml index 4c6e5f6fce..55d157fdd8 100644 --- a/interface/resources/qml/LoginDialog/LinkAccountBody.qml +++ b/interface/resources/qml/LoginDialog/LinkAccountBody.qml @@ -124,6 +124,7 @@ Item { width: parent.width focus: true label: "Username or Email" + placeholderText: "Username or Email" activeFocusOnPress: true ShortcutText { @@ -151,8 +152,8 @@ Item { TextField { id: passwordField width: parent.width - label: "Password" + placeholderText: "Password" echoMode: showPassword.checked ? TextInput.Normal : TextInput.Password activeFocusOnPress: true From 1e697ad45f139d281012d87d4099d90b80f32625 Mon Sep 17 00:00:00 2001 From: Alexia Mandeville Date: Wed, 5 Sep 2018 16:25:18 -0700 Subject: [PATCH 057/123] Removing labels, adding flavor text, moving links --- .../qml/LoginDialog/LinkAccountBody.qml | 26 ++++++++++++++----- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/interface/resources/qml/LoginDialog/LinkAccountBody.qml b/interface/resources/qml/LoginDialog/LinkAccountBody.qml index 55d157fdd8..f6ad5385c0 100644 --- a/interface/resources/qml/LoginDialog/LinkAccountBody.qml +++ b/interface/resources/qml/LoginDialog/LinkAccountBody.qml @@ -87,6 +87,21 @@ Item { height: 48 } + FlavorText { + id: flavorTextContainer + anchors { + top: parent.top + margins: 0 + topMargin: hifi.dimensions.contentSpacing.y + } + + text: qsTr("Sign in to High Fidelity to make friends, get HFC, and buy interesting things on the Marketplace!") + wrapMode: Text.WordWrap + lineHeight: 2 + lineHeightMode: Text.ProportionalHeight + horizontalAlignment: Text.AlignHCenter + } + ShortcutText { id: mainTextContainer anchors { @@ -97,7 +112,6 @@ Item { } visible: false - text: qsTr("Username or password incorrect.") wrapMode: Text.WordWrap color: hifi.colors.redAccent @@ -123,15 +137,14 @@ Item { text: Settings.getValue("wallet/savedUsername", ""); width: parent.width focus: true - label: "Username or Email" placeholderText: "Username or Email" activeFocusOnPress: true ShortcutText { z: 10 anchors { - left: usernameField.left - top: usernameField.top + left: usernameField.right + top: usernameField.bottom leftMargin: usernameField.textFieldLabel.contentWidth + 10 topMargin: -19 } @@ -152,7 +165,6 @@ Item { TextField { id: passwordField width: parent.width - label: "Password" placeholderText: "Password" echoMode: showPassword.checked ? TextInput.Normal : TextInput.Password activeFocusOnPress: true @@ -160,8 +172,8 @@ Item { ShortcutText { z: 10 anchors { - left: passwordField.left - top: passwordField.top + left: passwordField.right + top: passwordField.bottom leftMargin: passwordField.textFieldLabel.contentWidth + 10 topMargin: -19 } From 901de120a694fef83871f48b5d07292da50dd88d Mon Sep 17 00:00:00 2001 From: Alexia Mandeville Date: Wed, 5 Sep 2018 17:20:49 -0700 Subject: [PATCH 058/123] Removing flavortext --- .../resources/qml/LoginDialog/LinkAccountBody.qml | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/interface/resources/qml/LoginDialog/LinkAccountBody.qml b/interface/resources/qml/LoginDialog/LinkAccountBody.qml index f6ad5385c0..423f6cc73b 100644 --- a/interface/resources/qml/LoginDialog/LinkAccountBody.qml +++ b/interface/resources/qml/LoginDialog/LinkAccountBody.qml @@ -86,21 +86,6 @@ Item { width: 48 height: 48 } - - FlavorText { - id: flavorTextContainer - anchors { - top: parent.top - margins: 0 - topMargin: hifi.dimensions.contentSpacing.y - } - - text: qsTr("Sign in to High Fidelity to make friends, get HFC, and buy interesting things on the Marketplace!") - wrapMode: Text.WordWrap - lineHeight: 2 - lineHeightMode: Text.ProportionalHeight - horizontalAlignment: Text.AlignHCenter - } ShortcutText { id: mainTextContainer From 78fa52285f25ebbd68f3318b724fe4bd8c8f726f Mon Sep 17 00:00:00 2001 From: Wayne Chen Date: Wed, 5 Sep 2018 23:48:21 -0700 Subject: [PATCH 059/123] adding show password toggle in textfield --- interface/resources/images/eyeClosed.svg | 5 +++ interface/resources/images/eyeOpen.svg | 4 +++ .../qml/LoginDialog/LinkAccountBody.qml | 36 +++++++++++++++---- 3 files changed, 38 insertions(+), 7 deletions(-) create mode 100644 interface/resources/images/eyeClosed.svg create mode 100644 interface/resources/images/eyeOpen.svg diff --git a/interface/resources/images/eyeClosed.svg b/interface/resources/images/eyeClosed.svg new file mode 100644 index 0000000000..6719471b3d --- /dev/null +++ b/interface/resources/images/eyeClosed.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/interface/resources/images/eyeOpen.svg b/interface/resources/images/eyeOpen.svg new file mode 100644 index 0000000000..ec5ceb5238 --- /dev/null +++ b/interface/resources/images/eyeOpen.svg @@ -0,0 +1,4 @@ + + + + diff --git a/interface/resources/qml/LoginDialog/LinkAccountBody.qml b/interface/resources/qml/LoginDialog/LinkAccountBody.qml index 423f6cc73b..c40dff61ee 100644 --- a/interface/resources/qml/LoginDialog/LinkAccountBody.qml +++ b/interface/resources/qml/LoginDialog/LinkAccountBody.qml @@ -86,7 +86,7 @@ Item { width: 48 height: 48 } - + ShortcutText { id: mainTextContainer anchors { @@ -142,6 +142,7 @@ Item { onLinkActivated: loginDialog.openUrl(link) } + onFocusChanged: { root.text = ""; } @@ -151,7 +152,6 @@ Item { id: passwordField width: parent.width placeholderText: "Password" - echoMode: showPassword.checked ? TextInput.Normal : TextInput.Password activeFocusOnPress: true ShortcutText { @@ -177,12 +177,34 @@ Item { root.isPassword = true; } - Keys.onReturnPressed: linkAccountBody.login() - } + Image { + id: showPasswordImage + x: parent.width - 40 + height: parent.height + width: parent.width - (parent.width - 40) + source: "../../images/eyeOpen.svg" + } - CheckBox { - id: showPassword - text: "Show password" + Rectangle { + z: 10 + x: parent.width - 40 + width: parent.width - (parent.width - 40) + height: parent.height + color: "transparent" + MouseArea { + id: passwordFieldMouseArea + anchors.fill: parent + acceptedButtons: Qt.LeftButton + property bool showPassword: false + onClicked: { + showPassword = !showPassword; + passwordField.echoMode = showPassword ? TextInput.Normal : TextInput.Password; + showPasswordImage.source = showPassword ? "../../images/eyeClosed.svg" : "../../images/eyeOpen.svg"; + } + } + } + + Keys.onReturnPressed: linkAccountBody.login() } InfoItem { From 6d055ba1360e492183d5aa692af7182a415a018c Mon Sep 17 00:00:00 2001 From: Wayne Chen Date: Wed, 5 Sep 2018 23:49:49 -0700 Subject: [PATCH 060/123] changing sign up label --- interface/resources/qml/LoginDialog/LinkAccountBody.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/resources/qml/LoginDialog/LinkAccountBody.qml b/interface/resources/qml/LoginDialog/LinkAccountBody.qml index c40dff61ee..aed34609e4 100644 --- a/interface/resources/qml/LoginDialog/LinkAccountBody.qml +++ b/interface/resources/qml/LoginDialog/LinkAccountBody.qml @@ -254,7 +254,7 @@ Item { RalewaySemiBold { size: hifi.fontSizes.inputLabel anchors.verticalCenter: parent.verticalCenter - text: qsTr("Don't have an account?") + text: qsTr("New to High Fidelity?") } Button { From 3f1eba418dd210c6435af80df009b460dcb5f185 Mon Sep 17 00:00:00 2001 From: Wayne Chen Date: Thu, 6 Sep 2018 00:07:23 -0700 Subject: [PATCH 061/123] modifying location of links for user/pw --- .../qml/LoginDialog/LinkAccountBody.qml | 68 +++++++++---------- 1 file changed, 31 insertions(+), 37 deletions(-) diff --git a/interface/resources/qml/LoginDialog/LinkAccountBody.qml b/interface/resources/qml/LoginDialog/LinkAccountBody.qml index aed34609e4..caf5ce0e53 100644 --- a/interface/resources/qml/LoginDialog/LinkAccountBody.qml +++ b/interface/resources/qml/LoginDialog/LinkAccountBody.qml @@ -116,7 +116,6 @@ Item { } spacing: 2 * hifi.dimensions.contentSpacing.y - TextField { id: usernameField text: Settings.getValue("wallet/savedUsername", ""); @@ -125,28 +124,25 @@ Item { placeholderText: "Username or Email" activeFocusOnPress: true - ShortcutText { - z: 10 - anchors { - left: usernameField.right - top: usernameField.bottom - leftMargin: usernameField.textFieldLabel.contentWidth + 10 - topMargin: -19 - } - - text: "Forgot Username?" - - verticalAlignment: Text.AlignVCenter - horizontalAlignment: Text.AlignHCenter - linkColor: hifi.colors.blueAccent - - onLinkActivated: loginDialog.openUrl(link) - } - onFocusChanged: { root.text = ""; } } + ShortcutText { + z: 10 + anchors { + leftMargin: usernameField.textFieldLabel.contentWidth + 10 + topMargin: -19 + } + + text: "Forgot Username?" + + verticalAlignment: Text.AlignVCenter + horizontalAlignment: Text.AlignRight + linkColor: hifi.colors.blueAccent + + onLinkActivated: loginDialog.openUrl(link) + } TextField { id: passwordField @@ -154,24 +150,6 @@ Item { placeholderText: "Password" activeFocusOnPress: true - ShortcutText { - z: 10 - anchors { - left: passwordField.right - top: passwordField.bottom - leftMargin: passwordField.textFieldLabel.contentWidth + 10 - topMargin: -19 - } - - text: "Forgot Password?" - - verticalAlignment: Text.AlignVCenter - horizontalAlignment: Text.AlignHCenter - linkColor: hifi.colors.blueAccent - - onLinkActivated: loginDialog.openUrl(link) - } - onFocusChanged: { root.text = ""; root.isPassword = true; @@ -207,6 +185,22 @@ Item { Keys.onReturnPressed: linkAccountBody.login() } + ShortcutText { + z: 10 + anchors { + leftMargin: passwordField.textFieldLabel.contentWidth + 10 + topMargin: -19 + } + + text: "Forgot Password?" + + verticalAlignment: Text.AlignVCenter + horizontalAlignment: Text.AlignHCenter + linkColor: hifi.colors.blueAccent + + onLinkActivated: loginDialog.openUrl(link) + } + InfoItem { id: additionalInformation From ec2d89fd25bd83128f413fca0b34207e74aabde6 Mon Sep 17 00:00:00 2001 From: Dante Ruiz Date: Thu, 6 Sep 2018 11:16:58 -0700 Subject: [PATCH 062/123] fixing toolbar disappering --- interface/src/Application.cpp | 2 -- scripts/system/interstitialPage.js | 7 ++++--- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 1868d6db4b..73e2fce956 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -3497,8 +3497,6 @@ void Application::setIsInterstitialMode(bool interstitialMode) { bool interstitialModeEnabled = menu->isOptionChecked("Enable Interstitial"); if (_interstitialMode != interstitialMode && interstitialModeEnabled) { _interstitialMode = interstitialMode; - - DependencyManager::get()->setPinned(_interstitialMode); emit interstitialModeChanged(_interstitialMode); } } diff --git a/scripts/system/interstitialPage.js b/scripts/system/interstitialPage.js index 86a9e744e9..c56e16d429 100644 --- a/scripts/system/interstitialPage.js +++ b/scripts/system/interstitialPage.js @@ -307,7 +307,6 @@ var THE_PLACE = "hifi://TheSpot-dev"; function clickedOnOverlay(overlayID, event) { - print(overlayID + " other: " + loadingToTheSpotID); if (loadingToTheSpotID === overlayID) { location.handleLookupString(THE_PLACE); } @@ -349,8 +348,10 @@ Overlays.editOverlay(loadingBarPlacard, properties); Overlays.editOverlay(loadingBarProgress, loadingBarProperties); - if (physicsEnabled && !HMD.active) { - toolbar.writeProperty("visible", true); + + Menu.setIsOptionChecked("Show Overlays", physicsEnabled); + if (!HMD.active) { + toolbar.writeProperty("visible", physicsEnabled); } resetValues(); From 385027321be1f58f7ee061adcdfa34438a22bff4 Mon Sep 17 00:00:00 2001 From: Wayne Chen Date: Thu, 6 Sep 2018 11:18:35 -0700 Subject: [PATCH 063/123] fixing the eye open/closed pw image --- .../qml/LoginDialog/LinkAccountBody.qml | 23 ++++++++++++++----- 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/interface/resources/qml/LoginDialog/LinkAccountBody.qml b/interface/resources/qml/LoginDialog/LinkAccountBody.qml index caf5ce0e53..cc682aa1ba 100644 --- a/interface/resources/qml/LoginDialog/LinkAccountBody.qml +++ b/interface/resources/qml/LoginDialog/LinkAccountBody.qml @@ -129,6 +129,7 @@ Item { } } ShortcutText { + id: forgotUsernameShortcut z: 10 anchors { leftMargin: usernameField.textFieldLabel.contentWidth + 10 @@ -149,24 +150,26 @@ Item { width: parent.width placeholderText: "Password" activeFocusOnPress: true + echoMode: TextInput.Password onFocusChanged: { root.text = ""; root.isPassword = true; } - Image { id: showPasswordImage - x: parent.width - 40 - height: parent.height - width: parent.width - (parent.width - 40) + x: parent.width - ((parent.height) * 31 / 23) + y: (parent.height - (parent.height * 16 / 23)) / 2 + width: parent.width - (parent.width - (((parent.height) * 31/23))) + height: parent.height * 16 / 23 source: "../../images/eyeOpen.svg" } Rectangle { + id: showPasswordHitbox z: 10 - x: parent.width - 40 - width: parent.width - (parent.width - 40) + x: parent.width - (parent.height * 31/16) + width: parent.width - (parent.width - (parent.height * 31/16)) height: parent.height color: "transparent" MouseArea { @@ -178,6 +181,13 @@ Item { showPassword = !showPassword; passwordField.echoMode = showPassword ? TextInput.Normal : TextInput.Password; showPasswordImage.source = showPassword ? "../../images/eyeClosed.svg" : "../../images/eyeOpen.svg"; + showPasswordImage.width = passwordField.width - (passwordField.width - (passwordField.height * 31/23)); + showPasswordImage.x = -(showPasswordImage.width - passwordField.width); + showPasswordImage.height = showPassword ? passwordField.height : passwordField.height * 16 / 23; + showPasswordImage.y = showPassword ? 0 : (passwordField.height - showPasswordImage.height) / 2; + showPasswordHitbox.width = showPasswordImage.width; + showPasswordHitbox.x = showPasswordImage.x; + } } } @@ -186,6 +196,7 @@ Item { } ShortcutText { + id: forgotPasswordShortcut z: 10 anchors { leftMargin: passwordField.textFieldLabel.contentWidth + 10 From a5038850f17af34940c3ed15fc38b335d74b8c1f Mon Sep 17 00:00:00 2001 From: Wayne Chen Date: Thu, 6 Sep 2018 11:37:35 -0700 Subject: [PATCH 064/123] right align forgot user/pw shortcuts --- interface/resources/qml/LoginDialog/LinkAccountBody.qml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/interface/resources/qml/LoginDialog/LinkAccountBody.qml b/interface/resources/qml/LoginDialog/LinkAccountBody.qml index cc682aa1ba..902466270f 100644 --- a/interface/resources/qml/LoginDialog/LinkAccountBody.qml +++ b/interface/resources/qml/LoginDialog/LinkAccountBody.qml @@ -143,6 +143,9 @@ Item { linkColor: hifi.colors.blueAccent onLinkActivated: loginDialog.openUrl(link) + Component.onCompleted: { + forgotUsernameShortcut.x = root.implicitWidth - forgotUsernameShortcut.width; + } } TextField { @@ -210,6 +213,9 @@ Item { linkColor: hifi.colors.blueAccent onLinkActivated: loginDialog.openUrl(link) + Component.onCompleted: { + forgotPasswordShortcut.x = root.implicitWidth - forgotPasswordShortcut.width; + } } InfoItem { From 6ac38190c1db0150dca9acd423cbb3dd7f80add6 Mon Sep 17 00:00:00 2001 From: David Back Date: Thu, 6 Sep 2018 12:23:38 -0700 Subject: [PATCH 065/123] tweak scaling multiple --- scripts/system/libraries/entitySelectionTool.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/system/libraries/entitySelectionTool.js b/scripts/system/libraries/entitySelectionTool.js index 2478160293..945f6a88d7 100644 --- a/scripts/system/libraries/entitySelectionTool.js +++ b/scripts/system/libraries/entitySelectionTool.js @@ -437,7 +437,7 @@ SelectionDisplay = (function() { var STRETCH_CUBE_CAMERA_DISTANCE_MULTIPLE = 0.02; var STRETCH_MINIMUM_DIMENSION = 0.001; var STRETCH_ALL_MINIMUM_DIMENSION = 0.01; - var STRETCH_DIRECTION_ALL_CAMERA_DISTANCE_MULTIPLE = 6; + var STRETCH_DIRECTION_ALL_CAMERA_DISTANCE_MULTIPLE = 2; var STRETCH_PANEL_WIDTH = 0.01; var SCALE_EDGE_OFFSET = 0.5; From 00e10ad684f5823e571c16e9e5e4f536877341ff Mon Sep 17 00:00:00 2001 From: Alexia Mandeville Date: Thu, 6 Sep 2018 14:05:51 -0700 Subject: [PATCH 066/123] Updating sign up text, moving forgotten info links --- .../resources/qml/LoginDialog/LinkAccountBody.qml | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/interface/resources/qml/LoginDialog/LinkAccountBody.qml b/interface/resources/qml/LoginDialog/LinkAccountBody.qml index 423f6cc73b..783027761a 100644 --- a/interface/resources/qml/LoginDialog/LinkAccountBody.qml +++ b/interface/resources/qml/LoginDialog/LinkAccountBody.qml @@ -128,9 +128,8 @@ Item { ShortcutText { z: 10 anchors { - left: usernameField.right - top: usernameField.bottom - leftMargin: usernameField.textFieldLabel.contentWidth + 10 + right: usernameField.right + top: usernameField.top topMargin: -19 } @@ -157,9 +156,8 @@ Item { ShortcutText { z: 10 anchors { - left: passwordField.right - top: passwordField.bottom - leftMargin: passwordField.textFieldLabel.contentWidth + 10 + right: passwordField.right + top: passwordField.top topMargin: -19 } @@ -232,7 +230,7 @@ Item { RalewaySemiBold { size: hifi.fontSizes.inputLabel anchors.verticalCenter: parent.verticalCenter - text: qsTr("Don't have an account?") + text: qsTr("New to High Fidelity?") } Button { From aabfda6eb5a90072e7c2f84c8e032ed4f4322f9c Mon Sep 17 00:00:00 2001 From: Alexia Mandeville Date: Thu, 6 Sep 2018 14:16:42 -0700 Subject: [PATCH 067/123] Adding descriptive text --- .../qml/LoginDialog/LinkAccountBody.qml | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/interface/resources/qml/LoginDialog/LinkAccountBody.qml b/interface/resources/qml/LoginDialog/LinkAccountBody.qml index 783027761a..60c7a26e89 100644 --- a/interface/resources/qml/LoginDialog/LinkAccountBody.qml +++ b/interface/resources/qml/LoginDialog/LinkAccountBody.qml @@ -87,6 +87,22 @@ Item { height: 48 } + ShortcutText { + id: flavorText + anchors { + top: parent.top + left: parent.left + margins: 0 + topMargin: hifi.dimensions.contentSpacing.y + } + + text: qsTr("Sign in to High Fidelity to make friends, get HFC, and buy interesting things on the Marketplace!") + wrapMode: Text.WordWrap + lineHeight: 1 + lineHeightMode: Text.ProportionalHeight + horizontalAlignment: Text.AlignHCenter + } + ShortcutText { id: mainTextContainer anchors { From 98dafa3b67ca6e87432076c4b9c43778b31741fc Mon Sep 17 00:00:00 2001 From: Dante Ruiz Date: Thu, 6 Sep 2018 14:31:49 -0700 Subject: [PATCH 068/123] fix overlayParentID --- scripts/system/interstitialPage.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/scripts/system/interstitialPage.js b/scripts/system/interstitialPage.js index c56e16d429..c95845656c 100644 --- a/scripts/system/interstitialPage.js +++ b/scripts/system/interstitialPage.js @@ -419,6 +419,10 @@ }); MyAvatar.sensorToWorldScaleChanged.connect(scaleInterstitialPage); + MyAvatar.sessionUUIDChanged.connect(function() { + var avatarSessionUUID = MyAvatar.sessionUUID; + Overlays.editOverlay(loadingSphereID, { parentID: avatarSessionUUID }); + }); var toggle = true; if (DEBUG) { From 3d75d4726af0ce63318d1a40ac500374c1260c5d Mon Sep 17 00:00:00 2001 From: David Back Date: Thu, 6 Sep 2018 16:04:59 -0700 Subject: [PATCH 069/123] scale invertly once passing minimum --- .../system/libraries/entitySelectionTool.js | 28 +++++-------------- 1 file changed, 7 insertions(+), 21 deletions(-) diff --git a/scripts/system/libraries/entitySelectionTool.js b/scripts/system/libraries/entitySelectionTool.js index 945f6a88d7..5b82b7d38b 100644 --- a/scripts/system/libraries/entitySelectionTool.js +++ b/scripts/system/libraries/entitySelectionTool.js @@ -2283,39 +2283,25 @@ SelectionDisplay = (function() { var changeInDimensions = Vec3.multiply(NEGATE_VECTOR, vec3Mult(localSigns, vector)); + var newDimensions; if (proportional) { var viewportDimensions = Controller.getViewportDimensions(); var mouseXDifference = (event.x - beginMouseEvent.x) / viewportDimensions.x; var mouseYDifference = (beginMouseEvent.y - event.y) / viewportDimensions.y; var mouseDifference = mouseXDifference + mouseYDifference; - changeInDimensions = { x:mouseDifference, y:mouseDifference, z:mouseDifference }; var toCameraDistance = getDistanceToCamera(position); var dimensionsMultiple = toCameraDistance * STRETCH_DIRECTION_ALL_CAMERA_DISTANCE_MULTIPLE; - changeInDimensions = Vec3.multiply(changeInDimensions, dimensionsMultiple); - } - - var newDimensions; - if (proportional) { - var absoluteX = Math.abs(changeInDimensions.x); - var absoluteY = Math.abs(changeInDimensions.y); - var absoluteZ = Math.abs(changeInDimensions.z); - var percentChange = 0; - if (absoluteX > absoluteY && absoluteX > absoluteZ) { - percentChange = changeInDimensions.x / initialProperties.dimensions.x; - percentChange = changeInDimensions.x / initialDimensions.x; - } else if (absoluteY > absoluteZ) { - percentChange = changeInDimensions.y / initialProperties.dimensions.y; - percentChange = changeInDimensions.y / initialDimensions.y; - } else { - percentChange = changeInDimensions.z / initialProperties.dimensions.z; - percentChange = changeInDimensions.z / initialDimensions.z; - } + var dimensionChange = mouseDifference * dimensionsMultiple; + percentChange = dimensionChange / initialDimensions.z; percentChange += 1.0; newDimensions = Vec3.multiply(percentChange, initialDimensions); + newDimensions.x = Math.abs(newDimensions.x); + newDimensions.y = Math.abs(newDimensions.y); + newDimensions.z = Math.abs(newDimensions.z); } else { newDimensions = Vec3.sum(initialDimensions, changeInDimensions); } - + var minimumDimension = directionEnum === STRETCH_DIRECTION.ALL ? STRETCH_ALL_MINIMUM_DIMENSION : STRETCH_MINIMUM_DIMENSION; if (newDimensions.x < minimumDimension) { From 8e5f5cc7965a8a59eab894451ec2a54d5174a568 Mon Sep 17 00:00:00 2001 From: Alexia Mandeville Date: Thu, 6 Sep 2018 16:16:43 -0700 Subject: [PATCH 070/123] Moving forgotten links --- interface/resources/qml/LoginDialog/LinkAccountBody.qml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/interface/resources/qml/LoginDialog/LinkAccountBody.qml b/interface/resources/qml/LoginDialog/LinkAccountBody.qml index 60c7a26e89..d2a97874b1 100644 --- a/interface/resources/qml/LoginDialog/LinkAccountBody.qml +++ b/interface/resources/qml/LoginDialog/LinkAccountBody.qml @@ -145,7 +145,7 @@ Item { z: 10 anchors { right: usernameField.right - top: usernameField.top + top: usernameField.bottom topMargin: -19 } @@ -173,7 +173,7 @@ Item { z: 10 anchors { right: passwordField.right - top: passwordField.top + top: passwordField.bottom topMargin: -19 } From 2f9119529a67209d0adcfda189ddd6859d52a80f Mon Sep 17 00:00:00 2001 From: Dante Ruiz Date: Thu, 6 Sep 2018 17:06:17 -0700 Subject: [PATCH 071/123] editing the interstitial page --- interface/src/Application.cpp | 7 ++----- interface/src/Menu.cpp | 1 - scripts/defaultScripts.js | 3 ++- scripts/system/interstitialPage.js | 30 ++++++++++++++++-------------- 4 files changed, 20 insertions(+), 21 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 73e2fce956..15416b26cb 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -3488,14 +3488,11 @@ bool Application::isServerlessMode() const { } bool Application::isInterstitialMode() const { - bool interstitialModeEnabled = Menu::getInstance()->isOptionChecked("Enable Interstitial"); - return interstitialModeEnabled ? _interstitialMode : false; + return _interstitialMode; } void Application::setIsInterstitialMode(bool interstitialMode) { - auto menu = Menu::getInstance(); - bool interstitialModeEnabled = menu->isOptionChecked("Enable Interstitial"); - if (_interstitialMode != interstitialMode && interstitialModeEnabled) { + if (_interstitialMode != interstitialMode) { _interstitialMode = interstitialMode; emit interstitialModeChanged(_interstitialMode); } diff --git a/interface/src/Menu.cpp b/interface/src/Menu.cpp index 15898a73b1..a6ba983ab5 100644 --- a/interface/src/Menu.cpp +++ b/interface/src/Menu.cpp @@ -787,7 +787,6 @@ Menu::Menu() { // Developer > Show Overlays addCheckableActionToQMenuAndActionHash(developerMenu, MenuOption::Overlays, 0, true); - addCheckableActionToQMenuAndActionHash(developerMenu, "Enable Interstitial", 0, false); #if 0 /// -------------- REMOVED FOR NOW -------------- addDisabledActionAndSeparator(navigateMenu, "History"); diff --git a/scripts/defaultScripts.js b/scripts/defaultScripts.js index c333a0c8c2..31510831c8 100644 --- a/scripts/defaultScripts.js +++ b/scripts/defaultScripts.js @@ -34,7 +34,8 @@ var DEFAULT_SCRIPTS_COMBINED = [ "system/emote.js" ]; var DEFAULT_SCRIPTS_SEPARATE = [ - "system/controllers/controllerScripts.js" + "system/controllers/controllerScripts.js", + "system/interstitialPage.js" //"system/chat.js" ]; diff --git a/scripts/system/interstitialPage.js b/scripts/system/interstitialPage.js index c95845656c..aa84fed476 100644 --- a/scripts/system/interstitialPage.js +++ b/scripts/system/interstitialPage.js @@ -14,8 +14,9 @@ (function() { Script.include("/~/system/libraries/Xform.js"); - var DEBUG = false; - var MAX_X_SIZE = 3.8; + var DEBUG = true; + var MIN_LOADING_PROGRESS = 3.6; + var TOTAL_LOADING_PROGRESS = 3.8; var EPSILON = 0.01; var isVisible = false; var VOLUME = 0.4; @@ -55,7 +56,7 @@ "Tip: Log in to make friends, visit new domains, and save avatars!" ]; - var DEFAULT_DIMENSIONS = { x: 20, y: 20, z: 20 }; + var DEFAULT_DIMENSIONS = { x: 24, y: 24, z: 24 }; var loadingSphereID = Overlays.addOverlay("model", { name: "Loading-Sphere", @@ -87,10 +88,10 @@ var domainName = ""; var domainNameTextID = Overlays.addOverlay("text3d", { name: "Loading-Destination-Card-Text", - localPosition: { x: 0.0, y: 0.8, z: 0.0 }, + localPosition: { x: 0.0, y: 0.8, z: -0.001 }, text: domainName, textAlpha: 1, - backgroundAlpha: 0, + backgroundAlpha: 1, lineHeight: 0.42, visible: isVisible, ignoreRayIntersection: true, @@ -106,9 +107,10 @@ localPosition: { x: 0.0, y: 0.32, z: 0.0 }, text: domainText, textAlpha: 1, - backgroundAlpha: 0, + backgroundAlpha: 1, lineHeight: 0.13, visible: isVisible, + backgroundAlpha: 0, ignoreRayIntersection: true, drawInFront: true, grabbable: false, @@ -123,7 +125,7 @@ localPosition: { x: 0.0 , y: -1.6, z: 0.0 }, text: toolTip, textAlpha: 1, - backgroundAlpha: 0, + backgroundAlpha: 1, lineHeight: 0.13, visible: isVisible, ignoreRayIntersection: true, @@ -248,7 +250,6 @@ } function domainChanged(domain) { - print("domain changed: " + domain); if (domain !== currentDomain) { MyAvatar.restoreAnimation(); var name = location.placename; @@ -272,7 +273,6 @@ if (data.status === "success") { var domainInfo = data.data; var domainDescriptionText = domainInfo.place.description; - print("domainText: " + domainDescriptionText); var leftMargin = getLeftMargin(domainDescription, domainDescriptionText); var domainDescriptionProperties = { text: domainDescriptionText, @@ -381,18 +381,18 @@ var domainLoadingProgressPercentage = Window.domainLoadingProgress(); - var progress = MAX_X_SIZE * domainLoadingProgressPercentage; + var progress = MIN_LOADING_PROGRESS * domainLoadingProgressPercentage; if (progress >= target) { target = progress; } - if ((physicsEnabled && (currentProgress < MAX_X_SIZE))) { - target = MAX_X_SIZE; + if ((physicsEnabled && (currentProgress < TOTAL_LOADING_PROGRESS))) { + target = TOTAL_LOADING_PROGRESS; } currentProgress = lerp(currentProgress, target, 0.2); var properties = { - localPosition: { x: (1.85 - (currentProgress / 2) - (-0.029 * (currentProgress / MAX_X_SIZE))), y: -0.935, z: 0.0 }, + localPosition: { x: (1.85 - (currentProgress / 2) - (-0.029 * (currentProgress / TOTAL_LOADING_PROGRESS))), y: -0.935, z: 0.0 }, dimensions: { x: currentProgress, y: 2.8 @@ -400,9 +400,10 @@ }; Overlays.editOverlay(loadingBarProgress, properties); - if ((physicsEnabled && (currentProgress >= (MAX_X_SIZE - EPSILON)))) { + if ((physicsEnabled && (currentProgress >= (TOTAL_LOADING_PROGRESS - EPSILON)))) { updateOverlays((physicsEnabled || connectionToDomainFailed)); endAudio(); + currentDomain = "no domain"; timer = null; return; } @@ -452,6 +453,7 @@ renderViewTask.getConfig("LightingModel")["enableAmbientLight"] = true; renderViewTask.getConfig("LightingModel")["enableDirectionalLight"] = true; renderViewTask.getConfig("LightingModel")["enablePointLight"] = true; + Menu.setIsOptionChecked("Show Overlays", physicsEnabled); if (!HMD.active) { toolbar.writeProperty("visible", true); } From e76ebf7a0b8a4207436c04d7a30aef1d14919b1b Mon Sep 17 00:00:00 2001 From: Wayne Chen Date: Thu, 6 Sep 2018 17:29:16 -0700 Subject: [PATCH 072/123] changing location of shortcuts --- .../LoginDialog/+android/LinkAccountBody.qml | 40 ++++----- .../qml/LoginDialog/LinkAccountBody.qml | 87 ++++++++++--------- 2 files changed, 66 insertions(+), 61 deletions(-) diff --git a/interface/resources/qml/LoginDialog/+android/LinkAccountBody.qml b/interface/resources/qml/LoginDialog/+android/LinkAccountBody.qml index bf7807c85d..96b638c911 100644 --- a/interface/resources/qml/LoginDialog/+android/LinkAccountBody.qml +++ b/interface/resources/qml/LoginDialog/+android/LinkAccountBody.qml @@ -117,27 +117,27 @@ Item { } spacing: hifi.dimensions.contentSpacing.y / 2 - TextField { - id: usernameField - anchors { - horizontalCenter: parent.horizontalCenter - } - width: 1080 - placeholderText: qsTr("Username or Email") + TextField { + id: usernameField + anchors { + horizontalCenter: parent.horizontalCenter } + width: 1080 + placeholderText: qsTr("Username or Email") + } - TextField { - id: passwordField - anchors { - horizontalCenter: parent.horizontalCenter - } - width: 1080 - - placeholderText: qsTr("Password") - echoMode: TextInput.Password - - Keys.onReturnPressed: linkAccountBody.login() + TextField { + id: passwordField + anchors { + horizontalCenter: parent.horizontalCenter } + width: 1080 + + placeholderText: qsTr("Password") + echoMode: TextInput.Password + + Keys.onReturnPressed: linkAccountBody.login() + } } InfoItem { @@ -176,7 +176,7 @@ Item { anchors { left: parent.left top: form.bottom - topMargin: hifi.dimensions.contentSpacing.y / 2 + topMargin: hifi.dimensions.contentSpacing.y / 2 } spacing: hifi.dimensions.contentSpacing.x @@ -201,7 +201,7 @@ Item { anchors { right: parent.right top: form.bottom - topMargin: hifi.dimensions.contentSpacing.y / 2 + topMargin: hifi.dimensions.contentSpacing.y / 2 } spacing: hifi.dimensions.contentSpacing.x onHeightChanged: d.resize(); onWidthChanged: d.resize(); diff --git a/interface/resources/qml/LoginDialog/LinkAccountBody.qml b/interface/resources/qml/LoginDialog/LinkAccountBody.qml index 902466270f..2274d88e04 100644 --- a/interface/resources/qml/LoginDialog/LinkAccountBody.qml +++ b/interface/resources/qml/LoginDialog/LinkAccountBody.qml @@ -15,13 +15,14 @@ import QtQuick.Controls.Styles 1.4 as OriginalStyles import "../controls-uit" import "../styles-uit" - Item { id: linkAccountBody clip: true height: root.pane.height width: root.pane.width property bool failAfterSignUp: false + property var locale: Qt.locale() + property string dateTimeString function login() { mainTextContainer.visible = false @@ -124,29 +125,27 @@ Item { placeholderText: "Username or Email" activeFocusOnPress: true + ShortcutText { + z: 10 + y: usernameField.height + anchors { + right: usernameField.right + topMargin: -19 + } + + text: "Forgot Username?" + + verticalAlignment: Text.AlignVCenter + horizontalAlignment: Text.AlignHCenter + linkColor: hifi.colors.blueAccent + + onLinkActivated: loginDialog.openUrl(link) + } + onFocusChanged: { root.text = ""; } } - ShortcutText { - id: forgotUsernameShortcut - z: 10 - anchors { - leftMargin: usernameField.textFieldLabel.contentWidth + 10 - topMargin: -19 - } - - text: "Forgot Username?" - - verticalAlignment: Text.AlignVCenter - horizontalAlignment: Text.AlignRight - linkColor: hifi.colors.blueAccent - - onLinkActivated: loginDialog.openUrl(link) - Component.onCompleted: { - forgotUsernameShortcut.x = root.implicitWidth - forgotUsernameShortcut.width; - } - } TextField { id: passwordField @@ -154,11 +153,30 @@ Item { placeholderText: "Password" activeFocusOnPress: true echoMode: TextInput.Password + onHeightChanged: d.resize(); onWidthChanged: d.resize(); + + ShortcutText { + id: forgotPasswordShortcut + y: passwordField.height + z: 10 + anchors { + right: passwordField.right + } + + text: "Forgot Password?" + + verticalAlignment: Text.AlignVCenter + horizontalAlignment: Text.AlignHCenter + linkColor: hifi.colors.blueAccent + + onLinkActivated: loginDialog.openUrl(link) + } onFocusChanged: { root.text = ""; root.isPassword = true; } + Image { id: showPasswordImage x: parent.width - ((parent.height) * 31 / 23) @@ -190,7 +208,6 @@ Item { showPasswordImage.y = showPassword ? 0 : (passwordField.height - showPasswordImage.height) / 2; showPasswordHitbox.width = showPasswordImage.width; showPasswordHitbox.x = showPasswordImage.x; - } } } @@ -198,26 +215,6 @@ Item { Keys.onReturnPressed: linkAccountBody.login() } - ShortcutText { - id: forgotPasswordShortcut - z: 10 - anchors { - leftMargin: passwordField.textFieldLabel.contentWidth + 10 - topMargin: -19 - } - - text: "Forgot Password?" - - verticalAlignment: Text.AlignVCenter - horizontalAlignment: Text.AlignHCenter - linkColor: hifi.colors.blueAccent - - onLinkActivated: loginDialog.openUrl(link) - Component.onCompleted: { - forgotPasswordShortcut.x = root.implicitWidth - forgotPasswordShortcut.width; - } - } - InfoItem { id: additionalInformation @@ -304,6 +301,14 @@ Item { } usernameField.forceActiveFocus(); + + var data = { + "date": new Date().toLocaleString(), + }; + print(new Date().toLocaleString()); + print(model.sessionId); + + //UserActivityLogger.logAction("login_screen_shown", ) } Connections { From 45a99a9244679da6d30ba489b6a225a0be4ad1d4 Mon Sep 17 00:00:00 2001 From: Dante Ruiz Date: Thu, 6 Sep 2018 17:55:10 -0700 Subject: [PATCH 073/123] fixing some bugs --- scripts/system/interstitialPage.js | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/scripts/system/interstitialPage.js b/scripts/system/interstitialPage.js index aa84fed476..1cc048ca99 100644 --- a/scripts/system/interstitialPage.js +++ b/scripts/system/interstitialPage.js @@ -14,7 +14,7 @@ (function() { Script.include("/~/system/libraries/Xform.js"); - var DEBUG = true; + var DEBUG = false; var MIN_LOADING_PROGRESS = 3.6; var TOTAL_LOADING_PROGRESS = 3.8; var EPSILON = 0.01; @@ -410,8 +410,21 @@ timer = Script.setTimeout(update, BASIC_TIMER_INTERVAL_MS); } - + var whiteColor = {red: 255, green: 255, blue: 255}; + var greyColor = {red: 125, green: 125, blue: 125}; Overlays.mouseReleaseOnOverlay.connect(clickedOnOverlay); + Overlays.hoverEnterOverlay.connect(function(overlayID, event) { + if (overlayID === loadingToTheSpotID) { + Overlays.editOverlay(loadingToTheSpotID, { color: greyColor}); + } + }); + + Overlays.hoverLeaveOverlay.connect(function(overlayID, event) { + if (overlayID === loadingToTheSpotID) { + Overlays.editOverlay(loadingToTheSpotID, { color: whiteColor}); + } + }); + location.hostChanged.connect(domainChanged); location.lookupResultsFinished.connect(function() { Script.setTimeout(function() { @@ -453,7 +466,7 @@ renderViewTask.getConfig("LightingModel")["enableAmbientLight"] = true; renderViewTask.getConfig("LightingModel")["enableDirectionalLight"] = true; renderViewTask.getConfig("LightingModel")["enablePointLight"] = true; - Menu.setIsOptionChecked("Show Overlays", physicsEnabled); + Menu.setIsOptionChecked("Show Overlays", true); if (!HMD.active) { toolbar.writeProperty("visible", true); } From 2443723a2bfc324d69e5270e062e699a299c4177 Mon Sep 17 00:00:00 2001 From: Alexia Mandeville Date: Thu, 6 Sep 2018 21:14:04 -0700 Subject: [PATCH 074/123] Removing margins, adding width attribute --- interface/resources/qml/LoginDialog/LinkAccountBody.qml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/interface/resources/qml/LoginDialog/LinkAccountBody.qml b/interface/resources/qml/LoginDialog/LinkAccountBody.qml index d2a97874b1..707c173382 100644 --- a/interface/resources/qml/LoginDialog/LinkAccountBody.qml +++ b/interface/resources/qml/LoginDialog/LinkAccountBody.qml @@ -97,6 +97,7 @@ Item { } text: qsTr("Sign in to High Fidelity to make friends, get HFC, and buy interesting things on the Marketplace!") + width: parent.width wrapMode: Text.WordWrap lineHeight: 1 lineHeightMode: Text.ProportionalHeight @@ -146,7 +147,6 @@ Item { anchors { right: usernameField.right top: usernameField.bottom - topMargin: -19 } text: "Forgot Username?" @@ -174,7 +174,6 @@ Item { anchors { right: passwordField.right top: passwordField.bottom - topMargin: -19 } text: "Forgot Password?" From 92f218ae29a24edb8ef7a56a62e83a7201998474 Mon Sep 17 00:00:00 2001 From: Alexia Mandeville Date: Thu, 6 Sep 2018 22:59:19 -0700 Subject: [PATCH 075/123] Adding margins to forgotten link text --- interface/resources/qml/LoginDialog/LinkAccountBody.qml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/interface/resources/qml/LoginDialog/LinkAccountBody.qml b/interface/resources/qml/LoginDialog/LinkAccountBody.qml index 707c173382..90437c008e 100644 --- a/interface/resources/qml/LoginDialog/LinkAccountBody.qml +++ b/interface/resources/qml/LoginDialog/LinkAccountBody.qml @@ -147,6 +147,7 @@ Item { anchors { right: usernameField.right top: usernameField.bottom + topMargin: 2 } text: "Forgot Username?" @@ -174,6 +175,7 @@ Item { anchors { right: passwordField.right top: passwordField.bottom + topMargin: 2 } text: "Forgot Password?" From 190a335c7118be684db1e86369759207e16cc29a Mon Sep 17 00:00:00 2001 From: Alexia Mandeville Date: Fri, 7 Sep 2018 00:01:00 -0700 Subject: [PATCH 076/123] Adding more margin to forgotten links --- interface/resources/qml/LoginDialog/LinkAccountBody.qml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/interface/resources/qml/LoginDialog/LinkAccountBody.qml b/interface/resources/qml/LoginDialog/LinkAccountBody.qml index 90437c008e..28523617b6 100644 --- a/interface/resources/qml/LoginDialog/LinkAccountBody.qml +++ b/interface/resources/qml/LoginDialog/LinkAccountBody.qml @@ -147,7 +147,7 @@ Item { anchors { right: usernameField.right top: usernameField.bottom - topMargin: 2 + topMargin: 4 } text: "Forgot Username?" @@ -175,7 +175,7 @@ Item { anchors { right: passwordField.right top: passwordField.bottom - topMargin: 2 + topMargin: 4 } text: "Forgot Password?" From d9495275cc8ff0dc701486349ecfe1c82cd75b11 Mon Sep 17 00:00:00 2001 From: Wayne Chen Date: Fri, 7 Sep 2018 11:22:31 -0700 Subject: [PATCH 077/123] adding cancel button and signed in checkbox --- interface/resources/qml/LoginDialog.qml | 1 + .../qml/LoginDialog/LinkAccountBody.qml | 23 ++++++++++++++----- .../resources/qml/windows/ModalFrame.qml | 18 +++++++++++++++ .../resources/qml/windows/ModalWindow.qml | 1 + 4 files changed, 37 insertions(+), 6 deletions(-) diff --git a/interface/resources/qml/LoginDialog.qml b/interface/resources/qml/LoginDialog.qml index e21e8b7354..336858502d 100644 --- a/interface/resources/qml/LoginDialog.qml +++ b/interface/resources/qml/LoginDialog.qml @@ -23,6 +23,7 @@ ModalWindow { objectName: "LoginDialog" implicitWidth: 520 implicitHeight: 320 + closeButtonVisible: true destroyOnCloseButton: true destroyOnHidden: true visible: true diff --git a/interface/resources/qml/LoginDialog/LinkAccountBody.qml b/interface/resources/qml/LoginDialog/LinkAccountBody.qml index 2274d88e04..4c9fe6ae94 100644 --- a/interface/resources/qml/LoginDialog/LinkAccountBody.qml +++ b/interface/resources/qml/LoginDialog/LinkAccountBody.qml @@ -234,6 +234,23 @@ Item { onHeightChanged: d.resize(); onWidthChanged: d.resize(); anchors.horizontalCenter: parent.horizontalCenter + CheckBox { + id: autoLogoutCheckbox; + checked: Settings.getValue("wallet/autoLogout", true); + text: "Keep me signed in" + boxSize: 20; + labelFontSize: 15; + color: hifi.colors.black; + onCheckedChanged: { + Settings.setValue("wallet/autoLogout", !checked); + if (checked) { + Settings.setValue("wallet/savedUsername", ""); + } else { + Settings.setValue("wallet/savedUsername", Account.username); + } + } + } + Button { id: linkAccountButton anchors.verticalCenter: parent.verticalCenter @@ -244,12 +261,6 @@ Item { onClicked: linkAccountBody.login() } - - Button { - anchors.verticalCenter: parent.verticalCenter - text: qsTr("Cancel") - onClicked: root.tryDestroy() - } } Row { diff --git a/interface/resources/qml/windows/ModalFrame.qml b/interface/resources/qml/windows/ModalFrame.qml index 211353b5f3..640069a0b3 100644 --- a/interface/resources/qml/windows/ModalFrame.qml +++ b/interface/resources/qml/windows/ModalFrame.qml @@ -94,5 +94,23 @@ Frame { color: hifi.colors.lightGray } } + + + GlyphButton { + id: closeButton + visible: window.closeButtonVisible + width: 30 + y: -hifi.dimensions.modalDialogTitleHeight + anchors { + top: parent.top + right: parent.right + topMargin: 10 + rightMargin: 10 + } + glyph: hifi.glyphs.close + onClicked: { + window.destroy(); + } + } } } diff --git a/interface/resources/qml/windows/ModalWindow.qml b/interface/resources/qml/windows/ModalWindow.qml index 2d56099051..75f5c2d646 100644 --- a/interface/resources/qml/windows/ModalWindow.qml +++ b/interface/resources/qml/windows/ModalWindow.qml @@ -19,6 +19,7 @@ ScrollingWindow { destroyOnHidden: true frame: ModalFrame { } + property bool closeButtonVisible: false property int colorScheme: hifi.colorSchemes.light property bool draggable: false From db96603cdabc35034aa393ed750952c854f618ce Mon Sep 17 00:00:00 2001 From: Wayne Chen Date: Fri, 7 Sep 2018 11:23:58 -0700 Subject: [PATCH 078/123] removing some unused properties --- interface/resources/qml/LoginDialog/LinkAccountBody.qml | 2 -- 1 file changed, 2 deletions(-) diff --git a/interface/resources/qml/LoginDialog/LinkAccountBody.qml b/interface/resources/qml/LoginDialog/LinkAccountBody.qml index 4c9fe6ae94..9bb40fd538 100644 --- a/interface/resources/qml/LoginDialog/LinkAccountBody.qml +++ b/interface/resources/qml/LoginDialog/LinkAccountBody.qml @@ -21,8 +21,6 @@ Item { height: root.pane.height width: root.pane.width property bool failAfterSignUp: false - property var locale: Qt.locale() - property string dateTimeString function login() { mainTextContainer.visible = false From 44d36ec622dd0fee044ebecac11d6c387d4721a6 Mon Sep 17 00:00:00 2001 From: Wayne Chen Date: Fri, 7 Sep 2018 11:31:29 -0700 Subject: [PATCH 079/123] wallet should save username when checked --- interface/resources/qml/LoginDialog/LinkAccountBody.qml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/interface/resources/qml/LoginDialog/LinkAccountBody.qml b/interface/resources/qml/LoginDialog/LinkAccountBody.qml index 9bb40fd538..ca81a6b870 100644 --- a/interface/resources/qml/LoginDialog/LinkAccountBody.qml +++ b/interface/resources/qml/LoginDialog/LinkAccountBody.qml @@ -242,9 +242,9 @@ Item { onCheckedChanged: { Settings.setValue("wallet/autoLogout", !checked); if (checked) { - Settings.setValue("wallet/savedUsername", ""); - } else { Settings.setValue("wallet/savedUsername", Account.username); + } else { + Settings.setValue("wallet/savedUsername", ""); } } } From 39041f294281f249386a63096faaff4195659924 Mon Sep 17 00:00:00 2001 From: Wayne Chen Date: Fri, 7 Sep 2018 11:36:21 -0700 Subject: [PATCH 080/123] fixing username field --- .../resources/qml/LoginDialog/LinkAccountBody.qml | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/interface/resources/qml/LoginDialog/LinkAccountBody.qml b/interface/resources/qml/LoginDialog/LinkAccountBody.qml index ca81a6b870..bc0b8fb2e0 100644 --- a/interface/resources/qml/LoginDialog/LinkAccountBody.qml +++ b/interface/resources/qml/LoginDialog/LinkAccountBody.qml @@ -242,9 +242,9 @@ Item { onCheckedChanged: { Settings.setValue("wallet/autoLogout", !checked); if (checked) { - Settings.setValue("wallet/savedUsername", Account.username); - } else { Settings.setValue("wallet/savedUsername", ""); + } else { + Settings.setValue("wallet/savedUsername", Account.username); } } } @@ -310,14 +310,6 @@ Item { } usernameField.forceActiveFocus(); - - var data = { - "date": new Date().toLocaleString(), - }; - print(new Date().toLocaleString()); - print(model.sessionId); - - //UserActivityLogger.logAction("login_screen_shown", ) } Connections { From adac872a117bb76f6330c1980bde0e7b1b5a112f Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Thu, 30 Aug 2018 15:10:05 -0700 Subject: [PATCH 081/123] clear other avatars in agent on avatar mixer disconnect --- interface/src/Application.cpp | 8 -------- interface/src/Application.h | 1 - interface/src/avatar/AvatarManager.h | 2 +- libraries/avatars/src/AvatarHashMap.cpp | 15 +++++++++++++++ libraries/avatars/src/AvatarHashMap.h | 2 ++ 5 files changed, 18 insertions(+), 10 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 40edcdbd76..4c4235a670 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -1192,7 +1192,6 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo connect(&domainHandler, SIGNAL(resetting()), SLOT(resettingDomain())); connect(&domainHandler, SIGNAL(connectedToDomain(QUrl)), SLOT(updateWindowTitle())); connect(&domainHandler, SIGNAL(disconnectedFromDomain()), SLOT(updateWindowTitle())); - connect(&domainHandler, &DomainHandler::disconnectedFromDomain, this, &Application::clearDomainAvatars); connect(&domainHandler, &DomainHandler::disconnectedFromDomain, this, [this]() { getOverlays().deleteOverlay(getTabletScreenID()); getOverlays().deleteOverlay(getTabletHomeButtonID()); @@ -6368,10 +6367,6 @@ void Application::clearDomainOctreeDetails() { getMyAvatar()->setAvatarEntityDataChanged(true); } -void Application::clearDomainAvatars() { - DependencyManager::get()->clearOtherAvatars(); -} - void Application::domainURLChanged(QUrl domainURL) { // disable physics until we have enough information about our new location to not cause craziness. resetPhysicsReadyInformation(); @@ -6459,9 +6454,6 @@ void Application::nodeKilled(SharedNodePointer node) { } else if (node->getType() == NodeType::EntityServer) { // we lost an entity server, clear all of the domain octree details clearDomainOctreeDetails(); - } else if (node->getType() == NodeType::AvatarMixer) { - // our avatar mixer has gone away - clear the hash of avatars - DependencyManager::get()->clearOtherAvatars(); } else if (node->getType() == NodeType::AssetServer) { // asset server going away - check if we have the asset browser showing diff --git a/interface/src/Application.h b/interface/src/Application.h index aa8323cd38..f988795bc6 100644 --- a/interface/src/Application.h +++ b/interface/src/Application.h @@ -437,7 +437,6 @@ private slots: void onDesktopRootContextCreated(QQmlContext* qmlContext); void showDesktop(); void clearDomainOctreeDetails(); - void clearDomainAvatars(); void onAboutToQuit(); void onPresent(quint32 frameCount); diff --git a/interface/src/avatar/AvatarManager.h b/interface/src/avatar/AvatarManager.h index bcdfc064bd..7e1e1f4ff1 100644 --- a/interface/src/avatar/AvatarManager.h +++ b/interface/src/avatar/AvatarManager.h @@ -93,7 +93,7 @@ public: void postUpdate(float deltaTime, const render::ScenePointer& scene); - void clearOtherAvatars(); + void clearOtherAvatars() override; void deleteAllAvatars(); void getObjectsToRemoveFromPhysics(VectorOfMotionStates& motionStates); diff --git a/libraries/avatars/src/AvatarHashMap.cpp b/libraries/avatars/src/AvatarHashMap.cpp index c1246866dc..0c5ca06989 100644 --- a/libraries/avatars/src/AvatarHashMap.cpp +++ b/libraries/avatars/src/AvatarHashMap.cpp @@ -112,6 +112,12 @@ AvatarHashMap::AvatarHashMap() { packetReceiver.registerListener(PacketType::BulkAvatarTraits, this, "processBulkAvatarTraits"); connect(nodeList.data(), &NodeList::uuidChanged, this, &AvatarHashMap::sessionUUIDChanged); + + connect(nodeList.data(), &NodeList::nodeKilled, this, [this](SharedNodePointer killedNode){ + if (killedNode->getType() == NodeType::AvatarMixer) { + clearOtherAvatars(); + } + }); } QVector AvatarHashMap::getAvatarIdentifiers() { @@ -427,3 +433,12 @@ void AvatarHashMap::sessionUUIDChanged(const QUuid& sessionUUID, const QUuid& ol emit avatarSessionChangedEvent(sessionUUID, oldUUID); } +void AvatarHashMap::clearOtherAvatars() { + QWriteLocker locker(&_hashLock); + + AvatarHash::iterator avatarIterator = _avatarHash.begin(); + while (avatarIterator != _avatarHash.end()) { + handleRemovedAvatar(*avatarIterator); + avatarIterator = _avatarHash.erase(avatarIterator); + } +} diff --git a/libraries/avatars/src/AvatarHashMap.h b/libraries/avatars/src/AvatarHashMap.h index 0f847b2a61..70d7f8c04d 100644 --- a/libraries/avatars/src/AvatarHashMap.h +++ b/libraries/avatars/src/AvatarHashMap.h @@ -101,6 +101,8 @@ public: void setReplicaCount(int count); int getReplicaCount() { return _replicas.getReplicaCount(); }; + virtual void clearOtherAvatars(); + signals: /**jsdoc From ff86e480baa26c02353ad20103a320605c18ca18 Mon Sep 17 00:00:00 2001 From: Wayne Chen Date: Mon, 10 Sep 2018 11:36:45 -0700 Subject: [PATCH 082/123] adding debug statement to check for window close --- interface/resources/qml/LoginDialog.qml | 7 ++++ .../qml/dialogs/TabletLoginDialog.qml | 6 ++++ .../networking/src/UserActivityLogger.cpp | 36 +++++++++---------- 3 files changed, 31 insertions(+), 18 deletions(-) diff --git a/interface/resources/qml/LoginDialog.qml b/interface/resources/qml/LoginDialog.qml index e21e8b7354..99c999249b 100644 --- a/interface/resources/qml/LoginDialog.qml +++ b/interface/resources/qml/LoginDialog.qml @@ -84,4 +84,11 @@ ModalWindow { break } } + Component.onDestruction: { +/* var data = { + "action": "userOptedOut" + }; + UserActivityLogger.logAction("LoginDialogAction", data); */ + print("destroyed"); + } } diff --git a/interface/resources/qml/dialogs/TabletLoginDialog.qml b/interface/resources/qml/dialogs/TabletLoginDialog.qml index c85b2b2ba0..3be4d8217d 100644 --- a/interface/resources/qml/dialogs/TabletLoginDialog.qml +++ b/interface/resources/qml/dialogs/TabletLoginDialog.qml @@ -173,4 +173,10 @@ TabletModalWindow { break } } + onDestroy: { + var data = { + "action": "userOptedOut" + }; + UserActivityLogger.logAction("LoginDialogAction", data); + } } diff --git a/libraries/networking/src/UserActivityLogger.cpp b/libraries/networking/src/UserActivityLogger.cpp index a5ee417939..c05daf0217 100644 --- a/libraries/networking/src/UserActivityLogger.cpp +++ b/libraries/networking/src/UserActivityLogger.cpp @@ -38,10 +38,10 @@ void UserActivityLogger::logAction(QString action, QJsonObject details, JSONCall if (_disabled.get()) { return; } - + auto accountManager = DependencyManager::get(); QHttpMultiPart* multipart = new QHttpMultiPart(QHttpMultiPart::FormDataType); - + // Adding the action name QHttpPart actionPart; actionPart.setHeader(QNetworkRequest::ContentDispositionHeader, "form-data; name=\"action_name\""); @@ -53,7 +53,7 @@ void UserActivityLogger::logAction(QString action, QJsonObject details, JSONCall elapsedPart.setHeader(QNetworkRequest::ContentDispositionHeader, "form-data; name=\"elapsed_ms\""); elapsedPart.setBody(QString::number(_timer.elapsed()).toLocal8Bit()); multipart->append(elapsedPart); - + // If there are action details, add them to the multipart if (!details.isEmpty()) { QHttpPart detailsPart; @@ -62,13 +62,13 @@ void UserActivityLogger::logAction(QString action, QJsonObject details, JSONCall detailsPart.setBody(QJsonDocument(details).toJson(QJsonDocument::Compact)); multipart->append(detailsPart); } - + // if no callbacks specified, call our owns if (params.isEmpty()) { params.callbackReceiver = this; params.errorCallbackMethod = "requestError"; } - + accountManager->sendRequest(USER_ACTIVITY_URL, AccountManagerAuth::Optional, QNetworkAccessManager::PostOperation, @@ -88,7 +88,7 @@ void UserActivityLogger::launch(QString applicationVersion, bool previousSession actionDetails.insert(VERSION_KEY, applicationVersion); actionDetails.insert(CRASH_KEY, previousSessionCrashed); actionDetails.insert(RUNTIME_KEY, previousSessionRuntime); - + logAction(ACTION_NAME, actionDetails); } @@ -105,9 +105,9 @@ void UserActivityLogger::changedDisplayName(QString displayName) { const QString ACTION_NAME = "changed_display_name"; QJsonObject actionDetails; const QString DISPLAY_NAME = "display_name"; - + actionDetails.insert(DISPLAY_NAME, displayName); - + logAction(ACTION_NAME, actionDetails); } @@ -116,10 +116,10 @@ void UserActivityLogger::changedModel(QString typeOfModel, QString modelURL) { QJsonObject actionDetails; const QString TYPE_OF_MODEL = "type_of_model"; const QString MODEL_URL = "model_url"; - + actionDetails.insert(TYPE_OF_MODEL, typeOfModel); actionDetails.insert(MODEL_URL, modelURL); - + logAction(ACTION_NAME, actionDetails); } @@ -127,9 +127,9 @@ void UserActivityLogger::changedDomain(QString domainURL) { const QString ACTION_NAME = "changed_domain"; QJsonObject actionDetails; const QString DOMAIN_URL = "domain_url"; - + actionDetails.insert(DOMAIN_URL, domainURL); - + logAction(ACTION_NAME, actionDetails); } @@ -151,10 +151,10 @@ void UserActivityLogger::connectedDevice(QString typeOfDevice, QString deviceNam QJsonObject actionDetails; const QString TYPE_OF_DEVICE = "type_of_device"; const QString DEVICE_NAME = "device_name"; - + actionDetails.insert(TYPE_OF_DEVICE, typeOfDevice); actionDetails.insert(DEVICE_NAME, deviceName); - + logAction(ACTION_NAME, actionDetails); } @@ -163,9 +163,9 @@ void UserActivityLogger::loadedScript(QString scriptName) { const QString ACTION_NAME = "loaded_script"; QJsonObject actionDetails; const QString SCRIPT_NAME = "script_name"; - + actionDetails.insert(SCRIPT_NAME, scriptName); - + logAction(ACTION_NAME, actionDetails); } @@ -199,10 +199,10 @@ void UserActivityLogger::wentTo(AddressManager::LookupTrigger lookupTrigger, QSt const QString TRIGGER_TYPE_KEY = "trigger"; const QString DESTINATION_TYPE_KEY = "destination_type"; const QString DESTINATION_NAME_KEY = "detination_name"; - + actionDetails.insert(TRIGGER_TYPE_KEY, trigger); actionDetails.insert(DESTINATION_TYPE_KEY, destinationType); actionDetails.insert(DESTINATION_NAME_KEY, destinationName); - + logAction(ACTION_NAME, actionDetails); } From e7616c7d34d431abdd1fe0874c44c8cf35aaba43 Mon Sep 17 00:00:00 2001 From: Wayne Chen Date: Mon, 10 Sep 2018 15:06:14 -0700 Subject: [PATCH 083/123] added logging + activity logging --- interface/resources/qml/LoginDialog.qml | 11 +++++---- .../qml/LoginDialog/LinkAccountBody.qml | 23 +++++++++++-------- .../qml/dialogs/TabletLoginDialog.qml | 2 +- .../resources/qml/windows/ModalFrame.qml | 1 + .../resources/qml/windows/ModalWindow.qml | 2 ++ interface/src/Application.cpp | 5 +++- interface/src/ui/LoginDialog.cpp | 5 ++++ interface/src/ui/LoginDialog.h | 5 ++++ 8 files changed, 37 insertions(+), 17 deletions(-) diff --git a/interface/resources/qml/LoginDialog.qml b/interface/resources/qml/LoginDialog.qml index d5db8f9fb1..6ad6cdf93d 100644 --- a/interface/resources/qml/LoginDialog.qml +++ b/interface/resources/qml/LoginDialog.qml @@ -86,10 +86,11 @@ ModalWindow { } } Component.onDestruction: { -/* var data = { - "action": "userOptedOut" - }; - UserActivityLogger.logAction("LoginDialogAction", data); */ - print("destroyed"); + if (closeButtonVisible && clickedCloseButton) { + var data = { + "action": "opted out" + }; + UserActivityLogger.logAction("encourageLoginDialog", data); + } } } diff --git a/interface/resources/qml/LoginDialog/LinkAccountBody.qml b/interface/resources/qml/LoginDialog/LinkAccountBody.qml index 6637a96fbb..d19837a023 100644 --- a/interface/resources/qml/LoginDialog/LinkAccountBody.qml +++ b/interface/resources/qml/LoginDialog/LinkAccountBody.qml @@ -195,22 +195,25 @@ Item { root.isPassword = true; } - Image { - id: showPasswordImage - x: parent.width - ((parent.height) * 31 / 23) - y: (parent.height - (parent.height * 16 / 23)) / 2 - width: parent.width - (parent.width - (((parent.height) * 31/23))) - height: parent.height * 16 / 23 - source: "../../images/eyeOpen.svg" - } - Rectangle { id: showPasswordHitbox z: 10 - x: parent.width - (parent.height * 31/16) + // x: parent.width - (parent.height * 31/16) + x: passwordField.width - ((passwordField.height) * 31 / 23) width: parent.width - (parent.width - (parent.height * 31/16)) + // width: passwordField.width - (passwordField.width - (((passwordField.height) * 31/23))) height: parent.height color: "transparent" + + Image { + id: showPasswordImage + // x: passwordField.width - ((passwordField.height) * 31 / 23) + y: (passwordField.height - (passwordField.height * 16 / 23)) / 2 + width: passwordField.width - (passwordField.width - (((passwordField.height) * 31/23))) + height: passwordField.height * 16 / 23 + source: "../../images/eyeOpen.svg" + } + MouseArea { id: passwordFieldMouseArea anchors.fill: parent diff --git a/interface/resources/qml/dialogs/TabletLoginDialog.qml b/interface/resources/qml/dialogs/TabletLoginDialog.qml index 3be4d8217d..c3889b6a30 100644 --- a/interface/resources/qml/dialogs/TabletLoginDialog.qml +++ b/interface/resources/qml/dialogs/TabletLoginDialog.qml @@ -173,7 +173,7 @@ TabletModalWindow { break } } - onDestroy: { + Component.onDestruction: { var data = { "action": "userOptedOut" }; diff --git a/interface/resources/qml/windows/ModalFrame.qml b/interface/resources/qml/windows/ModalFrame.qml index 820c04f500..cb23ccd5ad 100644 --- a/interface/resources/qml/windows/ModalFrame.qml +++ b/interface/resources/qml/windows/ModalFrame.qml @@ -110,6 +110,7 @@ Frame { glyph: hifi.glyphs.close size: 23 onClicked: { + window.clickedCloseButton = true; window.destroy(); } } diff --git a/interface/resources/qml/windows/ModalWindow.qml b/interface/resources/qml/windows/ModalWindow.qml index 75f5c2d646..ebd5293b0a 100644 --- a/interface/resources/qml/windows/ModalWindow.qml +++ b/interface/resources/qml/windows/ModalWindow.qml @@ -20,6 +20,8 @@ ScrollingWindow { frame: ModalFrame { } property bool closeButtonVisible: false + // only applicable for if close button is visible. + property bool clickedCloseButton: false property int colorScheme: hifi.colorSchemes.light property bool draggable: false diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 9a56a757dd..15545a0275 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -2308,8 +2308,11 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo connect(checkLoginTimer, &QTimer::timeout, this, []() { auto accountManager = DependencyManager::get(); auto dialogsManager = DependencyManager::get(); - if (!accountManager->isLoggedIn()) { + if (!accountManager->isLoggedIn() && !qApp->isHMDMode()) { dialogsManager->showLoginDialog(); + QJsonObject loginData = {}; + loginData["action"] = "login dialog shown"; + UserActivityLogger::getInstance().logAction("encourageLoginDialog", loginData); } }); checkLoginTimer->start(); diff --git a/interface/src/ui/LoginDialog.cpp b/interface/src/ui/LoginDialog.cpp index 8a40ee2f83..31a995c70b 100644 --- a/interface/src/ui/LoginDialog.cpp +++ b/interface/src/ui/LoginDialog.cpp @@ -28,6 +28,7 @@ #include "scripting/HMDScriptingInterface.h" HIFI_QML_DEF(LoginDialog) +Q_LOGGING_CATEGORY(login_dialog, "hifi.login.dialog") LoginDialog::LoginDialog(QQuickItem *parent) : OffscreenQmlDialog(parent) { auto accountManager = DependencyManager::get(); @@ -40,6 +41,10 @@ LoginDialog::LoginDialog(QQuickItem *parent) : OffscreenQmlDialog(parent) { } +LoginDialog::~LoginDialog() { + qCDebug(login_dialog) << "killing"; +} + void LoginDialog::showWithSelection() { auto tabletScriptingInterface = DependencyManager::get(); diff --git a/interface/src/ui/LoginDialog.h b/interface/src/ui/LoginDialog.h index ad8cab9699..210438b856 100644 --- a/interface/src/ui/LoginDialog.h +++ b/interface/src/ui/LoginDialog.h @@ -15,6 +15,9 @@ #define hifi_LoginDialog_h #include +#include + +Q_DECLARE_LOGGING_CATEGORY(login_dialog) class QNetworkReply; @@ -27,6 +30,8 @@ public: LoginDialog(QQuickItem* parent = nullptr); + virtual ~LoginDialog(); + static void showWithSelection(); signals: void handleLoginCompleted(); From 1ad3a09984e088d205bc2856f2fd512ca7ffb168 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 10 Sep 2018 16:09:21 -0700 Subject: [PATCH 084/123] CR changes --- .../system/libraries/entitySelectionTool.js | 145 +++++++++--------- 1 file changed, 73 insertions(+), 72 deletions(-) diff --git a/scripts/system/libraries/entitySelectionTool.js b/scripts/system/libraries/entitySelectionTool.js index 5b82b7d38b..05f5e41950 100644 --- a/scripts/system/libraries/entitySelectionTool.js +++ b/scripts/system/libraries/entitySelectionTool.js @@ -410,7 +410,7 @@ SelectionDisplay = (function() { var COLOR_RED = { red: 226, green: 51, blue: 77 }; var COLOR_HOVER = { red: 227, green: 227, blue: 227 }; var COLOR_ROTATE_CURRENT_RING = { red: 255, green: 99, blue: 9 }; - var COLOR_SCALE_EDGE = { red: 87, green: 87, blue: 87 }; + var COLOR_BOUNDING_EDGE = { red: 87, green: 87, blue: 87 }; var COLOR_SCALE_CUBE = { red: 106, green: 106, blue: 106 }; var COLOR_SCALE_CUBE_SELECTED = { red: 18, green: 18, blue: 18 }; @@ -440,7 +440,7 @@ SelectionDisplay = (function() { var STRETCH_DIRECTION_ALL_CAMERA_DISTANCE_MULTIPLE = 2; var STRETCH_PANEL_WIDTH = 0.01; - var SCALE_EDGE_OFFSET = 0.5; + var BOUNDING_EDGE_OFFSET = 0.5; var SCALE_CUBE_CAMERA_DISTANCE_MULTIPLE = 0.02; var CLONER_OFFSET = { x: 0.9, y: -0.9, z: 0.9 }; @@ -629,26 +629,26 @@ SelectionDisplay = (function() { borderSize: 1.4 }); - var handlePropertiesScaleEdge = { + var handlePropertiesBoundingEdge = { alpha: 1, - color: COLOR_SCALE_EDGE, + color: COLOR_BOUNDING_EDGE, visible: false, ignoreRayIntersection: true, drawInFront: true, lineWidth: 0.2 }; - var handleScaleTREdge = Overlays.addOverlay("line3d", handlePropertiesScaleEdge); - var handleScaleTLEdge = Overlays.addOverlay("line3d", handlePropertiesScaleEdge); - var handleScaleTFEdge = Overlays.addOverlay("line3d", handlePropertiesScaleEdge); - var handleScaleTNEdge = Overlays.addOverlay("line3d", handlePropertiesScaleEdge); - var handleScaleBREdge = Overlays.addOverlay("line3d", handlePropertiesScaleEdge); - var handleScaleBLEdge = Overlays.addOverlay("line3d", handlePropertiesScaleEdge); - var handleScaleBFEdge = Overlays.addOverlay("line3d", handlePropertiesScaleEdge); - var handleScaleBNEdge = Overlays.addOverlay("line3d", handlePropertiesScaleEdge); - var handleScaleNREdge = Overlays.addOverlay("line3d", handlePropertiesScaleEdge); - var handleScaleNLEdge = Overlays.addOverlay("line3d", handlePropertiesScaleEdge); - var handleScaleFREdge = Overlays.addOverlay("line3d", handlePropertiesScaleEdge); - var handleScaleFLEdge = Overlays.addOverlay("line3d", handlePropertiesScaleEdge); + var handleBoundingTREdge = Overlays.addOverlay("line3d", handlePropertiesBoundingEdge); + var handleBoundingTLEdge = Overlays.addOverlay("line3d", handlePropertiesBoundingEdge); + var handleBoundingTFEdge = Overlays.addOverlay("line3d", handlePropertiesBoundingEdge); + var handleBoundingTNEdge = Overlays.addOverlay("line3d", handlePropertiesBoundingEdge); + var handleBoundingBREdge = Overlays.addOverlay("line3d", handlePropertiesBoundingEdge); + var handleBoundingBLEdge = Overlays.addOverlay("line3d", handlePropertiesBoundingEdge); + var handleBoundingBFEdge = Overlays.addOverlay("line3d", handlePropertiesBoundingEdge); + var handleBoundingBNEdge = Overlays.addOverlay("line3d", handlePropertiesBoundingEdge); + var handleBoundingNREdge = Overlays.addOverlay("line3d", handlePropertiesBoundingEdge); + var handleBoundingNLEdge = Overlays.addOverlay("line3d", handlePropertiesBoundingEdge); + var handleBoundingFREdge = Overlays.addOverlay("line3d", handlePropertiesBoundingEdge); + var handleBoundingFLEdge = Overlays.addOverlay("line3d", handlePropertiesBoundingEdge); var handleCloner = Overlays.addOverlay("cube", { alpha: 1, @@ -736,18 +736,18 @@ SelectionDisplay = (function() { handleStretchYPanel, handleStretchZPanel, handleScaleCube, - handleScaleTREdge, - handleScaleTLEdge, - handleScaleTFEdge, - handleScaleTNEdge, - handleScaleBREdge, - handleScaleBLEdge, - handleScaleBFEdge, - handleScaleBNEdge, - handleScaleNREdge, - handleScaleNLEdge, - handleScaleFREdge, - handleScaleFLEdge, + handleBoundingTREdge, + handleBoundingTLEdge, + handleBoundingTFEdge, + handleBoundingTNEdge, + handleBoundingBREdge, + handleBoundingBLEdge, + handleBoundingBFEdge, + handleBoundingBNEdge, + handleBoundingNREdge, + handleBoundingNLEdge, + handleBoundingFREdge, + handleBoundingFLEdge, handleCloner, selectionBox, iconSelectionBox, @@ -780,18 +780,18 @@ SelectionDisplay = (function() { overlayNames[handleScaleCube] = "handleScaleCube"; - overlayNames[handleScaleTREdge] = "handleScaleTREdge"; - overlayNames[handleScaleTLEdge] = "handleScaleTLEdge"; - overlayNames[handleScaleTFEdge] = "handleScaleTFEdge"; - overlayNames[handleScaleTNEdge] = "handleScaleTNEdge"; - overlayNames[handleScaleBREdge] = "handleScaleBREdge"; - overlayNames[handleScaleBLEdge] = "handleScaleBLEdge"; - overlayNames[handleScaleBFEdge] = "handleScaleBFEdge"; - overlayNames[handleScaleBNEdge] = "handleScaleBNEdge"; - overlayNames[handleScaleNREdge] = "handleScaleNREdge"; - overlayNames[handleScaleNLEdge] = "handleScaleNLEdge"; - overlayNames[handleScaleFREdge] = "handleScaleFREdge"; - overlayNames[handleScaleFLEdge] = "handleScaleFLEdge"; + overlayNames[handleBoundingTREdge] = "handleBoundingTREdge"; + overlayNames[handleBoundingTLEdge] = "handleBoundingTLEdge"; + overlayNames[handleBoundingTFEdge] = "handleBoundingTFEdge"; + overlayNames[handleBoundingTNEdge] = "handleBoundingTNEdge"; + overlayNames[handleBoundingBREdge] = "handleBoundingBREdge"; + overlayNames[handleBoundingBLEdge] = "handleBoundingBLEdge"; + overlayNames[handleBoundingBFEdge] = "handleBoundingBFEdge"; + overlayNames[handleBoundingBNEdge] = "handleBoundingBNEdge"; + overlayNames[handleBoundingNREdge] = "handleBoundingNREdge"; + overlayNames[handleBoundingNLEdge] = "handleBoundingNLEdge"; + overlayNames[handleBoundingFREdge] = "handleBoundingFREdge"; + overlayNames[handleBoundingFLEdge] = "handleBoundingFLEdge"; overlayNames[handleCloner] = "handleCloner"; overlayNames[selectionBox] = "selectionBox"; @@ -1405,10 +1405,10 @@ SelectionDisplay = (function() { dimensions: scaleCubeDimensions }); - // UPDATE SCALE EDGES - var edgeOffsetX = SCALE_EDGE_OFFSET * dimensions.x; - var edgeOffsetY = SCALE_EDGE_OFFSET * dimensions.y; - var edgeOffsetZ = SCALE_EDGE_OFFSET * dimensions.z; + // UPDATE BOUNDING BOX EDGES + var edgeOffsetX = BOUNDING_EDGE_OFFSET * dimensions.x; + var edgeOffsetY = BOUNDING_EDGE_OFFSET * dimensions.y; + var edgeOffsetZ = BOUNDING_EDGE_OFFSET * dimensions.z; var LBNPosition = { x: -edgeOffsetX, y: -edgeOffsetY, z: -edgeOffsetZ }; LBNPosition = Vec3.sum(position, Vec3.multiplyQbyV(rotation, LBNPosition)); var RBNPosition = { x: edgeOffsetX, y: -edgeOffsetY, z: -edgeOffsetZ }; @@ -1425,18 +1425,18 @@ SelectionDisplay = (function() { LTFPosition = Vec3.sum(position, Vec3.multiplyQbyV(rotation, LTFPosition)); var RTFPosition = { x: edgeOffsetX, y: edgeOffsetY, z: edgeOffsetZ }; RTFPosition = Vec3.sum(position, Vec3.multiplyQbyV(rotation, RTFPosition)); - Overlays.editOverlay(handleScaleTREdge, { start: RTNPosition, end: RTFPosition }); - Overlays.editOverlay(handleScaleTLEdge, { start: LTNPosition, end: LTFPosition }); - Overlays.editOverlay(handleScaleTFEdge, { start: LTFPosition, end: RTFPosition }); - Overlays.editOverlay(handleScaleTNEdge, { start: LTNPosition, end: RTNPosition }); - Overlays.editOverlay(handleScaleBREdge, { start: RBNPosition, end: RBFPosition }); - Overlays.editOverlay(handleScaleBLEdge, { start: LBNPosition, end: LBFPosition }); - Overlays.editOverlay(handleScaleBFEdge, { start: LBFPosition, end: RBFPosition }); - Overlays.editOverlay(handleScaleBNEdge, { start: LBNPosition, end: RBNPosition }); - Overlays.editOverlay(handleScaleNREdge, { start: RTNPosition, end: RBNPosition }); - Overlays.editOverlay(handleScaleNLEdge, { start: LTNPosition, end: LBNPosition }); - Overlays.editOverlay(handleScaleFREdge, { start: RTFPosition, end: RBFPosition }); - Overlays.editOverlay(handleScaleFLEdge, { start: LTFPosition, end: LBFPosition }); + Overlays.editOverlay(handleBoundingTREdge, { start: RTNPosition, end: RTFPosition }); + Overlays.editOverlay(handleBoundingTLEdge, { start: LTNPosition, end: LTFPosition }); + Overlays.editOverlay(handleBoundingTFEdge, { start: LTFPosition, end: RTFPosition }); + Overlays.editOverlay(handleBoundingTNEdge, { start: LTNPosition, end: RTNPosition }); + Overlays.editOverlay(handleBoundingBREdge, { start: RBNPosition, end: RBFPosition }); + Overlays.editOverlay(handleBoundingBLEdge, { start: LBNPosition, end: LBFPosition }); + Overlays.editOverlay(handleBoundingBFEdge, { start: LBFPosition, end: RBFPosition }); + Overlays.editOverlay(handleBoundingBNEdge, { start: LBNPosition, end: RBNPosition }); + Overlays.editOverlay(handleBoundingNREdge, { start: RTNPosition, end: RBNPosition }); + Overlays.editOverlay(handleBoundingNLEdge, { start: LTNPosition, end: LBNPosition }); + Overlays.editOverlay(handleBoundingFREdge, { start: RTFPosition, end: RBFPosition }); + Overlays.editOverlay(handleBoundingFLEdge, { start: LTFPosition, end: LBFPosition }); // UPDATE STRETCH HIGHLIGHT PANELS var RBFPositionRotated = Vec3.multiplyQbyV(rotationInverse, RBFPosition); @@ -1569,7 +1569,7 @@ SelectionDisplay = (function() { var showOutlineForZone = (SelectionManager.selections.length === 1 && typeof SelectionManager.savedProperties[SelectionManager.selections[0]] !== "undefined" && SelectionManager.savedProperties[SelectionManager.selections[0]].type === "Zone"); - that.setHandleScaleEdgeVisible(showOutlineForZone || (!isActiveTool(handleRotatePitchRing) && + that.setHandleBoundingEdgeVisible(showOutlineForZone || (!isActiveTool(handleRotatePitchRing) && !isActiveTool(handleRotateYawRing) && !isActiveTool(handleRotateRollRing))); @@ -1669,26 +1669,26 @@ SelectionDisplay = (function() { // FUNCTION: SET HANDLE SCALE VISIBLE that.setHandleScaleVisible = function(isVisible) { that.setHandleScaleCubeVisible(isVisible); - that.setHandleScaleEdgeVisible(isVisible); + that.setHandleBoundingEdgeVisible(isVisible); }; that.setHandleScaleCubeVisible = function(isVisible) { Overlays.editOverlay(handleScaleCube, { visible: isVisible }); }; - that.setHandleScaleEdgeVisible = function(isVisible) { - Overlays.editOverlay(handleScaleTREdge, { visible: isVisible }); - Overlays.editOverlay(handleScaleTLEdge, { visible: isVisible }); - Overlays.editOverlay(handleScaleTFEdge, { visible: isVisible }); - Overlays.editOverlay(handleScaleTNEdge, { visible: isVisible }); - Overlays.editOverlay(handleScaleBREdge, { visible: isVisible }); - Overlays.editOverlay(handleScaleBLEdge, { visible: isVisible }); - Overlays.editOverlay(handleScaleBFEdge, { visible: isVisible }); - Overlays.editOverlay(handleScaleBNEdge, { visible: isVisible }); - Overlays.editOverlay(handleScaleNREdge, { visible: isVisible }); - Overlays.editOverlay(handleScaleNLEdge, { visible: isVisible }); - Overlays.editOverlay(handleScaleFREdge, { visible: isVisible }); - Overlays.editOverlay(handleScaleFLEdge, { visible: isVisible }); + that.setHandleBoundingEdgeVisible = function(isVisible) { + Overlays.editOverlay(handleBoundingTREdge, { visible: isVisible }); + Overlays.editOverlay(handleBoundingTLEdge, { visible: isVisible }); + Overlays.editOverlay(handleBoundingTFEdge, { visible: isVisible }); + Overlays.editOverlay(handleBoundingTNEdge, { visible: isVisible }); + Overlays.editOverlay(handleBoundingBREdge, { visible: isVisible }); + Overlays.editOverlay(handleBoundingBLEdge, { visible: isVisible }); + Overlays.editOverlay(handleBoundingBFEdge, { visible: isVisible }); + Overlays.editOverlay(handleBoundingBNEdge, { visible: isVisible }); + Overlays.editOverlay(handleBoundingNREdge, { visible: isVisible }); + Overlays.editOverlay(handleBoundingNLEdge, { visible: isVisible }); + Overlays.editOverlay(handleBoundingFREdge, { visible: isVisible }); + Overlays.editOverlay(handleBoundingFLEdge, { visible: isVisible }); }; // FUNCTION: SET HANDLE CLONER VISIBLE @@ -2292,7 +2292,8 @@ SelectionDisplay = (function() { var toCameraDistance = getDistanceToCamera(position); var dimensionsMultiple = toCameraDistance * STRETCH_DIRECTION_ALL_CAMERA_DISTANCE_MULTIPLE; var dimensionChange = mouseDifference * dimensionsMultiple; - percentChange = dimensionChange / initialDimensions.z; + var averageInitialDimension = (initialDimensions.x + initialDimensions.y + initialDimensions.z) / 3; + percentChange = dimensionChange / averageInitialDimension; percentChange += 1.0; newDimensions = Vec3.multiply(percentChange, initialDimensions); newDimensions.x = Math.abs(newDimensions.x); From dcacfdba7cd0d9d59b467b4b03bd5f3c60b9790a Mon Sep 17 00:00:00 2001 From: Wayne Chen Date: Mon, 10 Sep 2018 16:22:55 -0700 Subject: [PATCH 085/123] adding popup property to qml --- interface/src/Application.cpp | 3 +++ interface/src/Application.h | 2 ++ interface/src/ui/DialogsManager.cpp | 4 ++++ interface/src/ui/DialogsManager.h | 1 + interface/src/ui/LoginDialog.h | 6 ++++++ 5 files changed, 16 insertions(+) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 15545a0275..cdf19ea6ac 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -2301,6 +2301,8 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo AndroidHelper::instance().notifyLoadComplete(); #endif + connect(this, &Application::loginDialogPoppedUp, DependencyManager::get().data(), &DialogsManager::loginDialogPoppedUp); + static int CHECK_LOGIN_TIMER = 3000; QTimer* checkLoginTimer = new QTimer(this); checkLoginTimer->setInterval(CHECK_LOGIN_TIMER); @@ -2309,6 +2311,7 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo auto accountManager = DependencyManager::get(); auto dialogsManager = DependencyManager::get(); if (!accountManager->isLoggedIn() && !qApp->isHMDMode()) { + emit loginDialogPoppedUp(); dialogsManager->showLoginDialog(); QJsonObject loginData = {}; loginData["action"] = "login dialog shown"; diff --git a/interface/src/Application.h b/interface/src/Application.h index aa8323cd38..d661a74bcb 100644 --- a/interface/src/Application.h +++ b/interface/src/Application.h @@ -331,6 +331,8 @@ signals: void uploadRequest(QString path); + void loginDialogPoppedUp(); + public slots: QVector pasteEntities(float x, float y, float z); bool exportEntities(const QString& filename, const QVector& entityIDs, const glm::vec3* givenOffset = nullptr); diff --git a/interface/src/ui/DialogsManager.cpp b/interface/src/ui/DialogsManager.cpp index 83601a2797..960b099d22 100644 --- a/interface/src/ui/DialogsManager.cpp +++ b/interface/src/ui/DialogsManager.cpp @@ -117,6 +117,10 @@ void DialogsManager::showLoginDialog() { LoginDialog::showWithSelection(); } +void DialogsManager::loginDialogPoppedUp() { + LoginDialog::setLoginDialogPoppedUp(true); +} + void DialogsManager::showUpdateDialog() { UpdateDialog::show(); } diff --git a/interface/src/ui/DialogsManager.h b/interface/src/ui/DialogsManager.h index 0633dec573..9dc70d0cd0 100644 --- a/interface/src/ui/DialogsManager.h +++ b/interface/src/ui/DialogsManager.h @@ -48,6 +48,7 @@ public slots: void setDomainConnectionFailureVisibility(bool visible); void toggleLoginDialog(); void showLoginDialog(); + void loginDialogPoppedUp(); void octreeStatsDetails(); void lodTools(); void hmdTools(bool showTools); diff --git a/interface/src/ui/LoginDialog.h b/interface/src/ui/LoginDialog.h index 210438b856..f9580d0bfe 100644 --- a/interface/src/ui/LoginDialog.h +++ b/interface/src/ui/LoginDialog.h @@ -23,6 +23,7 @@ class QNetworkReply; class LoginDialog : public OffscreenQmlDialog { Q_OBJECT + Q_PROPERTY(bool poppedUp READ getLoginDialogPoppedUp) HIFI_QML_DECL public: @@ -33,6 +34,9 @@ public: virtual ~LoginDialog(); static void showWithSelection(); + + bool getLoginDialogPoppedUp() { return _poppedUp; } + void setLoginDialogPoppedUp(bool poppedUp) { _poppedUp = poppedUp; } signals: void handleLoginCompleted(); void handleLoginFailed(); @@ -68,6 +72,8 @@ protected slots: Q_INVOKABLE void openUrl(const QString& url) const; +private: + bool _poppedUp {false}; }; #endif // hifi_LoginDialog_h From de5a0a714b84ce4348fcbcb9298ff95d5a806c88 Mon Sep 17 00:00:00 2001 From: Dante Ruiz Date: Mon, 10 Sep 2018 16:25:17 -0700 Subject: [PATCH 086/123] handle unable to connect to domain case --- interface/src/Application.h | 2 +- interface/src/ConnectionMonitor.cpp | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/interface/src/Application.h b/interface/src/Application.h index c82dae3b05..f1452080cb 100644 --- a/interface/src/Application.h +++ b/interface/src/Application.h @@ -346,6 +346,7 @@ public slots: bool importEntities(const QString& url); void updateThreadPoolCount() const; void updateSystemTabletMode(); + void goToErrorDomainURL(QUrl errorDomainURL); Q_INVOKABLE void loadDialog(); Q_INVOKABLE void loadScriptURLDialog() const; @@ -474,7 +475,6 @@ private slots: void setSessionUUID(const QUuid& sessionUUID) const; void domainURLChanged(QUrl domainURL); - void goToErrorDomainURL(QUrl errorDomainURL); void updateWindowTitle() const; void nodeAdded(SharedNodePointer node) const; void nodeActivated(SharedNodePointer node); diff --git a/interface/src/ConnectionMonitor.cpp b/interface/src/ConnectionMonitor.cpp index 7d535d9eaf..8463539bac 100644 --- a/interface/src/ConnectionMonitor.cpp +++ b/interface/src/ConnectionMonitor.cpp @@ -11,6 +11,7 @@ #include "ConnectionMonitor.h" +#include "Application.h" #include "ui/DialogsManager.h" #include @@ -21,6 +22,7 @@ // should be longer to allow the application to initialize. static const int ON_INITIAL_LOAD_DISPLAY_AFTER_DISCONNECTED_FOR_X_MS = 10000; static const int DISPLAY_AFTER_DISCONNECTED_FOR_X_MS = 5000; +static const QString ERROR_DOMAIN_URL = "file:///~/serverless/redirect.json"; void ConnectionMonitor::init() { // Connect to domain disconnected message @@ -38,7 +40,7 @@ void ConnectionMonitor::init() { connect(&_timer, &QTimer::timeout, this, []() { qDebug() << "ConnectionMonitor: Showing connection failure window"; - //DependencyManager::get()->setDomainConnectionFailureVisibility(true); + qApp->goToErrorDomainURL(ERROR_DOMAIN_URL); }); } @@ -48,5 +50,4 @@ void ConnectionMonitor::startTimer() { void ConnectionMonitor::stopTimer() { _timer.stop(); - //DependencyManager::get()->setDomainConnectionFailureVisibility(false); } From e5a87aa58cac66a5f8d8c834a6d2e3d08a45a058 Mon Sep 17 00:00:00 2001 From: Wayne Chen Date: Mon, 10 Sep 2018 16:56:13 -0700 Subject: [PATCH 087/123] removing unused variables --- interface/src/Application.cpp | 2 -- interface/src/ConnectionMonitor.cpp | 2 -- libraries/networking/src/AddressManager.cpp | 2 -- 3 files changed, 6 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index de0aea3bc2..c20622f8f3 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -6421,7 +6421,6 @@ void Application::clearDomainAvatars() { void Application::domainURLChanged(QUrl domainURL) { // disable physics until we have enough information about our new location to not cause craziness. resetPhysicsReadyInformation(); - auto urlStr = domainURL.toString().toStdString(); setIsServerlessMode(domainURL.scheme() != URL_SCHEME_HIFI); if (isServerlessMode()) { loadServerlessDomain(domainURL); @@ -6432,7 +6431,6 @@ void Application::domainURLChanged(QUrl domainURL) { void Application::goToErrorDomainURL(QUrl errorDomainURL) { // disable physics until we have enough information about our new location to not cause craziness. resetPhysicsReadyInformation(); - auto urlStr = errorDomainURL.toString().toStdString(); setIsServerlessMode(errorDomainURL.scheme() != URL_SCHEME_HIFI); if (isServerlessMode()) { loadServerlessDomain(errorDomainURL, true); diff --git a/interface/src/ConnectionMonitor.cpp b/interface/src/ConnectionMonitor.cpp index 7d535d9eaf..2407e1bfdf 100644 --- a/interface/src/ConnectionMonitor.cpp +++ b/interface/src/ConnectionMonitor.cpp @@ -38,7 +38,6 @@ void ConnectionMonitor::init() { connect(&_timer, &QTimer::timeout, this, []() { qDebug() << "ConnectionMonitor: Showing connection failure window"; - //DependencyManager::get()->setDomainConnectionFailureVisibility(true); }); } @@ -48,5 +47,4 @@ void ConnectionMonitor::startTimer() { void ConnectionMonitor::stopTimer() { _timer.stop(); - //DependencyManager::get()->setDomainConnectionFailureVisibility(false); } diff --git a/libraries/networking/src/AddressManager.cpp b/libraries/networking/src/AddressManager.cpp index 6ebd516063..1244cd8828 100644 --- a/libraries/networking/src/AddressManager.cpp +++ b/libraries/networking/src/AddressManager.cpp @@ -48,7 +48,6 @@ QString AddressManager::getProtocol() const { QUrl AddressManager::currentAddress(bool domainOnly) const { QUrl hifiURL = _domainURL; - auto urlStr = hifiURL.toString().toStdString(); if (!domainOnly && hifiURL.scheme() == URL_SCHEME_HIFI) { hifiURL.setPath(currentPath()); @@ -156,7 +155,6 @@ void AddressManager::goForward() { void AddressManager::goToLastAddress() { // this should always return something as long as the URL isn't empty. - auto urlStr = _lastVisitedURL.toString().toStdString(); handleUrl(_lastVisitedURL, LookupTrigger::AttemptedRefresh); } From a50e55b83aa0a22513daa04c22faf363ea7bc8a3 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Mon, 10 Sep 2018 11:10:08 -0700 Subject: [PATCH 088/123] use more efficient iterate and clear for removal --- libraries/avatars/src/AvatarHashMap.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/libraries/avatars/src/AvatarHashMap.cpp b/libraries/avatars/src/AvatarHashMap.cpp index 0c5ca06989..f0669fbd30 100644 --- a/libraries/avatars/src/AvatarHashMap.cpp +++ b/libraries/avatars/src/AvatarHashMap.cpp @@ -436,9 +436,9 @@ void AvatarHashMap::sessionUUIDChanged(const QUuid& sessionUUID, const QUuid& ol void AvatarHashMap::clearOtherAvatars() { QWriteLocker locker(&_hashLock); - AvatarHash::iterator avatarIterator = _avatarHash.begin(); - while (avatarIterator != _avatarHash.end()) { - handleRemovedAvatar(*avatarIterator); - avatarIterator = _avatarHash.erase(avatarIterator); + for (auto& av : _avatarHash) { + handleRemovedAvatar(av); } + + _avatarHash.clear(); } From 2381d6bc027534dfab5fd560463c77fc0dac5f99 Mon Sep 17 00:00:00 2001 From: Wayne Chen Date: Mon, 10 Sep 2018 17:07:49 -0700 Subject: [PATCH 089/123] using `REDIRECT_HIFI_ADDRESS` recycling existing, defined variable for error redirection --- interface/src/ConnectionMonitor.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/interface/src/ConnectionMonitor.cpp b/interface/src/ConnectionMonitor.cpp index 8463539bac..6578abf285 100644 --- a/interface/src/ConnectionMonitor.cpp +++ b/interface/src/ConnectionMonitor.cpp @@ -16,6 +16,7 @@ #include #include +#include #include // Because the connection monitor is created at startup, the time we wait on initial load @@ -40,7 +41,7 @@ void ConnectionMonitor::init() { connect(&_timer, &QTimer::timeout, this, []() { qDebug() << "ConnectionMonitor: Showing connection failure window"; - qApp->goToErrorDomainURL(ERROR_DOMAIN_URL); + qApp->goToErrorDomainURL(REDIRECT_HIFI_ADDRESS); }); } From c194c236f10c9201ee1c2def76294d0e84e0d6b9 Mon Sep 17 00:00:00 2001 From: Wayne Chen Date: Mon, 10 Sep 2018 17:10:13 -0700 Subject: [PATCH 090/123] adding inlines --- interface/src/Application.cpp | 4 ---- interface/src/Application.h | 2 +- interface/src/octree/OctreePacketProcessor.cpp | 10 +--------- interface/src/octree/OctreePacketProcessor.h | 4 ++-- libraries/networking/src/AddressManager.cpp | 4 ++-- libraries/networking/src/AddressManager.h | 1 - 6 files changed, 6 insertions(+), 19 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index c20622f8f3..296df7ccb0 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -3493,10 +3493,6 @@ bool Application::isServerlessMode() const { return false; } -bool Application::isInterstitialMode() const { - return _interstitialMode; -} - void Application::setIsInterstitialMode(bool interstitialMode) { if (_interstitialMode != interstitialMode) { _interstitialMode = interstitialMode; diff --git a/interface/src/Application.h b/interface/src/Application.h index c82dae3b05..de02b7f140 100644 --- a/interface/src/Application.h +++ b/interface/src/Application.h @@ -310,7 +310,7 @@ public: void saveNextPhysicsStats(QString filename); bool isServerlessMode() const; - bool isInterstitialMode() const; + bool isInterstitialMode() const { return _interstitialMode; } void replaceDomainContent(const QString& url); diff --git a/interface/src/octree/OctreePacketProcessor.cpp b/interface/src/octree/OctreePacketProcessor.cpp index e670153a77..a456958108 100644 --- a/interface/src/octree/OctreePacketProcessor.cpp +++ b/interface/src/octree/OctreePacketProcessor.cpp @@ -136,12 +136,4 @@ void OctreePacketProcessor::startEntitySequence() { bool OctreePacketProcessor::isLoadSequenceComplete() const { return _safeLanding->isLoadSequenceComplete(); -} - -bool OctreePacketProcessor::isEntitiesRenderReady() const { - return _safeLanding->entitiesRenderReady(); -} - -float OctreePacketProcessor::domainLoadingProgress() { - return _safeLanding->loadingProgressPercentage(); -} +} \ No newline at end of file diff --git a/interface/src/octree/OctreePacketProcessor.h b/interface/src/octree/OctreePacketProcessor.h index 71e22bf240..3aa23c49f3 100644 --- a/interface/src/octree/OctreePacketProcessor.h +++ b/interface/src/octree/OctreePacketProcessor.h @@ -27,8 +27,8 @@ public: void startEntitySequence(); bool isLoadSequenceComplete() const; - bool isEntitiesRenderReady() const; - float domainLoadingProgress(); + bool isEntitiesRenderReady() const { return _safeLanding->entitiesRenderReady(); } + float domainLoadingProgress() { return _safeLanding->loadingProgressPercentage(); } signals: void packetVersionMismatch(); diff --git a/libraries/networking/src/AddressManager.cpp b/libraries/networking/src/AddressManager.cpp index 1244cd8828..824e0d4515 100644 --- a/libraries/networking/src/AddressManager.cpp +++ b/libraries/networking/src/AddressManager.cpp @@ -48,7 +48,6 @@ QString AddressManager::getProtocol() const { QUrl AddressManager::currentAddress(bool domainOnly) const { QUrl hifiURL = _domainURL; - if (!domainOnly && hifiURL.scheme() == URL_SCHEME_HIFI) { hifiURL.setPath(currentPath()); } @@ -155,7 +154,8 @@ void AddressManager::goForward() { void AddressManager::goToLastAddress() { // this should always return something as long as the URL isn't empty. - handleUrl(_lastVisitedURL, LookupTrigger::AttemptedRefresh); + handleUrl(_lastVisitedURL, + LookupTrigger::AttemptedRefresh); } void AddressManager::storeCurrentAddress() { diff --git a/libraries/networking/src/AddressManager.h b/libraries/networking/src/AddressManager.h index 7226e92451..e27504fc3a 100644 --- a/libraries/networking/src/AddressManager.h +++ b/libraries/networking/src/AddressManager.h @@ -149,7 +149,6 @@ public: UserInput, Back, Forward, - //Retry, StartupFromSettings, DomainPathResponse, Internal, From fa3097225bfb87d16638b2700bdbf9fce6c281de Mon Sep 17 00:00:00 2001 From: Wayne Chen Date: Mon, 10 Sep 2018 17:33:32 -0700 Subject: [PATCH 091/123] removing inlines - not allowed for unique_ptr --- interface/src/octree/OctreePacketProcessor.cpp | 10 +++++++++- interface/src/octree/OctreePacketProcessor.h | 4 ++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/interface/src/octree/OctreePacketProcessor.cpp b/interface/src/octree/OctreePacketProcessor.cpp index a456958108..e670153a77 100644 --- a/interface/src/octree/OctreePacketProcessor.cpp +++ b/interface/src/octree/OctreePacketProcessor.cpp @@ -136,4 +136,12 @@ void OctreePacketProcessor::startEntitySequence() { bool OctreePacketProcessor::isLoadSequenceComplete() const { return _safeLanding->isLoadSequenceComplete(); -} \ No newline at end of file +} + +bool OctreePacketProcessor::isEntitiesRenderReady() const { + return _safeLanding->entitiesRenderReady(); +} + +float OctreePacketProcessor::domainLoadingProgress() { + return _safeLanding->loadingProgressPercentage(); +} diff --git a/interface/src/octree/OctreePacketProcessor.h b/interface/src/octree/OctreePacketProcessor.h index 3aa23c49f3..71e22bf240 100644 --- a/interface/src/octree/OctreePacketProcessor.h +++ b/interface/src/octree/OctreePacketProcessor.h @@ -27,8 +27,8 @@ public: void startEntitySequence(); bool isLoadSequenceComplete() const; - bool isEntitiesRenderReady() const { return _safeLanding->entitiesRenderReady(); } - float domainLoadingProgress() { return _safeLanding->loadingProgressPercentage(); } + bool isEntitiesRenderReady() const; + float domainLoadingProgress(); signals: void packetVersionMismatch(); From 28c3afca9dd59390544d3be34e40eb69ba2289c0 Mon Sep 17 00:00:00 2001 From: Wayne Chen Date: Mon, 10 Sep 2018 17:40:35 -0700 Subject: [PATCH 092/123] adding back inlines --- interface/src/octree/OctreePacketProcessor.cpp | 15 +-------------- interface/src/octree/OctreePacketProcessor.h | 11 +++++------ 2 files changed, 6 insertions(+), 20 deletions(-) diff --git a/interface/src/octree/OctreePacketProcessor.cpp b/interface/src/octree/OctreePacketProcessor.cpp index e670153a77..790cd235d8 100644 --- a/interface/src/octree/OctreePacketProcessor.cpp +++ b/interface/src/octree/OctreePacketProcessor.cpp @@ -16,7 +16,6 @@ #include "Application.h" #include "Menu.h" #include "SceneScriptingInterface.h" -#include "SafeLanding.h" OctreePacketProcessor::OctreePacketProcessor(): _safeLanding(new SafeLanding()) @@ -132,16 +131,4 @@ void OctreePacketProcessor::processPacket(QSharedPointer messag void OctreePacketProcessor::startEntitySequence() { _safeLanding->startEntitySequence(qApp->getEntities()); -} - -bool OctreePacketProcessor::isLoadSequenceComplete() const { - return _safeLanding->isLoadSequenceComplete(); -} - -bool OctreePacketProcessor::isEntitiesRenderReady() const { - return _safeLanding->entitiesRenderReady(); -} - -float OctreePacketProcessor::domainLoadingProgress() { - return _safeLanding->loadingProgressPercentage(); -} +} \ No newline at end of file diff --git a/interface/src/octree/OctreePacketProcessor.h b/interface/src/octree/OctreePacketProcessor.h index 71e22bf240..627bf9b66a 100644 --- a/interface/src/octree/OctreePacketProcessor.h +++ b/interface/src/octree/OctreePacketProcessor.h @@ -15,7 +15,7 @@ #include #include -class SafeLanding; +#include "SafeLanding.h" /// Handles processing of incoming voxel packets for the interface application. As with other ReceivedPacketProcessor classes /// the user is responsible for reading inbound packets and adding them to the processing queue by calling queueReceivedPacket() @@ -26,10 +26,9 @@ public: ~OctreePacketProcessor(); void startEntitySequence(); - bool isLoadSequenceComplete() const; - bool isEntitiesRenderReady() const; - float domainLoadingProgress(); - + bool isLoadSequenceComplete() const { return _safeLanding->isLoadSequenceComplete(); } + bool isEntitiesRenderReady() const { return _safeLanding->entitiesRenderReady(); } + float domainLoadingProgress() { return _safeLanding->loadingProgressPercentage(); } signals: void packetVersionMismatch(); @@ -42,4 +41,4 @@ private slots: private: std::unique_ptr _safeLanding; }; -#endif // hifi_OctreePacketProcessor_h +#endif // hifi_OctreePacketProcessor_h From 5ece8d8707f65f02896944c570295c6d0652840b Mon Sep 17 00:00:00 2001 From: Wayne Chen Date: Mon, 10 Sep 2018 18:32:21 -0700 Subject: [PATCH 093/123] using different paradigm for checking login dialog popup --- interface/resources/qml/LoginDialog.qml | 3 ++- interface/src/Application.cpp | 12 ++++++++---- interface/src/ui/DialogsManager.cpp | 4 ---- interface/src/ui/DialogsManager.h | 1 - interface/src/ui/LoginDialog.cpp | 13 +++++++++++-- interface/src/ui/LoginDialog.h | 3 --- 6 files changed, 21 insertions(+), 15 deletions(-) diff --git a/interface/resources/qml/LoginDialog.qml b/interface/resources/qml/LoginDialog.qml index 6ad6cdf93d..227fce3454 100644 --- a/interface/resources/qml/LoginDialog.qml +++ b/interface/resources/qml/LoginDialog.qml @@ -86,11 +86,12 @@ ModalWindow { } } Component.onDestruction: { - if (closeButtonVisible && clickedCloseButton) { + if (closeButtonVisible && clickedCloseButton && Settings.getValue("loginDialogPoppedUp", false)) { var data = { "action": "opted out" }; UserActivityLogger.logAction("encourageLoginDialog", data); } + Settings.setValue("loginDialogPoppedUp", false); } } diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index cdf19ea6ac..7f437e273c 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -2301,23 +2301,24 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo AndroidHelper::instance().notifyLoadComplete(); #endif - connect(this, &Application::loginDialogPoppedUp, DependencyManager::get().data(), &DialogsManager::loginDialogPoppedUp); - static int CHECK_LOGIN_TIMER = 3000; QTimer* checkLoginTimer = new QTimer(this); checkLoginTimer->setInterval(CHECK_LOGIN_TIMER); checkLoginTimer->setSingleShot(true); - connect(checkLoginTimer, &QTimer::timeout, this, []() { + connect(checkLoginTimer, &QTimer::timeout, this, [this]() { auto accountManager = DependencyManager::get(); auto dialogsManager = DependencyManager::get(); if (!accountManager->isLoggedIn() && !qApp->isHMDMode()) { - emit loginDialogPoppedUp(); + Settings settings; + settings.setValue("loginDialogPoppedUp", true); dialogsManager->showLoginDialog(); QJsonObject loginData = {}; loginData["action"] = "login dialog shown"; UserActivityLogger::getInstance().logAction("encourageLoginDialog", loginData); } }); + Settings settings; + settings.setValue("loginDialogPoppedUp", false); checkLoginTimer->start(); } @@ -4948,6 +4949,9 @@ void Application::loadSettings() { } void Application::saveSettings() const { + Settings settings; + settings.setValue("loginDialogPoppedUp", false); + sessionRunTime.set(_sessionRunTimer.elapsed() / MSECS_PER_SECOND); DependencyManager::get()->saveSettings(); DependencyManager::get()->saveSettings(); diff --git a/interface/src/ui/DialogsManager.cpp b/interface/src/ui/DialogsManager.cpp index 960b099d22..83601a2797 100644 --- a/interface/src/ui/DialogsManager.cpp +++ b/interface/src/ui/DialogsManager.cpp @@ -117,10 +117,6 @@ void DialogsManager::showLoginDialog() { LoginDialog::showWithSelection(); } -void DialogsManager::loginDialogPoppedUp() { - LoginDialog::setLoginDialogPoppedUp(true); -} - void DialogsManager::showUpdateDialog() { UpdateDialog::show(); } diff --git a/interface/src/ui/DialogsManager.h b/interface/src/ui/DialogsManager.h index 9dc70d0cd0..0633dec573 100644 --- a/interface/src/ui/DialogsManager.h +++ b/interface/src/ui/DialogsManager.h @@ -48,7 +48,6 @@ public slots: void setDomainConnectionFailureVisibility(bool visible); void toggleLoginDialog(); void showLoginDialog(); - void loginDialogPoppedUp(); void octreeStatsDetails(); void lodTools(); void hmdTools(bool showTools); diff --git a/interface/src/ui/LoginDialog.cpp b/interface/src/ui/LoginDialog.cpp index 31a995c70b..6d94e1419b 100644 --- a/interface/src/ui/LoginDialog.cpp +++ b/interface/src/ui/LoginDialog.cpp @@ -20,6 +20,8 @@ #include #include +#include + #include "AccountManager.h" #include "DependencyManager.h" #include "Menu.h" @@ -38,11 +40,18 @@ LoginDialog::LoginDialog(QQuickItem *parent) : OffscreenQmlDialog(parent) { connect(accountManager.data(), &AccountManager::loginFailed, this, &LoginDialog::handleLoginFailed); #endif - } LoginDialog::~LoginDialog() { - qCDebug(login_dialog) << "killing"; + Settings settings; + Setting::Handle loginDialogPoppedUp{ "loginDialogPoppedUp", false }; + auto poppedUp = loginDialogPoppedUp.get(); + if (poppedUp) { + QJsonObject data; + data["action"] = "user opted out"; + UserActivityLogger::getInstance().logAction("encourageLoginDialog", data); + } + settings.setValue("loginDialogPoppedUp", false); } void LoginDialog::showWithSelection() diff --git a/interface/src/ui/LoginDialog.h b/interface/src/ui/LoginDialog.h index f9580d0bfe..155970e33d 100644 --- a/interface/src/ui/LoginDialog.h +++ b/interface/src/ui/LoginDialog.h @@ -23,7 +23,6 @@ class QNetworkReply; class LoginDialog : public OffscreenQmlDialog { Q_OBJECT - Q_PROPERTY(bool poppedUp READ getLoginDialogPoppedUp) HIFI_QML_DECL public: @@ -35,8 +34,6 @@ public: static void showWithSelection(); - bool getLoginDialogPoppedUp() { return _poppedUp; } - void setLoginDialogPoppedUp(bool poppedUp) { _poppedUp = poppedUp; } signals: void handleLoginCompleted(); void handleLoginFailed(); From 5e76a0c6d74ef89ca219ec9794a0bfd8828850ec Mon Sep 17 00:00:00 2001 From: Sam Gateau Date: Mon, 10 Sep 2018 22:55:12 -0700 Subject: [PATCH 094/123] changing the cpu timer of the batch to std::chrono instead of using gl cpu time stamp --- libraries/gpu-gl-common/src/gpu/gl/GLBackendQuery.cpp | 10 ++++++---- libraries/gpu-gl-common/src/gpu/gl/GLQuery.h | 3 ++- libraries/gpu-gl/src/gpu/gl45/GL45BackendBuffer.cpp | 2 +- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/libraries/gpu-gl-common/src/gpu/gl/GLBackendQuery.cpp b/libraries/gpu-gl-common/src/gpu/gl/GLBackendQuery.cpp index b64804fe7c..a448fceffe 100644 --- a/libraries/gpu-gl-common/src/gpu/gl/GLBackendQuery.cpp +++ b/libraries/gpu-gl-common/src/gpu/gl/GLBackendQuery.cpp @@ -32,7 +32,8 @@ void GLBackend::do_beginQuery(const Batch& batch, size_t paramOffset) { PROFILE_RANGE_BEGIN(render_gpu_gl_detail, glquery->_profileRangeId, query->getName().c_str(), 0xFFFF7F00); ++_queryStage._rangeQueryDepth; - glGetInteger64v(GL_TIMESTAMP, (GLint64*)&glquery->_batchElapsedTime); + glquery->_batchElapsedTimeBegin = std::chrono::high_resolution_clock::now(); + // glGetInteger64v(GL_TIMESTAMP, (GLint64*)&glquery->_batchElapsedTime); if (timeElapsed) { if (_queryStage._rangeQueryDepth <= MAX_RANGE_QUERY_DEPTH) { @@ -61,9 +62,10 @@ void GLBackend::do_endQuery(const Batch& batch, size_t paramOffset) { } --_queryStage._rangeQueryDepth; - GLint64 now; - glGetInteger64v(GL_TIMESTAMP, &now); - glquery->_batchElapsedTime = now - glquery->_batchElapsedTime; + // GLint64 now; + // glGetInteger64v(GL_TIMESTAMP, &now); + auto duration_ns = (std::chrono::high_resolution_clock::now() - glquery->_batchElapsedTimeBegin); + glquery->_batchElapsedTime = duration_ns.count(); PROFILE_RANGE_END(render_gpu_gl_detail, glquery->_profileRangeId); diff --git a/libraries/gpu-gl-common/src/gpu/gl/GLQuery.h b/libraries/gpu-gl-common/src/gpu/gl/GLQuery.h index 23b1f38621..18d79d5896 100644 --- a/libraries/gpu-gl-common/src/gpu/gl/GLQuery.h +++ b/libraries/gpu-gl-common/src/gpu/gl/GLQuery.h @@ -48,7 +48,8 @@ public: const GLuint& _endqo = { _id }; const GLuint _beginqo = { 0 }; GLuint64 _result { (GLuint64)-1 }; - GLuint64 _batchElapsedTime { (GLuint64) 0 }; + GLuint64 _batchElapsedTime{ (GLuint64)0 }; + std::chrono::high_resolution_clock::time_point _batchElapsedTimeBegin; uint64_t _profileRangeId { 0 }; uint32_t _rangeQueryDepth { 0 }; diff --git a/libraries/gpu-gl/src/gpu/gl45/GL45BackendBuffer.cpp b/libraries/gpu-gl/src/gpu/gl45/GL45BackendBuffer.cpp index 6d17923ebd..d271f79b92 100644 --- a/libraries/gpu-gl/src/gpu/gl45/GL45BackendBuffer.cpp +++ b/libraries/gpu-gl/src/gpu/gl45/GL45BackendBuffer.cpp @@ -52,7 +52,7 @@ GLuint GL45Backend::getBufferID(const Buffer& buffer) { } GLuint GL45Backend::getBufferIDUnsynced(const Buffer& buffer) { - return GL45Buffer::getIdUnsynced(*this, buffer); + return GLBuffer::getIdUnsynced(*this, buffer); } GLBuffer* GL45Backend::syncGPUObject(const Buffer& buffer) { From 69ae475787ded665abe60b820f7c1648e9e4d070 Mon Sep 17 00:00:00 2001 From: Wayne Chen Date: Mon, 10 Sep 2018 23:04:50 -0700 Subject: [PATCH 095/123] adding user activity logging --- interface/resources/qml/LoginDialog.qml | 9 --------- .../resources/qml/LoginDialog/LinkAccountBody.qml | 12 ++++++++++++ interface/src/Application.cpp | 11 ++++------- interface/src/ui/LoginDialog.cpp | 3 +-- 4 files changed, 17 insertions(+), 18 deletions(-) diff --git a/interface/resources/qml/LoginDialog.qml b/interface/resources/qml/LoginDialog.qml index 227fce3454..336858502d 100644 --- a/interface/resources/qml/LoginDialog.qml +++ b/interface/resources/qml/LoginDialog.qml @@ -85,13 +85,4 @@ ModalWindow { break } } - Component.onDestruction: { - if (closeButtonVisible && clickedCloseButton && Settings.getValue("loginDialogPoppedUp", false)) { - var data = { - "action": "opted out" - }; - UserActivityLogger.logAction("encourageLoginDialog", data); - } - Settings.setValue("loginDialogPoppedUp", false); - } } diff --git a/interface/resources/qml/LoginDialog/LinkAccountBody.qml b/interface/resources/qml/LoginDialog/LinkAccountBody.qml index d19837a023..f7216584e0 100644 --- a/interface/resources/qml/LoginDialog/LinkAccountBody.qml +++ b/interface/resources/qml/LoginDialog/LinkAccountBody.qml @@ -350,11 +350,23 @@ Item { bodyLoader.item.width = root.pane.width bodyLoader.item.height = root.pane.height } + if (Settings.getValue("loginDialogPoppedUp", false)) { + var data = { + "action": "user logged in" + }; + UserActivityLogger.logAction("encourageLoginDialog", data); + } } onHandleLoginFailed: { console.log("Login Failed") mainTextContainer.visible = true toggleLoading(false) + if (Settings.getValue("loginDialogPoppedUp", false)) { + var data = { + "action": "user failed logging in" + }; + UserActivityLogger.logAction("encourageLoginDialog", data); + } } onHandleLinkCompleted: { console.log("Link Succeeded") diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 7f437e273c..de788de99f 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -2309,16 +2309,14 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo auto accountManager = DependencyManager::get(); auto dialogsManager = DependencyManager::get(); if (!accountManager->isLoggedIn() && !qApp->isHMDMode()) { - Settings settings; - settings.setValue("loginDialogPoppedUp", true); + Setting::Handle{"loginDialogPoppedUp", false}.set(true); dialogsManager->showLoginDialog(); QJsonObject loginData = {}; loginData["action"] = "login dialog shown"; UserActivityLogger::getInstance().logAction("encourageLoginDialog", loginData); } }); - Settings settings; - settings.setValue("loginDialogPoppedUp", false); + Setting::Handle{"loginDialogPoppedUp", false}.set(false); checkLoginTimer->start(); } @@ -2453,6 +2451,8 @@ void Application::onAboutToQuit() { // so its persisted explicitly here Setting::Handle{ ACTIVE_DISPLAY_PLUGIN_SETTING_NAME }.set(getActiveDisplayPlugin()->getName()); + Setting::Handle{"loginDialogPoppedUp", false}.set(false); + getActiveDisplayPlugin()->deactivate(); if (_autoSwitchDisplayModeSupportedHMDPlugin && _autoSwitchDisplayModeSupportedHMDPlugin->isSessionActive()) { @@ -4949,9 +4949,6 @@ void Application::loadSettings() { } void Application::saveSettings() const { - Settings settings; - settings.setValue("loginDialogPoppedUp", false); - sessionRunTime.set(_sessionRunTimer.elapsed() / MSECS_PER_SECOND); DependencyManager::get()->saveSettings(); DependencyManager::get()->saveSettings(); diff --git a/interface/src/ui/LoginDialog.cpp b/interface/src/ui/LoginDialog.cpp index 6d94e1419b..5116c2a92c 100644 --- a/interface/src/ui/LoginDialog.cpp +++ b/interface/src/ui/LoginDialog.cpp @@ -43,7 +43,6 @@ LoginDialog::LoginDialog(QQuickItem *parent) : OffscreenQmlDialog(parent) { } LoginDialog::~LoginDialog() { - Settings settings; Setting::Handle loginDialogPoppedUp{ "loginDialogPoppedUp", false }; auto poppedUp = loginDialogPoppedUp.get(); if (poppedUp) { @@ -51,7 +50,7 @@ LoginDialog::~LoginDialog() { data["action"] = "user opted out"; UserActivityLogger::getInstance().logAction("encourageLoginDialog", data); } - settings.setValue("loginDialogPoppedUp", false); + loginDialogPoppedUp.set(false); } void LoginDialog::showWithSelection() From 030ee13f319e8123bb7069ddfcd4a0f02b9ddd58 Mon Sep 17 00:00:00 2001 From: Wayne Chen Date: Mon, 10 Sep 2018 23:05:31 -0700 Subject: [PATCH 096/123] removing logging from tabletlogindialog --- interface/resources/qml/dialogs/TabletLoginDialog.qml | 6 ------ 1 file changed, 6 deletions(-) diff --git a/interface/resources/qml/dialogs/TabletLoginDialog.qml b/interface/resources/qml/dialogs/TabletLoginDialog.qml index c3889b6a30..c85b2b2ba0 100644 --- a/interface/resources/qml/dialogs/TabletLoginDialog.qml +++ b/interface/resources/qml/dialogs/TabletLoginDialog.qml @@ -173,10 +173,4 @@ TabletModalWindow { break } } - Component.onDestruction: { - var data = { - "action": "userOptedOut" - }; - UserActivityLogger.logAction("LoginDialogAction", data); - } } From 565bf7f6bd0c69c5ff314302f5b38b566b08f997 Mon Sep 17 00:00:00 2001 From: Wayne Chen Date: Tue, 11 Sep 2018 09:08:35 -0700 Subject: [PATCH 097/123] adding correct implementation of show password --- .../resources/qml/LoginDialog/LinkAccountBody.qml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/interface/resources/qml/LoginDialog/LinkAccountBody.qml b/interface/resources/qml/LoginDialog/LinkAccountBody.qml index f7216584e0..06a371c478 100644 --- a/interface/resources/qml/LoginDialog/LinkAccountBody.qml +++ b/interface/resources/qml/LoginDialog/LinkAccountBody.qml @@ -198,19 +198,23 @@ Item { Rectangle { id: showPasswordHitbox z: 10 - // x: parent.width - (parent.height * 31/16) x: passwordField.width - ((passwordField.height) * 31 / 23) width: parent.width - (parent.width - (parent.height * 31/16)) - // width: passwordField.width - (passwordField.width - (((passwordField.height) * 31/23))) height: parent.height + anchors { + right: parent.right + } color: "transparent" Image { id: showPasswordImage - // x: passwordField.width - ((passwordField.height) * 31 / 23) y: (passwordField.height - (passwordField.height * 16 / 23)) / 2 width: passwordField.width - (passwordField.width - (((passwordField.height) * 31/23))) height: passwordField.height * 16 / 23 + anchors { + right: parent.right + rightMargin: 3 + } source: "../../images/eyeOpen.svg" } @@ -223,12 +227,8 @@ Item { showPassword = !showPassword; passwordField.echoMode = showPassword ? TextInput.Normal : TextInput.Password; showPasswordImage.source = showPassword ? "../../images/eyeClosed.svg" : "../../images/eyeOpen.svg"; - showPasswordImage.width = passwordField.width - (passwordField.width - (passwordField.height * 31/23)); - showPasswordImage.x = -(showPasswordImage.width - passwordField.width); showPasswordImage.height = showPassword ? passwordField.height : passwordField.height * 16 / 23; showPasswordImage.y = showPassword ? 0 : (passwordField.height - showPasswordImage.height) / 2; - showPasswordHitbox.width = showPasswordImage.width; - showPasswordHitbox.x = showPasswordImage.x; } } } From 840c8c95fdd62134c5e8d56875b1d84a88f80c1e Mon Sep 17 00:00:00 2001 From: sam gateau Date: Tue, 11 Sep 2018 09:34:42 -0700 Subject: [PATCH 098/123] cleaning the code and comments --- .../src/gpu/gl/GLBackendQuery.cpp | 19 ++++++++++--------- .../gpu-gl/src/gpu/gl45/GL45BackendBuffer.cpp | 2 +- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/libraries/gpu-gl-common/src/gpu/gl/GLBackendQuery.cpp b/libraries/gpu-gl-common/src/gpu/gl/GLBackendQuery.cpp index a448fceffe..b54a12805b 100644 --- a/libraries/gpu-gl-common/src/gpu/gl/GLBackendQuery.cpp +++ b/libraries/gpu-gl-common/src/gpu/gl/GLBackendQuery.cpp @@ -25,7 +25,6 @@ static bool timeElapsed = false; #endif void GLBackend::do_beginQuery(const Batch& batch, size_t paramOffset) { -#if !defined(USE_GLES) auto query = batch._queries.get(batch._params[paramOffset]._uint); GLQuery* glquery = syncGPUObject(*query); if (glquery) { @@ -33,8 +32,8 @@ void GLBackend::do_beginQuery(const Batch& batch, size_t paramOffset) { ++_queryStage._rangeQueryDepth; glquery->_batchElapsedTimeBegin = std::chrono::high_resolution_clock::now(); - // glGetInteger64v(GL_TIMESTAMP, (GLint64*)&glquery->_batchElapsedTime); +#if !defined(USE_GLES) if (timeElapsed) { if (_queryStage._rangeQueryDepth <= MAX_RANGE_QUERY_DEPTH) { glBeginQuery(GL_TIME_ELAPSED, glquery->_endqo); @@ -42,17 +41,18 @@ void GLBackend::do_beginQuery(const Batch& batch, size_t paramOffset) { } else { glQueryCounter(glquery->_beginqo, GL_TIMESTAMP); } +#endif + glquery->_rangeQueryDepth = _queryStage._rangeQueryDepth; (void)CHECK_GL_ERROR(); } -#endif } void GLBackend::do_endQuery(const Batch& batch, size_t paramOffset) { -#if !defined(USE_GLES) auto query = batch._queries.get(batch._params[paramOffset]._uint); GLQuery* glquery = syncGPUObject(*query); if (glquery) { +#if !defined(USE_GLES) if (timeElapsed) { if (_queryStage._rangeQueryDepth <= MAX_RANGE_QUERY_DEPTH) { glEndQuery(GL_TIME_ELAPSED); @@ -60,10 +60,9 @@ void GLBackend::do_endQuery(const Batch& batch, size_t paramOffset) { } else { glQueryCounter(glquery->_endqo, GL_TIMESTAMP); } +#endif --_queryStage._rangeQueryDepth; - // GLint64 now; - // glGetInteger64v(GL_TIMESTAMP, &now); auto duration_ns = (std::chrono::high_resolution_clock::now() - glquery->_batchElapsedTimeBegin); glquery->_batchElapsedTime = duration_ns.count(); @@ -71,17 +70,16 @@ void GLBackend::do_endQuery(const Batch& batch, size_t paramOffset) { (void)CHECK_GL_ERROR(); } -#endif } void GLBackend::do_getQuery(const Batch& batch, size_t paramOffset) { -#if !defined(USE_GLES) auto query = batch._queries.get(batch._params[paramOffset]._uint); GLQuery* glquery = syncGPUObject(*query); if (glquery) { if (glquery->_rangeQueryDepth > MAX_RANGE_QUERY_DEPTH) { query->triggerReturnHandler(glquery->_result, glquery->_batchElapsedTime); } else { +#if !defined(USE_GLES) glGetQueryObjectui64v(glquery->_endqo, GL_QUERY_RESULT_AVAILABLE, &glquery->_result); if (glquery->_result == GL_TRUE) { if (timeElapsed) { @@ -94,10 +92,13 @@ void GLBackend::do_getQuery(const Batch& batch, size_t paramOffset) { } query->triggerReturnHandler(glquery->_result, glquery->_batchElapsedTime); } +#else + // gles3 is not supporting true time query returns just the batch elapsed time + query->triggerReturnHandler(glquery->_result, glquery->_batchElapsedTime); +#endif (void)CHECK_GL_ERROR(); } } -#endif } void GLBackend::resetQueryStage() { diff --git a/libraries/gpu-gl/src/gpu/gl45/GL45BackendBuffer.cpp b/libraries/gpu-gl/src/gpu/gl45/GL45BackendBuffer.cpp index d271f79b92..6d17923ebd 100644 --- a/libraries/gpu-gl/src/gpu/gl45/GL45BackendBuffer.cpp +++ b/libraries/gpu-gl/src/gpu/gl45/GL45BackendBuffer.cpp @@ -52,7 +52,7 @@ GLuint GL45Backend::getBufferID(const Buffer& buffer) { } GLuint GL45Backend::getBufferIDUnsynced(const Buffer& buffer) { - return GLBuffer::getIdUnsynced(*this, buffer); + return GL45Buffer::getIdUnsynced(*this, buffer); } GLBuffer* GL45Backend::syncGPUObject(const Buffer& buffer) { From ee516fd79f65825aa486a3f6f64bcc606e89214e Mon Sep 17 00:00:00 2001 From: Wayne Chen Date: Tue, 11 Sep 2018 09:36:46 -0700 Subject: [PATCH 099/123] adding proper checking for saved username/login --- .../qml/LoginDialog/LinkAccountBody.qml | 16 ++-- interface/src/ui/LoginDialog.cpp | 80 ++++++++----------- 2 files changed, 42 insertions(+), 54 deletions(-) diff --git a/interface/resources/qml/LoginDialog/LinkAccountBody.qml b/interface/resources/qml/LoginDialog/LinkAccountBody.qml index 06a371c478..4196b7f168 100644 --- a/interface/resources/qml/LoginDialog/LinkAccountBody.qml +++ b/interface/resources/qml/LoginDialog/LinkAccountBody.qml @@ -161,6 +161,10 @@ Item { onFocusChanged: { root.text = ""; } + Component.onCompleted: { + var savedUsername = Settings.getValue("wallet/savedUsername", ""); + usernameField.text = savedUsername === "Unknown user" ? "" : savedUsername; + } } TextField { @@ -256,18 +260,18 @@ Item { anchors.horizontalCenter: parent.horizontalCenter CheckBox { - id: autoLogoutCheckbox; - checked: Settings.getValue("wallet/autoLogout", true); + id: autoLogoutCheckbox + checked: !Settings.getValue("wallet/autoLogout", true) text: "Keep me signed in" boxSize: 20; - labelFontSize: 15; - color: hifi.colors.black; + labelFontSize: 15 + color: hifi.colors.black onCheckedChanged: { Settings.setValue("wallet/autoLogout", !checked); if (checked) { - Settings.setValue("wallet/savedUsername", ""); - } else { Settings.setValue("wallet/savedUsername", Account.username); + } else { + Settings.setValue("wallet/savedUsername", ""); } } Component.onDestruction: { diff --git a/interface/src/ui/LoginDialog.cpp b/interface/src/ui/LoginDialog.cpp index 5116c2a92c..0d574fdc5d 100644 --- a/interface/src/ui/LoginDialog.cpp +++ b/interface/src/ui/LoginDialog.cpp @@ -32,20 +32,17 @@ HIFI_QML_DEF(LoginDialog) Q_LOGGING_CATEGORY(login_dialog, "hifi.login.dialog") -LoginDialog::LoginDialog(QQuickItem *parent) : OffscreenQmlDialog(parent) { +LoginDialog::LoginDialog(QQuickItem* parent) : OffscreenQmlDialog(parent) { auto accountManager = DependencyManager::get(); #if !defined(Q_OS_ANDROID) - connect(accountManager.data(), &AccountManager::loginComplete, - this, &LoginDialog::handleLoginCompleted); - connect(accountManager.data(), &AccountManager::loginFailed, - this, &LoginDialog::handleLoginFailed); + connect(accountManager.data(), &AccountManager::loginComplete, this, &LoginDialog::handleLoginCompleted); + connect(accountManager.data(), &AccountManager::loginFailed, this, &LoginDialog::handleLoginFailed); #endif } LoginDialog::~LoginDialog() { Setting::Handle loginDialogPoppedUp{ "loginDialogPoppedUp", false }; - auto poppedUp = loginDialogPoppedUp.get(); - if (poppedUp) { + if (loginDialogPoppedUp.get()) { QJsonObject data; data["action"] = "user opted out"; UserActivityLogger::getInstance().logAction("encourageLoginDialog", data); @@ -53,8 +50,7 @@ LoginDialog::~LoginDialog() { loginDialogPoppedUp.set(false); } -void LoginDialog::showWithSelection() -{ +void LoginDialog::showWithSelection() { auto tabletScriptingInterface = DependencyManager::get(); auto tablet = dynamic_cast(tabletScriptingInterface->getTablet("com.highfidelity.interface.tablet.system")); auto hmd = DependencyManager::get(); @@ -86,9 +82,7 @@ void LoginDialog::toggleAction() { } else { // change the menu item to login loginAction->setText("Login / Sign Up"); - connection = connect(loginAction, &QAction::triggered, [] { - LoginDialog::showWithSelection(); - }); + connection = connect(loginAction, &QAction::triggered, [] { LoginDialog::showWithSelection(); }); } } @@ -136,9 +130,8 @@ void LoginDialog::linkSteam() { payload.insert("steam_auth_ticket", QJsonValue::fromVariant(QVariant(ticket))); auto accountManager = DependencyManager::get(); - accountManager->sendRequest(LINK_STEAM_PATH, AccountManagerAuth::Required, - QNetworkAccessManager::PostOperation, callbackParams, - QJsonDocument(payload).toJson()); + accountManager->sendRequest(LINK_STEAM_PATH, AccountManagerAuth::Required, QNetworkAccessManager::PostOperation, + callbackParams, QJsonDocument(payload).toJson()); }); } } @@ -167,28 +160,24 @@ void LoginDialog::createAccountFromStream(QString username) { auto accountManager = DependencyManager::get(); accountManager->sendRequest(CREATE_ACCOUNT_FROM_STEAM_PATH, AccountManagerAuth::None, - QNetworkAccessManager::PostOperation, callbackParams, - QJsonDocument(payload).toJson()); + QNetworkAccessManager::PostOperation, callbackParams, QJsonDocument(payload).toJson()); }); } - } void LoginDialog::openUrl(const QString& url) const { - auto tablet = dynamic_cast(DependencyManager::get()->getTablet("com.highfidelity.interface.tablet.system")); + auto tablet = dynamic_cast( + DependencyManager::get()->getTablet("com.highfidelity.interface.tablet.system")); auto hmd = DependencyManager::get(); auto offscreenUi = DependencyManager::get(); if (tablet->getToolbarMode()) { - offscreenUi->load("Browser.qml", [=](QQmlContext* context, QObject* newObject) { - newObject->setProperty("url", url); - }); + offscreenUi->load("Browser.qml", [=](QQmlContext* context, QObject* newObject) { newObject->setProperty("url", url); }); LoginDialog::hide(); } else { if (!hmd->getShouldShowTablet() && !qApp->isHMDMode()) { - offscreenUi->load("Browser.qml", [=](QQmlContext* context, QObject* newObject) { - newObject->setProperty("url", url); - }); + offscreenUi->load("Browser.qml", + [=](QQmlContext* context, QObject* newObject) { newObject->setProperty("url", url); }); LoginDialog::hide(); } else { tablet->gotoWebScreen(url); @@ -213,28 +202,26 @@ void LoginDialog::createFailed(QNetworkReply* reply) { } void LoginDialog::signup(const QString& email, const QString& username, const QString& password) { - JSONCallbackParameters callbackParams; callbackParams.callbackReceiver = this; callbackParams.jsonCallbackMethod = "signupCompleted"; callbackParams.errorCallbackMethod = "signupFailed"; - + QJsonObject payload; - + QJsonObject userObject; userObject.insert("email", email); userObject.insert("username", username); userObject.insert("password", password); - + payload.insert("user", userObject); - + static const QString API_SIGNUP_PATH = "api/v1/users"; - + qDebug() << "Sending a request to create an account for" << username; - + auto accountManager = DependencyManager::get(); - accountManager->sendRequest(API_SIGNUP_PATH, AccountManagerAuth::None, - QNetworkAccessManager::PostOperation, callbackParams, + accountManager->sendRequest(API_SIGNUP_PATH, AccountManagerAuth::None, QNetworkAccessManager::PostOperation, callbackParams, QJsonDocument(payload).toJson()); } @@ -253,41 +240,38 @@ QString errorStringFromAPIObject(const QJsonValue& apiObject) { } void LoginDialog::signupFailed(QNetworkReply* reply) { - // parse the returned JSON to see what the problem was auto jsonResponse = QJsonDocument::fromJson(reply->readAll()); - + static const QString RESPONSE_DATA_KEY = "data"; - + auto dataJsonValue = jsonResponse.object()[RESPONSE_DATA_KEY]; - + if (dataJsonValue.isObject()) { auto dataObject = dataJsonValue.toObject(); - + static const QString EMAIL_DATA_KEY = "email"; static const QString USERNAME_DATA_KEY = "username"; static const QString PASSWORD_DATA_KEY = "password"; - + QStringList errorStringList; - + if (dataObject.contains(EMAIL_DATA_KEY)) { errorStringList.append(QString("Email %1.").arg(errorStringFromAPIObject(dataObject[EMAIL_DATA_KEY]))); } - + if (dataObject.contains(USERNAME_DATA_KEY)) { errorStringList.append(QString("Username %1.").arg(errorStringFromAPIObject(dataObject[USERNAME_DATA_KEY]))); } - + if (dataObject.contains(PASSWORD_DATA_KEY)) { errorStringList.append(QString("Password %1.").arg(errorStringFromAPIObject(dataObject[PASSWORD_DATA_KEY]))); } - + emit handleSignupFailed(errorStringList.join('\n')); } else { - static const QString DEFAULT_SIGN_UP_FAILURE_MESSAGE = "There was an unknown error while creating your account. Please try again later."; + static const QString DEFAULT_SIGN_UP_FAILURE_MESSAGE = + "There was an unknown error while creating your account. Please try again later."; emit handleSignupFailed(DEFAULT_SIGN_UP_FAILURE_MESSAGE); } - - } - From 9d7ba377ca72b99c900c159a758937139bdb5449 Mon Sep 17 00:00:00 2001 From: Wayne Chen Date: Tue, 11 Sep 2018 09:42:53 -0700 Subject: [PATCH 100/123] removing logging for login dialog --- interface/src/ui/LoginDialog.h | 3 --- 1 file changed, 3 deletions(-) diff --git a/interface/src/ui/LoginDialog.h b/interface/src/ui/LoginDialog.h index 155970e33d..717e089f3e 100644 --- a/interface/src/ui/LoginDialog.h +++ b/interface/src/ui/LoginDialog.h @@ -15,9 +15,6 @@ #define hifi_LoginDialog_h #include -#include - -Q_DECLARE_LOGGING_CATEGORY(login_dialog) class QNetworkReply; From aa62a89318d818513139ceecf8283e270380577a Mon Sep 17 00:00:00 2001 From: Wayne Chen Date: Tue, 11 Sep 2018 09:49:12 -0700 Subject: [PATCH 101/123] removing more logging for login dialog --- interface/src/ui/LoginDialog.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/interface/src/ui/LoginDialog.cpp b/interface/src/ui/LoginDialog.cpp index 0d574fdc5d..c1b9e5ccf3 100644 --- a/interface/src/ui/LoginDialog.cpp +++ b/interface/src/ui/LoginDialog.cpp @@ -30,7 +30,6 @@ #include "scripting/HMDScriptingInterface.h" HIFI_QML_DEF(LoginDialog) -Q_LOGGING_CATEGORY(login_dialog, "hifi.login.dialog") LoginDialog::LoginDialog(QQuickItem* parent) : OffscreenQmlDialog(parent) { auto accountManager = DependencyManager::get(); From 84cf40f8aa70b631326b81b8194b035b0bc6d289 Mon Sep 17 00:00:00 2001 From: Wayne Chen Date: Tue, 11 Sep 2018 10:07:57 -0700 Subject: [PATCH 102/123] changing calculation of load percentage --- interface/src/octree/SafeLanding.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/interface/src/octree/SafeLanding.cpp b/interface/src/octree/SafeLanding.cpp index 6b7a0f582c..ef62b04a55 100644 --- a/interface/src/octree/SafeLanding.cpp +++ b/interface/src/octree/SafeLanding.cpp @@ -130,8 +130,7 @@ bool SafeLanding::isLoadSequenceComplete() { float SafeLanding::loadingProgressPercentage() { Locker lock(_lock); if (_maxTrackedEntityCount > 0) { - float trackedEntityCount = (float)_trackedEntitiesRenderStatus.size(); - return ((_maxTrackedEntityCount - trackedEntityCount) / _maxTrackedEntityCount); + return ((_maxTrackedEntityCount - _trackedEntitiesRenderStatus.size()) / (float)_maxTrackedEntityCount); } return 0.0f; From 2a7e2af44ff17afe323edeb8a58c5f37c8270f3d Mon Sep 17 00:00:00 2001 From: Wayne Chen Date: Tue, 11 Sep 2018 10:36:10 -0700 Subject: [PATCH 103/123] syntax reversion + removing poppedUp var --- interface/src/ui/LoginDialog.cpp | 39 +++++++++++++++++++------------- interface/src/ui/LoginDialog.h | 3 --- 2 files changed, 23 insertions(+), 19 deletions(-) diff --git a/interface/src/ui/LoginDialog.cpp b/interface/src/ui/LoginDialog.cpp index c1b9e5ccf3..d6f6eef58c 100644 --- a/interface/src/ui/LoginDialog.cpp +++ b/interface/src/ui/LoginDialog.cpp @@ -19,7 +19,6 @@ #include #include #include - #include #include "AccountManager.h" @@ -31,11 +30,13 @@ HIFI_QML_DEF(LoginDialog) -LoginDialog::LoginDialog(QQuickItem* parent) : OffscreenQmlDialog(parent) { +LoginDialog::LoginDialog(QQuickItem *parent) : OffscreenQmlDialog(parent) { auto accountManager = DependencyManager::get(); #if !defined(Q_OS_ANDROID) - connect(accountManager.data(), &AccountManager::loginComplete, this, &LoginDialog::handleLoginCompleted); - connect(accountManager.data(), &AccountManager::loginFailed, this, &LoginDialog::handleLoginFailed); + connect(accountManager.data(), &AccountManager::loginComplete, + this, &LoginDialog::handleLoginCompleted); + connect(accountManager.data(), &AccountManager::loginFailed, + this, &LoginDialog::handleLoginFailed); #endif } @@ -77,7 +78,9 @@ void LoginDialog::toggleAction() { if (accountManager->isLoggedIn()) { // change the menu item to logout loginAction->setText("Logout " + accountManager->getAccountInfo().getUsername()); - connection = connect(loginAction, &QAction::triggered, accountManager.data(), &AccountManager::logout); + connection = connect(loginAction, &QAction::triggered, [] { + LoginDialog::showWithSelection(); + }); } else { // change the menu item to login loginAction->setText("Login / Sign Up"); @@ -129,8 +132,9 @@ void LoginDialog::linkSteam() { payload.insert("steam_auth_ticket", QJsonValue::fromVariant(QVariant(ticket))); auto accountManager = DependencyManager::get(); - accountManager->sendRequest(LINK_STEAM_PATH, AccountManagerAuth::Required, QNetworkAccessManager::PostOperation, - callbackParams, QJsonDocument(payload).toJson()); + accountManager->sendRequest(LINK_STEAM_PATH, AccountManagerAuth::Required, + QNetworkAccessManager::PostOperation, callbackParams, + QJsonDocument(payload).toJson()); }); } } @@ -159,24 +163,27 @@ void LoginDialog::createAccountFromStream(QString username) { auto accountManager = DependencyManager::get(); accountManager->sendRequest(CREATE_ACCOUNT_FROM_STEAM_PATH, AccountManagerAuth::None, - QNetworkAccessManager::PostOperation, callbackParams, QJsonDocument(payload).toJson()); + QNetworkAccessManager::PostOperation, callbackParams, + QJsonDocument(payload).toJson()); }); } } void LoginDialog::openUrl(const QString& url) const { - auto tablet = dynamic_cast( - DependencyManager::get()->getTablet("com.highfidelity.interface.tablet.system")); + auto tablet = dynamic_cast(DependencyManager::get()->getTablet("com.highfidelity.interface.tablet.system")); auto hmd = DependencyManager::get(); auto offscreenUi = DependencyManager::get(); if (tablet->getToolbarMode()) { - offscreenUi->load("Browser.qml", [=](QQmlContext* context, QObject* newObject) { newObject->setProperty("url", url); }); + offscreenUi->load("Browser.qml", [=](QQmlContext* context, QObject* newObject) { + newObject->setProperty("url", url); + }); LoginDialog::hide(); } else { if (!hmd->getShouldShowTablet() && !qApp->isHMDMode()) { - offscreenUi->load("Browser.qml", - [=](QQmlContext* context, QObject* newObject) { newObject->setProperty("url", url); }); + offscreenUi->load("Browser.qml", [=](QQmlContext* context, QObject* newObject) { + newObject->setProperty("url", url); + }); LoginDialog::hide(); } else { tablet->gotoWebScreen(url); @@ -220,7 +227,8 @@ void LoginDialog::signup(const QString& email, const QString& username, const QS qDebug() << "Sending a request to create an account for" << username; auto accountManager = DependencyManager::get(); - accountManager->sendRequest(API_SIGNUP_PATH, AccountManagerAuth::None, QNetworkAccessManager::PostOperation, callbackParams, + accountManager->sendRequest(API_SIGNUP_PATH, AccountManagerAuth::None, + QNetworkAccessManager::PostOperation, callbackParams, QJsonDocument(payload).toJson()); } @@ -269,8 +277,7 @@ void LoginDialog::signupFailed(QNetworkReply* reply) { emit handleSignupFailed(errorStringList.join('\n')); } else { - static const QString DEFAULT_SIGN_UP_FAILURE_MESSAGE = - "There was an unknown error while creating your account. Please try again later."; + static const QString DEFAULT_SIGN_UP_FAILURE_MESSAGE = "There was an unknown error while creating your account. Please try again later."; emit handleSignupFailed(DEFAULT_SIGN_UP_FAILURE_MESSAGE); } } diff --git a/interface/src/ui/LoginDialog.h b/interface/src/ui/LoginDialog.h index 717e089f3e..b3f3d8a1a4 100644 --- a/interface/src/ui/LoginDialog.h +++ b/interface/src/ui/LoginDialog.h @@ -65,9 +65,6 @@ protected slots: Q_INVOKABLE void signup(const QString& email, const QString& username, const QString& password); Q_INVOKABLE void openUrl(const QString& url) const; - -private: - bool _poppedUp {false}; }; #endif // hifi_LoginDialog_h From e931b661a5ac2d4d213263b786609369c58e4162 Mon Sep 17 00:00:00 2001 From: Wayne Chen Date: Tue, 11 Sep 2018 11:00:39 -0700 Subject: [PATCH 104/123] login dialog pops up in HMD again --- interface/src/Application.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index c2bbc72e5b..bb315a4254 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -2308,7 +2308,7 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo connect(checkLoginTimer, &QTimer::timeout, this, [this]() { auto accountManager = DependencyManager::get(); auto dialogsManager = DependencyManager::get(); - if (!accountManager->isLoggedIn() && !qApp->isHMDMode()) { + if (!accountManager->isLoggedIn()) { Setting::Handle{"loginDialogPoppedUp", false}.set(true); dialogsManager->showLoginDialog(); QJsonObject loginData = {}; From 77586933c87bcc5439b9aba8fc2b0d5627e263a6 Mon Sep 17 00:00:00 2001 From: sam gateau Date: Tue, 11 Sep 2018 11:43:14 -0700 Subject: [PATCH 105/123] Merge and fix the default _value of GLquery so it is 0, not broken --- libraries/gpu-gl-common/src/gpu/gl/GLBackendQuery.cpp | 2 +- libraries/gpu-gl-common/src/gpu/gl/GLQuery.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/libraries/gpu-gl-common/src/gpu/gl/GLBackendQuery.cpp b/libraries/gpu-gl-common/src/gpu/gl/GLBackendQuery.cpp index b54a12805b..8aa0f3c699 100644 --- a/libraries/gpu-gl-common/src/gpu/gl/GLBackendQuery.cpp +++ b/libraries/gpu-gl-common/src/gpu/gl/GLBackendQuery.cpp @@ -94,7 +94,7 @@ void GLBackend::do_getQuery(const Batch& batch, size_t paramOffset) { } #else // gles3 is not supporting true time query returns just the batch elapsed time - query->triggerReturnHandler(glquery->_result, glquery->_batchElapsedTime); + query->triggerReturnHandler(0, glquery->_batchElapsedTime); #endif (void)CHECK_GL_ERROR(); } diff --git a/libraries/gpu-gl-common/src/gpu/gl/GLQuery.h b/libraries/gpu-gl-common/src/gpu/gl/GLQuery.h index 18d79d5896..11a4ef0c0a 100644 --- a/libraries/gpu-gl-common/src/gpu/gl/GLQuery.h +++ b/libraries/gpu-gl-common/src/gpu/gl/GLQuery.h @@ -47,7 +47,7 @@ public: const GLuint& _endqo = { _id }; const GLuint _beginqo = { 0 }; - GLuint64 _result { (GLuint64)-1 }; + GLuint64 _result { (GLuint64)0 }; GLuint64 _batchElapsedTime{ (GLuint64)0 }; std::chrono::high_resolution_clock::time_point _batchElapsedTimeBegin; uint64_t _profileRangeId { 0 }; From 5c9a88868d65aff271ebc0d65521e7e1f16df934 Mon Sep 17 00:00:00 2001 From: Dante Ruiz Date: Tue, 11 Sep 2018 12:01:55 -0700 Subject: [PATCH 106/123] first round of requested changes --- interface/src/Application.cpp | 7 +- .../src/octree/OctreePacketProcessor.cpp | 4 - interface/src/octree/OctreePacketProcessor.h | 1 - interface/src/octree/SafeLanding.cpp | 89 +++++++++---------- interface/src/octree/SafeLanding.h | 6 +- libraries/audio-client/src/AudioClient.cpp | 2 +- libraries/audio-client/src/AudioClient.h | 4 +- 7 files changed, 49 insertions(+), 64 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index de0aea3bc2..d2079c4b4d 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -1387,7 +1387,6 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo }); connect(this, &Application::activeDisplayPluginChanged, reinterpret_cast(audioScriptingInterface.data()), &scripting::Audio::onContextChanged); - connect(this, &Application::interstitialModeChanged, audioIO, &AudioClient::setInterstitialStatus); } // Create the rendering engine. This can be slow on some machines due to lots of @@ -3500,6 +3499,9 @@ bool Application::isInterstitialMode() const { void Application::setIsInterstitialMode(bool interstitialMode) { if (_interstitialMode != interstitialMode) { _interstitialMode = interstitialMode; + + auto audioClient = DependencyManager::get(); + audioClient->setAudioPaused(_interstitialMode); emit interstitialModeChanged(_interstitialMode); } } @@ -5581,8 +5583,7 @@ void Application::update(float deltaTime) { // we haven't yet enabled physics. we wait until we think we have all the collision information // for nearby entities before starting bullet up. quint64 now = usecTimestampNow(); - bool renderReady = _octreeProcessor.isEntitiesRenderReady(); - if (isServerlessMode() || (_octreeProcessor.isLoadSequenceComplete() && renderReady)) { + if (isServerlessMode() || _octreeProcessor.isLoadSequenceComplete()) { // we've received a new full-scene octree stats packet, or it's been long enough to try again anyway _lastPhysicsCheckTime = now; _fullSceneCounterAtLastPhysicsCheck = _fullSceneReceivedCounter; diff --git a/interface/src/octree/OctreePacketProcessor.cpp b/interface/src/octree/OctreePacketProcessor.cpp index e670153a77..1abc755057 100644 --- a/interface/src/octree/OctreePacketProcessor.cpp +++ b/interface/src/octree/OctreePacketProcessor.cpp @@ -138,10 +138,6 @@ bool OctreePacketProcessor::isLoadSequenceComplete() const { return _safeLanding->isLoadSequenceComplete(); } -bool OctreePacketProcessor::isEntitiesRenderReady() const { - return _safeLanding->entitiesRenderReady(); -} - float OctreePacketProcessor::domainLoadingProgress() { return _safeLanding->loadingProgressPercentage(); } diff --git a/interface/src/octree/OctreePacketProcessor.h b/interface/src/octree/OctreePacketProcessor.h index 71e22bf240..0460fc7da0 100644 --- a/interface/src/octree/OctreePacketProcessor.h +++ b/interface/src/octree/OctreePacketProcessor.h @@ -27,7 +27,6 @@ public: void startEntitySequence(); bool isLoadSequenceComplete() const; - bool isEntitiesRenderReady() const; float domainLoadingProgress(); signals: diff --git a/interface/src/octree/SafeLanding.cpp b/interface/src/octree/SafeLanding.cpp index 6b7a0f582c..27674920d7 100644 --- a/interface/src/octree/SafeLanding.cpp +++ b/interface/src/octree/SafeLanding.cpp @@ -37,7 +37,6 @@ void SafeLanding::startEntitySequence(QSharedPointer entityT if (entityTree) { Locker lock(_lock); _entityTree = entityTree; - _trackedEntitiesRenderStatus.clear(); _trackedEntities.clear(); _trackingEntities = true; connect(std::const_pointer_cast(_entityTree).get(), @@ -67,35 +66,19 @@ void SafeLanding::addTrackedEntity(const EntityItemID& entityID) { Locker lock(_lock); EntityItemPointer entity = _entityTree->findEntityByID(entityID); - if (entity && !entity->getCollisionless()) { - const auto& entityType = entity->getType(); - if (entityType == EntityTypes::Model) { - ModelEntityItem * modelEntity = std::dynamic_pointer_cast(entity).get(); - static const std::set downloadedCollisionTypes - { SHAPE_TYPE_COMPOUND, SHAPE_TYPE_SIMPLE_COMPOUND, SHAPE_TYPE_STATIC_MESH, SHAPE_TYPE_SIMPLE_HULL }; - bool hasAABox; - entity->getAABox(hasAABox); - if (hasAABox && downloadedCollisionTypes.count(modelEntity->getShapeType()) != 0) { - // Only track entities with downloaded collision bodies. - _trackedEntities.emplace(entityID, entity); - qCDebug(interfaceapp) << "Safe Landing: Tracking entity " << entity->getItemName(); - } - } - } - - _trackedEntitiesRenderStatus.emplace(entityID, entity); - float trackedEntityCount = (float)_trackedEntitiesRenderStatus.size(); + _trackedEntities.emplace(entityID, entity); + int trackedEntityCount = _trackedEntities.size(); if (trackedEntityCount > _maxTrackedEntityCount) { _maxTrackedEntityCount = trackedEntityCount; } + qCDebug(interfaceapp) << "Safe Landing: Tracking entity " << entity->getItemName(); } } void SafeLanding::deleteTrackedEntity(const EntityItemID& entityID) { Locker lock(_lock); _trackedEntities.erase(entityID); - _trackedEntitiesRenderStatus.erase(entityID); } void SafeLanding::setCompletionSequenceNumbers(int first, int last) { @@ -114,7 +97,7 @@ void SafeLanding::noteReceivedsequenceNumber(int sequenceNumber) { } bool SafeLanding::isLoadSequenceComplete() { - if (isEntityPhysicsComplete() && isSequenceNumbersComplete()) { + if (isEntityLoadingComplete() && isSequenceNumbersComplete()) { Locker lock(_lock); _trackedEntities.clear(); _initialStart = INVALID_SEQUENCE; @@ -130,8 +113,8 @@ bool SafeLanding::isLoadSequenceComplete() { float SafeLanding::loadingProgressPercentage() { Locker lock(_lock); if (_maxTrackedEntityCount > 0) { - float trackedEntityCount = (float)_trackedEntitiesRenderStatus.size(); - return ((_maxTrackedEntityCount - trackedEntityCount) / _maxTrackedEntityCount); + int trackedEntityCount = _trackedEntities.size(); + return ((_maxTrackedEntityCount - trackedEntityCount) / (float)_maxTrackedEntityCount); } return 0.0f; @@ -155,38 +138,46 @@ bool SafeLanding::isSequenceNumbersComplete() { return false; } -bool SafeLanding::isEntityPhysicsComplete() { - Locker lock(_lock); - for (auto entityMapIter = _trackedEntities.begin(); entityMapIter != _trackedEntities.end(); ++entityMapIter) { - auto entity = entityMapIter->second; - if (!entity->shouldBePhysical() || entity->isReadyToComputeShape()) { - entityMapIter = _trackedEntities.erase(entityMapIter); - if (entityMapIter == _trackedEntities.end()) { - break; +bool isEntityPhysicsReady(const EntityItemPointer& entity) { + if (entity && !entity->getCollisionless()) { + const auto& entityType = entity->getType(); + if (entityType == EntityTypes::Model) { + ModelEntityItem * modelEntity = std::dynamic_pointer_cast(entity).get(); + static const std::set downloadedCollisionTypes + { SHAPE_TYPE_COMPOUND, SHAPE_TYPE_SIMPLE_COMPOUND, SHAPE_TYPE_STATIC_MESH, SHAPE_TYPE_SIMPLE_HULL }; + bool hasAABox; + entity->getAABox(hasAABox); + if (hasAABox && downloadedCollisionTypes.count(modelEntity->getShapeType()) != 0) { + return entity->isReadyToComputeShape(); + qCDebug(interfaceapp) << "Safe Landing: Tracking entity " << entity->getItemName(); } } } + + return true; +} + +bool SafeLanding::isEntityLoadingComplete() { + Locker lock(_lock); + auto entityTree = qApp->getEntities(); + auto entityMapIter = _trackedEntities.begin(); + + while (entityMapIter != _trackedEntities.end()) { + auto entity = entityMapIter->second; + bool isVisuallyReady = (entity->isVisuallyReady() || !entityTree->renderableForEntityId(entityMapIter->first)); + if (isEntityPhysicsReady(entity) && isVisuallyReady) { + entityMapIter = _trackedEntities.erase(entityMapIter); + } else { + if (!isVisuallyReady) { + entity->requestRenderUpdate(); + } + + entityMapIter++; + } + } return _trackedEntities.empty(); } -bool SafeLanding::entitiesRenderReady() { - Locker lock(_lock); - auto entityTree = qApp->getEntities(); - for (auto entityMapIter = _trackedEntitiesRenderStatus.begin(); entityMapIter != _trackedEntitiesRenderStatus.end(); ++entityMapIter) { - auto entity = entityMapIter->second; - bool visuallyReady = entity->isVisuallyReady(); - if (visuallyReady || !entityTree->renderableForEntityId(entityMapIter->first)) { - entityMapIter = _trackedEntitiesRenderStatus.erase(entityMapIter); - if (entityMapIter == _trackedEntitiesRenderStatus.end()) { - break; - } - } else { - entity->requestRenderUpdate(); - } - } - return _trackedEntitiesRenderStatus.empty(); -} - float SafeLanding::ElevatedPriority(const EntityItem& entityItem) { return entityItem.getCollisionless() ? 0.0f : 10.0f; } diff --git a/interface/src/octree/SafeLanding.h b/interface/src/octree/SafeLanding.h index 611b75ab79..317e4587c7 100644 --- a/interface/src/octree/SafeLanding.h +++ b/interface/src/octree/SafeLanding.h @@ -30,7 +30,6 @@ public: void setCompletionSequenceNumbers(int first, int last); // 'last' exclusive. void noteReceivedsequenceNumber(int sequenceNumber); bool isLoadSequenceComplete(); - bool entitiesRenderReady(); float loadingProgressPercentage(); private slots: @@ -40,7 +39,7 @@ private slots: private: bool isSequenceNumbersComplete(); void debugDumpSequenceIDs() const; - bool isEntityPhysicsComplete(); + bool isEntityLoadingComplete(); std::mutex _lock; using Locker = std::lock_guard; @@ -48,12 +47,11 @@ private: EntityTreePointer _entityTree; using EntityMap = std::map; EntityMap _trackedEntities; - EntityMap _trackedEntitiesRenderStatus; static constexpr int INVALID_SEQUENCE = -1; int _initialStart { INVALID_SEQUENCE }; int _initialEnd { INVALID_SEQUENCE }; - float _maxTrackedEntityCount { 0.0f }; + int _maxTrackedEntityCount { 0 }; struct SequenceLessThan { bool operator()(const int& a, const int& b) const; diff --git a/libraries/audio-client/src/AudioClient.cpp b/libraries/audio-client/src/AudioClient.cpp index 7af8a05f25..caf57cbc6e 100644 --- a/libraries/audio-client/src/AudioClient.cpp +++ b/libraries/audio-client/src/AudioClient.cpp @@ -1024,7 +1024,7 @@ void AudioClient::handleLocalEchoAndReverb(QByteArray& inputByteArray) { } void AudioClient::handleAudioInput(QByteArray& audioBuffer) { - if (!_interstitialMode) { + if (!_audioPaused) { if (_muted) { _lastInputLoudness = 0.0f; _timeSinceLastClip = 0.0f; diff --git a/libraries/audio-client/src/AudioClient.h b/libraries/audio-client/src/AudioClient.h index 90860798b3..099a692e26 100644 --- a/libraries/audio-client/src/AudioClient.h +++ b/libraries/audio-client/src/AudioClient.h @@ -162,6 +162,7 @@ public: bool startRecording(const QString& filename); void stopRecording(); + void setAudioPaused(bool pause) { _audioPaused = pause; } #ifdef Q_OS_WIN @@ -187,7 +188,6 @@ public slots: void handleRecordedAudioInput(const QByteArray& audio); void reset(); void audioMixerKilled(); - void setInterstitialStatus(bool interstitialMode) { _interstitialMode = interstitialMode; } void setMuted(bool muted, bool emitSignal = true); bool isMuted() { return _muted; } @@ -417,7 +417,7 @@ private: QVector _activeLocalAudioInjectors; bool _isPlayingBackRecording { false }; - bool _interstitialMode { true }; + bool _audioPaused { false }; CodecPluginPointer _codec; QString _selectedCodecName; From cc2c208b12f25c7d8ccd22cc91ced86d9f1f953e Mon Sep 17 00:00:00 2001 From: Dante Ruiz Date: Tue, 11 Sep 2018 12:12:31 -0700 Subject: [PATCH 107/123] fix small issue --- interface/src/octree/SafeLanding.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/interface/src/octree/SafeLanding.cpp b/interface/src/octree/SafeLanding.cpp index 2bbda7f5d5..f73a13f346 100644 --- a/interface/src/octree/SafeLanding.cpp +++ b/interface/src/octree/SafeLanding.cpp @@ -148,7 +148,6 @@ bool isEntityPhysicsReady(const EntityItemPointer& entity) { entity->getAABox(hasAABox); if (hasAABox && downloadedCollisionTypes.count(modelEntity->getShapeType()) != 0) { return entity->isReadyToComputeShape(); - qCDebug(interfaceapp) << "Safe Landing: Tracking entity " << entity->getItemName(); } } } From e7aef92e992af2541515353cab35174a2ef36eea Mon Sep 17 00:00:00 2001 From: Wayne Chen Date: Tue, 11 Sep 2018 12:51:51 -0700 Subject: [PATCH 108/123] fixing logout bug from syntax reversion --- interface/src/ui/LoginDialog.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/interface/src/ui/LoginDialog.cpp b/interface/src/ui/LoginDialog.cpp index d6f6eef58c..43da6ea863 100644 --- a/interface/src/ui/LoginDialog.cpp +++ b/interface/src/ui/LoginDialog.cpp @@ -78,9 +78,7 @@ void LoginDialog::toggleAction() { if (accountManager->isLoggedIn()) { // change the menu item to logout loginAction->setText("Logout " + accountManager->getAccountInfo().getUsername()); - connection = connect(loginAction, &QAction::triggered, [] { - LoginDialog::showWithSelection(); - }); + connection = connect(loginAction, &QAction::triggered, accountManager.data(), &AccountManager::logout); } else { // change the menu item to login loginAction->setText("Login / Sign Up"); From bc5d9a46a2d5e8966b1931b4a7d18ab5f92774b6 Mon Sep 17 00:00:00 2001 From: Anthony Thibault Date: Tue, 11 Sep 2018 13:12:46 -0700 Subject: [PATCH 109/123] Avatar loading orb now indicates status white - no url has been received yet for this avatar purple - a url has been received for this avatar but it's content is still downloading/loading blue - (only visible breifly) content has succesfully loaded red - (only visible briefly) content has failed to download. --- interface/src/avatar/OtherAvatar.cpp | 27 ++++++++++++++++++- interface/src/avatar/OtherAvatar.h | 1 + .../src/avatars-renderer/Avatar.cpp | 17 +++++++++--- .../src/avatars-renderer/Avatar.h | 10 +++++++ 4 files changed, 50 insertions(+), 5 deletions(-) diff --git a/interface/src/avatar/OtherAvatar.cpp b/interface/src/avatar/OtherAvatar.cpp index a0fa496c4c..cf15d4abdf 100644 --- a/interface/src/avatar/OtherAvatar.cpp +++ b/interface/src/avatar/OtherAvatar.cpp @@ -11,6 +11,24 @@ #include "AvatarMotionState.h" +static xColor getLoadingOrbColor(Avatar::LoadingStatus loadingStatus) { + + const xColor NO_MODEL_COLOR(0xe3, 0xe3, 0xe3); + const xColor LOAD_MODEL_COLOR(0xef, 0x93, 0xd1); + const xColor LOAD_SUCCESS_COLOR(0x1f, 0xc6, 0xa6); + const xColor LOAD_FAILURE_COLOR(0xc6, 0x21, 0x47); + switch (loadingStatus) { + case Avatar::LoadingStatus::NoModel: + return NO_MODEL_COLOR; + case Avatar::LoadingStatus::LoadModel: + return LOAD_MODEL_COLOR; + case Avatar::LoadingStatus::LoadSuccess: + return LOAD_SUCCESS_COLOR; + case Avatar::LoadingStatus::LoadFailure: + return LOAD_FAILURE_COLOR; + } +} + OtherAvatar::OtherAvatar(QThread* thread) : Avatar(thread) { // give the pointer to our head to inherited _headData variable from AvatarData _headData = new Head(this); @@ -48,7 +66,7 @@ void OtherAvatar::createOrb() { if (_otherAvatarOrbMeshPlaceholderID.isNull()) { _otherAvatarOrbMeshPlaceholder = std::make_shared(); _otherAvatarOrbMeshPlaceholder->setAlpha(1.0f); - _otherAvatarOrbMeshPlaceholder->setColor({ 0xFF, 0x00, 0xFF }); + _otherAvatarOrbMeshPlaceholder->setColor(getLoadingOrbColor(_loadingStatus)); _otherAvatarOrbMeshPlaceholder->setIsSolid(false); _otherAvatarOrbMeshPlaceholder->setPulseMin(0.5); _otherAvatarOrbMeshPlaceholder->setPulseMax(1.0); @@ -64,6 +82,13 @@ void OtherAvatar::createOrb() { } } +void OtherAvatar::indicateLoadingStatus(LoadingStatus loadingStatus) { + Avatar::indicateLoadingStatus(loadingStatus); + if (_otherAvatarOrbMeshPlaceholder) { + _otherAvatarOrbMeshPlaceholder->setColor(getLoadingOrbColor(_loadingStatus)); + } +} + void OtherAvatar::setSpaceIndex(int32_t index) { assert(_spaceIndex == -1); _spaceIndex = index; diff --git a/interface/src/avatar/OtherAvatar.h b/interface/src/avatar/OtherAvatar.h index ccfe42dbed..94b98f2747 100644 --- a/interface/src/avatar/OtherAvatar.h +++ b/interface/src/avatar/OtherAvatar.h @@ -28,6 +28,7 @@ public: virtual void instantiableAvatar() override { }; virtual void createOrb() override; + virtual void indicateLoadingStatus(LoadingStatus loadingStatus) override; void updateOrbPosition(); void removeOrb(); diff --git a/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp b/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp index 4ffccefe61..ac25f65576 100644 --- a/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp +++ b/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp @@ -126,6 +126,8 @@ Avatar::Avatar(QThread* thread) : _leftPointerGeometryID = geometryCache->allocateID(); _rightPointerGeometryID = geometryCache->allocateID(); _lastRenderUpdateTime = usecTimestampNow(); + + indicateLoadingStatus(LoadingStatus::NoModel); } Avatar::~Avatar() { @@ -1370,12 +1372,15 @@ void Avatar::scaleVectorRelativeToPosition(glm::vec3 &positionToScale) const { } void Avatar::setSkeletonModelURL(const QUrl& skeletonModelURL) { - if (!isMyAvatar()) { - createOrb(); - } AvatarData::setSkeletonModelURL(skeletonModelURL); if (QThread::currentThread() == thread()) { + + if (!isMyAvatar()) { + createOrb(); + } + _skeletonModel->setURL(_skeletonModelURL); + indicateLoadingStatus(LoadingStatus::LoadModel); } else { QMetaObject::invokeMethod(_skeletonModel.get(), "setURL", Qt::QueuedConnection, Q_ARG(QUrl, _skeletonModelURL)); } @@ -1388,11 +1393,12 @@ void Avatar::setModelURLFinished(bool success) { _reconstructSoftEntitiesJointMap = true; if (!success && _skeletonModelURL != AvatarData::defaultFullAvatarModelUrl()) { + indicateLoadingStatus(LoadingStatus::LoadFailure); const int MAX_SKELETON_DOWNLOAD_ATTEMPTS = 4; // NOTE: we don't want to be as generous as ResourceCache is, we only want 4 attempts if (_skeletonModel->getResourceDownloadAttemptsRemaining() <= 0 || _skeletonModel->getResourceDownloadAttempts() > MAX_SKELETON_DOWNLOAD_ATTEMPTS) { qCWarning(avatars_renderer) << "Using default after failing to load Avatar model: " << _skeletonModelURL - << "after" << _skeletonModel->getResourceDownloadAttempts() << "attempts."; + << "after" << _skeletonModel->getResourceDownloadAttempts() << "attempts."; // call _skeletonModel.setURL, but leave our copy of _skeletonModelURL alone. This is so that // we don't redo this every time we receive an identity packet from the avatar with the bad url. QMetaObject::invokeMethod(_skeletonModel.get(), "setURL", @@ -1403,6 +1409,9 @@ void Avatar::setModelURLFinished(bool success) { << "out of:" << MAX_SKELETON_DOWNLOAD_ATTEMPTS; } } + if (success) { + indicateLoadingStatus(LoadingStatus::LoadSuccess); + } } // rig is ready diff --git a/libraries/avatars-renderer/src/avatars-renderer/Avatar.h b/libraries/avatars-renderer/src/avatars-renderer/Avatar.h index 37c3d08c6c..3482c3c193 100644 --- a/libraries/avatars-renderer/src/avatars-renderer/Avatar.h +++ b/libraries/avatars-renderer/src/avatars-renderer/Avatar.h @@ -107,6 +107,14 @@ public: virtual bool isMyAvatar() const override { return false; } virtual void createOrb() { } + enum class LoadingStatus { + NoModel, + LoadModel, + LoadSuccess, + LoadFailure + }; + virtual void indicateLoadingStatus(LoadingStatus loadingStatus) { _loadingStatus = loadingStatus; } + virtual QVector getJointRotations() const override; using AvatarData::getJointRotation; virtual glm::quat getJointRotation(int index) const override; @@ -540,6 +548,8 @@ protected: static const float MYAVATAR_LOADING_PRIORITY; static const float OTHERAVATAR_LOADING_PRIORITY; static const float ATTACHMENT_LOADING_PRIORITY; + + LoadingStatus _loadingStatus { LoadingStatus::NoModel }; }; #endif // hifi_Avatar_h From b665dbe13e00793de11a1b87153027b0bdccc706 Mon Sep 17 00:00:00 2001 From: Dante Ruiz Date: Tue, 11 Sep 2018 14:18:12 -0700 Subject: [PATCH 110/123] finished requested changes --- interface/src/Application.cpp | 32 ++++++---------------- interface/src/avatar/AvatarManager.cpp | 12 +++++++- interface/src/avatar/AvatarManager.h | 3 ++ libraries/audio-client/src/AudioClient.cpp | 10 +++++++ libraries/audio-client/src/AudioClient.h | 2 +- scripts/system/interstitialPage.js | 2 +- 6 files changed, 34 insertions(+), 27 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 8a68a606fc..ca27b29b92 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -2294,25 +2294,6 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo // Preload Tablet sounds DependencyManager::get()->preloadSounds(); - connect(this, &Application::interstitialModeChanged, this, [this] (bool interstitialMode) { - if (!interstitialMode) { - DependencyManager::get()->negotiateAudioFormat(); - _queryExpiry = SteadyClock::now(); - if (_avatarOverrideUrl.isValid()) { - getMyAvatar()->useFullAvatarURL(_avatarOverrideUrl); - } - - if (getMyAvatar()->getFullAvatarURLFromPreferences() != getMyAvatar()->getSkeletonModelURL()) { - getMyAvatar()->resetFullAvatarURL(); - } - getMyAvatar()->markIdentityDataChanged(); - getMyAvatar()->resetLastSent(); - - // transmit a "sendAll" packet to the AvatarMixer we just connected to. - getMyAvatar()->sendAvatarDataPacket(true); - } - }); - _pendingIdleEvent = false; _pendingRenderEvent = false; @@ -3496,8 +3477,9 @@ void Application::setIsInterstitialMode(bool interstitialMode) { if (_interstitialMode != interstitialMode) { _interstitialMode = interstitialMode; - auto audioClient = DependencyManager::get(); - audioClient->setAudioPaused(_interstitialMode); + DependencyManager::get()->setAudioPaused(_interstitialMode); + DependencyManager::get()->setMyAvatarDataPacketsPaused(_interstitialMode); + emit interstitialModeChanged(_interstitialMode); } } @@ -6477,7 +6459,7 @@ void Application::nodeActivated(SharedNodePointer node) { DependencyManager::get()->negotiateAudioFormat(); } - if (node->getType() == NodeType::AvatarMixer && !isInterstitialMode()) { + if (node->getType() == NodeType::AvatarMixer) { _queryExpiry = SteadyClock::now(); // new avatar mixer, send off our identity packet on next update loop @@ -6493,8 +6475,10 @@ void Application::nodeActivated(SharedNodePointer node) { getMyAvatar()->markIdentityDataChanged(); getMyAvatar()->resetLastSent(); - // transmit a "sendAll" packet to the AvatarMixer we just connected to. - getMyAvatar()->sendAvatarDataPacket(true); + if (!isInterstitialMode()) { + // transmit a "sendAll" packet to the AvatarMixer we just connected to. + getMyAvatar()->sendAvatarDataPacket(true); + } } } diff --git a/interface/src/avatar/AvatarManager.cpp b/interface/src/avatar/AvatarManager.cpp index 2c758dfc69..b9e30a38eb 100644 --- a/interface/src/avatar/AvatarManager.cpp +++ b/interface/src/avatar/AvatarManager.cpp @@ -137,7 +137,7 @@ void AvatarManager::updateMyAvatar(float deltaTime) { quint64 now = usecTimestampNow(); quint64 dt = now - _lastSendAvatarDataTime; - if (dt > MIN_TIME_BETWEEN_MY_AVATAR_DATA_SENDS && !qApp->isInterstitialMode()) { + if (dt > MIN_TIME_BETWEEN_MY_AVATAR_DATA_SENDS && !_myAvatarDataPacketsPaused) { // send head/hand data to the avatar mixer and voxel server PerformanceTimer perfTimer("send"); _myAvatar->sendAvatarDataPacket(); @@ -155,6 +155,16 @@ float AvatarManager::getAvatarDataRate(const QUuid& sessionID, const QString& ra return avatar ? avatar->getDataRate(rateName) : 0.0f; } +void AvatarManager::setMyAvatarDataPacketsPaused(bool pause) { + if (_myAvatarDataPacketsPaused != pause) { + _myAvatarDataPacketsPaused = pause; + + if (!_myAvatarDataPacketsPaused) { + _myAvatar->sendAvatarDataPacket(true); + } + } +} + float AvatarManager::getAvatarUpdateRate(const QUuid& sessionID, const QString& rateName) const { auto avatar = getAvatarBySessionID(sessionID); return avatar ? avatar->getUpdateRate(rateName) : 0.0f; diff --git a/interface/src/avatar/AvatarManager.h b/interface/src/avatar/AvatarManager.h index bcdfc064bd..ea92389adc 100644 --- a/interface/src/avatar/AvatarManager.h +++ b/interface/src/avatar/AvatarManager.h @@ -91,6 +91,8 @@ public: void updateOtherAvatars(float deltaTime); void sendIdentityRequest(const QUuid& avatarID) const; + void setMyAvatarDataPacketsPaused(bool puase); + void postUpdate(float deltaTime, const render::ScenePointer& scene); void clearOtherAvatars(); @@ -219,6 +221,7 @@ private: int _numAvatarsNotUpdated { 0 }; float _avatarSimulationTime { 0.0f }; bool _shouldRender { true }; + bool _myAvatarDataPacketsPaused { false }; mutable int _identityRequestsSent { 0 }; mutable std::mutex _spaceLock; diff --git a/libraries/audio-client/src/AudioClient.cpp b/libraries/audio-client/src/AudioClient.cpp index caf57cbc6e..3a33eccc8a 100644 --- a/libraries/audio-client/src/AudioClient.cpp +++ b/libraries/audio-client/src/AudioClient.cpp @@ -305,6 +305,16 @@ void AudioClient::audioMixerKilled() { emit disconnected(); } +void AudioClient::setAudioPaused(bool pause) { + if (_audioPaused != pause) { + _audioPaused = pause; + + if (!_audioPaused) { + negotiateAudioFormat(); + } + } +} + QAudioDeviceInfo getNamedAudioDeviceForMode(QAudio::Mode mode, const QString& deviceName) { QAudioDeviceInfo result; foreach(QAudioDeviceInfo audioDevice, getAvailableDevices(mode)) { diff --git a/libraries/audio-client/src/AudioClient.h b/libraries/audio-client/src/AudioClient.h index 099a692e26..4640d7c045 100644 --- a/libraries/audio-client/src/AudioClient.h +++ b/libraries/audio-client/src/AudioClient.h @@ -162,7 +162,7 @@ public: bool startRecording(const QString& filename); void stopRecording(); - void setAudioPaused(bool pause) { _audioPaused = pause; } + void setAudioPaused(bool pause); #ifdef Q_OS_WIN diff --git a/scripts/system/interstitialPage.js b/scripts/system/interstitialPage.js index 1cc048ca99..dcce721cd9 100644 --- a/scripts/system/interstitialPage.js +++ b/scripts/system/interstitialPage.js @@ -305,7 +305,7 @@ } } - var THE_PLACE = "hifi://TheSpot-dev"; + var THE_PLACE = (HifiAbout.buildVersion === "dev") ? "hifi://TheSpot-dev": "hifi://TheSpot"; function clickedOnOverlay(overlayID, event) { if (loadingToTheSpotID === overlayID) { location.handleLookupString(THE_PLACE); From 23ed314250df89800c904bea5bca6b56f0835f35 Mon Sep 17 00:00:00 2001 From: Anthony Thibault Date: Tue, 11 Sep 2018 14:50:50 -0700 Subject: [PATCH 111/123] Fix for missing return warning --- interface/src/avatar/OtherAvatar.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/interface/src/avatar/OtherAvatar.cpp b/interface/src/avatar/OtherAvatar.cpp index cf15d4abdf..29fa98fd1d 100644 --- a/interface/src/avatar/OtherAvatar.cpp +++ b/interface/src/avatar/OtherAvatar.cpp @@ -25,6 +25,7 @@ static xColor getLoadingOrbColor(Avatar::LoadingStatus loadingStatus) { case Avatar::LoadingStatus::LoadSuccess: return LOAD_SUCCESS_COLOR; case Avatar::LoadingStatus::LoadFailure: + default: return LOAD_FAILURE_COLOR; } } From c97d6460835b023cc5cbc6a549ccf9565fb37e52 Mon Sep 17 00:00:00 2001 From: Dante Ruiz Date: Tue, 11 Sep 2018 15:57:44 -0700 Subject: [PATCH 112/123] making requested changes and fixing compile issue for jenkins --- interface/src/Application.cpp | 4 ---- interface/src/Application.h | 5 ----- interface/src/ConnectionMonitor.cpp | 10 +++++----- interface/src/octree/SafeLanding.cpp | 2 +- libraries/networking/src/AddressManager.cpp | 6 ------ libraries/networking/src/AddressManager.h | 2 +- 6 files changed, 7 insertions(+), 22 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index ca27b29b92..36d2e09abf 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -3479,8 +3479,6 @@ void Application::setIsInterstitialMode(bool interstitialMode) { DependencyManager::get()->setAudioPaused(_interstitialMode); DependencyManager::get()->setMyAvatarDataPacketsPaused(_interstitialMode); - - emit interstitialModeChanged(_interstitialMode); } } @@ -5323,7 +5321,6 @@ void Application::resetPhysicsReadyInformation() { _fullSceneCounterAtLastPhysicsCheck = 0; _nearbyEntitiesCountAtLastPhysicsCheck = 0; _nearbyEntitiesStabilityCount = 0; - _nearbyEntitiesReadyCount = 0; _physicsEnabled = false; _octreeProcessor.startEntitySequence(); } @@ -6592,7 +6589,6 @@ bool Application::nearbyEntitiesAreReadyForPhysics() { readyNearbyEntities++; } } - _nearbyEntitiesReadyCount = readyNearbyEntities; return result; } return false; diff --git a/interface/src/Application.h b/interface/src/Application.h index 4446a7d406..aafc6a4f0d 100644 --- a/interface/src/Application.h +++ b/interface/src/Application.h @@ -225,9 +225,6 @@ public: bool getPreferStylusOverLaser() { return _preferStylusOverLaserSetting.get(); } void setPreferStylusOverLaser(bool value); - uint32_t getEntitiesStabilityCount() { return _nearbyEntitiesStabilityCount; } - uint32_t getNearbyEntitiesReadyCount() { return _nearbyEntitiesReadyCount; } - uint32_t getNearbyEntitiesCount() { return _nearbyEntitiesCountAtLastPhysicsCheck; } // FIXME: Remove setting completely or make available through JavaScript API? //bool getPreferAvatarFingerOverStylus() { return _preferAvatarFingerOverStylusSetting.get(); } bool getPreferAvatarFingerOverStylus() { return false; } @@ -337,7 +334,6 @@ signals: void activeDisplayPluginChanged(); void uploadRequest(QString path); - void interstitialModeChanged(bool interstitialMode); public slots: QVector pasteEntities(float x, float y, float z); @@ -732,7 +728,6 @@ private: uint32_t _fullSceneCounterAtLastPhysicsCheck { 0 }; // _fullSceneReceivedCounter last time we checked physics ready uint32_t _nearbyEntitiesCountAtLastPhysicsCheck { 0 }; // how many in-range entities last time we checked physics ready uint32_t _nearbyEntitiesStabilityCount { 0 }; // how many times has _nearbyEntitiesCountAtLastPhysicsCheck been the same - uint32_t _nearbyEntitiesReadyCount { 0 }; quint64 _lastPhysicsCheckTime { usecTimestampNow() }; // when did we last check to see if physics was ready bool _keyboardDeviceHasFocus { true }; diff --git a/interface/src/ConnectionMonitor.cpp b/interface/src/ConnectionMonitor.cpp index 6578abf285..2f4e135c9a 100644 --- a/interface/src/ConnectionMonitor.cpp +++ b/interface/src/ConnectionMonitor.cpp @@ -21,8 +21,8 @@ // Because the connection monitor is created at startup, the time we wait on initial load // should be longer to allow the application to initialize. -static const int ON_INITIAL_LOAD_DISPLAY_AFTER_DISCONNECTED_FOR_X_MS = 10000; -static const int DISPLAY_AFTER_DISCONNECTED_FOR_X_MS = 5000; +static const int ON_INITIAL_LOAD_REDIRECT_AFTER_DISCONNECTED_FOR_X_MS = 10000; +static const int REDIRECT_AFTER_DISCONNECTED_FOR_X_MS = 5000; static const QString ERROR_DOMAIN_URL = "file:///~/serverless/redirect.json"; void ConnectionMonitor::init() { @@ -36,17 +36,17 @@ void ConnectionMonitor::init() { _timer.setSingleShot(true); if (!domainHandler.isConnected()) { - _timer.start(ON_INITIAL_LOAD_DISPLAY_AFTER_DISCONNECTED_FOR_X_MS); + _timer.start(ON_INITIAL_LOAD_REDIRECT_AFTER_DISCONNECTED_FOR_X_MS); } connect(&_timer, &QTimer::timeout, this, []() { - qDebug() << "ConnectionMonitor: Showing connection failure window"; + qDebug() << "ConnectionMonitor: Redirecting to 404 error domain"; qApp->goToErrorDomainURL(REDIRECT_HIFI_ADDRESS); }); } void ConnectionMonitor::startTimer() { - _timer.start(DISPLAY_AFTER_DISCONNECTED_FOR_X_MS); + _timer.start(REDIRECT_AFTER_DISCONNECTED_FOR_X_MS); } void ConnectionMonitor::stopTimer() { diff --git a/interface/src/octree/SafeLanding.cpp b/interface/src/octree/SafeLanding.cpp index f73a13f346..8912de668a 100644 --- a/interface/src/octree/SafeLanding.cpp +++ b/interface/src/octree/SafeLanding.cpp @@ -67,7 +67,7 @@ void SafeLanding::addTrackedEntity(const EntityItemID& entityID) { EntityItemPointer entity = _entityTree->findEntityByID(entityID); _trackedEntities.emplace(entityID, entity); - int trackedEntityCount = _trackedEntities.size(); + int trackedEntityCount = (int)_trackedEntities.size(); if (trackedEntityCount > _maxTrackedEntityCount) { _maxTrackedEntityCount = trackedEntityCount; diff --git a/libraries/networking/src/AddressManager.cpp b/libraries/networking/src/AddressManager.cpp index 824e0d4515..9e5cbcaa7b 100644 --- a/libraries/networking/src/AddressManager.cpp +++ b/libraries/networking/src/AddressManager.cpp @@ -152,12 +152,6 @@ void AddressManager::goForward() { } } -void AddressManager::goToLastAddress() { - // this should always return something as long as the URL isn't empty. - handleUrl(_lastVisitedURL, - LookupTrigger::AttemptedRefresh); -} - void AddressManager::storeCurrentAddress() { auto url = currentAddress(); diff --git a/libraries/networking/src/AddressManager.h b/libraries/networking/src/AddressManager.h index e27504fc3a..a97f16dce8 100644 --- a/libraries/networking/src/AddressManager.h +++ b/libraries/networking/src/AddressManager.h @@ -262,7 +262,7 @@ public slots: * Go to the last address tried. This will be the last URL tried from location.handleLookupString * @function location.goToLastAddress */ - void goToLastAddress(); + void goToLastAddress() { handleUrl(_lastVisitedURL, LookupTrigger::AttemptedRefresh); } /**jsdoc * Refresh the current address, e.g., after connecting to a domain in order to position the user to the desired location. From 8c7781a6d47c8afe1409fe289799b1d6d1b4df10 Mon Sep 17 00:00:00 2001 From: sam gateau Date: Tue, 11 Sep 2018 15:57:57 -0700 Subject: [PATCH 113/123] use the std::chrono duration the way it should be --- libraries/gpu-gl-common/src/gpu/gl/GLBackendQuery.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/gpu-gl-common/src/gpu/gl/GLBackendQuery.cpp b/libraries/gpu-gl-common/src/gpu/gl/GLBackendQuery.cpp index 8aa0f3c699..61423bf970 100644 --- a/libraries/gpu-gl-common/src/gpu/gl/GLBackendQuery.cpp +++ b/libraries/gpu-gl-common/src/gpu/gl/GLBackendQuery.cpp @@ -63,7 +63,7 @@ void GLBackend::do_endQuery(const Batch& batch, size_t paramOffset) { #endif --_queryStage._rangeQueryDepth; - auto duration_ns = (std::chrono::high_resolution_clock::now() - glquery->_batchElapsedTimeBegin); + auto duration_ns = std::chrono::duration_cast(std::chrono::high_resolution_clock::now() - glquery->_batchElapsedTimeBegin); glquery->_batchElapsedTime = duration_ns.count(); PROFILE_RANGE_END(render_gpu_gl_detail, glquery->_profileRangeId); From 0f25756908524d08cf9856e4058c8f1f6a084fa9 Mon Sep 17 00:00:00 2001 From: Wayne Chen Date: Tue, 11 Sep 2018 16:29:39 -0700 Subject: [PATCH 114/123] expose domain connection error to Window --- interface/src/Application.cpp | 2 -- interface/src/scripting/WindowScriptingInterface.cpp | 7 +++++++ interface/src/scripting/WindowScriptingInterface.h | 7 +++++++ libraries/networking/src/AddressManager.h | 9 --------- libraries/networking/src/DomainHandler.cpp | 2 +- libraries/networking/src/DomainHandler.h | 5 +++++ 6 files changed, 20 insertions(+), 12 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index ca27b29b92..64cceec0fe 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -1211,8 +1211,6 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo auto discoverabilityManager = DependencyManager::get(); connect(&locationUpdateTimer, &QTimer::timeout, discoverabilityManager.data(), &DiscoverabilityManager::updateLocation); - connect(&domainHandler, &DomainHandler::domainConnectionErrorChanged, DependencyManager::get().data(), - &AddressManager::setLastDomainConnectionError); connect(&locationUpdateTimer, &QTimer::timeout, DependencyManager::get().data(), &AddressManager::storeCurrentAddress); locationUpdateTimer.start(DATA_SERVER_LOCATION_CHANGE_UPDATE_MSECS); diff --git a/interface/src/scripting/WindowScriptingInterface.cpp b/interface/src/scripting/WindowScriptingInterface.cpp index 9e13e2affb..aa55fd2ebc 100644 --- a/interface/src/scripting/WindowScriptingInterface.cpp +++ b/interface/src/scripting/WindowScriptingInterface.cpp @@ -39,6 +39,9 @@ WindowScriptingInterface::WindowScriptingInterface() { connect(&domainHandler, &DomainHandler::disconnectedFromDomain, this, &WindowScriptingInterface::disconnectedFromDomain); connect(&domainHandler, &DomainHandler::domainConnectionRefused, this, &WindowScriptingInterface::domainConnectionRefused); + connect(&domainHandler, &DomainHandler::domainConnectionErrorChanged, this, [this](int reasonCode) { + _lastDomainConnectionError = reasonCode; + }); connect(qApp, &Application::svoImportRequested, [this](const QString& urlString) { static const QMetaMethod svoImportRequestedSignal = @@ -409,6 +412,10 @@ glm::vec2 WindowScriptingInterface::getDeviceSize() const { return qApp->getDeviceSize(); } +int WindowScriptingInterface::getLastDominConnectionError() const { + return DependencyManager::get()->getDomainHandler().getLastDomainConnectionError(); +} + int WindowScriptingInterface::getX() { return qApp->getWindow()->geometry().x(); } diff --git a/interface/src/scripting/WindowScriptingInterface.h b/interface/src/scripting/WindowScriptingInterface.h index 626d142785..eaf79106d3 100644 --- a/interface/src/scripting/WindowScriptingInterface.h +++ b/interface/src/scripting/WindowScriptingInterface.h @@ -491,6 +491,13 @@ public slots: */ glm::vec2 getDeviceSize() const; + /**jsdoc + * Gets the last domain connection error when a connection is refused. + * @function Window.getLastDomainConnectionError + * @returns {Window.ConnectionRefusedReason} Integer number that enumerates the last domain connection refused. + */ + int getLastDominConnectionError() const; + /**jsdoc * Open a non-modal message box that can have a variety of button combinations. See also, * {@link Window.updateMessageBox|updateMessageBox} and {@link Window.closeMessageBox|closeMessageBox}. diff --git a/libraries/networking/src/AddressManager.h b/libraries/networking/src/AddressManager.h index e27504fc3a..fd787171df 100644 --- a/libraries/networking/src/AddressManager.h +++ b/libraries/networking/src/AddressManager.h @@ -56,9 +56,6 @@ const QString GET_PLACE = "/api/v1/places/%1"; * Read-only. * @property {boolean} isConnected - true if you're connected to the domain in your current href * metaverse address, otherwise false. - * @property {Window.ConnectionRefusedReason} lastDomainConnectionError - The last error saved from connecting to a domain - * unsuccessfully. - * Read-only. * @property {string} pathname - The location and orientation in your current href metaverse address * (e.g., "/15,-10,26/0,0,0,1"). * Read-only. @@ -76,7 +73,6 @@ class AddressManager : public QObject, public Dependency { Q_PROPERTY(QUrl href READ currentShareableAddress) Q_PROPERTY(QString protocol READ getProtocol) Q_PROPERTY(QString hostname READ getHost) - Q_PROPERTY(int lastDomainConnectionError READ getLastDomainConnectionError) Q_PROPERTY(QString pathname READ currentPath) Q_PROPERTY(QString placename READ getPlaceName) Q_PROPERTY(QString domainID READ getDomainID) @@ -187,9 +183,6 @@ public: QUrl getDomainURL() { return _domainURL; } - int getLastDomainConnectionError() { return _lastDomainConnectionError; } - void setLastDomainConnectionError(int reasonCode) { _lastDomainConnectionError = reasonCode; } - public slots: /**jsdoc * Go to a specified metaverse address. @@ -470,8 +463,6 @@ private: QUrl _domainURL; QUrl _lastVisitedURL; - // domain connection error from domain handler. - int _lastDomainConnectionError{ -1 }; QUuid _rootPlaceID; PositionGetter _positionGetter; diff --git a/libraries/networking/src/DomainHandler.cpp b/libraries/networking/src/DomainHandler.cpp index 75d670cd3d..4bed1646ee 100644 --- a/libraries/networking/src/DomainHandler.cpp +++ b/libraries/networking/src/DomainHandler.cpp @@ -480,7 +480,7 @@ void DomainHandler::processDomainServerConnectionDeniedPacket(QSharedPointer _namedPaths; + + // domain connection error upon connection refusal. + int _lastDomainConnectionError{ -1 }; }; const QString DOMAIN_SPAWNING_POINT { "/0, -10, 0" }; From 9ee21c9956dc1cb53cc86f90602faccb9c569023 Mon Sep 17 00:00:00 2001 From: Wayne Chen Date: Tue, 11 Sep 2018 16:49:11 -0700 Subject: [PATCH 115/123] removing `virtual` keyword from destructor --- interface/src/ui/LoginDialog.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/src/ui/LoginDialog.h b/interface/src/ui/LoginDialog.h index b3f3d8a1a4..ae069f9ab1 100644 --- a/interface/src/ui/LoginDialog.h +++ b/interface/src/ui/LoginDialog.h @@ -27,7 +27,7 @@ public: LoginDialog(QQuickItem* parent = nullptr); - virtual ~LoginDialog(); + ~LoginDialog(); static void showWithSelection(); From d478fcf027825ed39f22cafa5198218b48431a28 Mon Sep 17 00:00:00 2001 From: Wayne Chen Date: Tue, 11 Sep 2018 17:01:14 -0700 Subject: [PATCH 116/123] remove unused signal from domain handler --- interface/src/scripting/WindowScriptingInterface.cpp | 3 --- 1 file changed, 3 deletions(-) diff --git a/interface/src/scripting/WindowScriptingInterface.cpp b/interface/src/scripting/WindowScriptingInterface.cpp index aa55fd2ebc..46f7ee07b6 100644 --- a/interface/src/scripting/WindowScriptingInterface.cpp +++ b/interface/src/scripting/WindowScriptingInterface.cpp @@ -39,9 +39,6 @@ WindowScriptingInterface::WindowScriptingInterface() { connect(&domainHandler, &DomainHandler::disconnectedFromDomain, this, &WindowScriptingInterface::disconnectedFromDomain); connect(&domainHandler, &DomainHandler::domainConnectionRefused, this, &WindowScriptingInterface::domainConnectionRefused); - connect(&domainHandler, &DomainHandler::domainConnectionErrorChanged, this, [this](int reasonCode) { - _lastDomainConnectionError = reasonCode; - }); connect(qApp, &Application::svoImportRequested, [this](const QString& urlString) { static const QMetaMethod svoImportRequestedSignal = From d4dfaec8ea4054666713729b71f9761609319521 Mon Sep 17 00:00:00 2001 From: Wayne Chen Date: Tue, 11 Sep 2018 17:02:38 -0700 Subject: [PATCH 117/123] updating typo --- interface/src/scripting/WindowScriptingInterface.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/src/scripting/WindowScriptingInterface.cpp b/interface/src/scripting/WindowScriptingInterface.cpp index 46f7ee07b6..71650c8c87 100644 --- a/interface/src/scripting/WindowScriptingInterface.cpp +++ b/interface/src/scripting/WindowScriptingInterface.cpp @@ -409,7 +409,7 @@ glm::vec2 WindowScriptingInterface::getDeviceSize() const { return qApp->getDeviceSize(); } -int WindowScriptingInterface::getLastDominConnectionError() const { +int WindowScriptingInterface::getLastDomainConnectionError() const { return DependencyManager::get()->getDomainHandler().getLastDomainConnectionError(); } From 84f95dd4b87e1e260903412d383200c9d151851b Mon Sep 17 00:00:00 2001 From: Wayne Chen Date: Tue, 11 Sep 2018 17:03:06 -0700 Subject: [PATCH 118/123] updating typo --- interface/src/scripting/WindowScriptingInterface.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/src/scripting/WindowScriptingInterface.h b/interface/src/scripting/WindowScriptingInterface.h index eaf79106d3..3827406729 100644 --- a/interface/src/scripting/WindowScriptingInterface.h +++ b/interface/src/scripting/WindowScriptingInterface.h @@ -496,7 +496,7 @@ public slots: * @function Window.getLastDomainConnectionError * @returns {Window.ConnectionRefusedReason} Integer number that enumerates the last domain connection refused. */ - int getLastDominConnectionError() const; + int getLastDomainConnectionError() const; /**jsdoc * Open a non-modal message box that can have a variety of button combinations. See also, From a85a7a61190c9abc063253139f7309083cbfa39f Mon Sep 17 00:00:00 2001 From: Wayne Chen Date: Tue, 11 Sep 2018 17:07:49 -0700 Subject: [PATCH 119/123] adding back goToLastAddress back --- libraries/networking/src/AddressManager.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/libraries/networking/src/AddressManager.cpp b/libraries/networking/src/AddressManager.cpp index 9e5cbcaa7b..b83891b4f1 100644 --- a/libraries/networking/src/AddressManager.cpp +++ b/libraries/networking/src/AddressManager.cpp @@ -152,6 +152,11 @@ void AddressManager::goForward() { } } +void AddressManager::goToLastAddress() { + // this should always return something as long as the URL isn't empty. + handleUrl(_lastVisitedURL, LookupTrigger::AttemptedRefresh); +} + void AddressManager::storeCurrentAddress() { auto url = currentAddress(); From 8bca1bc5fe9806c0484ca71c2def7eeab7d1cfc1 Mon Sep 17 00:00:00 2001 From: Wayne Chen Date: Tue, 11 Sep 2018 17:09:21 -0700 Subject: [PATCH 120/123] reverting, oversight --- libraries/networking/src/AddressManager.cpp | 5 ----- 1 file changed, 5 deletions(-) diff --git a/libraries/networking/src/AddressManager.cpp b/libraries/networking/src/AddressManager.cpp index b83891b4f1..9e5cbcaa7b 100644 --- a/libraries/networking/src/AddressManager.cpp +++ b/libraries/networking/src/AddressManager.cpp @@ -152,11 +152,6 @@ void AddressManager::goForward() { } } -void AddressManager::goToLastAddress() { - // this should always return something as long as the URL isn't empty. - handleUrl(_lastVisitedURL, LookupTrigger::AttemptedRefresh); -} - void AddressManager::storeCurrentAddress() { auto url = currentAddress(); From 2267085dbfa9a173fad9db25c6dcb8eb18e05272 Mon Sep 17 00:00:00 2001 From: Wayne Chen Date: Tue, 11 Sep 2018 17:46:01 -0700 Subject: [PATCH 121/123] removing unused counter variable --- interface/src/Application.cpp | 3 --- 1 file changed, 3 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index f925dc8819..40ab8e4b91 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -6571,7 +6571,6 @@ bool Application::nearbyEntitiesAreReadyForPhysics() { _nearbyEntitiesCountAtLastPhysicsCheck = nearbyCount; const uint32_t MINIMUM_NEARBY_ENTITIES_STABILITY_COUNT = 3; - uint32_t readyNearbyEntities = 0; if (_nearbyEntitiesStabilityCount >= MINIMUM_NEARBY_ENTITIES_STABILITY_COUNT) { // We've seen the same number of nearby entities for several stats packets in a row. assume we've got all // the local entities. @@ -6581,8 +6580,6 @@ bool Application::nearbyEntitiesAreReadyForPhysics() { HIFI_FCDEBUG(interfaceapp(), "Physics disabled until entity loads: " << entity->getID() << entity->getName()); // don't break here because we want all the relevant entities to start their downloads result = false; - } else { - readyNearbyEntities++; } } return result; From a7321f950a4aa1de1675006b68a6a5063e7cbde8 Mon Sep 17 00:00:00 2001 From: Wayne Chen Date: Tue, 11 Sep 2018 18:32:17 -0700 Subject: [PATCH 122/123] pushing requested changes - adding timeout refusal --- interface/src/Application.h | 2 -- interface/src/ConnectionMonitor.cpp | 7 ++++--- interface/src/scripting/WindowScriptingInterface.cpp | 2 +- libraries/networking/src/DomainHandler.cpp | 6 ++++++ libraries/networking/src/DomainHandler.h | 12 ++++++++++-- 5 files changed, 21 insertions(+), 8 deletions(-) diff --git a/interface/src/Application.h b/interface/src/Application.h index aafc6a4f0d..0d569eed84 100644 --- a/interface/src/Application.h +++ b/interface/src/Application.h @@ -230,8 +230,6 @@ public: bool getPreferAvatarFingerOverStylus() { return false; } void setPreferAvatarFingerOverStylus(bool value); - float getDomainLoadingProgress() { return _octreeProcessor.domainLoadingProgress(); } - float getSettingConstrainToolbarPosition() { return _constrainToolbarPosition.get(); } void setSettingConstrainToolbarPosition(bool setting); diff --git a/interface/src/ConnectionMonitor.cpp b/interface/src/ConnectionMonitor.cpp index 2f4e135c9a..3fc353ec01 100644 --- a/interface/src/ConnectionMonitor.cpp +++ b/interface/src/ConnectionMonitor.cpp @@ -23,7 +23,6 @@ // should be longer to allow the application to initialize. static const int ON_INITIAL_LOAD_REDIRECT_AFTER_DISCONNECTED_FOR_X_MS = 10000; static const int REDIRECT_AFTER_DISCONNECTED_FOR_X_MS = 5000; -static const QString ERROR_DOMAIN_URL = "file:///~/serverless/redirect.json"; void ConnectionMonitor::init() { // Connect to domain disconnected message @@ -33,15 +32,17 @@ void ConnectionMonitor::init() { connect(&domainHandler, &DomainHandler::disconnectedFromDomain, this, &ConnectionMonitor::startTimer); connect(&domainHandler, &DomainHandler::connectedToDomain, this, &ConnectionMonitor::stopTimer); connect(&domainHandler, &DomainHandler::domainConnectionRefused, this, &ConnectionMonitor::stopTimer); + connect(&domainHandler, &DomainHandler::redirectToErrorDomainURL, this, &ConnectionMonitor::stopTimer); _timer.setSingleShot(true); if (!domainHandler.isConnected()) { _timer.start(ON_INITIAL_LOAD_REDIRECT_AFTER_DISCONNECTED_FOR_X_MS); } - connect(&_timer, &QTimer::timeout, this, []() { + connect(&_timer, &QTimer::timeout, this, [domainHandler]() { qDebug() << "ConnectionMonitor: Redirecting to 404 error domain"; - qApp->goToErrorDomainURL(REDIRECT_HIFI_ADDRESS); + // set in a timeout error + domainHandler.setErrorRedirectState(REDIRECT_HIFI_ADDRESS, 5); }); } diff --git a/interface/src/scripting/WindowScriptingInterface.cpp b/interface/src/scripting/WindowScriptingInterface.cpp index aa55fd2ebc..c217658c62 100644 --- a/interface/src/scripting/WindowScriptingInterface.cpp +++ b/interface/src/scripting/WindowScriptingInterface.cpp @@ -594,5 +594,5 @@ void WindowScriptingInterface::onMessageBoxSelected(int button) { float WindowScriptingInterface::domainLoadingProgress() { - return qApp->getDomainLoadingProgress(); + return qApp->getOctreePacketProcessor().domainLoadingProgress(); } diff --git a/libraries/networking/src/DomainHandler.cpp b/libraries/networking/src/DomainHandler.cpp index 4bed1646ee..59e3de922f 100644 --- a/libraries/networking/src/DomainHandler.cpp +++ b/libraries/networking/src/DomainHandler.cpp @@ -335,6 +335,12 @@ void DomainHandler::loadedErrorDomain(std::map namedPaths) { DependencyManager::get()->goToViewpointForPath(viewpoint, QString()); } +void DomainHandler::setRedirectErrorState(QUrl errorUrl, int reasonCode) { + _errorDomainURL = errorUrl; + _lastDomainConnectionError = reasonCode; + emit redirectToErrorDomainURL(_errorDomainURL); +} + void DomainHandler::requestDomainSettings() { qCDebug(networking) << "Requesting settings from domain server"; diff --git a/libraries/networking/src/DomainHandler.h b/libraries/networking/src/DomainHandler.h index 45c815eb5a..ab20936f43 100644 --- a/libraries/networking/src/DomainHandler.h +++ b/libraries/networking/src/DomainHandler.h @@ -87,6 +87,8 @@ public: void connectedToServerless(std::map namedPaths); void loadedErrorDomain(std::map namedPaths); + // sets domain handler in error state. + void setRedirectErrorState(QUrl errorUrl, int reasonCode); QString getViewPointFromNamedPath(QString namedPath); @@ -142,6 +144,11 @@ public: * 4 * The domain already has its maximum number of users. * + * + * TimedOut + * 5 + * Connecting to the domain timed out. + * * * * @typedef {number} Window.ConnectionRefusedReason @@ -151,7 +158,8 @@ public: ProtocolMismatch, LoginError, NotAuthorized, - TooManyUsers + TooManyUsers, + TimedOut }; public slots: @@ -188,7 +196,7 @@ signals: void settingsReceiveFail(); void domainConnectionRefused(QString reasonMessage, int reason, const QString& extraInfo); - void redirectToErrorDomainURL(QUrl errorDomaunURL); + void redirectToErrorDomainURL(QUrl errorDomainURL); void limitOfSilentDomainCheckInsReached(); From 30e9d57026269a041377d8602884aa42318ae380 Mon Sep 17 00:00:00 2001 From: Wayne Chen Date: Tue, 11 Sep 2018 18:52:28 -0700 Subject: [PATCH 123/123] adding pattern for during timeout to put into error state --- interface/src/ConnectionMonitor.cpp | 5 +++-- interface/src/ConnectionMonitor.h | 4 ++++ interface/src/octree/OctreePacketProcessor.h | 2 +- interface/src/scripting/WindowScriptingInterface.cpp | 3 --- 4 files changed, 8 insertions(+), 6 deletions(-) diff --git a/interface/src/ConnectionMonitor.cpp b/interface/src/ConnectionMonitor.cpp index 3fc353ec01..3c85cfb339 100644 --- a/interface/src/ConnectionMonitor.cpp +++ b/interface/src/ConnectionMonitor.cpp @@ -33,16 +33,17 @@ void ConnectionMonitor::init() { connect(&domainHandler, &DomainHandler::connectedToDomain, this, &ConnectionMonitor::stopTimer); connect(&domainHandler, &DomainHandler::domainConnectionRefused, this, &ConnectionMonitor::stopTimer); connect(&domainHandler, &DomainHandler::redirectToErrorDomainURL, this, &ConnectionMonitor::stopTimer); + connect(this, &ConnectionMonitor::setRedirectErrorState, &domainHandler, &DomainHandler::setRedirectErrorState); _timer.setSingleShot(true); if (!domainHandler.isConnected()) { _timer.start(ON_INITIAL_LOAD_REDIRECT_AFTER_DISCONNECTED_FOR_X_MS); } - connect(&_timer, &QTimer::timeout, this, [domainHandler]() { + connect(&_timer, &QTimer::timeout, this, [this]() { qDebug() << "ConnectionMonitor: Redirecting to 404 error domain"; // set in a timeout error - domainHandler.setErrorRedirectState(REDIRECT_HIFI_ADDRESS, 5); + emit setRedirectErrorState(REDIRECT_HIFI_ADDRESS, 5); }); } diff --git a/interface/src/ConnectionMonitor.h b/interface/src/ConnectionMonitor.h index e3d393163b..5e75e2618b 100644 --- a/interface/src/ConnectionMonitor.h +++ b/interface/src/ConnectionMonitor.h @@ -15,6 +15,7 @@ #include #include +class QUrl; class QString; class ConnectionMonitor : public QObject { @@ -22,6 +23,9 @@ class ConnectionMonitor : public QObject { public: void init(); +signals: + void setRedirectErrorState(QUrl errorURL, int reasonCode); + private slots: void startTimer(); void stopTimer(); diff --git a/interface/src/octree/OctreePacketProcessor.h b/interface/src/octree/OctreePacketProcessor.h index de26dbc3d2..d6ffb942e6 100644 --- a/interface/src/octree/OctreePacketProcessor.h +++ b/interface/src/octree/OctreePacketProcessor.h @@ -27,7 +27,7 @@ public: void startEntitySequence(); bool isLoadSequenceComplete() const { return _safeLanding->isLoadSequenceComplete(); } - float domainLoadingProgress() { return _safeLanding->loadingProgressPercentage(); } + float domainLoadingProgress() const { return _safeLanding->loadingProgressPercentage(); } signals: void packetVersionMismatch(); diff --git a/interface/src/scripting/WindowScriptingInterface.cpp b/interface/src/scripting/WindowScriptingInterface.cpp index c217658c62..b4bfddd334 100644 --- a/interface/src/scripting/WindowScriptingInterface.cpp +++ b/interface/src/scripting/WindowScriptingInterface.cpp @@ -39,9 +39,6 @@ WindowScriptingInterface::WindowScriptingInterface() { connect(&domainHandler, &DomainHandler::disconnectedFromDomain, this, &WindowScriptingInterface::disconnectedFromDomain); connect(&domainHandler, &DomainHandler::domainConnectionRefused, this, &WindowScriptingInterface::domainConnectionRefused); - connect(&domainHandler, &DomainHandler::domainConnectionErrorChanged, this, [this](int reasonCode) { - _lastDomainConnectionError = reasonCode; - }); connect(qApp, &Application::svoImportRequested, [this](const QString& urlString) { static const QMetaMethod svoImportRequestedSignal =