From dafa830c0db183fd844404269e11085aaad97249 Mon Sep 17 00:00:00 2001 From: Zach Fox Date: Wed, 25 Oct 2017 14:07:02 -0700 Subject: [PATCH 001/148] First steps --- .../qml/hifi/commerce/checkout/Checkout.qml | 22 +++++++-------- .../common/EmulatedMarketplaceHeader.qml | 12 ++++----- .../InspectionCertificate.qml | 6 ++--- .../qml/hifi/commerce/purchases/Purchases.qml | 18 ++++++------- .../qml/hifi/commerce/wallet/Help.qml | 10 +++---- .../qml/hifi/commerce/wallet/NeedsLogIn.qml | 4 +-- .../hifi/commerce/wallet/PassphraseModal.qml | 10 +++---- .../commerce/wallet/PassphraseSelection.qml | 8 +++--- .../qml/hifi/commerce/wallet/Security.qml | 6 ++--- .../commerce/wallet/SecurityImageChange.qml | 8 +++--- .../qml/hifi/commerce/wallet/SendMoney.qml | 4 +-- .../qml/hifi/commerce/wallet/Wallet.qml | 16 +++++------ .../qml/hifi/commerce/wallet/WalletHome.qml | 12 ++++----- .../qml/hifi/commerce/wallet/WalletSetup.qml | 12 ++++----- interface/src/Application.cpp | 27 ++++++++++++++++++- interface/src/commerce/QmlCommerce.cpp | 4 +-- interface/src/commerce/QmlCommerce.h | 6 ++--- libraries/ui/src/QmlWindowClass.cpp | 2 +- scripts/system/commerce/wallet.js | 8 ++++-- 19 files changed, 110 insertions(+), 85 deletions(-) diff --git a/interface/resources/qml/hifi/commerce/checkout/Checkout.qml b/interface/resources/qml/hifi/commerce/checkout/Checkout.qml index 8ea9ce494c..0a4b2e2cff 100644 --- a/interface/resources/qml/hifi/commerce/checkout/Checkout.qml +++ b/interface/resources/qml/hifi/commerce/checkout/Checkout.qml @@ -43,8 +43,8 @@ Rectangle { property bool isWearable; // Style color: hifi.colors.white; - Hifi.QmlCommerce { - id: commerce; + Connections { + target: Commerce; onWalletStatusResult: { if (walletStatus === 0) { @@ -71,7 +71,7 @@ Rectangle { if (!isLoggedIn && root.activeView !== "needsLogIn") { root.activeView = "needsLogIn"; } else { - commerce.getWalletStatus(); + Commerce.getWalletStatus(); } } @@ -112,7 +112,7 @@ Rectangle { } onItemIdChanged: { - commerce.inventory(); + Commerce.inventory(); itemPreviewImage.source = "https://hifi-metaverse.s3-us-west-1.amazonaws.com/marketplace/previews/" + itemId + "/thumbnail/hifi-mp-" + itemId + ".jpg"; } @@ -121,7 +121,7 @@ Rectangle { } onItemPriceChanged: { - commerce.balance(); + Commerce.balance(); } Timer { @@ -200,7 +200,7 @@ Rectangle { Component.onCompleted: { purchasesReceived = false; balanceReceived = false; - commerce.getWalletStatus(); + Commerce.getWalletStatus(); } } @@ -221,7 +221,7 @@ Rectangle { Connections { target: GlobalServices onMyUsernameChanged: { - commerce.getLoginStatus(); + Commerce.getLoginStatus(); } } @@ -471,9 +471,9 @@ Rectangle { if (itemIsJson) { buyButton.enabled = false; if (!root.shouldBuyWithControlledFailure) { - commerce.buy(itemId, itemPrice); + Commerce.buy(itemId, itemPrice); } else { - commerce.buy(itemId, itemPrice, true); + Commerce.buy(itemId, itemPrice, true); } } else { if (urlHandler.canHandleUrl(itemHref)) { @@ -938,8 +938,8 @@ Rectangle { } root.balanceReceived = false; root.purchasesReceived = false; - commerce.inventory(); - commerce.balance(); + Commerce.inventory(); + Commerce.balance(); } // diff --git a/interface/resources/qml/hifi/commerce/common/EmulatedMarketplaceHeader.qml b/interface/resources/qml/hifi/commerce/common/EmulatedMarketplaceHeader.qml index cc316a70e9..e95c720e5f 100644 --- a/interface/resources/qml/hifi/commerce/common/EmulatedMarketplaceHeader.qml +++ b/interface/resources/qml/hifi/commerce/common/EmulatedMarketplaceHeader.qml @@ -31,14 +31,14 @@ Item { height: mainContainer.height + additionalDropdownHeight; - Hifi.QmlCommerce { - id: commerce; + Connections { + target: Commerce; onWalletStatusResult: { if (walletStatus === 0) { sendToParent({method: "needsLogIn"}); } else if (walletStatus === 3) { - commerce.getSecurityImage(); + Commerce.getSecurityImage(); } else if (walletStatus > 3) { console.log("ERROR in EmulatedMarketplaceHeader.qml: Unknown wallet status: " + walletStatus); } @@ -48,7 +48,7 @@ Item { if (!isLoggedIn) { sendToParent({method: "needsLogIn"}); } else { - commerce.getWalletStatus(); + Commerce.getWalletStatus(); } } @@ -61,13 +61,13 @@ Item { } Component.onCompleted: { - commerce.getWalletStatus(); + Commerce.getWalletStatus(); } Connections { target: GlobalServices onMyUsernameChanged: { - commerce.getLoginStatus(); + Commerce.getLoginStatus(); } } diff --git a/interface/resources/qml/hifi/commerce/inspectionCertificate/InspectionCertificate.qml b/interface/resources/qml/hifi/commerce/inspectionCertificate/InspectionCertificate.qml index aa1372494f..ec34de6adc 100644 --- a/interface/resources/qml/hifi/commerce/inspectionCertificate/InspectionCertificate.qml +++ b/interface/resources/qml/hifi/commerce/inspectionCertificate/InspectionCertificate.qml @@ -35,8 +35,8 @@ Rectangle { property bool isMyCert: false; // Style color: hifi.colors.faintGray; - Hifi.QmlCommerce { - id: commerce; + Connections { + target: Commerce; onCertificateInfoResult: { if (result.status !== 'success') { @@ -69,7 +69,7 @@ Rectangle { onCertificateIdChanged: { if (certificateId !== "") { - commerce.certificateInfo(certificateId); + Commerce.certificateInfo(certificateId); } } diff --git a/interface/resources/qml/hifi/commerce/purchases/Purchases.qml b/interface/resources/qml/hifi/commerce/purchases/Purchases.qml index f292f9603e..b88710d19c 100644 --- a/interface/resources/qml/hifi/commerce/purchases/Purchases.qml +++ b/interface/resources/qml/hifi/commerce/purchases/Purchases.qml @@ -38,8 +38,8 @@ Rectangle { property bool isDebuggingFirstUseTutorial: false; // Style color: hifi.colors.white; - Hifi.QmlCommerce { - id: commerce; + Connections { + target: Commerce; onWalletStatusResult: { if (walletStatus === 0) { @@ -60,7 +60,7 @@ Rectangle { root.activeView = "firstUseTutorial"; } else if (!Settings.getValue("isFirstUseOfPurchases", true) && root.activeView === "initialize") { root.activeView = "purchasesMain"; - commerce.inventory(); + Commerce.inventory(); } } else { console.log("ERROR in Purchases.qml: Unknown wallet status: " + walletStatus); @@ -71,7 +71,7 @@ Rectangle { if (!isLoggedIn && root.activeView !== "needsLogIn") { root.activeView = "needsLogIn"; } else { - commerce.getWalletStatus(); + Commerce.getWalletStatus(); } } @@ -197,7 +197,7 @@ Rectangle { Component.onCompleted: { securityImageResultReceived = false; purchasesReceived = false; - commerce.getWalletStatus(); + Commerce.getWalletStatus(); } } @@ -218,7 +218,7 @@ Rectangle { Connections { target: GlobalServices onMyUsernameChanged: { - commerce.getLoginStatus(); + Commerce.getLoginStatus(); } } @@ -233,7 +233,7 @@ Rectangle { onSendSignalToParent: { if (msg.method === "authSuccess") { root.activeView = "initialize"; - commerce.getWalletStatus(); + Commerce.getWalletStatus(); } else { sendToScript(msg); } @@ -254,7 +254,7 @@ Rectangle { case 'tutorial_finished': Settings.setValue("isFirstUseOfPurchases", false); root.activeView = "purchasesMain"; - commerce.inventory(); + Commerce.inventory(); break; } } @@ -589,7 +589,7 @@ Rectangle { if (root.activeView === "purchasesMain" && !root.pendingInventoryReply) { console.log("Refreshing Purchases..."); root.pendingInventoryReply = true; - commerce.inventory(); + Commerce.inventory(); } } } diff --git a/interface/resources/qml/hifi/commerce/wallet/Help.qml b/interface/resources/qml/hifi/commerce/wallet/Help.qml index 0026bf6cdb..f41c6932c0 100644 --- a/interface/resources/qml/hifi/commerce/wallet/Help.qml +++ b/interface/resources/qml/hifi/commerce/wallet/Help.qml @@ -27,8 +27,8 @@ Item { property string keyFilePath; property bool showDebugButtons: true; - Hifi.QmlCommerce { - id: commerce; + Connections { + target: Commerce; onKeyFilePathIfExistsResult: { root.keyFilePath = path; @@ -37,7 +37,7 @@ Item { onVisibleChanged: { if (visible) { - commerce.getKeyFilePathIfExists(); + Commerce.getKeyFilePathIfExists(); } } @@ -67,7 +67,7 @@ Item { width: 150; text: "DBG: Clear Pass"; onClicked: { - commerce.setPassphrase(""); + Commerce.setPassphrase(""); sendSignalToWallet({method: 'passphraseReset'}); } } @@ -82,7 +82,7 @@ Item { width: 150; text: "DBG: RST Wallet"; onClicked: { - commerce.reset(); + Commerce.reset(); sendSignalToWallet({method: 'walletReset'}); } } diff --git a/interface/resources/qml/hifi/commerce/wallet/NeedsLogIn.qml b/interface/resources/qml/hifi/commerce/wallet/NeedsLogIn.qml index 7ce0cf3853..404d7e84cf 100644 --- a/interface/resources/qml/hifi/commerce/wallet/NeedsLogIn.qml +++ b/interface/resources/qml/hifi/commerce/wallet/NeedsLogIn.qml @@ -30,8 +30,8 @@ Item { source: "images/wallet-bg.jpg"; } - Hifi.QmlCommerce { - id: commerce; + Connections { + target: Commerce; } // diff --git a/interface/resources/qml/hifi/commerce/wallet/PassphraseModal.qml b/interface/resources/qml/hifi/commerce/wallet/PassphraseModal.qml index d967a36b68..9f04db7d5c 100644 --- a/interface/resources/qml/hifi/commerce/wallet/PassphraseModal.qml +++ b/interface/resources/qml/hifi/commerce/wallet/PassphraseModal.qml @@ -36,8 +36,8 @@ Item { source: "images/wallet-bg.jpg"; } - Hifi.QmlCommerce { - id: commerce; + Connections { + target: Commerce; onSecurityImageResult: { titleBarSecurityImage.source = ""; @@ -218,7 +218,7 @@ Item { onAccepted: { submitPassphraseInputButton.enabled = false; - commerce.setPassphrase(passphraseField.text); + Commerce.setPassphrase(passphraseField.text); } } @@ -258,7 +258,7 @@ Item { source: "image://security/securityImage"; cache: false; onVisibleChanged: { - commerce.getSecurityImage(); + Commerce.getSecurityImage(); } } Item { @@ -326,7 +326,7 @@ Item { text: "Submit" onClicked: { submitPassphraseInputButton.enabled = false; - commerce.setPassphrase(passphraseField.text); + Commerce.setPassphrase(passphraseField.text); } } diff --git a/interface/resources/qml/hifi/commerce/wallet/PassphraseSelection.qml b/interface/resources/qml/hifi/commerce/wallet/PassphraseSelection.qml index ffeedde8f0..0145f92b96 100644 --- a/interface/resources/qml/hifi/commerce/wallet/PassphraseSelection.qml +++ b/interface/resources/qml/hifi/commerce/wallet/PassphraseSelection.qml @@ -36,8 +36,8 @@ Item { propagateComposedEvents: false; } - Hifi.QmlCommerce { - id: commerce; + Connections { + target: Commerce; onSecurityImageResult: { passphrasePageSecurityImage.source = ""; passphrasePageSecurityImage.source = "image://security/securityImage"; @@ -193,7 +193,7 @@ Item { source: "image://security/securityImage"; cache: false; onVisibleChanged: { - commerce.getSecurityImage(); + Commerce.getSecurityImage(); } } Item { @@ -316,7 +316,7 @@ Item { passphraseFieldAgain.error = false; currentPassphraseField.error = false; setErrorText(""); - commerce.changePassphrase(currentPassphraseField.text, passphraseField.text); + Commerce.changePassphrase(currentPassphraseField.text, passphraseField.text); return true; } } diff --git a/interface/resources/qml/hifi/commerce/wallet/Security.qml b/interface/resources/qml/hifi/commerce/wallet/Security.qml index 485b0ec086..d825196655 100644 --- a/interface/resources/qml/hifi/commerce/wallet/Security.qml +++ b/interface/resources/qml/hifi/commerce/wallet/Security.qml @@ -27,8 +27,8 @@ Item { id: root; property string keyFilePath; - Hifi.QmlCommerce { - id: commerce; + Connections { + target: Commerce; onKeyFilePathIfExistsResult: { root.keyFilePath = path; @@ -234,7 +234,7 @@ Item { onVisibleChanged: { if (visible) { - commerce.getKeyFilePathIfExists(); + Commerce.getKeyFilePathIfExists(); } } diff --git a/interface/resources/qml/hifi/commerce/wallet/SecurityImageChange.qml b/interface/resources/qml/hifi/commerce/wallet/SecurityImageChange.qml index 7f767060f6..7cb4a3068f 100644 --- a/interface/resources/qml/hifi/commerce/wallet/SecurityImageChange.qml +++ b/interface/resources/qml/hifi/commerce/wallet/SecurityImageChange.qml @@ -30,8 +30,8 @@ Item { id: securityImageModel; } - Hifi.QmlCommerce { - id: commerce; + Connections { + target: Commerce; onSecurityImageResult: { securityImageChangePageSecurityImage.source = ""; @@ -70,7 +70,7 @@ Item { source: "image://security/securityImage"; cache: false; onVisibleChanged: { - commerce.getSecurityImage(); + Commerce.getSecurityImage(); } } Item { @@ -198,7 +198,7 @@ Item { securityImageSubmitButton.text = "Submitting..."; securityImageSubmitButton.enabled = false; var securityImagePath = securityImageSelection.getImagePathFromImageID(securityImageSelection.getSelectedImageIndex()) - commerce.chooseSecurityImage(securityImagePath); + Commerce.chooseSecurityImage(securityImagePath); } } } diff --git a/interface/resources/qml/hifi/commerce/wallet/SendMoney.qml b/interface/resources/qml/hifi/commerce/wallet/SendMoney.qml index 75334b1686..11a6c99b0c 100644 --- a/interface/resources/qml/hifi/commerce/wallet/SendMoney.qml +++ b/interface/resources/qml/hifi/commerce/wallet/SendMoney.qml @@ -25,8 +25,8 @@ Item { id: root; - Hifi.QmlCommerce { - id: commerce; + Connections { + target: Commerce; } // "Unavailable" diff --git a/interface/resources/qml/hifi/commerce/wallet/Wallet.qml b/interface/resources/qml/hifi/commerce/wallet/Wallet.qml index 759d7a37eb..21bf7bace0 100644 --- a/interface/resources/qml/hifi/commerce/wallet/Wallet.qml +++ b/interface/resources/qml/hifi/commerce/wallet/Wallet.qml @@ -36,8 +36,8 @@ Rectangle { source: "images/wallet-bg.jpg"; } - Hifi.QmlCommerce { - id: commerce; + Connections { + target: Commerce; onWalletStatusResult: { if (walletStatus === 0) { @@ -54,7 +54,7 @@ Rectangle { } } else if (walletStatus === 3) { root.activeView = "walletHome"; - commerce.getSecurityImage(); + Commerce.getSecurityImage(); } else { console.log("ERROR in Wallet.qml: Unknown wallet status: " + walletStatus); } @@ -64,7 +64,7 @@ Rectangle { if (!isLoggedIn && root.activeView !== "needsLogIn") { root.activeView = "needsLogIn"; } else if (isLoggedIn) { - commerce.getWalletStatus(); + Commerce.getWalletStatus(); } } @@ -174,7 +174,7 @@ Rectangle { if (msg.method === 'walletSetup_finished') { if (msg.referrer === '') { root.activeView = "initialize"; - commerce.getWalletStatus(); + Commerce.getWalletStatus(); } else if (msg.referrer === 'purchases') { sendToScript({method: 'goToPurchases'}); } else { @@ -254,7 +254,7 @@ Rectangle { color: hifi.colors.baseGray; Component.onCompleted: { - commerce.getWalletStatus(); + Commerce.getWalletStatus(); } } @@ -275,7 +275,7 @@ Rectangle { Connections { target: GlobalServices onMyUsernameChanged: { - commerce.getLoginStatus(); + Commerce.getLoginStatus(); } } @@ -289,7 +289,7 @@ Rectangle { Connections { onSendSignalToParent: { if (msg.method === "authSuccess") { - commerce.getWalletStatus(); + Commerce.getWalletStatus(); } else { sendToScript(msg); } diff --git a/interface/resources/qml/hifi/commerce/wallet/WalletHome.qml b/interface/resources/qml/hifi/commerce/wallet/WalletHome.qml index 1fe0dcc58b..929dd1e7e8 100644 --- a/interface/resources/qml/hifi/commerce/wallet/WalletHome.qml +++ b/interface/resources/qml/hifi/commerce/wallet/WalletHome.qml @@ -28,8 +28,8 @@ Item { property bool historyReceived: false; property int pendingCount: 0; - Hifi.QmlCommerce { - id: commerce; + Connections { + target: Commerce; onBalanceResult : { balanceText.text = result.data.balance; @@ -116,8 +116,8 @@ Item { onVisibleChanged: { if (visible) { historyReceived = false; - commerce.balance(); - commerce.history(); + Commerce.balance(); + Commerce.history(); } else { refreshTimer.stop(); } @@ -147,8 +147,8 @@ Item { onTriggered: { console.log("Refreshing Wallet Home..."); historyReceived = false; - commerce.balance(); - commerce.history(); + Commerce.balance(); + Commerce.history(); } } diff --git a/interface/resources/qml/hifi/commerce/wallet/WalletSetup.qml b/interface/resources/qml/hifi/commerce/wallet/WalletSetup.qml index 99fe933bd6..6672f4b97e 100644 --- a/interface/resources/qml/hifi/commerce/wallet/WalletSetup.qml +++ b/interface/resources/qml/hifi/commerce/wallet/WalletSetup.qml @@ -37,8 +37,8 @@ Item { source: "images/wallet-bg.jpg"; } - Hifi.QmlCommerce { - id: commerce; + Connections { + target: Commerce; onSecurityImageResult: { if (!exists && root.lastPage === "step_2") { @@ -356,7 +356,7 @@ Item { onClicked: { root.lastPage = "step_2"; var securityImagePath = securityImageSelection.getImagePathFromImageID(securityImageSelection.getSelectedImageIndex()) - commerce.chooseSecurityImage(securityImagePath); + Commerce.chooseSecurityImage(securityImagePath); root.activeView = "step_3"; passphraseSelection.clearPassphraseFields(); } @@ -440,7 +440,7 @@ Item { onVisibleChanged: { if (visible) { - commerce.getWalletAuthenticatedStatus(); + Commerce.getWalletAuthenticatedStatus(); if (!root.hasShownSecurityImageTip) { securityImageTip.visible = true; } @@ -529,7 +529,7 @@ Item { onClicked: { if (passphraseSelection.validateAndSubmitPassphrase()) { root.lastPage = "step_3"; - commerce.generateKeyPair(); + Commerce.generateKeyPair(); root.activeView = "step_4"; } } @@ -662,7 +662,7 @@ Item { onVisibleChanged: { if (visible) { - commerce.getKeyFilePathIfExists(); + Commerce.getKeyFilePathIfExists(); } } } diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 87d4db9936..4f6e871d48 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -2246,7 +2246,32 @@ void Application::initializeUi() { LoginDialog::registerType(); Tooltip::registerType(); UpdateDialog::registerType(); - QmlCommerce::registerType(); + QmlContextCallback callback = [](QQmlContext* context, QObject*) { + context->setContextProperty("Commerce", new QmlCommerce()); + }; + OffscreenQmlSurface::addWhitelistContextHandler({ + QUrl{ "qrc://qml/hifi/commerce/checkout/Checkout.qml" }, + QUrl{ "qrc://qml/hifi/commerce/common/CommerceLightbox.qml" }, + QUrl{ "qrc://qml/hifi/commerce/common/EmulatedMarketplaceHeader.qml" }, + QUrl{ "qrc://qml/hifi/commerce/common/FirstUseTutorial.qml" }, + QUrl{ "qrc://qml/hifi/commerce/common/SortableListModel.qml" }, + QUrl{ "qrc://qml/hifi/commerce/inspectionCertificate/InspectionCertificate.qml" }, + QUrl{ "qrc://qml/hifi/commerce/purchases/PurchasedItem.qml" }, + QUrl{ "qrc://qml/hifi/commerce/purchases/Purchases.qml" }, + QUrl{ "qrc://qml/hifi/commerce/wallet/Help.qml" }, + QUrl{ "qrc://qml/hifi/commerce/wallet/NeedsLogIn.qml" }, + QUrl{ "qrc://qml/hifi/commerce/wallet/PassphraseChange.qml" }, + QUrl{ "qrc://qml/hifi/commerce/wallet/PassphraseModal.qml" }, + QUrl{ "qrc://qml/hifi/commerce/wallet/PassphraseSelection.qml" }, + QUrl{ "qrc://qml/hifi/commerce/wallet/Security.qml" }, + QUrl{ "qrc://qml/hifi/commerce/wallet/SecurityImageChange.qml" }, + QUrl{ "qrc://qml/hifi/commerce/wallet/SecurityImageModel.qml" }, + QUrl{ "qrc://qml/hifi/commerce/wallet/SecurityImageSelection.qml" }, + QUrl{ "qrc://qml/hifi/commerce/wallet/SendMoney.qml" }, + QUrl{ "qrc://qml/hifi/commerce/wallet/Wallet.qml" }, + QUrl{ "qrc://qml/hifi/commerce/wallet/WalletHome.qml" }, + QUrl{ "qrc://qml/hifi/commerce/wallet/WalletSetup.qml" }, + }, callback); qmlRegisterType("Hifi", 1, 0, "ResourceImageItem"); qmlRegisterType("Hifi", 1, 0, "Preference"); diff --git a/interface/src/commerce/QmlCommerce.cpp b/interface/src/commerce/QmlCommerce.cpp index 803264fa9f..ecce682896 100644 --- a/interface/src/commerce/QmlCommerce.cpp +++ b/interface/src/commerce/QmlCommerce.cpp @@ -16,9 +16,7 @@ #include "Wallet.h" #include -HIFI_QML_DEF(QmlCommerce) - -QmlCommerce::QmlCommerce(QQuickItem* parent) : OffscreenQmlDialog(parent) { +QmlCommerce::QmlCommerce() { auto ledger = DependencyManager::get(); auto wallet = DependencyManager::get(); connect(ledger.data(), &Ledger::buyResult, this, &QmlCommerce::buyResult); diff --git a/interface/src/commerce/QmlCommerce.h b/interface/src/commerce/QmlCommerce.h index ae63133425..915edb71ef 100644 --- a/interface/src/commerce/QmlCommerce.h +++ b/interface/src/commerce/QmlCommerce.h @@ -16,16 +16,14 @@ #define hifi_QmlCommerce_h #include -#include #include -class QmlCommerce : public OffscreenQmlDialog { +class QmlCommerce : public QObject { Q_OBJECT - HIFI_QML_DECL public: - QmlCommerce(QQuickItem* parent = nullptr); + QmlCommerce(); signals: void walletStatusResult(uint walletStatus); diff --git a/libraries/ui/src/QmlWindowClass.cpp b/libraries/ui/src/QmlWindowClass.cpp index 14d8ec8985..1758150e0a 100644 --- a/libraries/ui/src/QmlWindowClass.cpp +++ b/libraries/ui/src/QmlWindowClass.cpp @@ -62,7 +62,7 @@ QVariantMap QmlWindowClass::parseArguments(QScriptContext* context) { QUrl url { properties[SOURCE_PROPERTY].toString() }; if (url.scheme() != "http" && url.scheme() != "https" && url.scheme() != "file" && url.scheme() != "about" && - url.scheme() != "atp") { + url.scheme() != "atp" && url.scheme() != "qrc") { properties[SOURCE_PROPERTY] = QUrl::fromLocalFile(url.toString()).toString(); } diff --git a/scripts/system/commerce/wallet.js b/scripts/system/commerce/wallet.js index 04b67ec14f..7b260dacfc 100644 --- a/scripts/system/commerce/wallet.js +++ b/scripts/system/commerce/wallet.js @@ -26,7 +26,7 @@ // Relevant Variables: // -WALLET_QML_SOURCE: The path to the Wallet QML // -onWalletScreen: true/false depending on whether we're looking at the app. - var WALLET_QML_SOURCE = Script.resourcesPath() + "qml/hifi/commerce/wallet/Wallet.qml"; + var WALLET_QML_SOURCE = "qrc:///qml/hifi/commerce/wallet/Wallet.qml"; var MARKETPLACE_PURCHASES_QML_PATH = Script.resourcesPath() + "qml/hifi/commerce/purchases/Purchases.qml"; var onWalletScreen = false; function onButtonClicked() { @@ -38,7 +38,11 @@ // for toolbar-mode: go back to home screen, this will close the window. tablet.gotoHomeScreen(); } else { - tablet.loadQMLSource(WALLET_QML_SOURCE); + var window = new OverlayWindow({ + title: "Wallet", + source: WALLET_QML_SOURCE, + width: 480, height: 706 + }); } } From 5898f0bd0caadb5091f4e3247d8a7a89e0605772 Mon Sep 17 00:00:00 2001 From: Zach Fox Date: Wed, 25 Oct 2017 15:04:47 -0700 Subject: [PATCH 002/148] Gotta do some fancy stuff with anchors for this to work --- interface/resources/qml/hifi/commerce/wallet/Wallet.qml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/interface/resources/qml/hifi/commerce/wallet/Wallet.qml b/interface/resources/qml/hifi/commerce/wallet/Wallet.qml index 21bf7bace0..ce4400b33d 100644 --- a/interface/resources/qml/hifi/commerce/wallet/Wallet.qml +++ b/interface/resources/qml/hifi/commerce/wallet/Wallet.qml @@ -31,6 +31,8 @@ Rectangle { property bool keyboardRaised: false; property bool isPassword: false; + anchors.fill: (typeof parent === undefined) ? undefined : parent; + Image { anchors.fill: parent; source: "images/wallet-bg.jpg"; From a5caae373978f8317e28686b08bbe96fc22b3f7c Mon Sep 17 00:00:00 2001 From: Brad Davis Date: Wed, 25 Oct 2017 16:49:23 -0700 Subject: [PATCH 003/148] Modify QML context population order --- libraries/ui/src/ui/OffscreenQmlSurface.cpp | 29 ++++++++++----------- libraries/ui/src/ui/OffscreenQmlSurface.h | 15 ++++++----- 2 files changed, 22 insertions(+), 22 deletions(-) diff --git a/libraries/ui/src/ui/OffscreenQmlSurface.cpp b/libraries/ui/src/ui/OffscreenQmlSurface.cpp index ecd07a5874..cf746b26fd 100644 --- a/libraries/ui/src/ui/OffscreenQmlSurface.cpp +++ b/libraries/ui/src/ui/OffscreenQmlSurface.cpp @@ -98,7 +98,7 @@ void OffscreenQmlSurface::addWhitelistContextHandler(const std::initializer_list } -QmlContextCallback OffscreenQmlSurface::DEFAULT_CONTEXT_CALLBACK = [](QQmlContext*, QObject*) {}; +QmlContextObjectCallback OffscreenQmlSurface::DEFAULT_CONTEXT_CALLBACK = [](QQmlContext*, QObject*) {}; struct TextureSet { // The number of surfaces with this size @@ -688,7 +688,7 @@ void OffscreenQmlSurface::setBaseUrl(const QUrl& baseUrl) { _qmlContext->setBaseUrl(baseUrl); } -void OffscreenQmlSurface::load(const QUrl& qmlSource, bool createNewContext, const QmlContextCallback& onQmlLoadedCallback) { +void OffscreenQmlSurface::load(const QUrl& qmlSource, bool createNewContext, const QmlContextObjectCallback& onQmlLoadedCallback) { if (QThread::currentThread() != thread()) { qCWarning(uiLogging) << "Called load on a non-surface thread"; } @@ -699,13 +699,16 @@ void OffscreenQmlSurface::load(const QUrl& qmlSource, bool createNewContext, con QList callbacks = getQmlWhitelist()->getCallbacksForUrl(qmlSource); // If we have whitelisted content, we must load a new context createNewContext |= !callbacks.empty(); - callbacks.push_back(onQmlLoadedCallback); QQmlContext* targetContext = _qmlContext; if (_rootItem && createNewContext) { targetContext = new QQmlContext(targetContext); } + for (const auto& callback : callbacks) { + callback(targetContext); + } + // FIXME eliminate loading of relative file paths for QML QUrl finalQmlSource = qmlSource; @@ -716,23 +719,23 @@ void OffscreenQmlSurface::load(const QUrl& qmlSource, bool createNewContext, con auto qmlComponent = new QQmlComponent(_qmlContext->engine(), finalQmlSource, QQmlComponent::PreferSynchronous); if (qmlComponent->isLoading()) { connect(qmlComponent, &QQmlComponent::statusChanged, this, [=](QQmlComponent::Status) { - finishQmlLoad(qmlComponent, targetContext, callbacks); + finishQmlLoad(qmlComponent, targetContext, onQmlLoadedCallback); }); return; } - finishQmlLoad(qmlComponent, targetContext, callbacks); + finishQmlLoad(qmlComponent, targetContext, onQmlLoadedCallback); } -void OffscreenQmlSurface::loadInNewContext(const QUrl& qmlSource, const QmlContextCallback& onQmlLoadedCallback) { +void OffscreenQmlSurface::loadInNewContext(const QUrl& qmlSource, const QmlContextObjectCallback& onQmlLoadedCallback) { load(qmlSource, true, onQmlLoadedCallback); } -void OffscreenQmlSurface::load(const QUrl& qmlSource, const QmlContextCallback& onQmlLoadedCallback) { +void OffscreenQmlSurface::load(const QUrl& qmlSource, const QmlContextObjectCallback& onQmlLoadedCallback) { load(qmlSource, false, onQmlLoadedCallback); } -void OffscreenQmlSurface::load(const QString& qmlSourceFile, const QmlContextCallback& onQmlLoadedCallback) { +void OffscreenQmlSurface::load(const QString& qmlSourceFile, const QmlContextObjectCallback& onQmlLoadedCallback) { return load(QUrl(qmlSourceFile), onQmlLoadedCallback); } @@ -740,7 +743,7 @@ void OffscreenQmlSurface::clearCache() { _qmlContext->engine()->clearComponentCache(); } -void OffscreenQmlSurface::finishQmlLoad(QQmlComponent* qmlComponent, QQmlContext* qmlContext, const QList& callbacks) { +void OffscreenQmlSurface::finishQmlLoad(QQmlComponent* qmlComponent, QQmlContext* qmlContext, const QmlContextObjectCallback& callback) { disconnect(qmlComponent, &QQmlComponent::statusChanged, this, 0); if (qmlComponent->isError()) { for (const auto& error : qmlComponent->errors()) { @@ -775,9 +778,7 @@ void OffscreenQmlSurface::finishQmlLoad(QQmlComponent* qmlComponent, QQmlContext // Make sure we will call callback for this codepath // Call this before qmlComponent->completeCreate() otherwise ghost window appears if (newItem && _rootItem) { - for (const auto& callback : callbacks) { - callback(qmlContext, newObject); - } + callback(qmlContext, newObject); } QObject* eventBridge = qmlContext->contextProperty("eventBridge").value(); @@ -814,9 +815,7 @@ void OffscreenQmlSurface::finishQmlLoad(QQmlComponent* qmlComponent, QQmlContext _rootItem->setSize(_quickWindow->renderTargetSize()); // Call this callback after rootitem is set, otherwise VrMenu wont work - for (const auto& callback : callbacks) { - callback(qmlContext, newObject); - } + callback(qmlContext, newObject); } void OffscreenQmlSurface::updateQuick() { diff --git a/libraries/ui/src/ui/OffscreenQmlSurface.h b/libraries/ui/src/ui/OffscreenQmlSurface.h index 12ee9e59a1..890a1d263c 100644 --- a/libraries/ui/src/ui/OffscreenQmlSurface.h +++ b/libraries/ui/src/ui/OffscreenQmlSurface.h @@ -35,7 +35,8 @@ class QQuickItem; // one copy in flight, and one copy being used by the receiver #define GPU_RESOURCE_BUFFER_SIZE 3 -using QmlContextCallback = std::function; +using QmlContextCallback = std::function; +using QmlContextObjectCallback = std::function; class OffscreenQmlSurface : public QObject { Q_OBJECT @@ -43,7 +44,7 @@ class OffscreenQmlSurface : public QObject { public: static void setSharedContext(QOpenGLContext* context); - static QmlContextCallback DEFAULT_CONTEXT_CALLBACK; + static QmlContextObjectCallback DEFAULT_CONTEXT_CALLBACK; static void addWhitelistContextHandler(const std::initializer_list& urls, const QmlContextCallback& callback); static void addWhitelistContextHandler(const QUrl& url, const QmlContextCallback& callback) { addWhitelistContextHandler({ { url } }, callback); }; @@ -56,10 +57,10 @@ public: void resize(const QSize& size, bool forceResize = false); QSize size() const; - Q_INVOKABLE void load(const QUrl& qmlSource, bool createNewContext, const QmlContextCallback& onQmlLoadedCallback = DEFAULT_CONTEXT_CALLBACK); - Q_INVOKABLE void loadInNewContext(const QUrl& qmlSource, const QmlContextCallback& onQmlLoadedCallback = DEFAULT_CONTEXT_CALLBACK); - Q_INVOKABLE void load(const QUrl& qmlSource, const QmlContextCallback& onQmlLoadedCallback = DEFAULT_CONTEXT_CALLBACK); - Q_INVOKABLE void load(const QString& qmlSourceFile, const QmlContextCallback& onQmlLoadedCallback = DEFAULT_CONTEXT_CALLBACK); + Q_INVOKABLE void load(const QUrl& qmlSource, bool createNewContext, const QmlContextObjectCallback& onQmlLoadedCallback = DEFAULT_CONTEXT_CALLBACK); + Q_INVOKABLE void loadInNewContext(const QUrl& qmlSource, const QmlContextObjectCallback& onQmlLoadedCallback = DEFAULT_CONTEXT_CALLBACK); + Q_INVOKABLE void load(const QUrl& qmlSource, const QmlContextObjectCallback& onQmlLoadedCallback = DEFAULT_CONTEXT_CALLBACK); + Q_INVOKABLE void load(const QString& qmlSourceFile, const QmlContextObjectCallback& onQmlLoadedCallback = DEFAULT_CONTEXT_CALLBACK); void clearCache(); void setMaxFps(uint8_t maxFps) { _maxFps = maxFps; } // Optional values for event handling @@ -124,7 +125,7 @@ protected: private: static QOpenGLContext* getSharedContext(); - void finishQmlLoad(QQmlComponent* qmlComponent, QQmlContext* qmlContext, const QList& callbacks); + void finishQmlLoad(QQmlComponent* qmlComponent, QQmlContext* qmlContext, const QmlContextObjectCallback& callbacks); QPointF mapWindowToUi(const QPointF& sourcePosition, QObject* sourceObject); void setupFbo(); bool allowNewFrame(uint8_t fps); From 7027dbb8d4de70b680a09bf0048ad61060805f38 Mon Sep 17 00:00:00 2001 From: Zach Fox Date: Thu, 26 Oct 2017 10:48:26 -0700 Subject: [PATCH 004/148] Integrate Austin's changes --- 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 dbc1d4cfbd..1de17b1568 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -2251,7 +2251,7 @@ void Application::initializeUi() { LoginDialog::registerType(); Tooltip::registerType(); UpdateDialog::registerType(); - QmlContextCallback callback = [](QQmlContext* context, QObject*) { + QmlContextCallback callback = [](QQmlContext* context) { context->setContextProperty("Commerce", new QmlCommerce()); }; OffscreenQmlSurface::addWhitelistContextHandler({ From 40aa3b522c8edf06d9c683c1955bb36f0c0fe51f Mon Sep 17 00:00:00 2001 From: Zach Fox Date: Thu, 26 Oct 2017 10:59:18 -0700 Subject: [PATCH 005/148] Three slashes, not two --- interface/src/Application.cpp | 42 +++++++++++++++++------------------ 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 1de17b1568..d437b1532f 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -2255,27 +2255,27 @@ void Application::initializeUi() { context->setContextProperty("Commerce", new QmlCommerce()); }; OffscreenQmlSurface::addWhitelistContextHandler({ - QUrl{ "qrc://qml/hifi/commerce/checkout/Checkout.qml" }, - QUrl{ "qrc://qml/hifi/commerce/common/CommerceLightbox.qml" }, - QUrl{ "qrc://qml/hifi/commerce/common/EmulatedMarketplaceHeader.qml" }, - QUrl{ "qrc://qml/hifi/commerce/common/FirstUseTutorial.qml" }, - QUrl{ "qrc://qml/hifi/commerce/common/SortableListModel.qml" }, - QUrl{ "qrc://qml/hifi/commerce/inspectionCertificate/InspectionCertificate.qml" }, - QUrl{ "qrc://qml/hifi/commerce/purchases/PurchasedItem.qml" }, - QUrl{ "qrc://qml/hifi/commerce/purchases/Purchases.qml" }, - QUrl{ "qrc://qml/hifi/commerce/wallet/Help.qml" }, - QUrl{ "qrc://qml/hifi/commerce/wallet/NeedsLogIn.qml" }, - QUrl{ "qrc://qml/hifi/commerce/wallet/PassphraseChange.qml" }, - QUrl{ "qrc://qml/hifi/commerce/wallet/PassphraseModal.qml" }, - QUrl{ "qrc://qml/hifi/commerce/wallet/PassphraseSelection.qml" }, - QUrl{ "qrc://qml/hifi/commerce/wallet/Security.qml" }, - QUrl{ "qrc://qml/hifi/commerce/wallet/SecurityImageChange.qml" }, - QUrl{ "qrc://qml/hifi/commerce/wallet/SecurityImageModel.qml" }, - QUrl{ "qrc://qml/hifi/commerce/wallet/SecurityImageSelection.qml" }, - QUrl{ "qrc://qml/hifi/commerce/wallet/SendMoney.qml" }, - QUrl{ "qrc://qml/hifi/commerce/wallet/Wallet.qml" }, - QUrl{ "qrc://qml/hifi/commerce/wallet/WalletHome.qml" }, - QUrl{ "qrc://qml/hifi/commerce/wallet/WalletSetup.qml" }, + QUrl{ "qrc:///qml/hifi/commerce/checkout/Checkout.qml" }, + QUrl{ "qrc:///qml/hifi/commerce/common/CommerceLightbox.qml" }, + QUrl{ "qrc:///qml/hifi/commerce/common/EmulatedMarketplaceHeader.qml" }, + QUrl{ "qrc:///qml/hifi/commerce/common/FirstUseTutorial.qml" }, + QUrl{ "qrc:///qml/hifi/commerce/common/SortableListModel.qml" }, + QUrl{ "qrc:///qml/hifi/commerce/inspectionCertificate/InspectionCertificate.qml" }, + QUrl{ "qrc:///qml/hifi/commerce/purchases/PurchasedItem.qml" }, + QUrl{ "qrc:///qml/hifi/commerce/purchases/Purchases.qml" }, + QUrl{ "qrc:///qml/hifi/commerce/wallet/Help.qml" }, + QUrl{ "qrc:///qml/hifi/commerce/wallet/NeedsLogIn.qml" }, + QUrl{ "qrc:///qml/hifi/commerce/wallet/PassphraseChange.qml" }, + QUrl{ "qrc:///qml/hifi/commerce/wallet/PassphraseModal.qml" }, + QUrl{ "qrc:///qml/hifi/commerce/wallet/PassphraseSelection.qml" }, + QUrl{ "qrc:///qml/hifi/commerce/wallet/Security.qml" }, + QUrl{ "qrc:///qml/hifi/commerce/wallet/SecurityImageChange.qml" }, + QUrl{ "qrc:///qml/hifi/commerce/wallet/SecurityImageModel.qml" }, + QUrl{ "qrc:///qml/hifi/commerce/wallet/SecurityImageSelection.qml" }, + QUrl{ "qrc:///qml/hifi/commerce/wallet/SendMoney.qml" }, + QUrl{ "qrc:///qml/hifi/commerce/wallet/Wallet.qml" }, + QUrl{ "qrc:///qml/hifi/commerce/wallet/WalletHome.qml" }, + QUrl{ "qrc:///qml/hifi/commerce/wallet/WalletSetup.qml" }, }, callback); qmlRegisterType("Hifi", 1, 0, "ResourceImageItem"); qmlRegisterType("Hifi", 1, 0, "Preference"); From ffc51d5387a350a9d24d4c9430dfafc1ed0d74eb Mon Sep 17 00:00:00 2001 From: Brad Davis Date: Thu, 26 Oct 2017 14:20:13 -0700 Subject: [PATCH 006/148] Working on QML whitelist functionality --- interface/resources/qml/OverlayWindowTest.qml | 18 +++ interface/resources/qml/QmlWindow.qml | 30 ++--- interface/src/Application.cpp | 6 + libraries/ui/src/QmlWindowClass.cpp | 2 +- libraries/ui/src/ui/OffscreenQmlSurface.cpp | 109 ++++++++++++------ libraries/ui/src/ui/OffscreenQmlSurface.h | 8 +- scripts/developer/tests/qmlTest.js | 2 +- 7 files changed, 113 insertions(+), 62 deletions(-) create mode 100644 interface/resources/qml/OverlayWindowTest.qml diff --git a/interface/resources/qml/OverlayWindowTest.qml b/interface/resources/qml/OverlayWindowTest.qml new file mode 100644 index 0000000000..7b82b2f705 --- /dev/null +++ b/interface/resources/qml/OverlayWindowTest.qml @@ -0,0 +1,18 @@ +import QtQuick 2.5 +import QtQuick.Controls 1.4 + +Rectangle { + width: 100 + height: 100 + color: "white" + Rectangle { + width: 10 + height: 10 + color: "red" + } + + Label { + text: OverlayWindowTestString + anchors.centerIn: parent + } +} diff --git a/interface/resources/qml/QmlWindow.qml b/interface/resources/qml/QmlWindow.qml index 9a84418b3a..23b435074d 100644 --- a/interface/resources/qml/QmlWindow.qml +++ b/interface/resources/qml/QmlWindow.qml @@ -22,7 +22,6 @@ Windows.Window { // Don't destroy on close... otherwise the JS/C++ will have a dangling pointer destroyOnCloseButton: false property var source; - property var component; property var dynamicContent; // Keyboard control properties in case needed by QML content. @@ -35,28 +34,13 @@ Windows.Window { dynamicContent.destroy(); dynamicContent = null; } - component = Qt.createComponent(source); - console.log("Created component " + component + " from source " + source); - } - - onComponentChanged: { - console.log("Component changed to " + component) - populate(); - } - - function populate() { - console.log("Populate called: dynamicContent " + dynamicContent + " component " + component); - if (!dynamicContent && component) { - if (component.status == Component.Error) { - console.log("Error loading component:", component.errorString()); - } else if (component.status == Component.Ready) { - console.log("Building dynamic content"); - dynamicContent = component.createObject(contentHolder); - } else { - console.log("Component not yet ready, connecting to status change"); - component.statusChanged.connect(populate); - } - } + console.log("QQQ Foo"); + QmlSurface.createContentFromQml(source, contentHolder, function(newObject) { + console.log("QQQ Bar " + dynamicContent); + dynamicContent = newObject; + dynamicContent.visible = true; + }); + console.log("QQQ Baz"); } // Handle message traffic from the script that launched us to the loaded QML diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 87d4db9936..deb4963ff4 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -2240,6 +2240,12 @@ extern void setupPreferences(); void Application::initializeUi() { // Make sure all QML surfaces share the main thread GL context OffscreenQmlSurface::setSharedContext(_offscreenContext->getContext()); + OffscreenQmlSurface::addWhitelistContextHandler(QUrl{ "qrc:///qml/OverlayWindowTest.qml" }, + [](QQmlContext* context) { + qDebug() << "Whitelist OverlayWindow worked"; + context->setContextProperty("OverlayWindowTestString", "TestWorked"); + }); + AddressBarDialog::registerType(); ErrorDialog::registerType(); diff --git a/libraries/ui/src/QmlWindowClass.cpp b/libraries/ui/src/QmlWindowClass.cpp index 14d8ec8985..1758150e0a 100644 --- a/libraries/ui/src/QmlWindowClass.cpp +++ b/libraries/ui/src/QmlWindowClass.cpp @@ -62,7 +62,7 @@ QVariantMap QmlWindowClass::parseArguments(QScriptContext* context) { QUrl url { properties[SOURCE_PROPERTY].toString() }; if (url.scheme() != "http" && url.scheme() != "https" && url.scheme() != "file" && url.scheme() != "about" && - url.scheme() != "atp") { + url.scheme() != "atp" && url.scheme() != "qrc") { properties[SOURCE_PROPERTY] = QUrl::fromLocalFile(url.toString()).toString(); } diff --git a/libraries/ui/src/ui/OffscreenQmlSurface.cpp b/libraries/ui/src/ui/OffscreenQmlSurface.cpp index cf746b26fd..5ef804330b 100644 --- a/libraries/ui/src/ui/OffscreenQmlSurface.cpp +++ b/libraries/ui/src/ui/OffscreenQmlSurface.cpp @@ -64,11 +64,19 @@ public: for (const auto& url : urls) { _callbacks[url].push_back(callback); } + for (const auto& url : _callbacks.keys()) { + qDebug() << "URL found for " << url << " with " << _callbacks[url].size() << " items"; + } }); } QList getCallbacksForUrl(const QUrl& url) const { + qDebug() << "Looking for callbacks for " << url; + return resultWithReadLock>([&] { + for (const auto& url : _callbacks.keys()) { + qDebug() << "URL found for " << url << " with " << _callbacks[url].size() << " items"; + } QList result; auto itr = _callbacks.find(url); if (_callbacks.end() != itr) { @@ -98,7 +106,7 @@ void OffscreenQmlSurface::addWhitelistContextHandler(const std::initializer_list } -QmlContextObjectCallback OffscreenQmlSurface::DEFAULT_CONTEXT_CALLBACK = [](QQmlContext*, QObject*) {}; +QmlContextObjectCallback OffscreenQmlSurface::DEFAULT_CONTEXT_CALLBACK = [](QQmlContext*, QQuickItem*) {}; struct TextureSet { // The number of surfaces with this size @@ -590,6 +598,7 @@ void OffscreenQmlSurface::create() { _qmlContext->setContextProperty("offscreenWindow", QVariant::fromValue(getWindow())); _qmlContext->setContextProperty("eventBridge", this); _qmlContext->setContextProperty("webEntity", this); + _qmlContext->setContextProperty("QmlSurface", this); // FIXME Compatibility mechanism for existing HTML and JS that uses eventBridgeWrapper // Find a way to flag older scripts using this mechanism and wanr that this is deprecated @@ -688,20 +697,14 @@ void OffscreenQmlSurface::setBaseUrl(const QUrl& baseUrl) { _qmlContext->setBaseUrl(baseUrl); } -void OffscreenQmlSurface::load(const QUrl& qmlSource, bool createNewContext, const QmlContextObjectCallback& onQmlLoadedCallback) { - if (QThread::currentThread() != thread()) { - qCWarning(uiLogging) << "Called load on a non-surface thread"; - } - // Synchronous loading may take a while; restart the deadlock timer - QMetaObject::invokeMethod(qApp, "updateHeartbeat", Qt::DirectConnection); - +QQmlContext* OffscreenQmlSurface::contextForUrl(const QUrl& qmlSource, bool forceNewContext) { // Get any whitelist functionality QList callbacks = getQmlWhitelist()->getCallbacksForUrl(qmlSource); // If we have whitelisted content, we must load a new context - createNewContext |= !callbacks.empty(); + forceNewContext |= !callbacks.empty(); QQmlContext* targetContext = _qmlContext; - if (_rootItem && createNewContext) { + if (_rootItem && forceNewContext) { targetContext = new QQmlContext(targetContext); } @@ -709,6 +712,15 @@ void OffscreenQmlSurface::load(const QUrl& qmlSource, bool createNewContext, con callback(targetContext); } + return targetContext; +} + +void OffscreenQmlSurface::load(const QUrl& qmlSource, bool createNewContext, const QmlContextObjectCallback& onQmlLoadedCallback) { + if (QThread::currentThread() != thread()) { + qCWarning(uiLogging) << "Called load on a non-surface thread"; + } + // Synchronous loading may take a while; restart the deadlock timer + QMetaObject::invokeMethod(qApp, "updateHeartbeat", Qt::DirectConnection); // FIXME eliminate loading of relative file paths for QML QUrl finalQmlSource = qmlSource; @@ -716,17 +728,36 @@ void OffscreenQmlSurface::load(const QUrl& qmlSource, bool createNewContext, con finalQmlSource = _qmlContext->resolvedUrl(qmlSource); } + auto targetContext = contextForUrl(finalQmlSource); auto qmlComponent = new QQmlComponent(_qmlContext->engine(), finalQmlSource, QQmlComponent::PreferSynchronous); if (qmlComponent->isLoading()) { connect(qmlComponent, &QQmlComponent::statusChanged, this, [=](QQmlComponent::Status) { - finishQmlLoad(qmlComponent, targetContext, onQmlLoadedCallback); + finishQmlLoad(qmlComponent, targetContext, nullptr, onQmlLoadedCallback); }); return; } - finishQmlLoad(qmlComponent, targetContext, onQmlLoadedCallback); + finishQmlLoad(qmlComponent, targetContext, nullptr, onQmlLoadedCallback); } +void OffscreenQmlSurface::createContentFromQml(const QUrl& qmlSource, QQuickItem* parent, const QJSValue& callback) { + auto targetContext = contextForUrl(qmlSource); + + auto onQmlLoadedCallback = [=](QQmlContext*, QObject* newItem) { + QJSValue(callback).call(QJSValueList() << _qmlContext->engine()->newQObject(newItem)); + }; + + auto qmlComponent = new QQmlComponent(_qmlContext->engine(), qmlSource, QQmlComponent::PreferSynchronous); + if (qmlComponent->isLoading()) { + connect(qmlComponent, &QQmlComponent::statusChanged, this, [=](QQmlComponent::Status) { + finishQmlLoad(qmlComponent, targetContext, parent, onQmlLoadedCallback); + }); + return; + } + finishQmlLoad(qmlComponent, targetContext, parent, onQmlLoadedCallback); +} + + void OffscreenQmlSurface::loadInNewContext(const QUrl& qmlSource, const QmlContextObjectCallback& onQmlLoadedCallback) { load(qmlSource, true, onQmlLoadedCallback); } @@ -743,7 +774,8 @@ void OffscreenQmlSurface::clearCache() { _qmlContext->engine()->clearComponentCache(); } -void OffscreenQmlSurface::finishQmlLoad(QQmlComponent* qmlComponent, QQmlContext* qmlContext, const QmlContextObjectCallback& callback) { + +void OffscreenQmlSurface::finishQmlLoad(QQmlComponent* qmlComponent, QQmlContext* qmlContext, QQuickItem* parent, const QmlContextObjectCallback& callback) { disconnect(qmlComponent, &QQmlComponent::statusChanged, this, 0); if (qmlComponent->isError()) { for (const auto& error : qmlComponent->errors()) { @@ -765,6 +797,22 @@ void OffscreenQmlSurface::finishQmlLoad(QQmlComponent* qmlComponent, QQmlContext return; } + if (!newObject) { + if (!_rootItem) { + qFatal("Could not load object as root item"); + return; + } + qCWarning(uiLogging) << "Unable to load QML item"; + return; + } + + QObject* eventBridge = qmlContext->contextProperty("eventBridge").value(); + if (qmlContext != _qmlContext && eventBridge && eventBridge != this) { + // FIXME Compatibility mechanism for existing HTML and JS that uses eventBridgeWrapper + // Find a way to flag older scripts using this mechanism and wanr that this is deprecated + qmlContext->setContextProperty("eventBridgeWrapper", new EventBridgeWrapper(eventBridge, qmlContext)); + } + qmlContext->engine()->setObjectOwnership(this, QQmlEngine::CppOwnership); // All quick items should be focusable @@ -775,35 +823,26 @@ void OffscreenQmlSurface::finishQmlLoad(QQmlComponent* qmlComponent, QQmlContext newItem->setFlag(QQuickItem::ItemIsFocusScope, true); } + // Make sure we will call callback for this codepath // Call this before qmlComponent->completeCreate() otherwise ghost window appears - if (newItem && _rootItem) { - callback(qmlContext, newObject); - } + // If we already have a root, just set a couple of flags and the ancestry + if (_rootItem) { + callback(qmlContext, newItem); - QObject* eventBridge = qmlContext->contextProperty("eventBridge").value(); - if (qmlContext != _qmlContext && eventBridge && eventBridge != this) { - // FIXME Compatibility mechanism for existing HTML and JS that uses eventBridgeWrapper - // Find a way to flag older scripts using this mechanism and wanr that this is deprecated - qmlContext->setContextProperty("eventBridgeWrapper", new EventBridgeWrapper(eventBridge, qmlContext)); + if (!parent) { + parent = _rootItem; + } + // Allow child windows to be destroyed from JS + QQmlEngine::setObjectOwnership(newObject, QQmlEngine::JavaScriptOwnership); + newObject->setParent(parent); + newItem->setParentItem(parent); } qmlComponent->completeCreate(); qmlComponent->deleteLater(); - // If we already have a root, just set a couple of flags and the ancestry - if (newItem && _rootItem) { - // Allow child windows to be destroyed from JS - QQmlEngine::setObjectOwnership(newObject, QQmlEngine::JavaScriptOwnership); - newObject->setParent(_rootItem); - if (newItem) { - newItem->setParentItem(_rootItem); - } - return; - } - - if (!newItem) { - qFatal("Could not load object as root item"); + if (_rootItem) { return; } @@ -815,7 +854,7 @@ void OffscreenQmlSurface::finishQmlLoad(QQmlComponent* qmlComponent, QQmlContext _rootItem->setSize(_quickWindow->renderTargetSize()); // Call this callback after rootitem is set, otherwise VrMenu wont work - callback(qmlContext, newObject); + callback(qmlContext, newItem); } void OffscreenQmlSurface::updateQuick() { diff --git a/libraries/ui/src/ui/OffscreenQmlSurface.h b/libraries/ui/src/ui/OffscreenQmlSurface.h index 890a1d263c..185630905d 100644 --- a/libraries/ui/src/ui/OffscreenQmlSurface.h +++ b/libraries/ui/src/ui/OffscreenQmlSurface.h @@ -30,13 +30,14 @@ class QQmlContext; class QQmlComponent; class QQuickWindow; class QQuickItem; +class QJSValue; // GPU resources are typically buffered for one copy being used by the renderer, // one copy in flight, and one copy being used by the receiver #define GPU_RESOURCE_BUFFER_SIZE 3 using QmlContextCallback = std::function; -using QmlContextObjectCallback = std::function; +using QmlContextObjectCallback = std::function; class OffscreenQmlSurface : public QObject { Q_OBJECT @@ -57,6 +58,8 @@ public: void resize(const QSize& size, bool forceResize = false); QSize size() const; + Q_INVOKABLE void createContentFromQml(const QUrl& qmlSource, QQuickItem* parent, const QJSValue& callback); + Q_INVOKABLE void load(const QUrl& qmlSource, bool createNewContext, const QmlContextObjectCallback& onQmlLoadedCallback = DEFAULT_CONTEXT_CALLBACK); Q_INVOKABLE void loadInNewContext(const QUrl& qmlSource, const QmlContextObjectCallback& onQmlLoadedCallback = DEFAULT_CONTEXT_CALLBACK); Q_INVOKABLE void load(const QUrl& qmlSource, const QmlContextObjectCallback& onQmlLoadedCallback = DEFAULT_CONTEXT_CALLBACK); @@ -123,9 +126,10 @@ protected: void setFocusText(bool newFocusText); private: + QQmlContext* contextForUrl(const QUrl& url, bool forceNewContext = false); static QOpenGLContext* getSharedContext(); - void finishQmlLoad(QQmlComponent* qmlComponent, QQmlContext* qmlContext, const QmlContextObjectCallback& callbacks); + void finishQmlLoad(QQmlComponent* qmlComponent, QQmlContext* qmlContext, QQuickItem* parent, const QmlContextObjectCallback& callbacks); QPointF mapWindowToUi(const QPointF& sourcePosition, QObject* sourceObject); void setupFbo(); bool allowNewFrame(uint8_t fps); diff --git a/scripts/developer/tests/qmlTest.js b/scripts/developer/tests/qmlTest.js index c891b6a1b7..0eaabac6d1 100644 --- a/scripts/developer/tests/qmlTest.js +++ b/scripts/developer/tests/qmlTest.js @@ -1,7 +1,7 @@ print("Launching web window"); qmlWindow = new OverlayWindow({ title: 'Test Qml', - source: "https://s3.amazonaws.com/DreamingContent/qml/content.qml", + source: "qrc:///qml/OverlayWindowTest.qml", height: 240, width: 320, toolWindow: false, From d162e1cff67c870516fb34672e59e82f99015050 Mon Sep 17 00:00:00 2001 From: Brad Davis Date: Wed, 25 Oct 2017 16:49:23 -0700 Subject: [PATCH 007/148] Whitelist functionality for tablet apps --- interface/resources/qml/OverlayWindowTest.qml | 18 +++ interface/resources/qml/QmlWindow.qml | 26 +--- .../resources/qml/hifi/tablet/Tablet.qml | 35 +++-- .../resources/qml/hifi/tablet/TabletRoot.qml | 122 ++++++++++------- interface/src/Application.cpp | 24 +++- interface/src/Menu.cpp | 4 +- .../scripting/WalletScriptingInterface.cpp | 4 +- interface/src/ui/DialogsManager.cpp | 4 +- interface/src/ui/LoginDialog.cpp | 2 +- .../ui/overlays/ContextOverlayInterface.cpp | 2 +- .../src/RenderableWebEntityItem.cpp | 7 +- libraries/ui/src/QmlWindowClass.cpp | 2 +- libraries/ui/src/ui/OffscreenQmlSurface.cpp | 128 +++++++++++------- libraries/ui/src/ui/OffscreenQmlSurface.h | 26 ++-- .../ui/src/ui/OffscreenQmlSurfaceCache.cpp | 1 - .../ui/src/ui/TabletScriptingInterface.cpp | 65 +++------ .../ui/src/ui/TabletScriptingInterface.h | 8 +- scripts/developer/inputRecording.js | 2 +- scripts/developer/tests/qmlTest.js | 2 +- scripts/system/audio.js | 2 +- scripts/system/commerce/wallet.js | 4 +- scripts/system/edit.js | 2 +- scripts/system/generalSettings.js | 2 +- scripts/system/marketplaces/marketplaces.js | 2 +- scripts/system/pal.js | 2 +- scripts/system/tablet-goto.js | 2 +- .../skyboxChanger/skyboxchanger.js | 2 +- .../spectator-camera/spectatorCamera.js | 2 +- 28 files changed, 284 insertions(+), 218 deletions(-) create mode 100644 interface/resources/qml/OverlayWindowTest.qml diff --git a/interface/resources/qml/OverlayWindowTest.qml b/interface/resources/qml/OverlayWindowTest.qml new file mode 100644 index 0000000000..7b82b2f705 --- /dev/null +++ b/interface/resources/qml/OverlayWindowTest.qml @@ -0,0 +1,18 @@ +import QtQuick 2.5 +import QtQuick.Controls 1.4 + +Rectangle { + width: 100 + height: 100 + color: "white" + Rectangle { + width: 10 + height: 10 + color: "red" + } + + Label { + text: OverlayWindowTestString + anchors.centerIn: parent + } +} diff --git a/interface/resources/qml/QmlWindow.qml b/interface/resources/qml/QmlWindow.qml index 9a84418b3a..7c1ce704c3 100644 --- a/interface/resources/qml/QmlWindow.qml +++ b/interface/resources/qml/QmlWindow.qml @@ -22,7 +22,6 @@ Windows.Window { // Don't destroy on close... otherwise the JS/C++ will have a dangling pointer destroyOnCloseButton: false property var source; - property var component; property var dynamicContent; // Keyboard control properties in case needed by QML content. @@ -35,28 +34,9 @@ Windows.Window { dynamicContent.destroy(); dynamicContent = null; } - component = Qt.createComponent(source); - console.log("Created component " + component + " from source " + source); - } - - onComponentChanged: { - console.log("Component changed to " + component) - populate(); - } - - function populate() { - console.log("Populate called: dynamicContent " + dynamicContent + " component " + component); - if (!dynamicContent && component) { - if (component.status == Component.Error) { - console.log("Error loading component:", component.errorString()); - } else if (component.status == Component.Ready) { - console.log("Building dynamic content"); - dynamicContent = component.createObject(contentHolder); - } else { - console.log("Component not yet ready, connecting to status change"); - component.statusChanged.connect(populate); - } - } + QmlSurface.load(source, contentHolder, function(newObject) { + dynamicContent = newObject; + }); } // Handle message traffic from the script that launched us to the loaded QML diff --git a/interface/resources/qml/hifi/tablet/Tablet.qml b/interface/resources/qml/hifi/tablet/Tablet.qml index 66e3dfdbbb..b21bf9c506 100644 --- a/interface/resources/qml/hifi/tablet/Tablet.qml +++ b/interface/resources/qml/hifi/tablet/Tablet.qml @@ -2,6 +2,7 @@ import QtQuick 2.5 import QtGraphicalEffects 1.0 import QtQuick.Layouts 1.3 +import "." import "../../styles-uit" import "../audio" as HifiAudio @@ -12,6 +13,31 @@ Item { property int columnIndex: 0 property int count: (flowMain.children.length - 1) + Component { + id: buttonComponent + TabletButton { } + } + + Component.onCompleted: { + tablet.populateButtons(); + } + + function createClickedHandler(proxy) { + return function() { proxy.clicked(); } + } + + function populateButtons() { + var tabletProxy = Tablet.getTablet("com.highfidelity.interface.tablet.system"); + var buttons = tabletProxy.getButtons(); + for (var i = 0; i < buttons.length; i++) { + var proxy = buttons[i]; + var button = tablet.addButtonProxy(proxy.getProperties()); + button.clicked.connect(createClickedHandler(proxy)); + proxy.setQmlButton(button); + } + sortButtons(); + } + // used to look up a button by its uuid function findButtonIndex(uuid) { if (!uuid) { @@ -47,9 +73,7 @@ Item { // called by C++ code when a button should be added to the tablet function addButtonProxy(properties) { - var component = Qt.createComponent("TabletButton.qml"); - var button = component.createObject(flowMain); - + var button = buttonComponent.createObject(flowMain); // copy all properites to button var keys = Object.keys(properties).forEach(function (key) { button[key] = properties[key]; @@ -62,8 +86,6 @@ Item { button.tabletRoot = parent.parent; } - sortButtons(); - return button; } @@ -83,11 +105,8 @@ Item { anchors { top: parent.top - topMargin: 0 left: parent.left - leftMargin: 0 right: parent.right - rightMargin: 0 } gradient: Gradient { diff --git a/interface/resources/qml/hifi/tablet/TabletRoot.qml b/interface/resources/qml/hifi/tablet/TabletRoot.qml index a161741049..028ac2d8b6 100644 --- a/interface/resources/qml/hifi/tablet/TabletRoot.qml +++ b/interface/resources/qml/hifi/tablet/TabletRoot.qml @@ -68,18 +68,17 @@ Item { function loadSource(url) { tabletApps.clear(); - loader.source = ""; // make sure we load the qml fresh each time. - loader.source = url; - tabletApps.append({"appUrl": url, "isWebUrl": false, "scriptUrl": "", "appWebUrl": ""}); + loader.load(url) + tabletApps.append({"appUrl": url, "isWebUrl": false, "scriptUrl": "", "appWebUrl": ""}); } function loadQMLOnTop(url) { tabletApps.append({"appUrl": url, "isWebUrl": false, "scriptUrl": "", "appWebUrl": ""}); - loader.source = ""; - loader.source = tabletApps.get(currentApp).appUrl; - if (loader.item.hasOwnProperty("gotoPreviousApp")) { - loader.item.gotoPreviousApp = true; - } + loader.load(tabletApps.get(currentApp).appUrl, function(){ + if (loader.item.hasOwnProperty("gotoPreviousApp")) { + loader.item.gotoPreviousApp = true; + } + }) } function loadWebOnTop(url, injectJavaScriptUrl) { @@ -92,13 +91,11 @@ Item { } function loadWebBase() { - loader.source = ""; - loader.source = "TabletWebView.qml"; + loader.load("hifi/tablet/TabletWebView.qml"); } function loadTabletWebBase() { - loader.source = ""; - loader.source = "./BlocksWebView.qml"; + loader.load("hifi/tablet/BlocksWebView.qml"); } function returnToPreviousApp() { @@ -110,7 +107,7 @@ Item { loadSource("TabletWebView.qml"); loadWebUrl(webUrl, scriptUrl); } else { - loader.source = tabletApps.get(currentApp).appUrl; + loader.load(tabletApps.get(currentApp).appUrl); } } @@ -173,47 +170,72 @@ Item { } } - Loader { - id: loader - objectName: "loader" - asynchronous: false - - width: parent.width - height: parent.height - - // Hook up callback for clara.io download from the marketplace. - Connections { - id: eventBridgeConnection - target: eventBridge - onWebEventReceived: { - if (message.slice(0, 17) === "CLARA.IO DOWNLOAD") { - ApplicationInterface.addAssetToWorldFromURL(message.slice(18)); - } - } - } - - onLoaded: { - if (loader.item.hasOwnProperty("sendToScript")) { - loader.item.sendToScript.connect(tabletRoot.sendToScript); - } - if (loader.item.hasOwnProperty("setRootMenu")) { - loader.item.setRootMenu(tabletRoot.rootMenu, tabletRoot.subMenu); - } - loader.item.forceActiveFocus(); - - if (openModal) { - openModal.canceled(); - openModal.destroy(); - openModal = null; - } - - if (openBrowser) { - openBrowser.destroy(); - openBrowser = null; + // Hook up callback for clara.io download from the marketplace. + Connections { + id: eventBridgeConnection + target: eventBridge + onWebEventReceived: { + if (message.slice(0, 17) === "CLARA.IO DOWNLOAD") { + ApplicationInterface.addAssetToWorldFromURL(message.slice(18)); } } } + Item { + id: loader + objectName: "loader"; + anchors.fill: parent; + property string source: ""; + property var item: null; + signal loaded; + + onWidthChanged: { + if (loader.item) { + loader.item.width = loader.width; + } + } + + onHeightChanged: { + if (loader.item) { + loader.item.height = loader.height; + } + } + + function load(newSource, callback) { + loader.source = newSource; + loader.item = null; + QmlSurface.load(newSource, loader, function(newItem) { + loader.item = newItem; + loader.item.width = loader.width; + loader.item.height = loader.height; + loader.loaded(); + if (loader.item.hasOwnProperty("sendToScript")) { + loader.item.sendToScript.connect(tabletRoot.sendToScript); + } + if (loader.item.hasOwnProperty("setRootMenu")) { + loader.item.setRootMenu(tabletRoot.rootMenu, tabletRoot.subMenu); + } + loader.item.forceActiveFocus(); + + if (openModal) { + openModal.canceled(); + openModal.destroy(); + openModal = null; + } + + if (openBrowser) { + openBrowser.destroy(); + openBrowser = null; + } + + if (callback) { + callback(); + } + }); + console.log("QQQ done calling QmlSurface.load") + } + } + width: 480 height: 706 diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 4f051697ad..8689b167c9 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -2214,6 +2214,16 @@ extern void setupPreferences(); void Application::initializeUi() { // Make sure all QML surfaces share the main thread GL context OffscreenQmlSurface::setSharedContext(_offscreenContext->getContext()); + OffscreenQmlSurface::addWhitelistContextHandler(QUrl{ "qrc:///qml/OverlayWindowTest.qml" }, + [](QQmlContext* context) { + qDebug() << "Whitelist OverlayWindow worked"; + context->setContextProperty("OverlayWindowTestString", "TestWorked"); + }); + OffscreenQmlSurface::addWhitelistContextHandler(QUrl{ "qrc:///qml/hifi/audio/Audio.qml" }, + [](QQmlContext* context) { + qDebug() << "QQQ" << __FUNCTION__ << "Whitelist Audio worked"; + }); + AddressBarDialog::registerType(); ErrorDialog::registerType(); @@ -2230,10 +2240,9 @@ void Application::initializeUi() { auto surfaceContext = offscreenUi->getSurfaceContext(); offscreenUi->setProxyWindow(_window->windowHandle()); - offscreenUi->setBaseUrl(QUrl::fromLocalFile(PathUtils::resourcesPath() + "/qml/")); // OffscreenUi is a subclass of OffscreenQmlSurface specifically designed to // support the window management and scripting proxies for VR use - offscreenUi->createDesktop(QString("qrc:///qml/hifi/Desktop.qml")); + offscreenUi->createDesktop(QString("hifi/Desktop.qml")); // FIXME either expose so that dialogs can set this themselves or // do better detection in the offscreen UI of what has focus @@ -7194,13 +7203,17 @@ void Application::updateDisplayMode() { } auto offscreenUi = DependencyManager::get(); + auto desktop = offscreenUi->getDesktop(); // Make the switch atomic from the perspective of other threads { std::unique_lock lock(_displayPluginLock); - // Tell the desktop to no reposition (which requires plugin info), until we have set the new plugin, below. - bool wasRepositionLocked = offscreenUi->getDesktop()->property("repositionLocked").toBool(); - offscreenUi->getDesktop()->setProperty("repositionLocked", true); + bool wasRepositionLocked = false; + if (desktop) { + // Tell the desktop to no reposition (which requires plugin info), until we have set the new plugin, below. + wasRepositionLocked = offscreenUi->getDesktop()->property("repositionLocked").toBool(); + offscreenUi->getDesktop()->setProperty("repositionLocked", true); + } if (_displayPlugin) { disconnect(_displayPlugin.get(), &DisplayPlugin::presented, this, &Application::onPresent); @@ -7246,7 +7259,6 @@ void Application::updateDisplayMode() { getApplicationCompositor().setDisplayPlugin(newDisplayPlugin); _displayPlugin = newDisplayPlugin; connect(_displayPlugin.get(), &DisplayPlugin::presented, this, &Application::onPresent, Qt::DirectConnection); - auto desktop = offscreenUi->getDesktop(); if (desktop) { desktop->setProperty("repositionLocked", wasRepositionLocked); } diff --git a/interface/src/Menu.cpp b/interface/src/Menu.cpp index 9df22ab08e..7025022c0a 100644 --- a/interface/src/Menu.cpp +++ b/interface/src/Menu.cpp @@ -101,7 +101,7 @@ Menu::Menu() { auto action = addActionToQMenuAndActionHash(editMenu, MenuOption::RunningScripts, Qt::CTRL | Qt::Key_J); connect(action, &QAction::triggered, [] { static const QUrl widgetUrl("hifi/dialogs/RunningScripts.qml"); - static const QUrl tabletUrl("../../hifi/dialogs/TabletRunningScripts.qml"); + static const QUrl tabletUrl("hifi/dialogs/TabletRunningScripts.qml"); static const QString name("RunningScripts"); qApp->showDialog(widgetUrl, tabletUrl, name); }); @@ -338,7 +338,7 @@ Menu::Menu() { connect(action, &QAction::triggered, [] { auto tablet = DependencyManager::get()->getTablet("com.highfidelity.interface.tablet.system"); auto hmd = DependencyManager::get(); - tablet->loadQMLSource("ControllerSettings.qml"); + tablet->loadQMLSource("hifi/tablet/ControllerSettings.qml"); if (!hmd->getShouldShowTablet()) { hmd->toggleShouldShowTablet(); diff --git a/interface/src/scripting/WalletScriptingInterface.cpp b/interface/src/scripting/WalletScriptingInterface.cpp index 99fdd5fbde..c866bac2b2 100644 --- a/interface/src/scripting/WalletScriptingInterface.cpp +++ b/interface/src/scripting/WalletScriptingInterface.cpp @@ -1,4 +1,4 @@ -// +// // WalletScriptingInterface.cpp // interface/src/scripting // @@ -23,7 +23,7 @@ void WalletScriptingInterface::refreshWalletStatus() { wallet->getWalletStatus(); } -static const QString CHECKOUT_QML_PATH = qApp->applicationDirPath() + "../../../qml/hifi/commerce/checkout/Checkout.qml"; +static const QString CHECKOUT_QML_PATH = "hifi/commerce/checkout/Checkout.qml"; void WalletScriptingInterface::buy(const QString& name, const QString& id, const int& price, const QString& href) { if (QThread::currentThread() != thread()) { QMetaObject::invokeMethod(this, "buy", Q_ARG(const QString&, name), Q_ARG(const QString&, id), Q_ARG(const int&, price), Q_ARG(const QString&, href)); diff --git a/interface/src/ui/DialogsManager.cpp b/interface/src/ui/DialogsManager.cpp index f216bb4edc..ff2d4868df 100644 --- a/interface/src/ui/DialogsManager.cpp +++ b/interface/src/ui/DialogsManager.cpp @@ -31,7 +31,7 @@ #include "scripting/HMDScriptingInterface.h" -static const QVariant TABLET_ADDRESS_DIALOG = "TabletAddressDialog.qml"; +static const QVariant TABLET_ADDRESS_DIALOG = "hifi/tablet/TabletAddressDialog.qml"; template void DialogsManager::maybeCreateDialog(QPointer& member) { if (!member) { @@ -91,7 +91,7 @@ void DialogsManager::setDomainConnectionFailureVisibility(bool visible) { ConnectionFailureDialog::hide(); } } else { - static const QUrl url("../../dialogs/TabletConnectionFailureDialog.qml"); + static const QUrl url("dialogs/TabletConnectionFailureDialog.qml"); auto hmd = DependencyManager::get(); if (visible) { tablet->initialScreen(url); diff --git a/interface/src/ui/LoginDialog.cpp b/interface/src/ui/LoginDialog.cpp index 7ce2a0146d..2e40d3c087 100644 --- a/interface/src/ui/LoginDialog.cpp +++ b/interface/src/ui/LoginDialog.cpp @@ -46,7 +46,7 @@ void LoginDialog::showWithSelection() if (tablet->getToolbarMode()) { LoginDialog::show(); } else { - static const QUrl url("../../dialogs/TabletLoginDialog.qml"); + static const QUrl url("dialogs/TabletLoginDialog.qml"); tablet->initialScreen(url); if (!hmd->getShouldShowTablet()) { hmd->openTablet(); diff --git a/interface/src/ui/overlays/ContextOverlayInterface.cpp b/interface/src/ui/overlays/ContextOverlayInterface.cpp index b5af529f2b..a8d0c3cc54 100644 --- a/interface/src/ui/overlays/ContextOverlayInterface.cpp +++ b/interface/src/ui/overlays/ContextOverlayInterface.cpp @@ -264,7 +264,7 @@ void ContextOverlayInterface::contextOverlays_hoverLeaveEntity(const EntityItemI } } -static const QString INSPECTION_CERTIFICATE_QML_PATH = qApp->applicationDirPath() + "../../../qml/hifi/commerce/inspectionCertificate/InspectionCertificate.qml"; +static const QString INSPECTION_CERTIFICATE_QML_PATH = "hifi/commerce/inspectionCertificate/InspectionCertificate.qml"; void ContextOverlayInterface::openInspectionCertificate() { // lets open the tablet to the inspection certificate QML if (!_currentEntityWithContextOverlay.isNull() && _entityMarketplaceID.length() > 0) { diff --git a/libraries/entities-renderer/src/RenderableWebEntityItem.cpp b/libraries/entities-renderer/src/RenderableWebEntityItem.cpp index a2e574a829..d8e1fa7cf1 100644 --- a/libraries/entities-renderer/src/RenderableWebEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableWebEntityItem.cpp @@ -30,6 +30,8 @@ using namespace render; using namespace render::entities; +static const QString WEB_ENTITY_QML = "controls/WebEntityView.qml"; + const float METERS_TO_INCHES = 39.3701f; static uint32_t _currentWebCount{ 0 }; // Don't allow more than 100 concurrent web views @@ -218,6 +220,7 @@ bool WebEntityRenderer::buildWebSurface(const TypedEntityPointer& entity) { }; { + // FIXME use the surface cache instead of explicit creation _webSurface = QSharedPointer(new OffscreenQmlSurface(), deleter); _webSurface->create(); } @@ -289,7 +292,6 @@ void WebEntityRenderer::loadSourceURL() { if (sourceUrl.scheme() == "http" || sourceUrl.scheme() == "https" || _lastSourceUrl.toLower().endsWith(".htm") || _lastSourceUrl.toLower().endsWith(".html")) { _contentType = htmlContent; - _webSurface->setBaseUrl(QUrl::fromLocalFile(PathUtils::resourcesPath() + "qml/controls/")); // We special case YouTube URLs since we know they are videos that we should play with at least 30 FPS. if (sourceUrl.host().endsWith("youtube.com", Qt::CaseInsensitive)) { @@ -298,12 +300,11 @@ void WebEntityRenderer::loadSourceURL() { _webSurface->setMaxFps(DEFAULT_MAX_FPS); } - _webSurface->load("WebEntityView.qml", [this](QQmlContext* context, QObject* item) { + _webSurface->load("controls/WebEntityView.qml", [this](QQmlContext* context, QObject* item) { item->setProperty("url", _lastSourceUrl); }); } else { _contentType = qmlContent; - _webSurface->setBaseUrl(QUrl::fromLocalFile(PathUtils::resourcesPath())); _webSurface->load(_lastSourceUrl); if (_webSurface->getRootItem() && _webSurface->getRootItem()->objectName() == "tabletRoot") { auto tabletScriptingInterface = DependencyManager::get(); diff --git a/libraries/ui/src/QmlWindowClass.cpp b/libraries/ui/src/QmlWindowClass.cpp index 14d8ec8985..1758150e0a 100644 --- a/libraries/ui/src/QmlWindowClass.cpp +++ b/libraries/ui/src/QmlWindowClass.cpp @@ -62,7 +62,7 @@ QVariantMap QmlWindowClass::parseArguments(QScriptContext* context) { QUrl url { properties[SOURCE_PROPERTY].toString() }; if (url.scheme() != "http" && url.scheme() != "https" && url.scheme() != "file" && url.scheme() != "about" && - url.scheme() != "atp") { + url.scheme() != "atp" && url.scheme() != "qrc") { properties[SOURCE_PROPERTY] = QUrl::fromLocalFile(url.toString()).toString(); } diff --git a/libraries/ui/src/ui/OffscreenQmlSurface.cpp b/libraries/ui/src/ui/OffscreenQmlSurface.cpp index ecd07a5874..8711e52eff 100644 --- a/libraries/ui/src/ui/OffscreenQmlSurface.cpp +++ b/libraries/ui/src/ui/OffscreenQmlSurface.cpp @@ -47,6 +47,7 @@ #include "types/HFWebEngineProfile.h" #include "types/SoundEffect.h" +#include "TabletScriptingInterface.h" #include "Logging.h" Q_LOGGING_CATEGORY(trace_render_qml, "trace.render.qml") @@ -98,7 +99,7 @@ void OffscreenQmlSurface::addWhitelistContextHandler(const std::initializer_list } -QmlContextCallback OffscreenQmlSurface::DEFAULT_CONTEXT_CALLBACK = [](QQmlContext*, QObject*) {}; +QmlContextObjectCallback OffscreenQmlSurface::DEFAULT_CONTEXT_CALLBACK = [](QQmlContext*, QQuickItem*) {}; struct TextureSet { // The number of surfaces with this size @@ -586,10 +587,11 @@ void OffscreenQmlSurface::create() { auto qmlEngine = acquireEngine(_quickWindow); _qmlContext = new QQmlContext(qmlEngine->rootContext()); - + _qmlContext->setBaseUrl(QUrl{ "qrc:///qml/" }); _qmlContext->setContextProperty("offscreenWindow", QVariant::fromValue(getWindow())); _qmlContext->setContextProperty("eventBridge", this); _qmlContext->setContextProperty("webEntity", this); + _qmlContext->setContextProperty("QmlSurface", this); // FIXME Compatibility mechanism for existing HTML and JS that uses eventBridgeWrapper // Find a way to flag older scripts using this mechanism and wanr that this is deprecated @@ -684,55 +686,69 @@ QQuickItem* OffscreenQmlSurface::getRootItem() { return _rootItem; } -void OffscreenQmlSurface::setBaseUrl(const QUrl& baseUrl) { - _qmlContext->setBaseUrl(baseUrl); +QQmlContext* OffscreenQmlSurface::contextForUrl(const QUrl& qmlSource, bool forceNewContext) { + // Get any whitelist functionality + QList callbacks = getQmlWhitelist()->getCallbacksForUrl(qmlSource); + // If we have whitelisted content, we must load a new context + forceNewContext |= !callbacks.empty(); + + QQmlContext* targetContext = _qmlContext; + if (_rootItem && forceNewContext) { + targetContext = new QQmlContext(targetContext); + } + + for (const auto& callback : callbacks) { + callback(targetContext); + } + + return targetContext; } -void OffscreenQmlSurface::load(const QUrl& qmlSource, bool createNewContext, const QmlContextCallback& onQmlLoadedCallback) { +void OffscreenQmlSurface::load(const QUrl& qmlSource, QQuickItem* parent, const QJSValue& callback) { + loadInternal(qmlSource, false, parent, [callback](QQmlContext* context, QQuickItem* newItem) { + QJSValue(callback).call(QJSValueList() << context->engine()->newQObject(newItem)); + }); +} + +void OffscreenQmlSurface::load(const QUrl& qmlSource, bool createNewContext, const QmlContextObjectCallback& onQmlLoadedCallback) { + loadInternal(qmlSource, createNewContext, nullptr, onQmlLoadedCallback); +} + +void OffscreenQmlSurface::loadInternal(const QUrl& qmlSource, bool createNewContext, QQuickItem* parent, const QmlContextObjectCallback& onQmlLoadedCallback) { + qCDebug(uiLogging) << "QQQ" << __FUNCTION__ << qmlSource; if (QThread::currentThread() != thread()) { qCWarning(uiLogging) << "Called load on a non-surface thread"; } // Synchronous loading may take a while; restart the deadlock timer QMetaObject::invokeMethod(qApp, "updateHeartbeat", Qt::DirectConnection); - // Get any whitelist functionality - QList callbacks = getQmlWhitelist()->getCallbacksForUrl(qmlSource); - // If we have whitelisted content, we must load a new context - createNewContext |= !callbacks.empty(); - callbacks.push_back(onQmlLoadedCallback); - - QQmlContext* targetContext = _qmlContext; - if (_rootItem && createNewContext) { - targetContext = new QQmlContext(targetContext); - } - - - // FIXME eliminate loading of relative file paths for QML QUrl finalQmlSource = qmlSource; if ((qmlSource.isRelative() && !qmlSource.isEmpty()) || qmlSource.scheme() == QLatin1String("file")) { finalQmlSource = _qmlContext->resolvedUrl(qmlSource); + qCDebug(uiLogging) << "QQQ" << __FUNCTION__ << "resolved to " << finalQmlSource; } + auto targetContext = contextForUrl(finalQmlSource, createNewContext); auto qmlComponent = new QQmlComponent(_qmlContext->engine(), finalQmlSource, QQmlComponent::PreferSynchronous); if (qmlComponent->isLoading()) { connect(qmlComponent, &QQmlComponent::statusChanged, this, [=](QQmlComponent::Status) { - finishQmlLoad(qmlComponent, targetContext, callbacks); + finishQmlLoad(qmlComponent, targetContext, parent, onQmlLoadedCallback); }); return; } - finishQmlLoad(qmlComponent, targetContext, callbacks); + finishQmlLoad(qmlComponent, targetContext, parent, onQmlLoadedCallback); } -void OffscreenQmlSurface::loadInNewContext(const QUrl& qmlSource, const QmlContextCallback& onQmlLoadedCallback) { +void OffscreenQmlSurface::loadInNewContext(const QUrl& qmlSource, const QmlContextObjectCallback& onQmlLoadedCallback) { load(qmlSource, true, onQmlLoadedCallback); } -void OffscreenQmlSurface::load(const QUrl& qmlSource, const QmlContextCallback& onQmlLoadedCallback) { +void OffscreenQmlSurface::load(const QUrl& qmlSource, const QmlContextObjectCallback& onQmlLoadedCallback) { load(qmlSource, false, onQmlLoadedCallback); } -void OffscreenQmlSurface::load(const QString& qmlSourceFile, const QmlContextCallback& onQmlLoadedCallback) { +void OffscreenQmlSurface::load(const QString& qmlSourceFile, const QmlContextObjectCallback& onQmlLoadedCallback) { return load(QUrl(qmlSourceFile), onQmlLoadedCallback); } @@ -740,7 +756,8 @@ void OffscreenQmlSurface::clearCache() { _qmlContext->engine()->clearComponentCache(); } -void OffscreenQmlSurface::finishQmlLoad(QQmlComponent* qmlComponent, QQmlContext* qmlContext, const QList& callbacks) { + +void OffscreenQmlSurface::finishQmlLoad(QQmlComponent* qmlComponent, QQmlContext* qmlContext, QQuickItem* parent, const QmlContextObjectCallback& callback) { disconnect(qmlComponent, &QQmlComponent::statusChanged, this, 0); if (qmlComponent->isError()) { for (const auto& error : qmlComponent->errors()) { @@ -762,6 +779,22 @@ void OffscreenQmlSurface::finishQmlLoad(QQmlComponent* qmlComponent, QQmlContext return; } + if (!newObject) { + if (!_rootItem) { + qFatal("Could not load object as root item"); + return; + } + qCWarning(uiLogging) << "Unable to load QML item"; + return; + } + + QObject* eventBridge = qmlContext->contextProperty("eventBridge").value(); + if (qmlContext != _qmlContext && eventBridge && eventBridge != this) { + // FIXME Compatibility mechanism for existing HTML and JS that uses eventBridgeWrapper + // Find a way to flag older scripts using this mechanism and wanr that this is deprecated + qmlContext->setContextProperty("eventBridgeWrapper", new EventBridgeWrapper(eventBridge, qmlContext)); + } + qmlContext->engine()->setObjectOwnership(this, QQmlEngine::CppOwnership); // All quick items should be focusable @@ -772,37 +805,26 @@ void OffscreenQmlSurface::finishQmlLoad(QQmlComponent* qmlComponent, QQmlContext newItem->setFlag(QQuickItem::ItemIsFocusScope, true); } + // Make sure we will call callback for this codepath // Call this before qmlComponent->completeCreate() otherwise ghost window appears - if (newItem && _rootItem) { - for (const auto& callback : callbacks) { - callback(qmlContext, newObject); - } - } + // If we already have a root, just set a couple of flags and the ancestry + if (_rootItem) { + callback(qmlContext, newItem); - QObject* eventBridge = qmlContext->contextProperty("eventBridge").value(); - if (qmlContext != _qmlContext && eventBridge && eventBridge != this) { - // FIXME Compatibility mechanism for existing HTML and JS that uses eventBridgeWrapper - // Find a way to flag older scripts using this mechanism and wanr that this is deprecated - qmlContext->setContextProperty("eventBridgeWrapper", new EventBridgeWrapper(eventBridge, qmlContext)); + if (!parent) { + parent = _rootItem; + } + // Allow child windows to be destroyed from JS + QQmlEngine::setObjectOwnership(newObject, QQmlEngine::JavaScriptOwnership); + newObject->setParent(parent); + newItem->setParentItem(parent); } qmlComponent->completeCreate(); qmlComponent->deleteLater(); - // If we already have a root, just set a couple of flags and the ancestry - if (newItem && _rootItem) { - // Allow child windows to be destroyed from JS - QQmlEngine::setObjectOwnership(newObject, QQmlEngine::JavaScriptOwnership); - newObject->setParent(_rootItem); - if (newItem) { - newItem->setParentItem(_rootItem); - } - return; - } - - if (!newItem) { - qFatal("Could not load object as root item"); + if (_rootItem) { return; } @@ -813,10 +835,16 @@ void OffscreenQmlSurface::finishQmlLoad(QQmlComponent* qmlComponent, QQmlContext _rootItem->setParentItem(_quickWindow->contentItem()); _rootItem->setSize(_quickWindow->renderTargetSize()); - // Call this callback after rootitem is set, otherwise VrMenu wont work - for (const auto& callback : callbacks) { - callback(qmlContext, newObject); + if (_rootItem->objectName() == "tabletRoot") { + _qmlContext->setContextProperty("tabletRoot", QVariant::fromValue(_rootItem)); + auto tabletScriptingInterface = DependencyManager::get(); + tabletScriptingInterface->setQmlTabletRoot("com.highfidelity.interface.tablet.system", this); + QObject* tablet = tabletScriptingInterface->getTablet("com.highfidelity.interface.tablet.system"); + _qmlContext->engine()->setObjectOwnership(tablet, QQmlEngine::CppOwnership); } + + // Call this callback after rootitem is set, otherwise VrMenu wont work + callback(qmlContext, newItem); } void OffscreenQmlSurface::updateQuick() { diff --git a/libraries/ui/src/ui/OffscreenQmlSurface.h b/libraries/ui/src/ui/OffscreenQmlSurface.h index 12ee9e59a1..2d2eb0811b 100644 --- a/libraries/ui/src/ui/OffscreenQmlSurface.h +++ b/libraries/ui/src/ui/OffscreenQmlSurface.h @@ -30,12 +30,14 @@ class QQmlContext; class QQmlComponent; class QQuickWindow; class QQuickItem; +class QJSValue; // GPU resources are typically buffered for one copy being used by the renderer, // one copy in flight, and one copy being used by the receiver #define GPU_RESOURCE_BUFFER_SIZE 3 -using QmlContextCallback = std::function; +using QmlContextCallback = std::function; +using QmlContextObjectCallback = std::function; class OffscreenQmlSurface : public QObject { Q_OBJECT @@ -43,7 +45,7 @@ class OffscreenQmlSurface : public QObject { public: static void setSharedContext(QOpenGLContext* context); - static QmlContextCallback DEFAULT_CONTEXT_CALLBACK; + static QmlContextObjectCallback DEFAULT_CONTEXT_CALLBACK; static void addWhitelistContextHandler(const std::initializer_list& urls, const QmlContextCallback& callback); static void addWhitelistContextHandler(const QUrl& url, const QmlContextCallback& callback) { addWhitelistContextHandler({ { url } }, callback); }; @@ -56,10 +58,15 @@ public: void resize(const QSize& size, bool forceResize = false); QSize size() const; - Q_INVOKABLE void load(const QUrl& qmlSource, bool createNewContext, const QmlContextCallback& onQmlLoadedCallback = DEFAULT_CONTEXT_CALLBACK); - Q_INVOKABLE void loadInNewContext(const QUrl& qmlSource, const QmlContextCallback& onQmlLoadedCallback = DEFAULT_CONTEXT_CALLBACK); - Q_INVOKABLE void load(const QUrl& qmlSource, const QmlContextCallback& onQmlLoadedCallback = DEFAULT_CONTEXT_CALLBACK); - Q_INVOKABLE void load(const QString& qmlSourceFile, const QmlContextCallback& onQmlLoadedCallback = DEFAULT_CONTEXT_CALLBACK); + // Usable from QML code as QmlSurface.load(url, parent, function(newItem){ ... }) + Q_INVOKABLE void load(const QUrl& qmlSource, QQuickItem* parent, const QJSValue& callback); + + // For C++ use + Q_INVOKABLE void load(const QUrl& qmlSource, bool createNewContext, const QmlContextObjectCallback& onQmlLoadedCallback = DEFAULT_CONTEXT_CALLBACK); + Q_INVOKABLE void loadInNewContext(const QUrl& qmlSource, const QmlContextObjectCallback& onQmlLoadedCallback = DEFAULT_CONTEXT_CALLBACK); + Q_INVOKABLE void load(const QUrl& qmlSource, const QmlContextObjectCallback& onQmlLoadedCallback = DEFAULT_CONTEXT_CALLBACK); + Q_INVOKABLE void load(const QString& qmlSourceFile, const QmlContextObjectCallback& onQmlLoadedCallback = DEFAULT_CONTEXT_CALLBACK); + void clearCache(); void setMaxFps(uint8_t maxFps) { _maxFps = maxFps; } // Optional values for event handling @@ -73,7 +80,6 @@ public: void resume(); bool isPaused() const; - void setBaseUrl(const QUrl& baseUrl); QQuickItem* getRootItem(); QQuickWindow* getWindow(); QObject* getEventHandler(); @@ -124,13 +130,13 @@ protected: private: static QOpenGLContext* getSharedContext(); - void finishQmlLoad(QQmlComponent* qmlComponent, QQmlContext* qmlContext, const QList& callbacks); + QQmlContext* contextForUrl(const QUrl& url, bool forceNewContext = false); + void loadInternal(const QUrl& qmlSource, bool createNewContext, QQuickItem* parent, const QmlContextObjectCallback& onQmlLoadedCallback); + void finishQmlLoad(QQmlComponent* qmlComponent, QQmlContext* qmlContext, QQuickItem* parent, const QmlContextObjectCallback& onQmlLoadedCallback); QPointF mapWindowToUi(const QPointF& sourcePosition, QObject* sourceObject); - void setupFbo(); bool allowNewFrame(uint8_t fps); void render(); void cleanup(); - QJsonObject getGLContextData(); private slots: void updateQuick(); diff --git a/libraries/ui/src/ui/OffscreenQmlSurfaceCache.cpp b/libraries/ui/src/ui/OffscreenQmlSurfaceCache.cpp index 2a0ca4a2e9..9b6b031dd9 100644 --- a/libraries/ui/src/ui/OffscreenQmlSurfaceCache.cpp +++ b/libraries/ui/src/ui/OffscreenQmlSurfaceCache.cpp @@ -45,7 +45,6 @@ void OffscreenQmlSurfaceCache::release(const QString& rootSource, const QSharedP QSharedPointer OffscreenQmlSurfaceCache::buildSurface(const QString& rootSource) { auto surface = QSharedPointer(new OffscreenQmlSurface()); surface->create(); - surface->setBaseUrl(QUrl::fromLocalFile(PathUtils::resourcesPath() + "/qml/")); surface->load(rootSource); surface->resize(QSize(100, 100)); return surface; diff --git a/libraries/ui/src/ui/TabletScriptingInterface.cpp b/libraries/ui/src/ui/TabletScriptingInterface.cpp index b9da230715..a261ae45b1 100644 --- a/libraries/ui/src/ui/TabletScriptingInterface.cpp +++ b/libraries/ui/src/ui/TabletScriptingInterface.cpp @@ -210,9 +210,9 @@ QObject* TabletScriptingInterface::getFlags() { // TabletProxy // -static const char* TABLET_SOURCE_URL = "Tablet.qml"; -static const char* WEB_VIEW_SOURCE_URL = "TabletWebView.qml"; -static const char* VRMENU_SOURCE_URL = "TabletMenu.qml"; +static const char* TABLET_SOURCE_URL = "hifi/tablet/Tablet.qml"; +static const char* WEB_VIEW_SOURCE_URL = "hifi/tablet/TabletWebView.qml"; +static const char* VRMENU_SOURCE_URL = "hifi/tablet/TabletMenu.qml"; class TabletRootWindow : public QmlWindowClass { virtual QString qmlSource() const override { return "hifi/tablet/WindowRoot.qml"; } @@ -232,6 +232,15 @@ TabletProxy::~TabletProxy() { disconnect(this, &TabletProxy::tabletShownChanged, this, &TabletProxy::onTabletShown); } +QVariant TabletProxy::getButtons() { + Q_ASSERT(QThread::currentThread() == qApp->thread()); + QVariantList result; + for (const auto& button : _tabletButtonProxies) { + result.push_back(QVariant::fromValue(button.data())); + } + return result; +} + void TabletProxy::setToolbarMode(bool toolbarMode) { if (QThread::currentThread() != thread()) { QMetaObject::invokeMethod(this, "setToolbarMode", Q_ARG(bool, toolbarMode)); @@ -247,7 +256,6 @@ void TabletProxy::setToolbarMode(bool toolbarMode) { auto offscreenUi = DependencyManager::get(); if (toolbarMode) { - removeButtonsFromHomeScreen(); addButtonsToToolbar(); // create new desktop window @@ -267,7 +275,7 @@ void TabletProxy::setToolbarMode(bool toolbarMode) { removeButtonsFromToolbar(); if (_currentPathLoaded == TABLET_SOURCE_URL) { - addButtonsToHomeScreen(); + // Tablet QML now pulls buttons from Tablet proxy } else { loadHomeScreen(true); } @@ -284,18 +292,20 @@ void TabletProxy::setToolbarMode(bool toolbarMode) { } } +#if 0 static void addButtonProxyToQmlTablet(QQuickItem* qmlTablet, TabletButtonProxy* buttonProxy) { Q_ASSERT(QThread::currentThread() == qApp->thread()); if (buttonProxy == NULL){ - qCCritical(uiLogging) << "TabletScriptingInterface addButtonProxyToQmlTablet buttonProxy is NULL"; + qCCritical(uiLogging) << __FUNCTION__ << "buttonProxy is NULL"; return; } QVariant resultVar; + qCDebug(uiLogging) << "QQQ" << __FUNCTION__ << "adding button " << buttonProxy; bool hasResult = QMetaObject::invokeMethod(qmlTablet, "addButtonProxy", Qt::DirectConnection, Q_RETURN_ARG(QVariant, resultVar), Q_ARG(QVariant, buttonProxy->getProperties())); if (!hasResult) { - qCWarning(uiLogging) << "TabletScriptingInterface addButtonProxyToQmlTablet has no result"; + qCWarning(uiLogging) << __FUNCTION__ << " has no result"; return; } @@ -307,6 +317,8 @@ static void addButtonProxyToQmlTablet(QQuickItem* qmlTablet, TabletButtonProxy* QObject::connect(qmlButton, SIGNAL(clicked()), buttonProxy, SLOT(clickedSlot())); buttonProxy->setQmlButton(qobject_cast(qmlButton)); } +#endif + static QString getUsername() { QString username = "Unknown user"; @@ -362,7 +374,7 @@ void TabletProxy::onTabletShown() { static_cast(parent())->playSound(TabletScriptingInterface::TabletOpen); if (_showRunningScripts) { _showRunningScripts = false; - pushOntoStack("../../hifi/dialogs/TabletRunningScripts.qml"); + pushOntoStack("hifi/dialogs/TabletRunningScripts.qml"); } } } @@ -396,9 +408,6 @@ void TabletProxy::setQmlTabletRoot(OffscreenQmlSurface* qmlOffscreenSurface) { }); if (_toolbarMode) { - // if someone creates the tablet in toolbar mode, make sure to display the home screen on the tablet. - auto loader = _qmlTabletRoot->findChild("loader"); - QObject::connect(loader, SIGNAL(loaded()), this, SLOT(addButtonsToHomeScreen())); QMetaObject::invokeMethod(_qmlTabletRoot, "loadSource", Q_ARG(const QVariant&, QVariant(TABLET_SOURCE_URL))); } @@ -427,7 +436,6 @@ void TabletProxy::setQmlTabletRoot(OffscreenQmlSurface* qmlOffscreenSurface) { QMetaObject::invokeMethod(_qmlTabletRoot, "setShown", Q_ARG(const QVariant&, QVariant(true))); } } else { - removeButtonsFromHomeScreen(); _state = State::Uninitialized; emit screenChanged(QVariant("Closed"), QVariant("")); _currentPathLoaded = ""; @@ -456,7 +464,6 @@ void TabletProxy::gotoMenuScreen(const QString& submenu) { } if (root) { - removeButtonsFromHomeScreen(); auto offscreenUi = DependencyManager::get(); QObject* menu = offscreenUi->getRootMenu(); QMetaObject::invokeMethod(root, "setMenuProperties", Q_ARG(QVariant, QVariant::fromValue(menu)), Q_ARG(const QVariant&, QVariant(submenu))); @@ -530,7 +537,6 @@ void TabletProxy::loadQMLSource(const QVariant& path, bool resizable) { } if (root) { - removeButtonsFromHomeScreen(); //works only in Tablet QMetaObject::invokeMethod(root, "loadSource", Q_ARG(const QVariant&, path)); _state = State::QML; if (path != _currentPathLoaded) { @@ -612,8 +618,6 @@ void TabletProxy::loadHomeScreen(bool forceOntoHomeScreen) { if ((_state != State::Home && _state != State::Uninitialized) || forceOntoHomeScreen) { if (!_toolbarMode && _qmlTabletRoot) { - auto loader = _qmlTabletRoot->findChild("loader"); - QObject::connect(loader, SIGNAL(loaded()), this, SLOT(addButtonsToHomeScreen())); QMetaObject::invokeMethod(_qmlTabletRoot, "loadSource", Q_ARG(const QVariant&, QVariant(TABLET_SOURCE_URL))); QMetaObject::invokeMethod(_qmlTabletRoot, "playButtonClickSound"); } else if (_toolbarMode && _desktopWindow) { @@ -674,7 +678,6 @@ void TabletProxy::gotoWebScreen(const QString& url, const QString& injectedJavaS } if (root) { - removeButtonsFromHomeScreen(); if (loadOtherBase) { QMetaObject::invokeMethod(root, "loadTabletWebBase"); } else { @@ -701,12 +704,8 @@ TabletButtonProxy* TabletProxy::addButton(const QVariant& properties) { auto tabletButtonProxy = QSharedPointer(new TabletButtonProxy(properties.toMap())); _tabletButtonProxies.push_back(tabletButtonProxy); if (!_toolbarMode && _qmlTabletRoot) { - auto tablet = getQmlTablet(); - if (tablet) { - addButtonProxyToQmlTablet(tablet, tabletButtonProxy.data()); - } else { - qCCritical(uiLogging) << "Could not find tablet in TabletRoot.qml"; - } + // Tablet now pulls buttons from the tablet proxy + // FIXME emit a signal so that the tablet can refresh buttons if they change } else if (_toolbarMode) { auto toolbarProxy = DependencyManager::get()->getSystemToolbarProxy(); if (toolbarProxy) { @@ -791,31 +790,11 @@ void TabletProxy::sendToQml(const QVariant& msg) { } } -void TabletProxy::addButtonsToHomeScreen() { - auto tablet = getQmlTablet(); - if (!tablet || _toolbarMode) { - return; - } - for (auto& buttonProxy : _tabletButtonProxies) { - addButtonProxyToQmlTablet(tablet, buttonProxy.data()); - } - auto loader = _qmlTabletRoot->findChild("loader"); - QObject::disconnect(loader, SIGNAL(loaded()), this, SLOT(addButtonsToHomeScreen())); -} OffscreenQmlSurface* TabletProxy::getTabletSurface() { return _qmlOffscreenSurface; } -void TabletProxy::removeButtonsFromHomeScreen() { - auto tablet = getQmlTablet(); - for (auto& buttonProxy : _tabletButtonProxies) { - if (tablet) { - QMetaObject::invokeMethod(tablet, "removeButtonProxy", Qt::AutoConnection, Q_ARG(QVariant, buttonProxy->getProperties())); - } - buttonProxy->setQmlButton(nullptr); - } -} void TabletProxy::desktopWindowClosed() { gotoHomeScreen(); diff --git a/libraries/ui/src/ui/TabletScriptingInterface.h b/libraries/ui/src/ui/TabletScriptingInterface.h index bd195fdd20..e7dc5ede1f 100644 --- a/libraries/ui/src/ui/TabletScriptingInterface.h +++ b/libraries/ui/src/ui/TabletScriptingInterface.h @@ -196,6 +196,8 @@ public: Q_INVOKABLE bool isPathLoaded(const QVariant& path); + Q_INVOKABLE QVariant getButtons(); + QQuickItem* getTabletRoot() const { return _qmlTabletRoot; } OffscreenQmlSurface* getTabletSurface(); @@ -237,12 +239,10 @@ signals: void tabletShownChanged(); protected slots: - void addButtonsToHomeScreen(); void desktopWindowClosed(); void emitWebEvent(const QVariant& msg); void onTabletShown(); protected: - void removeButtonsFromHomeScreen(); void loadHomeScreen(bool forceOntoHomeScreen); void addButtonsToToolbar(); void removeButtonsFromToolbar(); @@ -277,7 +277,9 @@ public: TabletButtonProxy(const QVariantMap& properties); ~TabletButtonProxy(); - void setQmlButton(QQuickItem* qmlButton); + + Q_INVOKABLE void setQmlButton(QQuickItem* qmlButton); + void setToolbarButtonProxy(QObject* toolbarButtonProxy); QUuid getUuid() const { return _uuid; } diff --git a/scripts/developer/inputRecording.js b/scripts/developer/inputRecording.js index 85bda623b3..6fb8e471cd 100644 --- a/scripts/developer/inputRecording.js +++ b/scripts/developer/inputRecording.js @@ -19,7 +19,7 @@ tablet.gotoHomeScreen(); onRecordingScreen = false; } else { - tablet.loadQMLSource("InputRecorder.qml"); + tablet.loadQMLSource("hifi/tablet/InputRecorder.qml"); onRecordingScreen = true; } } diff --git a/scripts/developer/tests/qmlTest.js b/scripts/developer/tests/qmlTest.js index c891b6a1b7..0eaabac6d1 100644 --- a/scripts/developer/tests/qmlTest.js +++ b/scripts/developer/tests/qmlTest.js @@ -1,7 +1,7 @@ print("Launching web window"); qmlWindow = new OverlayWindow({ title: 'Test Qml', - source: "https://s3.amazonaws.com/DreamingContent/qml/content.qml", + source: "qrc:///qml/OverlayWindowTest.qml", height: 240, width: 320, toolWindow: false, diff --git a/scripts/system/audio.js b/scripts/system/audio.js index 0a3471fa81..a93177ca38 100644 --- a/scripts/system/audio.js +++ b/scripts/system/audio.js @@ -15,7 +15,7 @@ var TABLET_BUTTON_NAME = "AUDIO"; var HOME_BUTTON_TEXTURE = "http://hifi-content.s3.amazonaws.com/alan/dev/tablet-with-home-button.fbx/tablet-with-home-button.fbm/button-root.png"; -var AUDIO_QML_SOURCE = "../audio/Audio.qml"; +var AUDIO_QML_SOURCE = "hifi/audio/Audio.qml"; var MUTE_ICONS = { icon: "icons/tablet-icons/mic-mute-i.svg", diff --git a/scripts/system/commerce/wallet.js b/scripts/system/commerce/wallet.js index 8e4a3215fd..9b2367b762 100644 --- a/scripts/system/commerce/wallet.js +++ b/scripts/system/commerce/wallet.js @@ -26,8 +26,8 @@ // Relevant Variables: // -WALLET_QML_SOURCE: The path to the Wallet QML // -onWalletScreen: true/false depending on whether we're looking at the app. - var WALLET_QML_SOURCE = Script.resourcesPath() + "qml/hifi/commerce/wallet/Wallet.qml"; - var MARKETPLACE_PURCHASES_QML_PATH = Script.resourcesPath() + "qml/hifi/commerce/purchases/Purchases.qml"; + var WALLET_QML_SOURCE = "hifi/commerce/wallet/Wallet.qml"; + var MARKETPLACE_PURCHASES_QML_PATH = "hifi/commerce/purchases/Purchases.qml"; var onWalletScreen = false; function onButtonClicked() { if (!tablet) { diff --git a/scripts/system/edit.js b/scripts/system/edit.js index e76a02b6f5..07551f31e5 100644 --- a/scripts/system/edit.js +++ b/scripts/system/edit.js @@ -656,7 +656,7 @@ var toolBar = (function () { selectionDisplay.triggerMapping.disable(); tablet.landscape = false; } else { - tablet.loadQMLSource("Edit.qml", true); + tablet.loadQMLSource("hifi/tablet/Edit.qml", true); UserActivityLogger.enabledEdit(); entityListTool.setVisible(true); gridTool.setVisible(true); diff --git a/scripts/system/generalSettings.js b/scripts/system/generalSettings.js index 7d97f13757..082528ffc5 100644 --- a/scripts/system/generalSettings.js +++ b/scripts/system/generalSettings.js @@ -18,7 +18,7 @@ var buttonName = "Settings"; var toolBar = null; var tablet = null; - var settings = "TabletGeneralPreferences.qml" + var settings = "hifi/tablet/TabletGeneralPreferences.qml" function onClicked(){ if (tablet) { tablet.loadQMLSource(settings); diff --git a/scripts/system/marketplaces/marketplaces.js b/scripts/system/marketplaces/marketplaces.js index f0044084f6..b427739292 100644 --- a/scripts/system/marketplaces/marketplaces.js +++ b/scripts/system/marketplaces/marketplaces.js @@ -346,7 +346,7 @@ Menu.setIsOptionChecked("Disable Preview", isHmdPreviewDisabled); break; case 'purchases_openGoTo': - tablet.loadQMLSource("TabletAddressDialog.qml"); + tablet.loadQMLSource("hifi/tablet/TabletAddressDialog.qml"); break; case 'purchases_itemCertificateClicked': setCertificateInfo("", message.itemCertificateId); diff --git a/scripts/system/pal.js b/scripts/system/pal.js index 44ff7c2acd..05a7dc8975 100644 --- a/scripts/system/pal.js +++ b/scripts/system/pal.js @@ -40,7 +40,7 @@ var HOVER_TEXTURES = { var UNSELECTED_COLOR = { red: 0x1F, green: 0xC6, blue: 0xA6}; var SELECTED_COLOR = {red: 0xF3, green: 0x91, blue: 0x29}; var HOVER_COLOR = {red: 0xD0, green: 0xD0, blue: 0xD0}; // almost white for now -var PAL_QML_SOURCE = "../Pal.qml"; +var PAL_QML_SOURCE = "hifi/Pal.qml"; var conserveResources = true; Script.include("/~/system/libraries/controllers.js"); diff --git a/scripts/system/tablet-goto.js b/scripts/system/tablet-goto.js index 929c6e0e5c..2a0e827932 100644 --- a/scripts/system/tablet-goto.js +++ b/scripts/system/tablet-goto.js @@ -24,7 +24,7 @@ print('tablet-goto.js:', [].map.call(arguments, JSON.stringify)); } - var gotoQmlSource = "TabletAddressDialog.qml"; + var gotoQmlSource = "hifi/tablet/TabletAddressDialog.qml"; var buttonName = "GOTO"; var onGotoScreen = false; var shouldActivateButton = false; diff --git a/unpublishedScripts/marketplace/skyboxChanger/skyboxchanger.js b/unpublishedScripts/marketplace/skyboxChanger/skyboxchanger.js index e7a135ec9e..7bc65722cd 100644 --- a/unpublishedScripts/marketplace/skyboxChanger/skyboxchanger.js +++ b/unpublishedScripts/marketplace/skyboxChanger/skyboxchanger.js @@ -24,7 +24,7 @@ if (onSkyboxChangerScreen) { tablet.gotoHomeScreen(); } else { - tablet.loadQMLSource("../SkyboxChanger.qml"); + tablet.loadQMLSource("hifi/SkyboxChanger.qml"); } } diff --git a/unpublishedScripts/marketplace/spectator-camera/spectatorCamera.js b/unpublishedScripts/marketplace/spectator-camera/spectatorCamera.js index f0b943ad92..76044d2975 100644 --- a/unpublishedScripts/marketplace/spectator-camera/spectatorCamera.js +++ b/unpublishedScripts/marketplace/spectator-camera/spectatorCamera.js @@ -390,7 +390,7 @@ // Relevant Variables: // -SPECTATOR_CAMERA_QML_SOURCE: The path to the SpectatorCamera QML // -onSpectatorCameraScreen: true/false depending on whether we're looking at the spectator camera app. - var SPECTATOR_CAMERA_QML_SOURCE = Script.resourcesPath() + "qml/hifi/SpectatorCamera.qml"; + var SPECTATOR_CAMERA_QML_SOURCE = "hifi/SpectatorCamera.qml"; var onSpectatorCameraScreen = false; function onTabletButtonClicked() { if (!tablet) { From 2cd76be6c487de87bbdfa58fdf54e1d653311fba Mon Sep 17 00:00:00 2001 From: Brad Davis Date: Mon, 6 Nov 2017 10:31:32 -0800 Subject: [PATCH 008/148] Fix encoding for wallet scripting interface --- interface/src/scripting/WalletScriptingInterface.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/src/scripting/WalletScriptingInterface.cpp b/interface/src/scripting/WalletScriptingInterface.cpp index c866bac2b2..55d53000b7 100644 --- a/interface/src/scripting/WalletScriptingInterface.cpp +++ b/interface/src/scripting/WalletScriptingInterface.cpp @@ -1,4 +1,4 @@ -// +// // WalletScriptingInterface.cpp // interface/src/scripting // From e13a74213c0f51f75c89caaaffc6655bd515a02c Mon Sep 17 00:00:00 2001 From: amantley Date: Mon, 6 Nov 2017 17:29:19 -0800 Subject: [PATCH 009/148] this is holder spot to put avatar entity animation code --- libraries/entities-renderer/src/RenderableModelEntityItem.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp index 7db19704b4..3959bf0bf0 100644 --- a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp @@ -979,6 +979,8 @@ void ModelEntityRenderer::animate(const TypedEntityPointer& entity) { return; } + //this a spot to work on the avatar npc in my branch + QVector jointsData; const QVector& frames = _animation->getFramesReference(); // NOTE: getFrames() is too heavy From 803e5d143d2e5bb638ffc31ff93db6368d8fa480 Mon Sep 17 00:00:00 2001 From: Nissim Hadar Date: Tue, 7 Nov 2017 11:48:46 -0800 Subject: [PATCH 010/148] Moved Haze pass to be before transparency pass. --- libraries/render-utils/src/RenderDeferredTask.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/libraries/render-utils/src/RenderDeferredTask.cpp b/libraries/render-utils/src/RenderDeferredTask.cpp index 6a3b560167..0f095900be 100644 --- a/libraries/render-utils/src/RenderDeferredTask.cpp +++ b/libraries/render-utils/src/RenderDeferredTask.cpp @@ -159,6 +159,9 @@ void RenderDeferredTask::build(JobModel& task, const render::Varying& input, ren // Similar to light stage, background stage has been filled by several potential render items and resolved for the frame in this job task.addJob("DrawBackgroundDeferred", lightingModel); + const auto drawHazeInputs = render::Varying(DrawHaze::Inputs(hazeModel, lightingFramebuffer, linearDepthTarget, deferredFrameTransform, lightingFramebuffer)); + task.addJob("DrawHazeDeferred", drawHazeInputs); + // Render transparent objects forward in LightingBuffer const auto transparentsInputs = DrawDeferred::Inputs(transparents, lightingModel).asVarying(); task.addJob("DrawTransparentDeferred", transparentsInputs, shapePlumber); @@ -169,9 +172,6 @@ void RenderDeferredTask::build(JobModel& task, const render::Varying& input, ren task.addJob("DebugLightClusters", debugLightClustersInputs); } - const auto drawHazeInputs = render::Varying(DrawHaze::Inputs(hazeModel, lightingFramebuffer, linearDepthTarget, deferredFrameTransform, lightingFramebuffer)); - task.addJob("DrawHaze", drawHazeInputs); - const auto toneAndPostRangeTimer = task.addJob("BeginToneAndPostRangeTimer", "PostToneOverlaysAntialiasing"); // Lighting Buffer ready for tone mapping From b7f31eb5b9cabf53c205178895aed8bb50ba48b0 Mon Sep 17 00:00:00 2001 From: Brad Davis Date: Tue, 7 Nov 2017 12:42:26 -0800 Subject: [PATCH 011/148] Fixing desktop QML loading, tablet clickthrough bugs --- .../resources/qml/hifi/tablet/TabletRoot.qml | 13 ++- .../resources/qml/hifi/tablet/WindowRoot.qml | 82 +++++++++++++------ 2 files changed, 67 insertions(+), 28 deletions(-) diff --git a/interface/resources/qml/hifi/tablet/TabletRoot.qml b/interface/resources/qml/hifi/tablet/TabletRoot.qml index 028ac2d8b6..6eb8e59ed1 100644 --- a/interface/resources/qml/hifi/tablet/TabletRoot.qml +++ b/interface/resources/qml/hifi/tablet/TabletRoot.qml @@ -202,8 +202,16 @@ Item { } function load(newSource, callback) { - loader.source = newSource; - loader.item = null; + if (loader.source == newSource) { + loader.loaded(); + return; + } + + if (loader.item) { + loader.item.destroy(); + loader.item = null; + } + QmlSurface.load(newSource, loader, function(newItem) { loader.item = newItem; loader.item.width = loader.width; @@ -232,7 +240,6 @@ Item { callback(); } }); - console.log("QQQ done calling QmlSurface.load") } } diff --git a/interface/resources/qml/hifi/tablet/WindowRoot.qml b/interface/resources/qml/hifi/tablet/WindowRoot.qml index e3170f85ef..baf2fa05c2 100644 --- a/interface/resources/qml/hifi/tablet/WindowRoot.qml +++ b/interface/resources/qml/hifi/tablet/WindowRoot.qml @@ -59,18 +59,15 @@ Windows.ScrollingWindow { } function loadSource(url) { - loader.source = ""; // make sure we load the qml fresh each time. - loader.source = url; + loader.load(url) } function loadWebBase() { - loader.source = ""; - loader.source = "WindowWebView.qml"; + loader.load("hifi/tablet/TabletWebView.qml"); } function loadTabletWebBase() { - loader.source = ""; - loader.source = "./BlocksWebView.qml"; + loader.load("hifi/tablet/BlocksWebView.qml"); } function loadWebUrl(url, injectedJavaScriptUrl) { @@ -111,38 +108,73 @@ Windows.ScrollingWindow { username = newUsername; } - Loader { + // Hook up callback for clara.io download from the marketplace. + Connections { + id: eventBridgeConnection + target: eventBridge + onWebEventReceived: { + if (message.slice(0, 17) === "CLARA.IO DOWNLOAD") { + ApplicationInterface.addAssetToWorldFromURL(message.slice(18)); + } + } + } + + Item { id: loader - objectName: "loader" - asynchronous: false + objectName: "loader"; + property string source: ""; + property var item: null; height: pane.scrollHeight width: pane.contentWidth anchors.left: parent.left anchors.top: parent.top - - // Hook up callback for clara.io download from the marketplace. - Connections { - id: eventBridgeConnection - target: eventBridge - onWebEventReceived: { - if (message.slice(0, 17) === "CLARA.IO DOWNLOAD") { - ApplicationInterface.addAssetToWorldFromURL(message.slice(18)); - } + signal loaded; + + onWidthChanged: { + if (loader.item) { + loader.item.width = loader.width; } } + + onHeightChanged: { + if (loader.item) { + loader.item.height = loader.height; + } + } + + function load(newSource, callback) { + if (loader.source == newSource) { + loader.loaded(); + return; + } - onLoaded: { - if (loader.item.hasOwnProperty("sendToScript")) { - loader.item.sendToScript.connect(tabletRoot.sendToScript); + if (loader.item) { + loader.item.destroy(); + loader.item = null; } - if (loader.item.hasOwnProperty("setRootMenu")) { - loader.item.setRootMenu(tabletRoot.rootMenu, tabletRoot.subMenu); - } - loader.item.forceActiveFocus(); + + QmlSurface.load(newSource, loader, function(newItem) { + loader.item = newItem; + loader.item.width = loader.width; + loader.item.height = loader.height; + loader.loaded(); + if (loader.item.hasOwnProperty("sendToScript")) { + loader.item.sendToScript.connect(tabletRoot.sendToScript); + } + if (loader.item.hasOwnProperty("setRootMenu")) { + loader.item.setRootMenu(tabletRoot.rootMenu, tabletRoot.subMenu); + } + loader.item.forceActiveFocus(); + + if (callback) { + callback(); + } + }); } } + implicitWidth: 480 implicitHeight: 706 } From 87aee7242aa1957d80ba2bfd606e72046c32fdb0 Mon Sep 17 00:00:00 2001 From: Nissim Hadar Date: Tue, 7 Nov 2017 15:25:42 -0800 Subject: [PATCH 012/148] Moved linearDepthMap into Haze.slf Refactored computation of keylight attenuation - now function in Haze.slh --- .../render-utils/src/DeferredGlobalLight.slh | 50 ++----------------- libraries/render-utils/src/Haze.slf | 1 + libraries/render-utils/src/Haze.slh | 43 +++++++++++++++- 3 files changed, 47 insertions(+), 47 deletions(-) diff --git a/libraries/render-utils/src/DeferredGlobalLight.slh b/libraries/render-utils/src/DeferredGlobalLight.slh index f70daf1e77..881de119b0 100644 --- a/libraries/render-utils/src/DeferredGlobalLight.slh +++ b/libraries/render-utils/src/DeferredGlobalLight.slh @@ -123,6 +123,9 @@ vec3 evalSkyboxGlobalColor(mat4 invViewMat, float shadowAttenuation, float obscu color += ambientSpecular; // Directional + // Get directional light (used by both directional light and haze attenuation) + Light directionalLight = getLight(); + vec3 directionalDiffuse; vec3 directionalSpecular; evalLightingDirectional(directionalDiffuse, directionalSpecular, lightDirection, lightIrradiance, fragEyeDir, fragNormal, roughness, metallic, fresnel, albedo, shadowAttenuation @@ -135,52 +138,7 @@ vec3 evalSkyboxGlobalColor(mat4 invViewMat, float shadowAttenuation, float obscu // Attenuate the light if haze effect selected if ((hazeParams.hazeMode & HAZE_MODE_IS_KEYLIGHT_ATTENUATED) == HAZE_MODE_IS_KEYLIGHT_ATTENUATED) { - // Directional light attenuation is simulated by assuming the light source is at a fixed height above the - // fragment. This height is where the haze density is reduced by 95% from the haze at the fragment's height - // - // The distance is computed from the height and the directional light orientation - // The distance is limited to height * 1,000, which gives an angle of ~0.057 degrees - - // Get directional light - Light light = getLight(); - vec3 lightDirection = getLightDirection(light); - - // Height at which haze density is reduced by 95% (default set to 2000.0 for safety ,this should never happen) - float height_95p = 2000.0; - if (hazeParams.hazeKeyLightAltitudeFactor > 0.0f) { - height_95p = -log(0.05) / hazeParams.hazeKeyLightAltitudeFactor; - } - - // Note that the sine will always be positive - float sin_pitch = sqrt(1.0 - lightDirection.y * lightDirection.y); - - float distance; - const float minimumSinPitch = 0.001; - if (sin_pitch < minimumSinPitch) { - distance = height_95p / minimumSinPitch; - } else { - distance = height_95p / sin_pitch; - } - - // Position of fragment in world coordinates - vec4 worldFragPos = invViewMat * vec4(position, 0.0); - - // Integration is from the fragment towards the light source - // Note that the haze base reference affects only the haze density as function of altitude - float hazeDensityDistribution = - hazeParams.hazeKeyLightRangeFactor * - exp(-hazeParams.hazeKeyLightAltitudeFactor * (worldFragPos.y - hazeParams.hazeBaseReference)); - - float hazeIntegral = hazeDensityDistribution * distance; - - // Note that t is constant and equal to -log(0.05) - // float t = hazeParams.hazeAltitudeFactor * height_95p; - // hazeIntegral *= (1.0 - exp (-t)) / t; - hazeIntegral *= 0.3171178; - - float hazeAmount = 1.0 - exp(-hazeIntegral); - - color = mix(color, vec3(0.0, 0.0, 0.0), hazeAmount); + color = computeHazeColor(color, directionalLight, invViewMat, position); } return color; diff --git a/libraries/render-utils/src/Haze.slf b/libraries/render-utils/src/Haze.slf index b366e6d639..79cca8b17b 100644 --- a/libraries/render-utils/src/Haze.slf +++ b/libraries/render-utils/src/Haze.slf @@ -23,6 +23,7 @@ <@include Haze.slh@> uniform sampler2D colorMap; +uniform sampler2D linearDepthMap; vec4 unpackPositionFromZeye(vec2 texcoord) { float Zeye = -texture(linearDepthMap, texcoord).x; diff --git a/libraries/render-utils/src/Haze.slh b/libraries/render-utils/src/Haze.slh index de7f0ac246..ea72b305c2 100644 --- a/libraries/render-utils/src/Haze.slh +++ b/libraries/render-utils/src/Haze.slh @@ -40,7 +40,48 @@ layout(std140) uniform hazeBuffer { HazeParams hazeParams; }; -uniform sampler2D linearDepthMap; +vec3 computeHazeColor(vec3 color, Light directionalLight, mat4 invViewMat, vec3 worldFragPos) { + // Directional light attenuation is simulated by assuming the light source is at a fixed height above the + // fragment. This height is where the haze density is reduced by 95% from the haze at the fragment's height + // + // The distance is computed from the height and the directional light orientation + // The distance is limited to height * 1,000, which gives an angle of ~0.057 degrees + vec3 lightDirection = getLightDirection(directionalLight); + // Height at which haze density is reduced by 95% (default set to 2000.0 for safety ,this should never happen) + float height_95p = 2000.0; + const float log_p_005 = log(0.05); + if (hazeParams.hazeKeyLightAltitudeFactor > 0.0f) { + height_95p = -log_p_005 / hazeParams.hazeKeyLightAltitudeFactor; + } + + // Note that we need the sine to be positive + float sin_pitch = abs(lightDirection.y); + + float distance; + const float minimumSinPitch = 0.001; + if (sin_pitch < minimumSinPitch) { + distance = height_95p / minimumSinPitch; + } else { + distance = height_95p / sin_pitch; + } + + // Integration is from the fragment towards the light source + // Note that the haze base reference affects only the haze density as function of altitude + float hazeDensityDistribution = + hazeParams.hazeKeyLightRangeFactor * + exp(-hazeParams.hazeKeyLightAltitudeFactor * (worldFragPos.y - hazeParams.hazeBaseReference)); + + float hazeIntegral = hazeDensityDistribution * distance; + + // Note that t is constant and equal to -log(0.05) + // float t = hazeParams.hazeAltitudeFactor * height_95p; + // hazeIntegral *= (1.0 - exp (-t)) / t; + hazeIntegral *= 0.3171178; + + float hazeAmount = 1.0 - exp(-hazeIntegral); + + return mix(color, vec3(0.0, 0.0, 0.0), hazeAmount); +} <@endif@> From ee6a8510c6c8cda61b506fac9619f52ace116690 Mon Sep 17 00:00:00 2001 From: Nissim Hadar Date: Tue, 7 Nov 2017 17:22:57 -0800 Subject: [PATCH 013/148] Refactored haze computation. --- .../render-utils/src/DeferredGlobalLight.slh | 2 +- libraries/render-utils/src/Haze.slf | 99 +------------------ libraries/render-utils/src/Haze.slh | 99 ++++++++++++++++++- 3 files changed, 102 insertions(+), 98 deletions(-) diff --git a/libraries/render-utils/src/DeferredGlobalLight.slh b/libraries/render-utils/src/DeferredGlobalLight.slh index 881de119b0..67a45e6ddf 100644 --- a/libraries/render-utils/src/DeferredGlobalLight.slh +++ b/libraries/render-utils/src/DeferredGlobalLight.slh @@ -138,7 +138,7 @@ vec3 evalSkyboxGlobalColor(mat4 invViewMat, float shadowAttenuation, float obscu // Attenuate the light if haze effect selected if ((hazeParams.hazeMode & HAZE_MODE_IS_KEYLIGHT_ATTENUATED) == HAZE_MODE_IS_KEYLIGHT_ATTENUATED) { - color = computeHazeColor(color, directionalLight, invViewMat, position); + color = computeHazeColorKeyLightAttenuation(color, directionalLight, invViewMat, position); } return color; diff --git a/libraries/render-utils/src/Haze.slf b/libraries/render-utils/src/Haze.slf index 79cca8b17b..18deb9c891 100644 --- a/libraries/render-utils/src/Haze.slf +++ b/libraries/render-utils/src/Haze.slf @@ -46,104 +46,11 @@ void main(void) { discard; } - // Distance to fragment - vec4 eyeFragPos = unpackPositionFromZeye(varTexCoord0); - float distance = length(eyeFragPos.xyz); - vec4 fragColor = texture(colorMap, varTexCoord0); - vec4 hazeColor = vec4(hazeParams.hazeColor, 1.0); - - // Directional light component is a function of the angle from the eye, between the fragment and the sun - DeferredFrameTransform deferredTransform = getDeferredFrameTransform(); + vec4 eyeFragPos = unpackPositionFromZeye(varTexCoord0); vec4 worldFragPos = getViewInverse() * eyeFragPos; - vec3 eyeFragDir = normalize(worldFragPos.xyz); + vec3 worldEyePos = getViewInverse()[3].xyz; - Light light = getLight(); - vec3 lightDirection = getLightDirection(light); - - float glareComponent = max(0.0, dot(eyeFragDir, -lightDirection)); - float power = min(1.0, pow(glareComponent, hazeParams.hazeGlareBlend)); - - vec4 glareColor = vec4(hazeParams.hazeGlareColor, 1.0); - - // Use the haze colour for the glare colour, if blend is not enabled - vec4 blendedHazeColor; - if ((hazeParams.hazeMode & HAZE_MODE_IS_ENABLE_LIGHT_BLEND) == HAZE_MODE_IS_ENABLE_LIGHT_BLEND) { - blendedHazeColor = mix(hazeColor, glareColor, power); - } else { - blendedHazeColor = hazeColor; - } - - vec4 potentialFragColor; - - if ((hazeParams.hazeMode & HAZE_MODE_IS_MODULATE_COLOR) == HAZE_MODE_IS_MODULATE_COLOR) { - // Compute separately for each colour - // Haze is based on both range and altitude - // Taken from www.crytek.com/download/GDC2007_RealtimeAtmoFxInGamesRev.ppt - - // The eyepoint position is in the last column of the matrix - vec3 worldEyePos = getViewInverse()[3].xyz; - - // Note that the haze base reference affects only the haze density as function of altitude - vec3 hazeDensityDistribution = - hazeParams.colorModulationFactor * - exp(-hazeParams.hazeHeightFactor * (worldEyePos.y - hazeParams.hazeBaseReference)); - - vec3 hazeIntegral = hazeDensityDistribution * distance; - - const float slopeThreshold = 0.01; - float deltaHeight = worldFragPos.y - worldEyePos.y; - if (abs(deltaHeight) > slopeThreshold) { - float t = hazeParams.hazeHeightFactor * deltaHeight; - hazeIntegral *= (1.0 - exp (-t)) / t; - } - - vec3 hazeAmount = 1.0 - exp(-hazeIntegral); - - // Compute color after haze effect - potentialFragColor = mix(fragColor, vec4(1.0, 1.0, 1.0, 1.0), vec4(hazeAmount, 1.0)); - } else if ((hazeParams.hazeMode & HAZE_MODE_IS_ALTITUDE_BASED) != HAZE_MODE_IS_ALTITUDE_BASED) { - // Haze is based only on range - float hazeAmount = 1.0 - exp(-distance * hazeParams.hazeRangeFactor); - - // Compute color after haze effect - potentialFragColor = mix(fragColor, blendedHazeColor, hazeAmount); - } else { - // Haze is based on both range and altitude - // Taken from www.crytek.com/download/GDC2007_RealtimeAtmoFxInGamesRev.ppt - - // The eyepoint position is in the last column of the matrix - vec3 worldEyePos = getViewInverse()[3].xyz; - - // Note that the haze base reference affects only the haze density as function of altitude - float hazeDensityDistribution = - hazeParams.hazeRangeFactor * - exp(-hazeParams.hazeHeightFactor * (worldEyePos.y - hazeParams.hazeBaseReference)); - - float hazeIntegral = hazeDensityDistribution * distance; - - const float slopeThreshold = 0.01; - float deltaHeight = worldFragPos.y - worldEyePos.y; - if (abs(deltaHeight) > slopeThreshold) { - float t = hazeParams.hazeHeightFactor * deltaHeight; - // Protect from wild values - if (abs(t) > 0.0000001) { - hazeIntegral *= (1.0 - exp (-t)) / t; - } - } - - float hazeAmount = 1.0 - exp(-hazeIntegral); - - // Compute color after haze effect - potentialFragColor = mix(fragColor, blendedHazeColor, hazeAmount); - } - - // Mix with background at far range - const float BLEND_DISTANCE = 27000.0; - if (distance > BLEND_DISTANCE) { - outFragColor = mix(potentialFragColor, fragColor, hazeParams.backgroundBlend); - } else { - outFragColor = potentialFragColor; - } + outFragColor = computeHazeColor(fragColor, eyeFragPos, worldFragPos, worldEyePos); } diff --git a/libraries/render-utils/src/Haze.slh b/libraries/render-utils/src/Haze.slh index ea72b305c2..0633802c84 100644 --- a/libraries/render-utils/src/Haze.slh +++ b/libraries/render-utils/src/Haze.slh @@ -40,7 +40,7 @@ layout(std140) uniform hazeBuffer { HazeParams hazeParams; }; -vec3 computeHazeColor(vec3 color, Light directionalLight, mat4 invViewMat, vec3 worldFragPos) { +vec3 computeHazeColorKeyLightAttenuation(vec3 color, Light directionalLight, mat4 invViewMat, vec3 worldFragPos) { // Directional light attenuation is simulated by assuming the light source is at a fixed height above the // fragment. This height is where the haze density is reduced by 95% from the haze at the fragment's height // @@ -83,5 +83,102 @@ vec3 computeHazeColor(vec3 color, Light directionalLight, mat4 invViewMat, vec3 return mix(color, vec3(0.0, 0.0, 0.0), hazeAmount); } + +vec4 computeHazeColor(vec4 fragColor, vec4 eyeFragPos, vec4 worldFragPos, vec3 worldEyePos) { + // Distance to fragment + float distance = length(eyeFragPos.xyz); + + // Convert haze colour from uniform into a vec4 + vec4 hazeColor = vec4(hazeParams.hazeColor, 1.0); + + // Directional light component is a function of the angle from the eye, between the fragment and the sun + vec3 eyeFragDir = normalize(worldFragPos.xyz); + + Light light = getLight(); + vec3 lightDirection = getLightDirection(light); + + float glareComponent = max(0.0, dot(eyeFragDir, -lightDirection)); + float power = min(1.0, pow(glareComponent, hazeParams.hazeGlareBlend)); + + vec4 glareColor = vec4(hazeParams.hazeGlareColor, 1.0); + + // Use the haze colour for the glare colour, if blend is not enabled + vec4 blendedHazeColor; + if ((hazeParams.hazeMode & HAZE_MODE_IS_ENABLE_LIGHT_BLEND) == HAZE_MODE_IS_ENABLE_LIGHT_BLEND) { + blendedHazeColor = mix(hazeColor, glareColor, power); + } else { + blendedHazeColor = hazeColor; + } + + vec4 potentialFragColor; + + if ((hazeParams.hazeMode & HAZE_MODE_IS_MODULATE_COLOR) == HAZE_MODE_IS_MODULATE_COLOR) { + // Compute separately for each colour + // Haze is based on both range and altitude + // Taken from www.crytek.com/download/GDC2007_RealtimeAtmoFxInGamesRev.ppt + + // Note that the haze base reference affects only the haze density as function of altitude + vec3 hazeDensityDistribution = + hazeParams.colorModulationFactor * + exp(-hazeParams.hazeHeightFactor * (worldEyePos.y - hazeParams.hazeBaseReference)); + + vec3 hazeIntegral = hazeDensityDistribution * distance; + + const float slopeThreshold = 0.01; + float deltaHeight = worldFragPos.y - worldEyePos.y; + if (abs(deltaHeight) > slopeThreshold) { + float t = hazeParams.hazeHeightFactor * deltaHeight; + hazeIntegral *= (1.0 - exp (-t)) / t; + } + + vec3 hazeAmount = 1.0 - exp(-hazeIntegral); + + // Compute color after haze effect + potentialFragColor = mix(fragColor, vec4(1.0, 1.0, 1.0, 1.0), vec4(hazeAmount, 1.0)); + } else if ((hazeParams.hazeMode & HAZE_MODE_IS_ALTITUDE_BASED) != HAZE_MODE_IS_ALTITUDE_BASED) { + // Haze is based only on range + float hazeAmount = 1.0 - exp(-distance * hazeParams.hazeRangeFactor); + + // Compute color after haze effect + potentialFragColor = mix(fragColor, blendedHazeColor, hazeAmount); + } else { + // Haze is based on both range and altitude + // Taken from www.crytek.com/download/GDC2007_RealtimeAtmoFxInGamesRev.ppt + + // Note that the haze base reference affects only the haze density as function of altitude + float hazeDensityDistribution = + hazeParams.hazeRangeFactor * + exp(-hazeParams.hazeHeightFactor * (worldEyePos.y - hazeParams.hazeBaseReference)); + + float hazeIntegral = hazeDensityDistribution * distance; + + const float slopeThreshold = 0.01; + float deltaHeight = worldFragPos.y - worldEyePos.y; + if (abs(deltaHeight) > slopeThreshold) { + float t = hazeParams.hazeHeightFactor * deltaHeight; + // Protect from wild values + if (abs(t) > 0.0000001) { + hazeIntegral *= (1.0 - exp (-t)) / t; + } + } + + float hazeAmount = 1.0 - exp(-hazeIntegral); + + // Compute color after haze effect + potentialFragColor = mix(fragColor, blendedHazeColor, hazeAmount); + } + + // Mix with background at far range + const float BLEND_DISTANCE = 27000.0; + vec4 outFragColor; + if (distance > BLEND_DISTANCE) { + outFragColor = mix(potentialFragColor, fragColor, hazeParams.backgroundBlend); + } else { + outFragColor = potentialFragColor; + } + + return outFragColor; +} + <@endif@> From 83ff20b599445a740a44f5847572e2e836b8764a Mon Sep 17 00:00:00 2001 From: Nissim Hadar Date: Wed, 8 Nov 2017 08:00:31 -0800 Subject: [PATCH 014/148] Renamed getHazeParametersBuffer to getParametersBuffer --- libraries/model/src/model/Haze.h | 2 +- libraries/render-utils/src/DeferredLightingEffect.cpp | 2 +- libraries/render-utils/src/DrawHaze.cpp | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/libraries/model/src/model/Haze.h b/libraries/model/src/model/Haze.h index a0cc7c3bc7..e8b680705f 100644 --- a/libraries/model/src/model/Haze.h +++ b/libraries/model/src/model/Haze.h @@ -95,7 +95,7 @@ namespace model { void setZoneTransform(const glm::mat4& zoneTransform); using UniformBufferView = gpu::BufferView; - UniformBufferView getHazeParametersBuffer() const { return _hazeParametersBuffer; } + UniformBufferView getParametersBuffer() const { return _hazeParametersBuffer; } protected: class Parameters { diff --git a/libraries/render-utils/src/DeferredLightingEffect.cpp b/libraries/render-utils/src/DeferredLightingEffect.cpp index 2187cb70b1..aae908c835 100644 --- a/libraries/render-utils/src/DeferredLightingEffect.cpp +++ b/libraries/render-utils/src/DeferredLightingEffect.cpp @@ -560,7 +560,7 @@ void RenderDeferredSetup::run(const render::RenderContextPointer& renderContext, // Haze if (haze) { - batch.setUniformBuffer(HAZE_MODEL_BUFFER_SLOT, haze->getHazeParametersBuffer()); + batch.setUniformBuffer(HAZE_MODEL_BUFFER_SLOT, haze->getParametersBuffer()); } batch.draw(gpu::TRIANGLE_STRIP, 4); diff --git a/libraries/render-utils/src/DrawHaze.cpp b/libraries/render-utils/src/DrawHaze.cpp index 7cf07d8f33..6b544eeb30 100644 --- a/libraries/render-utils/src/DrawHaze.cpp +++ b/libraries/render-utils/src/DrawHaze.cpp @@ -169,7 +169,7 @@ void DrawHaze::run(const render::RenderContextPointer& renderContext, const Inpu auto hazeStage = args->_scene->getStage(); if (hazeStage && hazeStage->_currentFrame._hazes.size() > 0) { model::HazePointer hazePointer = hazeStage->getHaze(hazeStage->_currentFrame._hazes.front()); - batch.setUniformBuffer(HazeEffect_ParamsSlot, hazePointer->getHazeParametersBuffer()); + batch.setUniformBuffer(HazeEffect_ParamsSlot, hazePointer->getParametersBuffer()); } batch.setUniformBuffer(HazeEffect_TransformBufferSlot, transformBuffer->getFrameTransformBuffer()); From 3d2c8186e7c4a1067e752c0adc36d2886d1107f1 Mon Sep 17 00:00:00 2001 From: Nissim Hadar Date: Wed, 8 Nov 2017 08:01:19 -0800 Subject: [PATCH 015/148] Added Haze model as input to transparency shader. --- libraries/render-utils/src/RenderDeferredTask.cpp | 4 +++- libraries/render-utils/src/RenderDeferredTask.h | 4 ++-- libraries/render/src/render/ShapePipeline.h | 1 + 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/libraries/render-utils/src/RenderDeferredTask.cpp b/libraries/render-utils/src/RenderDeferredTask.cpp index 0f095900be..79a8bc0827 100644 --- a/libraries/render-utils/src/RenderDeferredTask.cpp +++ b/libraries/render-utils/src/RenderDeferredTask.cpp @@ -163,7 +163,7 @@ void RenderDeferredTask::build(JobModel& task, const render::Varying& input, ren task.addJob("DrawHazeDeferred", drawHazeInputs); // Render transparent objects forward in LightingBuffer - const auto transparentsInputs = DrawDeferred::Inputs(transparents, lightingModel).asVarying(); + const auto transparentsInputs = DrawDeferred::Inputs(transparents, lightingModel, hazeModel).asVarying(); task.addJob("DrawTransparentDeferred", transparentsInputs, shapePlumber); // LIght Cluster Grid Debuging job @@ -291,6 +291,7 @@ void DrawDeferred::run(const RenderContextPointer& renderContext, const Inputs& const auto& inItems = inputs.get0(); const auto& lightingModel = inputs.get1(); + const auto& hazeModel = inputs.get2(); RenderArgs* args = renderContext->args; @@ -311,6 +312,7 @@ void DrawDeferred::run(const RenderContextPointer& renderContext, const Inputs& // Setup lighting model for all items; batch.setUniformBuffer(render::ShapePipeline::Slot::LIGHTING_MODEL, lightingModel->getParametersBuffer()); + batch.setUniformBuffer(render::ShapePipeline::Slot::HAZE_MODEL, hazeModel->getParametersBuffer()); // From the lighting model define a global shapKey ORED with individiual keys ShapeKey::Builder keyBuilder; diff --git a/libraries/render-utils/src/RenderDeferredTask.h b/libraries/render-utils/src/RenderDeferredTask.h index 452420589b..9a1e37ea92 100644 --- a/libraries/render-utils/src/RenderDeferredTask.h +++ b/libraries/render-utils/src/RenderDeferredTask.h @@ -15,7 +15,7 @@ #include #include #include "LightingModel.h" - +#include "model/Haze.h" class BeginGPURangeTimer { public: @@ -66,7 +66,7 @@ protected: class DrawDeferred { public: - using Inputs = render::VaryingSet2 ; + using Inputs = render::VaryingSet3 ; using Config = DrawConfig; using JobModel = render::Job::ModelI; diff --git a/libraries/render/src/render/ShapePipeline.h b/libraries/render/src/render/ShapePipeline.h index f0749504eb..0184c4275f 100644 --- a/libraries/render/src/render/ShapePipeline.h +++ b/libraries/render/src/render/ShapePipeline.h @@ -238,6 +238,7 @@ public: LIGHT, LIGHT_AMBIENT_BUFFER, FADE_PARAMETERS, + HAZE_MODEL }; enum MAP { From a8a118582dc344cd4ddcd505147eb81b9574ec8f Mon Sep 17 00:00:00 2001 From: Nissim Hadar Date: Wed, 8 Nov 2017 09:37:58 -0800 Subject: [PATCH 016/148] WIP - passing uniform into model translucency shader. --- libraries/model/src/model/Haze.h | 4 ++-- libraries/render-utils/src/DeferredLightingEffect.cpp | 2 +- libraries/render-utils/src/DrawHaze.cpp | 2 +- libraries/render-utils/src/RenderDeferredTask.cpp | 8 +++++++- libraries/render/src/render/ShapePipeline.cpp | 2 ++ libraries/render/src/render/ShapePipeline.h | 1 + 6 files changed, 14 insertions(+), 5 deletions(-) diff --git a/libraries/model/src/model/Haze.h b/libraries/model/src/model/Haze.h index e8b680705f..5c916c3b91 100644 --- a/libraries/model/src/model/Haze.h +++ b/libraries/model/src/model/Haze.h @@ -95,7 +95,7 @@ namespace model { void setZoneTransform(const glm::mat4& zoneTransform); using UniformBufferView = gpu::BufferView; - UniformBufferView getParametersBuffer() const { return _hazeParametersBuffer; } + UniformBufferView getHazeParametersBuffer() const { return _hazeParametersBuffer; } protected: class Parameters { @@ -128,7 +128,7 @@ namespace model { Parameters() {} }; - UniformBufferView _hazeParametersBuffer; + UniformBufferView _hazeParametersBuffer{ nullptr }; }; using HazePointer = std::shared_ptr; diff --git a/libraries/render-utils/src/DeferredLightingEffect.cpp b/libraries/render-utils/src/DeferredLightingEffect.cpp index aae908c835..2187cb70b1 100644 --- a/libraries/render-utils/src/DeferredLightingEffect.cpp +++ b/libraries/render-utils/src/DeferredLightingEffect.cpp @@ -560,7 +560,7 @@ void RenderDeferredSetup::run(const render::RenderContextPointer& renderContext, // Haze if (haze) { - batch.setUniformBuffer(HAZE_MODEL_BUFFER_SLOT, haze->getParametersBuffer()); + batch.setUniformBuffer(HAZE_MODEL_BUFFER_SLOT, haze->getHazeParametersBuffer()); } batch.draw(gpu::TRIANGLE_STRIP, 4); diff --git a/libraries/render-utils/src/DrawHaze.cpp b/libraries/render-utils/src/DrawHaze.cpp index 6b544eeb30..7cf07d8f33 100644 --- a/libraries/render-utils/src/DrawHaze.cpp +++ b/libraries/render-utils/src/DrawHaze.cpp @@ -169,7 +169,7 @@ void DrawHaze::run(const render::RenderContextPointer& renderContext, const Inpu auto hazeStage = args->_scene->getStage(); if (hazeStage && hazeStage->_currentFrame._hazes.size() > 0) { model::HazePointer hazePointer = hazeStage->getHaze(hazeStage->_currentFrame._hazes.front()); - batch.setUniformBuffer(HazeEffect_ParamsSlot, hazePointer->getParametersBuffer()); + batch.setUniformBuffer(HazeEffect_ParamsSlot, hazePointer->getHazeParametersBuffer()); } batch.setUniformBuffer(HazeEffect_TransformBufferSlot, transformBuffer->getFrameTransformBuffer()); diff --git a/libraries/render-utils/src/RenderDeferredTask.cpp b/libraries/render-utils/src/RenderDeferredTask.cpp index 79a8bc0827..a9ad01902d 100644 --- a/libraries/render-utils/src/RenderDeferredTask.cpp +++ b/libraries/render-utils/src/RenderDeferredTask.cpp @@ -312,7 +312,13 @@ void DrawDeferred::run(const RenderContextPointer& renderContext, const Inputs& // Setup lighting model for all items; batch.setUniformBuffer(render::ShapePipeline::Slot::LIGHTING_MODEL, lightingModel->getParametersBuffer()); - batch.setUniformBuffer(render::ShapePipeline::Slot::HAZE_MODEL, hazeModel->getParametersBuffer()); + + // Setup haze iff curretn zone has haze + auto hazeStage = args->_scene->getStage(); + if (hazeStage && hazeStage->_currentFrame._hazes.size() > 0) { + model::HazePointer hazePointer = hazeStage->getHaze(hazeStage->_currentFrame._hazes.front()); + batch.setUniformBuffer(render::ShapePipeline::Slot::HAZE_MODEL, hazePointer->getHazeParametersBuffer()); + } // From the lighting model define a global shapKey ORED with individiual keys ShapeKey::Builder keyBuilder; diff --git a/libraries/render/src/render/ShapePipeline.cpp b/libraries/render/src/render/ShapePipeline.cpp index 762b7712d7..4254280fa1 100644 --- a/libraries/render/src/render/ShapePipeline.cpp +++ b/libraries/render/src/render/ShapePipeline.cpp @@ -87,6 +87,7 @@ void ShapePlumber::addPipeline(const Filter& filter, const gpu::ShaderPointer& p slotBindings.insert(gpu::Shader::Binding(std::string("skyboxMap"), Slot::MAP::LIGHT_AMBIENT)); slotBindings.insert(gpu::Shader::Binding(std::string("fadeMaskMap"), Slot::MAP::FADE_MASK)); slotBindings.insert(gpu::Shader::Binding(std::string("fadeParametersBuffer"), Slot::BUFFER::FADE_PARAMETERS)); + slotBindings.insert(gpu::Shader::Binding(std::string("hazeParametersBuffer"), Slot::BUFFER::HAZE_MODEL)); gpu::Shader::makeProgram(*program, slotBindings); @@ -107,6 +108,7 @@ void ShapePlumber::addPipeline(const Filter& filter, const gpu::ShaderPointer& p locations->lightAmbientMapUnit = program->getTextures().findLocation("skyboxMap"); locations->fadeMaskTextureUnit = program->getTextures().findLocation("fadeMaskMap"); locations->fadeParameterBufferUnit = program->getUniformBuffers().findLocation("fadeParametersBuffer"); + locations->hazeParameterBufferUnit = program->getUniformBuffers().findLocation("hazeParametersBuffer"); ShapeKey key{filter._flags}; auto gpuPipeline = gpu::Pipeline::create(program, state); diff --git a/libraries/render/src/render/ShapePipeline.h b/libraries/render/src/render/ShapePipeline.h index 0184c4275f..101c060306 100644 --- a/libraries/render/src/render/ShapePipeline.h +++ b/libraries/render/src/render/ShapePipeline.h @@ -271,6 +271,7 @@ public: int lightAmbientMapUnit; int fadeMaskTextureUnit; int fadeParameterBufferUnit; + int hazeParameterBufferUnit; }; using LocationsPointer = std::shared_ptr; From 1a58aee385ad8c3bc68ac4b8d7da519b8d703eec Mon Sep 17 00:00:00 2001 From: Brad Davis Date: Wed, 8 Nov 2017 12:00:29 -0800 Subject: [PATCH 017/148] Fix scripting URL injection, I hope --- .../resources/qml/hifi/tablet/TabletRoot.qml | 24 ++++++++++--------- .../ui/src/ui/TabletScriptingInterface.cpp | 13 +++++----- 2 files changed, 20 insertions(+), 17 deletions(-) diff --git a/interface/resources/qml/hifi/tablet/TabletRoot.qml b/interface/resources/qml/hifi/tablet/TabletRoot.qml index 6eb8e59ed1..bc795ce7ed 100644 --- a/interface/resources/qml/hifi/tablet/TabletRoot.qml +++ b/interface/resources/qml/hifi/tablet/TabletRoot.qml @@ -81,21 +81,23 @@ Item { }) } - function loadWebOnTop(url, injectJavaScriptUrl) { - tabletApps.append({"appUrl": loader.source, "isWebUrl": true, "scriptUrl": injectJavaScriptUrl, "appWebUrl": url}); - loader.item.url = tabletApps.get(currentApp).appWebUrl; - loader.item.scriptUrl = tabletApps.get(currentApp).scriptUrl; - if (loader.item.hasOwnProperty("gotoPreviousApp")) { - loader.item.gotoPreviousApp = true; - } + function loadWebContent(source, url, injectJavaScriptUrl) { + tabletApps.append({"appUrl": source, "isWebUrl": true, "scriptUrl": injectJavaScriptUrl, "appWebUrl": url}); + loader.load(source, function() { + loader.item.url = tabletApps.get(currentApp).appWebUrl; + loader.item.scriptUrl = tabletApps.get(currentApp).scriptUrl; + if (loader.item.hasOwnProperty("gotoPreviousApp")) { + loader.item.gotoPreviousApp = true; + } + }); } - function loadWebBase() { - loader.load("hifi/tablet/TabletWebView.qml"); + function loadWebBase(url, injectJavaScriptUrl) { + loadWebContent("hifi/tablet/TabletWebView.qml", url, injectJavaScriptUrl); } - function loadTabletWebBase() { - loader.load("hifi/tablet/BlocksWebView.qml"); + function loadTabletWebBase(url, injectJavaScriptUrl) { + loadWebContent("hifi/tablet/BlocksWebView.qml", url, injectJavaScriptUrl); } function returnToPreviousApp() { diff --git a/libraries/ui/src/ui/TabletScriptingInterface.cpp b/libraries/ui/src/ui/TabletScriptingInterface.cpp index a261ae45b1..7440d0b5d0 100644 --- a/libraries/ui/src/ui/TabletScriptingInterface.cpp +++ b/libraries/ui/src/ui/TabletScriptingInterface.cpp @@ -679,19 +679,20 @@ void TabletProxy::gotoWebScreen(const QString& url, const QString& injectedJavaS if (root) { if (loadOtherBase) { - QMetaObject::invokeMethod(root, "loadTabletWebBase"); + QMetaObject::invokeMethod(root, "loadTabletWebBase", Q_ARG(const QVariant&, QVariant(url)), Q_ARG(const QVariant&, QVariant(injectedJavaScriptUrl))); } else { - QMetaObject::invokeMethod(root, "loadWebBase"); + QMetaObject::invokeMethod(root, "loadWebBase", Q_ARG(const QVariant&, QVariant(url)), Q_ARG(const QVariant&, QVariant(injectedJavaScriptUrl))); } QMetaObject::invokeMethod(root, "setShown", Q_ARG(const QVariant&, QVariant(true))); if (_toolbarMode && _desktopWindow) { QMetaObject::invokeMethod(root, "setResizable", Q_ARG(const QVariant&, QVariant(false))); } - QMetaObject::invokeMethod(root, "loadWebUrl", Q_ARG(const QVariant&, QVariant(url)), Q_ARG(const QVariant&, QVariant(injectedJavaScriptUrl))); + _state = State::Web; + emit screenChanged(QVariant("Web"), QVariant(url)); + _currentPathLoaded = QVariant(url); + } else { + qWarning() << "Unable to load web content due to missing root"; } - _state = State::Web; - emit screenChanged(QVariant("Web"), QVariant(url)); - _currentPathLoaded = QVariant(url); } TabletButtonProxy* TabletProxy::addButton(const QVariant& properties) { From 4433e79c9c9b70dc6f2a561366b759a23d4e2e43 Mon Sep 17 00:00:00 2001 From: Nissim Hadar Date: Wed, 8 Nov 2017 14:08:37 -0800 Subject: [PATCH 018/148] Seems to work. --- .../render-utils/src/DeferredGlobalLight.slh | 44 ++++++++++++++++--- libraries/render-utils/src/Haze.slf | 2 +- libraries/render-utils/src/Haze.slh | 24 +++++++++- .../render-utils/src/model_translucent.slf | 2 +- 4 files changed, 61 insertions(+), 11 deletions(-) diff --git a/libraries/render-utils/src/DeferredGlobalLight.slh b/libraries/render-utils/src/DeferredGlobalLight.slh index 67a45e6ddf..311012716a 100644 --- a/libraries/render-utils/src/DeferredGlobalLight.slh +++ b/libraries/render-utils/src/DeferredGlobalLight.slh @@ -91,6 +91,7 @@ vec3 albedo, vec3 fresnel, float metallic, float roughness <@endfunc@> +<@include Haze.slh@> <@func declareEvalSkyboxGlobalColor(supportScattering)@> @@ -101,8 +102,6 @@ vec3 albedo, vec3 fresnel, float metallic, float roughness <$declareDeferredCurvature()$> <@endif@> -<@include Haze.slh@> - vec3 evalSkyboxGlobalColor(mat4 invViewMat, float shadowAttenuation, float obscurance, vec3 position, vec3 normal, vec3 albedo, vec3 fresnel, float metallic, float roughness <@if supportScattering@> @@ -138,7 +137,7 @@ vec3 evalSkyboxGlobalColor(mat4 invViewMat, float shadowAttenuation, float obscu // Attenuate the light if haze effect selected if ((hazeParams.hazeMode & HAZE_MODE_IS_KEYLIGHT_ATTENUATED) == HAZE_MODE_IS_KEYLIGHT_ATTENUATED) { - color = computeHazeColorKeyLightAttenuation(color, directionalLight, invViewMat, position); + color = computeHazeColorKeyLightAttenuation(color, directionalLight, position); } return color; @@ -171,9 +170,6 @@ vec3 evalLightmappedColor(mat4 invViewMat, float shadowAttenuation, float obscur } <@endfunc@> - - - <@func declareEvalGlobalLightingAlphaBlended()@> <$declareLightingAmbient(1, 1, 1)$> @@ -191,7 +187,6 @@ vec3 evalGlobalLightingAlphaBlended(mat4 invViewMat, float shadowAttenuation, fl color += ambientDiffuse; color += ambientSpecular / opacity; - // Directional vec3 directionalDiffuse; vec3 directionalSpecular; @@ -202,6 +197,41 @@ vec3 evalGlobalLightingAlphaBlended(mat4 invViewMat, float shadowAttenuation, fl return color; } +vec3 evalGlobalLightingAlphaBlendedWithHaze( + mat4 invViewMat, float shadowAttenuation, float obscurance, vec3 position, vec3 normal, + vec3 albedo, vec3 fresnel, float metallic, vec3 emissive, float roughness, float opacity) +{ + <$prepareGlobalLight()$> + + color += emissive * isEmissiveEnabled(); + + // Ambient + vec3 ambientDiffuse; + vec3 ambientSpecular; + evalLightingAmbient(ambientDiffuse, ambientSpecular, lightAmbient, fragEyeDir, fragNormal, roughness, metallic, fresnel, albedo, obscurance); + color += ambientDiffuse; + color += ambientSpecular / opacity; + + // Directional + vec3 directionalDiffuse; + vec3 directionalSpecular; + evalLightingDirectional(directionalDiffuse, directionalSpecular, lightDirection, lightIrradiance, fragEyeDir, fragNormal, roughness, metallic, fresnel, albedo, shadowAttenuation); + color += directionalDiffuse; + color += directionalSpecular / opacity; + + // Haze + if ((hazeParams.hazeMode & HAZE_MODE_IS_ACTIVE) == HAZE_MODE_IS_ACTIVE) { + vec4 colorV4 = computeHazeColor( + vec4(color, 0.0), // fragment original color + vec4(position, 0.0), // fragment position in eye coordinates + vec4(fragEyeVector, 0.0), // fragment position in world coordinates + invViewMat[3]); // eye position in world coordinates + + color = colorV4.rgb; + } + + return color; +} <@endfunc@> diff --git a/libraries/render-utils/src/Haze.slf b/libraries/render-utils/src/Haze.slf index 18deb9c891..d758756975 100644 --- a/libraries/render-utils/src/Haze.slf +++ b/libraries/render-utils/src/Haze.slf @@ -49,7 +49,7 @@ void main(void) { vec4 fragColor = texture(colorMap, varTexCoord0); vec4 eyeFragPos = unpackPositionFromZeye(varTexCoord0); vec4 worldFragPos = getViewInverse() * eyeFragPos; - vec3 worldEyePos = getViewInverse()[3].xyz; + vec4 worldEyePos = getViewInverse()[3]; outFragColor = computeHazeColor(fragColor, eyeFragPos, worldFragPos, worldEyePos); } diff --git a/libraries/render-utils/src/Haze.slh b/libraries/render-utils/src/Haze.slh index 0633802c84..97284f1c2a 100644 --- a/libraries/render-utils/src/Haze.slh +++ b/libraries/render-utils/src/Haze.slh @@ -40,7 +40,17 @@ layout(std140) uniform hazeBuffer { HazeParams hazeParams; }; -vec3 computeHazeColorKeyLightAttenuation(vec3 color, Light directionalLight, mat4 invViewMat, vec3 worldFragPos) { + +// Input: +// color - fragment original color +// directionalLight - parameters of the keylight +// worldFragPos - fragment position in world coordinates +// Output: +// fragment colour after haze effect +// +// General algorithm taken from http://www.iquilezles.org/www/articles/fog/fog.htm, with permission +// +vec3 computeHazeColorKeyLightAttenuation(vec3 color, Light directionalLight, vec3 worldFragPos) { // Directional light attenuation is simulated by assuming the light source is at a fixed height above the // fragment. This height is where the haze density is reduced by 95% from the haze at the fragment's height // @@ -84,7 +94,17 @@ vec3 computeHazeColorKeyLightAttenuation(vec3 color, Light directionalLight, mat return mix(color, vec3(0.0, 0.0, 0.0), hazeAmount); } -vec4 computeHazeColor(vec4 fragColor, vec4 eyeFragPos, vec4 worldFragPos, vec3 worldEyePos) { +// Input: +// fragColor - fragment original color +// eyeFragPos - fragment position in eye coordinates +// worldFragPos - fragment position in world coordinates +// worldEyePos - eye position in world coordinates +// Output: +// fragment colour after haze effect +// +// General algorithm taken from http://www.iquilezles.org/www/articles/fog/fog.htm, with permission +// +vec4 computeHazeColor(vec4 fragColor, vec4 eyeFragPos, vec4 worldFragPos, vec4 worldEyePos) { // Distance to fragment float distance = length(eyeFragPos.xyz); diff --git a/libraries/render-utils/src/model_translucent.slf b/libraries/render-utils/src/model_translucent.slf index 6cf99a68ef..38f162fdc3 100644 --- a/libraries/render-utils/src/model_translucent.slf +++ b/libraries/render-utils/src/model_translucent.slf @@ -66,7 +66,7 @@ void main(void) { TransformCamera cam = getTransformCamera(); - _fragColor = vec4(evalGlobalLightingAlphaBlended( + _fragColor = vec4(evalGlobalLightingAlphaBlendedWithHaze( cam._viewInverse, 1.0, occlusionTex, From 25df649b44fac06719208228c24657c5444d2d6d Mon Sep 17 00:00:00 2001 From: Brad Davis Date: Wed, 8 Nov 2017 14:55:34 -0800 Subject: [PATCH 019/148] Fix desktop mode script URL injection --- .../resources/qml/hifi/tablet/TabletRoot.qml | 8 +++---- .../resources/qml/hifi/tablet/WindowRoot.qml | 22 ++++++++++--------- 2 files changed, 16 insertions(+), 14 deletions(-) diff --git a/interface/resources/qml/hifi/tablet/TabletRoot.qml b/interface/resources/qml/hifi/tablet/TabletRoot.qml index bc795ce7ed..da544c2114 100644 --- a/interface/resources/qml/hifi/tablet/TabletRoot.qml +++ b/interface/resources/qml/hifi/tablet/TabletRoot.qml @@ -68,8 +68,8 @@ Item { function loadSource(url) { tabletApps.clear(); - loader.load(url) - tabletApps.append({"appUrl": url, "isWebUrl": false, "scriptUrl": "", "appWebUrl": ""}); + tabletApps.append({"appUrl": url, "isWebUrl": false, "scriptUrl": "", "appWebUrl": ""}); + loader.load(url) } function loadQMLOnTop(url) { @@ -84,8 +84,8 @@ Item { function loadWebContent(source, url, injectJavaScriptUrl) { tabletApps.append({"appUrl": source, "isWebUrl": true, "scriptUrl": injectJavaScriptUrl, "appWebUrl": url}); loader.load(source, function() { - loader.item.url = tabletApps.get(currentApp).appWebUrl; - loader.item.scriptUrl = tabletApps.get(currentApp).scriptUrl; + loader.item.scriptURL = injectJavaScriptUrl; + loader.item.url = url; if (loader.item.hasOwnProperty("gotoPreviousApp")) { loader.item.gotoPreviousApp = true; } diff --git a/interface/resources/qml/hifi/tablet/WindowRoot.qml b/interface/resources/qml/hifi/tablet/WindowRoot.qml index baf2fa05c2..0b631326f4 100644 --- a/interface/resources/qml/hifi/tablet/WindowRoot.qml +++ b/interface/resources/qml/hifi/tablet/WindowRoot.qml @@ -62,20 +62,22 @@ Windows.ScrollingWindow { loader.load(url) } - function loadWebBase() { - loader.load("hifi/tablet/TabletWebView.qml"); + function loadWebContent(source, url, injectJavaScriptUrl) { + loader.load(source, function() { + loader.item.url = url + loader.item.scriptURL = injectJavaScriptUrl; + if (loader.item.hasOwnProperty("closeButtonVisible")) { + loader.item.closeButtonVisible = false; + } + }); } - function loadTabletWebBase() { - loader.load("hifi/tablet/BlocksWebView.qml"); + function loadWebBase(url, injectJavaScriptUrl) { + loadWebContent("hifi/tablet/TabletWebView.qml", url, injectJavaScriptUrl); } - function loadWebUrl(url, injectedJavaScriptUrl) { - loader.item.url = url; - loader.item.scriptURL = injectedJavaScriptUrl; - if (loader.item.hasOwnProperty("closeButtonVisible")) { - loader.item.closeButtonVisible = false; - } + function loadTabletWebBase(url, injectJavaScriptUrl) { + loadWebContent("hifi/tablet/BlocksWebView.qml", url, injectJavaScriptUrl); } // used to send a message from qml to interface script. From 3c5fd73ca80d3b8dcdb5c4ff8de4493c88668802 Mon Sep 17 00:00:00 2001 From: Nissim Hadar Date: Wed, 8 Nov 2017 14:56:21 -0800 Subject: [PATCH 020/148] Removed unused argument. --- libraries/render-utils/src/RenderDeferredTask.cpp | 3 +-- libraries/render-utils/src/RenderDeferredTask.h | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/libraries/render-utils/src/RenderDeferredTask.cpp b/libraries/render-utils/src/RenderDeferredTask.cpp index a9ad01902d..c301e71296 100644 --- a/libraries/render-utils/src/RenderDeferredTask.cpp +++ b/libraries/render-utils/src/RenderDeferredTask.cpp @@ -163,7 +163,7 @@ void RenderDeferredTask::build(JobModel& task, const render::Varying& input, ren task.addJob("DrawHazeDeferred", drawHazeInputs); // Render transparent objects forward in LightingBuffer - const auto transparentsInputs = DrawDeferred::Inputs(transparents, lightingModel, hazeModel).asVarying(); + const auto transparentsInputs = DrawDeferred::Inputs(transparents, lightingModel).asVarying(); task.addJob("DrawTransparentDeferred", transparentsInputs, shapePlumber); // LIght Cluster Grid Debuging job @@ -291,7 +291,6 @@ void DrawDeferred::run(const RenderContextPointer& renderContext, const Inputs& const auto& inItems = inputs.get0(); const auto& lightingModel = inputs.get1(); - const auto& hazeModel = inputs.get2(); RenderArgs* args = renderContext->args; diff --git a/libraries/render-utils/src/RenderDeferredTask.h b/libraries/render-utils/src/RenderDeferredTask.h index 9a1e37ea92..1573a6cbb0 100644 --- a/libraries/render-utils/src/RenderDeferredTask.h +++ b/libraries/render-utils/src/RenderDeferredTask.h @@ -15,7 +15,6 @@ #include #include #include "LightingModel.h" -#include "model/Haze.h" class BeginGPURangeTimer { public: @@ -66,7 +65,7 @@ protected: class DrawDeferred { public: - using Inputs = render::VaryingSet3 ; + using Inputs = render::VaryingSet2 ; using Config = DrawConfig; using JobModel = render::Job::ModelI; From af0304fd6b48122f97373f70c5d751f5c6e5c9e6 Mon Sep 17 00:00:00 2001 From: amantley Date: Thu, 9 Nov 2017 10:04:12 -0800 Subject: [PATCH 021/148] preliminary changes for the property fixes --- .../src/RenderableModelEntityItem.cpp | 38 +++++++++++++++++-- .../src/RenderableModelEntityItem.h | 2 + libraries/entities/src/ModelEntityItem.cpp | 7 ++++ libraries/entities/src/ModelEntityItem.h | 1 + 4 files changed, 44 insertions(+), 4 deletions(-) diff --git a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp index 3959bf0bf0..40e5066e2d 100644 --- a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp @@ -979,6 +979,7 @@ void ModelEntityRenderer::animate(const TypedEntityPointer& entity) { return; } + //added by angus //this a spot to work on the avatar npc in my branch QVector jointsData; @@ -989,6 +990,19 @@ void ModelEntityRenderer::animate(const TypedEntityPointer& entity) { return; } + //get entity model anim props + bool isLooping = entity->getAnimationLoop(); + int firstFrame = entity->getAnimationFirstFrame(); + int lastFrame = entity->getAnimationLastFrame(); + bool isHolding = entity->getAnimationHold(); + int updatedFrameCount = frameCount; + + if ((firstFrame >= 0) && (firstFrame < lastFrame) && (lastFrame <= frameCount)) { + //length of animation in now determined by first and last frame + updatedFrameCount = lastFrame - firstFrame; + } + + if (!_lastAnimated) { _lastAnimated = usecTimestampNow(); return; @@ -997,11 +1011,25 @@ void ModelEntityRenderer::animate(const TypedEntityPointer& entity) { auto now = usecTimestampNow(); auto interval = now - _lastAnimated; _lastAnimated = now; - float deltaTime = (float)interval / (float)USECS_PER_SECOND; - _currentFrame += (deltaTime * _renderAnimationProperties.getFPS()); + //we handle the hold animation property here + //if hold don't advance the current frame. + if (!isHolding) { + float deltaTime = (float)interval / (float)USECS_PER_SECOND; + _currentFrame += (deltaTime * _renderAnimationProperties.getFPS()); + } { - int animationCurrentFrame = (int)(glm::floor(_currentFrame)) % frameCount; + //where are we in the currently defined animation segment? + int animationCurrentFrame = (int)(glm::floor(_currentFrame)) % updatedFrameCount; + //this starts us at the offset first frame. + animationCurrentFrame += firstFrame; + + //here we implement the looping animation property + //if we have played through the animation once then we hold on the last frame + if (!isLooping && (_currentFrame > (updatedFrameCount - 1))) { + animationCurrentFrame = updatedFrameCount + firstFrame; + } + if (animationCurrentFrame < 0 || animationCurrentFrame > frameCount) { animationCurrentFrame = 0; } @@ -1314,7 +1342,9 @@ void ModelEntityRenderer::doRenderUpdateSynchronousTyped(const ScenePointer& sce if (newAnimationProperties != _renderAnimationProperties) { withWriteLock([&] { _renderAnimationProperties = newAnimationProperties; - _currentFrame = _renderAnimationProperties.getCurrentFrame(); + //if (entity->getAnimationHold()) { + // _currentFrame = _renderAnimationProperties.getCurrentFrame(); + //} }); } } diff --git a/libraries/entities-renderer/src/RenderableModelEntityItem.h b/libraries/entities-renderer/src/RenderableModelEntityItem.h index 0272bed575..d33976e356 100644 --- a/libraries/entities-renderer/src/RenderableModelEntityItem.h +++ b/libraries/entities-renderer/src/RenderableModelEntityItem.h @@ -185,6 +185,8 @@ private: bool _animating { false }; uint64_t _lastAnimated { 0 }; float _currentFrame { 0 }; + //bool _previousHold{ false }; + float _currentFramePropertyValue{ 0 }; }; diff --git a/libraries/entities/src/ModelEntityItem.cpp b/libraries/entities/src/ModelEntityItem.cpp index 26f063f7cc..ae73fa684a 100644 --- a/libraries/entities/src/ModelEntityItem.cpp +++ b/libraries/entities/src/ModelEntityItem.cpp @@ -538,6 +538,13 @@ void ModelEntityItem::setAnimationLoop(bool loop) { }); } +bool ModelEntityItem::getAnimationLoop() const { + return resultWithReadLock([&] { + return _animationProperties.getLoop(); + }); +} + + void ModelEntityItem::setAnimationHold(bool hold) { withWriteLock([&] { _animationProperties.setHold(hold); diff --git a/libraries/entities/src/ModelEntityItem.h b/libraries/entities/src/ModelEntityItem.h index 2c3ef3aa2d..698197b1a6 100644 --- a/libraries/entities/src/ModelEntityItem.h +++ b/libraries/entities/src/ModelEntityItem.h @@ -90,6 +90,7 @@ public: bool getAnimationAllowTranslation() const { return _animationProperties.getAllowTranslation(); }; void setAnimationLoop(bool loop); + bool getAnimationLoop() const; void setAnimationHold(bool hold); bool getAnimationHold() const; From 7bf1b176d72215077545d7fbac9743b24e26aa76 Mon Sep 17 00:00:00 2001 From: Brad Davis Date: Fri, 10 Nov 2017 12:34:52 -0800 Subject: [PATCH 022/148] Renaming Tablet API to Tablets, supporting dev-mode QML loading from filesystem --- interface/CMakeLists.txt | 8 +- .../qml/LoginDialog/LinkAccountBody.qml | 2 +- .../resources/qml/LoginDialog/SignUpBody.qml | 2 +- .../qml/LoginDialog/UsernameCollisionBody.qml | 2 +- .../resources/qml/controls-uit/Button.qml | 4 +- .../resources/qml/controls-uit/CheckBox.qml | 4 +- .../qml/controls-uit/CheckBoxQQC2.qml | 4 +- .../qml/controls-uit/GlyphButton.qml | 4 +- interface/resources/qml/controls-uit/Key.qml | 4 +- .../qml/controls-uit/RadioButton.qml | 4 +- .../qml/controls/FlickableWebViewCore.qml | 2 +- .../dialogs/TabletConnectionFailureDialog.qml | 2 +- .../qml/dialogs/TabletLoginDialog.qml | 4 +- .../dialogs/preferences/ButtonPreference.qml | 4 +- .../preferences/CheckBoxPreference.qml | 4 +- interface/resources/qml/hifi/Card.qml | 6 +- interface/resources/qml/hifi/audio/MicBar.qml | 4 +- .../qml/hifi/tablet/NewEntityButton.qml | 4 +- .../resources/qml/hifi/tablet/Tablet.qml | 280 ------------------ .../qml/hifi/tablet/TabletAddressDialog.qml | 4 +- .../hifi/tablet/TabletAttachmentsDialog.qml | 2 +- .../qml/hifi/tablet/TabletButton.qml | 5 +- .../resources/qml/hifi/tablet/TabletHome.qml | 159 ++++++++++ .../qml/hifi/tablet/TabletMenuView.qml | 4 +- .../tabletWindows/TabletPreferencesDialog.qml | 4 +- interface/src/Application.cpp | 10 +- interface/src/ui/overlays/Web3DOverlay.cpp | 4 - .../src/model-networking/TextureCache.cpp | 2 - libraries/octree/src/Octree.cpp | 4 - libraries/shared/src/PathUtils.cpp | 25 +- libraries/shared/src/PathUtils.h | 4 + libraries/ui/src/ui/OffscreenQmlSurface.cpp | 17 +- .../ui/src/ui/TabletScriptingInterface.cpp | 12 +- scripts/developer/EZrecord.js | 4 +- scripts/developer/inputRecording.js | 2 +- .../developer/tests/dynamics/dynamicsTests.js | 4 +- scripts/developer/tests/puck-attach.js | 2 +- scripts/developer/tests/sliderTestMain.js | 2 +- .../developer/tests/tabletEventBridgeTest.js | 4 +- scripts/developer/tests/tabletTest.js | 2 +- scripts/developer/utilities/audio/stats.js | 2 +- scripts/developer/utilities/render/luci.js | 2 +- .../render/photobooth/photoboothApp.js | 4 +- scripts/system/audio.js | 2 +- scripts/system/audioMuteOverlay.js | 2 +- scripts/system/audioScope.js | 4 +- scripts/system/bubble.js | 2 +- scripts/system/chat.js | 2 +- scripts/system/commerce/wallet.js | 2 +- scripts/system/controllers/godView.js | 4 +- scripts/system/edit.js | 14 +- scripts/system/fingerPaint.js | 4 +- scripts/system/generalSettings.js | 4 +- scripts/system/goto.js | 4 +- scripts/system/help.js | 4 +- scripts/system/hmd.js | 4 +- scripts/system/libraries/WebTablet.js | 6 +- scripts/system/libraries/entityList.js | 4 +- scripts/system/libraries/gridTool.js | 2 +- scripts/system/libraries/utils.js | 2 +- scripts/system/marketplaces/marketplace.js | 2 +- scripts/system/marketplaces/marketplaces.js | 4 +- scripts/system/menu.js | 2 +- scripts/system/mod.js | 2 +- scripts/system/notifications.js | 4 +- scripts/system/pal.js | 4 +- .../particle_explorer/particleExplorerTool.js | 2 +- scripts/system/snapshot.js | 4 +- scripts/system/tablet-goto.js | 4 +- scripts/system/tablet-ui/tabletUI.js | 6 +- scripts/system/tablet-users.js | 2 +- scripts/tutorials/createFloatingLanternBox.js | 2 +- scripts/tutorials/createTetherballStick.js | 2 +- .../entity_scripts/floatingLantern.js | 2 +- .../entity_scripts/floatingLanternBox.js | 2 +- .../entity_scripts/tetherballStick.js | 2 +- tests/shared/src/PathUtilsTests.cpp | 28 ++ tests/shared/src/PathUtilsTests.h | 20 ++ .../marketplace/blocks/blocksApp.js | 2 +- .../camera-move/app-camera-move.js | 4 +- .../marketplace/clap/clapApp.js | 2 +- .../app-doppleganger-attachments.js | 2 +- .../dist/app-doppleganger-marketplace.js | 2 +- .../doppleganger-mirror/app-doppleganger.js | 2 +- .../marketplace/emoji-tablet/emojiTablet.js | 2 +- .../marketplace/laser/laserPointerApp.js | 2 +- .../marketplace/record/record.js | 4 +- .../marketplace/shapes/shapes.js | 2 +- .../skyboxChanger/skyboxchanger.js | 2 +- .../spectator-camera/spectatorCamera.js | 4 +- .../tablet-raiseHand/tablet-raiseHand.js | 2 +- 91 files changed, 388 insertions(+), 436 deletions(-) delete mode 100644 interface/resources/qml/hifi/tablet/Tablet.qml create mode 100644 interface/resources/qml/hifi/tablet/TabletHome.qml create mode 100644 tests/shared/src/PathUtilsTests.cpp create mode 100644 tests/shared/src/PathUtilsTests.h diff --git a/interface/CMakeLists.txt b/interface/CMakeLists.txt index 4c1b8d8d92..b3400c8dd0 100644 --- a/interface/CMakeLists.txt +++ b/interface/CMakeLists.txt @@ -12,8 +12,10 @@ function(JOIN VALUES GLUE OUTPUT) endfunction() -set(INTERFACE_QML_QRC ${CMAKE_CURRENT_BINARY_DIR}/qml.qrc) -generate_qrc(OUTPUT ${INTERFACE_QML_QRC} PATH ${CMAKE_CURRENT_SOURCE_DIR}/resources GLOBS *.qml *.qss *.js *.html *.ttf *.gif *.svg *.png *.jpg) +if (NOT DEV_BUILD) + set(INTERFACE_QML_QRC ${CMAKE_CURRENT_BINARY_DIR}/qml.qrc) + generate_qrc(OUTPUT ${INTERFACE_QML_QRC} PATH ${CMAKE_CURRENT_SOURCE_DIR}/resources GLOBS *.qml *.qss *.js *.html *.ttf *.gif *.svg *.png *.jpg) +endif() # set a default root dir for each of our optional externals if it was not passed set(OPTIONAL_EXTERNALS "LeapMotion") @@ -80,7 +82,9 @@ qt5_wrap_ui(QT_UI_HEADERS "${QT_UI_FILES}") # add them to the interface source files set(INTERFACE_SRCS ${INTERFACE_SRCS} "${QT_UI_HEADERS}" "${QT_RESOURCES}") +if (NOT DEV_BUILD) list(APPEND INTERFACE_SRCS ${INTERFACE_QML_QRC}) +endif() if (UNIX) install( diff --git a/interface/resources/qml/LoginDialog/LinkAccountBody.qml b/interface/resources/qml/LoginDialog/LinkAccountBody.qml index 300bcd46f0..552291c186 100644 --- a/interface/resources/qml/LoginDialog/LinkAccountBody.qml +++ b/interface/resources/qml/LoginDialog/LinkAccountBody.qml @@ -248,7 +248,7 @@ Item { //dont rise local keyboard keyboardEnabled = !root.isTablet && HMD.active; - //but rise Tablet's one instead for Tablet interface + //but rise Tablet's one instead for Tablets interface if (root.isTablet) { root.keyboardEnabled = HMD.active; root.keyboardRaised = Qt.binding( function() { return keyboardRaised; }) diff --git a/interface/resources/qml/LoginDialog/SignUpBody.qml b/interface/resources/qml/LoginDialog/SignUpBody.qml index 9d55998b40..e521e16a60 100644 --- a/interface/resources/qml/LoginDialog/SignUpBody.qml +++ b/interface/resources/qml/LoginDialog/SignUpBody.qml @@ -221,7 +221,7 @@ Item { root.iconText = "<" //dont rise local keyboard keyboardEnabled = !root.isTablet && HMD.active; - //but rise Tablet's one instead for Tablet interface + //but rise Tablet's one instead for Tablets interface if (root.isTablet) { root.keyboardEnabled = HMD.active; root.keyboardRaised = Qt.binding( function() { return keyboardRaised; }) diff --git a/interface/resources/qml/LoginDialog/UsernameCollisionBody.qml b/interface/resources/qml/LoginDialog/UsernameCollisionBody.qml index 5c212578b8..185cbd9d47 100644 --- a/interface/resources/qml/LoginDialog/UsernameCollisionBody.qml +++ b/interface/resources/qml/LoginDialog/UsernameCollisionBody.qml @@ -131,7 +131,7 @@ Item { root.iconText = "<" //dont rise local keyboard keyboardEnabled = !root.isTablet && HMD.active; - //but rise Tablet's one instead for Tablet interface + //but rise Tablet's one instead for Tablets interface if (root.isTablet) { root.keyboardEnabled = HMD.active; root.keyboardRaised = Qt.binding( function() { return keyboardRaised; }) diff --git a/interface/resources/qml/controls-uit/Button.qml b/interface/resources/qml/controls-uit/Button.qml index c068fdcfaf..a305bea8dc 100644 --- a/interface/resources/qml/controls-uit/Button.qml +++ b/interface/resources/qml/controls-uit/Button.qml @@ -29,12 +29,12 @@ Original.Button { onHoveredChanged: { if (hovered) { - tabletInterface.playSound(TabletEnums.ButtonHover); + Tablets.playSound(TabletEnums.ButtonHover); } } onClicked: { - tabletInterface.playSound(TabletEnums.ButtonClick); + Tablets.playSound(TabletEnums.ButtonClick); } style: ButtonStyle { diff --git a/interface/resources/qml/controls-uit/CheckBox.qml b/interface/resources/qml/controls-uit/CheckBox.qml index 22b25671c3..37bc936aa1 100644 --- a/interface/resources/qml/controls-uit/CheckBox.qml +++ b/interface/resources/qml/controls-uit/CheckBox.qml @@ -31,12 +31,12 @@ Original.CheckBox { activeFocusOnPress: true onClicked: { - tabletInterface.playSound(TabletEnums.ButtonClick); + Tablets.playSound(TabletEnums.ButtonClick); } // TODO: doesnt works for QQC1. check with QQC2 // onHovered: { -// tabletInterface.playSound(TabletEnums.ButtonHover); +// Tablets.playSound(TabletEnums.ButtonHover); // } style: CheckBoxStyle { diff --git a/interface/resources/qml/controls-uit/CheckBoxQQC2.qml b/interface/resources/qml/controls-uit/CheckBoxQQC2.qml index 32d69cf339..404d83ebd2 100644 --- a/interface/resources/qml/controls-uit/CheckBoxQQC2.qml +++ b/interface/resources/qml/controls-uit/CheckBoxQQC2.qml @@ -36,12 +36,12 @@ CheckBox { hoverEnabled: true onClicked: { - tabletInterface.playSound(TabletEnums.ButtonClick); + Tablets.playSound(TabletEnums.ButtonClick); } onHoveredChanged: { if (hovered) { - tabletInterface.playSound(TabletEnums.ButtonHover); + Tablets.playSound(TabletEnums.ButtonHover); } } diff --git a/interface/resources/qml/controls-uit/GlyphButton.qml b/interface/resources/qml/controls-uit/GlyphButton.qml index bc7bc636fe..d225c8e1d1 100644 --- a/interface/resources/qml/controls-uit/GlyphButton.qml +++ b/interface/resources/qml/controls-uit/GlyphButton.qml @@ -27,12 +27,12 @@ Original.Button { onHoveredChanged: { if (hovered) { - tabletInterface.playSound(TabletEnums.ButtonHover); + Tablets.playSound(TabletEnums.ButtonHover); } } onClicked: { - tabletInterface.playSound(TabletEnums.ButtonClick); + Tablets.playSound(TabletEnums.ButtonClick); } style: ButtonStyle { diff --git a/interface/resources/qml/controls-uit/Key.qml b/interface/resources/qml/controls-uit/Key.qml index e54250c872..3ec579a4eb 100644 --- a/interface/resources/qml/controls-uit/Key.qml +++ b/interface/resources/qml/controls-uit/Key.qml @@ -35,13 +35,13 @@ Item { onContainsMouseChanged: { if (containsMouse) { - tabletInterface.playSound(TabletEnums.ButtonHover); + Tablets.playSound(TabletEnums.ButtonHover); } } onClicked: { mouse.accepted = true; - tabletInterface.playSound(TabletEnums.ButtonClick); + Tablets.playSound(TabletEnums.ButtonClick); webEntity.synthesizeKeyPress(glyph); webEntity.synthesizeKeyPress(glyph, mirrorText); diff --git a/interface/resources/qml/controls-uit/RadioButton.qml b/interface/resources/qml/controls-uit/RadioButton.qml index 65d36d2dcb..da4e944f35 100644 --- a/interface/resources/qml/controls-uit/RadioButton.qml +++ b/interface/resources/qml/controls-uit/RadioButton.qml @@ -30,12 +30,12 @@ Original.RadioButton { readonly property int checkRadius: 2 onClicked: { - tabletInterface.playSound(TabletEnums.ButtonClick); + Tablets.playSound(TabletEnums.ButtonClick); } // TODO: doesnt works for QQC1. check with QQC2 // onHovered: { -// tabletInterface.playSound(TabletEnums.ButtonHover); +// Tablets.playSound(TabletEnums.ButtonHover); // } style: RadioButtonStyle { diff --git a/interface/resources/qml/controls/FlickableWebViewCore.qml b/interface/resources/qml/controls/FlickableWebViewCore.qml index cbc4d19334..9e1751ee51 100644 --- a/interface/resources/qml/controls/FlickableWebViewCore.qml +++ b/interface/resources/qml/controls/FlickableWebViewCore.qml @@ -41,7 +41,7 @@ Item { } if (WebEngineView.LoadFailedStatus === loadRequest.status) { - console.log(" Tablet WebEngineView failed to load url: " + loadRequest.url.toString()); + console.log("Tablet WebEngineView failed to load url: " + loadRequest.url.toString()); } if (WebEngineView.LoadSucceededStatus === loadRequest.status) { diff --git a/interface/resources/qml/dialogs/TabletConnectionFailureDialog.qml b/interface/resources/qml/dialogs/TabletConnectionFailureDialog.qml index 6d2ff36550..750ed0edd4 100644 --- a/interface/resources/qml/dialogs/TabletConnectionFailureDialog.qml +++ b/interface/resources/qml/dialogs/TabletConnectionFailureDialog.qml @@ -24,7 +24,7 @@ Item { }); object.selected.connect(function(button) { if (button === OriginalDialogs.StandardButton.Ok) { - var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); + var tablet = Tablets.getTablet("com.highfidelity.interface.tablet.system"); tablet.gotoHomeScreen() } }); diff --git a/interface/resources/qml/dialogs/TabletLoginDialog.qml b/interface/resources/qml/dialogs/TabletLoginDialog.qml index 269788a808..5f1e9cd3bf 100644 --- a/interface/resources/qml/dialogs/TabletLoginDialog.qml +++ b/interface/resources/qml/dialogs/TabletLoginDialog.qml @@ -89,10 +89,10 @@ TabletModalWindow { //bodyLoader.active = false } if (gotoPreviousApp) { - var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); + var tablet = Tablets.getTablet("com.highfidelity.interface.tablet.system"); tablet.returnToPreviousApp(); } else { - Tablet.getTablet("com.highfidelity.interface.tablet.system").gotoHomeScreen(); + Tablets.getTablet("com.highfidelity.interface.tablet.system").gotoHomeScreen(); } } diff --git a/interface/resources/qml/dialogs/preferences/ButtonPreference.qml b/interface/resources/qml/dialogs/preferences/ButtonPreference.qml index 3a5c850031..bae581a47f 100644 --- a/interface/resources/qml/dialogs/preferences/ButtonPreference.qml +++ b/interface/resources/qml/dialogs/preferences/ButtonPreference.qml @@ -25,13 +25,13 @@ Preference { id: button onHoveredChanged: { if (hovered) { - tabletInterface.playSound(TabletEnums.ButtonHover); + Tablets.playSound(TabletEnums.ButtonHover); } } onClicked: { preference.trigger(); - tabletInterface.playSound(TabletEnums.ButtonClick); + Tablets.playSound(TabletEnums.ButtonClick); } width: 180 anchors.bottom: parent.bottom diff --git a/interface/resources/qml/dialogs/preferences/CheckBoxPreference.qml b/interface/resources/qml/dialogs/preferences/CheckBoxPreference.qml index 8904896ab7..81884d9a72 100644 --- a/interface/resources/qml/dialogs/preferences/CheckBoxPreference.qml +++ b/interface/resources/qml/dialogs/preferences/CheckBoxPreference.qml @@ -41,12 +41,12 @@ Preference { id: checkBox onHoveredChanged: { if (hovered) { - tabletInterface.playSound(TabletEnums.ButtonHover); + Tablets.playSound(TabletEnums.ButtonHover); } } onClicked: { - tabletInterface.playSound(TabletEnums.ButtonClick); + Tablets.playSound(TabletEnums.ButtonClick); } anchors { diff --git a/interface/resources/qml/hifi/Card.qml b/interface/resources/qml/hifi/Card.qml index fc7b8c6200..8d69afab46 100644 --- a/interface/resources/qml/hifi/Card.qml +++ b/interface/resources/qml/hifi/Card.qml @@ -246,12 +246,12 @@ Item { anchors.fill: parent; acceptedButtons: Qt.LeftButton; onClicked: { - tabletInterface.playSound(TabletEnums.ButtonClick); + Tablets.playSound(TabletEnums.ButtonClick); goFunction("hifi://" + hifiUrl); } hoverEnabled: true; onEntered: { - tabletInterface.playSound(TabletEnums.ButtonHover); + Tablets.playSound(TabletEnums.ButtonHover); hoverThunk(); } onExited: unhoverThunk(); @@ -269,7 +269,7 @@ Item { } } function go() { - tabletInterface.playSound(TabletEnums.ButtonClick); + Tablets.playSound(TabletEnums.ButtonClick); goFunction(drillDownToPlace ? ("/places/" + placeName) : ("/user_stories/" + storyId)); } MouseArea { diff --git a/interface/resources/qml/hifi/audio/MicBar.qml b/interface/resources/qml/hifi/audio/MicBar.qml index b6699d6ceb..9ef8bf3698 100644 --- a/interface/resources/qml/hifi/audio/MicBar.qml +++ b/interface/resources/qml/hifi/audio/MicBar.qml @@ -61,12 +61,12 @@ Rectangle { scrollGestureEnabled: false; onClicked: { Audio.muted = !Audio.muted; - tabletInterface.playSound(TabletEnums.ButtonClick); + Tablets.playSound(TabletEnums.ButtonClick); } drag.target: dragTarget; onContainsMouseChanged: { if (containsMouse) { - tabletInterface.playSound(TabletEnums.ButtonHover); + Tablets.playSound(TabletEnums.ButtonHover); } } } diff --git a/interface/resources/qml/hifi/tablet/NewEntityButton.qml b/interface/resources/qml/hifi/tablet/NewEntityButton.qml index 7f838717df..49fdb4368f 100644 --- a/interface/resources/qml/hifi/tablet/NewEntityButton.qml +++ b/interface/resources/qml/hifi/tablet/NewEntityButton.qml @@ -123,11 +123,11 @@ Item { hoverEnabled: true enabled: true onClicked: { - tabletInterface.playSound(TabletEnums.ButtonClick); + Tablets.playSound(TabletEnums.ButtonClick); newEntityButton.clicked(); } onEntered: { - tabletInterface.playSound(TabletEnums.ButtonHover); + Tablets.playSound(TabletEnums.ButtonHover); newEntityButton.state = "hover state"; } onExited: { diff --git a/interface/resources/qml/hifi/tablet/Tablet.qml b/interface/resources/qml/hifi/tablet/Tablet.qml deleted file mode 100644 index b21bf9c506..0000000000 --- a/interface/resources/qml/hifi/tablet/Tablet.qml +++ /dev/null @@ -1,280 +0,0 @@ -import QtQuick 2.5 -import QtGraphicalEffects 1.0 -import QtQuick.Layouts 1.3 - -import "." -import "../../styles-uit" -import "../audio" as HifiAudio - -Item { - id: tablet - objectName: "tablet" - property int rowIndex: 0 - property int columnIndex: 0 - property int count: (flowMain.children.length - 1) - - Component { - id: buttonComponent - TabletButton { } - } - - Component.onCompleted: { - tablet.populateButtons(); - } - - function createClickedHandler(proxy) { - return function() { proxy.clicked(); } - } - - function populateButtons() { - var tabletProxy = Tablet.getTablet("com.highfidelity.interface.tablet.system"); - var buttons = tabletProxy.getButtons(); - for (var i = 0; i < buttons.length; i++) { - var proxy = buttons[i]; - var button = tablet.addButtonProxy(proxy.getProperties()); - button.clicked.connect(createClickedHandler(proxy)); - proxy.setQmlButton(button); - } - sortButtons(); - } - - // used to look up a button by its uuid - function findButtonIndex(uuid) { - if (!uuid) { - return -1; - } - - for (var i in flowMain.children) { - var child = flowMain.children[i]; - if (child.uuid === uuid) { - return i; - } - } - return -1; - } - - function sortButtons() { - var children = []; - for (var i = 0; i < flowMain.children.length; i++) { - children[i] = flowMain.children[i]; - } - - children.sort(function (a, b) { - if (a.sortOrder === b.sortOrder) { - // subsort by stableOrder, because JS sort is not stable in qml. - return a.stableOrder - b.stableOrder; - } else { - return a.sortOrder - b.sortOrder; - } - }); - - flowMain.children = children; - } - - // called by C++ code when a button should be added to the tablet - function addButtonProxy(properties) { - var button = buttonComponent.createObject(flowMain); - // copy all properites to button - var keys = Object.keys(properties).forEach(function (key) { - button[key] = properties[key]; - }); - - // pass a reference to the tabletRoot object to the button. - if (tabletRoot) { - button.tabletRoot = tabletRoot; - } else { - button.tabletRoot = parent.parent; - } - - return button; - } - - // called by C++ code when a button should be removed from the tablet - function removeButtonProxy(properties) { - var index = findButtonIndex(properties.uuid); - if (index < 0) { - console.log("Warning: Tablet.qml could not find button with uuid = " + properties.uuid); - } else { - flowMain.children[index].destroy(); - } - } - - Rectangle { - id: bgTopBar - height: 90 - - anchors { - top: parent.top - left: parent.left - right: parent.right - } - - gradient: Gradient { - GradientStop { - position: 0 - color: "#2b2b2b" - } - - GradientStop { - position: 1 - color: "#1e1e1e" - } - } - - HifiAudio.MicBar { - anchors { - left: parent.left - leftMargin: 30 - verticalCenter: parent.verticalCenter - } - } - - Item { - width: 150 - height: 50 - anchors.right: parent.right - anchors.rightMargin: 30 - anchors.verticalCenter: parent.verticalCenter - - ColumnLayout { - anchors.fill: parent - - RalewaySemiBold { - text: Account.loggedIn ? qsTr("Log out") : qsTr("Log in") - horizontalAlignment: Text.AlignRight - anchors.right: parent.right - font.pixelSize: 20 - color: "#afafaf" - } - - RalewaySemiBold { - visible: Account.loggedIn - height: Account.loggedIn ? parent.height/2 - parent.spacing/2 : 0 - text: Account.loggedIn ? "[" + tabletRoot.usernameShort + "]" : "" - horizontalAlignment: Text.AlignRight - anchors.right: parent.right - font.pixelSize: 20 - color: "#afafaf" - } - } - - MouseArea { - anchors.fill: parent - onClicked: { - if (!Account.loggedIn) { - DialogsManager.showLoginDialog() - } else { - Account.logOut() - } - } - } - } - } - - Rectangle { - id: bgMain - gradient: Gradient { - GradientStop { - position: 0 - color: "#2b2b2b" - } - - GradientStop { - position: 1 - color: "#0f212e" - } - } - anchors.bottom: parent.bottom - anchors.bottomMargin: 0 - anchors.right: parent.right - anchors.rightMargin: 0 - anchors.left: parent.left - anchors.leftMargin: 0 - anchors.top: bgTopBar.bottom - anchors.topMargin: 0 - - Flickable { - id: flickable - width: parent.width - height: parent.height - contentWidth: parent.width - contentHeight: flowMain.childrenRect.height + flowMain.anchors.topMargin + flowMain.anchors.bottomMargin + flowMain.spacing - clip: true - Flow { - id: flowMain - spacing: 16 - anchors.right: parent.right - anchors.rightMargin: 30 - anchors.left: parent.left - anchors.leftMargin: 30 - anchors.bottom: parent.bottom - anchors.bottomMargin: 30 - anchors.top: parent.top - anchors.topMargin: 30 - } - } - } - - function setCurrentItemState(state) { - var index = rowIndex + columnIndex; - - if (index >= 0 && index <= count ) { - flowMain.children[index].state = state; - } - } - - function nextItem() { - setCurrentItemState("base state"); - var nextColumnIndex = (columnIndex + 3 + 1) % 3; - var nextIndex = rowIndex + nextColumnIndex; - if(nextIndex <= count) { - columnIndex = nextColumnIndex; - }; - setCurrentItemState("hover state"); - } - - function previousItem() { - setCurrentItemState("base state"); - var prevIndex = (columnIndex + 3 - 1) % 3; - if((rowIndex + prevIndex) <= count){ - columnIndex = prevIndex; - } - setCurrentItemState("hover state"); - } - - function upItem() { - setCurrentItemState("base state"); - rowIndex = rowIndex - 3; - if (rowIndex < 0 ) { - rowIndex = (count - (count % 3)); - var index = rowIndex + columnIndex; - if(index > count) { - rowIndex = rowIndex - 3; - } - } - setCurrentItemState("hover state"); - } - - function downItem() { - setCurrentItemState("base state"); - rowIndex = rowIndex + 3; - var index = rowIndex + columnIndex; - if (index > count ) { - rowIndex = 0; - } - setCurrentItemState("hover state"); - } - - function selectItem() { - flowMain.children[rowIndex + columnIndex].clicked(); - if (tabletRoot) { - tabletRoot.playButtonClickSound(); - } - } - - Keys.onRightPressed: nextItem(); - Keys.onLeftPressed: previousItem(); - Keys.onDownPressed: downItem(); - Keys.onUpPressed: upItem(); - Keys.onReturnPressed: selectItem(); -} diff --git a/interface/resources/qml/hifi/tablet/TabletAddressDialog.qml b/interface/resources/qml/hifi/tablet/TabletAddressDialog.qml index 4d9a83817a..3242de89b1 100644 --- a/interface/resources/qml/hifi/tablet/TabletAddressDialog.qml +++ b/interface/resources/qml/hifi/tablet/TabletAddressDialog.qml @@ -72,7 +72,7 @@ StackView { addressLine.focus = !HMD.active; root.parentChanged.connect(center); center(); - tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); + tablet = Tablets.getTablet("com.highfidelity.interface.tablet.system"); } Component.onDestruction: { root.parentChanged.disconnect(center); @@ -149,7 +149,7 @@ StackView { onClicked: { addressBarDialog.loadHome(); tabletRoot.shown = false; - tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); + tablet = Tablets.getTablet("com.highfidelity.interface.tablet.system"); tablet.gotoHomeScreen(); } anchors { diff --git a/interface/resources/qml/hifi/tablet/TabletAttachmentsDialog.qml b/interface/resources/qml/hifi/tablet/TabletAttachmentsDialog.qml index 19548365aa..14d7d09dba 100644 --- a/interface/resources/qml/hifi/tablet/TabletAttachmentsDialog.qml +++ b/interface/resources/qml/hifi/tablet/TabletAttachmentsDialog.qml @@ -37,7 +37,7 @@ Item { } function closeDialog() { - Tablet.getTablet("com.highfidelity.interface.tablet.system").gotoHomeScreen(); + Tablets.getTablet("com.highfidelity.interface.tablet.system").gotoHomeScreen(); } anchors.topMargin: hifi.dimensions.tabletMenuHeader // Space for header. diff --git a/interface/resources/qml/hifi/tablet/TabletButton.qml b/interface/resources/qml/hifi/tablet/TabletButton.qml index 169c7acec1..3a66738b82 100644 --- a/interface/resources/qml/hifi/tablet/TabletButton.qml +++ b/interface/resources/qml/hifi/tablet/TabletButton.qml @@ -121,7 +121,6 @@ Item { enabled: true preventStealing: true onClicked: { - console.log("Tablet Button Clicked!"); if (tabletButton.inDebugMode) { if (tabletButton.isActive) { tabletButton.isActive = false; @@ -131,12 +130,12 @@ Item { } tabletButton.clicked(); if (tabletRoot) { - tabletInterface.playSound(TabletEnums.ButtonClick); + Tablets.playSound(TabletEnums.ButtonClick); } } onEntered: { tabletButton.isEntered = true; - tabletInterface.playSound(TabletEnums.ButtonHover); + Tablets.playSound(TabletEnums.ButtonHover); if (tabletButton.isActive) { tabletButton.state = "hover active state"; diff --git a/interface/resources/qml/hifi/tablet/TabletHome.qml b/interface/resources/qml/hifi/tablet/TabletHome.qml new file mode 100644 index 0000000000..0b30496c44 --- /dev/null +++ b/interface/resources/qml/hifi/tablet/TabletHome.qml @@ -0,0 +1,159 @@ +import QtQuick 2.5 +import QtGraphicalEffects 1.0 +import QtQuick.Layouts 1.3 + +import "." +import "../../styles-uit" +import "../audio" as HifiAudio + +Item { + id: tablet + objectName: "tablet" + property var tabletProxy: Tablets.getTablet("com.highfidelity.interface.tablet.system"); + + Rectangle { + id: bgTopBar + height: 90 + + anchors { + top: parent.top + left: parent.left + right: parent.right + } + + gradient: Gradient { + GradientStop { + position: 0 + color: "#2b2b2b" + } + + GradientStop { + position: 1 + color: "#1e1e1e" + } + } + + HifiAudio.MicBar { + anchors { + left: parent.left + leftMargin: 30 + verticalCenter: parent.verticalCenter + } + } + + Item { + width: 150 + height: 50 + anchors.right: parent.right + anchors.rightMargin: 30 + anchors.verticalCenter: parent.verticalCenter + + ColumnLayout { + anchors.fill: parent + + RalewaySemiBold { + text: Account.loggedIn ? qsTr("Log out") : qsTr("Log in") + horizontalAlignment: Text.AlignRight + anchors.right: parent.right + font.pixelSize: 20 + color: "#afafaf" + } + + RalewaySemiBold { + visible: Account.loggedIn + height: Account.loggedIn ? parent.height/2 - parent.spacing/2 : 0 + text: Account.loggedIn ? "[" + tabletRoot.usernameShort + "]" : "" + horizontalAlignment: Text.AlignRight + anchors.right: parent.right + font.pixelSize: 20 + color: "#afafaf" + } + } + + MouseArea { + anchors.fill: parent + onClicked: { + if (!Account.loggedIn) { + DialogsManager.showLoginDialog() + } else { + Account.logOut() + } + } + } + } + } + + Rectangle { + id: bgMain + clip: true + gradient: Gradient { + GradientStop { + position: 0 + color: "#2b2b2b" + } + + GradientStop { + position: 1 + color: "#0f212e" + } + } + anchors.bottom: parent.bottom + anchors.right: parent.right + anchors.left: parent.left + anchors.top: bgTopBar.bottom + + GridView { + id: flickable + anchors.top: parent.top + anchors.topMargin: 15 + anchors.bottom: parent.bottom + anchors.horizontalCenter: parent.horizontalCenter + width: cellWidth * 3 + cellHeight: 145 + cellWidth: 145 + model: tabletProxy.buttons + delegate: Item { + width: flickable.cellWidth + height: flickable.cellHeight + property var proxy: modelData + + TabletButton { + id: tabletButton + anchors.centerIn: parent + onClicked: modelData.clicked() + state: wrapper.GridView.isCurrentItem ? "hover state" : "base state" + } + + Connections { + target: modelData; + onPropertiesChanged: { + updateProperties(); + } + } + + Component.onCompleted: updateProperties() + + function updateProperties() { + var keys = Object.keys(modelData.properties).forEach(function (key) { + if (tabletButton[key] !== modelData.properties[key]) { + tabletButton[key] = modelData.properties[key]; + } + }); + } + } + } + } + + Keys.onRightPressed: flickable.moveCurrentIndexRight(); + Keys.onLeftPressed: flickable.moveCurrentIndexLeft(); + Keys.onDownPressed: flickable.moveCurrentIndexDown(); + Keys.onUpPressed: flickable.moveCurrentIndexUp(); + Keys.onReturnPressed: { + if (flickable.currentItem) { + flickable.currentItem.proxy.clicked(); + if (tabletRoot) { + tabletRoot.playButtonClickSound(); + } + } + } +} diff --git a/interface/resources/qml/hifi/tablet/TabletMenuView.qml b/interface/resources/qml/hifi/tablet/TabletMenuView.qml index 4a4a6b7f87..e069ce8cb1 100644 --- a/interface/resources/qml/hifi/tablet/TabletMenuView.qml +++ b/interface/resources/qml/hifi/tablet/TabletMenuView.qml @@ -77,12 +77,12 @@ FocusScope { anchors.fill: parent hoverEnabled: true onEntered: { - tabletInterface.playSound(TabletEnums.ButtonHover); + Tablets.playSound(TabletEnums.ButtonHover); listView.currentIndex = index } onClicked: { - tabletInterface.playSound(TabletEnums.ButtonClick); + Tablets.playSound(TabletEnums.ButtonClick); root.selected(item); } } diff --git a/interface/resources/qml/hifi/tablet/tabletWindows/TabletPreferencesDialog.qml b/interface/resources/qml/hifi/tablet/tabletWindows/TabletPreferencesDialog.qml index fcb3e9ff92..0665b9971e 100644 --- a/interface/resources/qml/hifi/tablet/tabletWindows/TabletPreferencesDialog.qml +++ b/interface/resources/qml/hifi/tablet/tabletWindows/TabletPreferencesDialog.qml @@ -56,7 +56,7 @@ Item { } function closeDialog() { - var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); + var tablet = Tablets.getTablet("com.highfidelity.interface.tablet.system"); if (gotoPreviousApp) { tablet.returnToPreviousApp(); @@ -206,7 +206,7 @@ Item { } Component.onCompleted: { - tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); + tablet = Tablets.getTablet("com.highfidelity.interface.tablet.system"); keyboardEnabled = HMD.active; } diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 929184fc14..30d93482f8 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -2214,12 +2214,12 @@ extern void setupPreferences(); void Application::initializeUi() { // Make sure all QML surfaces share the main thread GL context OffscreenQmlSurface::setSharedContext(_offscreenContext->getContext()); - OffscreenQmlSurface::addWhitelistContextHandler(QUrl{ "qrc:///qml/OverlayWindowTest.qml" }, + OffscreenQmlSurface::addWhitelistContextHandler(QUrl{ "OverlayWindowTest.qml" }, [](QQmlContext* context) { qDebug() << "Whitelist OverlayWindow worked"; context->setContextProperty("OverlayWindowTestString", "TestWorked"); }); - OffscreenQmlSurface::addWhitelistContextHandler(QUrl{ "qrc:///qml/hifi/audio/Audio.qml" }, + OffscreenQmlSurface::addWhitelistContextHandler(QUrl{ "hifi/audio/Audio.qml" }, [](QQmlContext* context) { qDebug() << "QQQ" << __FUNCTION__ << "Whitelist Audio worked"; }); @@ -2310,9 +2310,6 @@ void Application::initializeUi() { surfaceContext->setContextProperty("InputConfiguration", DependencyManager::get().data()); surfaceContext->setContextProperty("Account", AccountScriptingInterface::getInstance()); - surfaceContext->setContextProperty("Tablet", DependencyManager::get().data()); - // Tablet inteference with Tablet.qml. Need to avoid this in QML space - surfaceContext->setContextProperty("tabletInterface", DependencyManager::get().data()); surfaceContext->setContextProperty("DialogsManager", _dialogsManagerScriptingInterface); surfaceContext->setContextProperty("GlobalServices", GlobalServicesScriptingInterface::getInstance()); surfaceContext->setContextProperty("FaceTracker", DependencyManager::get().data()); @@ -5807,7 +5804,8 @@ void Application::registerScriptEngineWithApplicationServices(ScriptEnginePointe qScriptRegisterMetaType(scriptEngine.data(), wrapperToScriptValue, wrapperFromScriptValue); qScriptRegisterMetaType(scriptEngine.data(), wrapperToScriptValue, wrapperFromScriptValue); - // Tablet inteference with Tablet.qml. Need to avoid this in QML space + scriptEngine->registerGlobalObject("Tablets", DependencyManager::get().data()); + // FIXME remove these deprecated names for the tablet scripting interface scriptEngine->registerGlobalObject("tabletInterface", DependencyManager::get().data()); scriptEngine->registerGlobalObject("Tablet", DependencyManager::get().data()); diff --git a/interface/src/ui/overlays/Web3DOverlay.cpp b/interface/src/ui/overlays/Web3DOverlay.cpp index d418a79fbf..07a953c219 100644 --- a/interface/src/ui/overlays/Web3DOverlay.cpp +++ b/interface/src/ui/overlays/Web3DOverlay.cpp @@ -209,7 +209,6 @@ void Web3DOverlay::setupQmlSurface() { _webSurface->getSurfaceContext()->setContextProperty("fileDialogHelper", new FileDialogHelper()); _webSurface->getSurfaceContext()->setContextProperty("MyAvatar", DependencyManager::get()->getMyAvatar().get()); _webSurface->getSurfaceContext()->setContextProperty("ScriptDiscoveryService", DependencyManager::get().data()); - _webSurface->getSurfaceContext()->setContextProperty("Tablet", DependencyManager::get().data()); _webSurface->getSurfaceContext()->setContextProperty("Assets", DependencyManager::get().data()); _webSurface->getSurfaceContext()->setContextProperty("LODManager", DependencyManager::get().data()); _webSurface->getSurfaceContext()->setContextProperty("OctreeStats", DependencyManager::get().data()); @@ -228,9 +227,6 @@ void Web3DOverlay::setupQmlSurface() { _webSurface->getSurfaceContext()->setContextProperty("pathToFonts", "../../"); - // Tablet inteference with Tablet.qml. Need to avoid this in QML space - _webSurface->getSurfaceContext()->setContextProperty("tabletInterface", DependencyManager::get().data()); - tabletScriptingInterface->setQmlTabletRoot("com.highfidelity.interface.tablet.system", _webSurface.data()); // mark the TabletProxy object as cpp ownership. QObject* tablet = tabletScriptingInterface->getTablet("com.highfidelity.interface.tablet.system"); diff --git a/libraries/model-networking/src/model-networking/TextureCache.cpp b/libraries/model-networking/src/model-networking/TextureCache.cpp index 4184351c2d..092afe1a90 100644 --- a/libraries/model-networking/src/model-networking/TextureCache.cpp +++ b/libraries/model-networking/src/model-networking/TextureCache.cpp @@ -217,8 +217,6 @@ gpu::TexturePointer TextureCache::cacheTextureByHash(const std::string& hash, co if (!result) { _texturesByHashes[hash] = texture; result = texture; - } else { - qCWarning(modelnetworking) << "QQQ Swapping out texture with previous live texture in hash " << hash.c_str(); } } return result; diff --git a/libraries/octree/src/Octree.cpp b/libraries/octree/src/Octree.cpp index 7563122290..3190f25d7e 100644 --- a/libraries/octree/src/Octree.cpp +++ b/libraries/octree/src/Octree.cpp @@ -9,10 +9,6 @@ // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // -#ifdef _WIN32 -#define _USE_MATH_DEFINES -#endif - #include #include #include diff --git a/libraries/shared/src/PathUtils.cpp b/libraries/shared/src/PathUtils.cpp index 46613f1283..00a11ef06c 100644 --- a/libraries/shared/src/PathUtils.cpp +++ b/libraries/shared/src/PathUtils.cpp @@ -24,9 +24,30 @@ const QString& PathUtils::resourcesPath() { #ifdef Q_OS_MAC - static QString staticResourcePath = QCoreApplication::applicationDirPath() + "/../Resources/"; + static const QString staticResourcePath = QCoreApplication::applicationDirPath() + "/../Resources/"; #else - static QString staticResourcePath = QCoreApplication::applicationDirPath() + "/resources/"; + static const QString staticResourcePath = QCoreApplication::applicationDirPath() + "/resources/"; +#endif + return staticResourcePath; +} + +#ifdef DEV_BUILD +const QString& PathUtils::projectRootPath() { + static QString sourceFolder; + static std::once_flag once; + std::call_once(once, [&] { + QDir thisDir = QFileInfo(__FILE__).absoluteDir(); + sourceFolder = QDir::cleanPath(thisDir.absoluteFilePath("../../../")); + }); + return sourceFolder; +} +#endif + +const QString& PathUtils::qmlBasePath() { +#ifdef DEV_BUILD + static const QString staticResourcePath = QUrl::fromLocalFile(projectRootPath() + "/interface/resources/qml/").toString(); +#else + static const QString staticResourcePath = "qrc:///qml/"; #endif return staticResourcePath; diff --git a/libraries/shared/src/PathUtils.h b/libraries/shared/src/PathUtils.h index 8c4bcf2394..9b5b6ef67f 100644 --- a/libraries/shared/src/PathUtils.h +++ b/libraries/shared/src/PathUtils.h @@ -30,6 +30,10 @@ class PathUtils : public QObject, public Dependency { Q_PROPERTY(QUrl defaultScripts READ defaultScriptsLocation CONSTANT) public: static const QString& resourcesPath(); + static const QString& qmlBasePath(); +#ifdef DEV_BUILD + static const QString& projectRootPath(); +#endif static QString getAppDataPath(); static QString getAppLocalDataPath(); diff --git a/libraries/ui/src/ui/OffscreenQmlSurface.cpp b/libraries/ui/src/ui/OffscreenQmlSurface.cpp index 8711e52eff..aab89ccd4d 100644 --- a/libraries/ui/src/ui/OffscreenQmlSurface.cpp +++ b/libraries/ui/src/ui/OffscreenQmlSurface.cpp @@ -48,6 +48,7 @@ #include "types/SoundEffect.h" #include "TabletScriptingInterface.h" +#include "ToolbarScriptingInterface.h" #include "Logging.h" Q_LOGGING_CATEGORY(trace_render_qml, "trace.render.qml") @@ -62,7 +63,10 @@ public: void addWhitelistContextHandler(const std::initializer_list& urls, const QmlContextCallback& callback) { withWriteLock([&] { - for (const auto& url : urls) { + for (auto url : urls) { + if (url.isRelative()) { + url = QUrl(PathUtils::qmlBasePath() + url.toString()); + } _callbacks[url].push_back(callback); } }); @@ -382,6 +386,13 @@ void initializeQmlEngine(QQmlEngine* engine, QQuickWindow* window) { rootContext->setContextProperty("FileTypeProfile", new FileTypeProfile(rootContext)); rootContext->setContextProperty("HFWebEngineProfile", new HFWebEngineProfile(rootContext)); rootContext->setContextProperty("Paths", DependencyManager::get().data()); + static std::once_flag once; + std::call_once(once, [&] { + qRegisterMetaType(); + qRegisterMetaType(); + }); + rootContext->setContextProperty("Tablets", DependencyManager::get().data()); + rootContext->setContextProperty("Toolbars", DependencyManager::get().data()); } QQmlEngine* acquireEngine(QQuickWindow* window) { @@ -587,7 +598,7 @@ void OffscreenQmlSurface::create() { auto qmlEngine = acquireEngine(_quickWindow); _qmlContext = new QQmlContext(qmlEngine->rootContext()); - _qmlContext->setBaseUrl(QUrl{ "qrc:///qml/" }); + _qmlContext->setBaseUrl(QUrl{ PathUtils::qmlBasePath() }); _qmlContext->setContextProperty("offscreenWindow", QVariant::fromValue(getWindow())); _qmlContext->setContextProperty("eventBridge", this); _qmlContext->setContextProperty("webEntity", this); @@ -715,7 +726,6 @@ void OffscreenQmlSurface::load(const QUrl& qmlSource, bool createNewContext, con } void OffscreenQmlSurface::loadInternal(const QUrl& qmlSource, bool createNewContext, QQuickItem* parent, const QmlContextObjectCallback& onQmlLoadedCallback) { - qCDebug(uiLogging) << "QQQ" << __FUNCTION__ << qmlSource; if (QThread::currentThread() != thread()) { qCWarning(uiLogging) << "Called load on a non-surface thread"; } @@ -725,7 +735,6 @@ void OffscreenQmlSurface::loadInternal(const QUrl& qmlSource, bool createNewCont QUrl finalQmlSource = qmlSource; if ((qmlSource.isRelative() && !qmlSource.isEmpty()) || qmlSource.scheme() == QLatin1String("file")) { finalQmlSource = _qmlContext->resolvedUrl(qmlSource); - qCDebug(uiLogging) << "QQQ" << __FUNCTION__ << "resolved to " << finalQmlSource; } auto targetContext = contextForUrl(finalQmlSource, createNewContext); diff --git a/libraries/ui/src/ui/TabletScriptingInterface.cpp b/libraries/ui/src/ui/TabletScriptingInterface.cpp index 7440d0b5d0..93d493539e 100644 --- a/libraries/ui/src/ui/TabletScriptingInterface.cpp +++ b/libraries/ui/src/ui/TabletScriptingInterface.cpp @@ -210,7 +210,7 @@ QObject* TabletScriptingInterface::getFlags() { // TabletProxy // -static const char* TABLET_SOURCE_URL = "hifi/tablet/Tablet.qml"; +static const char* TABLET_HOME_SOURCE_URL = "hifi/tablet/TabletHome.qml"; static const char* WEB_VIEW_SOURCE_URL = "hifi/tablet/TabletWebView.qml"; static const char* VRMENU_SOURCE_URL = "hifi/tablet/TabletMenu.qml"; @@ -274,7 +274,7 @@ void TabletProxy::setToolbarMode(bool toolbarMode) { } else { removeButtonsFromToolbar(); - if (_currentPathLoaded == TABLET_SOURCE_URL) { + if (_currentPathLoaded == TABLET_HOME_SOURCE_URL) { // Tablet QML now pulls buttons from Tablet proxy } else { loadHomeScreen(true); @@ -408,7 +408,7 @@ void TabletProxy::setQmlTabletRoot(OffscreenQmlSurface* qmlOffscreenSurface) { }); if (_toolbarMode) { - QMetaObject::invokeMethod(_qmlTabletRoot, "loadSource", Q_ARG(const QVariant&, QVariant(TABLET_SOURCE_URL))); + QMetaObject::invokeMethod(_qmlTabletRoot, "loadSource", Q_ARG(const QVariant&, QVariant(TABLET_HOME_SOURCE_URL))); } // force to the tablet to go to the homescreen @@ -618,7 +618,7 @@ void TabletProxy::loadHomeScreen(bool forceOntoHomeScreen) { if ((_state != State::Home && _state != State::Uninitialized) || forceOntoHomeScreen) { if (!_toolbarMode && _qmlTabletRoot) { - QMetaObject::invokeMethod(_qmlTabletRoot, "loadSource", Q_ARG(const QVariant&, QVariant(TABLET_SOURCE_URL))); + QMetaObject::invokeMethod(_qmlTabletRoot, "loadSource", Q_ARG(const QVariant&, QVariant(TABLET_HOME_SOURCE_URL))); QMetaObject::invokeMethod(_qmlTabletRoot, "playButtonClickSound"); } else if (_toolbarMode && _desktopWindow) { // close desktop window @@ -627,8 +627,8 @@ void TabletProxy::loadHomeScreen(bool forceOntoHomeScreen) { } } _state = State::Home; - emit screenChanged(QVariant("Home"), QVariant(TABLET_SOURCE_URL)); - _currentPathLoaded = TABLET_SOURCE_URL; + emit screenChanged(QVariant("Home"), QVariant(TABLET_HOME_SOURCE_URL)); + _currentPathLoaded = TABLET_HOME_SOURCE_URL; } } diff --git a/scripts/developer/EZrecord.js b/scripts/developer/EZrecord.js index 7fdebada79..3cfc6e9928 100644 --- a/scripts/developer/EZrecord.js +++ b/scripts/developer/EZrecord.js @@ -227,14 +227,14 @@ } function setUp() { - tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); + tablet = Tablets.getTablet("com.highfidelity.interface.tablet.system"); if (!tablet) { return; } Recorder.setUp(); - // Tablet/toolbar button. + // tablet/toolbar button. button = tablet.addButton({ icon: APP_ICON_INACTIVE, activeIcon: APP_ICON_ACTIVE, diff --git a/scripts/developer/inputRecording.js b/scripts/developer/inputRecording.js index 6fb8e471cd..574cbbeb3d 100644 --- a/scripts/developer/inputRecording.js +++ b/scripts/developer/inputRecording.js @@ -10,7 +10,7 @@ var recording = false; var onRecordingScreen = false; var passedSaveDirectory = false; - var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); + var tablet = Tablets.getTablet("com.highfidelity.interface.tablet.system"); var button = tablet.addButton({ text: "IRecord" }); diff --git a/scripts/developer/tests/dynamics/dynamicsTests.js b/scripts/developer/tests/dynamics/dynamicsTests.js index c0b001eab3..be22e2c5fb 100644 --- a/scripts/developer/tests/dynamics/dynamicsTests.js +++ b/scripts/developer/tests/dynamics/dynamicsTests.js @@ -11,14 +11,14 @@ "use strict"; -/* global Entities, Script, Tablet, MyAvatar, Vec3 */ +/* global Entities, Script, Tablets, MyAvatar, Vec3 */ (function() { // BEGIN LOCAL_SCOPE var DYNAMICS_TESTS_URL = Script.resolvePath("dynamics-tests.html"); var DEFAULT_LIFETIME = 120; // seconds - var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); + var tablet = Tablets.getTablet("com.highfidelity.interface.tablet.system"); var button = tablet.addButton({ icon: Script.resolvePath("dynamicsTests.svg"), diff --git a/scripts/developer/tests/puck-attach.js b/scripts/developer/tests/puck-attach.js index 04d5db5710..6971ec02cd 100644 --- a/scripts/developer/tests/puck-attach.js +++ b/scripts/developer/tests/puck-attach.js @@ -19,7 +19,7 @@ Script.include("/~/system/libraries/Xform.js"); var TABLET_BUTTON_NAME = "PUCKTACH"; var TABLET_APP_URL = "https://hifi-content.s3.amazonaws.com/seefo/production/puck-attach/puck-attach.html"; -var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); +var tablet = Tablets.getTablet("com.highfidelity.interface.tablet.system"); var tabletButton = tablet.addButton({ text: TABLET_BUTTON_NAME, icon: "https://s3.amazonaws.com/hifi-public/tony/icons/puck-i.svg", diff --git a/scripts/developer/tests/sliderTestMain.js b/scripts/developer/tests/sliderTestMain.js index 22bf4fa911..e7542ef177 100644 --- a/scripts/developer/tests/sliderTestMain.js +++ b/scripts/developer/tests/sliderTestMain.js @@ -1,6 +1,6 @@ (function () { var HTML_URL = Script.resolvePath("sliderTest.html"); - var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); + var tablet = Tablets.getTablet("com.highfidelity.interface.tablet.system"); var button = tablet.addButton({ text: "SLIDER" }); diff --git a/scripts/developer/tests/tabletEventBridgeTest.js b/scripts/developer/tests/tabletEventBridgeTest.js index 83031741fc..3f988303f2 100644 --- a/scripts/developer/tests/tabletEventBridgeTest.js +++ b/scripts/developer/tests/tabletEventBridgeTest.js @@ -11,10 +11,10 @@ // Adds a button to the tablet that will switch to a web page. // This web page contains buttons that will use the event bridge to trigger sounds. -/* globals Tablet */ +/* globals Tablets */ -var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); +var tablet = Tablets.getTablet("com.highfidelity.interface.tablet.system"); var tabletButton = tablet.addButton({ text: "SOUNDS", icon: "http://s3.amazonaws.com/hifi-public/tony/icons/trombone-i.png", diff --git a/scripts/developer/tests/tabletTest.js b/scripts/developer/tests/tabletTest.js index 438d0a4b99..9c1ce0e3bd 100644 --- a/scripts/developer/tests/tabletTest.js +++ b/scripts/developer/tests/tabletTest.js @@ -10,7 +10,7 @@ // Adds a BAM! button to the tablet ui. -var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); +var tablet = Tablets.getTablet("com.highfidelity.interface.tablet.system"); var button = tablet.addButton({ text: "BAM!!!" }); diff --git a/scripts/developer/utilities/audio/stats.js b/scripts/developer/utilities/audio/stats.js index 382e14df5f..a828d79340 100644 --- a/scripts/developer/utilities/audio/stats.js +++ b/scripts/developer/utilities/audio/stats.js @@ -10,7 +10,7 @@ // if (HMD.active && !Settings.getValue("HUDUIEnabled")) { - var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); + var tablet = Tablets.getTablet("com.highfidelity.interface.tablet.system"); var qml = Script.resolvePath("TabletStats.qml"); tablet.loadQMLSource(qml); Script.stop(); diff --git a/scripts/developer/utilities/render/luci.js b/scripts/developer/utilities/render/luci.js index 1e2ac1261f..b2203ce72f 100644 --- a/scripts/developer/utilities/render/luci.js +++ b/scripts/developer/utilities/render/luci.js @@ -27,7 +27,7 @@ } } - var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); + var tablet = Tablets.getTablet("com.highfidelity.interface.tablet.system"); var button = tablet.addButton({ text: TABLET_BUTTON_NAME, icon: ICON_URL, diff --git a/scripts/developer/utilities/render/photobooth/photoboothApp.js b/scripts/developer/utilities/render/photobooth/photoboothApp.js index 154028f091..375a98e543 100644 --- a/scripts/developer/utilities/render/photobooth/photoboothApp.js +++ b/scripts/developer/utilities/render/photobooth/photoboothApp.js @@ -8,7 +8,7 @@ // Distributed under the Apache License, Version 2.0. // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // -/* globals Tablet, Toolbars, Script, HMD, Controller, Menu */ +/* globals Tablets, Toolbars, Script, HMD, Controller, Menu */ (function () { var SNAPSHOT_DELAY = 500; // 500ms var PHOTOBOOTH_WINDOW_HTML_URL = Script.resolvePath("./html/photobooth.html"); @@ -16,7 +16,7 @@ var MODEL_BOUNDING_BOX_DIMENSIONS = {x: 1.0174,y: 1.1925,z: 1.0165}; var PhotoBooth = {}; var photoboothCreated = false; - var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); + var tablet = Tablets.getTablet("com.highfidelity.interface.tablet.system"); var button = tablet.addButton({ icon: "icons/tablet-icons/snap-i.svg", text: "PHOTOBOOTH" diff --git a/scripts/system/audio.js b/scripts/system/audio.js index a93177ca38..ea0626a30c 100644 --- a/scripts/system/audio.js +++ b/scripts/system/audio.js @@ -54,7 +54,7 @@ function onScreenChanged(type, url) { button.editProperties({isActive: onAudioScreen}); } -var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); +var tablet = Tablets.getTablet("com.highfidelity.interface.tablet.system"); var button = tablet.addButton({ icon: Audio.muted ? MUTE_ICONS.icon : UNMUTE_ICONS.icon, activeIcon: Audio.muted ? MUTE_ICONS.activeIcon : UNMUTE_ICONS.activeIcon, diff --git a/scripts/system/audioMuteOverlay.js b/scripts/system/audioMuteOverlay.js index 731d62017d..0db4edb85d 100644 --- a/scripts/system/audioMuteOverlay.js +++ b/scripts/system/audioMuteOverlay.js @@ -1,6 +1,6 @@ "use strict"; /* jslint vars: true, plusplus: true, forin: true*/ -/* globals Tablet, Script, AvatarList, Users, Entities, MyAvatar, Camera, Overlays, Vec3, Quat, Controller, print, getControllerWorldLocation */ +/* globals Tablets, Script, AvatarList, Users, Entities, MyAvatar, Camera, Overlays, Vec3, Quat, Controller, print, getControllerWorldLocation */ /* eslint indent: ["error", 4, { "outerIIFEBody": 0 }] */ // // audioMuteOverlay.js diff --git a/scripts/system/audioScope.js b/scripts/system/audioScope.js index 81d8e8fbd4..268c883983 100644 --- a/scripts/system/audioScope.js +++ b/scripts/system/audioScope.js @@ -9,7 +9,7 @@ // 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, Tablet, AudioScope, Audio */ +/* global Script, Tablets, AudioScope, Audio */ (function () { // BEGIN LOCAL_SCOPE @@ -17,7 +17,7 @@ var scopePaused = AudioScope.getPause(); var autoPause = false; - var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); + var tablet = Tablets.getTablet("com.highfidelity.interface.tablet.system"); var showScopeButton = tablet.addButton({ icon: "icons/tablet-icons/scope.svg", text: "Audio Scope", diff --git a/scripts/system/bubble.js b/scripts/system/bubble.js index 4ea684ff06..2b6924d84f 100644 --- a/scripts/system/bubble.js +++ b/scripts/system/bubble.js @@ -183,7 +183,7 @@ // Setup the bubble button var buttonName = "BUBBLE"; - var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); + var tablet = Tablets.getTablet("com.highfidelity.interface.tablet.system"); button = tablet.addButton({ icon: "icons/tablet-icons/bubble-i.svg", activeIcon: "icons/tablet-icons/bubble-a.svg", diff --git a/scripts/system/chat.js b/scripts/system/chat.js index fa997e20cc..220c87195a 100644 --- a/scripts/system/chat.js +++ b/scripts/system/chat.js @@ -19,7 +19,7 @@ var tabletButtonIcon = "icons/tablet-icons/menu-i.svg"; // Icon for chat button. var tabletButtonActiveIcon = "icons/tablet-icons/menu-a.svg"; // Active icon for chat button. var tabletButton = null; // The button we create in the tablet. - var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); // The awesome tablet. + var tablet = Tablets.getTablet("com.highfidelity.interface.tablet.system"); // The awesome tablet. var chatLog = []; // Array of chat messages in the form of [avatarID, displayName, message, data]. var avatarIdentifiers = {}; // Map of avatar ids to dict of identifierParams. var speechBubbleShowing = false; // Is the speech bubble visible? diff --git a/scripts/system/commerce/wallet.js b/scripts/system/commerce/wallet.js index 9b2367b762..7f05dcf3d8 100644 --- a/scripts/system/commerce/wallet.js +++ b/scripts/system/commerce/wallet.js @@ -148,7 +148,7 @@ var walletEnabled = Settings.getValue("commerce", false); function startup() { if (walletEnabled) { - tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); + tablet = Tablets.getTablet("com.highfidelity.interface.tablet.system"); button = tablet.addButton({ text: buttonName, icon: "icons/tablet-icons/wallet-i.svg", diff --git a/scripts/system/controllers/godView.js b/scripts/system/controllers/godView.js index 4b406399fd..eb38308cb9 100644 --- a/scripts/system/controllers/godView.js +++ b/scripts/system/controllers/godView.js @@ -9,7 +9,7 @@ // Distributed under the Apache License, Version 2.0. // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // -/* globals HMD, Script, Menu, Tablet, Camera */ +/* globals HMD, Script, Menu, Tablets, Camera */ /* eslint indent: ["error", 4, { "outerIIFEBody": 0 }] */ (function() { // BEGIN LOCAL_SCOPE @@ -81,7 +81,7 @@ function endGodView() { } var button; -var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); +var tablet = Tablets.getTablet("com.highfidelity.interface.tablet.system"); function onClicked() { if (godView) { diff --git a/scripts/system/edit.js b/scripts/system/edit.js index 2bbd422c65..abd69e2697 100644 --- a/scripts/system/edit.js +++ b/scripts/system/edit.js @@ -11,7 +11,7 @@ // /* global Script, SelectionDisplay, LightOverlayManager, CameraManager, Grid, GridTool, EntityListTool, Vec3, SelectionManager, Overlays, OverlayWebWindow, UserActivityLogger, - Settings, Entities, Tablet, Toolbars, Messages, Menu, Camera, progressDialog, tooltip, MyAvatar, Quat, Controller, Clipboard, HMD, UndoStack, ParticleExplorerTool */ + Settings, Entities, Tablets, Toolbars, Messages, Menu, Camera, progressDialog, tooltip, MyAvatar, Quat, Controller, Clipboard, HMD, UndoStack, ParticleExplorerTool */ (function() { // BEGIN LOCAL_SCOPE @@ -390,7 +390,7 @@ var toolBar = (function () { } function fromQml(message) { // messages are {method, params}, like json-rpc. See also sendToQml. - var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); + var tablet = Tablets.getTablet("com.highfidelity.interface.tablet.system"); tablet.popFromStack(); switch (message.method) { case "newModelDialogAdd": @@ -417,7 +417,7 @@ var toolBar = (function () { var hasRezPermissions = (Entities.canRez() || Entities.canRezTmp() || Entities.canRezCertified() || Entities.canRezTmpCertified()); var createButtonIconRsrc = (hasRezPermissions ? CREATE_ENABLED_ICON : CREATE_DISABLED_ICON); - tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); + tablet = Tablets.getTablet("com.highfidelity.interface.tablet.system"); activeButton = tablet.addButton({ captionColorOverride: hasRezPermissions ? "" : "#888888", icon: createButtonIconRsrc, @@ -463,7 +463,7 @@ var toolBar = (function () { var SHAPE_TYPE_DEFAULT = SHAPE_TYPE_STATIC_MESH; // tablet version of new-model dialog - var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); + var tablet = Tablets.getTablet("com.highfidelity.interface.tablet.system"); tablet.pushOntoStack("NewModelDialog.qml"); }); @@ -644,7 +644,7 @@ var toolBar = (function () { isActive = active; activeButton.editProperties({isActive: isActive}); - var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); + var tablet = Tablets.getTablet("com.highfidelity.interface.tablet.system"); if (!isActive) { entityListTool.setVisible(false); @@ -1850,7 +1850,7 @@ var PropertiesTool = function (opts) { var that = {}; var webView = null; - webView = Tablet.getTablet("com.highfidelity.interface.tablet.system"); + webView = Tablets.getTablet("com.highfidelity.interface.tablet.system"); webView.setVisible = function(value) {}; var visible = false; @@ -2293,7 +2293,7 @@ function selectParticleEntity(entityID) { particleExplorerTool.webView.emitScriptEvent(JSON.stringify(particleData)); // Switch to particle explorer - var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); + var tablet = Tablets.getTablet("com.highfidelity.interface.tablet.system"); tablet.sendToQml({method: 'selectTab', params: {id: 'particle'}}); } diff --git a/scripts/system/fingerPaint.js b/scripts/system/fingerPaint.js index 88245503e8..ad4973890b 100644 --- a/scripts/system/fingerPaint.js +++ b/scripts/system/fingerPaint.js @@ -414,12 +414,12 @@ } function setUp() { - tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); + tablet = Tablets.getTablet("com.highfidelity.interface.tablet.system"); if (!tablet) { return; } - // Tablet button. + // Tablets button. button = tablet.addButton({ icon: "icons/tablet-icons/finger-paint-i.svg", activeIcon: "icons/tablet-icons/finger-paint-a.svg", diff --git a/scripts/system/generalSettings.js b/scripts/system/generalSettings.js index 082528ffc5..8a9001107a 100644 --- a/scripts/system/generalSettings.js +++ b/scripts/system/generalSettings.js @@ -10,7 +10,7 @@ // Distributed under the Apache License, Version 2.0. // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // -/* globals Tablet, Toolbars, Script, HMD, DialogsManager */ +/* globals Tablets, Toolbars, Script, HMD, DialogsManager */ (function() { // BEGIN LOCAL_SCOPE @@ -34,7 +34,7 @@ alpha: 0.9 }); } else { - tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); + tablet = Tablets.getTablet("com.highfidelity.interface.tablet.system"); button = tablet.addButton({ icon: "icons/tablet-icons/goto-i.svg", text: buttonName, diff --git a/scripts/system/goto.js b/scripts/system/goto.js index d364bf579e..31394c8750 100644 --- a/scripts/system/goto.js +++ b/scripts/system/goto.js @@ -10,7 +10,7 @@ // Distributed under the Apache License, Version 2.0. // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // -/* globals Tablet, Toolbars, Script, HMD, DialogsManager */ +/* globals Tablets, Toolbars, Script, HMD, DialogsManager */ (function() { // BEGIN LOCAL_SCOPE @@ -37,7 +37,7 @@ if (Settings.getValue("HUDUIEnabled")) { alpha: 0.9 }); } else { - tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); + tablet = Tablets.getTablet("com.highfidelity.interface.tablet.system"); button = tablet.addButton({ icon: "icons/tablet-icons/goto-i.svg", activeIcon: "icons/tablet-icons/goto-a.svg", diff --git a/scripts/system/help.js b/scripts/system/help.js index 9ab7fa3fb3..5687c8961f 100644 --- a/scripts/system/help.js +++ b/scripts/system/help.js @@ -10,14 +10,14 @@ // Distributed under the Apache License, Version 2.0. // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // -/* globals Tablet, Script, HMD, Controller, Menu */ +/* globals Tablets, Script, HMD, Controller, Menu */ (function() { // BEGIN LOCAL_SCOPE var HOME_BUTTON_TEXTURE = Script.resourcesPath() + "meshes/tablet-with-home-button.fbx/tablet-with-home-button.fbm/button-root.png"; var buttonName = "HELP"; var onHelpScreen = false; - var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); + var tablet = Tablets.getTablet("com.highfidelity.interface.tablet.system"); var button = tablet.addButton({ icon: "icons/tablet-icons/help-i.svg", activeIcon: "icons/tablet-icons/help-a.svg", diff --git a/scripts/system/hmd.js b/scripts/system/hmd.js index b9fd7f725c..a86bbd9a62 100644 --- a/scripts/system/hmd.js +++ b/scripts/system/hmd.js @@ -10,7 +10,7 @@ // Distributed under the Apache License, Version 2.0. // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // -/* globals HMD, Script, Menu, Tablet, Camera */ +/* globals HMD, Script, Menu, Tablets, Camera */ /* eslint indent: ["error", 4, { "outerIIFEBody": 0 }] */ (function() { // BEGIN LOCAL_SCOPE @@ -38,7 +38,7 @@ function updateControllerDisplay() { } var button; -var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); +var tablet = Tablets.getTablet("com.highfidelity.interface.tablet.system"); // Independent and Entity mode make people sick; disable them in hmd. var desktopOnlyViews = ['Independent Mode', 'Entity Mode']; diff --git a/scripts/system/libraries/WebTablet.js b/scripts/system/libraries/WebTablet.js index c46cfaa073..cd7c575205 100644 --- a/scripts/system/libraries/WebTablet.js +++ b/scripts/system/libraries/WebTablet.js @@ -7,7 +7,7 @@ // Distributed under the Apache License, Version 2.0. // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // -/* global getControllerWorldLocation, Tablet, WebTablet:true, HMD, Settings, Script, +/* global getControllerWorldLocation, Tablets, WebTablet:true, HMD, Settings, Script, Vec3, Quat, MyAvatar, Entities, Overlays, Camera, Messages, Xform, clamp, Controller, Mat4, resizeTablet */ Script.include(Script.resolvePath("../libraries/utils.js")); @@ -168,7 +168,7 @@ WebTablet = function (url, width, dpi, hand, clientOnly, location, visible) { this.receive = function (channel, senderID, senderUUID, localOnly) { if (_this.homeButtonID == senderID) { - var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); + var tablet = Tablets.getTablet("com.highfidelity.interface.tablet.system"); var onHomeScreen = tablet.onHomeScreen(); var isMessageOpen; if (onHomeScreen) { @@ -513,7 +513,7 @@ WebTablet.prototype.mousePressEvent = function (event) { entityPickResults.overlayID === this.tabletEntityID)) { var overlayPickResults = Overlays.findRayIntersection(pickRay, true, [this.webOverlayID, this.homeButtonID], []); if (overlayPickResults.intersects && overlayPickResults.overlayID === this.homeButtonID) { - var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); + var tablet = Tablets.getTablet("com.highfidelity.interface.tablet.system"); var onHomeScreen = tablet.onHomeScreen(); var isMessageOpen = tablet.isMessageDialogOpen(); if (onHomeScreen) { diff --git a/scripts/system/libraries/entityList.js b/scripts/system/libraries/entityList.js index 9d9689000e..a1f5d31a1a 100644 --- a/scripts/system/libraries/entityList.js +++ b/scripts/system/libraries/entityList.js @@ -8,14 +8,14 @@ // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // -/* global EntityListTool, Tablet, selectionManager, Entities, Camera, MyAvatar, Vec3, Menu, Messages, +/* global EntityListTool, Tablets, selectionManager, Entities, Camera, MyAvatar, Vec3, Menu, Messages, cameraManager, MENU_EASE_ON_FOCUS, deleteSelectedEntities, toggleSelectedEntitiesLocked, toggleSelectedEntitiesVisible */ EntityListTool = function(opts) { var that = {}; var webView = null; - webView = Tablet.getTablet("com.highfidelity.interface.tablet.system"); + webView = Tablets.getTablet("com.highfidelity.interface.tablet.system"); webView.setVisible = function(value) {}; var filterInView = false; diff --git a/scripts/system/libraries/gridTool.js b/scripts/system/libraries/gridTool.js index 2c417a9dde..41cbc59502 100644 --- a/scripts/system/libraries/gridTool.js +++ b/scripts/system/libraries/gridTool.js @@ -237,7 +237,7 @@ GridTool = function(opts) { var listeners = []; var webView = null; - webView = Tablet.getTablet("com.highfidelity.interface.tablet.system"); + webView = Tablets.getTablet("com.highfidelity.interface.tablet.system"); webView.setVisible = function(value) {}; horizontalGrid.addListener(function(data) { diff --git a/scripts/system/libraries/utils.js b/scripts/system/libraries/utils.js index 76c248d880..8ea176bbd4 100644 --- a/scripts/system/libraries/utils.js +++ b/scripts/system/libraries/utils.js @@ -354,7 +354,7 @@ flatten = function(array) { getTabletWidthFromSettings = function () { var DEFAULT_TABLET_WIDTH = 0.4375; - var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); + var tablet = Tablets.getTablet("com.highfidelity.interface.tablet.system"); var toolbarMode = tablet.toolbarMode; var DEFAULT_TABLET_SCALE = 100; var tabletScalePercentage = DEFAULT_TABLET_SCALE; diff --git a/scripts/system/marketplaces/marketplace.js b/scripts/system/marketplaces/marketplace.js index d90695c767..6d6550ecbc 100644 --- a/scripts/system/marketplaces/marketplace.js +++ b/scripts/system/marketplaces/marketplace.js @@ -82,7 +82,7 @@ function toggleMarketplace() { } } -var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); +var tablet = Tablets.getTablet("com.highfidelity.interface.tablet.system"); var browseExamplesButton = tablet.addButton({ icon: "icons/tablet-icons/market-i.svg", diff --git a/scripts/system/marketplaces/marketplaces.js b/scripts/system/marketplaces/marketplaces.js index b427739292..a831d761d2 100644 --- a/scripts/system/marketplaces/marketplaces.js +++ b/scripts/system/marketplaces/marketplaces.js @@ -8,7 +8,7 @@ // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // -/* global Tablet, Script, HMD, UserActivityLogger, Entities */ +/* global Tablets, Script, HMD, UserActivityLogger, Entities */ /* eslint indent: ["error", 4, { "outerIIFEBody": 0 }] */ (function () { // BEGIN LOCAL_SCOPE @@ -81,7 +81,7 @@ } } - var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); + var tablet = Tablets.getTablet("com.highfidelity.interface.tablet.system"); var marketplaceButton = tablet.addButton({ icon: "icons/tablet-icons/market-i.svg", activeIcon: "icons/tablet-icons/market-a.svg", diff --git a/scripts/system/menu.js b/scripts/system/menu.js index c7a44d3e48..004ece17c3 100644 --- a/scripts/system/menu.js +++ b/scripts/system/menu.js @@ -13,7 +13,7 @@ var HOME_BUTTON_TEXTURE = "http://hifi-content.s3.amazonaws.com/alan/dev/tablet- // var HOME_BUTTON_TEXTURE = Script.resourcesPath() + "meshes/tablet-with-home-button.fbx/tablet-with-home-button.fbm/button-root.png"; (function() { - var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); + var tablet = Tablets.getTablet("com.highfidelity.interface.tablet.system"); var button = tablet.addButton({ icon: "icons/tablet-icons/menu-i.svg", activeIcon: "icons/tablet-icons/menu-a.svg", diff --git a/scripts/system/mod.js b/scripts/system/mod.js index a3b4974f8d..defdb662b3 100644 --- a/scripts/system/mod.js +++ b/scripts/system/mod.js @@ -18,7 +18,7 @@ Script.include("/~/system/libraries/controllers.js"); // grab the toolbar -var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); +var tablet = Tablets.getTablet("com.highfidelity.interface.tablet.system"); var ASSETS_PATH = Script.resolvePath("assets"); var TOOLS_PATH = Script.resolvePath("assets/images/tools/"); diff --git a/scripts/system/notifications.js b/scripts/system/notifications.js index b6ddd9d33e..612c0e50e2 100644 --- a/scripts/system/notifications.js +++ b/scripts/system/notifications.js @@ -1,6 +1,6 @@ "use strict"; /*jslint vars:true, plusplus:true, forin:true*/ -/*global Script, Settings, Window, Controller, Overlays, SoundArray, LODManager, MyAvatar, Tablet, Camera, HMD, Menu, Quat, Vec3*/ +/*global Script, Settings, Window, Controller, Overlays, SoundArray, LODManager, MyAvatar, Tablets, Camera, HMD, Menu, Quat, Vec3*/ // // notifications.js // Version 0.801 @@ -696,7 +696,7 @@ Window.announcement.connect(onNotify); Window.notifyEditError = onEditError; Window.notify = onNotify; - Tablet.tabletNotification.connect(tabletNotification); + Tablets.tabletNotification.connect(tabletNotification); Wallet.walletNotSetup.connect(walletNotSetup); Messages.subscribe(NOTIFICATIONS_MESSAGE_CHANNEL); diff --git a/scripts/system/pal.js b/scripts/system/pal.js index 05a7dc8975..26bec518b4 100644 --- a/scripts/system/pal.js +++ b/scripts/system/pal.js @@ -1,6 +1,6 @@ "use strict"; /*jslint vars:true, plusplus:true, forin:true*/ -/*global Tablet, Settings, Script, AvatarList, Users, Entities, MyAvatar, Camera, Overlays, Vec3, Quat, HMD, Controller, Account, UserActivityLogger, Messages, Window, XMLHttpRequest, print, location, getControllerWorldLocation*/ +/*global Tablets, Settings, Script, AvatarList, Users, Entities, MyAvatar, Camera, Overlays, Vec3, Quat, HMD, Controller, Account, UserActivityLogger, Messages, Window, XMLHttpRequest, print, location, getControllerWorldLocation*/ /* eslint indent: ["error", 4, { "outerIIFEBody": 0 }] */ // // pal.js @@ -677,7 +677,7 @@ var buttonName = "PEOPLE"; var tablet = null; function startup() { - tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); + tablet = Tablets.getTablet("com.highfidelity.interface.tablet.system"); button = tablet.addButton({ text: buttonName, icon: "icons/tablet-icons/people-i.svg", diff --git a/scripts/system/particle_explorer/particleExplorerTool.js b/scripts/system/particle_explorer/particleExplorerTool.js index d85fc169b1..c2231df406 100644 --- a/scripts/system/particle_explorer/particleExplorerTool.js +++ b/scripts/system/particle_explorer/particleExplorerTool.js @@ -17,7 +17,7 @@ var PARTICLE_EXPLORER_HTML_URL = Script.resolvePath('particleExplorer.html'); ParticleExplorerTool = function() { var that = {}; that.createWebView = function() { - that.webView = Tablet.getTablet("com.highfidelity.interface.tablet.system"); + that.webView = Tablets.getTablet("com.highfidelity.interface.tablet.system"); that.webView.setVisible = function(value) {}; that.webView.webEventReceived.connect(that.webEventReceived); } diff --git a/scripts/system/snapshot.js b/scripts/system/snapshot.js index 9afdb4ec53..3f29238c24 100644 --- a/scripts/system/snapshot.js +++ b/scripts/system/snapshot.js @@ -7,7 +7,7 @@ // Distributed under the Apache License, Version 2.0 // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // -/* globals Tablet, Script, HMD, Settings, DialogsManager, Menu, Reticle, OverlayWebWindow, Desktop, Account, MyAvatar, Snapshot */ +/* globals Tablets, Script, HMD, Settings, DialogsManager, Menu, Reticle, OverlayWebWindow, Desktop, Account, MyAvatar, Snapshot */ /* eslint indent: ["error", 4, { "outerIIFEBody": 0 }] */ (function () { // BEGIN LOCAL_SCOPE @@ -22,7 +22,7 @@ var clearOverlayWhenMoving; var buttonName = "SNAP"; var buttonConnected = false; -var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); +var tablet = Tablets.getTablet("com.highfidelity.interface.tablet.system"); var button = tablet.addButton({ icon: "icons/tablet-icons/snap-i.svg", activeIcon: "icons/tablet-icons/snap-a.svg", diff --git a/scripts/system/tablet-goto.js b/scripts/system/tablet-goto.js index 2a0e827932..41b7b84d4c 100644 --- a/scripts/system/tablet-goto.js +++ b/scripts/system/tablet-goto.js @@ -1,6 +1,6 @@ "use strict"; /*jslint vars:true, plusplus:true, forin:true*/ -/*global Window, Script, Tablet, HMD, Controller, Account, XMLHttpRequest, location, print*/ +/*global Window, Script, Tablets, HMD, Controller, Account, XMLHttpRequest, location, print*/ // // goto.js @@ -30,7 +30,7 @@ var shouldActivateButton = false; function ignore() { } - var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); + var tablet = Tablets.getTablet("com.highfidelity.interface.tablet.system"); var NORMAL_ICON = "icons/tablet-icons/goto-i.svg"; var NORMAL_ACTIVE = "icons/tablet-icons/goto-a.svg"; var WAITING_ICON = "icons/tablet-icons/goto-msg.svg"; diff --git a/scripts/system/tablet-ui/tabletUI.js b/scripts/system/tablet-ui/tabletUI.js index 17821c737e..0044ca0496 100644 --- a/scripts/system/tablet-ui/tabletUI.js +++ b/scripts/system/tablet-ui/tabletUI.js @@ -12,7 +12,7 @@ // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // -/* global Script, HMD, WebTablet, UIWebTablet, UserActivityLogger, Settings, Entities, Messages, Tablet, Overlays, +/* global Script, HMD, WebTablet, UIWebTablet, UserActivityLogger, Settings, Entities, Messages, Tablets, Overlays, MyAvatar, Menu, AvatarInputs, Vec3 */ (function() { // BEGIN LOCAL_SCOPE @@ -33,7 +33,7 @@ function checkTablet() { if (gTablet === null) { - gTablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); + gTablet = Tablets.getTablet("com.highfidelity.interface.tablet.system"); } } @@ -315,7 +315,7 @@ Script.scriptEnding.connect(function () { // if we reload scripts in tablet mode make sure we close the currently open window, by calling gotoHomeScreen - var tabletProxy = Tablet.getTablet("com.highfidelity.interface.tablet.system"); + var tabletProxy = Tablets.getTablet("com.highfidelity.interface.tablet.system"); if (tabletProxy && tabletProxy.toolbarMode) { tabletProxy.gotoHomeScreen(); } diff --git a/scripts/system/tablet-users.js b/scripts/system/tablet-users.js index 6f37cd55eb..7efd49ae55 100644 --- a/scripts/system/tablet-users.js +++ b/scripts/system/tablet-users.js @@ -33,7 +33,7 @@ GlobalServices.findableBy = myVisibility; } - var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); + var tablet = Tablets.getTablet("com.highfidelity.interface.tablet.system"); var button = tablet.addButton({ icon: "icons/tablet-icons/users-i.svg", activeIcon: "icons/tablet-icons/users-a.svg", diff --git a/scripts/tutorials/createFloatingLanternBox.js b/scripts/tutorials/createFloatingLanternBox.js index c84214e295..c83535fa37 100644 --- a/scripts/tutorials/createFloatingLanternBox.js +++ b/scripts/tutorials/createFloatingLanternBox.js @@ -1,6 +1,6 @@ "use strict"; /* jslint vars: true, plusplus: true, forin: true*/ -/* globals Tablet, Script, AvatarList, Users, Entities, MyAvatar, Camera, Overlays, Vec3, Quat, Controller, print, getControllerWorldLocation */ +/* globals Tablets, Script, AvatarList, Users, Entities, MyAvatar, Camera, Overlays, Vec3, Quat, Controller, print, getControllerWorldLocation */ /* eslint indent: ["error", 4, { "outerIIFEBody": 0 }] */ // // createFloatinLanternBox.js diff --git a/scripts/tutorials/createTetherballStick.js b/scripts/tutorials/createTetherballStick.js index 35f5fb0344..3ad0939c2e 100644 --- a/scripts/tutorials/createTetherballStick.js +++ b/scripts/tutorials/createTetherballStick.js @@ -1,6 +1,6 @@ "use strict"; /* jslint vars: true, plusplus: true, forin: true*/ -/* globals Tablet, Script, AvatarList, Users, Entities, MyAvatar, Camera, Overlays, Vec3, Quat, Controller, print, getControllerWorldLocation */ +/* globals Tablets, Script, AvatarList, Users, Entities, MyAvatar, Camera, Overlays, Vec3, Quat, Controller, print, getControllerWorldLocation */ /* eslint indent: ["error", 4, { "outerIIFEBody": 0 }] */ // // createTetherballStick.js diff --git a/scripts/tutorials/entity_scripts/floatingLantern.js b/scripts/tutorials/entity_scripts/floatingLantern.js index aa25dc0003..c2a79c9c5b 100644 --- a/scripts/tutorials/entity_scripts/floatingLantern.js +++ b/scripts/tutorials/entity_scripts/floatingLantern.js @@ -1,6 +1,6 @@ "use strict"; /* jslint vars: true, plusplus: true, forin: true*/ -/* globals Tablet, Script, AvatarList, Users, Entities, MyAvatar, Camera, Overlays, Vec3, Quat, Controller, print, getControllerWorldLocation */ +/* globals Tablets, Script, AvatarList, Users, Entities, MyAvatar, Camera, Overlays, Vec3, Quat, Controller, print, getControllerWorldLocation */ /* eslint indent: ["error", 4, { "outerIIFEBody": 0 }] */ // // floatinLantern.js diff --git a/scripts/tutorials/entity_scripts/floatingLanternBox.js b/scripts/tutorials/entity_scripts/floatingLanternBox.js index b5fb0c27d9..b8e0fbda3e 100644 --- a/scripts/tutorials/entity_scripts/floatingLanternBox.js +++ b/scripts/tutorials/entity_scripts/floatingLanternBox.js @@ -1,6 +1,6 @@ "use strict"; /* jslint vars: true, plusplus: true, forin: true*/ -/* globals Tablet, Script, AvatarList, Users, Entities, MyAvatar, Camera, Overlays, Vec3, Quat, Controller, print, getControllerWorldLocation */ +/* globals Tablets, Script, AvatarList, Users, Entities, MyAvatar, Camera, Overlays, Vec3, Quat, Controller, print, getControllerWorldLocation */ /* eslint indent: ["error", 4, { "outerIIFEBody": 0 }] */ // // floatingLanternBox.js diff --git a/scripts/tutorials/entity_scripts/tetherballStick.js b/scripts/tutorials/entity_scripts/tetherballStick.js index 867074abd4..50bac88caf 100644 --- a/scripts/tutorials/entity_scripts/tetherballStick.js +++ b/scripts/tutorials/entity_scripts/tetherballStick.js @@ -1,6 +1,6 @@ "use strict"; /* jslint vars: true, plusplus: true, forin: true*/ -/* globals Tablet, Script, AvatarList, Users, Entities, MyAvatar, Camera, Overlays, Vec3, Quat, Controller, print, getControllerWorldLocation */ +/* globals Tablets, Script, AvatarList, Users, Entities, MyAvatar, Camera, Overlays, Vec3, Quat, Controller, print, getControllerWorldLocation */ /* eslint indent: ["error", 4, { "outerIIFEBody": 0 }] */ // // tetherballStick.js diff --git a/tests/shared/src/PathUtilsTests.cpp b/tests/shared/src/PathUtilsTests.cpp new file mode 100644 index 0000000000..fc31d475d0 --- /dev/null +++ b/tests/shared/src/PathUtilsTests.cpp @@ -0,0 +1,28 @@ +// +// Created by Bradley Austin Davis on 2017/11/08 +// Copyright 2013-2017 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + + +#include "PathUtilsTests.h" + +#include + +#include + + +QTEST_MAIN(PathUtilsTests) + +void PathUtilsTests::testPathUtils() { + QString result = PathUtils::qmlBasePath(); +#if DEV_BUILD + QVERIFY(result.startsWith("file:///")); +#else + QVERIFY(result.startsWith("qrc:///")); +#endif + QVERIFY(result.endsWith("/")); +} + diff --git a/tests/shared/src/PathUtilsTests.h b/tests/shared/src/PathUtilsTests.h new file mode 100644 index 0000000000..8ae410d6cb --- /dev/null +++ b/tests/shared/src/PathUtilsTests.h @@ -0,0 +1,20 @@ +// +// Created by Bradley Austin Davis on 2017/11/08 +// Copyright 2013-2017 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +#ifndef hifi_PathUtilsTests_h +#define hifi_PathUtilsTests_h + +#include + +class PathUtilsTests : public QObject { + Q_OBJECT +private slots: + void testPathUtils(); +}; + +#endif // hifi_PathUtilsTests_h diff --git a/unpublishedScripts/marketplace/blocks/blocksApp.js b/unpublishedScripts/marketplace/blocks/blocksApp.js index c9e8682b23..8088f438de 100644 --- a/unpublishedScripts/marketplace/blocks/blocksApp.js +++ b/unpublishedScripts/marketplace/blocks/blocksApp.js @@ -26,7 +26,7 @@ APP_URL = APP_OUTDATED_URL; } - var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); + var tablet = Tablets.getTablet("com.highfidelity.interface.tablet.system"); var button = tablet.addButton({ icon: APP_ICON, activeIcon: APP_ICON_ACTIVE, diff --git a/unpublishedScripts/marketplace/camera-move/app-camera-move.js b/unpublishedScripts/marketplace/camera-move/app-camera-move.js index f58dd3d3bd..177565a332 100644 --- a/unpublishedScripts/marketplace/camera-move/app-camera-move.js +++ b/unpublishedScripts/marketplace/camera-move/app-camera-move.js @@ -162,7 +162,7 @@ var globalState = { function main() { log('initializing...', VERSION); - var tablet = Tablet.getTablet('com.highfidelity.interface.tablet.system'), + var tablet = Tablets.getTablet('com.highfidelity.interface.tablet.system'), button = tablet.addButton(BUTTON_CONFIG); Script.scriptEnding.connect(function() { @@ -601,7 +601,7 @@ function _patchCameraModeSetting() { } function getSystemMetadata() { - var tablet = Tablet.getTablet('com.highfidelity.interface.tablet.system'); + var tablet = Tablets.getTablet('com.highfidelity.interface.tablet.system'); return { mode: { hmd: HMD.active, diff --git a/unpublishedScripts/marketplace/clap/clapApp.js b/unpublishedScripts/marketplace/clap/clapApp.js index b2d8ce55db..a975d9d8b5 100644 --- a/unpublishedScripts/marketplace/clap/clapApp.js +++ b/unpublishedScripts/marketplace/clap/clapApp.js @@ -16,7 +16,7 @@ // Load up engine var APP_NAME = "CLAP"; var ClapEngine = Script.require(Script.resolvePath("scripts/ClapEngine.js?v9")); -var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); +var tablet = Tablets.getTablet("com.highfidelity.interface.tablet.system"); // Define Menu var blackIcon = Script.resolvePath("icons/tablet-icons/clap-a.svg?foxv2"); diff --git a/unpublishedScripts/marketplace/doppleganger-attachments/app-doppleganger-attachments.js b/unpublishedScripts/marketplace/doppleganger-attachments/app-doppleganger-attachments.js index c09ad602f8..278f4efbaa 100644 --- a/unpublishedScripts/marketplace/doppleganger-attachments/app-doppleganger-attachments.js +++ b/unpublishedScripts/marketplace/doppleganger-attachments/app-doppleganger-attachments.js @@ -45,7 +45,7 @@ var buttonConfig = utils.assign({ activeIcon: require('./doppleganger-a.svg.json'), }); -var tablet = Tablet.getTablet('com.highfidelity.interface.tablet.system'), +var tablet = Tablets.getTablet('com.highfidelity.interface.tablet.system'), button = tablet.addButton(buttonConfig); Script.scriptEnding.connect(function() { diff --git a/unpublishedScripts/marketplace/doppleganger-attachments/dist/app-doppleganger-marketplace.js b/unpublishedScripts/marketplace/doppleganger-attachments/dist/app-doppleganger-marketplace.js index bc5368ba5b..1cb7610ff3 100644 --- a/unpublishedScripts/marketplace/doppleganger-attachments/dist/app-doppleganger-marketplace.js +++ b/unpublishedScripts/marketplace/doppleganger-attachments/dist/app-doppleganger-marketplace.js @@ -905,7 +905,7 @@ var buttonConfig = utils.assign({ activeIcon: __webpack_require__(7), }); -var tablet = Tablet.getTablet('com.highfidelity.interface.tablet.system'), +var tablet = Tablets.getTablet('com.highfidelity.interface.tablet.system'), button = tablet.addButton(buttonConfig); Script.scriptEnding.connect(function() { diff --git a/unpublishedScripts/marketplace/doppleganger-mirror/app-doppleganger.js b/unpublishedScripts/marketplace/doppleganger-mirror/app-doppleganger.js index f4c7bf99c0..d02dd3e9ba 100644 --- a/unpublishedScripts/marketplace/doppleganger-mirror/app-doppleganger.js +++ b/unpublishedScripts/marketplace/doppleganger-mirror/app-doppleganger.js @@ -12,7 +12,7 @@ var DopplegangerClass = Script.require('./doppleganger.js'); -var tablet = Tablet.getTablet('com.highfidelity.interface.tablet.system'), +var tablet = Tablets.getTablet('com.highfidelity.interface.tablet.system'), button = tablet.addButton({ icon: Script.resolvePath('./doppleganger-i.svg'), activeIcon: Script.resolvePath('./doppleganger-a.svg'), diff --git a/unpublishedScripts/marketplace/emoji-tablet/emojiTablet.js b/unpublishedScripts/marketplace/emoji-tablet/emojiTablet.js index b4d01e77cf..687c9445cd 100644 --- a/unpublishedScripts/marketplace/emoji-tablet/emojiTablet.js +++ b/unpublishedScripts/marketplace/emoji-tablet/emojiTablet.js @@ -19,7 +19,7 @@ var lib = Script.require("https://hifi-content.s3.amazonaws.com/elisalj/emoji_sc var APP_NAME = "EMOJIS"; var APP_URL = "https://hifi-content.s3.amazonaws.com/elisalj/emoji_scripts/emojiTabletUI.html?" + Date.now(); var APP_ICON = "https://hifi-content.s3.amazonaws.com/elisalj/emoji_scripts/icons/emoji-i.svg"; - var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); + var tablet = Tablets.getTablet("com.highfidelity.interface.tablet.system"); var button = tablet.addButton({ icon: APP_ICON, diff --git a/unpublishedScripts/marketplace/laser/laserPointerApp.js b/unpublishedScripts/marketplace/laser/laserPointerApp.js index 515a2c3a76..32cc75dd42 100644 --- a/unpublishedScripts/marketplace/laser/laserPointerApp.js +++ b/unpublishedScripts/marketplace/laser/laserPointerApp.js @@ -17,7 +17,7 @@ var TRIGGER_PRESSURE = 0.95; - var tablet = Tablet.getTablet('com.highfidelity.interface.tablet.system'); + var tablet = Tablets.getTablet('com.highfidelity.interface.tablet.system'); var button = tablet.addButton({ icon: APP_ICON, diff --git a/unpublishedScripts/marketplace/record/record.js b/unpublishedScripts/marketplace/record/record.js index 68c7ea3f5a..6392f10892 100644 --- a/unpublishedScripts/marketplace/record/record.js +++ b/unpublishedScripts/marketplace/record/record.js @@ -631,7 +631,7 @@ } function setUp() { - tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); + tablet = Tablets.getTablet("com.highfidelity.interface.tablet.system"); if (!tablet) { return; } @@ -694,7 +694,7 @@ } // FIXME: If setUp() is run immediately at Interface start-up, Interface hangs and crashes because of the line of code: - // tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); + // tablet = Tablets.getTablet("com.highfidelity.interface.tablet.system"); //setUp(); //Script.scriptEnding.connect(tearDown); Script.setTimeout(function () { diff --git a/unpublishedScripts/marketplace/shapes/shapes.js b/unpublishedScripts/marketplace/shapes/shapes.js index cd5f119588..de177f435e 100644 --- a/unpublishedScripts/marketplace/shapes/shapes.js +++ b/unpublishedScripts/marketplace/shapes/shapes.js @@ -1930,7 +1930,7 @@ function setUp() { var hasRezPermissions; - tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); + tablet = Tablets.getTablet("com.highfidelity.interface.tablet.system"); if (!tablet) { App.log("ERROR: Tablet not found! App not started."); return; diff --git a/unpublishedScripts/marketplace/skyboxChanger/skyboxchanger.js b/unpublishedScripts/marketplace/skyboxChanger/skyboxchanger.js index 7bc65722cd..114bccb034 100644 --- a/unpublishedScripts/marketplace/skyboxChanger/skyboxchanger.js +++ b/unpublishedScripts/marketplace/skyboxChanger/skyboxchanger.js @@ -28,7 +28,7 @@ } } - var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); + var tablet = Tablets.getTablet("com.highfidelity.interface.tablet.system"); var button = tablet.addButton({ icon: ICONS.icon, activeIcon: ICONS.activeIcon, diff --git a/unpublishedScripts/marketplace/spectator-camera/spectatorCamera.js b/unpublishedScripts/marketplace/spectator-camera/spectatorCamera.js index 76044d2975..cc600632e5 100644 --- a/unpublishedScripts/marketplace/spectator-camera/spectatorCamera.js +++ b/unpublishedScripts/marketplace/spectator-camera/spectatorCamera.js @@ -1,6 +1,6 @@ "use strict"; /*jslint vars:true, plusplus:true, forin:true*/ -/*global Tablet, Script, */ +/*global Tablets, Script, */ /* eslint indent: ["error", 4, { "outerIIFEBody": 0 }] */ // // spectatorCamera.js @@ -188,7 +188,7 @@ // -tablet: The tablet instance to be modified. var tablet = null; function startup() { - tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); + tablet = Tablets.getTablet("com.highfidelity.interface.tablet.system"); addOrRemoveButton(false, HMD.active); tablet.screenChanged.connect(onTabletScreenChanged); Window.domainChanged.connect(onDomainChanged); diff --git a/unpublishedScripts/marketplace/tablet-raiseHand/tablet-raiseHand.js b/unpublishedScripts/marketplace/tablet-raiseHand/tablet-raiseHand.js index f7702053a4..2f895d5f94 100644 --- a/unpublishedScripts/marketplace/tablet-raiseHand/tablet-raiseHand.js +++ b/unpublishedScripts/marketplace/tablet-raiseHand/tablet-raiseHand.js @@ -20,7 +20,7 @@ var isRaiseHandButtonActive = false; var animHandlerId; - var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); + var tablet = Tablets.getTablet("com.highfidelity.interface.tablet.system"); var button = tablet.addButton({ text: BUTTON_NAME, icon: "icons/tablet-icons/raise-hand-i.svg", From 1a06c6ef118257a97674844425ea445b968ae204 Mon Sep 17 00:00:00 2001 From: amantley Date: Fri, 10 Nov 2017 15:23:17 -0800 Subject: [PATCH 023/148] all entity animation fixes done except play animation --- .../src/RenderableModelEntityItem.cpp | 50 +++++++++++++------ .../src/RenderableModelEntityItem.h | 4 ++ 2 files changed, 38 insertions(+), 16 deletions(-) diff --git a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp index 4ebdfb7b8b..989f019980 100644 --- a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp @@ -1012,24 +1012,33 @@ void ModelEntityRenderer::animate(const TypedEntityPointer& entity) { auto now = usecTimestampNow(); auto interval = now - _lastAnimated; _lastAnimated = now; - //we handle the hold animation property here - //if hold don't advance the current frame. - if (!isHolding) { - float deltaTime = (float)interval / (float)USECS_PER_SECOND; - _currentFrame += (deltaTime * _renderAnimationProperties.getFPS()); + + + //here we implement the looping animation property + //if we have played through the animation once then we hold on the last frame + // if (!isLooping && (_currentFrame > _endAnim)) { + //don't advance current frame!!! + + //}else{ + if( isLooping || ( _currentFrame < _endAnim ) ){ + //else advance the current frame. + //if hold or not playing don't advance the current frame. + if (!isHolding && entity->getAnimationIsPlaying()) { + float deltaTime = (float)interval / (float)USECS_PER_SECOND; + _currentFrame += (deltaTime * _renderAnimationProperties.getFPS()); + } } { //where are we in the currently defined animation segment? - int animationCurrentFrame = (int)(glm::floor(_currentFrame)) % updatedFrameCount; - //this starts us at the offset first frame. - animationCurrentFrame += firstFrame; + int animationCurrentFrame = (int)(glm::floor(_currentFrame - _renderAnimationProperties.getFirstFrame())) % updatedFrameCount; + //this gives us the absolute frame value to use by adding the first frame value. + animationCurrentFrame += _renderAnimationProperties.getFirstFrame(); + - //here we implement the looping animation property - //if we have played through the animation once then we hold on the last frame - if (!isLooping && (_currentFrame > (updatedFrameCount - 1))) { - animationCurrentFrame = updatedFrameCount + firstFrame; - } + + + if (animationCurrentFrame < 0 || animationCurrentFrame > frameCount) { animationCurrentFrame = 0; @@ -1352,10 +1361,19 @@ void ModelEntityRenderer::doRenderUpdateSynchronousTyped(const ScenePointer& sce auto newAnimationProperties = entity->getAnimationProperties(); if (newAnimationProperties != _renderAnimationProperties) { withWriteLock([&] { + if ( (newAnimationProperties.getCurrentFrame() != _renderAnimationProperties.getCurrentFrame()) || (newAnimationProperties.getFirstFrame() != _renderAnimationProperties.getFirstFrame()) || (newAnimationProperties.getLastFrame() != _renderAnimationProperties.getLastFrame()) || (newAnimationProperties.getRunning() && !_renderAnimationProperties.getRunning())) { + _currentFrame = newAnimationProperties.getCurrentFrame(); + _endAnim = (_currentFrame - 1) + ((int)(newAnimationProperties.getLastFrame()) - (int)(newAnimationProperties.getFirstFrame())); + //qCDebug(entitiesrenderer) << "reset current frame" << _endAnim; + } + if ( _renderAnimationProperties.getLoop() && !newAnimationProperties.getLoop()) { + //set the end of animation relative to the current frame + //qCDebug(entitiesrenderer) << "turned off looping"; + float startOffset = newAnimationProperties.getCurrentFrame() - newAnimationProperties.getFirstFrame(); + float posRelativeToStart = (_currentFrame - newAnimationProperties.getFirstFrame()) - startOffset; + _endAnim = (_currentFrame - 1) + (((int)(newAnimationProperties.getLastFrame()) - (int)(newAnimationProperties.getFirstFrame())) - ((int)(glm::floor(posRelativeToStart)) % ((int)newAnimationProperties.getLastFrame() - (int)newAnimationProperties.getFirstFrame()))); + } _renderAnimationProperties = newAnimationProperties; - //if (entity->getAnimationHold()) { - // _currentFrame = _renderAnimationProperties.getCurrentFrame(); - //} }); } } diff --git a/libraries/entities-renderer/src/RenderableModelEntityItem.h b/libraries/entities-renderer/src/RenderableModelEntityItem.h index d33976e356..65b915465c 100644 --- a/libraries/entities-renderer/src/RenderableModelEntityItem.h +++ b/libraries/entities-renderer/src/RenderableModelEntityItem.h @@ -187,6 +187,10 @@ private: float _currentFrame { 0 }; //bool _previousHold{ false }; float _currentFramePropertyValue{ 0 }; + float _firstFramePropertyValue{ 0 }; + float _lastFramePropertyValue{ 0 }; + bool _stopLoop{ false }; + float _endAnim{ 0 }; }; From 3f7a9e97039eb5e5e58d051c0af7384aded17e26 Mon Sep 17 00:00:00 2001 From: amantley Date: Fri, 10 Nov 2017 15:36:57 -0800 Subject: [PATCH 024/148] all entity animation fixes including the animation play reset --- libraries/entities-renderer/src/RenderableModelEntityItem.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp index 989f019980..3ed0bdfc43 100644 --- a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp @@ -1364,6 +1364,7 @@ void ModelEntityRenderer::doRenderUpdateSynchronousTyped(const ScenePointer& sce if ( (newAnimationProperties.getCurrentFrame() != _renderAnimationProperties.getCurrentFrame()) || (newAnimationProperties.getFirstFrame() != _renderAnimationProperties.getFirstFrame()) || (newAnimationProperties.getLastFrame() != _renderAnimationProperties.getLastFrame()) || (newAnimationProperties.getRunning() && !_renderAnimationProperties.getRunning())) { _currentFrame = newAnimationProperties.getCurrentFrame(); _endAnim = (_currentFrame - 1) + ((int)(newAnimationProperties.getLastFrame()) - (int)(newAnimationProperties.getFirstFrame())); + _lastAnimated = 0; //qCDebug(entitiesrenderer) << "reset current frame" << _endAnim; } if ( _renderAnimationProperties.getLoop() && !newAnimationProperties.getLoop()) { From 842cddde88603469e5791ded31682d244010ba9a Mon Sep 17 00:00:00 2001 From: amantley Date: Mon, 13 Nov 2017 11:58:49 -0800 Subject: [PATCH 025/148] Deleted new members of RenderableModelEntity.h that were not necessary to implement the loop,hold,play properties for an entity animationq --- libraries/entities-renderer/src/RenderableModelEntityItem.h | 5 ----- 1 file changed, 5 deletions(-) diff --git a/libraries/entities-renderer/src/RenderableModelEntityItem.h b/libraries/entities-renderer/src/RenderableModelEntityItem.h index 65b915465c..16892ce3e0 100644 --- a/libraries/entities-renderer/src/RenderableModelEntityItem.h +++ b/libraries/entities-renderer/src/RenderableModelEntityItem.h @@ -185,11 +185,6 @@ private: bool _animating { false }; uint64_t _lastAnimated { 0 }; float _currentFrame { 0 }; - //bool _previousHold{ false }; - float _currentFramePropertyValue{ 0 }; - float _firstFramePropertyValue{ 0 }; - float _lastFramePropertyValue{ 0 }; - bool _stopLoop{ false }; float _endAnim{ 0 }; }; From 8f85c7650b88a7e5e91a90f66f4b09d35fa25b02 Mon Sep 17 00:00:00 2001 From: Brad Davis Date: Mon, 13 Nov 2017 14:16:04 -0800 Subject: [PATCH 026/148] Make sure loaded components get the right parent context --- interface/resources/qml/hifi/tablet/WindowRoot.qml | 7 +------ libraries/ui/src/ui/OffscreenQmlSurface.cpp | 9 ++++++--- libraries/ui/src/ui/OffscreenQmlSurface.h | 2 +- 3 files changed, 8 insertions(+), 10 deletions(-) diff --git a/interface/resources/qml/hifi/tablet/WindowRoot.qml b/interface/resources/qml/hifi/tablet/WindowRoot.qml index 0b631326f4..9c027308b8 100644 --- a/interface/resources/qml/hifi/tablet/WindowRoot.qml +++ b/interface/resources/qml/hifi/tablet/WindowRoot.qml @@ -64,8 +64,8 @@ Windows.ScrollingWindow { function loadWebContent(source, url, injectJavaScriptUrl) { loader.load(source, function() { - loader.item.url = url loader.item.scriptURL = injectJavaScriptUrl; + loader.item.url = url; if (loader.item.hasOwnProperty("closeButtonVisible")) { loader.item.closeButtonVisible = false; } @@ -146,11 +146,6 @@ Windows.ScrollingWindow { } function load(newSource, callback) { - if (loader.source == newSource) { - loader.loaded(); - return; - } - if (loader.item) { loader.item.destroy(); loader.item = null; diff --git a/libraries/ui/src/ui/OffscreenQmlSurface.cpp b/libraries/ui/src/ui/OffscreenQmlSurface.cpp index aab89ccd4d..a0c6790b93 100644 --- a/libraries/ui/src/ui/OffscreenQmlSurface.cpp +++ b/libraries/ui/src/ui/OffscreenQmlSurface.cpp @@ -697,13 +697,16 @@ QQuickItem* OffscreenQmlSurface::getRootItem() { return _rootItem; } -QQmlContext* OffscreenQmlSurface::contextForUrl(const QUrl& qmlSource, bool forceNewContext) { +QQmlContext* OffscreenQmlSurface::contextForUrl(const QUrl& qmlSource, QQuickItem* parent, bool forceNewContext) { // Get any whitelist functionality QList callbacks = getQmlWhitelist()->getCallbacksForUrl(qmlSource); // If we have whitelisted content, we must load a new context forceNewContext |= !callbacks.empty(); - QQmlContext* targetContext = _qmlContext; + QQmlContext* targetContext = parent ? QQmlEngine::contextForObject(parent) : _qmlContext; + if (!targetContext) { + targetContext = _qmlContext; + } if (_rootItem && forceNewContext) { targetContext = new QQmlContext(targetContext); } @@ -737,7 +740,7 @@ void OffscreenQmlSurface::loadInternal(const QUrl& qmlSource, bool createNewCont finalQmlSource = _qmlContext->resolvedUrl(qmlSource); } - auto targetContext = contextForUrl(finalQmlSource, createNewContext); + auto targetContext = contextForUrl(finalQmlSource, parent, createNewContext); auto qmlComponent = new QQmlComponent(_qmlContext->engine(), finalQmlSource, QQmlComponent::PreferSynchronous); if (qmlComponent->isLoading()) { connect(qmlComponent, &QQmlComponent::statusChanged, this, [=](QQmlComponent::Status) { diff --git a/libraries/ui/src/ui/OffscreenQmlSurface.h b/libraries/ui/src/ui/OffscreenQmlSurface.h index 2d2eb0811b..62754efe14 100644 --- a/libraries/ui/src/ui/OffscreenQmlSurface.h +++ b/libraries/ui/src/ui/OffscreenQmlSurface.h @@ -130,7 +130,7 @@ protected: private: static QOpenGLContext* getSharedContext(); - QQmlContext* contextForUrl(const QUrl& url, bool forceNewContext = false); + QQmlContext* contextForUrl(const QUrl& url, QQuickItem* parent, bool forceNewContext = false); void loadInternal(const QUrl& qmlSource, bool createNewContext, QQuickItem* parent, const QmlContextObjectCallback& onQmlLoadedCallback); void finishQmlLoad(QQmlComponent* qmlComponent, QQmlContext* qmlContext, QQuickItem* parent, const QmlContextObjectCallback& onQmlLoadedCallback); QPointF mapWindowToUi(const QPointF& sourcePosition, QObject* sourceObject); From d71fd151c5b802c66479ad4fae6c960fc7b7891c Mon Sep 17 00:00:00 2001 From: Brad Davis Date: Mon, 13 Nov 2017 16:45:27 -0800 Subject: [PATCH 027/148] Fixing button model exposure --- interface/resources/qml/hifi/Desktop.qml | 4 +- .../resources/qml/hifi/toolbars/Toolbar.qml | 127 +++-------- .../qml/hifi/toolbars/ToolbarButton.qml | 3 +- interface/src/Application.cpp | 4 + libraries/ui/src/OffscreenUi.cpp | 3 + .../ui/src/ui/TabletScriptingInterface.cpp | 204 ++++++------------ .../ui/src/ui/TabletScriptingInterface.h | 66 ++++-- tests/shared/src/PathUtilsTests.cpp | 1 - 8 files changed, 149 insertions(+), 263 deletions(-) diff --git a/interface/resources/qml/hifi/Desktop.qml b/interface/resources/qml/hifi/Desktop.qml index ea9ec2f6c9..960d3e0649 100644 --- a/interface/resources/qml/hifi/Desktop.qml +++ b/interface/resources/qml/hifi/Desktop.qml @@ -45,11 +45,13 @@ OriginalDesktop.Desktop { Toolbar { id: sysToolbar; objectName: "com.highfidelity.interface.toolbar.system"; + property var tablet: Tablets.getTablet("com.highfidelity.interface.tablet.system"); anchors.horizontalCenter: settings.constrainToolbarToCenterX ? desktop.horizontalCenter : undefined; // Literal 50 is overwritten by settings from previous session, and sysToolbar.x comes from settings when not constrained. x: sysToolbar.x y: 50 - shown: true + buttonModel: tablet.buttons; + shown: tablet.toolbarMode; } Settings { diff --git a/interface/resources/qml/hifi/toolbars/Toolbar.qml b/interface/resources/qml/hifi/toolbars/Toolbar.qml index 01aa29f665..ff7e835690 100644 --- a/interface/resources/qml/hifi/toolbars/Toolbar.qml +++ b/interface/resources/qml/hifi/toolbars/Toolbar.qml @@ -11,6 +11,8 @@ Window { horizontalSpacers: horizontal verticalSpacers: !horizontal } + property var tabletProxy; + property var buttonModel: ListModel {} hideBackground: true resizable: false destroyOnCloseButton: false @@ -23,24 +25,32 @@ Window { activator: Item {} property bool horizontal: true property real buttonSize: 50; - property var buttons: [] - property var container: horizontal ? row : column Settings { category: "toolbar/" + window.objectName property alias x: window.x property alias y: window.y } + + Component { + id: buttonComponent + ToolbarButton { + id: toolbarButton + property var proxy: modelData; + onClicked: proxy.clicked() + Component.onCompleted: updateProperties() - onHorizontalChanged: { - var newParent = horizontal ? row : column; - for (var i in buttons) { - var child = buttons[i]; - child.parent = newParent; - if (horizontal) { - child.y = 0 - } else { - child.x = 0 + Connections { + target: proxy; + onPropertiesChanged: updateProperties(); + } + + function updateProperties() { + Object.keys(proxy.properties).forEach(function (key) { + if (toolbarButton[key] !== proxy.properties[key]) { + toolbarButton[key] = proxy.properties[key]; + } + }); } } } @@ -52,97 +62,22 @@ Window { Row { id: row + visible: window.horizontal spacing: 6 + Repeater { + model: buttonModel + delegate: buttonComponent + } } - + Column { id: column + visible: !window.horizontal spacing: 6 - } - - Component { id: toolbarButtonBuilder; ToolbarButton { } } - } - - - function findButtonIndex(name) { - if (!name) { - return -1; - } - - for (var i in buttons) { - var child = buttons[i]; - if (child.objectName === name) { - return i; + Repeater { + model: buttonModel + delegate: buttonComponent } } - return -1; - } - - function findButton(name) { - var index = findButtonIndex(name); - if (index < 0) { - return; - } - return buttons[index]; - } - - function sortButtons() { - var children = []; - for (var i = 0; i < container.children.length; i++) { - children[i] = container.children[i]; - } - - children.sort(function (a, b) { - if (a.sortOrder === b.sortOrder) { - // subsort by stableOrder, because JS sort is not stable in qml. - return a.stableOrder - b.stableOrder; - } else { - return a.sortOrder - b.sortOrder; - } - }); - - container.children = children; - } - - function addButton(properties) { - properties = properties || {} - - // If a name is specified, then check if there's an existing button with that name - // and return it if so. This will allow multiple clients to listen to a single button, - // and allow scripts to be idempotent so they don't duplicate buttons if they're reloaded - var result = findButton(properties.objectName); - if (result) { - for (var property in properties) { - result[property] = properties[property]; - } - return result; - } - properties.toolbar = this; - properties.opacity = 0; - result = toolbarButtonBuilder.createObject(container, properties); - buttons.push(result); - - result.opacity = 1; - - sortButtons(); - - fadeIn(null); - - return result; - } - - function removeButton(name) { - var index = findButtonIndex(name); - if (index < -1) { - console.warn("Tried to remove non-existent button " + name); - return; - } - - buttons[index].destroy(); - buttons.splice(index, 1); - - if (buttons.length === 0) { - fadeOut(null); - } } } diff --git a/interface/resources/qml/hifi/toolbars/ToolbarButton.qml b/interface/resources/qml/hifi/toolbars/ToolbarButton.qml index 63149ad23b..3c64d4bf2e 100644 --- a/interface/resources/qml/hifi/toolbars/ToolbarButton.qml +++ b/interface/resources/qml/hifi/toolbars/ToolbarButton.qml @@ -25,7 +25,8 @@ StateImage { property string activeHoverIcon: button.activeIcon property int sortOrder: 100 - property int stableSortOrder: 0 + property int stableOrder: 0 + property var uuid; signal clicked() diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index d388128709..2d7ae29379 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -2234,6 +2234,10 @@ void Application::initializeUi() { qmlRegisterType("Hifi", 1, 0, "ResourceImageItem"); qmlRegisterType("Hifi", 1, 0, "Preference"); + { + auto tabletScriptingInterface = DependencyManager::get(); + tabletScriptingInterface->getTablet(SYSTEM_TABLET); + } auto offscreenUi = DependencyManager::get(); offscreenUi->create(); diff --git a/libraries/ui/src/OffscreenUi.cpp b/libraries/ui/src/OffscreenUi.cpp index 252c08a1f0..d8a2c2c3cb 100644 --- a/libraries/ui/src/OffscreenUi.cpp +++ b/libraries/ui/src/OffscreenUi.cpp @@ -106,6 +106,9 @@ void OffscreenUi::create() { myContext->setContextProperty("offscreenFlags", offscreenFlags = new OffscreenFlags()); myContext->setContextProperty("fileDialogHelper", new FileDialogHelper()); auto tabletScriptingInterface = DependencyManager::get(); + qRegisterMetaType(); + qRegisterMetaType(); + myContext->setContextProperty("Tablets", tabletScriptingInterface.data()); TabletProxy* tablet = tabletScriptingInterface->getTablet("com.highfidelity.interface.tablet.system"); myContext->engine()->setObjectOwnership(tablet, QQmlEngine::CppOwnership); } diff --git a/libraries/ui/src/ui/TabletScriptingInterface.cpp b/libraries/ui/src/ui/TabletScriptingInterface.cpp index 93d493539e..f006547e2b 100644 --- a/libraries/ui/src/ui/TabletScriptingInterface.cpp +++ b/libraries/ui/src/ui/TabletScriptingInterface.cpp @@ -32,6 +32,14 @@ const QString SYSTEM_TOOLBAR = "com.highfidelity.interface.toolbar.system"; const QString SYSTEM_TABLET = "com.highfidelity.interface.tablet.system"; const QString TabletScriptingInterface::QML = "hifi/tablet/TabletRoot.qml"; +static QString getUsername() { + QString username = "Unknown user"; + auto accountManager = DependencyManager::get(); + if (accountManager->isLoggedIn()) { + username = accountManager->getAccountInfo().getUsername(); + } + return username; +} static Setting::Handle tabletSoundsButtonClick("TabletSounds", QStringList { "/sounds/Button06.wav", "/sounds/Button04.wav", @@ -39,6 +47,51 @@ static Setting::Handle tabletSoundsButtonClick("TabletSounds", QStr "/sounds/Tab01.wav", "/sounds/Tab02.wav" }); +TabletButtonListModel::TabletButtonListModel() { + +} + +TabletButtonListModel::~TabletButtonListModel() { + +} + +enum ButtonDeviceRole { + ButtonProxyRole = Qt::UserRole, +}; + +QHash TabletButtonListModel::_roles{ + { ButtonProxyRole, "buttonProxy" }, +}; + +Qt::ItemFlags TabletButtonListModel::_flags{ Qt::ItemIsSelectable | Qt::ItemIsEnabled }; + +QVariant TabletButtonListModel::data(const QModelIndex& index, int role) const { + if (!index.isValid() || index.row() >= rowCount() || role != ButtonProxyRole) { + return QVariant(); + } + + return QVariant::fromValue(_buttons.at(index.row()).data()); +} + +TabletButtonProxy* TabletButtonListModel::addButton(const QVariant& properties) { + auto tabletButtonProxy = QSharedPointer(new TabletButtonProxy(properties.toMap())); + beginResetModel(); + _buttons.push_back(tabletButtonProxy); + endResetModel(); + return tabletButtonProxy.data(); +} + +void TabletButtonListModel::removeButton(TabletButtonProxy* button) { + auto itr = std::find(_buttons.begin(), _buttons.end(), button); + if (itr == _buttons.end()) { + qCWarning(uiLogging) << "TabletProxy::removeButton() could not find button " << button; + return; + } + beginResetModel(); + _buttons.erase(itr); + endResetModel(); +} + TabletScriptingInterface::TabletScriptingInterface() { qmlRegisterType("TabletScriptingInterface", 1, 0, "TabletEnums"); } @@ -232,15 +285,6 @@ TabletProxy::~TabletProxy() { disconnect(this, &TabletProxy::tabletShownChanged, this, &TabletProxy::onTabletShown); } -QVariant TabletProxy::getButtons() { - Q_ASSERT(QThread::currentThread() == qApp->thread()); - QVariantList result; - for (const auto& button : _tabletButtonProxies) { - result.push_back(QVariant::fromValue(button.data())); - } - return result; -} - void TabletProxy::setToolbarMode(bool toolbarMode) { if (QThread::currentThread() != thread()) { QMetaObject::invokeMethod(this, "setToolbarMode", Q_ARG(bool, toolbarMode)); @@ -256,8 +300,6 @@ void TabletProxy::setToolbarMode(bool toolbarMode) { auto offscreenUi = DependencyManager::get(); if (toolbarMode) { - addButtonsToToolbar(); - // create new desktop window auto tabletRootWindow = new TabletRootWindow(); tabletRootWindow->initQml(QVariantMap()); @@ -272,11 +314,7 @@ void TabletProxy::setToolbarMode(bool toolbarMode) { // forward qml surface events to interface js connect(tabletRootWindow, &QmlWindowClass::fromQml, this, &TabletProxy::fromQml); } else { - removeButtonsFromToolbar(); - - if (_currentPathLoaded == TABLET_HOME_SOURCE_URL) { - // Tablet QML now pulls buttons from Tablet proxy - } else { + if (_currentPathLoaded != TABLET_HOME_SOURCE_URL) { loadHomeScreen(true); } //check if running scripts window opened and save it for reopen in Tablet @@ -290,44 +328,8 @@ void TabletProxy::setToolbarMode(bool toolbarMode) { _desktopWindow = nullptr; } } -} -#if 0 -static void addButtonProxyToQmlTablet(QQuickItem* qmlTablet, TabletButtonProxy* buttonProxy) { - Q_ASSERT(QThread::currentThread() == qApp->thread()); - if (buttonProxy == NULL){ - qCCritical(uiLogging) << __FUNCTION__ << "buttonProxy is NULL"; - return; - } - - QVariant resultVar; - qCDebug(uiLogging) << "QQQ" << __FUNCTION__ << "adding button " << buttonProxy; - bool hasResult = QMetaObject::invokeMethod(qmlTablet, "addButtonProxy", Qt::DirectConnection, - Q_RETURN_ARG(QVariant, resultVar), Q_ARG(QVariant, buttonProxy->getProperties())); - if (!hasResult) { - qCWarning(uiLogging) << __FUNCTION__ << " has no result"; - return; - } - - QObject* qmlButton = qvariant_cast(resultVar); - if (!qmlButton) { - qCWarning(uiLogging) << "TabletScriptingInterface addButtonProxyToQmlTablet result not a QObject"; - return; - } - QObject::connect(qmlButton, SIGNAL(clicked()), buttonProxy, SLOT(clickedSlot())); - buttonProxy->setQmlButton(qobject_cast(qmlButton)); -} -#endif - - -static QString getUsername() { - QString username = "Unknown user"; - auto accountManager = DependencyManager::get(); - if (accountManager->isLoggedIn()) { - return accountManager->getAccountInfo().getUsername(); - } else { - return "Unknown user"; - } + emit toolbarModeChanged(); } void TabletProxy::initialScreen(const QVariant& url) { @@ -702,20 +704,7 @@ TabletButtonProxy* TabletProxy::addButton(const QVariant& properties) { return result; } - auto tabletButtonProxy = QSharedPointer(new TabletButtonProxy(properties.toMap())); - _tabletButtonProxies.push_back(tabletButtonProxy); - if (!_toolbarMode && _qmlTabletRoot) { - // Tablet now pulls buttons from the tablet proxy - // FIXME emit a signal so that the tablet can refresh buttons if they change - } else if (_toolbarMode) { - auto toolbarProxy = DependencyManager::get()->getSystemToolbarProxy(); - if (toolbarProxy) { - // copy properties from tablet button proxy to toolbar button proxy. - auto toolbarButtonProxy = toolbarProxy->addButton(tabletButtonProxy->getProperties()); - tabletButtonProxy->setToolbarButtonProxy(toolbarButtonProxy); - } - } - return tabletButtonProxy.data(); + return _buttons.addButton(properties); } bool TabletProxy::onHomeScreen() { @@ -734,35 +723,7 @@ void TabletProxy::removeButton(TabletButtonProxy* tabletButtonProxy) { return; } - auto tablet = getQmlTablet(); - if (!tablet) { - qCCritical(uiLogging) << "Could not find tablet in TabletRoot.qml"; - } - - QSharedPointer buttonProxy; - { - auto iter = std::find(_tabletButtonProxies.begin(), _tabletButtonProxies.end(), tabletButtonProxy); - if (iter == _tabletButtonProxies.end()) { - qCWarning(uiLogging) << "TabletProxy::removeButton() could not find button " << tabletButtonProxy; - return; - } - buttonProxy = *iter; - _tabletButtonProxies.erase(iter); - } - - if (!_toolbarMode && _qmlTabletRoot) { - buttonProxy->setQmlButton(nullptr); - if (tablet) { - QMetaObject::invokeMethod(tablet, "removeButtonProxy", Qt::AutoConnection, Q_ARG(QVariant, buttonProxy->getProperties())); - } - } else if (_toolbarMode) { - auto toolbarProxy = DependencyManager::get()->getSystemToolbarProxy(); - // remove button from toolbarProxy - if (toolbarProxy) { - toolbarProxy->removeButton(buttonProxy->getUuid().toString()); - buttonProxy->setToolbarButtonProxy(nullptr); - } - } + _buttons.removeButton(tabletButtonProxy); } void TabletProxy::emitScriptEvent(const QVariant& msg) { @@ -801,27 +762,6 @@ void TabletProxy::desktopWindowClosed() { gotoHomeScreen(); } -void TabletProxy::addButtonsToToolbar() { - Q_ASSERT(QThread::currentThread() == thread()); - ToolbarProxy* toolbarProxy = DependencyManager::get()->getSystemToolbarProxy(); - for (auto& buttonProxy : _tabletButtonProxies) { - // copy properties from tablet button proxy to toolbar button proxy. - buttonProxy->setToolbarButtonProxy(toolbarProxy->addButton(buttonProxy->getProperties())); - } - - // make the toolbar visible - toolbarProxy->writeProperty("visible", QVariant(true)); -} - -void TabletProxy::removeButtonsFromToolbar() { - Q_ASSERT(QThread::currentThread() == thread()); - ToolbarProxy* toolbarProxy = DependencyManager::get()->getSystemToolbarProxy(); - for (auto& buttonProxy : _tabletButtonProxies) { - // remove button from toolbarProxy - toolbarProxy->removeButton(buttonProxy->getUuid().toString()); - buttonProxy->setToolbarButtonProxy(nullptr); - } -} QQuickItem* TabletProxy::getQmlTablet() const { if (!_qmlTabletRoot) { @@ -891,25 +831,6 @@ TabletButtonProxy::~TabletButtonProxy() { } } -void TabletButtonProxy::setQmlButton(QQuickItem* qmlButton) { - Q_ASSERT(QThread::currentThread() == qApp->thread()); - if (_qmlButton) { - QObject::disconnect(_qmlButton, &QQuickItem::destroyed, this, nullptr); - } - _qmlButton = qmlButton; - if (_qmlButton) { - QObject::connect(_qmlButton, &QQuickItem::destroyed, this, [this] { _qmlButton = nullptr; }); - } -} - -void TabletButtonProxy::setToolbarButtonProxy(QObject* toolbarButtonProxy) { - Q_ASSERT(QThread::currentThread() == thread()); - _toolbarButtonProxy = toolbarButtonProxy; - if (_toolbarButtonProxy) { - QObject::connect(_toolbarButtonProxy, SIGNAL(clicked()), this, SLOT(clickedSlot())); - } -} - QVariantMap TabletButtonProxy::getProperties() { if (QThread::currentThread() != thread()) { QVariantMap result; @@ -926,20 +847,19 @@ void TabletButtonProxy::editProperties(const QVariantMap& properties) { return; } + bool changed = false; QVariantMap::const_iterator iter = properties.constBegin(); while (iter != properties.constEnd()) { const auto& key = iter.key(); const auto& value = iter.value(); if (!_properties.contains(key) || _properties[key] != value) { - _properties[iter.key()] = iter.value(); - if (_qmlButton) { - QMetaObject::invokeMethod(_qmlButton, "changeProperty", Qt::AutoConnection, Q_ARG(QVariant, QVariant(iter.key())), Q_ARG(QVariant, iter.value())); - } + _properties[key] = value; + changed = true; } ++iter; } - if (_toolbarButtonProxy) { - QMetaObject::invokeMethod(_toolbarButtonProxy, "editProperties", Qt::AutoConnection, Q_ARG(QVariantMap, properties)); + if (changed) { + emit propertiesChanged(); } } diff --git a/libraries/ui/src/ui/TabletScriptingInterface.h b/libraries/ui/src/ui/TabletScriptingInterface.h index e7dc5ede1f..718d5123db 100644 --- a/libraries/ui/src/ui/TabletScriptingInterface.h +++ b/libraries/ui/src/ui/TabletScriptingInterface.h @@ -12,13 +12,16 @@ #include #include -#include -#include +#include +#include +#include +#include + #include -#include -#include -#include -#include +#include +#include + +#include #include #include @@ -90,6 +93,31 @@ protected: bool _toolbarMode { false }; }; +class TabletButtonListModel : public QAbstractListModel { + Q_OBJECT + +public: + TabletButtonListModel(); + ~TabletButtonListModel(); + + int rowCount(const QModelIndex& parent = QModelIndex()) const override { Q_UNUSED(parent); return (int)_buttons.size(); } + QHash roleNames() const override { return _roles; } + Qt::ItemFlags flags(const QModelIndex& index) const override { return _flags; } + QVariant data(const QModelIndex& index, int role) const override; + + +protected: + friend class TabletProxy; + TabletButtonProxy* addButton(const QVariant& properties); + void removeButton(TabletButtonProxy* button); + using List = std::list>; + static QHash _roles; + static Qt::ItemFlags _flags; + std::vector> _buttons; +}; + +Q_DECLARE_METATYPE(TabletButtonListModel*); + /**jsdoc * @class TabletProxy * @property name {string} READ_ONLY: name of this tablet @@ -99,9 +127,10 @@ protected: class TabletProxy : public QObject { Q_OBJECT Q_PROPERTY(QString name READ getName) - Q_PROPERTY(bool toolbarMode READ getToolbarMode WRITE setToolbarMode) + Q_PROPERTY(bool toolbarMode READ getToolbarMode WRITE setToolbarMode NOTIFY toolbarModeChanged) Q_PROPERTY(bool landscape READ getLandscape WRITE setLandscape) Q_PROPERTY(bool tabletShown MEMBER _tabletShown NOTIFY tabletShownChanged) + Q_PROPERTY(TabletButtonListModel* buttons READ getButtons CONSTANT) public: TabletProxy(QObject* parent, const QString& name); ~TabletProxy(); @@ -196,8 +225,6 @@ public: Q_INVOKABLE bool isPathLoaded(const QVariant& path); - Q_INVOKABLE QVariant getButtons(); - QQuickItem* getTabletRoot() const { return _qmlTabletRoot; } OffscreenQmlSurface* getTabletSurface(); @@ -206,6 +233,7 @@ public: QQuickItem* getQmlMenu() const; + TabletButtonListModel* getButtons() { return &_buttons; } signals: /**jsdoc * Signaled when this tablet receives an event from the html/js embedded in the tablet @@ -238,20 +266,20 @@ signals: */ void tabletShownChanged(); + void toolbarModeChanged(); + protected slots: void desktopWindowClosed(); void emitWebEvent(const QVariant& msg); void onTabletShown(); + protected: void loadHomeScreen(bool forceOntoHomeScreen); - void addButtonsToToolbar(); - void removeButtonsFromToolbar(); bool _initialScreen { false }; QVariant _initialPath { "" }; QVariant _currentPathLoaded { "" }; QString _name; - std::vector> _tabletButtonProxies; QQuickItem* _qmlTabletRoot { nullptr }; OffscreenQmlSurface* _qmlOffscreenSurface { nullptr }; QmlWindowClass* _desktopWindow { nullptr }; @@ -262,6 +290,8 @@ protected: State _state { State::Uninitialized }; bool _landscape { false }; bool _showRunningScripts { false }; + + TabletButtonListModel _buttons; }; Q_DECLARE_METATYPE(TabletProxy*); @@ -273,15 +303,11 @@ Q_DECLARE_METATYPE(TabletProxy*); class TabletButtonProxy : public QObject { Q_OBJECT Q_PROPERTY(QUuid uuid READ getUuid) + Q_PROPERTY(QVariantMap properties READ getProperties NOTIFY propertiesChanged) public: TabletButtonProxy(const QVariantMap& properties); ~TabletButtonProxy(); - - Q_INVOKABLE void setQmlButton(QQuickItem* qmlButton); - - void setToolbarButtonProxy(QObject* toolbarButtonProxy); - QUuid getUuid() const { return _uuid; } /**jsdoc @@ -298,9 +324,6 @@ public: */ Q_INVOKABLE void editProperties(const QVariantMap& properties); -public slots: - void clickedSlot() { emit clicked(); } - signals: /**jsdoc * Signaled when this button has been clicked on by the user. @@ -308,12 +331,11 @@ signals: * @returns {Signal} */ void clicked(); + void propertiesChanged(); protected: QUuid _uuid; int _stableOrder; - QQuickItem* _qmlButton { nullptr }; - QObject* _toolbarButtonProxy { nullptr }; QVariantMap _properties; }; diff --git a/tests/shared/src/PathUtilsTests.cpp b/tests/shared/src/PathUtilsTests.cpp index fc31d475d0..1c445908f7 100644 --- a/tests/shared/src/PathUtilsTests.cpp +++ b/tests/shared/src/PathUtilsTests.cpp @@ -13,7 +13,6 @@ #include - QTEST_MAIN(PathUtilsTests) void PathUtilsTests::testPathUtils() { From 8f855c6c9568dc921783914818a859fcea3baeff Mon Sep 17 00:00:00 2001 From: Zach Fox Date: Wed, 15 Nov 2017 09:21:10 -0800 Subject: [PATCH 028/148] Update QUrls --- interface/src/Application.cpp | 42 +++++++++++++++++------------------ 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 60182ce5b6..76f8cc1505 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -2234,27 +2234,27 @@ void Application::initializeUi() { context->setContextProperty("Commerce", new QmlCommerce()); }; OffscreenQmlSurface::addWhitelistContextHandler({ - QUrl{ "qrc:///qml/hifi/commerce/checkout/Checkout.qml" }, - QUrl{ "qrc:///qml/hifi/commerce/common/CommerceLightbox.qml" }, - QUrl{ "qrc:///qml/hifi/commerce/common/EmulatedMarketplaceHeader.qml" }, - QUrl{ "qrc:///qml/hifi/commerce/common/FirstUseTutorial.qml" }, - QUrl{ "qrc:///qml/hifi/commerce/common/SortableListModel.qml" }, - QUrl{ "qrc:///qml/hifi/commerce/inspectionCertificate/InspectionCertificate.qml" }, - QUrl{ "qrc:///qml/hifi/commerce/purchases/PurchasedItem.qml" }, - QUrl{ "qrc:///qml/hifi/commerce/purchases/Purchases.qml" }, - QUrl{ "qrc:///qml/hifi/commerce/wallet/Help.qml" }, - QUrl{ "qrc:///qml/hifi/commerce/wallet/NeedsLogIn.qml" }, - QUrl{ "qrc:///qml/hifi/commerce/wallet/PassphraseChange.qml" }, - QUrl{ "qrc:///qml/hifi/commerce/wallet/PassphraseModal.qml" }, - QUrl{ "qrc:///qml/hifi/commerce/wallet/PassphraseSelection.qml" }, - QUrl{ "qrc:///qml/hifi/commerce/wallet/Security.qml" }, - QUrl{ "qrc:///qml/hifi/commerce/wallet/SecurityImageChange.qml" }, - QUrl{ "qrc:///qml/hifi/commerce/wallet/SecurityImageModel.qml" }, - QUrl{ "qrc:///qml/hifi/commerce/wallet/SecurityImageSelection.qml" }, - QUrl{ "qrc:///qml/hifi/commerce/wallet/SendMoney.qml" }, - QUrl{ "qrc:///qml/hifi/commerce/wallet/Wallet.qml" }, - QUrl{ "qrc:///qml/hifi/commerce/wallet/WalletHome.qml" }, - QUrl{ "qrc:///qml/hifi/commerce/wallet/WalletSetup.qml" }, + QUrl{ "hifi/commerce/checkout/Checkout.qml" }, + QUrl{ "hifi/commerce/common/CommerceLightbox.qml" }, + QUrl{ "hifi/commerce/common/EmulatedMarketplaceHeader.qml" }, + QUrl{ "hifi/commerce/common/FirstUseTutorial.qml" }, + QUrl{ "hifi/commerce/common/SortableListModel.qml" }, + QUrl{ "hifi/commerce/inspectionCertificate/InspectionCertificate.qml" }, + QUrl{ "hifi/commerce/purchases/PurchasedItem.qml" }, + QUrl{ "hifi/commerce/purchases/Purchases.qml" }, + QUrl{ "hifi/commerce/wallet/Help.qml" }, + QUrl{ "hifi/commerce/wallet/NeedsLogIn.qml" }, + QUrl{ "hifi/commerce/wallet/PassphraseChange.qml" }, + QUrl{ "hifi/commerce/wallet/PassphraseModal.qml" }, + QUrl{ "hifi/commerce/wallet/PassphraseSelection.qml" }, + QUrl{ "hifi/commerce/wallet/Security.qml" }, + QUrl{ "hifi/commerce/wallet/SecurityImageChange.qml" }, + QUrl{ "hifi/commerce/wallet/SecurityImageModel.qml" }, + QUrl{ "hifi/commerce/wallet/SecurityImageSelection.qml" }, + QUrl{ "hifi/commerce/wallet/SendMoney.qml" }, + QUrl{ "hifi/commerce/wallet/Wallet.qml" }, + QUrl{ "hifi/commerce/wallet/WalletHome.qml" }, + QUrl{ "hifi/commerce/wallet/WalletSetup.qml" }, }, callback); qmlRegisterType("Hifi", 1, 0, "ResourceImageItem"); qmlRegisterType("Hifi", 1, 0, "Preference"); From 64592d66d7aa6e08f05d21f2f40d824a6bd9a50c Mon Sep 17 00:00:00 2001 From: Brad Davis Date: Wed, 15 Nov 2017 11:46:56 -0800 Subject: [PATCH 029/148] Fix relative path for tablet login dialog --- scripts/system/libraries/accountUtils.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/system/libraries/accountUtils.js b/scripts/system/libraries/accountUtils.js index 6df0aa3a87..69092b30fc 100644 --- a/scripts/system/libraries/accountUtils.js +++ b/scripts/system/libraries/accountUtils.js @@ -10,7 +10,7 @@ openLoginWindow = function openLoginWindow() { || (!HMD.active && Settings.getValue("desktopTabletBecomesToolbar", true))) { Menu.triggerOption("Login / Sign Up"); } else { - tablet.loadQMLOnTop("../../dialogs/TabletLoginDialog.qml"); + tablet.loadQMLOnTop("dialogs/TabletLoginDialog.qml"); HMD.openTablet(); } }; From 1167be410250d38979dd78a6b3d9983f472a0fa9 Mon Sep 17 00:00:00 2001 From: Brad Davis Date: Wed, 15 Nov 2017 11:50:11 -0800 Subject: [PATCH 030/148] Reverting tablet API rename, cleaning up duplicated code --- interface/resources/qml/controls-uit/Button.qml | 4 ++-- interface/resources/qml/controls-uit/CheckBox.qml | 4 ++-- .../resources/qml/controls-uit/CheckBoxQQC2.qml | 4 ++-- interface/resources/qml/controls-uit/GlyphButton.qml | 4 ++-- interface/resources/qml/controls-uit/Key.qml | 4 ++-- interface/resources/qml/controls-uit/RadioButton.qml | 4 ++-- .../qml/dialogs/TabletConnectionFailureDialog.qml | 2 +- .../resources/qml/dialogs/TabletLoginDialog.qml | 4 ++-- .../qml/dialogs/preferences/ButtonPreference.qml | 4 ++-- .../qml/dialogs/preferences/CheckBoxPreference.qml | 4 ++-- interface/resources/qml/hifi/Card.qml | 6 +++--- interface/resources/qml/hifi/Desktop.qml | 2 +- interface/resources/qml/hifi/audio/MicBar.qml | 4 ++-- .../resources/qml/hifi/tablet/NewEntityButton.qml | 4 ++-- .../qml/hifi/tablet/TabletAddressDialog.qml | 4 ++-- .../qml/hifi/tablet/TabletAttachmentsDialog.qml | 2 +- interface/resources/qml/hifi/tablet/TabletButton.qml | 4 ++-- interface/resources/qml/hifi/tablet/TabletHome.qml | 2 +- .../resources/qml/hifi/tablet/TabletMenuView.qml | 4 ++-- .../tablet/tabletWindows/TabletPreferencesDialog.qml | 4 ++-- interface/src/Application.cpp | 3 +-- libraries/ui/src/OffscreenUi.cpp | 6 ------ libraries/ui/src/ui/OffscreenQmlSurface.cpp | 4 +++- scripts/developer/EZrecord.js | 2 +- scripts/developer/inputRecording.js | 2 +- scripts/developer/tests/dynamics/dynamicsTests.js | 2 +- scripts/developer/tests/puck-attach.js | 2 +- scripts/developer/tests/sliderTestMain.js | 2 +- scripts/developer/tests/tabletEventBridgeTest.js | 2 +- scripts/developer/tests/tabletTest.js | 2 +- scripts/developer/utilities/audio/stats.js | 2 +- scripts/developer/utilities/render/luci.js | 2 +- .../utilities/render/photobooth/photoboothApp.js | 2 +- scripts/system/audio.js | 2 +- scripts/system/audioScope.js | 2 +- scripts/system/bubble.js | 2 +- scripts/system/chat.js | 2 +- scripts/system/commerce/wallet.js | 2 +- scripts/system/controllers/godView.js | 2 +- scripts/system/edit.js | 12 ++++++------ scripts/system/fingerPaint.js | 2 +- scripts/system/generalSettings.js | 2 +- scripts/system/goto.js | 2 +- scripts/system/help.js | 2 +- scripts/system/hmd.js | 2 +- scripts/system/libraries/WebTablet.js | 4 ++-- scripts/system/libraries/entityList.js | 2 +- scripts/system/libraries/gridTool.js | 2 +- scripts/system/libraries/utils.js | 2 +- scripts/system/marketplaces/marketplace.js | 2 +- scripts/system/marketplaces/marketplaces.js | 2 +- scripts/system/menu.js | 2 +- scripts/system/mod.js | 2 +- scripts/system/notifications.js | 2 +- scripts/system/pal.js | 2 +- .../system/particle_explorer/particleExplorerTool.js | 2 +- scripts/system/snapshot.js | 2 +- scripts/system/tablet-goto.js | 2 +- scripts/system/tablet-ui/tabletUI.js | 4 ++-- scripts/system/tablet-users.js | 2 +- unpublishedScripts/marketplace/blocks/blocksApp.js | 2 +- .../marketplace/camera-move/app-camera-move.js | 4 ++-- unpublishedScripts/marketplace/clap/clapApp.js | 2 +- .../app-doppleganger-attachments.js | 2 +- .../dist/app-doppleganger-marketplace.js | 2 +- .../doppleganger-mirror/app-doppleganger.js | 2 +- .../marketplace/emoji-tablet/emojiTablet.js | 2 +- .../marketplace/laser/laserPointerApp.js | 2 +- unpublishedScripts/marketplace/record/record.js | 4 ++-- unpublishedScripts/marketplace/shapes/shapes.js | 2 +- .../marketplace/skyboxChanger/skyboxchanger.js | 2 +- .../marketplace/spectator-camera/spectatorCamera.js | 2 +- .../marketplace/tablet-raiseHand/tablet-raiseHand.js | 2 +- 73 files changed, 100 insertions(+), 105 deletions(-) diff --git a/interface/resources/qml/controls-uit/Button.qml b/interface/resources/qml/controls-uit/Button.qml index a305bea8dc..02c6181952 100644 --- a/interface/resources/qml/controls-uit/Button.qml +++ b/interface/resources/qml/controls-uit/Button.qml @@ -29,12 +29,12 @@ Original.Button { onHoveredChanged: { if (hovered) { - Tablets.playSound(TabletEnums.ButtonHover); + Tablet.playSound(TabletEnums.ButtonHover); } } onClicked: { - Tablets.playSound(TabletEnums.ButtonClick); + Tablet.playSound(TabletEnums.ButtonClick); } style: ButtonStyle { diff --git a/interface/resources/qml/controls-uit/CheckBox.qml b/interface/resources/qml/controls-uit/CheckBox.qml index 37bc936aa1..e60f646327 100644 --- a/interface/resources/qml/controls-uit/CheckBox.qml +++ b/interface/resources/qml/controls-uit/CheckBox.qml @@ -31,12 +31,12 @@ Original.CheckBox { activeFocusOnPress: true onClicked: { - Tablets.playSound(TabletEnums.ButtonClick); + Tablet.playSound(TabletEnums.ButtonClick); } // TODO: doesnt works for QQC1. check with QQC2 // onHovered: { -// Tablets.playSound(TabletEnums.ButtonHover); +// Tablet.playSound(TabletEnums.ButtonHover); // } style: CheckBoxStyle { diff --git a/interface/resources/qml/controls-uit/CheckBoxQQC2.qml b/interface/resources/qml/controls-uit/CheckBoxQQC2.qml index 404d83ebd2..12b8c80003 100644 --- a/interface/resources/qml/controls-uit/CheckBoxQQC2.qml +++ b/interface/resources/qml/controls-uit/CheckBoxQQC2.qml @@ -36,12 +36,12 @@ CheckBox { hoverEnabled: true onClicked: { - Tablets.playSound(TabletEnums.ButtonClick); + Tablet.playSound(TabletEnums.ButtonClick); } onHoveredChanged: { if (hovered) { - Tablets.playSound(TabletEnums.ButtonHover); + Tablet.playSound(TabletEnums.ButtonHover); } } diff --git a/interface/resources/qml/controls-uit/GlyphButton.qml b/interface/resources/qml/controls-uit/GlyphButton.qml index d225c8e1d1..9c23171ee1 100644 --- a/interface/resources/qml/controls-uit/GlyphButton.qml +++ b/interface/resources/qml/controls-uit/GlyphButton.qml @@ -27,12 +27,12 @@ Original.Button { onHoveredChanged: { if (hovered) { - Tablets.playSound(TabletEnums.ButtonHover); + Tablet.playSound(TabletEnums.ButtonHover); } } onClicked: { - Tablets.playSound(TabletEnums.ButtonClick); + Tablet.playSound(TabletEnums.ButtonClick); } style: ButtonStyle { diff --git a/interface/resources/qml/controls-uit/Key.qml b/interface/resources/qml/controls-uit/Key.qml index 3ec579a4eb..54834549ae 100644 --- a/interface/resources/qml/controls-uit/Key.qml +++ b/interface/resources/qml/controls-uit/Key.qml @@ -35,13 +35,13 @@ Item { onContainsMouseChanged: { if (containsMouse) { - Tablets.playSound(TabletEnums.ButtonHover); + Tablet.playSound(TabletEnums.ButtonHover); } } onClicked: { mouse.accepted = true; - Tablets.playSound(TabletEnums.ButtonClick); + Tablet.playSound(TabletEnums.ButtonClick); webEntity.synthesizeKeyPress(glyph); webEntity.synthesizeKeyPress(glyph, mirrorText); diff --git a/interface/resources/qml/controls-uit/RadioButton.qml b/interface/resources/qml/controls-uit/RadioButton.qml index da4e944f35..a818be072b 100644 --- a/interface/resources/qml/controls-uit/RadioButton.qml +++ b/interface/resources/qml/controls-uit/RadioButton.qml @@ -30,12 +30,12 @@ Original.RadioButton { readonly property int checkRadius: 2 onClicked: { - Tablets.playSound(TabletEnums.ButtonClick); + Tablet.playSound(TabletEnums.ButtonClick); } // TODO: doesnt works for QQC1. check with QQC2 // onHovered: { -// Tablets.playSound(TabletEnums.ButtonHover); +// Tablet.playSound(TabletEnums.ButtonHover); // } style: RadioButtonStyle { diff --git a/interface/resources/qml/dialogs/TabletConnectionFailureDialog.qml b/interface/resources/qml/dialogs/TabletConnectionFailureDialog.qml index 750ed0edd4..6d2ff36550 100644 --- a/interface/resources/qml/dialogs/TabletConnectionFailureDialog.qml +++ b/interface/resources/qml/dialogs/TabletConnectionFailureDialog.qml @@ -24,7 +24,7 @@ Item { }); object.selected.connect(function(button) { if (button === OriginalDialogs.StandardButton.Ok) { - var tablet = Tablets.getTablet("com.highfidelity.interface.tablet.system"); + var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); tablet.gotoHomeScreen() } }); diff --git a/interface/resources/qml/dialogs/TabletLoginDialog.qml b/interface/resources/qml/dialogs/TabletLoginDialog.qml index 5f1e9cd3bf..269788a808 100644 --- a/interface/resources/qml/dialogs/TabletLoginDialog.qml +++ b/interface/resources/qml/dialogs/TabletLoginDialog.qml @@ -89,10 +89,10 @@ TabletModalWindow { //bodyLoader.active = false } if (gotoPreviousApp) { - var tablet = Tablets.getTablet("com.highfidelity.interface.tablet.system"); + var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); tablet.returnToPreviousApp(); } else { - Tablets.getTablet("com.highfidelity.interface.tablet.system").gotoHomeScreen(); + Tablet.getTablet("com.highfidelity.interface.tablet.system").gotoHomeScreen(); } } diff --git a/interface/resources/qml/dialogs/preferences/ButtonPreference.qml b/interface/resources/qml/dialogs/preferences/ButtonPreference.qml index bae581a47f..454a9124ae 100644 --- a/interface/resources/qml/dialogs/preferences/ButtonPreference.qml +++ b/interface/resources/qml/dialogs/preferences/ButtonPreference.qml @@ -25,13 +25,13 @@ Preference { id: button onHoveredChanged: { if (hovered) { - Tablets.playSound(TabletEnums.ButtonHover); + Tablet.playSound(TabletEnums.ButtonHover); } } onClicked: { preference.trigger(); - Tablets.playSound(TabletEnums.ButtonClick); + Tablet.playSound(TabletEnums.ButtonClick); } width: 180 anchors.bottom: parent.bottom diff --git a/interface/resources/qml/dialogs/preferences/CheckBoxPreference.qml b/interface/resources/qml/dialogs/preferences/CheckBoxPreference.qml index 81884d9a72..73819839a1 100644 --- a/interface/resources/qml/dialogs/preferences/CheckBoxPreference.qml +++ b/interface/resources/qml/dialogs/preferences/CheckBoxPreference.qml @@ -41,12 +41,12 @@ Preference { id: checkBox onHoveredChanged: { if (hovered) { - Tablets.playSound(TabletEnums.ButtonHover); + Tablet.playSound(TabletEnums.ButtonHover); } } onClicked: { - Tablets.playSound(TabletEnums.ButtonClick); + Tablet.playSound(TabletEnums.ButtonClick); } anchors { diff --git a/interface/resources/qml/hifi/Card.qml b/interface/resources/qml/hifi/Card.qml index 8d69afab46..83bf1e2c54 100644 --- a/interface/resources/qml/hifi/Card.qml +++ b/interface/resources/qml/hifi/Card.qml @@ -246,12 +246,12 @@ Item { anchors.fill: parent; acceptedButtons: Qt.LeftButton; onClicked: { - Tablets.playSound(TabletEnums.ButtonClick); + Tablet.playSound(TabletEnums.ButtonClick); goFunction("hifi://" + hifiUrl); } hoverEnabled: true; onEntered: { - Tablets.playSound(TabletEnums.ButtonHover); + Tablet.playSound(TabletEnums.ButtonHover); hoverThunk(); } onExited: unhoverThunk(); @@ -269,7 +269,7 @@ Item { } } function go() { - Tablets.playSound(TabletEnums.ButtonClick); + Tablet.playSound(TabletEnums.ButtonClick); goFunction(drillDownToPlace ? ("/places/" + placeName) : ("/user_stories/" + storyId)); } MouseArea { diff --git a/interface/resources/qml/hifi/Desktop.qml b/interface/resources/qml/hifi/Desktop.qml index 960d3e0649..ddf5a69a33 100644 --- a/interface/resources/qml/hifi/Desktop.qml +++ b/interface/resources/qml/hifi/Desktop.qml @@ -45,7 +45,7 @@ OriginalDesktop.Desktop { Toolbar { id: sysToolbar; objectName: "com.highfidelity.interface.toolbar.system"; - property var tablet: Tablets.getTablet("com.highfidelity.interface.tablet.system"); + property var tablet: Tablet.getTablet("com.highfidelity.interface.tablet.system"); anchors.horizontalCenter: settings.constrainToolbarToCenterX ? desktop.horizontalCenter : undefined; // Literal 50 is overwritten by settings from previous session, and sysToolbar.x comes from settings when not constrained. x: sysToolbar.x diff --git a/interface/resources/qml/hifi/audio/MicBar.qml b/interface/resources/qml/hifi/audio/MicBar.qml index 9ef8bf3698..c66904034b 100644 --- a/interface/resources/qml/hifi/audio/MicBar.qml +++ b/interface/resources/qml/hifi/audio/MicBar.qml @@ -61,12 +61,12 @@ Rectangle { scrollGestureEnabled: false; onClicked: { Audio.muted = !Audio.muted; - Tablets.playSound(TabletEnums.ButtonClick); + Tablet.playSound(TabletEnums.ButtonClick); } drag.target: dragTarget; onContainsMouseChanged: { if (containsMouse) { - Tablets.playSound(TabletEnums.ButtonHover); + Tablet.playSound(TabletEnums.ButtonHover); } } } diff --git a/interface/resources/qml/hifi/tablet/NewEntityButton.qml b/interface/resources/qml/hifi/tablet/NewEntityButton.qml index 49fdb4368f..1952ef7ee8 100644 --- a/interface/resources/qml/hifi/tablet/NewEntityButton.qml +++ b/interface/resources/qml/hifi/tablet/NewEntityButton.qml @@ -123,11 +123,11 @@ Item { hoverEnabled: true enabled: true onClicked: { - Tablets.playSound(TabletEnums.ButtonClick); + Tablet.playSound(TabletEnums.ButtonClick); newEntityButton.clicked(); } onEntered: { - Tablets.playSound(TabletEnums.ButtonHover); + Tablet.playSound(TabletEnums.ButtonHover); newEntityButton.state = "hover state"; } onExited: { diff --git a/interface/resources/qml/hifi/tablet/TabletAddressDialog.qml b/interface/resources/qml/hifi/tablet/TabletAddressDialog.qml index 3242de89b1..4d9a83817a 100644 --- a/interface/resources/qml/hifi/tablet/TabletAddressDialog.qml +++ b/interface/resources/qml/hifi/tablet/TabletAddressDialog.qml @@ -72,7 +72,7 @@ StackView { addressLine.focus = !HMD.active; root.parentChanged.connect(center); center(); - tablet = Tablets.getTablet("com.highfidelity.interface.tablet.system"); + tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); } Component.onDestruction: { root.parentChanged.disconnect(center); @@ -149,7 +149,7 @@ StackView { onClicked: { addressBarDialog.loadHome(); tabletRoot.shown = false; - tablet = Tablets.getTablet("com.highfidelity.interface.tablet.system"); + tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); tablet.gotoHomeScreen(); } anchors { diff --git a/interface/resources/qml/hifi/tablet/TabletAttachmentsDialog.qml b/interface/resources/qml/hifi/tablet/TabletAttachmentsDialog.qml index 14d7d09dba..19548365aa 100644 --- a/interface/resources/qml/hifi/tablet/TabletAttachmentsDialog.qml +++ b/interface/resources/qml/hifi/tablet/TabletAttachmentsDialog.qml @@ -37,7 +37,7 @@ Item { } function closeDialog() { - Tablets.getTablet("com.highfidelity.interface.tablet.system").gotoHomeScreen(); + Tablet.getTablet("com.highfidelity.interface.tablet.system").gotoHomeScreen(); } anchors.topMargin: hifi.dimensions.tabletMenuHeader // Space for header. diff --git a/interface/resources/qml/hifi/tablet/TabletButton.qml b/interface/resources/qml/hifi/tablet/TabletButton.qml index 3a66738b82..56cc3ed0f7 100644 --- a/interface/resources/qml/hifi/tablet/TabletButton.qml +++ b/interface/resources/qml/hifi/tablet/TabletButton.qml @@ -130,12 +130,12 @@ Item { } tabletButton.clicked(); if (tabletRoot) { - Tablets.playSound(TabletEnums.ButtonClick); + Tablet.playSound(TabletEnums.ButtonClick); } } onEntered: { tabletButton.isEntered = true; - Tablets.playSound(TabletEnums.ButtonHover); + Tablet.playSound(TabletEnums.ButtonHover); if (tabletButton.isActive) { tabletButton.state = "hover active state"; diff --git a/interface/resources/qml/hifi/tablet/TabletHome.qml b/interface/resources/qml/hifi/tablet/TabletHome.qml index 0b30496c44..3f9451436c 100644 --- a/interface/resources/qml/hifi/tablet/TabletHome.qml +++ b/interface/resources/qml/hifi/tablet/TabletHome.qml @@ -9,7 +9,7 @@ import "../audio" as HifiAudio Item { id: tablet objectName: "tablet" - property var tabletProxy: Tablets.getTablet("com.highfidelity.interface.tablet.system"); + property var tabletProxy: Tablet.getTablet("com.highfidelity.interface.tablet.system"); Rectangle { id: bgTopBar diff --git a/interface/resources/qml/hifi/tablet/TabletMenuView.qml b/interface/resources/qml/hifi/tablet/TabletMenuView.qml index e069ce8cb1..636ebfe71f 100644 --- a/interface/resources/qml/hifi/tablet/TabletMenuView.qml +++ b/interface/resources/qml/hifi/tablet/TabletMenuView.qml @@ -77,12 +77,12 @@ FocusScope { anchors.fill: parent hoverEnabled: true onEntered: { - Tablets.playSound(TabletEnums.ButtonHover); + Tablet.playSound(TabletEnums.ButtonHover); listView.currentIndex = index } onClicked: { - Tablets.playSound(TabletEnums.ButtonClick); + Tablet.playSound(TabletEnums.ButtonClick); root.selected(item); } } diff --git a/interface/resources/qml/hifi/tablet/tabletWindows/TabletPreferencesDialog.qml b/interface/resources/qml/hifi/tablet/tabletWindows/TabletPreferencesDialog.qml index 0665b9971e..fcb3e9ff92 100644 --- a/interface/resources/qml/hifi/tablet/tabletWindows/TabletPreferencesDialog.qml +++ b/interface/resources/qml/hifi/tablet/tabletWindows/TabletPreferencesDialog.qml @@ -56,7 +56,7 @@ Item { } function closeDialog() { - var tablet = Tablets.getTablet("com.highfidelity.interface.tablet.system"); + var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); if (gotoPreviousApp) { tablet.returnToPreviousApp(); @@ -206,7 +206,7 @@ Item { } Component.onCompleted: { - tablet = Tablets.getTablet("com.highfidelity.interface.tablet.system"); + tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); keyboardEnabled = HMD.active; } diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 76f8cc1505..7e54c6bf40 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -5833,10 +5833,9 @@ void Application::registerScriptEngineWithApplicationServices(ScriptEnginePointe qScriptRegisterMetaType(scriptEngine.data(), wrapperToScriptValue, wrapperFromScriptValue); qScriptRegisterMetaType(scriptEngine.data(), wrapperToScriptValue, wrapperFromScriptValue); - scriptEngine->registerGlobalObject("Tablets", DependencyManager::get().data()); + scriptEngine->registerGlobalObject("Tablet", DependencyManager::get().data()); // FIXME remove these deprecated names for the tablet scripting interface scriptEngine->registerGlobalObject("tabletInterface", DependencyManager::get().data()); - scriptEngine->registerGlobalObject("Tablet", DependencyManager::get().data()); auto toolbarScriptingInterface = DependencyManager::get().data(); DependencyManager::get().data()->setToolbarScriptingInterface(toolbarScriptingInterface); diff --git a/libraries/ui/src/OffscreenUi.cpp b/libraries/ui/src/OffscreenUi.cpp index d8a2c2c3cb..adb7b4d49b 100644 --- a/libraries/ui/src/OffscreenUi.cpp +++ b/libraries/ui/src/OffscreenUi.cpp @@ -105,12 +105,6 @@ void OffscreenUi::create() { myContext->setContextProperty("OffscreenUi", this); myContext->setContextProperty("offscreenFlags", offscreenFlags = new OffscreenFlags()); myContext->setContextProperty("fileDialogHelper", new FileDialogHelper()); - auto tabletScriptingInterface = DependencyManager::get(); - qRegisterMetaType(); - qRegisterMetaType(); - myContext->setContextProperty("Tablets", tabletScriptingInterface.data()); - TabletProxy* tablet = tabletScriptingInterface->getTablet("com.highfidelity.interface.tablet.system"); - myContext->engine()->setObjectOwnership(tablet, QQmlEngine::CppOwnership); } void OffscreenUi::show(const QUrl& url, const QString& name, std::function f) { diff --git a/libraries/ui/src/ui/OffscreenQmlSurface.cpp b/libraries/ui/src/ui/OffscreenQmlSurface.cpp index a0c6790b93..76fa5c9ec8 100644 --- a/libraries/ui/src/ui/OffscreenQmlSurface.cpp +++ b/libraries/ui/src/ui/OffscreenQmlSurface.cpp @@ -391,8 +391,10 @@ void initializeQmlEngine(QQmlEngine* engine, QQuickWindow* window) { qRegisterMetaType(); qRegisterMetaType(); }); - rootContext->setContextProperty("Tablets", DependencyManager::get().data()); + rootContext->setContextProperty("Tablet", DependencyManager::get().data()); rootContext->setContextProperty("Toolbars", DependencyManager::get().data()); + TabletProxy* tablet = DependencyManager::get()->getTablet("com.highfidelity.interface.tablet.system"); + myContext->engine()->setObjectOwnership(tablet, QQmlEngine::CppOwnership); } QQmlEngine* acquireEngine(QQuickWindow* window) { diff --git a/scripts/developer/EZrecord.js b/scripts/developer/EZrecord.js index 3cfc6e9928..049ccbc03d 100644 --- a/scripts/developer/EZrecord.js +++ b/scripts/developer/EZrecord.js @@ -227,7 +227,7 @@ } function setUp() { - tablet = Tablets.getTablet("com.highfidelity.interface.tablet.system"); + tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); if (!tablet) { return; } diff --git a/scripts/developer/inputRecording.js b/scripts/developer/inputRecording.js index 574cbbeb3d..6fb8e471cd 100644 --- a/scripts/developer/inputRecording.js +++ b/scripts/developer/inputRecording.js @@ -10,7 +10,7 @@ var recording = false; var onRecordingScreen = false; var passedSaveDirectory = false; - var tablet = Tablets.getTablet("com.highfidelity.interface.tablet.system"); + var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); var button = tablet.addButton({ text: "IRecord" }); diff --git a/scripts/developer/tests/dynamics/dynamicsTests.js b/scripts/developer/tests/dynamics/dynamicsTests.js index be22e2c5fb..fa51403732 100644 --- a/scripts/developer/tests/dynamics/dynamicsTests.js +++ b/scripts/developer/tests/dynamics/dynamicsTests.js @@ -18,7 +18,7 @@ var DYNAMICS_TESTS_URL = Script.resolvePath("dynamics-tests.html"); var DEFAULT_LIFETIME = 120; // seconds - var tablet = Tablets.getTablet("com.highfidelity.interface.tablet.system"); + var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); var button = tablet.addButton({ icon: Script.resolvePath("dynamicsTests.svg"), diff --git a/scripts/developer/tests/puck-attach.js b/scripts/developer/tests/puck-attach.js index 6971ec02cd..04d5db5710 100644 --- a/scripts/developer/tests/puck-attach.js +++ b/scripts/developer/tests/puck-attach.js @@ -19,7 +19,7 @@ Script.include("/~/system/libraries/Xform.js"); var TABLET_BUTTON_NAME = "PUCKTACH"; var TABLET_APP_URL = "https://hifi-content.s3.amazonaws.com/seefo/production/puck-attach/puck-attach.html"; -var tablet = Tablets.getTablet("com.highfidelity.interface.tablet.system"); +var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); var tabletButton = tablet.addButton({ text: TABLET_BUTTON_NAME, icon: "https://s3.amazonaws.com/hifi-public/tony/icons/puck-i.svg", diff --git a/scripts/developer/tests/sliderTestMain.js b/scripts/developer/tests/sliderTestMain.js index e7542ef177..22bf4fa911 100644 --- a/scripts/developer/tests/sliderTestMain.js +++ b/scripts/developer/tests/sliderTestMain.js @@ -1,6 +1,6 @@ (function () { var HTML_URL = Script.resolvePath("sliderTest.html"); - var tablet = Tablets.getTablet("com.highfidelity.interface.tablet.system"); + var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); var button = tablet.addButton({ text: "SLIDER" }); diff --git a/scripts/developer/tests/tabletEventBridgeTest.js b/scripts/developer/tests/tabletEventBridgeTest.js index 3f988303f2..d386b220fc 100644 --- a/scripts/developer/tests/tabletEventBridgeTest.js +++ b/scripts/developer/tests/tabletEventBridgeTest.js @@ -14,7 +14,7 @@ /* globals Tablets */ -var tablet = Tablets.getTablet("com.highfidelity.interface.tablet.system"); +var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); var tabletButton = tablet.addButton({ text: "SOUNDS", icon: "http://s3.amazonaws.com/hifi-public/tony/icons/trombone-i.png", diff --git a/scripts/developer/tests/tabletTest.js b/scripts/developer/tests/tabletTest.js index 9c1ce0e3bd..438d0a4b99 100644 --- a/scripts/developer/tests/tabletTest.js +++ b/scripts/developer/tests/tabletTest.js @@ -10,7 +10,7 @@ // Adds a BAM! button to the tablet ui. -var tablet = Tablets.getTablet("com.highfidelity.interface.tablet.system"); +var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); var button = tablet.addButton({ text: "BAM!!!" }); diff --git a/scripts/developer/utilities/audio/stats.js b/scripts/developer/utilities/audio/stats.js index a828d79340..382e14df5f 100644 --- a/scripts/developer/utilities/audio/stats.js +++ b/scripts/developer/utilities/audio/stats.js @@ -10,7 +10,7 @@ // if (HMD.active && !Settings.getValue("HUDUIEnabled")) { - var tablet = Tablets.getTablet("com.highfidelity.interface.tablet.system"); + var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); var qml = Script.resolvePath("TabletStats.qml"); tablet.loadQMLSource(qml); Script.stop(); diff --git a/scripts/developer/utilities/render/luci.js b/scripts/developer/utilities/render/luci.js index b2203ce72f..1e2ac1261f 100644 --- a/scripts/developer/utilities/render/luci.js +++ b/scripts/developer/utilities/render/luci.js @@ -27,7 +27,7 @@ } } - var tablet = Tablets.getTablet("com.highfidelity.interface.tablet.system"); + var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); var button = tablet.addButton({ text: TABLET_BUTTON_NAME, icon: ICON_URL, diff --git a/scripts/developer/utilities/render/photobooth/photoboothApp.js b/scripts/developer/utilities/render/photobooth/photoboothApp.js index 375a98e543..0e8eef7352 100644 --- a/scripts/developer/utilities/render/photobooth/photoboothApp.js +++ b/scripts/developer/utilities/render/photobooth/photoboothApp.js @@ -16,7 +16,7 @@ var MODEL_BOUNDING_BOX_DIMENSIONS = {x: 1.0174,y: 1.1925,z: 1.0165}; var PhotoBooth = {}; var photoboothCreated = false; - var tablet = Tablets.getTablet("com.highfidelity.interface.tablet.system"); + var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); var button = tablet.addButton({ icon: "icons/tablet-icons/snap-i.svg", text: "PHOTOBOOTH" diff --git a/scripts/system/audio.js b/scripts/system/audio.js index ea0626a30c..a93177ca38 100644 --- a/scripts/system/audio.js +++ b/scripts/system/audio.js @@ -54,7 +54,7 @@ function onScreenChanged(type, url) { button.editProperties({isActive: onAudioScreen}); } -var tablet = Tablets.getTablet("com.highfidelity.interface.tablet.system"); +var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); var button = tablet.addButton({ icon: Audio.muted ? MUTE_ICONS.icon : UNMUTE_ICONS.icon, activeIcon: Audio.muted ? MUTE_ICONS.activeIcon : UNMUTE_ICONS.activeIcon, diff --git a/scripts/system/audioScope.js b/scripts/system/audioScope.js index 268c883983..07efb17046 100644 --- a/scripts/system/audioScope.js +++ b/scripts/system/audioScope.js @@ -17,7 +17,7 @@ var scopePaused = AudioScope.getPause(); var autoPause = false; - var tablet = Tablets.getTablet("com.highfidelity.interface.tablet.system"); + var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); var showScopeButton = tablet.addButton({ icon: "icons/tablet-icons/scope.svg", text: "Audio Scope", diff --git a/scripts/system/bubble.js b/scripts/system/bubble.js index 2b6924d84f..4ea684ff06 100644 --- a/scripts/system/bubble.js +++ b/scripts/system/bubble.js @@ -183,7 +183,7 @@ // Setup the bubble button var buttonName = "BUBBLE"; - var tablet = Tablets.getTablet("com.highfidelity.interface.tablet.system"); + var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); button = tablet.addButton({ icon: "icons/tablet-icons/bubble-i.svg", activeIcon: "icons/tablet-icons/bubble-a.svg", diff --git a/scripts/system/chat.js b/scripts/system/chat.js index 220c87195a..fa997e20cc 100644 --- a/scripts/system/chat.js +++ b/scripts/system/chat.js @@ -19,7 +19,7 @@ var tabletButtonIcon = "icons/tablet-icons/menu-i.svg"; // Icon for chat button. var tabletButtonActiveIcon = "icons/tablet-icons/menu-a.svg"; // Active icon for chat button. var tabletButton = null; // The button we create in the tablet. - var tablet = Tablets.getTablet("com.highfidelity.interface.tablet.system"); // The awesome tablet. + var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); // The awesome tablet. var chatLog = []; // Array of chat messages in the form of [avatarID, displayName, message, data]. var avatarIdentifiers = {}; // Map of avatar ids to dict of identifierParams. var speechBubbleShowing = false; // Is the speech bubble visible? diff --git a/scripts/system/commerce/wallet.js b/scripts/system/commerce/wallet.js index 7f05dcf3d8..9b2367b762 100644 --- a/scripts/system/commerce/wallet.js +++ b/scripts/system/commerce/wallet.js @@ -148,7 +148,7 @@ var walletEnabled = Settings.getValue("commerce", false); function startup() { if (walletEnabled) { - tablet = Tablets.getTablet("com.highfidelity.interface.tablet.system"); + tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); button = tablet.addButton({ text: buttonName, icon: "icons/tablet-icons/wallet-i.svg", diff --git a/scripts/system/controllers/godView.js b/scripts/system/controllers/godView.js index eb38308cb9..9551c886c9 100644 --- a/scripts/system/controllers/godView.js +++ b/scripts/system/controllers/godView.js @@ -81,7 +81,7 @@ function endGodView() { } var button; -var tablet = Tablets.getTablet("com.highfidelity.interface.tablet.system"); +var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); function onClicked() { if (godView) { diff --git a/scripts/system/edit.js b/scripts/system/edit.js index abd69e2697..c4a8f0f54f 100644 --- a/scripts/system/edit.js +++ b/scripts/system/edit.js @@ -390,7 +390,7 @@ var toolBar = (function () { } function fromQml(message) { // messages are {method, params}, like json-rpc. See also sendToQml. - var tablet = Tablets.getTablet("com.highfidelity.interface.tablet.system"); + var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); tablet.popFromStack(); switch (message.method) { case "newModelDialogAdd": @@ -417,7 +417,7 @@ var toolBar = (function () { var hasRezPermissions = (Entities.canRez() || Entities.canRezTmp() || Entities.canRezCertified() || Entities.canRezTmpCertified()); var createButtonIconRsrc = (hasRezPermissions ? CREATE_ENABLED_ICON : CREATE_DISABLED_ICON); - tablet = Tablets.getTablet("com.highfidelity.interface.tablet.system"); + tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); activeButton = tablet.addButton({ captionColorOverride: hasRezPermissions ? "" : "#888888", icon: createButtonIconRsrc, @@ -463,7 +463,7 @@ var toolBar = (function () { var SHAPE_TYPE_DEFAULT = SHAPE_TYPE_STATIC_MESH; // tablet version of new-model dialog - var tablet = Tablets.getTablet("com.highfidelity.interface.tablet.system"); + var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); tablet.pushOntoStack("NewModelDialog.qml"); }); @@ -644,7 +644,7 @@ var toolBar = (function () { isActive = active; activeButton.editProperties({isActive: isActive}); - var tablet = Tablets.getTablet("com.highfidelity.interface.tablet.system"); + var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); if (!isActive) { entityListTool.setVisible(false); @@ -1850,7 +1850,7 @@ var PropertiesTool = function (opts) { var that = {}; var webView = null; - webView = Tablets.getTablet("com.highfidelity.interface.tablet.system"); + webView = Tablet.getTablet("com.highfidelity.interface.tablet.system"); webView.setVisible = function(value) {}; var visible = false; @@ -2293,7 +2293,7 @@ function selectParticleEntity(entityID) { particleExplorerTool.webView.emitScriptEvent(JSON.stringify(particleData)); // Switch to particle explorer - var tablet = Tablets.getTablet("com.highfidelity.interface.tablet.system"); + var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); tablet.sendToQml({method: 'selectTab', params: {id: 'particle'}}); } diff --git a/scripts/system/fingerPaint.js b/scripts/system/fingerPaint.js index ad4973890b..06403b77b7 100644 --- a/scripts/system/fingerPaint.js +++ b/scripts/system/fingerPaint.js @@ -414,7 +414,7 @@ } function setUp() { - tablet = Tablets.getTablet("com.highfidelity.interface.tablet.system"); + tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); if (!tablet) { return; } diff --git a/scripts/system/generalSettings.js b/scripts/system/generalSettings.js index 8a9001107a..0e917d6ae4 100644 --- a/scripts/system/generalSettings.js +++ b/scripts/system/generalSettings.js @@ -34,7 +34,7 @@ alpha: 0.9 }); } else { - tablet = Tablets.getTablet("com.highfidelity.interface.tablet.system"); + tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); button = tablet.addButton({ icon: "icons/tablet-icons/goto-i.svg", text: buttonName, diff --git a/scripts/system/goto.js b/scripts/system/goto.js index 31394c8750..f301af60bd 100644 --- a/scripts/system/goto.js +++ b/scripts/system/goto.js @@ -37,7 +37,7 @@ if (Settings.getValue("HUDUIEnabled")) { alpha: 0.9 }); } else { - tablet = Tablets.getTablet("com.highfidelity.interface.tablet.system"); + tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); button = tablet.addButton({ icon: "icons/tablet-icons/goto-i.svg", activeIcon: "icons/tablet-icons/goto-a.svg", diff --git a/scripts/system/help.js b/scripts/system/help.js index 5687c8961f..cf0cd3c003 100644 --- a/scripts/system/help.js +++ b/scripts/system/help.js @@ -17,7 +17,7 @@ var HOME_BUTTON_TEXTURE = Script.resourcesPath() + "meshes/tablet-with-home-button.fbx/tablet-with-home-button.fbm/button-root.png"; var buttonName = "HELP"; var onHelpScreen = false; - var tablet = Tablets.getTablet("com.highfidelity.interface.tablet.system"); + var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); var button = tablet.addButton({ icon: "icons/tablet-icons/help-i.svg", activeIcon: "icons/tablet-icons/help-a.svg", diff --git a/scripts/system/hmd.js b/scripts/system/hmd.js index a86bbd9a62..e4f6455876 100644 --- a/scripts/system/hmd.js +++ b/scripts/system/hmd.js @@ -38,7 +38,7 @@ function updateControllerDisplay() { } var button; -var tablet = Tablets.getTablet("com.highfidelity.interface.tablet.system"); +var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); // Independent and Entity mode make people sick; disable them in hmd. var desktopOnlyViews = ['Independent Mode', 'Entity Mode']; diff --git a/scripts/system/libraries/WebTablet.js b/scripts/system/libraries/WebTablet.js index cd7c575205..0fb4258f68 100644 --- a/scripts/system/libraries/WebTablet.js +++ b/scripts/system/libraries/WebTablet.js @@ -168,7 +168,7 @@ WebTablet = function (url, width, dpi, hand, clientOnly, location, visible) { this.receive = function (channel, senderID, senderUUID, localOnly) { if (_this.homeButtonID == senderID) { - var tablet = Tablets.getTablet("com.highfidelity.interface.tablet.system"); + var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); var onHomeScreen = tablet.onHomeScreen(); var isMessageOpen; if (onHomeScreen) { @@ -513,7 +513,7 @@ WebTablet.prototype.mousePressEvent = function (event) { entityPickResults.overlayID === this.tabletEntityID)) { var overlayPickResults = Overlays.findRayIntersection(pickRay, true, [this.webOverlayID, this.homeButtonID], []); if (overlayPickResults.intersects && overlayPickResults.overlayID === this.homeButtonID) { - var tablet = Tablets.getTablet("com.highfidelity.interface.tablet.system"); + var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); var onHomeScreen = tablet.onHomeScreen(); var isMessageOpen = tablet.isMessageDialogOpen(); if (onHomeScreen) { diff --git a/scripts/system/libraries/entityList.js b/scripts/system/libraries/entityList.js index a1f5d31a1a..70e0645757 100644 --- a/scripts/system/libraries/entityList.js +++ b/scripts/system/libraries/entityList.js @@ -15,7 +15,7 @@ EntityListTool = function(opts) { var that = {}; var webView = null; - webView = Tablets.getTablet("com.highfidelity.interface.tablet.system"); + webView = Tablet.getTablet("com.highfidelity.interface.tablet.system"); webView.setVisible = function(value) {}; var filterInView = false; diff --git a/scripts/system/libraries/gridTool.js b/scripts/system/libraries/gridTool.js index 41cbc59502..2c417a9dde 100644 --- a/scripts/system/libraries/gridTool.js +++ b/scripts/system/libraries/gridTool.js @@ -237,7 +237,7 @@ GridTool = function(opts) { var listeners = []; var webView = null; - webView = Tablets.getTablet("com.highfidelity.interface.tablet.system"); + webView = Tablet.getTablet("com.highfidelity.interface.tablet.system"); webView.setVisible = function(value) {}; horizontalGrid.addListener(function(data) { diff --git a/scripts/system/libraries/utils.js b/scripts/system/libraries/utils.js index 8ea176bbd4..76c248d880 100644 --- a/scripts/system/libraries/utils.js +++ b/scripts/system/libraries/utils.js @@ -354,7 +354,7 @@ flatten = function(array) { getTabletWidthFromSettings = function () { var DEFAULT_TABLET_WIDTH = 0.4375; - var tablet = Tablets.getTablet("com.highfidelity.interface.tablet.system"); + var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); var toolbarMode = tablet.toolbarMode; var DEFAULT_TABLET_SCALE = 100; var tabletScalePercentage = DEFAULT_TABLET_SCALE; diff --git a/scripts/system/marketplaces/marketplace.js b/scripts/system/marketplaces/marketplace.js index 6d6550ecbc..d90695c767 100644 --- a/scripts/system/marketplaces/marketplace.js +++ b/scripts/system/marketplaces/marketplace.js @@ -82,7 +82,7 @@ function toggleMarketplace() { } } -var tablet = Tablets.getTablet("com.highfidelity.interface.tablet.system"); +var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); var browseExamplesButton = tablet.addButton({ icon: "icons/tablet-icons/market-i.svg", diff --git a/scripts/system/marketplaces/marketplaces.js b/scripts/system/marketplaces/marketplaces.js index f65781840d..fd30bde3a0 100644 --- a/scripts/system/marketplaces/marketplaces.js +++ b/scripts/system/marketplaces/marketplaces.js @@ -81,7 +81,7 @@ } } - var tablet = Tablets.getTablet("com.highfidelity.interface.tablet.system"); + var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); var marketplaceButton = tablet.addButton({ icon: "icons/tablet-icons/market-i.svg", activeIcon: "icons/tablet-icons/market-a.svg", diff --git a/scripts/system/menu.js b/scripts/system/menu.js index 004ece17c3..c7a44d3e48 100644 --- a/scripts/system/menu.js +++ b/scripts/system/menu.js @@ -13,7 +13,7 @@ var HOME_BUTTON_TEXTURE = "http://hifi-content.s3.amazonaws.com/alan/dev/tablet- // var HOME_BUTTON_TEXTURE = Script.resourcesPath() + "meshes/tablet-with-home-button.fbx/tablet-with-home-button.fbm/button-root.png"; (function() { - var tablet = Tablets.getTablet("com.highfidelity.interface.tablet.system"); + var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); var button = tablet.addButton({ icon: "icons/tablet-icons/menu-i.svg", activeIcon: "icons/tablet-icons/menu-a.svg", diff --git a/scripts/system/mod.js b/scripts/system/mod.js index defdb662b3..a3b4974f8d 100644 --- a/scripts/system/mod.js +++ b/scripts/system/mod.js @@ -18,7 +18,7 @@ Script.include("/~/system/libraries/controllers.js"); // grab the toolbar -var tablet = Tablets.getTablet("com.highfidelity.interface.tablet.system"); +var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); var ASSETS_PATH = Script.resolvePath("assets"); var TOOLS_PATH = Script.resolvePath("assets/images/tools/"); diff --git a/scripts/system/notifications.js b/scripts/system/notifications.js index 612c0e50e2..e1741cfa3b 100644 --- a/scripts/system/notifications.js +++ b/scripts/system/notifications.js @@ -696,7 +696,7 @@ Window.announcement.connect(onNotify); Window.notifyEditError = onEditError; Window.notify = onNotify; - Tablets.tabletNotification.connect(tabletNotification); + Tablet.tabletNotification.connect(tabletNotification); Wallet.walletNotSetup.connect(walletNotSetup); Messages.subscribe(NOTIFICATIONS_MESSAGE_CHANNEL); diff --git a/scripts/system/pal.js b/scripts/system/pal.js index 26bec518b4..7ba7c8c0f1 100644 --- a/scripts/system/pal.js +++ b/scripts/system/pal.js @@ -677,7 +677,7 @@ var buttonName = "PEOPLE"; var tablet = null; function startup() { - tablet = Tablets.getTablet("com.highfidelity.interface.tablet.system"); + tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); button = tablet.addButton({ text: buttonName, icon: "icons/tablet-icons/people-i.svg", diff --git a/scripts/system/particle_explorer/particleExplorerTool.js b/scripts/system/particle_explorer/particleExplorerTool.js index c2231df406..d85fc169b1 100644 --- a/scripts/system/particle_explorer/particleExplorerTool.js +++ b/scripts/system/particle_explorer/particleExplorerTool.js @@ -17,7 +17,7 @@ var PARTICLE_EXPLORER_HTML_URL = Script.resolvePath('particleExplorer.html'); ParticleExplorerTool = function() { var that = {}; that.createWebView = function() { - that.webView = Tablets.getTablet("com.highfidelity.interface.tablet.system"); + that.webView = Tablet.getTablet("com.highfidelity.interface.tablet.system"); that.webView.setVisible = function(value) {}; that.webView.webEventReceived.connect(that.webEventReceived); } diff --git a/scripts/system/snapshot.js b/scripts/system/snapshot.js index 3f29238c24..a14e1f2772 100644 --- a/scripts/system/snapshot.js +++ b/scripts/system/snapshot.js @@ -22,7 +22,7 @@ var clearOverlayWhenMoving; var buttonName = "SNAP"; var buttonConnected = false; -var tablet = Tablets.getTablet("com.highfidelity.interface.tablet.system"); +var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); var button = tablet.addButton({ icon: "icons/tablet-icons/snap-i.svg", activeIcon: "icons/tablet-icons/snap-a.svg", diff --git a/scripts/system/tablet-goto.js b/scripts/system/tablet-goto.js index 41b7b84d4c..8347fcff9a 100644 --- a/scripts/system/tablet-goto.js +++ b/scripts/system/tablet-goto.js @@ -30,7 +30,7 @@ var shouldActivateButton = false; function ignore() { } - var tablet = Tablets.getTablet("com.highfidelity.interface.tablet.system"); + var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); var NORMAL_ICON = "icons/tablet-icons/goto-i.svg"; var NORMAL_ACTIVE = "icons/tablet-icons/goto-a.svg"; var WAITING_ICON = "icons/tablet-icons/goto-msg.svg"; diff --git a/scripts/system/tablet-ui/tabletUI.js b/scripts/system/tablet-ui/tabletUI.js index 0044ca0496..0032239867 100644 --- a/scripts/system/tablet-ui/tabletUI.js +++ b/scripts/system/tablet-ui/tabletUI.js @@ -33,7 +33,7 @@ function checkTablet() { if (gTablet === null) { - gTablet = Tablets.getTablet("com.highfidelity.interface.tablet.system"); + gTablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); } } @@ -315,7 +315,7 @@ Script.scriptEnding.connect(function () { // if we reload scripts in tablet mode make sure we close the currently open window, by calling gotoHomeScreen - var tabletProxy = Tablets.getTablet("com.highfidelity.interface.tablet.system"); + var tabletProxy = Tablet.getTablet("com.highfidelity.interface.tablet.system"); if (tabletProxy && tabletProxy.toolbarMode) { tabletProxy.gotoHomeScreen(); } diff --git a/scripts/system/tablet-users.js b/scripts/system/tablet-users.js index 7efd49ae55..6f37cd55eb 100644 --- a/scripts/system/tablet-users.js +++ b/scripts/system/tablet-users.js @@ -33,7 +33,7 @@ GlobalServices.findableBy = myVisibility; } - var tablet = Tablets.getTablet("com.highfidelity.interface.tablet.system"); + var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); var button = tablet.addButton({ icon: "icons/tablet-icons/users-i.svg", activeIcon: "icons/tablet-icons/users-a.svg", diff --git a/unpublishedScripts/marketplace/blocks/blocksApp.js b/unpublishedScripts/marketplace/blocks/blocksApp.js index 8088f438de..c9e8682b23 100644 --- a/unpublishedScripts/marketplace/blocks/blocksApp.js +++ b/unpublishedScripts/marketplace/blocks/blocksApp.js @@ -26,7 +26,7 @@ APP_URL = APP_OUTDATED_URL; } - var tablet = Tablets.getTablet("com.highfidelity.interface.tablet.system"); + var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); var button = tablet.addButton({ icon: APP_ICON, activeIcon: APP_ICON_ACTIVE, diff --git a/unpublishedScripts/marketplace/camera-move/app-camera-move.js b/unpublishedScripts/marketplace/camera-move/app-camera-move.js index 177565a332..f58dd3d3bd 100644 --- a/unpublishedScripts/marketplace/camera-move/app-camera-move.js +++ b/unpublishedScripts/marketplace/camera-move/app-camera-move.js @@ -162,7 +162,7 @@ var globalState = { function main() { log('initializing...', VERSION); - var tablet = Tablets.getTablet('com.highfidelity.interface.tablet.system'), + var tablet = Tablet.getTablet('com.highfidelity.interface.tablet.system'), button = tablet.addButton(BUTTON_CONFIG); Script.scriptEnding.connect(function() { @@ -601,7 +601,7 @@ function _patchCameraModeSetting() { } function getSystemMetadata() { - var tablet = Tablets.getTablet('com.highfidelity.interface.tablet.system'); + var tablet = Tablet.getTablet('com.highfidelity.interface.tablet.system'); return { mode: { hmd: HMD.active, diff --git a/unpublishedScripts/marketplace/clap/clapApp.js b/unpublishedScripts/marketplace/clap/clapApp.js index a975d9d8b5..b2d8ce55db 100644 --- a/unpublishedScripts/marketplace/clap/clapApp.js +++ b/unpublishedScripts/marketplace/clap/clapApp.js @@ -16,7 +16,7 @@ // Load up engine var APP_NAME = "CLAP"; var ClapEngine = Script.require(Script.resolvePath("scripts/ClapEngine.js?v9")); -var tablet = Tablets.getTablet("com.highfidelity.interface.tablet.system"); +var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); // Define Menu var blackIcon = Script.resolvePath("icons/tablet-icons/clap-a.svg?foxv2"); diff --git a/unpublishedScripts/marketplace/doppleganger-attachments/app-doppleganger-attachments.js b/unpublishedScripts/marketplace/doppleganger-attachments/app-doppleganger-attachments.js index 278f4efbaa..c09ad602f8 100644 --- a/unpublishedScripts/marketplace/doppleganger-attachments/app-doppleganger-attachments.js +++ b/unpublishedScripts/marketplace/doppleganger-attachments/app-doppleganger-attachments.js @@ -45,7 +45,7 @@ var buttonConfig = utils.assign({ activeIcon: require('./doppleganger-a.svg.json'), }); -var tablet = Tablets.getTablet('com.highfidelity.interface.tablet.system'), +var tablet = Tablet.getTablet('com.highfidelity.interface.tablet.system'), button = tablet.addButton(buttonConfig); Script.scriptEnding.connect(function() { diff --git a/unpublishedScripts/marketplace/doppleganger-attachments/dist/app-doppleganger-marketplace.js b/unpublishedScripts/marketplace/doppleganger-attachments/dist/app-doppleganger-marketplace.js index 1cb7610ff3..bc5368ba5b 100644 --- a/unpublishedScripts/marketplace/doppleganger-attachments/dist/app-doppleganger-marketplace.js +++ b/unpublishedScripts/marketplace/doppleganger-attachments/dist/app-doppleganger-marketplace.js @@ -905,7 +905,7 @@ var buttonConfig = utils.assign({ activeIcon: __webpack_require__(7), }); -var tablet = Tablets.getTablet('com.highfidelity.interface.tablet.system'), +var tablet = Tablet.getTablet('com.highfidelity.interface.tablet.system'), button = tablet.addButton(buttonConfig); Script.scriptEnding.connect(function() { diff --git a/unpublishedScripts/marketplace/doppleganger-mirror/app-doppleganger.js b/unpublishedScripts/marketplace/doppleganger-mirror/app-doppleganger.js index d02dd3e9ba..f4c7bf99c0 100644 --- a/unpublishedScripts/marketplace/doppleganger-mirror/app-doppleganger.js +++ b/unpublishedScripts/marketplace/doppleganger-mirror/app-doppleganger.js @@ -12,7 +12,7 @@ var DopplegangerClass = Script.require('./doppleganger.js'); -var tablet = Tablets.getTablet('com.highfidelity.interface.tablet.system'), +var tablet = Tablet.getTablet('com.highfidelity.interface.tablet.system'), button = tablet.addButton({ icon: Script.resolvePath('./doppleganger-i.svg'), activeIcon: Script.resolvePath('./doppleganger-a.svg'), diff --git a/unpublishedScripts/marketplace/emoji-tablet/emojiTablet.js b/unpublishedScripts/marketplace/emoji-tablet/emojiTablet.js index 687c9445cd..b4d01e77cf 100644 --- a/unpublishedScripts/marketplace/emoji-tablet/emojiTablet.js +++ b/unpublishedScripts/marketplace/emoji-tablet/emojiTablet.js @@ -19,7 +19,7 @@ var lib = Script.require("https://hifi-content.s3.amazonaws.com/elisalj/emoji_sc var APP_NAME = "EMOJIS"; var APP_URL = "https://hifi-content.s3.amazonaws.com/elisalj/emoji_scripts/emojiTabletUI.html?" + Date.now(); var APP_ICON = "https://hifi-content.s3.amazonaws.com/elisalj/emoji_scripts/icons/emoji-i.svg"; - var tablet = Tablets.getTablet("com.highfidelity.interface.tablet.system"); + var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); var button = tablet.addButton({ icon: APP_ICON, diff --git a/unpublishedScripts/marketplace/laser/laserPointerApp.js b/unpublishedScripts/marketplace/laser/laserPointerApp.js index 32cc75dd42..515a2c3a76 100644 --- a/unpublishedScripts/marketplace/laser/laserPointerApp.js +++ b/unpublishedScripts/marketplace/laser/laserPointerApp.js @@ -17,7 +17,7 @@ var TRIGGER_PRESSURE = 0.95; - var tablet = Tablets.getTablet('com.highfidelity.interface.tablet.system'); + var tablet = Tablet.getTablet('com.highfidelity.interface.tablet.system'); var button = tablet.addButton({ icon: APP_ICON, diff --git a/unpublishedScripts/marketplace/record/record.js b/unpublishedScripts/marketplace/record/record.js index 6392f10892..68c7ea3f5a 100644 --- a/unpublishedScripts/marketplace/record/record.js +++ b/unpublishedScripts/marketplace/record/record.js @@ -631,7 +631,7 @@ } function setUp() { - tablet = Tablets.getTablet("com.highfidelity.interface.tablet.system"); + tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); if (!tablet) { return; } @@ -694,7 +694,7 @@ } // FIXME: If setUp() is run immediately at Interface start-up, Interface hangs and crashes because of the line of code: - // tablet = Tablets.getTablet("com.highfidelity.interface.tablet.system"); + // tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); //setUp(); //Script.scriptEnding.connect(tearDown); Script.setTimeout(function () { diff --git a/unpublishedScripts/marketplace/shapes/shapes.js b/unpublishedScripts/marketplace/shapes/shapes.js index de177f435e..cd5f119588 100644 --- a/unpublishedScripts/marketplace/shapes/shapes.js +++ b/unpublishedScripts/marketplace/shapes/shapes.js @@ -1930,7 +1930,7 @@ function setUp() { var hasRezPermissions; - tablet = Tablets.getTablet("com.highfidelity.interface.tablet.system"); + tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); if (!tablet) { App.log("ERROR: Tablet not found! App not started."); return; diff --git a/unpublishedScripts/marketplace/skyboxChanger/skyboxchanger.js b/unpublishedScripts/marketplace/skyboxChanger/skyboxchanger.js index 114bccb034..7bc65722cd 100644 --- a/unpublishedScripts/marketplace/skyboxChanger/skyboxchanger.js +++ b/unpublishedScripts/marketplace/skyboxChanger/skyboxchanger.js @@ -28,7 +28,7 @@ } } - var tablet = Tablets.getTablet("com.highfidelity.interface.tablet.system"); + var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); var button = tablet.addButton({ icon: ICONS.icon, activeIcon: ICONS.activeIcon, diff --git a/unpublishedScripts/marketplace/spectator-camera/spectatorCamera.js b/unpublishedScripts/marketplace/spectator-camera/spectatorCamera.js index cc600632e5..27c4eaef7b 100644 --- a/unpublishedScripts/marketplace/spectator-camera/spectatorCamera.js +++ b/unpublishedScripts/marketplace/spectator-camera/spectatorCamera.js @@ -188,7 +188,7 @@ // -tablet: The tablet instance to be modified. var tablet = null; function startup() { - tablet = Tablets.getTablet("com.highfidelity.interface.tablet.system"); + tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); addOrRemoveButton(false, HMD.active); tablet.screenChanged.connect(onTabletScreenChanged); Window.domainChanged.connect(onDomainChanged); diff --git a/unpublishedScripts/marketplace/tablet-raiseHand/tablet-raiseHand.js b/unpublishedScripts/marketplace/tablet-raiseHand/tablet-raiseHand.js index 2f895d5f94..f7702053a4 100644 --- a/unpublishedScripts/marketplace/tablet-raiseHand/tablet-raiseHand.js +++ b/unpublishedScripts/marketplace/tablet-raiseHand/tablet-raiseHand.js @@ -20,7 +20,7 @@ var isRaiseHandButtonActive = false; var animHandlerId; - var tablet = Tablets.getTablet("com.highfidelity.interface.tablet.system"); + var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); var button = tablet.addButton({ text: BUTTON_NAME, icon: "icons/tablet-icons/raise-hand-i.svg", From bb2e061d77d2d38cb95b048a10055428330b2d19 Mon Sep 17 00:00:00 2001 From: Brad Davis Date: Wed, 15 Nov 2017 12:00:52 -0800 Subject: [PATCH 031/148] Fixing global declarations in JS --- interface/resources/qml/LoginDialog/LinkAccountBody.qml | 2 +- interface/resources/qml/LoginDialog/SignUpBody.qml | 2 +- interface/resources/qml/LoginDialog/UsernameCollisionBody.qml | 2 +- scripts/developer/tests/dynamics/dynamicsTests.js | 2 +- scripts/developer/tests/tabletEventBridgeTest.js | 2 +- scripts/developer/utilities/render/photobooth/photoboothApp.js | 2 +- scripts/system/audioMuteOverlay.js | 2 +- scripts/system/audioScope.js | 2 +- scripts/system/controllers/godView.js | 2 +- scripts/system/edit.js | 2 +- scripts/system/fingerPaint.js | 2 +- scripts/system/generalSettings.js | 2 +- scripts/system/goto.js | 2 +- scripts/system/help.js | 2 +- scripts/system/hmd.js | 2 +- scripts/system/libraries/WebTablet.js | 2 +- scripts/system/libraries/entityList.js | 2 +- scripts/system/marketplaces/marketplaces.js | 2 +- scripts/system/notifications.js | 2 +- scripts/system/pal.js | 2 +- scripts/system/snapshot.js | 2 +- scripts/system/tablet-goto.js | 2 +- scripts/system/tablet-ui/tabletUI.js | 2 +- scripts/tutorials/createFloatingLanternBox.js | 2 +- scripts/tutorials/createTetherballStick.js | 2 +- scripts/tutorials/entity_scripts/floatingLantern.js | 2 +- scripts/tutorials/entity_scripts/floatingLanternBox.js | 2 +- scripts/tutorials/entity_scripts/tetherballStick.js | 2 +- .../marketplace/spectator-camera/spectatorCamera.js | 2 +- 29 files changed, 29 insertions(+), 29 deletions(-) diff --git a/interface/resources/qml/LoginDialog/LinkAccountBody.qml b/interface/resources/qml/LoginDialog/LinkAccountBody.qml index 552291c186..300bcd46f0 100644 --- a/interface/resources/qml/LoginDialog/LinkAccountBody.qml +++ b/interface/resources/qml/LoginDialog/LinkAccountBody.qml @@ -248,7 +248,7 @@ Item { //dont rise local keyboard keyboardEnabled = !root.isTablet && HMD.active; - //but rise Tablet's one instead for Tablets interface + //but rise Tablet's one instead for Tablet interface if (root.isTablet) { root.keyboardEnabled = HMD.active; root.keyboardRaised = Qt.binding( function() { return keyboardRaised; }) diff --git a/interface/resources/qml/LoginDialog/SignUpBody.qml b/interface/resources/qml/LoginDialog/SignUpBody.qml index e521e16a60..9d55998b40 100644 --- a/interface/resources/qml/LoginDialog/SignUpBody.qml +++ b/interface/resources/qml/LoginDialog/SignUpBody.qml @@ -221,7 +221,7 @@ Item { root.iconText = "<" //dont rise local keyboard keyboardEnabled = !root.isTablet && HMD.active; - //but rise Tablet's one instead for Tablets interface + //but rise Tablet's one instead for Tablet interface if (root.isTablet) { root.keyboardEnabled = HMD.active; root.keyboardRaised = Qt.binding( function() { return keyboardRaised; }) diff --git a/interface/resources/qml/LoginDialog/UsernameCollisionBody.qml b/interface/resources/qml/LoginDialog/UsernameCollisionBody.qml index 185cbd9d47..5c212578b8 100644 --- a/interface/resources/qml/LoginDialog/UsernameCollisionBody.qml +++ b/interface/resources/qml/LoginDialog/UsernameCollisionBody.qml @@ -131,7 +131,7 @@ Item { root.iconText = "<" //dont rise local keyboard keyboardEnabled = !root.isTablet && HMD.active; - //but rise Tablet's one instead for Tablets interface + //but rise Tablet's one instead for Tablet interface if (root.isTablet) { root.keyboardEnabled = HMD.active; root.keyboardRaised = Qt.binding( function() { return keyboardRaised; }) diff --git a/scripts/developer/tests/dynamics/dynamicsTests.js b/scripts/developer/tests/dynamics/dynamicsTests.js index fa51403732..c0b001eab3 100644 --- a/scripts/developer/tests/dynamics/dynamicsTests.js +++ b/scripts/developer/tests/dynamics/dynamicsTests.js @@ -11,7 +11,7 @@ "use strict"; -/* global Entities, Script, Tablets, MyAvatar, Vec3 */ +/* global Entities, Script, Tablet, MyAvatar, Vec3 */ (function() { // BEGIN LOCAL_SCOPE diff --git a/scripts/developer/tests/tabletEventBridgeTest.js b/scripts/developer/tests/tabletEventBridgeTest.js index d386b220fc..83031741fc 100644 --- a/scripts/developer/tests/tabletEventBridgeTest.js +++ b/scripts/developer/tests/tabletEventBridgeTest.js @@ -11,7 +11,7 @@ // Adds a button to the tablet that will switch to a web page. // This web page contains buttons that will use the event bridge to trigger sounds. -/* globals Tablets */ +/* globals Tablet */ var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); diff --git a/scripts/developer/utilities/render/photobooth/photoboothApp.js b/scripts/developer/utilities/render/photobooth/photoboothApp.js index 0e8eef7352..154028f091 100644 --- a/scripts/developer/utilities/render/photobooth/photoboothApp.js +++ b/scripts/developer/utilities/render/photobooth/photoboothApp.js @@ -8,7 +8,7 @@ // Distributed under the Apache License, Version 2.0. // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // -/* globals Tablets, Toolbars, Script, HMD, Controller, Menu */ +/* globals Tablet, Toolbars, Script, HMD, Controller, Menu */ (function () { var SNAPSHOT_DELAY = 500; // 500ms var PHOTOBOOTH_WINDOW_HTML_URL = Script.resolvePath("./html/photobooth.html"); diff --git a/scripts/system/audioMuteOverlay.js b/scripts/system/audioMuteOverlay.js index 0db4edb85d..731d62017d 100644 --- a/scripts/system/audioMuteOverlay.js +++ b/scripts/system/audioMuteOverlay.js @@ -1,6 +1,6 @@ "use strict"; /* jslint vars: true, plusplus: true, forin: true*/ -/* globals Tablets, Script, AvatarList, Users, Entities, MyAvatar, Camera, Overlays, Vec3, Quat, Controller, print, getControllerWorldLocation */ +/* globals Tablet, Script, AvatarList, Users, Entities, MyAvatar, Camera, Overlays, Vec3, Quat, Controller, print, getControllerWorldLocation */ /* eslint indent: ["error", 4, { "outerIIFEBody": 0 }] */ // // audioMuteOverlay.js diff --git a/scripts/system/audioScope.js b/scripts/system/audioScope.js index 07efb17046..81d8e8fbd4 100644 --- a/scripts/system/audioScope.js +++ b/scripts/system/audioScope.js @@ -9,7 +9,7 @@ // 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, Tablets, AudioScope, Audio */ +/* global Script, Tablet, AudioScope, Audio */ (function () { // BEGIN LOCAL_SCOPE diff --git a/scripts/system/controllers/godView.js b/scripts/system/controllers/godView.js index 9551c886c9..4b406399fd 100644 --- a/scripts/system/controllers/godView.js +++ b/scripts/system/controllers/godView.js @@ -9,7 +9,7 @@ // Distributed under the Apache License, Version 2.0. // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // -/* globals HMD, Script, Menu, Tablets, Camera */ +/* globals HMD, Script, Menu, Tablet, Camera */ /* eslint indent: ["error", 4, { "outerIIFEBody": 0 }] */ (function() { // BEGIN LOCAL_SCOPE diff --git a/scripts/system/edit.js b/scripts/system/edit.js index c4a8f0f54f..2bbd422c65 100644 --- a/scripts/system/edit.js +++ b/scripts/system/edit.js @@ -11,7 +11,7 @@ // /* global Script, SelectionDisplay, LightOverlayManager, CameraManager, Grid, GridTool, EntityListTool, Vec3, SelectionManager, Overlays, OverlayWebWindow, UserActivityLogger, - Settings, Entities, Tablets, Toolbars, Messages, Menu, Camera, progressDialog, tooltip, MyAvatar, Quat, Controller, Clipboard, HMD, UndoStack, ParticleExplorerTool */ + Settings, Entities, Tablet, Toolbars, Messages, Menu, Camera, progressDialog, tooltip, MyAvatar, Quat, Controller, Clipboard, HMD, UndoStack, ParticleExplorerTool */ (function() { // BEGIN LOCAL_SCOPE diff --git a/scripts/system/fingerPaint.js b/scripts/system/fingerPaint.js index 06403b77b7..88245503e8 100644 --- a/scripts/system/fingerPaint.js +++ b/scripts/system/fingerPaint.js @@ -419,7 +419,7 @@ return; } - // Tablets button. + // Tablet button. button = tablet.addButton({ icon: "icons/tablet-icons/finger-paint-i.svg", activeIcon: "icons/tablet-icons/finger-paint-a.svg", diff --git a/scripts/system/generalSettings.js b/scripts/system/generalSettings.js index 0e917d6ae4..082528ffc5 100644 --- a/scripts/system/generalSettings.js +++ b/scripts/system/generalSettings.js @@ -10,7 +10,7 @@ // Distributed under the Apache License, Version 2.0. // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // -/* globals Tablets, Toolbars, Script, HMD, DialogsManager */ +/* globals Tablet, Toolbars, Script, HMD, DialogsManager */ (function() { // BEGIN LOCAL_SCOPE diff --git a/scripts/system/goto.js b/scripts/system/goto.js index f301af60bd..d364bf579e 100644 --- a/scripts/system/goto.js +++ b/scripts/system/goto.js @@ -10,7 +10,7 @@ // Distributed under the Apache License, Version 2.0. // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // -/* globals Tablets, Toolbars, Script, HMD, DialogsManager */ +/* globals Tablet, Toolbars, Script, HMD, DialogsManager */ (function() { // BEGIN LOCAL_SCOPE diff --git a/scripts/system/help.js b/scripts/system/help.js index cf0cd3c003..9ab7fa3fb3 100644 --- a/scripts/system/help.js +++ b/scripts/system/help.js @@ -10,7 +10,7 @@ // Distributed under the Apache License, Version 2.0. // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // -/* globals Tablets, Script, HMD, Controller, Menu */ +/* globals Tablet, Script, HMD, Controller, Menu */ (function() { // BEGIN LOCAL_SCOPE diff --git a/scripts/system/hmd.js b/scripts/system/hmd.js index e4f6455876..b9fd7f725c 100644 --- a/scripts/system/hmd.js +++ b/scripts/system/hmd.js @@ -10,7 +10,7 @@ // Distributed under the Apache License, Version 2.0. // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // -/* globals HMD, Script, Menu, Tablets, Camera */ +/* globals HMD, Script, Menu, Tablet, Camera */ /* eslint indent: ["error", 4, { "outerIIFEBody": 0 }] */ (function() { // BEGIN LOCAL_SCOPE diff --git a/scripts/system/libraries/WebTablet.js b/scripts/system/libraries/WebTablet.js index 0fb4258f68..c46cfaa073 100644 --- a/scripts/system/libraries/WebTablet.js +++ b/scripts/system/libraries/WebTablet.js @@ -7,7 +7,7 @@ // Distributed under the Apache License, Version 2.0. // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // -/* global getControllerWorldLocation, Tablets, WebTablet:true, HMD, Settings, Script, +/* global getControllerWorldLocation, Tablet, WebTablet:true, HMD, Settings, Script, Vec3, Quat, MyAvatar, Entities, Overlays, Camera, Messages, Xform, clamp, Controller, Mat4, resizeTablet */ Script.include(Script.resolvePath("../libraries/utils.js")); diff --git a/scripts/system/libraries/entityList.js b/scripts/system/libraries/entityList.js index 70e0645757..9d9689000e 100644 --- a/scripts/system/libraries/entityList.js +++ b/scripts/system/libraries/entityList.js @@ -8,7 +8,7 @@ // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // -/* global EntityListTool, Tablets, selectionManager, Entities, Camera, MyAvatar, Vec3, Menu, Messages, +/* global EntityListTool, Tablet, selectionManager, Entities, Camera, MyAvatar, Vec3, Menu, Messages, cameraManager, MENU_EASE_ON_FOCUS, deleteSelectedEntities, toggleSelectedEntitiesLocked, toggleSelectedEntitiesVisible */ EntityListTool = function(opts) { diff --git a/scripts/system/marketplaces/marketplaces.js b/scripts/system/marketplaces/marketplaces.js index 750194bed2..4f2e47ee07 100644 --- a/scripts/system/marketplaces/marketplaces.js +++ b/scripts/system/marketplaces/marketplaces.js @@ -8,7 +8,7 @@ // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // -/* global Tablets, Script, HMD, UserActivityLogger, Entities */ +/* global Tablet, Script, HMD, UserActivityLogger, Entities */ /* eslint indent: ["error", 4, { "outerIIFEBody": 0 }] */ (function () { // BEGIN LOCAL_SCOPE diff --git a/scripts/system/notifications.js b/scripts/system/notifications.js index e1741cfa3b..b6ddd9d33e 100644 --- a/scripts/system/notifications.js +++ b/scripts/system/notifications.js @@ -1,6 +1,6 @@ "use strict"; /*jslint vars:true, plusplus:true, forin:true*/ -/*global Script, Settings, Window, Controller, Overlays, SoundArray, LODManager, MyAvatar, Tablets, Camera, HMD, Menu, Quat, Vec3*/ +/*global Script, Settings, Window, Controller, Overlays, SoundArray, LODManager, MyAvatar, Tablet, Camera, HMD, Menu, Quat, Vec3*/ // // notifications.js // Version 0.801 diff --git a/scripts/system/pal.js b/scripts/system/pal.js index bd318193cf..ed7059f9f3 100644 --- a/scripts/system/pal.js +++ b/scripts/system/pal.js @@ -1,6 +1,6 @@ "use strict"; /*jslint vars:true, plusplus:true, forin:true*/ -/*global Tablets, Settings, Script, AvatarList, Users, Entities, MyAvatar, Camera, Overlays, Vec3, Quat, HMD, Controller, Account, UserActivityLogger, Messages, Window, XMLHttpRequest, print, location, getControllerWorldLocation*/ +/*global Tablet, Settings, Script, AvatarList, Users, Entities, MyAvatar, Camera, Overlays, Vec3, Quat, HMD, Controller, Account, UserActivityLogger, Messages, Window, XMLHttpRequest, print, location, getControllerWorldLocation*/ /* eslint indent: ["error", 4, { "outerIIFEBody": 0 }] */ // // pal.js diff --git a/scripts/system/snapshot.js b/scripts/system/snapshot.js index a14e1f2772..9afdb4ec53 100644 --- a/scripts/system/snapshot.js +++ b/scripts/system/snapshot.js @@ -7,7 +7,7 @@ // Distributed under the Apache License, Version 2.0 // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // -/* globals Tablets, Script, HMD, Settings, DialogsManager, Menu, Reticle, OverlayWebWindow, Desktop, Account, MyAvatar, Snapshot */ +/* globals Tablet, Script, HMD, Settings, DialogsManager, Menu, Reticle, OverlayWebWindow, Desktop, Account, MyAvatar, Snapshot */ /* eslint indent: ["error", 4, { "outerIIFEBody": 0 }] */ (function () { // BEGIN LOCAL_SCOPE diff --git a/scripts/system/tablet-goto.js b/scripts/system/tablet-goto.js index 8347fcff9a..2a0e827932 100644 --- a/scripts/system/tablet-goto.js +++ b/scripts/system/tablet-goto.js @@ -1,6 +1,6 @@ "use strict"; /*jslint vars:true, plusplus:true, forin:true*/ -/*global Window, Script, Tablets, HMD, Controller, Account, XMLHttpRequest, location, print*/ +/*global Window, Script, Tablet, HMD, Controller, Account, XMLHttpRequest, location, print*/ // // goto.js diff --git a/scripts/system/tablet-ui/tabletUI.js b/scripts/system/tablet-ui/tabletUI.js index 0032239867..17821c737e 100644 --- a/scripts/system/tablet-ui/tabletUI.js +++ b/scripts/system/tablet-ui/tabletUI.js @@ -12,7 +12,7 @@ // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // -/* global Script, HMD, WebTablet, UIWebTablet, UserActivityLogger, Settings, Entities, Messages, Tablets, Overlays, +/* global Script, HMD, WebTablet, UIWebTablet, UserActivityLogger, Settings, Entities, Messages, Tablet, Overlays, MyAvatar, Menu, AvatarInputs, Vec3 */ (function() { // BEGIN LOCAL_SCOPE diff --git a/scripts/tutorials/createFloatingLanternBox.js b/scripts/tutorials/createFloatingLanternBox.js index c83535fa37..c84214e295 100644 --- a/scripts/tutorials/createFloatingLanternBox.js +++ b/scripts/tutorials/createFloatingLanternBox.js @@ -1,6 +1,6 @@ "use strict"; /* jslint vars: true, plusplus: true, forin: true*/ -/* globals Tablets, Script, AvatarList, Users, Entities, MyAvatar, Camera, Overlays, Vec3, Quat, Controller, print, getControllerWorldLocation */ +/* globals Tablet, Script, AvatarList, Users, Entities, MyAvatar, Camera, Overlays, Vec3, Quat, Controller, print, getControllerWorldLocation */ /* eslint indent: ["error", 4, { "outerIIFEBody": 0 }] */ // // createFloatinLanternBox.js diff --git a/scripts/tutorials/createTetherballStick.js b/scripts/tutorials/createTetherballStick.js index 3ad0939c2e..35f5fb0344 100644 --- a/scripts/tutorials/createTetherballStick.js +++ b/scripts/tutorials/createTetherballStick.js @@ -1,6 +1,6 @@ "use strict"; /* jslint vars: true, plusplus: true, forin: true*/ -/* globals Tablets, Script, AvatarList, Users, Entities, MyAvatar, Camera, Overlays, Vec3, Quat, Controller, print, getControllerWorldLocation */ +/* globals Tablet, Script, AvatarList, Users, Entities, MyAvatar, Camera, Overlays, Vec3, Quat, Controller, print, getControllerWorldLocation */ /* eslint indent: ["error", 4, { "outerIIFEBody": 0 }] */ // // createTetherballStick.js diff --git a/scripts/tutorials/entity_scripts/floatingLantern.js b/scripts/tutorials/entity_scripts/floatingLantern.js index c2a79c9c5b..aa25dc0003 100644 --- a/scripts/tutorials/entity_scripts/floatingLantern.js +++ b/scripts/tutorials/entity_scripts/floatingLantern.js @@ -1,6 +1,6 @@ "use strict"; /* jslint vars: true, plusplus: true, forin: true*/ -/* globals Tablets, Script, AvatarList, Users, Entities, MyAvatar, Camera, Overlays, Vec3, Quat, Controller, print, getControllerWorldLocation */ +/* globals Tablet, Script, AvatarList, Users, Entities, MyAvatar, Camera, Overlays, Vec3, Quat, Controller, print, getControllerWorldLocation */ /* eslint indent: ["error", 4, { "outerIIFEBody": 0 }] */ // // floatinLantern.js diff --git a/scripts/tutorials/entity_scripts/floatingLanternBox.js b/scripts/tutorials/entity_scripts/floatingLanternBox.js index b8e0fbda3e..b5fb0c27d9 100644 --- a/scripts/tutorials/entity_scripts/floatingLanternBox.js +++ b/scripts/tutorials/entity_scripts/floatingLanternBox.js @@ -1,6 +1,6 @@ "use strict"; /* jslint vars: true, plusplus: true, forin: true*/ -/* globals Tablets, Script, AvatarList, Users, Entities, MyAvatar, Camera, Overlays, Vec3, Quat, Controller, print, getControllerWorldLocation */ +/* globals Tablet, Script, AvatarList, Users, Entities, MyAvatar, Camera, Overlays, Vec3, Quat, Controller, print, getControllerWorldLocation */ /* eslint indent: ["error", 4, { "outerIIFEBody": 0 }] */ // // floatingLanternBox.js diff --git a/scripts/tutorials/entity_scripts/tetherballStick.js b/scripts/tutorials/entity_scripts/tetherballStick.js index 50bac88caf..867074abd4 100644 --- a/scripts/tutorials/entity_scripts/tetherballStick.js +++ b/scripts/tutorials/entity_scripts/tetherballStick.js @@ -1,6 +1,6 @@ "use strict"; /* jslint vars: true, plusplus: true, forin: true*/ -/* globals Tablets, Script, AvatarList, Users, Entities, MyAvatar, Camera, Overlays, Vec3, Quat, Controller, print, getControllerWorldLocation */ +/* globals Tablet, Script, AvatarList, Users, Entities, MyAvatar, Camera, Overlays, Vec3, Quat, Controller, print, getControllerWorldLocation */ /* eslint indent: ["error", 4, { "outerIIFEBody": 0 }] */ // // tetherballStick.js diff --git a/unpublishedScripts/marketplace/spectator-camera/spectatorCamera.js b/unpublishedScripts/marketplace/spectator-camera/spectatorCamera.js index 27c4eaef7b..76044d2975 100644 --- a/unpublishedScripts/marketplace/spectator-camera/spectatorCamera.js +++ b/unpublishedScripts/marketplace/spectator-camera/spectatorCamera.js @@ -1,6 +1,6 @@ "use strict"; /*jslint vars:true, plusplus:true, forin:true*/ -/*global Tablets, Script, */ +/*global Tablet, Script, */ /* eslint indent: ["error", 4, { "outerIIFEBody": 0 }] */ // // spectatorCamera.js From 0ad399974132417c0181d35af6dd46806730022e Mon Sep 17 00:00:00 2001 From: Brad Davis Date: Wed, 15 Nov 2017 12:24:00 -0800 Subject: [PATCH 032/148] Fixing misname --- libraries/ui/src/ui/OffscreenQmlSurface.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/ui/src/ui/OffscreenQmlSurface.cpp b/libraries/ui/src/ui/OffscreenQmlSurface.cpp index ebd30f9342..b83e7e3afa 100644 --- a/libraries/ui/src/ui/OffscreenQmlSurface.cpp +++ b/libraries/ui/src/ui/OffscreenQmlSurface.cpp @@ -394,7 +394,7 @@ void initializeQmlEngine(QQmlEngine* engine, QQuickWindow* window) { rootContext->setContextProperty("Tablet", DependencyManager::get().data()); rootContext->setContextProperty("Toolbars", DependencyManager::get().data()); TabletProxy* tablet = DependencyManager::get()->getTablet("com.highfidelity.interface.tablet.system"); - myContext->engine()->setObjectOwnership(tablet, QQmlEngine::CppOwnership); + engine->setObjectOwnership(tablet, QQmlEngine::CppOwnership); } QQmlEngine* acquireEngine(QQuickWindow* window) { From 93c3d5314421256547d8518885993f91e76387b1 Mon Sep 17 00:00:00 2001 From: Zach Fox Date: Wed, 15 Nov 2017 16:46:00 -0800 Subject: [PATCH 033/148] Fix marketplaces.js URLs --- scripts/system/marketplaces/marketplaces.js | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/scripts/system/marketplaces/marketplaces.js b/scripts/system/marketplaces/marketplaces.js index 4f2e47ee07..c94db0d0e6 100644 --- a/scripts/system/marketplaces/marketplaces.js +++ b/scripts/system/marketplaces/marketplaces.js @@ -20,10 +20,9 @@ var MARKETPLACE_URL_INITIAL = MARKETPLACE_URL + "?"; // Append "?" to signal injected script that it's the initial page. var MARKETPLACES_URL = Script.resolvePath("../html/marketplaces.html"); var MARKETPLACES_INJECT_SCRIPT_URL = Script.resolvePath("../html/js/marketplacesInject.js"); - var MARKETPLACE_CHECKOUT_QML_PATH_BASE = "qml/hifi/commerce/checkout/Checkout.qml"; - var MARKETPLACE_CHECKOUT_QML_PATH = Script.resourcesPath() + MARKETPLACE_CHECKOUT_QML_PATH_BASE; - var MARKETPLACE_PURCHASES_QML_PATH = Script.resourcesPath() + "qml/hifi/commerce/purchases/Purchases.qml"; - var MARKETPLACE_WALLET_QML_PATH = Script.resourcesPath() + "qml/hifi/commerce/wallet/Wallet.qml"; + var MARKETPLACE_CHECKOUT_QML_PATH = "hifi/commerce/checkout/Checkout.qml"; + var MARKETPLACE_PURCHASES_QML_PATH = "hifi/commerce/purchases/Purchases.qml"; + var MARKETPLACE_WALLET_QML_PATH = "hifi/commerce/wallet/Wallet.qml"; var MARKETPLACE_INSPECTIONCERTIFICATE_QML_PATH = "commerce/inspectionCertificate/InspectionCertificate.qml"; var HOME_BUTTON_TEXTURE = "http://hifi-content.s3.amazonaws.com/alan/dev/tablet-with-home-button.fbx/tablet-with-home-button.fbm/button-root.png"; @@ -110,7 +109,7 @@ var filterText; // Used for updating Purchases QML function onScreenChanged(type, url) { onMarketplaceScreen = type === "Web" && url.indexOf(MARKETPLACE_URL) !== -1; - onCommerceScreen = type === "QML" && (url.indexOf(MARKETPLACE_CHECKOUT_QML_PATH_BASE) !== -1 || url === MARKETPLACE_PURCHASES_QML_PATH || url.indexOf(MARKETPLACE_INSPECTIONCERTIFICATE_QML_PATH) !== -1); + onCommerceScreen = type === "QML" && (url.indexOf(MARKETPLACE_CHECKOUT_QML_PATH) !== -1 || url === MARKETPLACE_PURCHASES_QML_PATH || url.indexOf(MARKETPLACE_INSPECTIONCERTIFICATE_QML_PATH) !== -1); wireEventBridge(onCommerceScreen); if (url === MARKETPLACE_PURCHASES_QML_PATH) { From cc43d8115c3fff02e5aa0d878f0eeabf427bb248 Mon Sep 17 00:00:00 2001 From: amantley Date: Wed, 15 Nov 2017 17:41:33 -0800 Subject: [PATCH 034/148] In response to bug in the original PR, in RenderModelEntityItem.cpp I made a change in the handling of the boundary cases for the first and last frame properties. Also deleted some extraneous comments. --- .../src/RenderableModelEntityItem.cpp | 31 +++++++------------ 1 file changed, 12 insertions(+), 19 deletions(-) diff --git a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp index 3ed0bdfc43..aedc649470 100644 --- a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp @@ -980,8 +980,6 @@ void ModelEntityRenderer::animate(const TypedEntityPointer& entity) { return; } - //added by angus - //this a spot to work on the avatar npc in my branch QVector jointsData; @@ -1000,7 +998,7 @@ void ModelEntityRenderer::animate(const TypedEntityPointer& entity) { if ((firstFrame >= 0) && (firstFrame < lastFrame) && (lastFrame <= frameCount)) { //length of animation in now determined by first and last frame - updatedFrameCount = lastFrame - firstFrame; + updatedFrameCount = (lastFrame - firstFrame + 1); } @@ -1016,14 +1014,12 @@ void ModelEntityRenderer::animate(const TypedEntityPointer& entity) { //here we implement the looping animation property //if we have played through the animation once then we hold on the last frame - // if (!isLooping && (_currentFrame > _endAnim)) { - //don't advance current frame!!! - - //}else{ + if( isLooping || ( _currentFrame < _endAnim ) ){ //else advance the current frame. //if hold or not playing don't advance the current frame. - if (!isHolding && entity->getAnimationIsPlaying()) { + //also if the animFrame is outside of first or last frame then don't advance the motion. + if (!isHolding && entity->getAnimationIsPlaying() && !( _renderAnimationProperties.getCurrentFrame() > _renderAnimationProperties.getLastFrame() ) && !( _renderAnimationProperties.getCurrentFrame() < _renderAnimationProperties.getFirstFrame() ) ) { float deltaTime = (float)interval / (float)USECS_PER_SECOND; _currentFrame += (deltaTime * _renderAnimationProperties.getFPS()); } @@ -1362,17 +1358,14 @@ void ModelEntityRenderer::doRenderUpdateSynchronousTyped(const ScenePointer& sce if (newAnimationProperties != _renderAnimationProperties) { withWriteLock([&] { if ( (newAnimationProperties.getCurrentFrame() != _renderAnimationProperties.getCurrentFrame()) || (newAnimationProperties.getFirstFrame() != _renderAnimationProperties.getFirstFrame()) || (newAnimationProperties.getLastFrame() != _renderAnimationProperties.getLastFrame()) || (newAnimationProperties.getRunning() && !_renderAnimationProperties.getRunning())) { - _currentFrame = newAnimationProperties.getCurrentFrame(); - _endAnim = (_currentFrame - 1) + ((int)(newAnimationProperties.getLastFrame()) - (int)(newAnimationProperties.getFirstFrame())); - _lastAnimated = 0; - //qCDebug(entitiesrenderer) << "reset current frame" << _endAnim; - } - if ( _renderAnimationProperties.getLoop() && !newAnimationProperties.getLoop()) { - //set the end of animation relative to the current frame - //qCDebug(entitiesrenderer) << "turned off looping"; - float startOffset = newAnimationProperties.getCurrentFrame() - newAnimationProperties.getFirstFrame(); - float posRelativeToStart = (_currentFrame - newAnimationProperties.getFirstFrame()) - startOffset; - _endAnim = (_currentFrame - 1) + (((int)(newAnimationProperties.getLastFrame()) - (int)(newAnimationProperties.getFirstFrame())) - ((int)(glm::floor(posRelativeToStart)) % ((int)newAnimationProperties.getLastFrame() - (int)newAnimationProperties.getFirstFrame()))); + if (!(newAnimationProperties.getCurrentFrame() > newAnimationProperties.getLastFrame()) && !(newAnimationProperties.getCurrentFrame() < newAnimationProperties.getFirstFrame())) { + _currentFrame = newAnimationProperties.getCurrentFrame(); + _endAnim = _currentFrame + ( newAnimationProperties.getLastFrame() - newAnimationProperties.getFirstFrame() ); + _lastAnimated = 0; + } + }else if ( _renderAnimationProperties.getLoop() && !newAnimationProperties.getLoop()) { + int currentframe_mod_length = (int)(_currentFrame - (int)(glm::floor(newAnimationProperties.getCurrentFrame()))) % ((int)(glm::floor(newAnimationProperties.getLastFrame())) - (int)(glm::floor(newAnimationProperties.getFirstFrame())) + 1); + _endAnim = _currentFrame + ((int)(newAnimationProperties.getLastFrame()) - (int)(newAnimationProperties.getFirstFrame())) - (float)currentframe_mod_length; } _renderAnimationProperties = newAnimationProperties; }); From 881b22ab159d637561971b63596d7e176cf5552e Mon Sep 17 00:00:00 2001 From: amantley Date: Thu, 16 Nov 2017 12:41:56 -0800 Subject: [PATCH 035/148] added update function to modelEntityItem.cpp --- .../src/RenderableModelEntityItem.cpp | 1 + libraries/entities/src/ModelEntityItem.cpp | 23 +++++++++++++++++++ libraries/entities/src/ModelEntityItem.h | 2 ++ 3 files changed, 26 insertions(+) diff --git a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp index aedc649470..e78e609699 100644 --- a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp @@ -1356,6 +1356,7 @@ void ModelEntityRenderer::doRenderUpdateSynchronousTyped(const ScenePointer& sce // make a copy of the animation properites auto newAnimationProperties = entity->getAnimationProperties(); if (newAnimationProperties != _renderAnimationProperties) { + qCDebug(entitiesrenderer) << "this is where the change is currently handled in the rendering code"; withWriteLock([&] { if ( (newAnimationProperties.getCurrentFrame() != _renderAnimationProperties.getCurrentFrame()) || (newAnimationProperties.getFirstFrame() != _renderAnimationProperties.getFirstFrame()) || (newAnimationProperties.getLastFrame() != _renderAnimationProperties.getLastFrame()) || (newAnimationProperties.getRunning() && !_renderAnimationProperties.getRunning())) { if (!(newAnimationProperties.getCurrentFrame() > newAnimationProperties.getLastFrame()) && !(newAnimationProperties.getCurrentFrame() < newAnimationProperties.getFirstFrame())) { diff --git a/libraries/entities/src/ModelEntityItem.cpp b/libraries/entities/src/ModelEntityItem.cpp index ae73fa684a..515d76a9b3 100644 --- a/libraries/entities/src/ModelEntityItem.cpp +++ b/libraries/entities/src/ModelEntityItem.cpp @@ -186,6 +186,29 @@ void ModelEntityItem::appendSubclassData(OctreePacketData* packetData, EncodeBit } +//angus +/* +void ModelEntityItem::update(const quint64& now) { + + //put something here + qCDebug(entities) << "model entity item update"; + + +} + +bool ModelEntityItem::needsToCallUpdate() const { + + + //put something here + qCDebug(entities) << "needs to call update"; + return true; +} +*/ +//angus + + + + void ModelEntityItem::debugDump() const { qCDebug(entities) << "ModelEntityItem id:" << getEntityItemID(); qCDebug(entities) << " edited ago:" << getEditedAgo(); diff --git a/libraries/entities/src/ModelEntityItem.h b/libraries/entities/src/ModelEntityItem.h index 698197b1a6..4f13fbdf6a 100644 --- a/libraries/entities/src/ModelEntityItem.h +++ b/libraries/entities/src/ModelEntityItem.h @@ -46,8 +46,10 @@ public: EntityPropertyFlags& propertyFlags, bool overwriteLocalData, bool& somethingChanged) override; + //angus //virtual void update(const quint64& now) override; //virtual bool needsToCallUpdate() const override; + //angus virtual void debugDump() const override; void setShapeType(ShapeType type) override; From 20fd893b47dfd3b2214c830fd56646c81393e8a6 Mon Sep 17 00:00:00 2001 From: amantley Date: Thu, 16 Nov 2017 18:38:28 -0800 Subject: [PATCH 036/148] Starting to implement the update function to ModelEntityItem_cpp Also put access to the currently playing frame in RenderableModelEntityItem_cpp --- .../src/RenderableModelEntityItem.cpp | 4 +- .../entities/src/AnimationPropertyGroup.cpp | 12 ++++++ .../entities/src/AnimationPropertyGroup.h | 1 + libraries/entities/src/ModelEntityItem.cpp | 42 +++++++++++++++---- libraries/entities/src/ModelEntityItem.h | 10 ++++- 5 files changed, 57 insertions(+), 12 deletions(-) diff --git a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp index e78e609699..2ba8a7a45f 100644 --- a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp @@ -971,9 +971,6 @@ void ModelEntityRenderer::onRemoveFromSceneTyped(const TypedEntityPointer& entit entity->setModel({}); } -bool operator!=(const AnimationPropertyGroup& a, const AnimationPropertyGroup& b) { - return !(a == b); -} void ModelEntityRenderer::animate(const TypedEntityPointer& entity) { if (!_animation || !_animation->isLoaded()) { @@ -1357,6 +1354,7 @@ void ModelEntityRenderer::doRenderUpdateSynchronousTyped(const ScenePointer& sce auto newAnimationProperties = entity->getAnimationProperties(); if (newAnimationProperties != _renderAnimationProperties) { qCDebug(entitiesrenderer) << "this is where the change is currently handled in the rendering code"; + qCDebug(entitiesrenderer) << "getting the currently playing frame from the modelentityitem update" << entity->getCurrentlyPlayingFrame(); withWriteLock([&] { if ( (newAnimationProperties.getCurrentFrame() != _renderAnimationProperties.getCurrentFrame()) || (newAnimationProperties.getFirstFrame() != _renderAnimationProperties.getFirstFrame()) || (newAnimationProperties.getLastFrame() != _renderAnimationProperties.getLastFrame()) || (newAnimationProperties.getRunning() && !_renderAnimationProperties.getRunning())) { if (!(newAnimationProperties.getCurrentFrame() > newAnimationProperties.getLastFrame()) && !(newAnimationProperties.getCurrentFrame() < newAnimationProperties.getFirstFrame())) { diff --git a/libraries/entities/src/AnimationPropertyGroup.cpp b/libraries/entities/src/AnimationPropertyGroup.cpp index d6a2937553..c871849064 100644 --- a/libraries/entities/src/AnimationPropertyGroup.cpp +++ b/libraries/entities/src/AnimationPropertyGroup.cpp @@ -31,6 +31,18 @@ bool operator==(const AnimationPropertyGroup& a, const AnimationPropertyGroup& b (a._hold == b._hold); } +bool operator!=(const AnimationPropertyGroup& a, const AnimationPropertyGroup& b) { + return + (a._url != b._url) || + (a._currentFrame != b._currentFrame) || + (a._running != b._running) || + (a._loop != b._loop) || + (a._firstFrame != b._firstFrame) || + (a._lastFrame != b._lastFrame) || + (a._hold != b._hold); +} + + void AnimationPropertyGroup::copyToScriptValue(const EntityPropertyFlags& desiredProperties, QScriptValue& properties, QScriptEngine* engine, bool skipDefaults, EntityItemProperties& defaultEntityProperties) const { COPY_GROUP_PROPERTY_TO_QSCRIPTVALUE(PROP_ANIMATION_URL, Animation, animation, URL, url); COPY_GROUP_PROPERTY_TO_QSCRIPTVALUE(PROP_ANIMATION_ALLOW_TRANSLATION, Animation, animation, AllowTranslation, allowTranslation); diff --git a/libraries/entities/src/AnimationPropertyGroup.h b/libraries/entities/src/AnimationPropertyGroup.h index affa960d66..54d4ced92f 100644 --- a/libraries/entities/src/AnimationPropertyGroup.h +++ b/libraries/entities/src/AnimationPropertyGroup.h @@ -89,6 +89,7 @@ public: protected: friend bool operator==(const AnimationPropertyGroup& a, const AnimationPropertyGroup& b); + friend bool operator!=(const AnimationPropertyGroup& a, const AnimationPropertyGroup& b); void setFromOldAnimationSettings(const QString& value); }; diff --git a/libraries/entities/src/ModelEntityItem.cpp b/libraries/entities/src/ModelEntityItem.cpp index 515d76a9b3..c24efa8eec 100644 --- a/libraries/entities/src/ModelEntityItem.cpp +++ b/libraries/entities/src/ModelEntityItem.cpp @@ -187,12 +187,33 @@ void ModelEntityItem::appendSubclassData(OctreePacketData* packetData, EncodeBit //angus -/* + void ModelEntityItem::update(const quint64& now) { //put something here - qCDebug(entities) << "model entity item update"; + //qCDebug(entities) << "model entity item update" << getName() << " " << getEntityItemID(); + { + auto currentAnimationProperties = this->getAnimationProperties(); + + if (_previousAnimationProperties != currentAnimationProperties) { + qCDebug(entities) << "this is where the _currentFrame change is handled in the ModelEntityItem.cpp code"; + withWriteLock([&] { + //if ( (newAnimationProperties.getCurrentFrame() != _renderAnimationProperties.getCurrentFrame()) || (newAnimationProperties.getFirstFrame() != _renderAnimationProperties.getFirstFrame()) || (newAnimationProperties.getLastFrame() != _renderAnimationProperties.getLastFrame()) || (newAnimationProperties.getRunning() && !_renderAnimationProperties.getRunning())) { + // if (!(newAnimationProperties.getCurrentFrame() > newAnimationProperties.getLastFrame()) && !(newAnimationProperties.getCurrentFrame() < newAnimationProperties.getFirstFrame())) { + // _currentFrame = newAnimationProperties.getCurrentFrame(); + // _endAnim = _currentFrame + ( newAnimationProperties.getLastFrame() - newAnimationProperties.getFirstFrame() ); + //_lastAnimated = 0; + // } + //}else if ( _renderAnimationProperties.getLoop() && !newAnimationProperties.getLoop()) { + // int currentframe_mod_length = (int)(_currentFrame - (int)(glm::floor(newAnimationProperties.getCurrentFrame()))) % ((int)(glm::floor(newAnimationProperties.getLastFrame())) - (int)(glm::floor(newAnimationProperties.getFirstFrame())) + 1); + // _endAnim = _currentFrame + ((int)(newAnimationProperties.getLastFrame()) - (int)(newAnimationProperties.getFirstFrame())) - (float)currentframe_mod_length; + // } + _previousAnimationProperties = currentAnimationProperties; + }); + } + + } } @@ -200,10 +221,10 @@ bool ModelEntityItem::needsToCallUpdate() const { //put something here - qCDebug(entities) << "needs to call update"; + //qCDebug(entities) << "needs to call update"; return true; } -*/ + //angus @@ -603,8 +624,9 @@ float ModelEntityItem::getAnimationLastFrame() const { return _animationProperties.getLastFrame(); }); } +//angus change bool ModelEntityItem::getAnimationIsPlaying() const { - return resultWithReadLock([&] { + return resultWithReadLock([&] { return _animationProperties.getRunning(); }); } @@ -614,11 +636,17 @@ float ModelEntityItem::getAnimationCurrentFrame() const { return _animationProperties.getCurrentFrame(); }); } - +//angus change bool ModelEntityItem::isAnimatingSomething() const { - return resultWithReadLock([&] { + return resultWithReadLock([&] { return !_animationProperties.getURL().isEmpty() && _animationProperties.getRunning() && (_animationProperties.getFPS() != 0.0f); }); } + +float ModelEntityItem::getCurrentlyPlayingFrame() const { + return resultWithReadLock([&] { + return _currentlyPlayingFrame; + }); +} diff --git a/libraries/entities/src/ModelEntityItem.h b/libraries/entities/src/ModelEntityItem.h index 4f13fbdf6a..c9c33e10c9 100644 --- a/libraries/entities/src/ModelEntityItem.h +++ b/libraries/entities/src/ModelEntityItem.h @@ -47,8 +47,8 @@ public: bool& somethingChanged) override; //angus - //virtual void update(const quint64& now) override; - //virtual bool needsToCallUpdate() const override; + virtual void update(const quint64& now) override; + virtual bool needsToCallUpdate() const override; //angus virtual void debugDump() const override; @@ -107,6 +107,8 @@ public: float getAnimationCurrentFrame() const; bool isAnimatingSomething() const; + float getCurrentlyPlayingFrame() const; + static const QString DEFAULT_TEXTURES; const QString getTextures() const; void setTextures(const QString& textures); @@ -163,6 +165,10 @@ protected: QString _textures; ShapeType _shapeType = SHAPE_TYPE_NONE; + +private: + float _currentlyPlayingFrame{ 0 }; + AnimationPropertyGroup _previousAnimationProperties; }; #endif // hifi_ModelEntityItem_h From d31578abae3a1310b8224e6505a19866c1c54ebd Mon Sep 17 00:00:00 2001 From: Zach Fox Date: Fri, 17 Nov 2017 15:47:02 -0800 Subject: [PATCH 037/148] FIXME LATER! Remove mouseareas from passphrase screens --- .../hifi/commerce/wallet/PassphraseModal.qml | 16 +++---- .../commerce/wallet/PassphraseSelection.qml | 48 +++++++++---------- 2 files changed, 32 insertions(+), 32 deletions(-) diff --git a/interface/resources/qml/hifi/commerce/wallet/PassphraseModal.qml b/interface/resources/qml/hifi/commerce/wallet/PassphraseModal.qml index 9f04db7d5c..44dda1b7ad 100644 --- a/interface/resources/qml/hifi/commerce/wallet/PassphraseModal.qml +++ b/interface/resources/qml/hifi/commerce/wallet/PassphraseModal.qml @@ -206,15 +206,15 @@ Item { root.isPasswordField = (focus && passphraseField.echoMode === TextInput.Password); } - MouseArea { - anchors.fill: parent; + //MouseArea { + // anchors.fill: parent; - onClicked: { - root.keyboardRaised = true; - root.isPasswordField = (passphraseField.echoMode === TextInput.Password); - mouse.accepted = false; - } - } + // onClicked: { + // root.keyboardRaised = true; + // root.isPasswordField = (passphraseField.echoMode === TextInput.Password); + // mouse.accepted = false; + // } + //} onAccepted: { submitPassphraseInputButton.enabled = false; diff --git a/interface/resources/qml/hifi/commerce/wallet/PassphraseSelection.qml b/interface/resources/qml/hifi/commerce/wallet/PassphraseSelection.qml index 0145f92b96..cc23e6bb4d 100644 --- a/interface/resources/qml/hifi/commerce/wallet/PassphraseSelection.qml +++ b/interface/resources/qml/hifi/commerce/wallet/PassphraseSelection.qml @@ -87,14 +87,14 @@ Item { } } - MouseArea { - anchors.fill: parent; - onPressed: { - var hidePassword = (currentPassphraseField.echoMode === TextInput.Password); - sendSignalToWallet({method: 'walletSetup_raiseKeyboard', isPasswordField: hidePassword}); - mouse.accepted = false; - } - } + //MouseArea { + // anchors.fill: parent; + // onPressed: { + // var hidePassword = (currentPassphraseField.echoMode === TextInput.Password); + // sendSignalToWallet({method: 'walletSetup_raiseKeyboard', isPasswordField: hidePassword}); + // mouse.accepted = false; + // } + //} onAccepted: { passphraseField.focus = true; @@ -115,14 +115,14 @@ Item { activeFocusOnPress: true; activeFocusOnTab: true; - MouseArea { - anchors.fill: parent; - onPressed: { - var hidePassword = (passphraseField.echoMode === TextInput.Password); - sendSignalToWallet({method: 'walletSetup_raiseKeyboard', isPasswordField: hidePassword}); - mouse.accepted = false; - } - } + //MouseArea { + // anchors.fill: parent; + // onPressed: { + // var hidePassword = (passphraseField.echoMode === TextInput.Password); + // sendSignalToWallet({method: 'walletSetup_raiseKeyboard', isPasswordField: hidePassword}); + // mouse.accepted = false; + // } + //} onFocusChanged: { if (focus) { @@ -151,14 +151,14 @@ Item { activeFocusOnPress: true; activeFocusOnTab: true; - MouseArea { - anchors.fill: parent; - onPressed: { - var hidePassword = (passphraseFieldAgain.echoMode === TextInput.Password); - sendSignalToWallet({method: 'walletSetup_raiseKeyboard', isPasswordField: hidePassword}); - mouse.accepted = false; - } - } + //MouseArea { + // anchors.fill: parent; + // onPressed: { + // var hidePassword = (passphraseFieldAgain.echoMode === TextInput.Password); + // sendSignalToWallet({method: 'walletSetup_raiseKeyboard', isPasswordField: hidePassword}); + // mouse.accepted = false; + // } + //} onFocusChanged: { if (focus) { From 013d16cee9e0d30c05458e76685ae8675549efba Mon Sep 17 00:00:00 2001 From: amantley Date: Fri, 17 Nov 2017 18:37:54 -0800 Subject: [PATCH 038/148] this is the change to add a property for the currentframeplaying --- .../src/RenderableModelEntityItem.cpp | 27 +++++++-- .../src/RenderableModelEntityItem.h | 4 +- .../entities/src/AnimationPropertyGroup.cpp | 16 +++++ .../entities/src/AnimationPropertyGroup.h | 1 + .../entities/src/EntityItemProperties.cpp | 1 + libraries/entities/src/EntityPropertyFlags.h | 2 + libraries/entities/src/ModelEntityItem.cpp | 60 +++++++++++++++---- libraries/entities/src/ModelEntityItem.h | 11 +++- 8 files changed, 102 insertions(+), 20 deletions(-) diff --git a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp index 2ba8a7a45f..3176010536 100644 --- a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp @@ -993,12 +993,19 @@ void ModelEntityRenderer::animate(const TypedEntityPointer& entity) { bool isHolding = entity->getAnimationHold(); int updatedFrameCount = frameCount; + //get the updated frame from the ModelEntity + auto modelAnimProperties = entity->getAnimationProperties(); + withWriteLock([&] { + _currentFrame = modelAnimProperties.getCurrentlyPlayingFrame(); + }); + qCDebug(entitiesrenderer) << "the client frame count is the following " << _currentFrame; + if ((firstFrame >= 0) && (firstFrame < lastFrame) && (lastFrame <= frameCount)) { //length of animation in now determined by first and last frame updatedFrameCount = (lastFrame - firstFrame + 1); } - + /* if (!_lastAnimated) { _lastAnimated = usecTimestampNow(); return; @@ -1008,7 +1015,7 @@ void ModelEntityRenderer::animate(const TypedEntityPointer& entity) { auto interval = now - _lastAnimated; _lastAnimated = now; - + //here we implement the looping animation property //if we have played through the animation once then we hold on the last frame @@ -1021,12 +1028,12 @@ void ModelEntityRenderer::animate(const TypedEntityPointer& entity) { _currentFrame += (deltaTime * _renderAnimationProperties.getFPS()); } } - + */ { //where are we in the currently defined animation segment? - int animationCurrentFrame = (int)(glm::floor(_currentFrame - _renderAnimationProperties.getFirstFrame())) % updatedFrameCount; + int animationCurrentFrame = (int)(glm::floor(_currentFrame - firstFrame)) % updatedFrameCount; //this gives us the absolute frame value to use by adding the first frame value. - animationCurrentFrame += _renderAnimationProperties.getFirstFrame(); + animationCurrentFrame += firstFrame; @@ -1347,7 +1354,7 @@ void ModelEntityRenderer::doRenderUpdateSynchronousTyped(const ScenePointer& sce if (model->getRenderItemsNeedUpdate()) { model->updateRenderItems(); } - + /* { DETAILED_PROFILE_RANGE(simulation_physics, "CheckAnimation"); // make a copy of the animation properites @@ -1370,6 +1377,14 @@ void ModelEntityRenderer::doRenderUpdateSynchronousTyped(const ScenePointer& sce }); } } + */ + //angus + { + + //_currentFrame = entity->getCurrentlyPlayingFrame(); + } + //angus + if (_animating) { DETAILED_PROFILE_RANGE(simulation_physics, "Animate"); diff --git a/libraries/entities-renderer/src/RenderableModelEntityItem.h b/libraries/entities-renderer/src/RenderableModelEntityItem.h index 16892ce3e0..3a0c5c506b 100644 --- a/libraries/entities-renderer/src/RenderableModelEntityItem.h +++ b/libraries/entities-renderer/src/RenderableModelEntityItem.h @@ -183,9 +183,9 @@ private: bool _marketplaceEntity { false }; bool _shouldHighlight { false }; bool _animating { false }; - uint64_t _lastAnimated { 0 }; + //uint64_t _lastAnimated { 0 }; float _currentFrame { 0 }; - float _endAnim{ 0 }; + //float _endAnim{ 0 }; }; diff --git a/libraries/entities/src/AnimationPropertyGroup.cpp b/libraries/entities/src/AnimationPropertyGroup.cpp index c871849064..5f5d68be24 100644 --- a/libraries/entities/src/AnimationPropertyGroup.cpp +++ b/libraries/entities/src/AnimationPropertyGroup.cpp @@ -53,6 +53,7 @@ void AnimationPropertyGroup::copyToScriptValue(const EntityPropertyFlags& desire COPY_GROUP_PROPERTY_TO_QSCRIPTVALUE(PROP_ANIMATION_FIRST_FRAME, Animation, animation, FirstFrame, firstFrame); COPY_GROUP_PROPERTY_TO_QSCRIPTVALUE(PROP_ANIMATION_LAST_FRAME, Animation, animation, LastFrame, lastFrame); COPY_GROUP_PROPERTY_TO_QSCRIPTVALUE(PROP_ANIMATION_HOLD, Animation, animation, Hold, hold); + COPY_GROUP_PROPERTY_TO_QSCRIPTVALUE(PROP_ANIMATION_CURRENTLY_PLAYING_FRAME, Animation, animation, CurrentlyPlayingFrame, currentlyPlayingFrame); } @@ -73,6 +74,9 @@ void AnimationPropertyGroup::copyFromScriptValue(const QScriptValue& object, boo COPY_GROUP_PROPERTY_FROM_QSCRIPTVALUE(animation, lastFrame, float, setLastFrame); COPY_GROUP_PROPERTY_FROM_QSCRIPTVALUE(animation, hold, bool, setHold); + //angus added + COPY_GROUP_PROPERTY_FROM_QSCRIPTVALUE(animation, currentlyPlayingFrame, float, setCurrentlyPlayingFrame); + // legacy property support COPY_PROPERTY_FROM_QSCRIPTVALUE_GETTER(animationFPS, float, setFPS, getFPS); COPY_PROPERTY_FROM_QSCRIPTVALUE_GETTER(animationIsPlaying, bool, setRunning, getRunning); @@ -89,6 +93,7 @@ void AnimationPropertyGroup::merge(const AnimationPropertyGroup& other) { COPY_PROPERTY_IF_CHANGED(firstFrame); COPY_PROPERTY_IF_CHANGED(lastFrame); COPY_PROPERTY_IF_CHANGED(hold); + COPY_PROPERTY_IF_CHANGED(currentlyPlayingFrame); } void AnimationPropertyGroup::setFromOldAnimationSettings(const QString& value) { @@ -195,6 +200,8 @@ bool AnimationPropertyGroup::appendToEditPacket(OctreePacketData* packetData, APPEND_ENTITY_PROPERTY(PROP_ANIMATION_FIRST_FRAME, getFirstFrame()); APPEND_ENTITY_PROPERTY(PROP_ANIMATION_LAST_FRAME, getLastFrame()); APPEND_ENTITY_PROPERTY(PROP_ANIMATION_HOLD, getHold()); + //angus + APPEND_ENTITY_PROPERTY(PROP_ANIMATION_CURRENTLY_PLAYING_FRAME, getCurrentlyPlayingFrame()); return true; } @@ -216,6 +223,7 @@ bool AnimationPropertyGroup::decodeFromEditPacket(EntityPropertyFlags& propertyF READ_ENTITY_PROPERTY(PROP_ANIMATION_FIRST_FRAME, float, setFirstFrame); READ_ENTITY_PROPERTY(PROP_ANIMATION_LAST_FRAME, float, setLastFrame); READ_ENTITY_PROPERTY(PROP_ANIMATION_HOLD, bool, setHold); + READ_ENTITY_PROPERTY(PROP_ANIMATION_CURRENTLY_PLAYING_FRAME, float, setCurrentlyPlayingFrame); DECODE_GROUP_PROPERTY_HAS_CHANGED(PROP_ANIMATION_URL, URL); DECODE_GROUP_PROPERTY_HAS_CHANGED(PROP_ANIMATION_FPS, FPS); @@ -226,6 +234,7 @@ bool AnimationPropertyGroup::decodeFromEditPacket(EntityPropertyFlags& propertyF DECODE_GROUP_PROPERTY_HAS_CHANGED(PROP_ANIMATION_LAST_FRAME, LastFrame); DECODE_GROUP_PROPERTY_HAS_CHANGED(PROP_ANIMATION_HOLD, Hold); DECODE_GROUP_PROPERTY_HAS_CHANGED(PROP_ANIMATION_ALLOW_TRANSLATION, AllowTranslation); + DECODE_GROUP_PROPERTY_HAS_CHANGED(PROP_ANIMATION_CURRENTLY_PLAYING_FRAME, CurrentlyPlayingFrame); processedBytes += bytesRead; @@ -258,6 +267,7 @@ EntityPropertyFlags AnimationPropertyGroup::getChangedProperties() const { CHECK_PROPERTY_CHANGE(PROP_ANIMATION_LAST_FRAME, lastFrame); CHECK_PROPERTY_CHANGE(PROP_ANIMATION_HOLD, hold); CHECK_PROPERTY_CHANGE(PROP_ANIMATION_ALLOW_TRANSLATION, allowTranslation); + CHECK_PROPERTY_CHANGE(PROP_ANIMATION_CURRENTLY_PLAYING_FRAME, currentlyPlayingFrame); return changedProperties; } @@ -272,6 +282,7 @@ void AnimationPropertyGroup::getProperties(EntityItemProperties& properties) con COPY_ENTITY_GROUP_PROPERTY_TO_PROPERTIES(Animation, FirstFrame, getFirstFrame); COPY_ENTITY_GROUP_PROPERTY_TO_PROPERTIES(Animation, LastFrame, getLastFrame); COPY_ENTITY_GROUP_PROPERTY_TO_PROPERTIES(Animation, Hold, getHold); + COPY_ENTITY_GROUP_PROPERTY_TO_PROPERTIES(Animation, CurrentlyPlayingFrame, getCurrentlyPlayingFrame); } bool AnimationPropertyGroup::setProperties(const EntityItemProperties& properties) { @@ -286,6 +297,7 @@ bool AnimationPropertyGroup::setProperties(const EntityItemProperties& propertie SET_ENTITY_GROUP_PROPERTY_FROM_PROPERTIES(Animation, FirstFrame, firstFrame, setFirstFrame); SET_ENTITY_GROUP_PROPERTY_FROM_PROPERTIES(Animation, LastFrame, lastFrame, setLastFrame); SET_ENTITY_GROUP_PROPERTY_FROM_PROPERTIES(Animation, Hold, hold, setHold); + SET_ENTITY_GROUP_PROPERTY_FROM_PROPERTIES(Animation, CurrentlyPlayingFrame, currentlyPlayingFrame, setCurrentlyPlayingFrame); return somethingChanged; } @@ -301,6 +313,8 @@ EntityPropertyFlags AnimationPropertyGroup::getEntityProperties(EncodeBitstreamP requestedProperties += PROP_ANIMATION_LAST_FRAME; requestedProperties += PROP_ANIMATION_HOLD; requestedProperties += PROP_ANIMATION_ALLOW_TRANSLATION; + //angus + requestedProperties += PROP_ANIMATION_CURRENTLY_PLAYING_FRAME; return requestedProperties; } @@ -324,6 +338,7 @@ void AnimationPropertyGroup::appendSubclassData(OctreePacketData* packetData, En APPEND_ENTITY_PROPERTY(PROP_ANIMATION_FIRST_FRAME, getFirstFrame()); APPEND_ENTITY_PROPERTY(PROP_ANIMATION_LAST_FRAME, getLastFrame()); APPEND_ENTITY_PROPERTY(PROP_ANIMATION_HOLD, getHold()); + APPEND_ENTITY_PROPERTY(PROP_ANIMATION_CURRENTLY_PLAYING_FRAME, getCurrentlyPlayingFrame()); } int AnimationPropertyGroup::readEntitySubclassDataFromBuffer(const unsigned char* data, int bytesLeftToRead, @@ -343,5 +358,6 @@ int AnimationPropertyGroup::readEntitySubclassDataFromBuffer(const unsigned char READ_ENTITY_PROPERTY(PROP_ANIMATION_FIRST_FRAME, float, setFirstFrame); READ_ENTITY_PROPERTY(PROP_ANIMATION_LAST_FRAME, float, setLastFrame); READ_ENTITY_PROPERTY(PROP_ANIMATION_HOLD, bool, setHold); + READ_ENTITY_PROPERTY(PROP_ANIMATION_CURRENTLY_PLAYING_FRAME, float, setCurrentlyPlayingFrame); return bytesRead; } diff --git a/libraries/entities/src/AnimationPropertyGroup.h b/libraries/entities/src/AnimationPropertyGroup.h index 54d4ced92f..8d0087b56d 100644 --- a/libraries/entities/src/AnimationPropertyGroup.h +++ b/libraries/entities/src/AnimationPropertyGroup.h @@ -86,6 +86,7 @@ public: DEFINE_PROPERTY(PROP_ANIMATION_LAST_FRAME, LastFrame, lastFrame, float, MAXIMUM_POSSIBLE_FRAME); // was animationSettings.lastFrame DEFINE_PROPERTY(PROP_ANIMATION_HOLD, Hold, hold, bool, false); // was animationSettings.hold DEFINE_PROPERTY(PROP_ANIMATION_ALLOW_TRANSLATION, AllowTranslation, allowTranslation, bool, true); + DEFINE_PROPERTY(PROP_ANIMATION_CURRENTLY_PLAYING_FRAME, CurrentlyPlayingFrame, currentlyPlayingFrame, float, 0.0f); protected: friend bool operator==(const AnimationPropertyGroup& a, const AnimationPropertyGroup& b); diff --git a/libraries/entities/src/EntityItemProperties.cpp b/libraries/entities/src/EntityItemProperties.cpp index 108fc14e30..77fa1231f1 100644 --- a/libraries/entities/src/EntityItemProperties.cpp +++ b/libraries/entities/src/EntityItemProperties.cpp @@ -1148,6 +1148,7 @@ void EntityItemProperties::entityPropertyFlagsFromScriptValue(const QScriptValue ADD_GROUP_PROPERTY_TO_MAP(PROP_ANIMATION_LAST_FRAME, Animation, animation, LastFrame, lastFrame); ADD_GROUP_PROPERTY_TO_MAP(PROP_ANIMATION_HOLD, Animation, animation, Hold, hold); ADD_GROUP_PROPERTY_TO_MAP(PROP_ANIMATION_ALLOW_TRANSLATION, Animation, animation, AllowTranslation, allowTranslation); + ADD_GROUP_PROPERTY_TO_MAP(PROP_ANIMATION_CURRENTLY_PLAYING_FRAME, Animation, animation, CurrentlyPlayingFrame, currentlyPlayingFrame); ADD_GROUP_PROPERTY_TO_MAP(PROP_SKYBOX_COLOR, Skybox, skybox, Color, color); ADD_GROUP_PROPERTY_TO_MAP(PROP_SKYBOX_URL, Skybox, skybox, URL, url); diff --git a/libraries/entities/src/EntityPropertyFlags.h b/libraries/entities/src/EntityPropertyFlags.h index 35d40b669a..3b1f4d60d0 100644 --- a/libraries/entities/src/EntityPropertyFlags.h +++ b/libraries/entities/src/EntityPropertyFlags.h @@ -40,6 +40,8 @@ enum EntityPropertyList { PROP_ANIMATION_FRAME_INDEX, PROP_ANIMATION_PLAYING, PROP_ANIMATION_ALLOW_TRANSLATION, + //angus + PROP_ANIMATION_CURRENTLY_PLAYING_FRAME, // these properties are supported by the EntityItem base class PROP_REGISTRATION_POINT, diff --git a/libraries/entities/src/ModelEntityItem.cpp b/libraries/entities/src/ModelEntityItem.cpp index c24efa8eec..67357a6905 100644 --- a/libraries/entities/src/ModelEntityItem.cpp +++ b/libraries/entities/src/ModelEntityItem.cpp @@ -199,19 +199,20 @@ void ModelEntityItem::update(const quint64& now) { if (_previousAnimationProperties != currentAnimationProperties) { qCDebug(entities) << "this is where the _currentFrame change is handled in the ModelEntityItem.cpp code"; withWriteLock([&] { - //if ( (newAnimationProperties.getCurrentFrame() != _renderAnimationProperties.getCurrentFrame()) || (newAnimationProperties.getFirstFrame() != _renderAnimationProperties.getFirstFrame()) || (newAnimationProperties.getLastFrame() != _renderAnimationProperties.getLastFrame()) || (newAnimationProperties.getRunning() && !_renderAnimationProperties.getRunning())) { - // if (!(newAnimationProperties.getCurrentFrame() > newAnimationProperties.getLastFrame()) && !(newAnimationProperties.getCurrentFrame() < newAnimationProperties.getFirstFrame())) { - // _currentFrame = newAnimationProperties.getCurrentFrame(); - // _endAnim = _currentFrame + ( newAnimationProperties.getLastFrame() - newAnimationProperties.getFirstFrame() ); - //_lastAnimated = 0; - // } - //}else if ( _renderAnimationProperties.getLoop() && !newAnimationProperties.getLoop()) { - // int currentframe_mod_length = (int)(_currentFrame - (int)(glm::floor(newAnimationProperties.getCurrentFrame()))) % ((int)(glm::floor(newAnimationProperties.getLastFrame())) - (int)(glm::floor(newAnimationProperties.getFirstFrame())) + 1); - // _endAnim = _currentFrame + ((int)(newAnimationProperties.getLastFrame()) - (int)(newAnimationProperties.getFirstFrame())) - (float)currentframe_mod_length; - // } + if ( (currentAnimationProperties.getCurrentFrame() != _previousAnimationProperties.getCurrentFrame()) || (currentAnimationProperties.getFirstFrame() != _previousAnimationProperties.getFirstFrame()) || (currentAnimationProperties.getLastFrame() != _previousAnimationProperties.getLastFrame()) || (currentAnimationProperties.getRunning() && !_previousAnimationProperties.getRunning())) { + if (!(currentAnimationProperties.getCurrentFrame() > currentAnimationProperties.getLastFrame()) && !(currentAnimationProperties.getCurrentFrame() < currentAnimationProperties.getFirstFrame())) { + _currentlyPlayingFrame = currentAnimationProperties.getCurrentFrame(); + _endAnim = _currentlyPlayingFrame + ( currentAnimationProperties.getLastFrame() - currentAnimationProperties.getFirstFrame() ); + _lastAnimated = 0; + } + }else if ( _previousAnimationProperties.getLoop() && !currentAnimationProperties.getLoop()) { + int currentframe_mod_length = (int)(_currentlyPlayingFrame - (int)(glm::floor(currentAnimationProperties.getCurrentFrame()))) % ((int)(glm::floor(currentAnimationProperties.getLastFrame())) - (int)(glm::floor(currentAnimationProperties.getFirstFrame())) + 1); + _endAnim = _currentlyPlayingFrame + ((int)(currentAnimationProperties.getLastFrame()) - (int)(currentAnimationProperties.getFirstFrame())) - (float)currentframe_mod_length; + } _previousAnimationProperties = currentAnimationProperties; }); } + updateFrameCount(); } @@ -225,6 +226,38 @@ bool ModelEntityItem::needsToCallUpdate() const { return true; } +void ModelEntityItem::updateFrameCount() { + + + if (!_lastAnimated) { + _lastAnimated = usecTimestampNow(); + return; + } + + auto now = usecTimestampNow(); + auto interval = now - _lastAnimated; + _lastAnimated = now; + + + //here we implement the looping animation property + //get entity anim props + bool isLooping = getAnimationLoop(); + int firstFrame = getAnimationFirstFrame(); + int lastFrame = getAnimationLastFrame(); + bool isHolding = getAnimationHold(); + + if (isLooping || (_currentlyPlayingFrame < _endAnim)) { + //else advance the current frame. + //if hold or not playing don't advance the current frame. + //also if the animFrame is outside of first or last frame then don't advance the motion. + if (!isHolding && getAnimationIsPlaying() && !(_previousAnimationProperties.getCurrentFrame() > _previousAnimationProperties.getLastFrame()) && !(_previousAnimationProperties.getCurrentFrame() < _previousAnimationProperties.getFirstFrame())) { + float deltaTime = (float)interval / (float)USECS_PER_SECOND; + _currentlyPlayingFrame += (deltaTime * _previousAnimationProperties.getFPS()); + qCDebug(entities) << "the frame is now " << _currentlyPlayingFrame; + } + } +} + //angus @@ -650,3 +683,10 @@ float ModelEntityItem::getCurrentlyPlayingFrame() const { return _currentlyPlayingFrame; }); } + +int ModelEntityItem::getLastKnownCurrentFrame() const { + return resultWithReadLock([&] { + return _lastKnownCurrentFrame; + }); +} +//angus change \ No newline at end of file diff --git a/libraries/entities/src/ModelEntityItem.h b/libraries/entities/src/ModelEntityItem.h index c9c33e10c9..3df0ccdc36 100644 --- a/libraries/entities/src/ModelEntityItem.h +++ b/libraries/entities/src/ModelEntityItem.h @@ -17,6 +17,7 @@ #include #include "AnimationPropertyGroup.h" + class ModelEntityItem : public EntityItem { public: static EntityItemPointer factory(const EntityItemID& entityID, const EntityItemProperties& properties); @@ -49,6 +50,7 @@ public: //angus virtual void update(const quint64& now) override; virtual bool needsToCallUpdate() const override; + void updateFrameCount(); //angus virtual void debugDump() const override; @@ -108,6 +110,7 @@ public: bool isAnimatingSomething() const; float getCurrentlyPlayingFrame() const; + int getLastKnownCurrentFrame() const; static const QString DEFAULT_TEXTURES; const QString getTextures() const; @@ -152,7 +155,7 @@ protected: }; QVector _localJointData; - int _lastKnownCurrentFrame; + int _lastKnownCurrentFrame{-1}; rgbColor _color; QString _modelURL; @@ -167,8 +170,12 @@ protected: ShapeType _shapeType = SHAPE_TYPE_NONE; private: - float _currentlyPlayingFrame{ 0 }; + //angus + float _currentlyPlayingFrame{ -1 }; + float _endAnim{ 0 }; + uint64_t _lastAnimated{ 0 }; AnimationPropertyGroup _previousAnimationProperties; + //angus }; #endif // hifi_ModelEntityItem_h From befa0f8ab54de74211b85361565c86bd9351f138 Mon Sep 17 00:00:00 2001 From: amantley Date: Mon, 20 Nov 2017 09:11:15 -0800 Subject: [PATCH 039/148] now the update frame is only happening in the assignment client code. added setCurrentlyPlayingFrame to ModelEntityItem.cpp --- libraries/entities-renderer/src/EntityTreeRenderer.cpp | 3 ++- libraries/entities/src/ModelEntityItem.cpp | 8 ++++++++ libraries/entities/src/ModelEntityItem.h | 1 + 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/libraries/entities-renderer/src/EntityTreeRenderer.cpp b/libraries/entities-renderer/src/EntityTreeRenderer.cpp index 07d8716656..42fcd9af6f 100644 --- a/libraries/entities-renderer/src/EntityTreeRenderer.cpp +++ b/libraries/entities-renderer/src/EntityTreeRenderer.cpp @@ -309,7 +309,8 @@ void EntityTreeRenderer::update(bool simulate) { PerformanceTimer perfTimer("ETRupdate"); if (_tree && !_shuttingDown) { EntityTreePointer tree = std::static_pointer_cast(_tree); - tree->update(simulate); + //angus + //tree->update(simulate); // Update the rendereable entities as needed { diff --git a/libraries/entities/src/ModelEntityItem.cpp b/libraries/entities/src/ModelEntityItem.cpp index 67357a6905..c6e6a7a069 100644 --- a/libraries/entities/src/ModelEntityItem.cpp +++ b/libraries/entities/src/ModelEntityItem.cpp @@ -254,6 +254,7 @@ void ModelEntityItem::updateFrameCount() { float deltaTime = (float)interval / (float)USECS_PER_SECOND; _currentlyPlayingFrame += (deltaTime * _previousAnimationProperties.getFPS()); qCDebug(entities) << "the frame is now " << _currentlyPlayingFrame; + setAnimationCurrentlyPlayingFrame(_currentlyPlayingFrame); } } } @@ -609,6 +610,12 @@ void ModelEntityItem::setAnimationCurrentFrame(float value) { }); } +void ModelEntityItem::setAnimationCurrentlyPlayingFrame(float value) { + withWriteLock([&] { + _animationProperties.setCurrentlyPlayingFrame(value); + }); +} + void ModelEntityItem::setAnimationLoop(bool loop) { withWriteLock([&] { _animationProperties.setLoop(loop); @@ -669,6 +676,7 @@ float ModelEntityItem::getAnimationCurrentFrame() const { return _animationProperties.getCurrentFrame(); }); } + //angus change bool ModelEntityItem::isAnimatingSomething() const { return resultWithReadLock([&] { diff --git a/libraries/entities/src/ModelEntityItem.h b/libraries/entities/src/ModelEntityItem.h index 3df0ccdc36..1c1c834d82 100644 --- a/libraries/entities/src/ModelEntityItem.h +++ b/libraries/entities/src/ModelEntityItem.h @@ -87,6 +87,7 @@ public: void setAnimationURL(const QString& url); void setAnimationCurrentFrame(float value); + void setAnimationCurrentlyPlayingFrame(float value); void setAnimationIsPlaying(bool value); void setAnimationFPS(float value); From 1e5d099b06feaac93e092a4d5e70311b87258714 Mon Sep 17 00:00:00 2001 From: amantley Date: Tue, 21 Nov 2017 17:36:01 -0800 Subject: [PATCH 040/148] changed the currentlyplayingframe property so that it is updated in RenderableModelEntity.cpp now. Remains to remove everything but initializing currentlyPlayingFrame in ModelEntityRender.cpp --- .../src/RenderableModelEntityItem.cpp | 30 +++++++++---------- .../src/RenderableModelEntityItem.h | 7 +++-- .../entities/src/AnimationPropertyGroup.cpp | 9 ++++++ libraries/entities/src/ModelEntityItem.cpp | 5 +++- libraries/entities/src/ModelEntityItem.h | 2 ++ 5 files changed, 34 insertions(+), 19 deletions(-) diff --git a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp index 3176010536..a3e90c925f 100644 --- a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp @@ -995,9 +995,13 @@ void ModelEntityRenderer::animate(const TypedEntityPointer& entity) { //get the updated frame from the ModelEntity auto modelAnimProperties = entity->getAnimationProperties(); - withWriteLock([&] { - _currentFrame = modelAnimProperties.getCurrentlyPlayingFrame(); - }); + + + //_currentFrame = modelAnimProperties.getCurrentlyPlayingFrame(); + + //tempbool = modelAnimProperties.getRunning(); + //qCDebug(entitiesrenderer) << "is playing is: " << tempbool; + qCDebug(entitiesrenderer) << "the client frame count is the following " << _currentFrame; if ((firstFrame >= 0) && (firstFrame < lastFrame) && (lastFrame <= frameCount)) { @@ -1005,7 +1009,7 @@ void ModelEntityRenderer::animate(const TypedEntityPointer& entity) { updatedFrameCount = (lastFrame - firstFrame + 1); } - /* + if (!_lastAnimated) { _lastAnimated = usecTimestampNow(); return; @@ -1025,13 +1029,13 @@ void ModelEntityRenderer::animate(const TypedEntityPointer& entity) { //also if the animFrame is outside of first or last frame then don't advance the motion. if (!isHolding && entity->getAnimationIsPlaying() && !( _renderAnimationProperties.getCurrentFrame() > _renderAnimationProperties.getLastFrame() ) && !( _renderAnimationProperties.getCurrentFrame() < _renderAnimationProperties.getFirstFrame() ) ) { float deltaTime = (float)interval / (float)USECS_PER_SECOND; - _currentFrame += (deltaTime * _renderAnimationProperties.getFPS()); + _currentlyPlayingFrame += (deltaTime * _renderAnimationProperties.getFPS()); } } - */ + { //where are we in the currently defined animation segment? - int animationCurrentFrame = (int)(glm::floor(_currentFrame - firstFrame)) % updatedFrameCount; + int animationCurrentFrame = (int)(glm::floor(_currentlyPlayingFrame - firstFrame)) % updatedFrameCount; //this gives us the absolute frame value to use by adding the first frame value. animationCurrentFrame += firstFrame; @@ -1354,7 +1358,7 @@ void ModelEntityRenderer::doRenderUpdateSynchronousTyped(const ScenePointer& sce if (model->getRenderItemsNeedUpdate()) { model->updateRenderItems(); } - /* + { DETAILED_PROFILE_RANGE(simulation_physics, "CheckAnimation"); // make a copy of the animation properites @@ -1373,17 +1377,13 @@ void ModelEntityRenderer::doRenderUpdateSynchronousTyped(const ScenePointer& sce int currentframe_mod_length = (int)(_currentFrame - (int)(glm::floor(newAnimationProperties.getCurrentFrame()))) % ((int)(glm::floor(newAnimationProperties.getLastFrame())) - (int)(glm::floor(newAnimationProperties.getFirstFrame())) + 1); _endAnim = _currentFrame + ((int)(newAnimationProperties.getLastFrame()) - (int)(newAnimationProperties.getFirstFrame())) - (float)currentframe_mod_length; } + _currentlyPlayingFrame = newAnimationProperties.getCurrentlyPlayingFrame(); _renderAnimationProperties = newAnimationProperties; }); } } - */ - //angus - { - - //_currentFrame = entity->getCurrentlyPlayingFrame(); - } - //angus + //angus + if (_animating) { diff --git a/libraries/entities-renderer/src/RenderableModelEntityItem.h b/libraries/entities-renderer/src/RenderableModelEntityItem.h index 3a0c5c506b..e6a970d0eb 100644 --- a/libraries/entities-renderer/src/RenderableModelEntityItem.h +++ b/libraries/entities-renderer/src/RenderableModelEntityItem.h @@ -183,10 +183,11 @@ private: bool _marketplaceEntity { false }; bool _shouldHighlight { false }; bool _animating { false }; - //uint64_t _lastAnimated { 0 }; + uint64_t _lastAnimated { 0 }; float _currentFrame { 0 }; - //float _endAnim{ 0 }; - + float _endAnim{ 0 }; + bool tempbool{ false }; + float _currentlyPlayingFrame{ 0 }; }; } } // namespace diff --git a/libraries/entities/src/AnimationPropertyGroup.cpp b/libraries/entities/src/AnimationPropertyGroup.cpp index 5f5d68be24..8488c6fb25 100644 --- a/libraries/entities/src/AnimationPropertyGroup.cpp +++ b/libraries/entities/src/AnimationPropertyGroup.cpp @@ -109,6 +109,7 @@ void AnimationPropertyGroup::setFromOldAnimationSettings(const QString& value) { bool loop = getLoop(); bool hold = getHold(); bool allowTranslation = getAllowTranslation(); + float currentlyPlayingFrame = getCurrentlyPlayingFrame(); QJsonDocument settingsAsJson = QJsonDocument::fromJson(value.toUtf8()); QJsonObject settingsAsJsonObject = settingsAsJson.object(); @@ -147,6 +148,10 @@ void AnimationPropertyGroup::setFromOldAnimationSettings(const QString& value) { allowTranslation = settingsMap["allowTranslation"].toBool(); } + if (settingsMap.contains("currentlyPlayingFrame")) { + currentlyPlayingFrame = settingsMap["currentlyPlayingFrame"].toFloat(); + } + setAllowTranslation(allowTranslation); setFPS(fps); setCurrentFrame(currentFrame); @@ -155,6 +160,7 @@ void AnimationPropertyGroup::setFromOldAnimationSettings(const QString& value) { setLastFrame(lastFrame); setLoop(loop); setHold(hold); + setCurrentlyPlayingFrame(currentlyPlayingFrame); } @@ -179,6 +185,9 @@ void AnimationPropertyGroup::listChangedProperties(QList& out) { if (allowTranslationChanged()) { out << "animation-allowTranslation"; } + if (currentlyPlayingFrameChanged()) { + out << "animation-currentlyPlayingFrame"; + } } diff --git a/libraries/entities/src/ModelEntityItem.cpp b/libraries/entities/src/ModelEntityItem.cpp index c6e6a7a069..784193d3d5 100644 --- a/libraries/entities/src/ModelEntityItem.cpp +++ b/libraries/entities/src/ModelEntityItem.cpp @@ -209,9 +209,10 @@ void ModelEntityItem::update(const quint64& now) { int currentframe_mod_length = (int)(_currentlyPlayingFrame - (int)(glm::floor(currentAnimationProperties.getCurrentFrame()))) % ((int)(glm::floor(currentAnimationProperties.getLastFrame())) - (int)(glm::floor(currentAnimationProperties.getFirstFrame())) + 1); _endAnim = _currentlyPlayingFrame + ((int)(currentAnimationProperties.getLastFrame()) - (int)(currentAnimationProperties.getFirstFrame())) - (float)currentframe_mod_length; } - _previousAnimationProperties = currentAnimationProperties; + //_previousAnimationProperties = currentAnimationProperties; }); } + _previousAnimationProperties = currentAnimationProperties; updateFrameCount(); } @@ -256,6 +257,7 @@ void ModelEntityItem::updateFrameCount() { qCDebug(entities) << "the frame is now " << _currentlyPlayingFrame; setAnimationCurrentlyPlayingFrame(_currentlyPlayingFrame); } + } } @@ -611,6 +613,7 @@ void ModelEntityItem::setAnimationCurrentFrame(float value) { } void ModelEntityItem::setAnimationCurrentlyPlayingFrame(float value) { + _dirtyFlags |= Simulation::DIRTY_UPDATEABLE; withWriteLock([&] { _animationProperties.setCurrentlyPlayingFrame(value); }); diff --git a/libraries/entities/src/ModelEntityItem.h b/libraries/entities/src/ModelEntityItem.h index 1c1c834d82..2e901ed318 100644 --- a/libraries/entities/src/ModelEntityItem.h +++ b/libraries/entities/src/ModelEntityItem.h @@ -176,6 +176,8 @@ private: float _endAnim{ 0 }; uint64_t _lastAnimated{ 0 }; AnimationPropertyGroup _previousAnimationProperties; + bool _propTestFlag{ true }; + bool _propTestFlag2{ true }; //angus }; From fdf5139a7409c231598d59e4350b85415e062243 Mon Sep 17 00:00:00 2001 From: amantley Date: Wed, 22 Nov 2017 17:52:13 -0800 Subject: [PATCH 041/148] everything now works with an atomic start time property. but now I will get rid of this and use current frame instead --- .../src/RenderableModelEntityItem.cpp | 33 ++++++++--- .../src/RenderableModelEntityItem.h | 2 +- .../entities/src/AnimationPropertyGroup.cpp | 10 ++-- .../entities/src/AnimationPropertyGroup.h | 2 +- libraries/entities/src/ModelEntityItem.cpp | 55 ++++++++++++------- libraries/entities/src/ModelEntityItem.h | 6 +- 6 files changed, 70 insertions(+), 38 deletions(-) diff --git a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp index a3e90c925f..80aba9deba 100644 --- a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp @@ -997,7 +997,7 @@ void ModelEntityRenderer::animate(const TypedEntityPointer& entity) { auto modelAnimProperties = entity->getAnimationProperties(); - //_currentFrame = modelAnimProperties.getCurrentlyPlayingFrame(); + //_currentFrame = modelAnimProperties.getCurrentFrame(); //tempbool = modelAnimProperties.getRunning(); //qCDebug(entitiesrenderer) << "is playing is: " << tempbool; @@ -1016,26 +1016,44 @@ void ModelEntityRenderer::animate(const TypedEntityPointer& entity) { } auto now = usecTimestampNow(); - auto interval = now - _lastAnimated; + + //find out how long it has been since this animation started. + auto interval = now - _currentlyPlayingFrame; + //auto interval = now - _lastAnimated; _lastAnimated = now; + //new global start time code + float nowTime = (float)interval / (float)USECS_PER_SECOND; + float oldCurrentFrame = _currentFrame; + _currentFrame = _renderAnimationProperties.getCurrentFrame() + (nowTime * _renderAnimationProperties.getFPS()); + + //here we implement the looping animation property //if we have played through the animation once then we hold on the last frame - if( isLooping || ( _currentFrame < _endAnim ) ){ + if( isLooping || (_currentFrame < _endAnim ) ){ //else advance the current frame. //if hold or not playing don't advance the current frame. //also if the animFrame is outside of first or last frame then don't advance the motion. if (!isHolding && entity->getAnimationIsPlaying() && !( _renderAnimationProperties.getCurrentFrame() > _renderAnimationProperties.getLastFrame() ) && !( _renderAnimationProperties.getCurrentFrame() < _renderAnimationProperties.getFirstFrame() ) ) { - float deltaTime = (float)interval / (float)USECS_PER_SECOND; - _currentlyPlayingFrame += (deltaTime * _renderAnimationProperties.getFPS()); + //float deltaTime = (float)interval / (float)USECS_PER_SECOND; + //_currentlyPlayingFrame += (deltaTime * _renderAnimationProperties.getFPS()); + //do nothing } + else { + //use old currentFrame + _currentFrame = oldCurrentFrame; + } + } + else { + //make current frame the endanim frame + _currentFrame = _endAnim; } { //where are we in the currently defined animation segment? - int animationCurrentFrame = (int)(glm::floor(_currentlyPlayingFrame - firstFrame)) % updatedFrameCount; + int animationCurrentFrame = (int)(glm::floor(_currentFrame - firstFrame)) % updatedFrameCount; //this gives us the absolute frame value to use by adding the first frame value. animationCurrentFrame += firstFrame; @@ -1369,7 +1387,7 @@ void ModelEntityRenderer::doRenderUpdateSynchronousTyped(const ScenePointer& sce withWriteLock([&] { if ( (newAnimationProperties.getCurrentFrame() != _renderAnimationProperties.getCurrentFrame()) || (newAnimationProperties.getFirstFrame() != _renderAnimationProperties.getFirstFrame()) || (newAnimationProperties.getLastFrame() != _renderAnimationProperties.getLastFrame()) || (newAnimationProperties.getRunning() && !_renderAnimationProperties.getRunning())) { if (!(newAnimationProperties.getCurrentFrame() > newAnimationProperties.getLastFrame()) && !(newAnimationProperties.getCurrentFrame() < newAnimationProperties.getFirstFrame())) { - _currentFrame = newAnimationProperties.getCurrentFrame(); + _currentFrame = newAnimationProperties.getCurrentFrame();// +((float)newAnimationProperties.getCurrentlyPlayingFrame() / (float)USECS_PER_SECOND)*(newAnimationProperties.getFPS()); _endAnim = _currentFrame + ( newAnimationProperties.getLastFrame() - newAnimationProperties.getFirstFrame() ); _lastAnimated = 0; } @@ -1378,6 +1396,7 @@ void ModelEntityRenderer::doRenderUpdateSynchronousTyped(const ScenePointer& sce _endAnim = _currentFrame + ((int)(newAnimationProperties.getLastFrame()) - (int)(newAnimationProperties.getFirstFrame())) - (float)currentframe_mod_length; } _currentlyPlayingFrame = newAnimationProperties.getCurrentlyPlayingFrame(); + qCDebug(entitiesrenderer) << "renderable update to currently playing frame " << _currentlyPlayingFrame; _renderAnimationProperties = newAnimationProperties; }); } diff --git a/libraries/entities-renderer/src/RenderableModelEntityItem.h b/libraries/entities-renderer/src/RenderableModelEntityItem.h index e6a970d0eb..fdb0cf5d2c 100644 --- a/libraries/entities-renderer/src/RenderableModelEntityItem.h +++ b/libraries/entities-renderer/src/RenderableModelEntityItem.h @@ -187,7 +187,7 @@ private: float _currentFrame { 0 }; float _endAnim{ 0 }; bool tempbool{ false }; - float _currentlyPlayingFrame{ 0 }; + quint64 _currentlyPlayingFrame{ 0 }; }; } } // namespace diff --git a/libraries/entities/src/AnimationPropertyGroup.cpp b/libraries/entities/src/AnimationPropertyGroup.cpp index 8488c6fb25..67de381d1b 100644 --- a/libraries/entities/src/AnimationPropertyGroup.cpp +++ b/libraries/entities/src/AnimationPropertyGroup.cpp @@ -75,7 +75,7 @@ void AnimationPropertyGroup::copyFromScriptValue(const QScriptValue& object, boo COPY_GROUP_PROPERTY_FROM_QSCRIPTVALUE(animation, hold, bool, setHold); //angus added - COPY_GROUP_PROPERTY_FROM_QSCRIPTVALUE(animation, currentlyPlayingFrame, float, setCurrentlyPlayingFrame); + COPY_GROUP_PROPERTY_FROM_QSCRIPTVALUE(animation, currentlyPlayingFrame, quint64, setCurrentlyPlayingFrame); // legacy property support COPY_PROPERTY_FROM_QSCRIPTVALUE_GETTER(animationFPS, float, setFPS, getFPS); @@ -109,7 +109,7 @@ void AnimationPropertyGroup::setFromOldAnimationSettings(const QString& value) { bool loop = getLoop(); bool hold = getHold(); bool allowTranslation = getAllowTranslation(); - float currentlyPlayingFrame = getCurrentlyPlayingFrame(); + quint64 currentlyPlayingFrame = getCurrentlyPlayingFrame(); QJsonDocument settingsAsJson = QJsonDocument::fromJson(value.toUtf8()); QJsonObject settingsAsJsonObject = settingsAsJson.object(); @@ -149,7 +149,7 @@ void AnimationPropertyGroup::setFromOldAnimationSettings(const QString& value) { } if (settingsMap.contains("currentlyPlayingFrame")) { - currentlyPlayingFrame = settingsMap["currentlyPlayingFrame"].toFloat(); + currentlyPlayingFrame = settingsMap["currentlyPlayingFrame"].toULongLong(); } setAllowTranslation(allowTranslation); @@ -232,7 +232,7 @@ bool AnimationPropertyGroup::decodeFromEditPacket(EntityPropertyFlags& propertyF READ_ENTITY_PROPERTY(PROP_ANIMATION_FIRST_FRAME, float, setFirstFrame); READ_ENTITY_PROPERTY(PROP_ANIMATION_LAST_FRAME, float, setLastFrame); READ_ENTITY_PROPERTY(PROP_ANIMATION_HOLD, bool, setHold); - READ_ENTITY_PROPERTY(PROP_ANIMATION_CURRENTLY_PLAYING_FRAME, float, setCurrentlyPlayingFrame); + READ_ENTITY_PROPERTY(PROP_ANIMATION_CURRENTLY_PLAYING_FRAME, quint64, setCurrentlyPlayingFrame); DECODE_GROUP_PROPERTY_HAS_CHANGED(PROP_ANIMATION_URL, URL); DECODE_GROUP_PROPERTY_HAS_CHANGED(PROP_ANIMATION_FPS, FPS); @@ -367,6 +367,6 @@ int AnimationPropertyGroup::readEntitySubclassDataFromBuffer(const unsigned char READ_ENTITY_PROPERTY(PROP_ANIMATION_FIRST_FRAME, float, setFirstFrame); READ_ENTITY_PROPERTY(PROP_ANIMATION_LAST_FRAME, float, setLastFrame); READ_ENTITY_PROPERTY(PROP_ANIMATION_HOLD, bool, setHold); - READ_ENTITY_PROPERTY(PROP_ANIMATION_CURRENTLY_PLAYING_FRAME, float, setCurrentlyPlayingFrame); + READ_ENTITY_PROPERTY(PROP_ANIMATION_CURRENTLY_PLAYING_FRAME, quint64, setCurrentlyPlayingFrame); return bytesRead; } diff --git a/libraries/entities/src/AnimationPropertyGroup.h b/libraries/entities/src/AnimationPropertyGroup.h index 8d0087b56d..1a3da52684 100644 --- a/libraries/entities/src/AnimationPropertyGroup.h +++ b/libraries/entities/src/AnimationPropertyGroup.h @@ -86,7 +86,7 @@ public: DEFINE_PROPERTY(PROP_ANIMATION_LAST_FRAME, LastFrame, lastFrame, float, MAXIMUM_POSSIBLE_FRAME); // was animationSettings.lastFrame DEFINE_PROPERTY(PROP_ANIMATION_HOLD, Hold, hold, bool, false); // was animationSettings.hold DEFINE_PROPERTY(PROP_ANIMATION_ALLOW_TRANSLATION, AllowTranslation, allowTranslation, bool, true); - DEFINE_PROPERTY(PROP_ANIMATION_CURRENTLY_PLAYING_FRAME, CurrentlyPlayingFrame, currentlyPlayingFrame, float, 0.0f); + DEFINE_PROPERTY(PROP_ANIMATION_CURRENTLY_PLAYING_FRAME, CurrentlyPlayingFrame, currentlyPlayingFrame, quint64, 0); protected: friend bool operator==(const AnimationPropertyGroup& a, const AnimationPropertyGroup& b); diff --git a/libraries/entities/src/ModelEntityItem.cpp b/libraries/entities/src/ModelEntityItem.cpp index 784193d3d5..bdf4f6f3f9 100644 --- a/libraries/entities/src/ModelEntityItem.cpp +++ b/libraries/entities/src/ModelEntityItem.cpp @@ -200,19 +200,23 @@ void ModelEntityItem::update(const quint64& now) { qCDebug(entities) << "this is where the _currentFrame change is handled in the ModelEntityItem.cpp code"; withWriteLock([&] { if ( (currentAnimationProperties.getCurrentFrame() != _previousAnimationProperties.getCurrentFrame()) || (currentAnimationProperties.getFirstFrame() != _previousAnimationProperties.getFirstFrame()) || (currentAnimationProperties.getLastFrame() != _previousAnimationProperties.getLastFrame()) || (currentAnimationProperties.getRunning() && !_previousAnimationProperties.getRunning())) { - if (!(currentAnimationProperties.getCurrentFrame() > currentAnimationProperties.getLastFrame()) && !(currentAnimationProperties.getCurrentFrame() < currentAnimationProperties.getFirstFrame())) { - _currentlyPlayingFrame = currentAnimationProperties.getCurrentFrame(); - _endAnim = _currentlyPlayingFrame + ( currentAnimationProperties.getLastFrame() - currentAnimationProperties.getFirstFrame() ); - _lastAnimated = 0; - } - }else if ( _previousAnimationProperties.getLoop() && !currentAnimationProperties.getLoop()) { - int currentframe_mod_length = (int)(_currentlyPlayingFrame - (int)(glm::floor(currentAnimationProperties.getCurrentFrame()))) % ((int)(glm::floor(currentAnimationProperties.getLastFrame())) - (int)(glm::floor(currentAnimationProperties.getFirstFrame())) + 1); - _endAnim = _currentlyPlayingFrame + ((int)(currentAnimationProperties.getLastFrame()) - (int)(currentAnimationProperties.getFirstFrame())) - (float)currentframe_mod_length; + // if (!(currentAnimationProperties.getCurrentFrame() > currentAnimationProperties.getLastFrame()) && !(currentAnimationProperties.getCurrentFrame() < currentAnimationProperties.getFirstFrame())) { + // _currentlyPlayingFrame = currentAnimationProperties.getCurrentFrame(); + //_endAnim = _currentlyPlayingFrame + ( currentAnimationProperties.getLastFrame() - currentAnimationProperties.getFirstFrame() ); + //_lastAnimated = 0; + // } + setAnimationCurrentlyPlayingFrame(usecTimestampNow()); } - //_previousAnimationProperties = currentAnimationProperties; + //else if ( _previousAnimationProperties.getLoop() && !currentAnimationProperties.getLoop()) { + // int currentframe_mod_length = (int)(_currentlyPlayingFrame - (int)(glm::floor(currentAnimationProperties.getCurrentFrame()))) % ((int)(glm::floor(currentAnimationProperties.getLastFrame())) - (int)(glm::floor(currentAnimationProperties.getFirstFrame())) + 1); + //_endAnim = _currentlyPlayingFrame + ((int)(currentAnimationProperties.getLastFrame()) - (int)(currentAnimationProperties.getFirstFrame())) - (float)currentframe_mod_length; + //} + _previousAnimationProperties = currentAnimationProperties; }); + + qCDebug(entities) << "this is where the _currentFrame change is handled in the ModelEntityItem.cpp code, currently playing frame is: " << currentAnimationProperties.getCurrentlyPlayingFrame(); } - _previousAnimationProperties = currentAnimationProperties; + //_previousAnimationProperties = currentAnimationProperties; updateFrameCount(); } @@ -229,36 +233,45 @@ bool ModelEntityItem::needsToCallUpdate() const { void ModelEntityItem::updateFrameCount() { - + if (!_lastAnimated) { _lastAnimated = usecTimestampNow(); return; } + auto now = usecTimestampNow(); - auto interval = now - _lastAnimated; - _lastAnimated = now; + + //this is now getting the time since the server started the animation. + //auto interval = now - _currentlyPlayingFrame; + //auto interval = now - _lastAnimated; + //_lastAnimated = now; + + //here we implement the looping animation property //get entity anim props + bool isLooping = getAnimationLoop(); int firstFrame = getAnimationFirstFrame(); int lastFrame = getAnimationLastFrame(); bool isHolding = getAnimationHold(); - if (isLooping || (_currentlyPlayingFrame < _endAnim)) { + //if (isLooping || (_currentFrame < _endAnim)) { //else advance the current frame. //if hold or not playing don't advance the current frame. //also if the animFrame is outside of first or last frame then don't advance the motion. if (!isHolding && getAnimationIsPlaying() && !(_previousAnimationProperties.getCurrentFrame() > _previousAnimationProperties.getLastFrame()) && !(_previousAnimationProperties.getCurrentFrame() < _previousAnimationProperties.getFirstFrame())) { - float deltaTime = (float)interval / (float)USECS_PER_SECOND; - _currentlyPlayingFrame += (deltaTime * _previousAnimationProperties.getFPS()); - qCDebug(entities) << "the frame is now " << _currentlyPlayingFrame; - setAnimationCurrentlyPlayingFrame(_currentlyPlayingFrame); + // float deltaTime = (float)interval / (float)USECS_PER_SECOND; + // _currentlyPlayingFrame += (deltaTime * _previousAnimationProperties.getFPS()); + // qCDebug(entities) << "the frame is now " << _currentlyPlayingFrame; + // setAnimationCurrentlyPlayingFrame(_currentlyPlayingFrame); + setAnimationCurrentlyPlayingFrame(now); } - } + //} + } //angus @@ -612,7 +625,7 @@ void ModelEntityItem::setAnimationCurrentFrame(float value) { }); } -void ModelEntityItem::setAnimationCurrentlyPlayingFrame(float value) { +void ModelEntityItem::setAnimationCurrentlyPlayingFrame(quint64 value) { _dirtyFlags |= Simulation::DIRTY_UPDATEABLE; withWriteLock([&] { _animationProperties.setCurrentlyPlayingFrame(value); @@ -689,7 +702,7 @@ bool ModelEntityItem::isAnimatingSomething() const { }); } -float ModelEntityItem::getCurrentlyPlayingFrame() const { +quint64 ModelEntityItem::getCurrentlyPlayingFrame() const { return resultWithReadLock([&] { return _currentlyPlayingFrame; }); diff --git a/libraries/entities/src/ModelEntityItem.h b/libraries/entities/src/ModelEntityItem.h index 2e901ed318..dad022ae0a 100644 --- a/libraries/entities/src/ModelEntityItem.h +++ b/libraries/entities/src/ModelEntityItem.h @@ -87,7 +87,7 @@ public: void setAnimationURL(const QString& url); void setAnimationCurrentFrame(float value); - void setAnimationCurrentlyPlayingFrame(float value); + void setAnimationCurrentlyPlayingFrame(quint64 value); void setAnimationIsPlaying(bool value); void setAnimationFPS(float value); @@ -110,7 +110,7 @@ public: float getAnimationCurrentFrame() const; bool isAnimatingSomething() const; - float getCurrentlyPlayingFrame() const; + quint64 getCurrentlyPlayingFrame() const; int getLastKnownCurrentFrame() const; static const QString DEFAULT_TEXTURES; @@ -172,7 +172,7 @@ protected: private: //angus - float _currentlyPlayingFrame{ -1 }; + quint64 _currentlyPlayingFrame{ 0 }; float _endAnim{ 0 }; uint64_t _lastAnimated{ 0 }; AnimationPropertyGroup _previousAnimationProperties; From 2e75016021d41cd4057c9c1f44a5325c2dd5c7cc Mon Sep 17 00:00:00 2001 From: amantley Date: Wed, 22 Nov 2017 17:53:21 -0800 Subject: [PATCH 042/148] changes to modelEntity.cpp --- .../src/RenderableModelEntityItem.cpp | 46 +++++++++---------- libraries/entities/src/ModelEntityItem.cpp | 45 +++++++++++------- libraries/entities/src/ModelEntityItem.h | 1 + 3 files changed, 53 insertions(+), 39 deletions(-) diff --git a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp index 80aba9deba..b3417e7946 100644 --- a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp @@ -991,7 +991,7 @@ void ModelEntityRenderer::animate(const TypedEntityPointer& entity) { int firstFrame = entity->getAnimationFirstFrame(); int lastFrame = entity->getAnimationLastFrame(); bool isHolding = entity->getAnimationHold(); - int updatedFrameCount = frameCount; + int updatedFrameCount = lastFrame - firstFrame + 1; //get the updated frame from the ModelEntity auto modelAnimProperties = entity->getAnimationProperties(); @@ -1018,45 +1018,45 @@ void ModelEntityRenderer::animate(const TypedEntityPointer& entity) { auto now = usecTimestampNow(); //find out how long it has been since this animation started. - auto interval = now - _currentlyPlayingFrame; - //auto interval = now - _lastAnimated; + + auto interval = now - _lastAnimated; _lastAnimated = now; - - //new global start time code - float nowTime = (float)interval / (float)USECS_PER_SECOND; float oldCurrentFrame = _currentFrame; - _currentFrame = _renderAnimationProperties.getCurrentFrame() + (nowTime * _renderAnimationProperties.getFPS()); - + float deltaTime = (float)interval / (float)USECS_PER_SECOND; + _currentFrame += (deltaTime * _renderAnimationProperties.getFPS()); //here we implement the looping animation property //if we have played through the animation once then we hold on the last frame - if( isLooping || (_currentFrame < _endAnim ) ){ + if( isLooping || (_currentFrame < _renderAnimationProperties.getLastFrame() ) ){ //else advance the current frame. //if hold or not playing don't advance the current frame. //also if the animFrame is outside of first or last frame then don't advance the motion. if (!isHolding && entity->getAnimationIsPlaying() && !( _renderAnimationProperties.getCurrentFrame() > _renderAnimationProperties.getLastFrame() ) && !( _renderAnimationProperties.getCurrentFrame() < _renderAnimationProperties.getFirstFrame() ) ) { - //float deltaTime = (float)interval / (float)USECS_PER_SECOND; - //_currentlyPlayingFrame += (deltaTime * _renderAnimationProperties.getFPS()); - //do nothing + float deltaTime = (float)interval / (float)USECS_PER_SECOND; + _currentFrame += (deltaTime * _renderAnimationProperties.getFPS()); + while ((_currentFrame - _renderAnimationProperties.getFirstFrame()) > updatedFrameCount) { + _currentFrame -= updatedFrameCount; + } } else { //use old currentFrame _currentFrame = oldCurrentFrame; } - } - else { + }else { //make current frame the endanim frame - _currentFrame = _endAnim; + _currentFrame = _renderAnimationProperties.getLastFrame(); } + //save the last place that we rendered ourselves. + //entity->setAnimationCurrentFrame(_currentFrame); { //where are we in the currently defined animation segment? - int animationCurrentFrame = (int)(glm::floor(_currentFrame - firstFrame)) % updatedFrameCount; + // int animationCurrentFrame = (int)(glm::floor(_currentFrame - firstFrame)) % updatedFrameCount; //this gives us the absolute frame value to use by adding the first frame value. - animationCurrentFrame += firstFrame; - + // animationCurrentFrame += firstFrame; + int animationCurrentFrame = (int)(glm::floor(_currentFrame)); @@ -1383,7 +1383,7 @@ void ModelEntityRenderer::doRenderUpdateSynchronousTyped(const ScenePointer& sce auto newAnimationProperties = entity->getAnimationProperties(); if (newAnimationProperties != _renderAnimationProperties) { qCDebug(entitiesrenderer) << "this is where the change is currently handled in the rendering code"; - qCDebug(entitiesrenderer) << "getting the currently playing frame from the modelentityitem update" << entity->getCurrentlyPlayingFrame(); + qCDebug(entitiesrenderer) << "getting the currently playing frame from the modelentityitem update" << newAnimationProperties.getCurrentFrame(); withWriteLock([&] { if ( (newAnimationProperties.getCurrentFrame() != _renderAnimationProperties.getCurrentFrame()) || (newAnimationProperties.getFirstFrame() != _renderAnimationProperties.getFirstFrame()) || (newAnimationProperties.getLastFrame() != _renderAnimationProperties.getLastFrame()) || (newAnimationProperties.getRunning() && !_renderAnimationProperties.getRunning())) { if (!(newAnimationProperties.getCurrentFrame() > newAnimationProperties.getLastFrame()) && !(newAnimationProperties.getCurrentFrame() < newAnimationProperties.getFirstFrame())) { @@ -1392,11 +1392,11 @@ void ModelEntityRenderer::doRenderUpdateSynchronousTyped(const ScenePointer& sce _lastAnimated = 0; } }else if ( _renderAnimationProperties.getLoop() && !newAnimationProperties.getLoop()) { - int currentframe_mod_length = (int)(_currentFrame - (int)(glm::floor(newAnimationProperties.getCurrentFrame()))) % ((int)(glm::floor(newAnimationProperties.getLastFrame())) - (int)(glm::floor(newAnimationProperties.getFirstFrame())) + 1); - _endAnim = _currentFrame + ((int)(newAnimationProperties.getLastFrame()) - (int)(newAnimationProperties.getFirstFrame())) - (float)currentframe_mod_length; + //int currentframe_mod_length = (int)(_currentFrame - (int)(glm::floor(newAnimationProperties.getCurrentFrame()))) % ((int)(glm::floor(newAnimationProperties.getLastFrame())) - (int)(glm::floor(newAnimationProperties.getFirstFrame())) + 1); + //_endAnim = _currentFrame + ((int)(newAnimationProperties.getLastFrame()) - (int)(newAnimationProperties.getFirstFrame())) - (float)currentframe_mod_length; } - _currentlyPlayingFrame = newAnimationProperties.getCurrentlyPlayingFrame(); - qCDebug(entitiesrenderer) << "renderable update to currently playing frame " << _currentlyPlayingFrame; + _currentFrame = newAnimationProperties.getCurrentFrame(); + qCDebug(entitiesrenderer) << "renderable update to current frame " << _currentFrame; _renderAnimationProperties = newAnimationProperties; }); } diff --git a/libraries/entities/src/ModelEntityItem.cpp b/libraries/entities/src/ModelEntityItem.cpp index bdf4f6f3f9..b853077ca1 100644 --- a/libraries/entities/src/ModelEntityItem.cpp +++ b/libraries/entities/src/ModelEntityItem.cpp @@ -199,22 +199,27 @@ void ModelEntityItem::update(const quint64& now) { if (_previousAnimationProperties != currentAnimationProperties) { qCDebug(entities) << "this is where the _currentFrame change is handled in the ModelEntityItem.cpp code"; withWriteLock([&] { - if ( (currentAnimationProperties.getCurrentFrame() != _previousAnimationProperties.getCurrentFrame()) || (currentAnimationProperties.getFirstFrame() != _previousAnimationProperties.getFirstFrame()) || (currentAnimationProperties.getLastFrame() != _previousAnimationProperties.getLastFrame()) || (currentAnimationProperties.getRunning() && !_previousAnimationProperties.getRunning())) { + _previousAnimationProperties = currentAnimationProperties; + if ( (currentAnimationProperties.getFirstFrame() != _previousAnimationProperties.getFirstFrame()) || (currentAnimationProperties.getLastFrame() != _previousAnimationProperties.getLastFrame()) || (currentAnimationProperties.getRunning() && !_previousAnimationProperties.getRunning())) { // if (!(currentAnimationProperties.getCurrentFrame() > currentAnimationProperties.getLastFrame()) && !(currentAnimationProperties.getCurrentFrame() < currentAnimationProperties.getFirstFrame())) { // _currentlyPlayingFrame = currentAnimationProperties.getCurrentFrame(); //_endAnim = _currentlyPlayingFrame + ( currentAnimationProperties.getLastFrame() - currentAnimationProperties.getFirstFrame() ); //_lastAnimated = 0; // } - setAnimationCurrentlyPlayingFrame(usecTimestampNow()); + qCDebug(entities) << "this is where the _currentFrame change is handled in the ModelEntityItem.cpp code, current frame is: \n\n" << currentAnimationProperties.getCurrentFrame(); + setAnimationCurrentFrame(currentAnimationProperties.getFirstFrame()); } - //else if ( _previousAnimationProperties.getLoop() && !currentAnimationProperties.getLoop()) { - // int currentframe_mod_length = (int)(_currentlyPlayingFrame - (int)(glm::floor(currentAnimationProperties.getCurrentFrame()))) % ((int)(glm::floor(currentAnimationProperties.getLastFrame())) - (int)(glm::floor(currentAnimationProperties.getFirstFrame())) + 1); - //_endAnim = _currentlyPlayingFrame + ((int)(currentAnimationProperties.getLastFrame()) - (int)(currentAnimationProperties.getFirstFrame())) - (float)currentframe_mod_length; - //} - _previousAnimationProperties = currentAnimationProperties; + else { + //else if ( _previousAnimationProperties.getLoop() && !currentAnimationProperties.getLoop()) { + // int currentframe_mod_length = (int)(_currentlyPlayingFrame - (int)(glm::floor(currentAnimationProperties.getCurrentFrame()))) % ((int)(glm::floor(currentAnimationProperties.getLastFrame())) - (int)(glm::floor(currentAnimationProperties.getFirstFrame())) + 1); + //_endAnim = _currentlyPlayingFrame + ((int)(currentAnimationProperties.getLastFrame()) - (int)(currentAnimationProperties.getFirstFrame())) - (float)currentframe_mod_length; + //} + setAnimationCurrentFrame(currentAnimationProperties.getCurrentFrame()); + } + }); - qCDebug(entities) << "this is where the _currentFrame change is handled in the ModelEntityItem.cpp code, currently playing frame is: " << currentAnimationProperties.getCurrentlyPlayingFrame(); + qCDebug(entities) << "this is where the _currentFrame change is handled in the ModelEntityItem.cpp code, current frame is: " << currentAnimationProperties.getCurrentFrame(); } //_previousAnimationProperties = currentAnimationProperties; updateFrameCount(); @@ -244,8 +249,8 @@ void ModelEntityItem::updateFrameCount() { //this is now getting the time since the server started the animation. //auto interval = now - _currentlyPlayingFrame; - //auto interval = now - _lastAnimated; - //_lastAnimated = now; + auto interval = now - _lastAnimated; + _lastAnimated = now; @@ -257,20 +262,28 @@ void ModelEntityItem::updateFrameCount() { int firstFrame = getAnimationFirstFrame(); int lastFrame = getAnimationLastFrame(); bool isHolding = getAnimationHold(); + int updatedFrameCount = lastFrame - firstFrame + 1; - //if (isLooping || (_currentFrame < _endAnim)) { + if (isLooping || (_currentFrame < _previousAnimationProperties.getLastFrame())) { //else advance the current frame. //if hold or not playing don't advance the current frame. //also if the animFrame is outside of first or last frame then don't advance the motion. if (!isHolding && getAnimationIsPlaying() && !(_previousAnimationProperties.getCurrentFrame() > _previousAnimationProperties.getLastFrame()) && !(_previousAnimationProperties.getCurrentFrame() < _previousAnimationProperties.getFirstFrame())) { - // float deltaTime = (float)interval / (float)USECS_PER_SECOND; - // _currentlyPlayingFrame += (deltaTime * _previousAnimationProperties.getFPS()); - // qCDebug(entities) << "the frame is now " << _currentlyPlayingFrame; + float deltaTime = (float)interval / (float)USECS_PER_SECOND; + _currentFrame += (deltaTime * _previousAnimationProperties.getFPS()); + while ((_currentFrame - _previousAnimationProperties.getFirstFrame()) > updatedFrameCount) { + _currentFrame -= updatedFrameCount; + } + qCDebug(entities) << "the frame is now 1 " << _currentFrame; // setAnimationCurrentlyPlayingFrame(_currentlyPlayingFrame); - setAnimationCurrentlyPlayingFrame(now); + setAnimationCurrentFrame(_currentFrame); } - //} + } else { + _currentFrame = getAnimationLastFrame(); + setAnimationCurrentFrame(_currentFrame); + qCDebug(entities) << "the frame is now 2 " << _currentFrame; + } } diff --git a/libraries/entities/src/ModelEntityItem.h b/libraries/entities/src/ModelEntityItem.h index dad022ae0a..973f49aec4 100644 --- a/libraries/entities/src/ModelEntityItem.h +++ b/libraries/entities/src/ModelEntityItem.h @@ -178,6 +178,7 @@ private: AnimationPropertyGroup _previousAnimationProperties; bool _propTestFlag{ true }; bool _propTestFlag2{ true }; + float _currentFrame{ 0 }; //angus }; From d607ca0914445d26e9d23bbeed17517c0ba3a315 Mon Sep 17 00:00:00 2001 From: amantley Date: Tue, 28 Nov 2017 11:04:48 -0800 Subject: [PATCH 043/148] initialize the _lastAnimated time when the modelEntityRenderer is instantiated, this fixes the sync between interface and the server --- .../src/RenderableModelEntityItem.cpp | 157 +++++++++++------- .../src/RenderableModelEntityItem.h | 7 +- libraries/entities/src/ModelEntityItem.cpp | 133 ++++++++++----- libraries/entities/src/ModelEntityItem.h | 3 +- 4 files changed, 190 insertions(+), 110 deletions(-) diff --git a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp index ba0272ed2a..fa24a171f1 100644 --- a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp @@ -63,13 +63,17 @@ bool ModelEntityWrapper::isModelLoaded() const { EntityItemPointer RenderableModelEntityItem::factory(const EntityItemID& entityID, const EntityItemProperties& properties) { EntityItemPointer entity(new RenderableModelEntityItem(entityID, properties.getDimensionsInitialized()), [](EntityItem* ptr) { ptr->deleteLater(); }); + entity->setProperties(properties); + return entity; } RenderableModelEntityItem::RenderableModelEntityItem(const EntityItemID& entityItemID, bool dimensionsInitialized) : ModelEntityWrapper(entityItemID), _dimensionsInitialized(dimensionsInitialized) { + + } RenderableModelEntityItem::~RenderableModelEntityItem() { } @@ -987,34 +991,22 @@ void ModelEntityRenderer::animate(const TypedEntityPointer& entity) { } //get entity model anim props - bool isLooping = entity->getAnimationLoop(); - int firstFrame = entity->getAnimationFirstFrame(); - int lastFrame = entity->getAnimationLastFrame(); - bool isHolding = entity->getAnimationHold(); - int updatedFrameCount = lastFrame - firstFrame + 1; - - //get the updated frame from the ModelEntity - auto modelAnimProperties = entity->getAnimationProperties(); - - //_currentFrame = modelAnimProperties.getCurrentFrame(); + int updatedFrameCount = entity->getAnimationLastFrame() - entity->getAnimationFirstFrame() + 1; + - //tempbool = modelAnimProperties.getRunning(); - //qCDebug(entitiesrenderer) << "is playing is: " << tempbool; - - qCDebug(entitiesrenderer) << "the client frame count is the following " << _currentFrame; - - if ((firstFrame >= 0) && (firstFrame < lastFrame) && (lastFrame <= frameCount)) { - //length of animation in now determined by first and last frame - updatedFrameCount = (lastFrame - firstFrame + 1); + if ((entity->getAnimationFirstFrame() < 0) && (entity->getAnimationFirstFrame() > entity->getAnimationLastFrame())){// && (lastFrame <= frameCount)) { + //we don't increment currentframe if the first frame is < zero or > than last frame. + //return; } + if (!_lastAnimated) { _lastAnimated = usecTimestampNow(); return; } - + auto now = usecTimestampNow(); //find out how long it has been since this animation started. @@ -1022,46 +1014,38 @@ void ModelEntityRenderer::animate(const TypedEntityPointer& entity) { auto interval = now - _lastAnimated; _lastAnimated = now; - float oldCurrentFrame = _currentFrame; - float deltaTime = (float)interval / (float)USECS_PER_SECOND; - _currentFrame += (deltaTime * _renderAnimationProperties.getFPS()); + //here we implement the looping animation property //if we have played through the animation once then we hold on the last frame - - if( isLooping || (_currentFrame < _renderAnimationProperties.getLastFrame() ) ){ - //else advance the current frame. - //if hold or not playing don't advance the current frame. - //also if the animFrame is outside of first or last frame then don't advance the motion. - if (!isHolding && entity->getAnimationIsPlaying() && !( _renderAnimationProperties.getCurrentFrame() > _renderAnimationProperties.getLastFrame() ) && !( _renderAnimationProperties.getCurrentFrame() < _renderAnimationProperties.getFirstFrame() ) ) { - float deltaTime = (float)interval / (float)USECS_PER_SECOND; - _currentFrame += (deltaTime * _renderAnimationProperties.getFPS()); - while ((_currentFrame - _renderAnimationProperties.getFirstFrame()) > updatedFrameCount) { - _currentFrame -= updatedFrameCount; + if (!(entity->getAnimationHold()) && entity->getAnimationIsPlaying()) { + float deltaTime = (float)interval / (float)USECS_PER_SECOND; + _currentFrame += (deltaTime * entity->getAnimationFPS()); + if (_currentFrame > entity->getAnimationLastFrame()) { + if (entity->getAnimationLoop()) { + while ((_currentFrame - entity->getAnimationFirstFrame()) > (updatedFrameCount - 1)) { + _currentFrame -= (updatedFrameCount - 1); + } + }else{ + _currentFrame = entity->getAnimationLastFrame(); + } + }else if (_currentFrame < entity->getAnimationFirstFrame()) { + if (entity->getAnimationFirstFrame() < 0) { + _currentFrame = 0; + }else { + _currentFrame = entity->getAnimationFirstFrame(); } } - else { - //use old currentFrame - _currentFrame = oldCurrentFrame; - } - }else { - //make current frame the endanim frame - _currentFrame = _renderAnimationProperties.getLastFrame(); } - //save the last place that we rendered ourselves. - //entity->setAnimationCurrentFrame(_currentFrame); - - { + qCDebug(entitiesrenderer) << "_currentFrame " << _currentFrame; + + + { //where are we in the currently defined animation segment? - // int animationCurrentFrame = (int)(glm::floor(_currentFrame - firstFrame)) % updatedFrameCount; - //this gives us the absolute frame value to use by adding the first frame value. - // animationCurrentFrame += firstFrame; int animationCurrentFrame = (int)(glm::floor(_currentFrame)); - - - - - + //in the case where the last frame is greater than the framecount then clamp + //it to the end of the animation until it loops around. + if (animationCurrentFrame < 0 || animationCurrentFrame > frameCount) { animationCurrentFrame = 0; } @@ -1382,23 +1366,65 @@ void ModelEntityRenderer::doRenderUpdateSynchronousTyped(const ScenePointer& sce // make a copy of the animation properites auto newAnimationProperties = entity->getAnimationProperties(); if (newAnimationProperties != _renderAnimationProperties) { - qCDebug(entitiesrenderer) << "this is where the change is currently handled in the rendering code"; - qCDebug(entitiesrenderer) << "getting the currently playing frame from the modelentityitem update" << newAnimationProperties.getCurrentFrame(); withWriteLock([&] { - if ( (newAnimationProperties.getCurrentFrame() != _renderAnimationProperties.getCurrentFrame()) || (newAnimationProperties.getFirstFrame() != _renderAnimationProperties.getFirstFrame()) || (newAnimationProperties.getLastFrame() != _renderAnimationProperties.getLastFrame()) || (newAnimationProperties.getRunning() && !_renderAnimationProperties.getRunning())) { - if (!(newAnimationProperties.getCurrentFrame() > newAnimationProperties.getLastFrame()) && !(newAnimationProperties.getCurrentFrame() < newAnimationProperties.getFirstFrame())) { + if ((newAnimationProperties.getFirstFrame() != _renderAnimationProperties.getFirstFrame()) || (newAnimationProperties.getLastFrame() != _renderAnimationProperties.getLastFrame()) || (newAnimationProperties.getRunning() && !_renderAnimationProperties.getRunning())) { + if (_currentFrame < 0) { + qCDebug(entitiesrenderer) << "point A before assign" << _currentFrame; _currentFrame = newAnimationProperties.getCurrentFrame();// +((float)newAnimationProperties.getCurrentlyPlayingFrame() / (float)USECS_PER_SECOND)*(newAnimationProperties.getFPS()); - _endAnim = _currentFrame + ( newAnimationProperties.getLastFrame() - newAnimationProperties.getFirstFrame() ); - _lastAnimated = 0; + qCDebug(entitiesrenderer) << "point A after assign" << _currentFrame; + qCDebug(entitiesrenderer) << "current " <getAnimationProperties(); + } else { + //if first frame is less than zero then don't do anything. + if (!(entity->getAnimationFirstFrame() < 0)) { + // if the current frame is less than zero, this is from the initialization. + if (_currentFrame < 0) { + qCDebug(entitiesrenderer) << "point D property current frame " << entity->getName() << newAnimationProperties.getCurrentFrame(); + if ((newAnimationProperties.getCurrentFrame() < newAnimationProperties.getLastFrame()) && (newAnimationProperties.getCurrentFrame() > newAnimationProperties.getFirstFrame())) { + + _currentFrame = newAnimationProperties.getCurrentFrame(); + qCDebug(entitiesrenderer) << "point D.1 " << _currentFrame; + qCDebug(entitiesrenderer) << "last animated " << _lastAnimated; + _lastAnimated = usecTimestampNow(); + } + else { + _currentFrame = newAnimationProperties.getFirstFrame(); + qCDebug(entitiesrenderer) << "point D.2 " << _currentFrame; + _lastAnimated = usecTimestampNow(); + qCDebug(entitiesrenderer) << entity->getName() << "last animated " << _lastAnimated; + } + } + } + } } //angus @@ -1410,9 +1436,12 @@ void ModelEntityRenderer::doRenderUpdateSynchronousTyped(const ScenePointer& sce if (!jointsMapped()) { mapJoints(entity, model->getJointNames()); } - animate(entity); + if (!(entity->getAnimationFirstFrame() < 0) && !(entity->getAnimationFirstFrame() > entity->getAnimationLastFrame())) { + animate(entity); + } emit requestRenderUpdate(); } + } void ModelEntityRenderer::flagForCollisionGeometryUpdate() { diff --git a/libraries/entities-renderer/src/RenderableModelEntityItem.h b/libraries/entities-renderer/src/RenderableModelEntityItem.h index fdb0cf5d2c..7f3ee47534 100644 --- a/libraries/entities-renderer/src/RenderableModelEntityItem.h +++ b/libraries/entities-renderer/src/RenderableModelEntityItem.h @@ -133,7 +133,10 @@ class ModelEntityRenderer : public TypedEntityRenderergetAnimationProperties(); if (_previousAnimationProperties != currentAnimationProperties) { - qCDebug(entities) << "this is where the _currentFrame change is handled in the ModelEntityItem.cpp code"; + //qCDebug(entities) << "properties changed in modelentity code" << _currentFrame; withWriteLock([&] { - _previousAnimationProperties = currentAnimationProperties; + if ( (currentAnimationProperties.getFirstFrame() != _previousAnimationProperties.getFirstFrame()) || (currentAnimationProperties.getLastFrame() != _previousAnimationProperties.getLastFrame()) || (currentAnimationProperties.getRunning() && !_previousAnimationProperties.getRunning())) { - // if (!(currentAnimationProperties.getCurrentFrame() > currentAnimationProperties.getLastFrame()) && !(currentAnimationProperties.getCurrentFrame() < currentAnimationProperties.getFirstFrame())) { - // _currentlyPlayingFrame = currentAnimationProperties.getCurrentFrame(); - //_endAnim = _currentlyPlayingFrame + ( currentAnimationProperties.getLastFrame() - currentAnimationProperties.getFirstFrame() ); - //_lastAnimated = 0; - // } - qCDebug(entities) << "this is where the _currentFrame change is handled in the ModelEntityItem.cpp code, current frame is: \n\n" << currentAnimationProperties.getCurrentFrame(); + _lastAnimated = usecTimestampNow(); + _currentFrame = currentAnimationProperties.getFirstFrame(); + qCDebug(entities) << "point 2 " << _currentFrame; setAnimationCurrentFrame(currentAnimationProperties.getFirstFrame()); - } - else { - //else if ( _previousAnimationProperties.getLoop() && !currentAnimationProperties.getLoop()) { - // int currentframe_mod_length = (int)(_currentlyPlayingFrame - (int)(glm::floor(currentAnimationProperties.getCurrentFrame()))) % ((int)(glm::floor(currentAnimationProperties.getLastFrame())) - (int)(glm::floor(currentAnimationProperties.getFirstFrame())) + 1); - //_endAnim = _currentlyPlayingFrame + ((int)(currentAnimationProperties.getLastFrame()) - (int)(currentAnimationProperties.getFirstFrame())) - (float)currentframe_mod_length; - //} - setAnimationCurrentFrame(currentAnimationProperties.getCurrentFrame()); + }else if (currentAnimationProperties.getHold() && !_previousAnimationProperties.getHold()) { + //_lastAnimated = 0; + //_currentFrame = currentAnimationProperties.getCurrentFrame(); + qCDebug(entities) << "hold is pressed" << _currentFrame; + }else if (!currentAnimationProperties.getHold() && _previousAnimationProperties.getHold()) { + //_lastAnimated = 0; + //_currentFrame = currentAnimationProperties.getCurrentFrame(); + qCDebug(entities) << "hold is unpressed" << _currentFrame; + }else if (!currentAnimationProperties.getLoop() && _previousAnimationProperties.getLoop()) { + //_lastAnimated = 0; + qCDebug(entities) << "loop is unpressed" << _currentFrame; + }else if (currentAnimationProperties.getLoop() && !_previousAnimationProperties.getLoop()) { + //_lastAnimated = 0; + qCDebug(entities) << "loop is pressed" << _currentFrame; + }else if(currentAnimationProperties.getCurrentFrame() != _previousAnimationProperties.getCurrentFrame()){ + _currentFrame = currentAnimationProperties.getCurrentFrame(); + // if (_currentFrame < currentAnimationProperties.getFirstFrame()) { + // _currentFrame = currentAnimationProperties.getFirstFrame(); + // } + // current frame greater than lastframe is dealt with in updateframe. + //_lastAnimated = usecTimestampNow(); + qCDebug(entities) << "point 3 " << _currentFrame; } }); - - qCDebug(entities) << "this is where the _currentFrame change is handled in the ModelEntityItem.cpp code, current frame is: " << currentAnimationProperties.getCurrentFrame(); + _previousAnimationProperties = this->getAnimationProperties(); + //qCDebug(entities) << "point 4 " << _currentFrame; + } + else { + + //if the first frame is less than zero that is an error, so don't do anything. + if (!(getAnimationFirstFrame() < 0)) { + //if the current frame is less than zero then we are restarting the server. + if (_currentFrame < 0) { + qCDebug(entities) << "point 3.5 " << _currentFrame; + //_previousAnimationProperties = currentAnimationProperties; + if ((currentAnimationProperties.getCurrentFrame() < currentAnimationProperties.getLastFrame()) && (currentAnimationProperties.getCurrentFrame() > currentAnimationProperties.getFirstFrame())) { + _currentFrame = currentAnimationProperties.getCurrentFrame(); + } + else { + _currentFrame = currentAnimationProperties.getFirstFrame(); + setAnimationCurrentFrame(_currentFrame); + _lastAnimated = 0; + } + } + } } //_previousAnimationProperties = currentAnimationProperties; - updateFrameCount(); - + if (isAnimatingSomething()) { + if (!(getAnimationFirstFrame() < 0) && !(getAnimationFirstFrame() > getAnimationLastFrame()) ) { + updateFrameCount(); + } + } } } @@ -252,9 +286,6 @@ void ModelEntityItem::updateFrameCount() { auto interval = now - _lastAnimated; _lastAnimated = now; - - - //here we implement the looping animation property //get entity anim props @@ -263,28 +294,37 @@ void ModelEntityItem::updateFrameCount() { int lastFrame = getAnimationLastFrame(); bool isHolding = getAnimationHold(); int updatedFrameCount = lastFrame - firstFrame + 1; - - if (isLooping || (_currentFrame < _previousAnimationProperties.getLastFrame())) { - //else advance the current frame. - //if hold or not playing don't advance the current frame. - //also if the animFrame is outside of first or last frame then don't advance the motion. - if (!isHolding && getAnimationIsPlaying() && !(_previousAnimationProperties.getCurrentFrame() > _previousAnimationProperties.getLastFrame()) && !(_previousAnimationProperties.getCurrentFrame() < _previousAnimationProperties.getFirstFrame())) { - float deltaTime = (float)interval / (float)USECS_PER_SECOND; - _currentFrame += (deltaTime * _previousAnimationProperties.getFPS()); - while ((_currentFrame - _previousAnimationProperties.getFirstFrame()) > updatedFrameCount) { - _currentFrame -= updatedFrameCount; - } - qCDebug(entities) << "the frame is now 1 " << _currentFrame; - // setAnimationCurrentlyPlayingFrame(_currentlyPlayingFrame); - setAnimationCurrentFrame(_currentFrame); - } - - } else { - _currentFrame = getAnimationLastFrame(); - setAnimationCurrentFrame(_currentFrame); - qCDebug(entities) << "the frame is now 2 " << _currentFrame; - } + + + + //qCDebug(entities) << "point 5 " << _currentFrame; + + if (!isHolding && getAnimationIsPlaying()) { + float deltaTime = (float)interval / (float)USECS_PER_SECOND; + _currentFrame += (deltaTime * getAnimationFPS()); + if (_currentFrame > getAnimationLastFrame()) { + if (isLooping) { + while ((_currentFrame - getAnimationFirstFrame()) > (updatedFrameCount - 1)) { + _currentFrame -= (updatedFrameCount - 1); + } + } + else { + _currentFrame = getAnimationLastFrame(); + } + } + else if (_currentFrame < getAnimationFirstFrame()) { + if (getAnimationFirstFrame() < 0) { + _currentFrame = 0; + } + else { + _currentFrame = getAnimationFirstFrame(); + } + } + setAnimationCurrentFrame(_currentFrame); + } + + //qCDebug(entities) << "_currentFrame is " << _currentFrame; } //angus @@ -706,6 +746,13 @@ float ModelEntityItem::getAnimationCurrentFrame() const { }); } +float ModelEntityItem::getAnimationFPS() const { + return resultWithReadLock([&] { + return _animationProperties.getFPS(); + }); +} + + //angus change bool ModelEntityItem::isAnimatingSomething() const { return resultWithReadLock([&] { diff --git a/libraries/entities/src/ModelEntityItem.h b/libraries/entities/src/ModelEntityItem.h index 973f49aec4..3dd30761ec 100644 --- a/libraries/entities/src/ModelEntityItem.h +++ b/libraries/entities/src/ModelEntityItem.h @@ -108,6 +108,7 @@ public: bool getAnimationIsPlaying() const; float getAnimationCurrentFrame() const; + float getAnimationFPS() const; bool isAnimatingSomething() const; quint64 getCurrentlyPlayingFrame() const; @@ -178,7 +179,7 @@ private: AnimationPropertyGroup _previousAnimationProperties; bool _propTestFlag{ true }; bool _propTestFlag2{ true }; - float _currentFrame{ 0 }; + float _currentFrame{ -1 }; //angus }; From 101e67498ad643f4fedb053f589e6075e57c7991 Mon Sep 17 00:00:00 2001 From: amantley Date: Tue, 28 Nov 2017 14:11:56 -0800 Subject: [PATCH 044/148] cleaned up the code to remove _currentFrame updating in RenderModelEntityItem also removed the unnessary currently playing frame property --- .../src/EntityTreeRenderer.cpp | 5 +- .../src/RenderableModelEntityItem.cpp | 123 +----------------- .../src/RenderableModelEntityItem.h | 6 +- .../entities/src/AnimationPropertyGroup.cpp | 24 ---- .../entities/src/AnimationPropertyGroup.h | 1 - .../entities/src/EntityItemProperties.cpp | 1 - libraries/entities/src/EntityPropertyFlags.h | 2 - libraries/entities/src/ModelEntityItem.cpp | 82 ++++-------- libraries/entities/src/ModelEntityItem.h | 10 +- 9 files changed, 35 insertions(+), 219 deletions(-) diff --git a/libraries/entities-renderer/src/EntityTreeRenderer.cpp b/libraries/entities-renderer/src/EntityTreeRenderer.cpp index e3bbfca6cd..5dc1308ae3 100644 --- a/libraries/entities-renderer/src/EntityTreeRenderer.cpp +++ b/libraries/entities-renderer/src/EntityTreeRenderer.cpp @@ -402,8 +402,9 @@ void EntityTreeRenderer::update(bool simulate) { PerformanceTimer perfTimer("ETRupdate"); if (_tree && !_shuttingDown) { EntityTreePointer tree = std::static_pointer_cast(_tree); - //angus - //tree->update(simulate); + + //here we update _currentFrame and _lastAnimated and sync with the server properties. + tree->update(simulate); // Update the rendereable entities as needed { diff --git a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp index fa24a171f1..5170596741 100644 --- a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp @@ -990,59 +990,10 @@ void ModelEntityRenderer::animate(const TypedEntityPointer& entity) { return; } - //get entity model anim props - - int updatedFrameCount = entity->getAnimationLastFrame() - entity->getAnimationFirstFrame() + 1; - - - if ((entity->getAnimationFirstFrame() < 0) && (entity->getAnimationFirstFrame() > entity->getAnimationLastFrame())){// && (lastFrame <= frameCount)) { - //we don't increment currentframe if the first frame is < zero or > than last frame. - //return; - } - - - - if (!_lastAnimated) { - _lastAnimated = usecTimestampNow(); - return; - } - - auto now = usecTimestampNow(); - - //find out how long it has been since this animation started. - - auto interval = now - _lastAnimated; - _lastAnimated = now; - - - - //here we implement the looping animation property - //if we have played through the animation once then we hold on the last frame - if (!(entity->getAnimationHold()) && entity->getAnimationIsPlaying()) { - float deltaTime = (float)interval / (float)USECS_PER_SECOND; - _currentFrame += (deltaTime * entity->getAnimationFPS()); - if (_currentFrame > entity->getAnimationLastFrame()) { - if (entity->getAnimationLoop()) { - while ((_currentFrame - entity->getAnimationFirstFrame()) > (updatedFrameCount - 1)) { - _currentFrame -= (updatedFrameCount - 1); - } - }else{ - _currentFrame = entity->getAnimationLastFrame(); - } - }else if (_currentFrame < entity->getAnimationFirstFrame()) { - if (entity->getAnimationFirstFrame() < 0) { - _currentFrame = 0; - }else { - _currentFrame = entity->getAnimationFirstFrame(); - } - } - } - qCDebug(entitiesrenderer) << "_currentFrame " << _currentFrame; - - + //the code to find the current frame is now in modelEntityItem.cpp and we access it below -Angus { //where are we in the currently defined animation segment? - int animationCurrentFrame = (int)(glm::floor(_currentFrame)); + int animationCurrentFrame = (int)(glm::floor(entity->getAnimationCurrentFrame())); //in the case where the last frame is greater than the framecount then clamp //it to the end of the animation until it loops around. @@ -1361,74 +1312,8 @@ void ModelEntityRenderer::doRenderUpdateSynchronousTyped(const ScenePointer& sce model->updateRenderItems(); } - { - DETAILED_PROFILE_RANGE(simulation_physics, "CheckAnimation"); - // make a copy of the animation properites - auto newAnimationProperties = entity->getAnimationProperties(); - if (newAnimationProperties != _renderAnimationProperties) { - withWriteLock([&] { - if ((newAnimationProperties.getFirstFrame() != _renderAnimationProperties.getFirstFrame()) || (newAnimationProperties.getLastFrame() != _renderAnimationProperties.getLastFrame()) || (newAnimationProperties.getRunning() && !_renderAnimationProperties.getRunning())) { - if (_currentFrame < 0) { - qCDebug(entitiesrenderer) << "point A before assign" << _currentFrame; - _currentFrame = newAnimationProperties.getCurrentFrame();// +((float)newAnimationProperties.getCurrentlyPlayingFrame() / (float)USECS_PER_SECOND)*(newAnimationProperties.getFPS()); - qCDebug(entitiesrenderer) << "point A after assign" << _currentFrame; - qCDebug(entitiesrenderer) << "current " <getAnimationProperties(); - } else { - //if first frame is less than zero then don't do anything. - if (!(entity->getAnimationFirstFrame() < 0)) { - // if the current frame is less than zero, this is from the initialization. - if (_currentFrame < 0) { - qCDebug(entitiesrenderer) << "point D property current frame " << entity->getName() << newAnimationProperties.getCurrentFrame(); - if ((newAnimationProperties.getCurrentFrame() < newAnimationProperties.getLastFrame()) && (newAnimationProperties.getCurrentFrame() > newAnimationProperties.getFirstFrame())) { - - _currentFrame = newAnimationProperties.getCurrentFrame(); - qCDebug(entitiesrenderer) << "point D.1 " << _currentFrame; - qCDebug(entitiesrenderer) << "last animated " << _lastAnimated; - _lastAnimated = usecTimestampNow(); - } - else { - _currentFrame = newAnimationProperties.getFirstFrame(); - qCDebug(entitiesrenderer) << "point D.2 " << _currentFrame; - _lastAnimated = usecTimestampNow(); - qCDebug(entitiesrenderer) << entity->getName() << "last animated " << _lastAnimated; - } - } - } - - } - } - //angus - + //The code to deal with the change of properties is now in ModelEntityItem.cpp + //That is where _currentFrame and _lastAnimated are updated. if (_animating) { diff --git a/libraries/entities-renderer/src/RenderableModelEntityItem.h b/libraries/entities-renderer/src/RenderableModelEntityItem.h index 7f3ee47534..1ca72ce57d 100644 --- a/libraries/entities-renderer/src/RenderableModelEntityItem.h +++ b/libraries/entities-renderer/src/RenderableModelEntityItem.h @@ -133,10 +133,7 @@ class ModelEntityRenderer : public TypedEntityRenderer& out) { if (allowTranslationChanged()) { out << "animation-allowTranslation"; } - if (currentlyPlayingFrameChanged()) { - out << "animation-currentlyPlayingFrame"; - } } @@ -209,8 +196,6 @@ bool AnimationPropertyGroup::appendToEditPacket(OctreePacketData* packetData, APPEND_ENTITY_PROPERTY(PROP_ANIMATION_FIRST_FRAME, getFirstFrame()); APPEND_ENTITY_PROPERTY(PROP_ANIMATION_LAST_FRAME, getLastFrame()); APPEND_ENTITY_PROPERTY(PROP_ANIMATION_HOLD, getHold()); - //angus - APPEND_ENTITY_PROPERTY(PROP_ANIMATION_CURRENTLY_PLAYING_FRAME, getCurrentlyPlayingFrame()); return true; } @@ -232,7 +217,6 @@ bool AnimationPropertyGroup::decodeFromEditPacket(EntityPropertyFlags& propertyF READ_ENTITY_PROPERTY(PROP_ANIMATION_FIRST_FRAME, float, setFirstFrame); READ_ENTITY_PROPERTY(PROP_ANIMATION_LAST_FRAME, float, setLastFrame); READ_ENTITY_PROPERTY(PROP_ANIMATION_HOLD, bool, setHold); - READ_ENTITY_PROPERTY(PROP_ANIMATION_CURRENTLY_PLAYING_FRAME, quint64, setCurrentlyPlayingFrame); DECODE_GROUP_PROPERTY_HAS_CHANGED(PROP_ANIMATION_URL, URL); DECODE_GROUP_PROPERTY_HAS_CHANGED(PROP_ANIMATION_FPS, FPS); @@ -243,7 +227,6 @@ bool AnimationPropertyGroup::decodeFromEditPacket(EntityPropertyFlags& propertyF DECODE_GROUP_PROPERTY_HAS_CHANGED(PROP_ANIMATION_LAST_FRAME, LastFrame); DECODE_GROUP_PROPERTY_HAS_CHANGED(PROP_ANIMATION_HOLD, Hold); DECODE_GROUP_PROPERTY_HAS_CHANGED(PROP_ANIMATION_ALLOW_TRANSLATION, AllowTranslation); - DECODE_GROUP_PROPERTY_HAS_CHANGED(PROP_ANIMATION_CURRENTLY_PLAYING_FRAME, CurrentlyPlayingFrame); processedBytes += bytesRead; @@ -276,7 +259,6 @@ EntityPropertyFlags AnimationPropertyGroup::getChangedProperties() const { CHECK_PROPERTY_CHANGE(PROP_ANIMATION_LAST_FRAME, lastFrame); CHECK_PROPERTY_CHANGE(PROP_ANIMATION_HOLD, hold); CHECK_PROPERTY_CHANGE(PROP_ANIMATION_ALLOW_TRANSLATION, allowTranslation); - CHECK_PROPERTY_CHANGE(PROP_ANIMATION_CURRENTLY_PLAYING_FRAME, currentlyPlayingFrame); return changedProperties; } @@ -291,7 +273,6 @@ void AnimationPropertyGroup::getProperties(EntityItemProperties& properties) con COPY_ENTITY_GROUP_PROPERTY_TO_PROPERTIES(Animation, FirstFrame, getFirstFrame); COPY_ENTITY_GROUP_PROPERTY_TO_PROPERTIES(Animation, LastFrame, getLastFrame); COPY_ENTITY_GROUP_PROPERTY_TO_PROPERTIES(Animation, Hold, getHold); - COPY_ENTITY_GROUP_PROPERTY_TO_PROPERTIES(Animation, CurrentlyPlayingFrame, getCurrentlyPlayingFrame); } bool AnimationPropertyGroup::setProperties(const EntityItemProperties& properties) { @@ -306,7 +287,6 @@ bool AnimationPropertyGroup::setProperties(const EntityItemProperties& propertie SET_ENTITY_GROUP_PROPERTY_FROM_PROPERTIES(Animation, FirstFrame, firstFrame, setFirstFrame); SET_ENTITY_GROUP_PROPERTY_FROM_PROPERTIES(Animation, LastFrame, lastFrame, setLastFrame); SET_ENTITY_GROUP_PROPERTY_FROM_PROPERTIES(Animation, Hold, hold, setHold); - SET_ENTITY_GROUP_PROPERTY_FROM_PROPERTIES(Animation, CurrentlyPlayingFrame, currentlyPlayingFrame, setCurrentlyPlayingFrame); return somethingChanged; } @@ -322,8 +302,6 @@ EntityPropertyFlags AnimationPropertyGroup::getEntityProperties(EncodeBitstreamP requestedProperties += PROP_ANIMATION_LAST_FRAME; requestedProperties += PROP_ANIMATION_HOLD; requestedProperties += PROP_ANIMATION_ALLOW_TRANSLATION; - //angus - requestedProperties += PROP_ANIMATION_CURRENTLY_PLAYING_FRAME; return requestedProperties; } @@ -347,7 +325,6 @@ void AnimationPropertyGroup::appendSubclassData(OctreePacketData* packetData, En APPEND_ENTITY_PROPERTY(PROP_ANIMATION_FIRST_FRAME, getFirstFrame()); APPEND_ENTITY_PROPERTY(PROP_ANIMATION_LAST_FRAME, getLastFrame()); APPEND_ENTITY_PROPERTY(PROP_ANIMATION_HOLD, getHold()); - APPEND_ENTITY_PROPERTY(PROP_ANIMATION_CURRENTLY_PLAYING_FRAME, getCurrentlyPlayingFrame()); } int AnimationPropertyGroup::readEntitySubclassDataFromBuffer(const unsigned char* data, int bytesLeftToRead, @@ -367,6 +344,5 @@ int AnimationPropertyGroup::readEntitySubclassDataFromBuffer(const unsigned char READ_ENTITY_PROPERTY(PROP_ANIMATION_FIRST_FRAME, float, setFirstFrame); READ_ENTITY_PROPERTY(PROP_ANIMATION_LAST_FRAME, float, setLastFrame); READ_ENTITY_PROPERTY(PROP_ANIMATION_HOLD, bool, setHold); - READ_ENTITY_PROPERTY(PROP_ANIMATION_CURRENTLY_PLAYING_FRAME, quint64, setCurrentlyPlayingFrame); return bytesRead; } diff --git a/libraries/entities/src/AnimationPropertyGroup.h b/libraries/entities/src/AnimationPropertyGroup.h index 1a3da52684..54d4ced92f 100644 --- a/libraries/entities/src/AnimationPropertyGroup.h +++ b/libraries/entities/src/AnimationPropertyGroup.h @@ -86,7 +86,6 @@ public: DEFINE_PROPERTY(PROP_ANIMATION_LAST_FRAME, LastFrame, lastFrame, float, MAXIMUM_POSSIBLE_FRAME); // was animationSettings.lastFrame DEFINE_PROPERTY(PROP_ANIMATION_HOLD, Hold, hold, bool, false); // was animationSettings.hold DEFINE_PROPERTY(PROP_ANIMATION_ALLOW_TRANSLATION, AllowTranslation, allowTranslation, bool, true); - DEFINE_PROPERTY(PROP_ANIMATION_CURRENTLY_PLAYING_FRAME, CurrentlyPlayingFrame, currentlyPlayingFrame, quint64, 0); protected: friend bool operator==(const AnimationPropertyGroup& a, const AnimationPropertyGroup& b); diff --git a/libraries/entities/src/EntityItemProperties.cpp b/libraries/entities/src/EntityItemProperties.cpp index 77fa1231f1..108fc14e30 100644 --- a/libraries/entities/src/EntityItemProperties.cpp +++ b/libraries/entities/src/EntityItemProperties.cpp @@ -1148,7 +1148,6 @@ void EntityItemProperties::entityPropertyFlagsFromScriptValue(const QScriptValue ADD_GROUP_PROPERTY_TO_MAP(PROP_ANIMATION_LAST_FRAME, Animation, animation, LastFrame, lastFrame); ADD_GROUP_PROPERTY_TO_MAP(PROP_ANIMATION_HOLD, Animation, animation, Hold, hold); ADD_GROUP_PROPERTY_TO_MAP(PROP_ANIMATION_ALLOW_TRANSLATION, Animation, animation, AllowTranslation, allowTranslation); - ADD_GROUP_PROPERTY_TO_MAP(PROP_ANIMATION_CURRENTLY_PLAYING_FRAME, Animation, animation, CurrentlyPlayingFrame, currentlyPlayingFrame); ADD_GROUP_PROPERTY_TO_MAP(PROP_SKYBOX_COLOR, Skybox, skybox, Color, color); ADD_GROUP_PROPERTY_TO_MAP(PROP_SKYBOX_URL, Skybox, skybox, URL, url); diff --git a/libraries/entities/src/EntityPropertyFlags.h b/libraries/entities/src/EntityPropertyFlags.h index 3b1f4d60d0..35d40b669a 100644 --- a/libraries/entities/src/EntityPropertyFlags.h +++ b/libraries/entities/src/EntityPropertyFlags.h @@ -40,8 +40,6 @@ enum EntityPropertyList { PROP_ANIMATION_FRAME_INDEX, PROP_ANIMATION_PLAYING, PROP_ANIMATION_ALLOW_TRANSLATION, - //angus - PROP_ANIMATION_CURRENTLY_PLAYING_FRAME, // these properties are supported by the EntityItem base class PROP_REGISTRATION_POINT, diff --git a/libraries/entities/src/ModelEntityItem.cpp b/libraries/entities/src/ModelEntityItem.cpp index 23b352fc19..4facd1f253 100644 --- a/libraries/entities/src/ModelEntityItem.cpp +++ b/libraries/entities/src/ModelEntityItem.cpp @@ -33,6 +33,9 @@ EntityItemPointer ModelEntityItem::factory(const EntityItemID& entityID, const E ModelEntityItem::ModelEntityItem(const EntityItemID& entityItemID) : EntityItem(entityItemID) { + _lastAnimated = usecTimestampNow(); + qCDebug(entities) << "init last animated " << _lastAnimated; + //set the last animated when interface (re)starts _type = EntityTypes::Model; _lastKnownCurrentFrame = -1; _color[0] = _color[1] = _color[2] = 0; @@ -186,52 +189,45 @@ void ModelEntityItem::appendSubclassData(OctreePacketData* packetData, EncodeBit } -//angus +//added update for property fix void ModelEntityItem::update(const quint64& now) { - //put something here - //qCDebug(entities) << "model entity item update" << getName() << " " << getEntityItemID(); { auto currentAnimationProperties = this->getAnimationProperties(); if (_previousAnimationProperties != currentAnimationProperties) { - //qCDebug(entities) << "properties changed in modelentity code" << _currentFrame; - withWriteLock([&] { - + + withWriteLock([&] { if ( (currentAnimationProperties.getFirstFrame() != _previousAnimationProperties.getFirstFrame()) || (currentAnimationProperties.getLastFrame() != _previousAnimationProperties.getLastFrame()) || (currentAnimationProperties.getRunning() && !_previousAnimationProperties.getRunning())) { - _lastAnimated = usecTimestampNow(); - _currentFrame = currentAnimationProperties.getFirstFrame(); - qCDebug(entities) << "point 2 " << _currentFrame; - setAnimationCurrentFrame(currentAnimationProperties.getFirstFrame()); + if (_currentFrame < 0) { + _currentFrame = currentAnimationProperties.getCurrentFrame(); + setAnimationCurrentFrame(_currentFrame); + qCDebug(entities) << "restart code hit " << _currentFrame; + } + else { + _lastAnimated = usecTimestampNow(); + qCDebug(entities) << "last animated 1" << _lastAnimated; + _currentFrame = currentAnimationProperties.getFirstFrame(); + qCDebug(entities) << "point 2 " << _currentFrame; + setAnimationCurrentFrame(currentAnimationProperties.getFirstFrame()); + } }else if (currentAnimationProperties.getHold() && !_previousAnimationProperties.getHold()) { - //_lastAnimated = 0; - //_currentFrame = currentAnimationProperties.getCurrentFrame(); qCDebug(entities) << "hold is pressed" << _currentFrame; }else if (!currentAnimationProperties.getHold() && _previousAnimationProperties.getHold()) { - //_lastAnimated = 0; - //_currentFrame = currentAnimationProperties.getCurrentFrame(); qCDebug(entities) << "hold is unpressed" << _currentFrame; }else if (!currentAnimationProperties.getLoop() && _previousAnimationProperties.getLoop()) { - //_lastAnimated = 0; qCDebug(entities) << "loop is unpressed" << _currentFrame; }else if (currentAnimationProperties.getLoop() && !_previousAnimationProperties.getLoop()) { - //_lastAnimated = 0; qCDebug(entities) << "loop is pressed" << _currentFrame; }else if(currentAnimationProperties.getCurrentFrame() != _previousAnimationProperties.getCurrentFrame()){ _currentFrame = currentAnimationProperties.getCurrentFrame(); - // if (_currentFrame < currentAnimationProperties.getFirstFrame()) { - // _currentFrame = currentAnimationProperties.getFirstFrame(); - // } - // current frame greater than lastframe is dealt with in updateframe. - //_lastAnimated = usecTimestampNow(); qCDebug(entities) << "point 3 " << _currentFrame; } }); _previousAnimationProperties = this->getAnimationProperties(); - //qCDebug(entities) << "point 4 " << _currentFrame; } else { @@ -243,11 +239,13 @@ void ModelEntityItem::update(const quint64& now) { //_previousAnimationProperties = currentAnimationProperties; if ((currentAnimationProperties.getCurrentFrame() < currentAnimationProperties.getLastFrame()) && (currentAnimationProperties.getCurrentFrame() > currentAnimationProperties.getFirstFrame())) { _currentFrame = currentAnimationProperties.getCurrentFrame(); + qCDebug(entities) << "current frame less than zero " << _currentFrame; } else { _currentFrame = currentAnimationProperties.getFirstFrame(); setAnimationCurrentFrame(_currentFrame); - _lastAnimated = 0; + _lastAnimated = usecTimestampNow(); + qCDebug(entities) << "last animated 2" << _lastAnimated; } } } @@ -264,9 +262,6 @@ void ModelEntityItem::update(const quint64& now) { bool ModelEntityItem::needsToCallUpdate() const { - - //put something here - //qCDebug(entities) << "needs to call update"; return true; } @@ -282,29 +277,17 @@ void ModelEntityItem::updateFrameCount() { auto now = usecTimestampNow(); //this is now getting the time since the server started the animation. - //auto interval = now - _currentlyPlayingFrame; auto interval = now - _lastAnimated; _lastAnimated = now; - //here we implement the looping animation property - //get entity anim props - bool isLooping = getAnimationLoop(); - int firstFrame = getAnimationFirstFrame(); - int lastFrame = getAnimationLastFrame(); - bool isHolding = getAnimationHold(); - int updatedFrameCount = lastFrame - firstFrame + 1; + int updatedFrameCount = getAnimationLastFrame() - getAnimationFirstFrame() + 1; - - - - //qCDebug(entities) << "point 5 " << _currentFrame; - - if (!isHolding && getAnimationIsPlaying()) { + if (!getAnimationHold() && getAnimationIsPlaying()) { float deltaTime = (float)interval / (float)USECS_PER_SECOND; _currentFrame += (deltaTime * getAnimationFPS()); if (_currentFrame > getAnimationLastFrame()) { - if (isLooping) { + if (getAnimationLoop()) { while ((_currentFrame - getAnimationFirstFrame()) > (updatedFrameCount - 1)) { _currentFrame -= (updatedFrameCount - 1); } @@ -327,7 +310,7 @@ void ModelEntityItem::updateFrameCount() { //qCDebug(entities) << "_currentFrame is " << _currentFrame; } -//angus + @@ -678,13 +661,6 @@ void ModelEntityItem::setAnimationCurrentFrame(float value) { }); } -void ModelEntityItem::setAnimationCurrentlyPlayingFrame(quint64 value) { - _dirtyFlags |= Simulation::DIRTY_UPDATEABLE; - withWriteLock([&] { - _animationProperties.setCurrentlyPlayingFrame(value); - }); -} - void ModelEntityItem::setAnimationLoop(bool loop) { withWriteLock([&] { _animationProperties.setLoop(loop); @@ -753,7 +729,6 @@ float ModelEntityItem::getAnimationFPS() const { } -//angus change bool ModelEntityItem::isAnimatingSomething() const { return resultWithReadLock([&] { return !_animationProperties.getURL().isEmpty() && @@ -762,15 +737,8 @@ bool ModelEntityItem::isAnimatingSomething() const { }); } -quint64 ModelEntityItem::getCurrentlyPlayingFrame() const { - return resultWithReadLock([&] { - return _currentlyPlayingFrame; - }); -} - int ModelEntityItem::getLastKnownCurrentFrame() const { return resultWithReadLock([&] { return _lastKnownCurrentFrame; }); } -//angus change \ No newline at end of file diff --git a/libraries/entities/src/ModelEntityItem.h b/libraries/entities/src/ModelEntityItem.h index 3dd30761ec..4aa52d4cef 100644 --- a/libraries/entities/src/ModelEntityItem.h +++ b/libraries/entities/src/ModelEntityItem.h @@ -47,11 +47,11 @@ public: EntityPropertyFlags& propertyFlags, bool overwriteLocalData, bool& somethingChanged) override; - //angus + //update and needstocallupdate added back for the entity property fix virtual void update(const quint64& now) override; virtual bool needsToCallUpdate() const override; void updateFrameCount(); - //angus + virtual void debugDump() const override; void setShapeType(ShapeType type) override; @@ -87,7 +87,6 @@ public: void setAnimationURL(const QString& url); void setAnimationCurrentFrame(float value); - void setAnimationCurrentlyPlayingFrame(quint64 value); void setAnimationIsPlaying(bool value); void setAnimationFPS(float value); @@ -111,7 +110,6 @@ public: float getAnimationFPS() const; bool isAnimatingSomething() const; - quint64 getCurrentlyPlayingFrame() const; int getLastKnownCurrentFrame() const; static const QString DEFAULT_TEXTURES; @@ -173,12 +171,8 @@ protected: private: //angus - quint64 _currentlyPlayingFrame{ 0 }; - float _endAnim{ 0 }; uint64_t _lastAnimated{ 0 }; AnimationPropertyGroup _previousAnimationProperties; - bool _propTestFlag{ true }; - bool _propTestFlag2{ true }; float _currentFrame{ -1 }; //angus }; From 778d98f56b8b388b012ad08f72ccfb63a3295ca7 Mon Sep 17 00:00:00 2001 From: amantley Date: Tue, 28 Nov 2017 18:42:03 -0800 Subject: [PATCH 045/148] made some changes to fix coding standard problems in the code, also added the update for the EntityItem base class to the update function --- .../src/EntityTreeRenderer.cpp | 4 +- .../src/RenderableModelEntityItem.cpp | 16 ++--- .../src/RenderableModelEntityItem.h | 4 +- libraries/entities/src/ModelEntityItem.cpp | 62 ++++++++----------- libraries/entities/src/ModelEntityItem.h | 4 +- 5 files changed, 37 insertions(+), 53 deletions(-) diff --git a/libraries/entities-renderer/src/EntityTreeRenderer.cpp b/libraries/entities-renderer/src/EntityTreeRenderer.cpp index 5dc1308ae3..7103e72f54 100644 --- a/libraries/entities-renderer/src/EntityTreeRenderer.cpp +++ b/libraries/entities-renderer/src/EntityTreeRenderer.cpp @@ -403,7 +403,7 @@ void EntityTreeRenderer::update(bool simulate) { if (_tree && !_shuttingDown) { EntityTreePointer tree = std::static_pointer_cast(_tree); - //here we update _currentFrame and _lastAnimated and sync with the server properties. + // here we update _currentFrame and _lastAnimated and sync with the server properties. tree->update(simulate); // Update the rendereable entities as needed @@ -738,7 +738,7 @@ void EntityTreeRenderer::mouseReleaseEvent(QMouseEvent* event) { PickRay ray = _viewState->computePickRay(event->x(), event->y()); RayToEntityIntersectionResult rayPickResult = _getPrevRayPickResultOperator(_mouseRayPickID); if (rayPickResult.intersects && rayPickResult.entity) { - //qCDebug(entitiesrenderer) << "mouseReleaseEvent over entity:" << rayPickResult.entityID; + // qCDebug(entitiesrenderer) << "mouseReleaseEvent over entity:" << rayPickResult.entityID; glm::vec2 pos2D = projectOntoEntityXYPlane(rayPickResult.entity, ray, rayPickResult); PointerEvent pointerEvent(PointerEvent::Release, PointerManager::MOUSE_POINTER_ID, diff --git a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp index 5170596741..fa75702b89 100644 --- a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp @@ -465,7 +465,7 @@ void RenderableModelEntityItem::computeShapeInfo(ShapeInfo& shapeInfo) { shapeInfo.setParams(type, dimensions, getCompoundShapeURL()); } else if (type >= SHAPE_TYPE_SIMPLE_HULL && type <= SHAPE_TYPE_STATIC_MESH) { // TODO: assert we never fall in here when model not fully loaded - //assert(_model && _model->isLoaded()); + // assert(_model && _model->isLoaded()); updateModelBounds(); model->updateGeometry(); @@ -992,10 +992,10 @@ void ModelEntityRenderer::animate(const TypedEntityPointer& entity) { //the code to find the current frame is now in modelEntityItem.cpp and we access it below -Angus { - //where are we in the currently defined animation segment? + // where are we in the currently defined animation segment? int animationCurrentFrame = (int)(glm::floor(entity->getAnimationCurrentFrame())); - //in the case where the last frame is greater than the framecount then clamp - //it to the end of the animation until it loops around. + // in the case where the last frame is greater than the framecount then clamp + // it to the end of the animation until it loops around. if (animationCurrentFrame < 0 || animationCurrentFrame > frameCount) { animationCurrentFrame = 0; @@ -1032,10 +1032,10 @@ void ModelEntityRenderer::animate(const TypedEntityPointer& entity) { glm::mat4 translationMat; if (allowTranslation) { - if(index < translations.size()){ + if (index < translations.size()) { translationMat = glm::translate(translations[index]); } - } else if (index < animationJointNames.size()){ + } else if (index < animationJointNames.size()) { QString jointName = fbxJoints[index].name; // Pushing this here so its not done on every entity, with the exceptions of those allowing for translation if (originalFbxIndices.contains(jointName)) { @@ -1312,8 +1312,8 @@ void ModelEntityRenderer::doRenderUpdateSynchronousTyped(const ScenePointer& sce model->updateRenderItems(); } - //The code to deal with the change of properties is now in ModelEntityItem.cpp - //That is where _currentFrame and _lastAnimated are updated. + // The code to deal with the change of properties is now in ModelEntityItem.cpp + // That is where _currentFrame and _lastAnimated are updated. if (_animating) { diff --git a/libraries/entities-renderer/src/RenderableModelEntityItem.h b/libraries/entities-renderer/src/RenderableModelEntityItem.h index 1ca72ce57d..44ee82713d 100644 --- a/libraries/entities-renderer/src/RenderableModelEntityItem.h +++ b/libraries/entities-renderer/src/RenderableModelEntityItem.h @@ -33,7 +33,7 @@ namespace render { namespace entities { class ModelEntityRenderer; } } -//#define MODEL_ENTITY_USE_FADE_EFFECT +// #define MODEL_ENTITY_USE_FADE_EFFECT class ModelEntityWrapper : public ModelEntityItem { using Parent = ModelEntityItem; friend class render::entities::ModelEntityRenderer; @@ -185,8 +185,6 @@ private: bool _animating { false }; uint64_t _lastAnimated { 0 }; float _currentFrame { -1 }; - float _endAnim{ 0 }; - bool tempbool{ false }; }; } } // namespace diff --git a/libraries/entities/src/ModelEntityItem.cpp b/libraries/entities/src/ModelEntityItem.cpp index 4facd1f253..594353ee68 100644 --- a/libraries/entities/src/ModelEntityItem.cpp +++ b/libraries/entities/src/ModelEntityItem.cpp @@ -34,8 +34,7 @@ EntityItemPointer ModelEntityItem::factory(const EntityItemID& entityID, const E ModelEntityItem::ModelEntityItem(const EntityItemID& entityItemID) : EntityItem(entityItemID) { _lastAnimated = usecTimestampNow(); - qCDebug(entities) << "init last animated " << _lastAnimated; - //set the last animated when interface (re)starts + // set the last animated when interface (re)starts _type = EntityTypes::Model; _lastKnownCurrentFrame = -1; _color[0] = _color[1] = _color[2] = 0; @@ -190,79 +189,71 @@ void ModelEntityItem::appendSubclassData(OctreePacketData* packetData, EncodeBit -//added update for property fix +// added update for property fix void ModelEntityItem::update(const quint64& now) { - { auto currentAnimationProperties = this->getAnimationProperties(); if (_previousAnimationProperties != currentAnimationProperties) { - withWriteLock([&] { - if ( (currentAnimationProperties.getFirstFrame() != _previousAnimationProperties.getFirstFrame()) || (currentAnimationProperties.getLastFrame() != _previousAnimationProperties.getLastFrame()) || (currentAnimationProperties.getRunning() && !_previousAnimationProperties.getRunning())) { + if ((currentAnimationProperties.getFirstFrame() != _previousAnimationProperties.getFirstFrame()) || (currentAnimationProperties.getLastFrame() != _previousAnimationProperties.getLastFrame()) || (currentAnimationProperties.getRunning() && !_previousAnimationProperties.getRunning())) { if (_currentFrame < 0) { _currentFrame = currentAnimationProperties.getCurrentFrame(); setAnimationCurrentFrame(_currentFrame); - qCDebug(entities) << "restart code hit " << _currentFrame; - } - else { + qCDebug(entities) << "restart code hit last animated is " << _lastAnimated << " now is " << now; + } else { _lastAnimated = usecTimestampNow(); qCDebug(entities) << "last animated 1" << _lastAnimated; _currentFrame = currentAnimationProperties.getFirstFrame(); qCDebug(entities) << "point 2 " << _currentFrame; setAnimationCurrentFrame(currentAnimationProperties.getFirstFrame()); } - }else if (currentAnimationProperties.getHold() && !_previousAnimationProperties.getHold()) { + } else if (currentAnimationProperties.getHold() && !_previousAnimationProperties.getHold()) { qCDebug(entities) << "hold is pressed" << _currentFrame; - }else if (!currentAnimationProperties.getHold() && _previousAnimationProperties.getHold()) { + } else if (!currentAnimationProperties.getHold() && _previousAnimationProperties.getHold()) { qCDebug(entities) << "hold is unpressed" << _currentFrame; - }else if (!currentAnimationProperties.getLoop() && _previousAnimationProperties.getLoop()) { + } else if (!currentAnimationProperties.getLoop() && _previousAnimationProperties.getLoop()) { qCDebug(entities) << "loop is unpressed" << _currentFrame; - }else if (currentAnimationProperties.getLoop() && !_previousAnimationProperties.getLoop()) { + } else if (currentAnimationProperties.getLoop() && !_previousAnimationProperties.getLoop()) { qCDebug(entities) << "loop is pressed" << _currentFrame; - }else if(currentAnimationProperties.getCurrentFrame() != _previousAnimationProperties.getCurrentFrame()){ + } else if (currentAnimationProperties.getCurrentFrame() != _previousAnimationProperties.getCurrentFrame()) { _currentFrame = currentAnimationProperties.getCurrentFrame(); qCDebug(entities) << "point 3 " << _currentFrame; } }); _previousAnimationProperties = this->getAnimationProperties(); - } - else { + } else { - //if the first frame is less than zero that is an error, so don't do anything. + // if the first frame is less than zero that is an error, so don't do anything. if (!(getAnimationFirstFrame() < 0)) { - //if the current frame is less than zero then we are restarting the server. + // if the current frame is less than zero then we are restarting the server. if (_currentFrame < 0) { - qCDebug(entities) << "point 3.5 " << _currentFrame; - //_previousAnimationProperties = currentAnimationProperties; if ((currentAnimationProperties.getCurrentFrame() < currentAnimationProperties.getLastFrame()) && (currentAnimationProperties.getCurrentFrame() > currentAnimationProperties.getFirstFrame())) { _currentFrame = currentAnimationProperties.getCurrentFrame(); - qCDebug(entities) << "current frame less than zero " << _currentFrame; - } - else { + } else { _currentFrame = currentAnimationProperties.getFirstFrame(); setAnimationCurrentFrame(_currentFrame); _lastAnimated = usecTimestampNow(); - qCDebug(entities) << "last animated 2" << _lastAnimated; } } } } - //_previousAnimationProperties = currentAnimationProperties; + // _previousAnimationProperties = currentAnimationProperties; if (isAnimatingSomething()) { - if (!(getAnimationFirstFrame() < 0) && !(getAnimationFirstFrame() > getAnimationLastFrame()) ) { + if (!(getAnimationFirstFrame() < 0) && !(getAnimationFirstFrame() > getAnimationLastFrame())) { updateFrameCount(); } } } - + EntityItem::update(now); } bool ModelEntityItem::needsToCallUpdate() const { - return true; + //return isAnimatingSomething() || EntityItem::needsToCallUpdate(); + return true; } void ModelEntityItem::updateFrameCount() { @@ -276,7 +267,7 @@ void ModelEntityItem::updateFrameCount() { auto now = usecTimestampNow(); - //this is now getting the time since the server started the animation. + // this is now getting the time since the server started the animation. auto interval = now - _lastAnimated; _lastAnimated = now; @@ -291,23 +282,20 @@ void ModelEntityItem::updateFrameCount() { while ((_currentFrame - getAnimationFirstFrame()) > (updatedFrameCount - 1)) { _currentFrame -= (updatedFrameCount - 1); } - } - else { + } else { _currentFrame = getAnimationLastFrame(); } - } - else if (_currentFrame < getAnimationFirstFrame()) { + } else if (_currentFrame < getAnimationFirstFrame()) { if (getAnimationFirstFrame() < 0) { _currentFrame = 0; - } - else { + } else { _currentFrame = getAnimationFirstFrame(); } } setAnimationCurrentFrame(_currentFrame); } - //qCDebug(entities) << "_currentFrame is " << _currentFrame; + } @@ -709,7 +697,7 @@ float ModelEntityItem::getAnimationLastFrame() const { return _animationProperties.getLastFrame(); }); } -//angus change + bool ModelEntityItem::getAnimationIsPlaying() const { return resultWithReadLock([&] { return _animationProperties.getRunning(); diff --git a/libraries/entities/src/ModelEntityItem.h b/libraries/entities/src/ModelEntityItem.h index 4aa52d4cef..c0ca12c7f9 100644 --- a/libraries/entities/src/ModelEntityItem.h +++ b/libraries/entities/src/ModelEntityItem.h @@ -47,7 +47,7 @@ public: EntityPropertyFlags& propertyFlags, bool overwriteLocalData, bool& somethingChanged) override; - //update and needstocallupdate added back for the entity property fix + // update() and needstocallupdate() added back for the entity property fix virtual void update(const quint64& now) override; virtual bool needsToCallUpdate() const override; void updateFrameCount(); @@ -170,11 +170,9 @@ protected: ShapeType _shapeType = SHAPE_TYPE_NONE; private: - //angus uint64_t _lastAnimated{ 0 }; AnimationPropertyGroup _previousAnimationProperties; float _currentFrame{ -1 }; - //angus }; #endif // hifi_ModelEntityItem_h From 233d693d76634c9d04f80be699b029e325496a48 Mon Sep 17 00:00:00 2001 From: amantley Date: Wed, 29 Nov 2017 10:51:04 -0800 Subject: [PATCH 046/148] removed debug print statements and fixed negative FPS handling --- .../src/RenderableModelEntityItem.cpp | 9 +-- libraries/entities/src/ModelEntityItem.cpp | 56 +++++++++---------- 2 files changed, 28 insertions(+), 37 deletions(-) diff --git a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp index fa75702b89..d5befbe572 100644 --- a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp @@ -981,7 +981,6 @@ void ModelEntityRenderer::animate(const TypedEntityPointer& entity) { return; } - QVector jointsData; const QVector& frames = _animation->getFramesReference(); // NOTE: getFrames() is too heavy @@ -990,13 +989,12 @@ void ModelEntityRenderer::animate(const TypedEntityPointer& entity) { return; } - //the code to find the current frame is now in modelEntityItem.cpp and we access it below -Angus { - // where are we in the currently defined animation segment? + // the current frame is set on the server in update() in ModelEntityItem.cpp int animationCurrentFrame = (int)(glm::floor(entity->getAnimationCurrentFrame())); + // in the case where the last frame is greater than the framecount then clamp // it to the end of the animation until it loops around. - if (animationCurrentFrame < 0 || animationCurrentFrame > frameCount) { animationCurrentFrame = 0; } @@ -1314,8 +1312,6 @@ void ModelEntityRenderer::doRenderUpdateSynchronousTyped(const ScenePointer& sce // The code to deal with the change of properties is now in ModelEntityItem.cpp // That is where _currentFrame and _lastAnimated are updated. - - if (_animating) { DETAILED_PROFILE_RANGE(simulation_physics, "Animate"); if (!jointsMapped()) { @@ -1326,7 +1322,6 @@ void ModelEntityRenderer::doRenderUpdateSynchronousTyped(const ScenePointer& sce } emit requestRenderUpdate(); } - } void ModelEntityRenderer::flagForCollisionGeometryUpdate() { diff --git a/libraries/entities/src/ModelEntityItem.cpp b/libraries/entities/src/ModelEntityItem.cpp index 594353ee68..260074da68 100644 --- a/libraries/entities/src/ModelEntityItem.cpp +++ b/libraries/entities/src/ModelEntityItem.cpp @@ -189,48 +189,47 @@ void ModelEntityItem::appendSubclassData(OctreePacketData* packetData, EncodeBit -// added update for property fix +// added update function back for property fix void ModelEntityItem::update(const quint64& now) { { auto currentAnimationProperties = this->getAnimationProperties(); if (_previousAnimationProperties != currentAnimationProperties) { - withWriteLock([&] { - if ((currentAnimationProperties.getFirstFrame() != _previousAnimationProperties.getFirstFrame()) || (currentAnimationProperties.getLastFrame() != _previousAnimationProperties.getLastFrame()) || (currentAnimationProperties.getRunning() && !_previousAnimationProperties.getRunning())) { + withWriteLock([&] { + // if we hit start animation or change the first or last frame then restart the animation + if ((currentAnimationProperties.getFirstFrame() != _previousAnimationProperties.getFirstFrame()) || + (currentAnimationProperties.getLastFrame() != _previousAnimationProperties.getLastFrame()) || + (currentAnimationProperties.getRunning() && !_previousAnimationProperties.getRunning())) { + + // when we start interface and the property is are set then the current frame is initialized to -1 if (_currentFrame < 0) { + // don't reset _lastAnimated here because we need the timestamp from the ModelEntityItem constructor for when the properties were set _currentFrame = currentAnimationProperties.getCurrentFrame(); setAnimationCurrentFrame(_currentFrame); - qCDebug(entities) << "restart code hit last animated is " << _lastAnimated << " now is " << now; } else { _lastAnimated = usecTimestampNow(); - qCDebug(entities) << "last animated 1" << _lastAnimated; _currentFrame = currentAnimationProperties.getFirstFrame(); - qCDebug(entities) << "point 2 " << _currentFrame; setAnimationCurrentFrame(currentAnimationProperties.getFirstFrame()); } - } else if (currentAnimationProperties.getHold() && !_previousAnimationProperties.getHold()) { - qCDebug(entities) << "hold is pressed" << _currentFrame; - } else if (!currentAnimationProperties.getHold() && _previousAnimationProperties.getHold()) { - qCDebug(entities) << "hold is unpressed" << _currentFrame; - } else if (!currentAnimationProperties.getLoop() && _previousAnimationProperties.getLoop()) { - qCDebug(entities) << "loop is unpressed" << _currentFrame; - } else if (currentAnimationProperties.getLoop() && !_previousAnimationProperties.getLoop()) { - qCDebug(entities) << "loop is pressed" << _currentFrame; } else if (currentAnimationProperties.getCurrentFrame() != _previousAnimationProperties.getCurrentFrame()) { + // don't reset _lastAnimated here because the currentFrame was set with the previous setting of _lastAnimated _currentFrame = currentAnimationProperties.getCurrentFrame(); - qCDebug(entities) << "point 3 " << _currentFrame; + // qCDebug(entities) << "point 3 " << _currentFrame; } }); _previousAnimationProperties = this->getAnimationProperties(); + } else { - - // if the first frame is less than zero that is an error, so don't do anything. + // else the animation properties have not changed. + // if the first frame is less than zero don't do anything. if (!(getAnimationFirstFrame() < 0)) { - // if the current frame is less than zero then we are restarting the server. + + // if the current frame is less than zero then we have restarted the server. if (_currentFrame < 0) { - if ((currentAnimationProperties.getCurrentFrame() < currentAnimationProperties.getLastFrame()) && (currentAnimationProperties.getCurrentFrame() > currentAnimationProperties.getFirstFrame())) { + if ((currentAnimationProperties.getCurrentFrame() < currentAnimationProperties.getLastFrame()) && + (currentAnimationProperties.getCurrentFrame() > currentAnimationProperties.getFirstFrame())) { _currentFrame = currentAnimationProperties.getCurrentFrame(); } else { _currentFrame = currentAnimationProperties.getFirstFrame(); @@ -240,38 +239,40 @@ void ModelEntityItem::update(const quint64& now) { } } } - // _previousAnimationProperties = currentAnimationProperties; + if (isAnimatingSomething()) { if (!(getAnimationFirstFrame() < 0) && !(getAnimationFirstFrame() > getAnimationLastFrame())) { updateFrameCount(); } } } + EntityItem::update(now); } bool ModelEntityItem::needsToCallUpdate() const { - //return isAnimatingSomething() || EntityItem::needsToCallUpdate(); return true; } void ModelEntityItem::updateFrameCount() { - if (!_lastAnimated) { _lastAnimated = usecTimestampNow(); return; } - auto now = usecTimestampNow(); - // this is now getting the time since the server started the animation. + // update the interval since the last animation. auto interval = now - _lastAnimated; _lastAnimated = now; - + // if fps is negative then increment timestamp and return. + if (getAnimationFPS() < 0.0) { + return; + } + int updatedFrameCount = getAnimationLastFrame() - getAnimationFirstFrame() + 1; if (!getAnimationHold() && getAnimationIsPlaying()) { @@ -298,11 +299,6 @@ void ModelEntityItem::updateFrameCount() { } - - - - - void ModelEntityItem::debugDump() const { qCDebug(entities) << "ModelEntityItem id:" << getEntityItemID(); qCDebug(entities) << " edited ago:" << getEditedAgo(); From 9bc165d8b40e4853e237fdb5aabd625ab466231f Mon Sep 17 00:00:00 2001 From: Daniela Fontes Date: Thu, 30 Nov 2017 18:49:53 +0000 Subject: [PATCH 047/148] Changing to Smaller Avatar Resizes Tablet --- interface/src/avatar/MyAvatar.cpp | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/interface/src/avatar/MyAvatar.cpp b/interface/src/avatar/MyAvatar.cpp index df2089223b..28ecb07d31 100755 --- a/interface/src/avatar/MyAvatar.cpp +++ b/interface/src/avatar/MyAvatar.cpp @@ -669,6 +669,12 @@ void MyAvatar::updateSensorToWorldMatrix() { glm::mat4 desiredMat = createMatFromScaleQuatAndPos(glm::vec3(sensorToWorldScale), getWorldOrientation(), getWorldPosition()); _sensorToWorldMatrix = desiredMat * glm::inverse(_bodySensorMatrix); + bool hasSensorToWorldScaleChanged = false; + + if (abs(AvatarData::getSensorToWorldScale() - sensorToWorldScale) > 0.001f) { + hasSensorToWorldScaleChanged = true; + } + lateUpdatePalms(); if (_enableDebugDrawSensorToWorldMatrix) { @@ -677,9 +683,15 @@ void MyAvatar::updateSensorToWorldMatrix() { } _sensorToWorldMatrixCache.set(_sensorToWorldMatrix); - + updateJointFromController(controller::Action::LEFT_HAND, _controllerLeftHandMatrixCache); updateJointFromController(controller::Action::RIGHT_HAND, _controllerRightHandMatrixCache); + + if (hasSensorToWorldScaleChanged) { + emit sensorToWorldScaleChanged(sensorToWorldScale); + //qDebug() << "Debug: emit sensorToWorldScaleChanged " << sensorToWorldScale; + } + } // Update avatar head rotation with sensor data @@ -1404,6 +1416,7 @@ void MyAvatar::setSkeletonModelURL(const QUrl& skeletonModelURL) { _skeletonModel->setVisibleInScene(true, qApp->getMain3DScene()); _headBoneSet.clear(); emit skeletonChanged(); + } @@ -1439,6 +1452,7 @@ void MyAvatar::useFullAvatarURL(const QUrl& fullAvatarURL, const QString& modelN UserActivityLogger::getInstance().changedModel("skeleton", urlString); } markIdentityDataChanged(); + } void MyAvatar::setAttachmentData(const QVector& attachmentData) { From 8b38c03a5624f3fab6981214964628e227021667 Mon Sep 17 00:00:00 2001 From: David Back Date: Thu, 7 Dec 2017 17:40:58 -0800 Subject: [PATCH 048/148] Allow space characters in material library name --- libraries/fbx/src/OBJReader.cpp | 6 +++--- libraries/fbx/src/OBJReader.h | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/libraries/fbx/src/OBJReader.cpp b/libraries/fbx/src/OBJReader.cpp index e0c2efd72e..315c6a86d2 100644 --- a/libraries/fbx/src/OBJReader.cpp +++ b/libraries/fbx/src/OBJReader.cpp @@ -56,7 +56,7 @@ float OBJTokenizer::getFloat() { return std::stof((nextToken() != OBJTokenizer::DATUM_TOKEN) ? nullptr : getDatum().data()); } -int OBJTokenizer::nextToken() { +int OBJTokenizer::nextToken(bool allowSpaceChar /*= false*/) { if (_pushedBackToken != NO_PUSHBACKED_TOKEN) { int token = _pushedBackToken; _pushedBackToken = NO_PUSHBACKED_TOKEN; @@ -93,7 +93,7 @@ int OBJTokenizer::nextToken() { _datum = ""; _datum.append(ch); while (_device->getChar(&ch)) { - if (QChar(ch).isSpace() || ch == '\"') { + if ((QChar(ch).isSpace() || ch == '\"') && (!allowSpaceChar || ch != ' ')) { ungetChar(ch); // read until we encounter a special character, then replace it break; } @@ -399,7 +399,7 @@ bool OBJReader::parseOBJGroup(OBJTokenizer& tokenizer, const QVariantHash& mappi currentMaterialName = QString("part-") + QString::number(_partCounter++); } } else if (token == "mtllib" && !_url.isEmpty()) { - if (tokenizer.nextToken() != OBJTokenizer::DATUM_TOKEN) { + if (tokenizer.nextToken(true) != OBJTokenizer::DATUM_TOKEN) { break; } QByteArray libraryName = tokenizer.getDatum(); diff --git a/libraries/fbx/src/OBJReader.h b/libraries/fbx/src/OBJReader.h index fb250833cf..45e3f79480 100644 --- a/libraries/fbx/src/OBJReader.h +++ b/libraries/fbx/src/OBJReader.h @@ -11,7 +11,7 @@ public: DATUM_TOKEN = 0x100, COMMENT_TOKEN = 0x101 }; - int nextToken(); + int nextToken(bool allowSpaceChar = false); const QByteArray& getDatum() const { return _datum; } bool isNextTokenFloat(); const QByteArray getLineAsDatum(); // some "filenames" have spaces in them From 46583a90be582da995a220124db9dbf96e8a5bd3 Mon Sep 17 00:00:00 2001 From: Daniela Fontes Date: Sat, 9 Dec 2017 00:14:36 +0000 Subject: [PATCH 049/148] Change abs to fabsf and other corrections requested. --- interface/src/avatar/MyAvatar.cpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/interface/src/avatar/MyAvatar.cpp b/interface/src/avatar/MyAvatar.cpp index 28ecb07d31..3475b0c940 100755 --- a/interface/src/avatar/MyAvatar.cpp +++ b/interface/src/avatar/MyAvatar.cpp @@ -81,6 +81,7 @@ const QString& DEFAULT_AVATAR_COLLISION_SOUND_URL = "https://hifi-public.s3.amaz const float MyAvatar::ZOOM_MIN = 0.5f; const float MyAvatar::ZOOM_MAX = 25.0f; const float MyAvatar::ZOOM_DEFAULT = 1.5f; +const float MIN_SCALE_CHANGED_DELTA = 0.001f; MyAvatar::MyAvatar(QThread* thread) : Avatar(thread), @@ -670,8 +671,7 @@ void MyAvatar::updateSensorToWorldMatrix() { _sensorToWorldMatrix = desiredMat * glm::inverse(_bodySensorMatrix); bool hasSensorToWorldScaleChanged = false; - - if (abs(AvatarData::getSensorToWorldScale() - sensorToWorldScale) > 0.001f) { + if (fabsf(getSensorToWorldScale() - sensorToWorldScale) > MIN_SCALE_CHANGED_DELTA) { hasSensorToWorldScaleChanged = true; } @@ -683,13 +683,11 @@ void MyAvatar::updateSensorToWorldMatrix() { } _sensorToWorldMatrixCache.set(_sensorToWorldMatrix); - updateJointFromController(controller::Action::LEFT_HAND, _controllerLeftHandMatrixCache); updateJointFromController(controller::Action::RIGHT_HAND, _controllerRightHandMatrixCache); if (hasSensorToWorldScaleChanged) { emit sensorToWorldScaleChanged(sensorToWorldScale); - //qDebug() << "Debug: emit sensorToWorldScaleChanged " << sensorToWorldScale; } } From 4374b4f9a83c4775a99719b6fd6c7193cdb402dc Mon Sep 17 00:00:00 2001 From: humbletim Date: Mon, 11 Dec 2017 00:39:23 -0500 Subject: [PATCH 050/148] forward MIDI_CONTROL_CHANGE events --- libraries/midi/src/Midi.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/libraries/midi/src/Midi.cpp b/libraries/midi/src/Midi.cpp index ad650cf067..6c2471f680 100644 --- a/libraries/midi/src/Midi.cpp +++ b/libraries/midi/src/Midi.cpp @@ -177,9 +177,10 @@ void Midi::MidiCleanup() { #endif void Midi::noteReceived(int status, int note, int velocity) { - if (((status & MIDI_STATUS_MASK) != MIDI_NOTE_OFF) && - ((status & MIDI_STATUS_MASK) != MIDI_NOTE_ON)) { - return; // NOTE: only sending note-on and note-off to Javascript + if (((status & MIDI_STATUS_MASK) != MIDI_NOTE_OFF) && + ((status & MIDI_STATUS_MASK) != MIDI_NOTE_ON) && + ((status & MIDI_STATUS_MASK) != MIDI_CONTROL_CHANGE)) { + return; // NOTE: only sending note-on, note-off, and control-change to Javascript } QVariantMap eventData; From 2d786451c2a8be3221b9f4c6c618a0b0a4ca10b8 Mon Sep 17 00:00:00 2001 From: Zach Fox Date: Mon, 11 Dec 2017 10:50:24 -0800 Subject: [PATCH 051/148] Add comment --- libraries/ui/src/QmlWindowClass.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/libraries/ui/src/QmlWindowClass.cpp b/libraries/ui/src/QmlWindowClass.cpp index 1758150e0a..90b91c5ec2 100644 --- a/libraries/ui/src/QmlWindowClass.cpp +++ b/libraries/ui/src/QmlWindowClass.cpp @@ -61,6 +61,7 @@ QVariantMap QmlWindowClass::parseArguments(QScriptContext* context) { } QUrl url { properties[SOURCE_PROPERTY].toString() }; + // If the passed URL doesn't correspond to a known scheme, assume it's a local file path if (url.scheme() != "http" && url.scheme() != "https" && url.scheme() != "file" && url.scheme() != "about" && url.scheme() != "atp" && url.scheme() != "qrc") { properties[SOURCE_PROPERTY] = QUrl::fromLocalFile(url.toString()).toString(); From 068d04c58da8842ad2272e4280635573fcee81e2 Mon Sep 17 00:00:00 2001 From: Andrew Meadows Date: Wed, 6 Dec 2017 16:49:27 -0800 Subject: [PATCH 052/148] abstraction of recursion through bullet perf stats --- libraries/physics/src/PhysicsEngine.cpp | 52 ++++++++++++++----------- libraries/physics/src/PhysicsEngine.h | 1 - 2 files changed, 30 insertions(+), 23 deletions(-) diff --git a/libraries/physics/src/PhysicsEngine.cpp b/libraries/physics/src/PhysicsEngine.cpp index a64796308e..9ff6a59255 100644 --- a/libraries/physics/src/PhysicsEngine.cpp +++ b/libraries/physics/src/PhysicsEngine.cpp @@ -10,6 +10,7 @@ // #include +#include #include @@ -328,6 +329,33 @@ void PhysicsEngine::stepSimulation() { } } +using CProfileOperator = std::function; + +CProfileOperator harvestProfile = [](CProfileIterator* profileIterator, QString contextName) { + QString childContextName = contextName + QString("/") + QString(profileIterator->Get_Current_Name()); + uint64_t time = (uint64_t)((btScalar)MSECS_PER_SECOND * profileIterator->Get_Current_Total_Time()); + PerformanceTimer::addTimerRecord(childContextName, time); + }; + +void recurseOpOnPerformanceStats(CProfileOperator op, CProfileIterator* profileIterator, QString contextName) { + QString parentContextName = contextName + QString("/") + QString(profileIterator->Get_Current_Parent_Name()); + // get the stats for the children + int32_t numChildren = 0; + profileIterator->First(); + while (!profileIterator->Is_Done()) { + op(profileIterator, contextName); + profileIterator->Next(); + ++numChildren; + } + // recurse the children + for (int32_t i = 0; i < numChildren; ++i) { + profileIterator->Enter_Child(i); + recurseOpOnPerformanceStats(op, profileIterator, parentContextName); + } + // retreat back to parent + profileIterator->Enter_Parent(); +} + void PhysicsEngine::harvestPerformanceStats() { // unfortunately the full context names get too long for our stats presentation format //QString contextName = PerformanceTimer::getContextName(); // TODO: how to show full context name? @@ -340,7 +368,7 @@ void PhysicsEngine::harvestPerformanceStats() { for (int32_t childIndex = 0; !profileIterator->Is_Done(); ++childIndex) { if (QString(profileIterator->Get_Current_Name()) == "stepSimulation") { profileIterator->Enter_Child(childIndex); - recursivelyHarvestPerformanceStats(profileIterator, contextName); + recurseOpOnPerformanceStats(harvestProfile, profileIterator, contextName); break; } profileIterator->Next(); @@ -348,27 +376,6 @@ void PhysicsEngine::harvestPerformanceStats() { } } -void PhysicsEngine::recursivelyHarvestPerformanceStats(CProfileIterator* profileIterator, QString contextName) { - QString parentContextName = contextName + QString("/") + QString(profileIterator->Get_Current_Parent_Name()); - // get the stats for the children - int32_t numChildren = 0; - profileIterator->First(); - while (!profileIterator->Is_Done()) { - QString childContextName = parentContextName + QString("/") + QString(profileIterator->Get_Current_Name()); - uint64_t time = (uint64_t)((btScalar)MSECS_PER_SECOND * profileIterator->Get_Current_Total_Time()); - PerformanceTimer::addTimerRecord(childContextName, time); - profileIterator->Next(); - ++numChildren; - } - // recurse the children - for (int32_t i = 0; i < numChildren; ++i) { - profileIterator->Enter_Child(i); - recursivelyHarvestPerformanceStats(profileIterator, contextName); - } - // retreat back to parent - profileIterator->Enter_Parent(); -} - void PhysicsEngine::doOwnershipInfection(const btCollisionObject* objectA, const btCollisionObject* objectB) { BT_PROFILE("ownershipInfection"); @@ -515,6 +522,7 @@ const VectorOfMotionStates& PhysicsEngine::getChangedMotionStates() { void PhysicsEngine::dumpStatsIfNecessary() { if (_dumpNextStats) { _dumpNextStats = false; + CProfileManager::Increment_Frame_Counter(); CProfileManager::dumpAll(); } } diff --git a/libraries/physics/src/PhysicsEngine.h b/libraries/physics/src/PhysicsEngine.h index 3063a4a89a..4e63e8ff3e 100644 --- a/libraries/physics/src/PhysicsEngine.h +++ b/libraries/physics/src/PhysicsEngine.h @@ -94,7 +94,6 @@ public: private: QList removeDynamicsForBody(btRigidBody* body); void addObjectToDynamicsWorld(ObjectMotionState* motionState); - void recursivelyHarvestPerformanceStats(CProfileIterator* profileIterator, QString contextName); /// \brief bump any objects that touch this one, then remove contact info void bumpAndPruneContacts(ObjectMotionState* motionState); From fcff9d7e369bb2b8e5c3f4233c9901d942d63465 Mon Sep 17 00:00:00 2001 From: Andrew Meadows Date: Thu, 7 Dec 2017 08:58:35 -0800 Subject: [PATCH 053/148] use class hierarchy instead of lambdas --- libraries/physics/src/PhysicsEngine.cpp | 33 ++++++++++++++++--------- 1 file changed, 22 insertions(+), 11 deletions(-) diff --git a/libraries/physics/src/PhysicsEngine.cpp b/libraries/physics/src/PhysicsEngine.cpp index 9ff6a59255..e73b9035e6 100644 --- a/libraries/physics/src/PhysicsEngine.cpp +++ b/libraries/physics/src/PhysicsEngine.cpp @@ -329,28 +329,38 @@ void PhysicsEngine::stepSimulation() { } } -using CProfileOperator = std::function; - -CProfileOperator harvestProfile = [](CProfileIterator* profileIterator, QString contextName) { - QString childContextName = contextName + QString("/") + QString(profileIterator->Get_Current_Name()); - uint64_t time = (uint64_t)((btScalar)MSECS_PER_SECOND * profileIterator->Get_Current_Total_Time()); - PerformanceTimer::addTimerRecord(childContextName, time); +class CProfileOperator { +public: + CProfileOperator(QString context) : _context(context) { }; + virtual void process(CProfileIterator*) const = 0; +protected: + QString _context; +}; -void recurseOpOnPerformanceStats(CProfileOperator op, CProfileIterator* profileIterator, QString contextName) { - QString parentContextName = contextName + QString("/") + QString(profileIterator->Get_Current_Parent_Name()); +class PhysicsStatsHarvester : public CProfileOperator { +public: + PhysicsStatsHarvester() : CProfileOperator("...") {} + void process(CProfileIterator* itr) const override { + QString name = _context + QString("/") + QString(itr->Get_Current_Name()); + uint64_t time = (uint64_t)((btScalar)MSECS_PER_SECOND * itr->Get_Current_Total_Time()); + PerformanceTimer::addTimerRecord(name, time); + }; +}; + +void recurseOpOnPerformanceStats(const CProfileOperator& op, CProfileIterator* profileIterator) { // get the stats for the children int32_t numChildren = 0; profileIterator->First(); while (!profileIterator->Is_Done()) { - op(profileIterator, contextName); + op.process(profileIterator); profileIterator->Next(); ++numChildren; } // recurse the children for (int32_t i = 0; i < numChildren; ++i) { profileIterator->Enter_Child(i); - recurseOpOnPerformanceStats(op, profileIterator, parentContextName); + recurseOpOnPerformanceStats(op, profileIterator); } // retreat back to parent profileIterator->Enter_Parent(); @@ -368,7 +378,8 @@ void PhysicsEngine::harvestPerformanceStats() { for (int32_t childIndex = 0; !profileIterator->Is_Done(); ++childIndex) { if (QString(profileIterator->Get_Current_Name()) == "stepSimulation") { profileIterator->Enter_Child(childIndex); - recurseOpOnPerformanceStats(harvestProfile, profileIterator, contextName); + PhysicsStatsHarvester harvester; + harvester.process(profileIterator); break; } profileIterator->Next(); From 4540e9e483a2f4803a51854a8fdb070fe5774cc4 Mon Sep 17 00:00:00 2001 From: Andrew Meadows Date: Thu, 7 Dec 2017 13:08:34 -0800 Subject: [PATCH 054/148] add ability to save simulation stats to file --- libraries/physics/src/PhysicsEngine.cpp | 116 +++++++++++++++++------- libraries/physics/src/PhysicsEngine.h | 1 + 2 files changed, 83 insertions(+), 34 deletions(-) diff --git a/libraries/physics/src/PhysicsEngine.cpp b/libraries/physics/src/PhysicsEngine.cpp index e73b9035e6..2eec4a3950 100644 --- a/libraries/physics/src/PhysicsEngine.cpp +++ b/libraries/physics/src/PhysicsEngine.cpp @@ -10,8 +10,11 @@ // #include + #include +#include + #include #include "CharacterController.h" @@ -331,58 +334,103 @@ void PhysicsEngine::stepSimulation() { class CProfileOperator { public: - CProfileOperator(QString context) : _context(context) { - }; - virtual void process(CProfileIterator*) const = 0; -protected: - QString _context; + CProfileOperator() {} + void recurse(CProfileIterator* itr, QString context) { + // The context string will get too long if we accumulate it properly + //QString newContext = context + QString("/") + itr->Get_Current_Parent_Name(); + // so we use this four-character indentation + QString newContext = context + QString(".../"); + process(itr, newContext); + + // count the children + int32_t numChildren = 0; + itr->First(); + while (!itr->Is_Done()) { + itr->Next(); + ++numChildren; + } + + // recurse the children + if (numChildren > 0) { + // recurse the children + for (int32_t i = 0; i < numChildren; ++i) { + itr->Enter_Child(i); + recurse(itr, newContext); + } + } + // retreat back to parent + itr->Enter_Parent(); + } + virtual void process(CProfileIterator*, QString context) = 0; }; -class PhysicsStatsHarvester : public CProfileOperator { +class StatsHarvester : public CProfileOperator { public: - PhysicsStatsHarvester() : CProfileOperator("...") {} - void process(CProfileIterator* itr) const override { - QString name = _context + QString("/") + QString(itr->Get_Current_Name()); - uint64_t time = (uint64_t)((btScalar)MSECS_PER_SECOND * itr->Get_Current_Total_Time()); + StatsHarvester() {} + void process(CProfileIterator* itr, QString context) override { + QString name = context + itr->Get_Current_Parent_Name(); + uint64_t time = (uint64_t)((btScalar)MSECS_PER_SECOND * itr->Get_Current_Parent_Total_Time()); PerformanceTimer::addTimerRecord(name, time); }; }; -void recurseOpOnPerformanceStats(const CProfileOperator& op, CProfileIterator* profileIterator) { - // get the stats for the children - int32_t numChildren = 0; - profileIterator->First(); - while (!profileIterator->Is_Done()) { - op.process(profileIterator); - profileIterator->Next(); - ++numChildren; +class StatsWriter : public CProfileOperator { +public: + StatsWriter(QString filename) : _file(filename) { + _file.open(QFile::WriteOnly); + if (_file.error() != QFileDevice::NoError) { + qCDebug(physics) << "unable to open file " << _file.fileName() << " to save stepSimulation() stats"; + } } - // recurse the children - for (int32_t i = 0; i < numChildren; ++i) { - profileIterator->Enter_Child(i); - recurseOpOnPerformanceStats(op, profileIterator); + ~StatsWriter() { + _file.close(); } - // retreat back to parent - profileIterator->Enter_Parent(); -} + void process(CProfileIterator* itr, QString context) override { + QString name = context + itr->Get_Current_Parent_Name(); + float time = (btScalar)MSECS_PER_SECOND * itr->Get_Current_Parent_Total_Time(); + if (_file.error() == QFileDevice::NoError) { + QTextStream s(&_file); + s << name << " = " << time << "\n"; + } + } +protected: + QFile _file; +}; void PhysicsEngine::harvestPerformanceStats() { // unfortunately the full context names get too long for our stats presentation format //QString contextName = PerformanceTimer::getContextName(); // TODO: how to show full context name? QString contextName("..."); - CProfileIterator* profileIterator = CProfileManager::Get_Iterator(); - if (profileIterator) { + CProfileIterator* itr = CProfileManager::Get_Iterator(); + if (itr) { // hunt for stepSimulation context - profileIterator->First(); - for (int32_t childIndex = 0; !profileIterator->Is_Done(); ++childIndex) { - if (QString(profileIterator->Get_Current_Name()) == "stepSimulation") { - profileIterator->Enter_Child(childIndex); - PhysicsStatsHarvester harvester; - harvester.process(profileIterator); + itr->First(); + for (int32_t childIndex = 0; !itr->Is_Done(); ++childIndex) { + if (QString(itr->Get_Current_Name()) == "stepSimulation") { + itr->Enter_Child(childIndex); + StatsHarvester harvester; + harvester.recurse(itr, "bt"); break; } - profileIterator->Next(); + itr->Next(); + } + } +} + +void PhysicsEngine::printPerformanceStatsToFile(const QString& filename) { + CProfileIterator* itr = CProfileManager::Get_Iterator(); + if (itr) { + // hunt for stepSimulation context + itr->First(); + for (int32_t childIndex = 0; !itr->Is_Done(); ++childIndex) { + if (QString(itr->Get_Current_Name()) == "stepSimulation") { + itr->Enter_Child(childIndex); + StatsWriter writer(filename); + writer.recurse(itr, ""); + break; + } + itr->Next(); } } } diff --git a/libraries/physics/src/PhysicsEngine.h b/libraries/physics/src/PhysicsEngine.h index 4e63e8ff3e..3956dd09d9 100644 --- a/libraries/physics/src/PhysicsEngine.h +++ b/libraries/physics/src/PhysicsEngine.h @@ -62,6 +62,7 @@ public: void stepSimulation(); void harvestPerformanceStats(); + void printPerformanceStatsToFile(const QString& filename); void updateContactMap(); bool hasOutgoingChanges() const { return _hasOutgoingChanges; } From 2538204b1eb05d8dd5632e5a530be0d2623ec503 Mon Sep 17 00:00:00 2001 From: Andrew Meadows Date: Thu, 7 Dec 2017 16:52:21 -0800 Subject: [PATCH 055/148] expose physics simulation stats to Test JS API --- interface/src/Application.cpp | 7 +++++-- interface/src/Application.h | 2 ++ interface/src/scripting/TestScriptingInterface.cpp | 4 ++++ interface/src/scripting/TestScriptingInterface.h | 5 +++++ libraries/physics/src/PhysicsEngine.cpp | 13 +++++++++++++ libraries/physics/src/PhysicsEngine.h | 9 +++++++-- libraries/physics/src/ThreadSafeDynamicsWorld.cpp | 8 +++++++- 7 files changed, 43 insertions(+), 5 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 0176acf108..3745a82b3c 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -3222,8 +3222,6 @@ void Application::keyPressEvent(QKeyEvent* event) { } } - - void Application::keyReleaseEvent(QKeyEvent* event) { _keysPressed.remove(event->key()); @@ -7506,4 +7504,9 @@ void Application::setAvatarOverrideUrl(const QUrl& url, bool save) { _avatarOverrideUrl = url; _saveAvatarOverrideUrl = save; } + +void Application::saveNextPhysicsStats(QString filename) { + _physicsEngine->saveNextPhysicsStats(filename); +} + #include "Application.moc" diff --git a/interface/src/Application.h b/interface/src/Application.h index 9542c5ccb6..ee16740f20 100644 --- a/interface/src/Application.h +++ b/interface/src/Application.h @@ -280,6 +280,7 @@ public: void clearAvatarOverrideUrl() { _avatarOverrideUrl = QUrl(); _saveAvatarOverrideUrl = false; } QUrl getAvatarOverrideUrl() { return _avatarOverrideUrl; } bool getSaveAvatarOverrideUrl() { return _saveAvatarOverrideUrl; } + void saveNextPhysicsStats(QString filename); signals: void svoImportRequested(const QString& url); @@ -432,6 +433,7 @@ private slots: void handleSandboxStatus(QNetworkReply* reply); void switchDisplayMode(); + private: static void initDisplay(); void init(); diff --git a/interface/src/scripting/TestScriptingInterface.cpp b/interface/src/scripting/TestScriptingInterface.cpp index d4b4ba1480..b53b9d5d5f 100644 --- a/interface/src/scripting/TestScriptingInterface.cpp +++ b/interface/src/scripting/TestScriptingInterface.cpp @@ -141,6 +141,10 @@ void TestScriptingInterface::endTraceEvent(QString name) { tracing::traceEvent(trace_test(), name, tracing::DurationEnd); } +void TestScriptingInterface::savePhysicsSimulationStats(QString filename) { + qApp->saveNextPhysicsStats(filename); +} + void TestScriptingInterface::profileRange(const QString& name, QScriptValue fn) { PROFILE_RANGE(script, name); fn.call(); diff --git a/interface/src/scripting/TestScriptingInterface.h b/interface/src/scripting/TestScriptingInterface.h index 73b8f0ac93..aca07d110b 100644 --- a/interface/src/scripting/TestScriptingInterface.h +++ b/interface/src/scripting/TestScriptingInterface.h @@ -71,6 +71,11 @@ public slots: void endTraceEvent(QString name); + /**jsdoc + * Write detailed timing stats of next physics stepSimulation() to filename + */ + void savePhysicsSimulationStats(QString filename); + Q_INVOKABLE void profileRange(const QString& name, QScriptValue function); private: diff --git a/libraries/physics/src/PhysicsEngine.cpp b/libraries/physics/src/PhysicsEngine.cpp index 2eec4a3950..36b677e92f 100644 --- a/libraries/physics/src/PhysicsEngine.cpp +++ b/libraries/physics/src/PhysicsEngine.cpp @@ -16,6 +16,7 @@ #include #include +#include #include "CharacterController.h" #include "ObjectMotionState.h" @@ -294,6 +295,7 @@ void PhysicsEngine::stepSimulation() { float timeStep = btMin(dt, MAX_TIMESTEP); if (_myAvatarController) { + DETAILED_PROFILE_RANGE(simulation_physics, "avatarController"); BT_PROFILE("avatarController"); // TODO: move this stuff outside and in front of stepSimulation, because // the updateShapeIfNecessary() call needs info from MyAvatar and should @@ -465,6 +467,7 @@ void PhysicsEngine::doOwnershipInfection(const btCollisionObject* objectA, const } void PhysicsEngine::updateContactMap() { + DETAILED_PROFILE_RANGE(simulation_physics, "updateContactMap"); BT_PROFILE("updateContactMap"); ++_numContactFrames; @@ -582,10 +585,20 @@ void PhysicsEngine::dumpStatsIfNecessary() { if (_dumpNextStats) { _dumpNextStats = false; CProfileManager::Increment_Frame_Counter(); + if (_saveNextStats) { + _saveNextStats = false; + printPerformanceStatsToFile(_statsFilename); + } CProfileManager::dumpAll(); } } +void PhysicsEngine::saveNextPhysicsStats(QString filename) { + _saveNextStats = true; + _dumpNextStats = true; + _statsFilename = filename; +} + // Bullet collision flags are as follows: // CF_STATIC_OBJECT= 1, // CF_KINEMATIC_OBJECT= 2, diff --git a/libraries/physics/src/PhysicsEngine.h b/libraries/physics/src/PhysicsEngine.h index 3956dd09d9..6619a5489d 100644 --- a/libraries/physics/src/PhysicsEngine.h +++ b/libraries/physics/src/PhysicsEngine.h @@ -77,6 +77,9 @@ public: /// \brief prints timings for last frame if stats have been requested. void dumpStatsIfNecessary(); + /// \brief saves timings for last frame in filename + void saveNextPhysicsStats(QString filename); + /// \param offset position of simulation origin in domain-frame void setOriginOffset(const glm::vec3& offset) { _originOffset = offset; } @@ -116,6 +119,7 @@ private: QHash _objectDynamics; QHash> _objectDynamicsByBody; std::set _activeStaticBodies; + QString _statsFilename; glm::vec3 _originOffset; @@ -124,8 +128,9 @@ private: uint32_t _numContactFrames = 0; uint32_t _numSubsteps; - bool _dumpNextStats = false; - bool _hasOutgoingChanges = false; + bool _dumpNextStats { false }; + bool _saveNextStats { false }; + bool _hasOutgoingChanges { false }; }; diff --git a/libraries/physics/src/ThreadSafeDynamicsWorld.cpp b/libraries/physics/src/ThreadSafeDynamicsWorld.cpp index 24cfbc2609..abda5c82fc 100644 --- a/libraries/physics/src/ThreadSafeDynamicsWorld.cpp +++ b/libraries/physics/src/ThreadSafeDynamicsWorld.cpp @@ -18,6 +18,7 @@ #include #include "ThreadSafeDynamicsWorld.h" +#include "Profile.h" ThreadSafeDynamicsWorld::ThreadSafeDynamicsWorld( btDispatcher* dispatcher, @@ -29,6 +30,7 @@ ThreadSafeDynamicsWorld::ThreadSafeDynamicsWorld( int ThreadSafeDynamicsWorld::stepSimulationWithSubstepCallback(btScalar timeStep, int maxSubSteps, btScalar fixedTimeStep, SubStepCallback onSubStep) { + DETAILED_PROFILE_RANGE(simulation_physics, "stepWithCB"); BT_PROFILE("stepSimulationWithSubstepCallback"); int subSteps = 0; if (maxSubSteps) { @@ -68,11 +70,13 @@ int ThreadSafeDynamicsWorld::stepSimulationWithSubstepCallback(btScalar timeStep saveKinematicState(fixedTimeStep*clampedSimulationSteps); { + DETAILED_PROFILE_RANGE(simulation_physics, "applyGravity"); BT_PROFILE("applyGravity"); applyGravity(); } for (int i=0;i Date: Mon, 11 Dec 2017 11:27:33 -0800 Subject: [PATCH 056/148] cleanup prof stats and trace context names --- interface/src/Application.cpp | 18 +++++------- .../src/EntityTreeRenderer.cpp | 10 +++---- libraries/entities/src/EntityItem.cpp | 3 ++ libraries/entities/src/EntitySimulation.cpp | 12 +++----- libraries/entities/src/EntityTree.cpp | 24 ++++++++------- libraries/physics/src/EntityMotionState.cpp | 7 ++++- .../physics/src/PhysicalEntitySimulation.cpp | 29 ++++++++++++------- libraries/physics/src/PhysicsEngine.cpp | 2 +- .../physics/src/ThreadSafeDynamicsWorld.cpp | 2 +- 9 files changed, 59 insertions(+), 48 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 3745a82b3c..ed1a9d41d2 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -4846,8 +4846,7 @@ void Application::update(float deltaTime) { if (_physicsEnabled) { { PROFILE_RANGE(simulation_physics, "PreStep"); - - PerformanceTimer perfTimer("updateStates)"); + PerformanceTimer perfTimer("preStep)"); static VectorOfMotionStates motionStates; _entitySimulation->getObjectsToRemoveFromPhysics(motionStates); _physicsEngine->removeObjects(motionStates); @@ -4880,22 +4879,22 @@ void Application::update(float deltaTime) { } { PROFILE_RANGE(simulation_physics, "Step"); - PerformanceTimer perfTimer("stepSimulation"); + PerformanceTimer perfTimer("step"); getEntities()->getTree()->withWriteLock([&] { _physicsEngine->stepSimulation(); }); } { PROFILE_RANGE(simulation_physics, "PostStep"); - PerformanceTimer perfTimer("harvestChanges"); + PerformanceTimer perfTimer("postStep"); if (_physicsEngine->hasOutgoingChanges()) { // grab the collision events BEFORE handleOutgoingChanges() because at this point // we have a better idea of which objects we own or should own. auto& collisionEvents = _physicsEngine->getCollisionEvents(); getEntities()->getTree()->withWriteLock([&] { - PROFILE_RANGE(simulation_physics, "Harvest"); - PerformanceTimer perfTimer("handleOutgoingChanges"); + PROFILE_RANGE(simulation_physics, "HandleChanges"); + PerformanceTimer perfTimer("handleChanges"); const VectorOfMotionStates& outgoingChanges = _physicsEngine->getChangedMotionStates(); _entitySimulation->handleChangedMotionStates(outgoingChanges); @@ -4906,17 +4905,15 @@ void Application::update(float deltaTime) { }); if (!_aboutToQuit) { - // handleCollisionEvents() AFTER handleOutgoinChanges() + // handleCollisionEvents() AFTER handleOutgoingChanges() { PROFILE_RANGE(simulation_physics, "CollisionEvents"); - PerformanceTimer perfTimer("entities"); avatarManager->handleCollisionEvents(collisionEvents); // Collision events (and their scripts) must not be handled when we're locked, above. (That would risk // deadlock.) _entitySimulation->handleCollisionEvents(collisionEvents); } - PROFILE_RANGE(simulation_physics, "UpdateEntities"); // NOTE: the getEntities()->update() call below will wait for lock // and will simulate entity motion (the EntityTree has been given an EntitySimulation). getEntities()->update(true); // update the models... @@ -4927,7 +4924,8 @@ void Application::update(float deltaTime) { myAvatar->harvestResultsFromPhysicsSimulation(deltaTime); } - if (Menu::getInstance()->isOptionChecked(MenuOption::DisplayDebugTimingDetails) && + if (PerformanceTimer::isActive() && + Menu::getInstance()->isOptionChecked(MenuOption::DisplayDebugTimingDetails) && Menu::getInstance()->isOptionChecked(MenuOption::ExpandPhysicsSimulationTiming)) { _physicsEngine->harvestPerformanceStats(); } diff --git a/libraries/entities-renderer/src/EntityTreeRenderer.cpp b/libraries/entities-renderer/src/EntityTreeRenderer.cpp index 5f7899ae74..485d3b68f8 100644 --- a/libraries/entities-renderer/src/EntityTreeRenderer.cpp +++ b/libraries/entities-renderer/src/EntityTreeRenderer.cpp @@ -251,10 +251,10 @@ void EntityTreeRenderer::shutdown() { } void EntityTreeRenderer::addPendingEntities(const render::ScenePointer& scene, render::Transaction& transaction) { - PROFILE_RANGE_EX(simulation_physics, "Add", 0xffff00ff, (uint64_t)_entitiesToAdd.size()); + PROFILE_RANGE_EX(simulation_physics, "AddToScene", 0xffff00ff, (uint64_t)_entitiesToAdd.size()); PerformanceTimer pt("add"); - // Clear any expired entities - // FIXME should be able to use std::remove_if, but it fails due to some + // Clear any expired entities + // FIXME should be able to use std::remove_if, but it fails due to some // weird compilation error related to EntityItemID assignment operators for (auto itr = _entitiesToAdd.begin(); _entitiesToAdd.end() != itr; ) { if (itr->second.expired()) { @@ -272,7 +272,7 @@ void EntityTreeRenderer::addPendingEntities(const render::ScenePointer& scene, r continue; } - // Path to the parent transforms is not valid, + // Path to the parent transforms is not valid, // don't add to the scene graph yet if (!entity->isParentPathComplete()) { continue; @@ -296,7 +296,7 @@ void EntityTreeRenderer::addPendingEntities(const render::ScenePointer& scene, r } void EntityTreeRenderer::updateChangedEntities(const render::ScenePointer& scene, const ViewFrustum& view, render::Transaction& transaction) { - PROFILE_RANGE_EX(simulation_physics, "Change", 0xffff00ff, (uint64_t)_changedEntities.size()); + PROFILE_RANGE_EX(simulation_physics, "ChangeInScene", 0xffff00ff, (uint64_t)_changedEntities.size()); PerformanceTimer pt("change"); std::unordered_set changedEntities; _changedEntitiesGuard.withWriteLock([&] { diff --git a/libraries/entities/src/EntityItem.cpp b/libraries/entities/src/EntityItem.cpp index 48370b02fd..e3abb98a7a 100644 --- a/libraries/entities/src/EntityItem.cpp +++ b/libraries/entities/src/EntityItem.cpp @@ -26,6 +26,7 @@ #include #include #include +#include #include #include // usecTimestampNow() #include @@ -984,6 +985,7 @@ void EntityItem::setCollisionSoundURL(const QString& value) { } void EntityItem::simulate(const quint64& now) { + DETAILED_PROFILE_RANGE(simulation_physics, "Simulate"); if (getLastSimulated() == 0) { setLastSimulated(now); } @@ -1039,6 +1041,7 @@ void EntityItem::simulate(const quint64& now) { } bool EntityItem::stepKinematicMotion(float timeElapsed) { + DETAILED_PROFILE_RANGE(simulation_physics, "StepKinematicMotion"); // get all the data Transform transform; glm::vec3 linearVelocity; diff --git a/libraries/entities/src/EntitySimulation.cpp b/libraries/entities/src/EntitySimulation.cpp index f91d728d78..36b0d8ab2d 100644 --- a/libraries/entities/src/EntitySimulation.cpp +++ b/libraries/entities/src/EntitySimulation.cpp @@ -29,7 +29,6 @@ void EntitySimulation::setEntityTree(EntityTreePointer tree) { } void EntitySimulation::updateEntities() { - PROFILE_RANGE(simulation_physics, "ES::updateEntities"); QMutexLocker lock(&_mutex); quint64 now = usecTimestampNow(); @@ -38,12 +37,7 @@ void EntitySimulation::updateEntities() { callUpdateOnEntitiesThatNeedIt(now); moveSimpleKinematics(now); updateEntitiesInternal(now); - - { - PROFILE_RANGE(simulation_physics, "Sort"); - PerformanceTimer perfTimer("sortingEntities"); - sortEntitiesThatMoved(); - } + sortEntitiesThatMoved(); } void EntitySimulation::takeEntitiesToDelete(VectorOfEntities& entitiesToDelete) { @@ -101,6 +95,7 @@ void EntitySimulation::changeEntityInternal(EntityItemPointer entity) { // protected void EntitySimulation::expireMortalEntities(const quint64& now) { if (now > _nextExpiry) { + PROFILE_RANGE_EX(simulation_physics, "ExpireMortals", 0xffff00ff, (uint64_t)_mortalEntities.size()); // only search for expired entities if we expect to find one _nextExpiry = quint64(-1); QMutexLocker lock(&_mutex); @@ -146,6 +141,7 @@ void EntitySimulation::callUpdateOnEntitiesThatNeedIt(const quint64& now) { // protected void EntitySimulation::sortEntitiesThatMoved() { + PROFILE_RANGE_EX(simulation_physics, "SortTree", 0xffff00ff, (uint64_t)_entitiesToSort.size()); // NOTE: this is only for entities that have been moved by THIS EntitySimulation. // External changes to entity position/shape are expected to be sorted outside of the EntitySimulation. MovingEntitiesOperator moveOperator; @@ -265,7 +261,7 @@ void EntitySimulation::clearEntities() { } void EntitySimulation::moveSimpleKinematics(const quint64& now) { - PROFILE_RANGE_EX(simulation_physics, "Kinematics", 0xffff00ff, (uint64_t)_simpleKinematicEntities.size()); + PROFILE_RANGE_EX(simulation_physics, "MoveSimples", 0xffff00ff, (uint64_t)_simpleKinematicEntities.size()); SetOfEntities::iterator itemItr = _simpleKinematicEntities.begin(); while (itemItr != _simpleKinematicEntities.end()) { EntityItemPointer entity = *itemItr; diff --git a/libraries/entities/src/EntityTree.cpp b/libraries/entities/src/EntityTree.cpp index e62399ce95..10fcd19a8c 100644 --- a/libraries/entities/src/EntityTree.cpp +++ b/libraries/entities/src/EntityTree.cpp @@ -1770,24 +1770,26 @@ void EntityTree::addToNeedsParentFixupList(EntityItemPointer entity) { } void EntityTree::update(bool simulate) { - PROFILE_RANGE(simulation_physics, "ET::update"); + PROFILE_RANGE(simulation_physics, "UpdateTree"); fixupNeedsParentFixups(); if (simulate && _simulation) { withWriteLock([&] { _simulation->updateEntities(); - VectorOfEntities pendingDeletes; - _simulation->takeEntitiesToDelete(pendingDeletes); + { + PROFILE_RANGE(simulation_physics, "Deletes"); + VectorOfEntities pendingDeletes; + _simulation->takeEntitiesToDelete(pendingDeletes); + if (pendingDeletes.size() > 0) { + // translate into list of ID's + QSet idsToDelete; - if (pendingDeletes.size() > 0) { - // translate into list of ID's - QSet idsToDelete; + for (auto entity : pendingDeletes) { + idsToDelete.insert(entity->getEntityItemID()); + } - for (auto entity : pendingDeletes) { - idsToDelete.insert(entity->getEntityItemID()); + // delete these things the roundabout way + deleteEntities(idsToDelete, true); } - - // delete these things the roundabout way - deleteEntities(idsToDelete, true); } }); } diff --git a/libraries/physics/src/EntityMotionState.cpp b/libraries/physics/src/EntityMotionState.cpp index 7e8b431ceb..a688d521d6 100644 --- a/libraries/physics/src/EntityMotionState.cpp +++ b/libraries/physics/src/EntityMotionState.cpp @@ -14,8 +14,9 @@ #include #include #include -#include #include +#include +#include #include "BulletUtil.h" #include "EntityMotionState.h" @@ -325,6 +326,7 @@ bool EntityMotionState::isCandidateForOwnership() const { } bool EntityMotionState::remoteSimulationOutOfSync(uint32_t simulationStep) { + DETAILED_PROFILE_RANGE(simulation_physics, "CheckOutOfSync"); // NOTE: we only get here if we think we own the simulation assert(_body); @@ -476,6 +478,7 @@ bool EntityMotionState::remoteSimulationOutOfSync(uint32_t simulationStep) { } bool EntityMotionState::shouldSendUpdate(uint32_t simulationStep) { + DETAILED_PROFILE_RANGE(simulation_physics, "ShouldSend"); // NOTE: we expect _entity and _body to be valid in this context, since shouldSendUpdate() is only called // after doesNotNeedToSendUpdate() returns false and that call should return 'true' if _entity or _body are NULL. assert(_entity); @@ -516,6 +519,7 @@ bool EntityMotionState::shouldSendUpdate(uint32_t simulationStep) { } void EntityMotionState::sendUpdate(OctreeEditPacketSender* packetSender, uint32_t step) { + DETAILED_PROFILE_RANGE(simulation_physics, "Send"); assert(_entity); assert(entityTreeIsLocked()); @@ -731,6 +735,7 @@ void EntityMotionState::resetMeasuredBodyAcceleration() { } void EntityMotionState::measureBodyAcceleration() { + DETAILED_PROFILE_RANGE(simulation_physics, "MeasureAccel"); // try to manually measure the true acceleration of the object uint32_t thisStep = ObjectMotionState::getWorldSimulationStep(); uint32_t numSubsteps = thisStep - _lastMeasureStep; diff --git a/libraries/physics/src/PhysicalEntitySimulation.cpp b/libraries/physics/src/PhysicalEntitySimulation.cpp index 3e87b9437d..e4ba47e205 100644 --- a/libraries/physics/src/PhysicalEntitySimulation.cpp +++ b/libraries/physics/src/PhysicalEntitySimulation.cpp @@ -10,12 +10,14 @@ // +#include "PhysicalEntitySimulation.h" + +#include #include "PhysicsHelpers.h" #include "PhysicsLogging.h" #include "ShapeManager.h" -#include "PhysicalEntitySimulation.h" PhysicalEntitySimulation::PhysicalEntitySimulation() { } @@ -274,20 +276,24 @@ void PhysicalEntitySimulation::handleDeactivatedMotionStates(const VectorOfMotio } void PhysicalEntitySimulation::handleChangedMotionStates(const VectorOfMotionStates& motionStates) { + PROFILE_RANGE_EX(simulation_physics, "ChangedEntities", 0x00000000, (uint64_t)motionStates.size()); QMutexLocker lock(&_mutex); // walk the motionStates looking for those that correspond to entities - for (auto stateItr : motionStates) { - ObjectMotionState* state = &(*stateItr); - assert(state); - if (state->getType() == MOTIONSTATE_TYPE_ENTITY) { - EntityMotionState* entityState = static_cast(state); - EntityItemPointer entity = entityState->getEntity(); - assert(entity.get()); - if (entityState->isCandidateForOwnership()) { - _outgoingChanges.insert(entityState); + { + PROFILE_RANGE_EX(simulation_physics, "Filter", 0x00000000, (uint64_t)motionStates.size()); + for (auto stateItr : motionStates) { + ObjectMotionState* state = &(*stateItr); + assert(state); + if (state->getType() == MOTIONSTATE_TYPE_ENTITY) { + EntityMotionState* entityState = static_cast(state); + EntityItemPointer entity = entityState->getEntity(); + assert(entity.get()); + if (entityState->isCandidateForOwnership()) { + _outgoingChanges.insert(entityState); + } + _entitiesToSort.insert(entity); } - _entitiesToSort.insert(entity); } } @@ -302,6 +308,7 @@ void PhysicalEntitySimulation::handleChangedMotionStates(const VectorOfMotionSta } // look for entities to prune or update + PROFILE_RANGE_EX(simulation_physics, "Prune/Send", 0x00000000, (uint64_t)_outgoingChanges.size()); QSet::iterator stateItr = _outgoingChanges.begin(); while (stateItr != _outgoingChanges.end()) { EntityMotionState* state = *stateItr; diff --git a/libraries/physics/src/PhysicsEngine.cpp b/libraries/physics/src/PhysicsEngine.cpp index 36b677e92f..fe794772e2 100644 --- a/libraries/physics/src/PhysicsEngine.cpp +++ b/libraries/physics/src/PhysicsEngine.cpp @@ -412,7 +412,7 @@ void PhysicsEngine::harvestPerformanceStats() { if (QString(itr->Get_Current_Name()) == "stepSimulation") { itr->Enter_Child(childIndex); StatsHarvester harvester; - harvester.recurse(itr, "bt"); + harvester.recurse(itr, "step/"); break; } itr->Next(); diff --git a/libraries/physics/src/ThreadSafeDynamicsWorld.cpp b/libraries/physics/src/ThreadSafeDynamicsWorld.cpp index abda5c82fc..5b8c0d5843 100644 --- a/libraries/physics/src/ThreadSafeDynamicsWorld.cpp +++ b/libraries/physics/src/ThreadSafeDynamicsWorld.cpp @@ -122,7 +122,7 @@ void ThreadSafeDynamicsWorld::synchronizeMotionState(btRigidBody* body) { } void ThreadSafeDynamicsWorld::synchronizeMotionStates() { - DETAILED_PROFILE_RANGE(simulation_physics, "syncMotionStates"); + PROFILE_RANGE(simulation_physics, "SyncMotionStates"); BT_PROFILE("syncMotionStates"); _changedMotionStates.clear(); From 74a1f5de9643bb06f0adec7b5dd437dfc1603eb3 Mon Sep 17 00:00:00 2001 From: Andrew Meadows Date: Mon, 11 Dec 2017 11:30:00 -0800 Subject: [PATCH 057/148] remove bullet stats when physics stats disabled --- interface/src/Menu.cpp | 3 ++- interface/src/ui/Stats.cpp | 2 ++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/interface/src/Menu.cpp b/interface/src/Menu.cpp index 9bbb72357b..2d15134b70 100644 --- a/interface/src/Menu.cpp +++ b/interface/src/Menu.cpp @@ -645,7 +645,8 @@ Menu::Menu() { // Developer > Timing >>> MenuWrapper* timingMenu = developerMenu->addMenu("Timing"); MenuWrapper* perfTimerMenu = timingMenu->addMenu("Performance Timer"); - addCheckableActionToQMenuAndActionHash(perfTimerMenu, MenuOption::DisplayDebugTimingDetails, 0, false); + addCheckableActionToQMenuAndActionHash(perfTimerMenu, MenuOption::DisplayDebugTimingDetails, 0, false, + qApp, SLOT(enablePerfStats(bool))); addCheckableActionToQMenuAndActionHash(perfTimerMenu, MenuOption::OnlyDisplayTopTen, 0, true); addCheckableActionToQMenuAndActionHash(perfTimerMenu, MenuOption::ExpandUpdateTiming, 0, false); addCheckableActionToQMenuAndActionHash(perfTimerMenu, MenuOption::ExpandMyAvatarTiming, 0, false); diff --git a/interface/src/ui/Stats.cpp b/interface/src/ui/Stats.cpp index e194551add..f991420fe8 100644 --- a/interface/src/ui/Stats.cpp +++ b/interface/src/ui/Stats.cpp @@ -78,6 +78,8 @@ bool Stats::includeTimingRecord(const QString& name) { return Menu::getInstance()->isOptionChecked(MenuOption::ExpandPaintGLTiming); } else if (name.startsWith("/paintGL/")) { return Menu::getInstance()->isOptionChecked(MenuOption::ExpandPaintGLTiming); + } else if (name.startsWith("step/")) { + return Menu::getInstance()->isOptionChecked(MenuOption::ExpandPhysicsSimulationTiming); } return true; } From 2225352b1e151d574d03356838a3e1e10e65f703 Mon Sep 17 00:00:00 2001 From: Zach Fox Date: Mon, 11 Dec 2017 17:15:15 -0800 Subject: [PATCH 058/148] Fix wallet setup --- .../qml/hifi/commerce/wallet/Wallet.qml | 32 +++++++++++-------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/interface/resources/qml/hifi/commerce/wallet/Wallet.qml b/interface/resources/qml/hifi/commerce/wallet/Wallet.qml index 74d3b294bc..8ebd3ecc84 100644 --- a/interface/resources/qml/hifi/commerce/wallet/Wallet.qml +++ b/interface/resources/qml/hifi/commerce/wallet/Wallet.qml @@ -49,7 +49,7 @@ Rectangle { } else if (walletStatus === 1) { if (root.activeView !== "walletSetup") { root.activeView = "walletSetup"; - commerce.resetLocalWalletOnly(); + Commerce.resetLocalWalletOnly(); var timestamp = new Date(); walletSetup.startingTimestamp = timestamp; walletSetup.setupAttemptID = generateUUID(); @@ -61,8 +61,10 @@ Rectangle { root.activeView = "passphraseModal"; } } else if (walletStatus === 3) { - root.activeView = "walletHome"; - Commerce.getSecurityImage(); + if (root.activeView !== "walletSetup") { + root.activeView = "walletHome"; + Commerce.getSecurityImage(); + } } else { console.log("ERROR in Wallet.qml: Unknown wallet status: " + walletStatus); } @@ -211,17 +213,19 @@ Rectangle { Connections { onSendSignalToWallet: { - if (msg.method === 'walletSetup_raiseKeyboard') { - root.keyboardRaised = true; - root.isPassword = msg.isPasswordField; - } else if (msg.method === 'walletSetup_lowerKeyboard') { - root.keyboardRaised = false; - } else if (msg.method === 'walletSecurity_changePassphraseCancelled') { - root.activeView = "security"; - } else if (msg.method === 'walletSecurity_changePassphraseSuccess') { - root.activeView = "security"; - } else { - sendToScript(msg); + if (passphraseChange.visible) { + if (msg.method === 'walletSetup_raiseKeyboard') { + root.keyboardRaised = true; + root.isPassword = msg.isPasswordField; + } else if (msg.method === 'walletSetup_lowerKeyboard') { + root.keyboardRaised = false; + } else if (msg.method === 'walletSecurity_changePassphraseCancelled') { + root.activeView = "security"; + } else if (msg.method === 'walletSecurity_changePassphraseSuccess') { + root.activeView = "security"; + } else { + sendToScript(msg); + } } } } From ce96fa70788bbce962f4e2d53bfc9ad7f00f2bfc Mon Sep 17 00:00:00 2001 From: SamGondelman Date: Mon, 11 Dec 2017 17:32:58 -0800 Subject: [PATCH 059/148] change hysteresis values based on testing --- interface/src/raypick/StylusPointer.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/interface/src/raypick/StylusPointer.cpp b/interface/src/raypick/StylusPointer.cpp index 21d257048c..5afbc2058a 100644 --- a/interface/src/raypick/StylusPointer.cpp +++ b/interface/src/raypick/StylusPointer.cpp @@ -23,10 +23,10 @@ static const float WEB_STYLUS_LENGTH = 0.2f; static const float TABLET_MIN_HOVER_DISTANCE = -0.1f; static const float TABLET_MAX_HOVER_DISTANCE = 0.1f; static const float TABLET_MIN_TOUCH_DISTANCE = -0.1f; -static const float TABLET_MAX_TOUCH_DISTANCE = 0.01f; +static const float TABLET_MAX_TOUCH_DISTANCE = 0.005f; static const float HOVER_HYSTERESIS = 0.01f; -static const float TOUCH_HYSTERESIS = 0.02f; +static const float TOUCH_HYSTERESIS = 0.001f; static const float STYLUS_MOVE_DELAY = 0.33f * USECS_PER_SECOND; static const float TOUCH_PRESS_TO_MOVE_DEADSPOT = 0.0481f; From 29538851b61c17a8e8561dd1534942e535f40589 Mon Sep 17 00:00:00 2001 From: amantley Date: Mon, 11 Dec 2017 18:50:07 -0800 Subject: [PATCH 060/148] Made the changes from the latest code review, except getting rid of the while loop. --- .../src/RenderableModelEntityItem.cpp | 4 +-- .../src/RenderableModelEntityItem.h | 1 - .../entities/src/AnimationPropertyGroup.cpp | 9 +++--- libraries/entities/src/ModelEntityItem.cpp | 31 ++++++++++--------- libraries/entities/src/ModelEntityItem.h | 4 +-- 5 files changed, 25 insertions(+), 24 deletions(-) diff --git a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp index 4686cc94bc..e578e4858d 100644 --- a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp @@ -992,7 +992,7 @@ void ModelEntityRenderer::animate(const TypedEntityPointer& entity) { return; } - { + { // the current frame is set on the server in update() in ModelEntityItem.cpp int animationCurrentFrame = (int)(glm::floor(entity->getAnimationCurrentFrame())); @@ -1313,7 +1313,7 @@ void ModelEntityRenderer::doRenderUpdateSynchronousTyped(const ScenePointer& sce } // The code to deal with the change of properties is now in ModelEntityItem.cpp - // That is where _currentFrame and _lastAnimated are updated. + // That is where _currentFrame and _lastAnimated were updated. if (_animating) { DETAILED_PROFILE_RANGE(simulation_physics, "Animate"); if (!jointsMapped()) { diff --git a/libraries/entities-renderer/src/RenderableModelEntityItem.h b/libraries/entities-renderer/src/RenderableModelEntityItem.h index 44ee82713d..b4f2665692 100644 --- a/libraries/entities-renderer/src/RenderableModelEntityItem.h +++ b/libraries/entities-renderer/src/RenderableModelEntityItem.h @@ -184,7 +184,6 @@ private: bool _shouldHighlight { false }; bool _animating { false }; uint64_t _lastAnimated { 0 }; - float _currentFrame { -1 }; }; } } // namespace diff --git a/libraries/entities/src/AnimationPropertyGroup.cpp b/libraries/entities/src/AnimationPropertyGroup.cpp index 932bdbf8c0..2af56fb6b2 100644 --- a/libraries/entities/src/AnimationPropertyGroup.cpp +++ b/libraries/entities/src/AnimationPropertyGroup.cpp @@ -22,24 +22,25 @@ const float AnimationPropertyGroup::MAXIMUM_POSSIBLE_FRAME = 100000.0f; bool operator==(const AnimationPropertyGroup& a, const AnimationPropertyGroup& b) { return - (a._url == b._url) && + (a._currentFrame == b._currentFrame) && (a._running == b._running) && (a._loop == b._loop) && + (a._hold == b._hold) && (a._firstFrame == b._firstFrame) && (a._lastFrame == b._lastFrame) && - (a._hold == b._hold); + (a._url == b._url); } bool operator!=(const AnimationPropertyGroup& a, const AnimationPropertyGroup& b) { return - (a._url != b._url) || (a._currentFrame != b._currentFrame) || (a._running != b._running) || (a._loop != b._loop) || + (a._hold != b._hold) || (a._firstFrame != b._firstFrame) || (a._lastFrame != b._lastFrame) || - (a._hold != b._hold); + (a._url != b._url); } diff --git a/libraries/entities/src/ModelEntityItem.cpp b/libraries/entities/src/ModelEntityItem.cpp index 260074da68..4ade724a82 100644 --- a/libraries/entities/src/ModelEntityItem.cpp +++ b/libraries/entities/src/ModelEntityItem.cpp @@ -207,11 +207,16 @@ void ModelEntityItem::update(const quint64& now) { // don't reset _lastAnimated here because we need the timestamp from the ModelEntityItem constructor for when the properties were set _currentFrame = currentAnimationProperties.getCurrentFrame(); setAnimationCurrentFrame(_currentFrame); + qCDebug(entities) << "setting first frame 1 " << _currentFrame; } else { - _lastAnimated = usecTimestampNow(); + _lastAnimated = usecTimestampNow(); _currentFrame = currentAnimationProperties.getFirstFrame(); setAnimationCurrentFrame(currentAnimationProperties.getFirstFrame()); + qCDebug(entities) << "setting first frame 2" << _currentFrame; } + } else if (!currentAnimationProperties.getRunning() && _previousAnimationProperties.getRunning()) { + _currentFrame = currentAnimationProperties.getFirstFrame(); + setAnimationCurrentFrame(_currentFrame); } else if (currentAnimationProperties.getCurrentFrame() != _previousAnimationProperties.getCurrentFrame()) { // don't reset _lastAnimated here because the currentFrame was set with the previous setting of _lastAnimated _currentFrame = currentAnimationProperties.getCurrentFrame(); @@ -228,13 +233,15 @@ void ModelEntityItem::update(const quint64& now) { // if the current frame is less than zero then we have restarted the server. if (_currentFrame < 0) { + //qCDebug(entities) << "setting first frame 3 " << _currentFrame; if ((currentAnimationProperties.getCurrentFrame() < currentAnimationProperties.getLastFrame()) && (currentAnimationProperties.getCurrentFrame() > currentAnimationProperties.getFirstFrame())) { - _currentFrame = currentAnimationProperties.getCurrentFrame(); + // _currentFrame = currentAnimationProperties.getCurrentFrame(); } else { - _currentFrame = currentAnimationProperties.getFirstFrame(); - setAnimationCurrentFrame(_currentFrame); - _lastAnimated = usecTimestampNow(); + //qCDebug(entities) << "setting first frame 4 " << _currentFrame; + // _currentFrame = currentAnimationProperties.getFirstFrame(); + // setAnimationCurrentFrame(_currentFrame); + // _lastAnimated = usecTimestampNow(); } } } @@ -269,7 +276,7 @@ void ModelEntityItem::updateFrameCount() { _lastAnimated = now; // if fps is negative then increment timestamp and return. - if (getAnimationFPS() < 0.0) { + if (getAnimationFPS() < 0.0f) { return; } @@ -280,8 +287,9 @@ void ModelEntityItem::updateFrameCount() { _currentFrame += (deltaTime * getAnimationFPS()); if (_currentFrame > getAnimationLastFrame()) { if (getAnimationLoop()) { - while ((_currentFrame - getAnimationFirstFrame()) > (updatedFrameCount - 1)) { - _currentFrame -= (updatedFrameCount - 1); + //_currentFrame = getAnimationFirstFrame() + (int)(glm::floor(_currentFrame - getAnimationFirstFrame())) % (updatedFrameCount - 1); + while (_currentFrame > (getAnimationFirstFrame() + (updatedFrameCount - 1))) { + _currentFrame = _currentFrame - (updatedFrameCount - 1); } } else { _currentFrame = getAnimationLastFrame(); @@ -293,6 +301,7 @@ void ModelEntityItem::updateFrameCount() { _currentFrame = getAnimationFirstFrame(); } } + qCDebug(entities) << "in update frame " << _currentFrame; setAnimationCurrentFrame(_currentFrame); } @@ -720,9 +729,3 @@ bool ModelEntityItem::isAnimatingSomething() const { (_animationProperties.getFPS() != 0.0f); }); } - -int ModelEntityItem::getLastKnownCurrentFrame() const { - return resultWithReadLock([&] { - return _lastKnownCurrentFrame; - }); -} diff --git a/libraries/entities/src/ModelEntityItem.h b/libraries/entities/src/ModelEntityItem.h index c0ca12c7f9..7fee022011 100644 --- a/libraries/entities/src/ModelEntityItem.h +++ b/libraries/entities/src/ModelEntityItem.h @@ -110,8 +110,6 @@ public: float getAnimationFPS() const; bool isAnimatingSomething() const; - int getLastKnownCurrentFrame() const; - static const QString DEFAULT_TEXTURES; const QString getTextures() const; void setTextures(const QString& textures); @@ -172,7 +170,7 @@ protected: private: uint64_t _lastAnimated{ 0 }; AnimationPropertyGroup _previousAnimationProperties; - float _currentFrame{ -1 }; + float _currentFrame{ -1.0f }; }; #endif // hifi_ModelEntityItem_h From 079d9639e477844bdb79f213cafc21334f15f806 Mon Sep 17 00:00:00 2001 From: amantley Date: Tue, 12 Dec 2017 09:12:11 -0800 Subject: [PATCH 061/148] Got rid of the while loop in updateFrameCount in ModelEntityItem_cpp --- libraries/entities/src/ModelEntityItem.cpp | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/libraries/entities/src/ModelEntityItem.cpp b/libraries/entities/src/ModelEntityItem.cpp index 4ade724a82..3215ab9dd0 100644 --- a/libraries/entities/src/ModelEntityItem.cpp +++ b/libraries/entities/src/ModelEntityItem.cpp @@ -287,10 +287,7 @@ void ModelEntityItem::updateFrameCount() { _currentFrame += (deltaTime * getAnimationFPS()); if (_currentFrame > getAnimationLastFrame()) { if (getAnimationLoop()) { - //_currentFrame = getAnimationFirstFrame() + (int)(glm::floor(_currentFrame - getAnimationFirstFrame())) % (updatedFrameCount - 1); - while (_currentFrame > (getAnimationFirstFrame() + (updatedFrameCount - 1))) { - _currentFrame = _currentFrame - (updatedFrameCount - 1); - } + _currentFrame = getAnimationFirstFrame() + (int)(glm::floor(_currentFrame - getAnimationFirstFrame())) % (updatedFrameCount - 1); } else { _currentFrame = getAnimationLastFrame(); } From 1bd12857ef01e9e1dc1ef6e4beaefa6b28a7c2bc Mon Sep 17 00:00:00 2001 From: Zach Fox Date: Tue, 12 Dec 2017 12:07:08 -0800 Subject: [PATCH 062/148] Add static certificate JSON versioning; add serverScripts to cert JSON --- libraries/entities/src/EntityItem.cpp | 3 +++ libraries/entities/src/EntityItem.h | 3 +++ .../entities/src/EntityItemProperties.cpp | 18 ++++++++++++++++++ libraries/entities/src/EntityItemProperties.h | 2 ++ .../src/EntityItemPropertiesDefaults.h | 1 + libraries/entities/src/EntityPropertyFlags.h | 1 + 6 files changed, 28 insertions(+) diff --git a/libraries/entities/src/EntityItem.cpp b/libraries/entities/src/EntityItem.cpp index 48370b02fd..21e967401f 100644 --- a/libraries/entities/src/EntityItem.cpp +++ b/libraries/entities/src/EntityItem.cpp @@ -1249,6 +1249,7 @@ EntityItemProperties EntityItem::getProperties(EntityPropertyFlags desiredProper COPY_ENTITY_PROPERTY_TO_PROPERTIES(editionNumber, getEditionNumber); COPY_ENTITY_PROPERTY_TO_PROPERTIES(entityInstanceNumber, getEntityInstanceNumber); COPY_ENTITY_PROPERTY_TO_PROPERTIES(certificateID, getCertificateID); + COPY_ENTITY_PROPERTY_TO_PROPERTIES(staticCertificateVersion, getStaticCertificateVersion); COPY_ENTITY_PROPERTY_TO_PROPERTIES(name, getName); COPY_ENTITY_PROPERTY_TO_PROPERTIES(href, getHref); @@ -1356,6 +1357,7 @@ bool EntityItem::setProperties(const EntityItemProperties& properties) { SET_ENTITY_PROPERTY_FROM_PROPERTIES(editionNumber, setEditionNumber); SET_ENTITY_PROPERTY_FROM_PROPERTIES(entityInstanceNumber, setEntityInstanceNumber); SET_ENTITY_PROPERTY_FROM_PROPERTIES(certificateID, setCertificateID); + SET_ENTITY_PROPERTY_FROM_PROPERTIES(staticCertificateVersion, setStaticCertificateVersion); SET_ENTITY_PROPERTY_FROM_PROPERTIES(name, setName); SET_ENTITY_PROPERTY_FROM_PROPERTIES(href, setHref); @@ -2783,6 +2785,7 @@ DEFINE_PROPERTY_ACCESSOR(QString, MarketplaceID, marketplaceID) DEFINE_PROPERTY_ACCESSOR(quint32, EditionNumber, editionNumber) DEFINE_PROPERTY_ACCESSOR(quint32, EntityInstanceNumber, entityInstanceNumber) DEFINE_PROPERTY_ACCESSOR(QString, CertificateID, certificateID) +DEFINE_PROPERTY_ACCESSOR(quint32, StaticCertificateVersion, staticCertificateVersion) uint32_t EntityItem::getDirtyFlags() const { uint32_t result; diff --git a/libraries/entities/src/EntityItem.h b/libraries/entities/src/EntityItem.h index 4c7f37bd6a..088d21e84d 100644 --- a/libraries/entities/src/EntityItem.h +++ b/libraries/entities/src/EntityItem.h @@ -328,6 +328,8 @@ public: void setEntityInstanceNumber(const quint32&); QString getCertificateID() const; void setCertificateID(const QString& value); + quint32 getStaticCertificateVersion() const; + void setStaticCertificateVersion(const quint32&); // TODO: get rid of users of getRadius()... float getRadius() const; @@ -547,6 +549,7 @@ protected: quint32 _editionNumber { ENTITY_ITEM_DEFAULT_EDITION_NUMBER }; quint32 _entityInstanceNumber { ENTITY_ITEM_DEFAULT_ENTITY_INSTANCE_NUMBER }; QString _marketplaceID { ENTITY_ITEM_DEFAULT_MARKETPLACE_ID }; + quint32 _staticCertificateVersion { ENTITY_ITEM_DEFAULT_STATIC_CERTIFICATE_VERSION }; // NOTE: Damping is applied like this: v *= pow(1 - damping, dt) diff --git a/libraries/entities/src/EntityItemProperties.cpp b/libraries/entities/src/EntityItemProperties.cpp index 9f7ba1cc80..e9613c7120 100644 --- a/libraries/entities/src/EntityItemProperties.cpp +++ b/libraries/entities/src/EntityItemProperties.cpp @@ -325,6 +325,7 @@ EntityPropertyFlags EntityItemProperties::getChangedProperties() const { CHECK_PROPERTY_CHANGE(PROP_EDITION_NUMBER, editionNumber); CHECK_PROPERTY_CHANGE(PROP_ENTITY_INSTANCE_NUMBER, entityInstanceNumber); CHECK_PROPERTY_CHANGE(PROP_CERTIFICATE_ID, certificateID); + CHECK_PROPERTY_CHANGE(PROP_STATIC_CERTIFICATE_VERSION, staticCertificateVersion); CHECK_PROPERTY_CHANGE(PROP_NAME, name); CHECK_PROPERTY_CHANGE(PROP_BACKGROUND_MODE, backgroundMode); @@ -460,6 +461,7 @@ QScriptValue EntityItemProperties::copyToScriptValue(QScriptEngine* engine, bool COPY_PROPERTY_TO_QSCRIPTVALUE(PROP_EDITION_NUMBER, editionNumber); COPY_PROPERTY_TO_QSCRIPTVALUE(PROP_ENTITY_INSTANCE_NUMBER, entityInstanceNumber); COPY_PROPERTY_TO_QSCRIPTVALUE(PROP_CERTIFICATE_ID, certificateID); + COPY_PROPERTY_TO_QSCRIPTVALUE(PROP_STATIC_CERTIFICATE_VERSION, staticCertificateVersion); COPY_PROPERTY_TO_QSCRIPTVALUE(PROP_NAME, name); COPY_PROPERTY_TO_QSCRIPTVALUE(PROP_COLLISION_SOUND_URL, collisionSoundURL); @@ -743,6 +745,7 @@ void EntityItemProperties::copyFromScriptValue(const QScriptValue& object, bool COPY_PROPERTY_FROM_QSCRIPTVALUE(editionNumber, quint32, setEditionNumber); COPY_PROPERTY_FROM_QSCRIPTVALUE(entityInstanceNumber, quint32, setEntityInstanceNumber); COPY_PROPERTY_FROM_QSCRIPTVALUE(certificateID, QString, setCertificateID); + COPY_PROPERTY_FROM_QSCRIPTVALUE(staticCertificateVersion, quint32, setStaticCertificateVersion); COPY_PROPERTY_FROM_QSCRIPTVALUE(name, QString, setName); COPY_PROPERTY_FROM_QSCRIPTVALUE(collisionSoundURL, QString, setCollisionSoundURL); @@ -900,6 +903,7 @@ void EntityItemProperties::merge(const EntityItemProperties& other) { COPY_PROPERTY_IF_CHANGED(editionNumber); COPY_PROPERTY_IF_CHANGED(entityInstanceNumber); COPY_PROPERTY_IF_CHANGED(certificateID); + COPY_PROPERTY_IF_CHANGED(staticCertificateVersion); COPY_PROPERTY_IF_CHANGED(name); COPY_PROPERTY_IF_CHANGED(collisionSoundURL); @@ -1090,6 +1094,7 @@ void EntityItemProperties::entityPropertyFlagsFromScriptValue(const QScriptValue ADD_PROPERTY_TO_MAP(PROP_EDITION_NUMBER, EditionNumber, editionNumber, quint32); ADD_PROPERTY_TO_MAP(PROP_ENTITY_INSTANCE_NUMBER, EntityInstanceNumber, entityInstanceNumber, quint32); ADD_PROPERTY_TO_MAP(PROP_CERTIFICATE_ID, CertificateID, certificateID, QString); + ADD_PROPERTY_TO_MAP(PROP_STATIC_CERTIFICATE_VERSION, StaticCertificateVersion, staticCertificateVersion, quint32); ADD_PROPERTY_TO_MAP(PROP_KEYLIGHT_COLOR, KeyLightColor, keyLightColor, xColor); ADD_PROPERTY_TO_MAP(PROP_KEYLIGHT_INTENSITY, KeyLightIntensity, keyLightIntensity, float); @@ -2338,6 +2343,9 @@ QList EntityItemProperties::listChangedProperties() { if (certificateIDChanged()) { out += "certificateID"; } + if (staticCertificateVersionChanged()) { + out += "staticCertificateVersion"; + } if (backgroundModeChanged()) { out += "backgroundMode"; @@ -2499,6 +2507,16 @@ QByteArray EntityItemProperties::getStaticCertificateJSON() const { ADD_ENUM_PROPERTY(shapeType, ShapeType); json["type"] = EntityTypes::getEntityTypeName(getType()); + quint32 staticCertificateVersion = getStaticCertificateVersion(); + + if (staticCertificateVersion != 0) { + json["staticCertificateVersion"] = (double)staticCertificateVersion; + + if (staticCertificateVersion == 1) { + ADD_STRING_PROPERTY(serverScripts, ServerScripts); + } + } + return QJsonDocument(json).toJson(QJsonDocument::Compact); } QByteArray EntityItemProperties::getStaticCertificateHash() const { diff --git a/libraries/entities/src/EntityItemProperties.h b/libraries/entities/src/EntityItemProperties.h index ec192d7c9f..4f7ba1317b 100644 --- a/libraries/entities/src/EntityItemProperties.h +++ b/libraries/entities/src/EntityItemProperties.h @@ -220,6 +220,7 @@ public: DEFINE_PROPERTY_REF(PROP_EDITION_NUMBER, EditionNumber, editionNumber, quint32, ENTITY_ITEM_DEFAULT_EDITION_NUMBER); DEFINE_PROPERTY_REF(PROP_ENTITY_INSTANCE_NUMBER, EntityInstanceNumber, entityInstanceNumber, quint32, ENTITY_ITEM_DEFAULT_ENTITY_INSTANCE_NUMBER); DEFINE_PROPERTY_REF(PROP_CERTIFICATE_ID, CertificateID, certificateID, QString, ENTITY_ITEM_DEFAULT_CERTIFICATE_ID); + DEFINE_PROPERTY_REF(PROP_STATIC_CERTIFICATE_VERSION, StaticCertificateVersion, staticCertificateVersion, quint32, ENTITY_ITEM_DEFAULT_STATIC_CERTIFICATE_VERSION); // these are used when bouncing location data into and out of scripts DEFINE_PROPERTY_REF(PROP_LOCAL_POSITION, LocalPosition, localPosition, glmVec3, ENTITY_ITEM_ZERO_VEC3); @@ -473,6 +474,7 @@ inline QDebug operator<<(QDebug debug, const EntityItemProperties& properties) { DEBUG_PROPERTY_IF_CHANGED(debug, properties, EditionNumber, editionNumber, ""); DEBUG_PROPERTY_IF_CHANGED(debug, properties, EntityInstanceNumber, entityInstanceNumber, ""); DEBUG_PROPERTY_IF_CHANGED(debug, properties, CertificateID, certificateID, ""); + DEBUG_PROPERTY_IF_CHANGED(debug, properties, StaticCertificateVersion, staticCertificateVersion, ""); DEBUG_PROPERTY_IF_CHANGED(debug, properties, BackgroundMode, backgroundMode, ""); DEBUG_PROPERTY_IF_CHANGED(debug, properties, HazeMode, hazeMode, ""); diff --git a/libraries/entities/src/EntityItemPropertiesDefaults.h b/libraries/entities/src/EntityItemPropertiesDefaults.h index f4e8a18012..49bce37fbd 100644 --- a/libraries/entities/src/EntityItemPropertiesDefaults.h +++ b/libraries/entities/src/EntityItemPropertiesDefaults.h @@ -41,6 +41,7 @@ const QString ENTITY_ITEM_DEFAULT_MARKETPLACE_ID = QString(""); const quint32 ENTITY_ITEM_DEFAULT_EDITION_NUMBER = 0; const quint32 ENTITY_ITEM_DEFAULT_ENTITY_INSTANCE_NUMBER = 0; const QString ENTITY_ITEM_DEFAULT_CERTIFICATE_ID = QString(""); +const quint32 ENTITY_ITEM_DEFAULT_STATIC_CERTIFICATE_VERSION = 0; const float ENTITY_ITEM_DEFAULT_ALPHA = 1.0f; const float ENTITY_ITEM_DEFAULT_LOCAL_RENDER_ALPHA = 1.0f; diff --git a/libraries/entities/src/EntityPropertyFlags.h b/libraries/entities/src/EntityPropertyFlags.h index 35d40b669a..41c1e77bb8 100644 --- a/libraries/entities/src/EntityPropertyFlags.h +++ b/libraries/entities/src/EntityPropertyFlags.h @@ -200,6 +200,7 @@ enum EntityPropertyList { PROP_EDITION_NUMBER, PROP_ENTITY_INSTANCE_NUMBER, PROP_CERTIFICATE_ID, + PROP_STATIC_CERTIFICATE_VERSION, PROP_HAZE_MODE, From 87fa919ac8d2c38198c515df3e9dcdb49c32bc23 Mon Sep 17 00:00:00 2001 From: Andrew Meadows Date: Tue, 12 Dec 2017 14:11:25 -0800 Subject: [PATCH 063/148] save files to Documents by default --- .../src/scripting/TestScriptingInterface.cpp | 14 ++++-- libraries/shared/src/Trace.cpp | 45 +++++-------------- libraries/shared/src/shared/FileUtils.cpp | 45 +++++++++++++++++-- libraries/shared/src/shared/FileUtils.h | 3 ++ 4 files changed, 66 insertions(+), 41 deletions(-) diff --git a/interface/src/scripting/TestScriptingInterface.cpp b/interface/src/scripting/TestScriptingInterface.cpp index b53b9d5d5f..74a15db0ce 100644 --- a/interface/src/scripting/TestScriptingInterface.cpp +++ b/interface/src/scripting/TestScriptingInterface.cpp @@ -11,11 +11,12 @@ #include #include +#include #include #include -#include -#include #include +#include +#include #include "Application.h" @@ -141,8 +142,13 @@ void TestScriptingInterface::endTraceEvent(QString name) { tracing::traceEvent(trace_test(), name, tracing::DurationEnd); } -void TestScriptingInterface::savePhysicsSimulationStats(QString filename) { - qApp->saveNextPhysicsStats(filename); +void TestScriptingInterface::savePhysicsSimulationStats(QString originalPath) { + QString path = FileUtils::replaceDateTimeTokens(originalPath); + path = FileUtils::computeDocumentPath(path); + if (!FileUtils::canCreateFile(path)) { + return; + } + qApp->saveNextPhysicsStats(path); } void TestScriptingInterface::profileRange(const QString& name, QScriptValue fn) { diff --git a/libraries/shared/src/Trace.cpp b/libraries/shared/src/Trace.cpp index d7feb65ff3..3f6a2dd643 100644 --- a/libraries/shared/src/Trace.cpp +++ b/libraries/shared/src/Trace.cpp @@ -16,7 +16,6 @@ #include #include #include -#include #include #include @@ -31,6 +30,8 @@ #include "Gzip.h" #include "PortableHighResolutionClock.h" +#include "SharedLogging.h" +#include "shared/FileUtils.h" #include "shared/GlobalAppProperties.h" using namespace tracing; @@ -104,30 +105,13 @@ void TraceEvent::writeJson(QTextStream& out) const { #endif } -void Tracer::serialize(const QString& originalPath) { - - QString path = originalPath; - - // Filter for specific tokens potentially present in the path: - auto now = QDateTime::currentDateTime(); - - path = path.replace("{DATE}", now.date().toString("yyyyMMdd")); - path = path.replace("{TIME}", now.time().toString("HHmm")); - - // If the filename is relative, turn it into an absolute path relative to the document directory. - QFileInfo originalFileInfo(path); - if (originalFileInfo.isRelative()) { - QString docsLocation = QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation); - path = docsLocation + "/" + path; - QFileInfo info(path); - if (!info.absoluteDir().exists()) { - QString originalRelativePath = originalFileInfo.path(); - QDir(docsLocation).mkpath(originalRelativePath); - } +void Tracer::serialize(const QString& filename) { + QString fullPath = FileUtils::replaceDateTimeTokens(filename); + fullPath = FileUtils::computeDocumentPath(fullPath); + if (!FileUtils::canCreateFile(fullPath)) { + return; } - - std::list currentEvents; { std::lock_guard guard(_eventsMutex); @@ -137,11 +121,6 @@ void Tracer::serialize(const QString& originalPath) { } } - // If the file exists and we can't remove it, fail early - if (QFileInfo(path).exists() && !QFile::remove(path)) { - return; - } - // If we can't open a temp file for writing, fail early QByteArray data; { @@ -159,15 +138,16 @@ void Tracer::serialize(const QString& originalPath) { out << "\n]"; } - if (path.endsWith(".gz")) { + if (fullPath.endsWith(".gz")) { QByteArray compressed; gzip(data, compressed); data = compressed; - } - + } + { - QFile file(path); + QFile file(fullPath); if (!file.open(QIODevice::WriteOnly)) { + qDebug(shared) << "failed to open file '" << fullPath << "'"; return; } file.write(data); @@ -191,7 +171,6 @@ void Tracer::serialize(const QString& originalPath) { } } } }; - data = document.toJson(QJsonDocument::Compact); } #endif diff --git a/libraries/shared/src/shared/FileUtils.cpp b/libraries/shared/src/shared/FileUtils.cpp index 8c962dfd6d..dba0af7b16 100644 --- a/libraries/shared/src/shared/FileUtils.cpp +++ b/libraries/shared/src/shared/FileUtils.cpp @@ -12,6 +12,7 @@ #include "FileUtils.h" +#include #include #include #include @@ -20,6 +21,8 @@ #include #include +#include "../SharedLogging.h" + QString FileUtils::readFile(const QString& filename) { QFile file(filename); @@ -82,20 +85,54 @@ QString FileUtils::standardPath(QString subfolder) { // standard path // Mac: ~/Library/Application Support/Interface QString path = QStandardPaths::writableLocation(QStandardPaths::DataLocation); - if (!subfolder.startsWith("/")) { subfolder.prepend("/"); } - if (!subfolder.endsWith("/")) { subfolder.append("/"); } - path.append(subfolder); QDir logDir(path); if (!logDir.exists(path)) { logDir.mkpath(path); } - return path; } + +QString FileUtils::replaceDateTimeTokens(const QString& originalPath) { + // Filter for specific tokens potentially present in the path: + auto now = QDateTime::currentDateTime(); + QString path = originalPath; + path.replace("{DATE}", now.date().toString("yyyyMMdd")); + path.replace("{TIME}", now.time().toString("HHmm")); + return path; +} + + +QString FileUtils::computeDocumentPath(const QString& originalPath) { + // If the filename is relative, turn it into an absolute path relative to the document directory. + QString path = originalPath; + QFileInfo originalFileInfo(originalPath); + if (originalFileInfo.isRelative()) { + QString docsLocation = QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation); + path = docsLocation + "/" + originalPath; + } + return path; +} + +bool FileUtils::canCreateFile(const QString& fullPath) { + // If the file exists and we can't remove it, fail early + QFileInfo fileInfo(fullPath); + if (fileInfo.exists() && !QFile::remove(fullPath)) { + qDebug(shared) << "unable to overwrite file '" << fullPath << "'"; + return false; + } + QDir dir(fileInfo.absolutePath()); + if (!dir.exists()) { + if (!dir.mkpath(fullPath)) { + qDebug(shared) << "unable to create dir '" << dir.absolutePath() << "'"; + return false; + } + } + return true; +} diff --git a/libraries/shared/src/shared/FileUtils.h b/libraries/shared/src/shared/FileUtils.h index 4f2c1b7af5..d68fcd8a44 100644 --- a/libraries/shared/src/shared/FileUtils.h +++ b/libraries/shared/src/shared/FileUtils.h @@ -21,6 +21,9 @@ public: static QString standardPath(QString subfolder); static QString readFile(const QString& filename); static QStringList readLines(const QString& filename, QString::SplitBehavior splitBehavior = QString::KeepEmptyParts); + static QString replaceDateTimeTokens(const QString& path); + static QString computeDocumentPath(const QString& path); + static bool canCreateFile(const QString& fullPath); }; #endif // hifi_FileUtils_h From f5df83667fc80f81e6ab3b4158012f5215afab79 Mon Sep 17 00:00:00 2001 From: Zach Fox Date: Tue, 12 Dec 2017 15:50:04 -0800 Subject: [PATCH 064/148] Add getStaticCertificateJSON() to Entity Scripting Interface --- libraries/entities/src/EntityScriptingInterface.cpp | 13 +++++++++++++ libraries/entities/src/EntityScriptingInterface.h | 6 ++++++ 2 files changed, 19 insertions(+) diff --git a/libraries/entities/src/EntityScriptingInterface.cpp b/libraries/entities/src/EntityScriptingInterface.cpp index 35941c09d3..421cd65ead 100644 --- a/libraries/entities/src/EntityScriptingInterface.cpp +++ b/libraries/entities/src/EntityScriptingInterface.cpp @@ -1821,6 +1821,19 @@ glm::mat4 EntityScriptingInterface::getEntityLocalTransform(const QUuid& entityI return result; } +QByteArray EntityScriptingInterface::getStaticCertificateJSON(QUuid entityID) { + QByteArray result; + if (_entityTree) { + _entityTree->withReadLock([&] { + EntityItemPointer entity = _entityTree->findEntityByEntityItemID(EntityItemID(entityID)); + if (entity) { + result = entity->getProperties().getStaticCertificateJSON(); + } + }); + } + return result; +} + bool EntityScriptingInterface::verifyStaticCertificateProperties(const QUuid& entityID) { bool result = false; if (_entityTree) { diff --git a/libraries/entities/src/EntityScriptingInterface.h b/libraries/entities/src/EntityScriptingInterface.h index cc5d8ff16f..2feb604fbb 100644 --- a/libraries/entities/src/EntityScriptingInterface.h +++ b/libraries/entities/src/EntityScriptingInterface.h @@ -423,6 +423,12 @@ public slots: */ Q_INVOKABLE glm::mat4 getEntityLocalTransform(const QUuid& entityID); + + /**jsdoc + * Return the Static Certificate JSON for the specified {EntityID}. + * @return {QByteArray} The Static Certificate JSON for the specified entity. + */ + Q_INVOKABLE QByteArray getStaticCertificateJSON(QUuid entityID); Q_INVOKABLE bool verifyStaticCertificateProperties(const QUuid& entityID); signals: From bced55801d0b105a01d56a061b70aa1d7d98360e Mon Sep 17 00:00:00 2001 From: Zach Fox Date: Tue, 12 Dec 2017 15:52:21 -0800 Subject: [PATCH 065/148] ABC ORDER! --- .../entities/src/EntityItemProperties.cpp | 21 +++++++++---------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/libraries/entities/src/EntityItemProperties.cpp b/libraries/entities/src/EntityItemProperties.cpp index e9613c7120..8e0fd6a24f 100644 --- a/libraries/entities/src/EntityItemProperties.cpp +++ b/libraries/entities/src/EntityItemProperties.cpp @@ -2488,6 +2488,9 @@ QByteArray EntityItemProperties::getStaticCertificateJSON() const { // of the entity as reviewed during the certification submission. QJsonObject json; + + quint32 staticCertificateVersion = getStaticCertificateVersion(); + if (!getAnimation().getURL().isEmpty()) { json["animationURL"] = getAnimation().getURL(); } @@ -2504,18 +2507,14 @@ QByteArray EntityItemProperties::getStaticCertificateJSON() const { ADD_STRING_PROPERTY(marketplaceID, MarketplaceID); ADD_STRING_PROPERTY(modelURL, ModelURL); ADD_STRING_PROPERTY(script, Script); - ADD_ENUM_PROPERTY(shapeType, ShapeType); - json["type"] = EntityTypes::getEntityTypeName(getType()); - - quint32 staticCertificateVersion = getStaticCertificateVersion(); - - if (staticCertificateVersion != 0) { - json["staticCertificateVersion"] = (double)staticCertificateVersion; - - if (staticCertificateVersion == 1) { - ADD_STRING_PROPERTY(serverScripts, ServerScripts); - } + if (staticCertificateVersion > 1) { + ADD_STRING_PROPERTY(serverScripts, ServerScripts); } + ADD_ENUM_PROPERTY(shapeType, ShapeType); + if (staticCertificateVersion > 0) { + json["staticCertificateVersion"] = (double)staticCertificateVersion; + } + json["type"] = EntityTypes::getEntityTypeName(getType()); return QJsonDocument(json).toJson(QJsonDocument::Compact); } From a1f1e7b587959b541cd17c1b5ead0474a20960ac Mon Sep 17 00:00:00 2001 From: luiscuenca Date: Tue, 12 Dec 2017 18:20:29 -0700 Subject: [PATCH 066/148] Fix web entities accessing the webcam RC61 --- interface/resources/html/createGlobalEventBridge.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/resources/html/createGlobalEventBridge.js b/interface/resources/html/createGlobalEventBridge.js index b85aa33e33..a180fbc6cc 100644 --- a/interface/resources/html/createGlobalEventBridge.js +++ b/interface/resources/html/createGlobalEventBridge.js @@ -34,7 +34,7 @@ var EventBridge; var tempEventBridge = EventBridge; EventBridge = channel.objects.eventBridge; EventBridge.audioOutputDeviceChanged.connect(function(deviceName) { - navigator.mediaDevices.getUserMedia({ audio: true, video: true }).then(function(mediaStream) { + navigator.mediaDevices.getUserMedia({ audio: true, video: false }).then(function(mediaStream) { navigator.mediaDevices.enumerateDevices().then(function(devices) { devices.forEach(function(device) { if (device.kind == "audiooutput") { From 7113a72f2e50e0b9a457eeb047f7d1e8446f31df Mon Sep 17 00:00:00 2001 From: Zach Fox Date: Tue, 12 Dec 2017 17:57:23 -0800 Subject: [PATCH 067/148] Bugfixes --- libraries/entities/src/EntityItem.cpp | 2 ++ libraries/entities/src/EntityItemProperties.cpp | 9 +++++---- libraries/entities/src/EntityScriptingInterface.cpp | 2 +- libraries/entities/src/EntityScriptingInterface.h | 2 +- 4 files changed, 9 insertions(+), 6 deletions(-) diff --git a/libraries/entities/src/EntityItem.cpp b/libraries/entities/src/EntityItem.cpp index 21e967401f..fb14ab0b5f 100644 --- a/libraries/entities/src/EntityItem.cpp +++ b/libraries/entities/src/EntityItem.cpp @@ -271,6 +271,7 @@ OctreeElement::AppendState EntityItem::appendEntityData(OctreePacketData* packet APPEND_ENTITY_PROPERTY(PROP_EDITION_NUMBER, getEditionNumber()); APPEND_ENTITY_PROPERTY(PROP_ENTITY_INSTANCE_NUMBER, getEntityInstanceNumber()); APPEND_ENTITY_PROPERTY(PROP_CERTIFICATE_ID, getCertificateID()); + APPEND_ENTITY_PROPERTY(PROP_STATIC_CERTIFICATE_VERSION, getStaticCertificateVersion()); APPEND_ENTITY_PROPERTY(PROP_NAME, getName()); APPEND_ENTITY_PROPERTY(PROP_COLLISION_SOUND_URL, getCollisionSoundURL()); @@ -819,6 +820,7 @@ int EntityItem::readEntityDataFromBuffer(const unsigned char* data, int bytesLef READ_ENTITY_PROPERTY(PROP_EDITION_NUMBER, quint32, setEditionNumber); READ_ENTITY_PROPERTY(PROP_ENTITY_INSTANCE_NUMBER, quint32, setEntityInstanceNumber); READ_ENTITY_PROPERTY(PROP_CERTIFICATE_ID, QString, setCertificateID); + READ_ENTITY_PROPERTY(PROP_STATIC_CERTIFICATE_VERSION, quint32, setStaticCertificateVersion); READ_ENTITY_PROPERTY(PROP_NAME, QString, setName); READ_ENTITY_PROPERTY(PROP_COLLISION_SOUND_URL, QString, setCollisionSoundURL); diff --git a/libraries/entities/src/EntityItemProperties.cpp b/libraries/entities/src/EntityItemProperties.cpp index 8e0fd6a24f..88bc3b6c12 100644 --- a/libraries/entities/src/EntityItemProperties.cpp +++ b/libraries/entities/src/EntityItemProperties.cpp @@ -1483,6 +1483,7 @@ OctreeElement::AppendState EntityItemProperties::encodeEntityEditPacket(PacketTy APPEND_ENTITY_PROPERTY(PROP_EDITION_NUMBER, properties.getEditionNumber()); APPEND_ENTITY_PROPERTY(PROP_ENTITY_INSTANCE_NUMBER, properties.getEntityInstanceNumber()); APPEND_ENTITY_PROPERTY(PROP_CERTIFICATE_ID, properties.getCertificateID()); + APPEND_ENTITY_PROPERTY(PROP_STATIC_CERTIFICATE_VERSION, properties.getStaticCertificateVersion()); } if (propertyCount > 0) { @@ -1834,6 +1835,7 @@ bool EntityItemProperties::decodeEntityEditPacket(const unsigned char* data, int READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_EDITION_NUMBER, quint32, setEditionNumber); READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_ENTITY_INSTANCE_NUMBER, quint32, setEntityInstanceNumber); READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_CERTIFICATE_ID, QString, setCertificateID); + READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_STATIC_CERTIFICATE_VERSION, quint32, setStaticCertificateVersion); return valid; } @@ -2001,6 +2003,7 @@ void EntityItemProperties::markAllChanged() { _editionNumberChanged = true; _entityInstanceNumberChanged = true; _certificateIDChanged = true; + _staticCertificateVersionChanged = true; _keyLight.markAllChanged(); @@ -2507,13 +2510,11 @@ QByteArray EntityItemProperties::getStaticCertificateJSON() const { ADD_STRING_PROPERTY(marketplaceID, MarketplaceID); ADD_STRING_PROPERTY(modelURL, ModelURL); ADD_STRING_PROPERTY(script, Script); - if (staticCertificateVersion > 1) { + if (staticCertificateVersion >= 1) { ADD_STRING_PROPERTY(serverScripts, ServerScripts); } ADD_ENUM_PROPERTY(shapeType, ShapeType); - if (staticCertificateVersion > 0) { - json["staticCertificateVersion"] = (double)staticCertificateVersion; - } + ADD_INT_PROPERTY(staticCertificateVersion, StaticCertificateVersion); json["type"] = EntityTypes::getEntityTypeName(getType()); return QJsonDocument(json).toJson(QJsonDocument::Compact); diff --git a/libraries/entities/src/EntityScriptingInterface.cpp b/libraries/entities/src/EntityScriptingInterface.cpp index 421cd65ead..d278283ffa 100644 --- a/libraries/entities/src/EntityScriptingInterface.cpp +++ b/libraries/entities/src/EntityScriptingInterface.cpp @@ -1821,7 +1821,7 @@ glm::mat4 EntityScriptingInterface::getEntityLocalTransform(const QUuid& entityI return result; } -QByteArray EntityScriptingInterface::getStaticCertificateJSON(QUuid entityID) { +QString EntityScriptingInterface::getStaticCertificateJSON(const QUuid& entityID) { QByteArray result; if (_entityTree) { _entityTree->withReadLock([&] { diff --git a/libraries/entities/src/EntityScriptingInterface.h b/libraries/entities/src/EntityScriptingInterface.h index 2feb604fbb..095a821482 100644 --- a/libraries/entities/src/EntityScriptingInterface.h +++ b/libraries/entities/src/EntityScriptingInterface.h @@ -428,7 +428,7 @@ public slots: * Return the Static Certificate JSON for the specified {EntityID}. * @return {QByteArray} The Static Certificate JSON for the specified entity. */ - Q_INVOKABLE QByteArray getStaticCertificateJSON(QUuid entityID); + Q_INVOKABLE QString getStaticCertificateJSON(const QUuid& entityID); Q_INVOKABLE bool verifyStaticCertificateProperties(const QUuid& entityID); signals: From c4a7f4843a03d0ac65d9321879c5afe35d56c3dd Mon Sep 17 00:00:00 2001 From: "Anthony J. Thibault" Date: Tue, 12 Dec 2017 17:02:07 -0800 Subject: [PATCH 068/148] Much more stable hips IK target. Target is now estimated in sensor space from the head, which is very deterministic and not prone to feedback from the IK system. Previous the hip was estimated from accumulated IK error deltas, which was not stable, as the error would tend to accumulate if the IK targets could not be reached. --- interface/src/avatar/MySkeletonModel.cpp | 69 ++++++++++++++++++++++++ interface/src/avatar/MySkeletonModel.h | 3 ++ 2 files changed, 72 insertions(+) diff --git a/interface/src/avatar/MySkeletonModel.cpp b/interface/src/avatar/MySkeletonModel.cpp index a707031167..f249be33ea 100644 --- a/interface/src/avatar/MySkeletonModel.cpp +++ b/interface/src/avatar/MySkeletonModel.cpp @@ -9,9 +9,12 @@ #include "MySkeletonModel.h" #include +#include #include "Application.h" #include "InterfaceLogging.h" +#include "AnimUtil.h" + MySkeletonModel::MySkeletonModel(Avatar* owningAvatar, QObject* parent) : SkeletonModel(owningAvatar, parent) { } @@ -30,6 +33,39 @@ Rig::CharacterControllerState convertCharacterControllerState(CharacterControlle }; } +static AnimPose computeHipsInSensorFrame(MyAvatar* myAvatar, bool isFlying) { + glm::mat4 hipsMat = myAvatar->deriveBodyFromHMDSensor(); + glm::vec3 hipsPos = extractTranslation(hipsMat); + glm::quat hipsRot = glmExtractRotation(hipsMat); + + glm::mat4 avatarToWorldMat = myAvatar->getTransform().getMatrix(); + glm::mat4 worldToSensorMat = glm::inverse(myAvatar->getSensorToWorldMatrix()); + glm::mat4 avatarToSensorMat = worldToSensorMat * avatarToWorldMat; + + // dampen hips rotation, by mixing it with the avatar orientation in sensor space + const float MIX_RATIO = 0.5f; + hipsRot = safeLerp(glmExtractRotation(avatarToSensorMat), hipsRot, MIX_RATIO); + + if (isFlying) { + // rotate the hips back to match the flying animation. + + const float TILT_ANGLE = 0.523f; + const glm::quat tiltRot = glm::angleAxis(TILT_ANGLE, transformVectorFast(avatarToSensorMat, -Vectors::UNIT_X)); + + glm::vec3 headPos; + int headIndex = myAvatar->getJointIndex("Head"); + if (headIndex != -1) { + headPos = transformPoint(avatarToSensorMat, myAvatar->getAbsoluteJointTranslationInObjectFrame(headIndex)); + } else { + headPos = transformPoint(myAvatar->getSensorToWorldMatrix(), myAvatar->getHMDSensorPosition()); + } + hipsRot = tiltRot * hipsRot; + hipsPos = headPos + tiltRot * (hipsPos - headPos); + } + + return AnimPose(hipsRot * Quaternions::Y_180, hipsPos); +} + // Called within Model::simulate call, below. void MySkeletonModel::updateRig(float deltaTime, glm::mat4 parentTransform) { const FBXGeometry& geometry = getFBXGeometry(); @@ -124,6 +160,39 @@ void MySkeletonModel::updateRig(float deltaTime, glm::mat4 parentTransform) { } } + // if hips are not under direct control, estimate the hips position. + if (avatarHeadPose.isValid() && !params.primaryControllerActiveFlags[Rig::PrimaryControllerType_Hips]) { + bool isFlying = (myAvatar->getCharacterController()->getState() == CharacterController::State::Hover || myAvatar->getCharacterController()->computeCollisionGroup() == BULLET_COLLISION_GROUP_COLLISIONLESS); + + if (!_prevHipsValid) { + AnimPose hips = computeHipsInSensorFrame(myAvatar, isFlying); + _prevHips = hips; + } + + AnimPose hips = computeHipsInSensorFrame(myAvatar, isFlying); + + // smootly lerp hips, in sensorframe, with different coeff for horiz and vertical translation. + const float ROT_ALPHA = 0.9f; + const float TRANS_HORIZ_ALPHA = 0.9f; + const float TRANS_VERT_ALPHA = 0.1f; + float hipsY = hips.trans().y; + hips.trans() = lerp(hips.trans(), _prevHips.trans(), TRANS_HORIZ_ALPHA); + hips.trans().y = lerp(hipsY, _prevHips.trans().y, TRANS_VERT_ALPHA); + hips.rot() = safeLerp(hips.rot(), _prevHips.rot(), ROT_ALPHA); + + _prevHips = hips; + _prevHipsValid = true; + + glm::mat4 invRigMat = glm::inverse(myAvatar->getTransform().getMatrix() * Matrices::Y_180); + AnimPose sensorToRigPose(invRigMat * myAvatar->getSensorToWorldMatrix()); + + params.primaryControllerPoses[Rig::PrimaryControllerType_Hips] = sensorToRigPose * hips; + params.primaryControllerActiveFlags[Rig::PrimaryControllerType_Hips] = true; + + } else { + _prevHipsValid = false; + } + params.isTalking = head->getTimeWithoutTalking() <= 1.5f; // pass detailed torso k-dops to rig. diff --git a/interface/src/avatar/MySkeletonModel.h b/interface/src/avatar/MySkeletonModel.h index ad0ae1b8e9..d9f57a439a 100644 --- a/interface/src/avatar/MySkeletonModel.h +++ b/interface/src/avatar/MySkeletonModel.h @@ -25,6 +25,9 @@ public: private: void updateFingers(); + + AnimPose _prevHips; // sensor frame + bool _prevHipsValid { false }; }; #endif // hifi_MySkeletonModel_h From e709561a62bdc752025ff23b7cd15e2832b2bcdc Mon Sep 17 00:00:00 2001 From: luiscuenca Date: Wed, 13 Dec 2017 12:14:49 -0700 Subject: [PATCH 069/148] Fix getActiveDevice deadlocks on Linux --- libraries/ui/src/ui/OffscreenQmlSurface.cpp | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/libraries/ui/src/ui/OffscreenQmlSurface.cpp b/libraries/ui/src/ui/OffscreenQmlSurface.cpp index 942c9f71a5..12220a8079 100644 --- a/libraries/ui/src/ui/OffscreenQmlSurface.cpp +++ b/libraries/ui/src/ui/OffscreenQmlSurface.cpp @@ -679,7 +679,9 @@ void OffscreenQmlSurface::create() { // Setup the update of the QML media components with the current audio output device QObject::connect(&_audioOutputUpdateTimer, &QTimer::timeout, this, [this]() { - new AudioHandler(sharedFromThis(), _currentAudioOutputDevice); + if (_currentAudioOutputDevice.size() > 0) { + new AudioHandler(sharedFromThis(), _currentAudioOutputDevice); + } }); int waitForAudioQmlMs = 200; _audioOutputUpdateTimer.setInterval(waitForAudioQmlMs); @@ -695,6 +697,7 @@ void OffscreenQmlSurface::create() { } void OffscreenQmlSurface::changeAudioOutputDevice(const QString& deviceName, bool isHtmlUpdate) { + _currentAudioOutputDevice = deviceName; if (_rootItem != nullptr && !isHtmlUpdate) { QMetaObject::invokeMethod(this, "forceQmlAudioOutputDeviceUpdate", Qt::QueuedConnection); } @@ -702,18 +705,16 @@ void OffscreenQmlSurface::changeAudioOutputDevice(const QString& deviceName, boo } void OffscreenQmlSurface::forceHtmlAudioOutputDeviceUpdate() { - auto audioIO = DependencyManager::get(); - QString deviceName = audioIO->getActiveAudioDevice(QAudio::AudioOutput).deviceName(); - QMetaObject::invokeMethod(this, "changeAudioOutputDevice", Qt::QueuedConnection, - Q_ARG(QString, deviceName), Q_ARG(bool, true)); + if (_currentAudioOutputDevice.size() > 0) { + QMetaObject::invokeMethod(this, "changeAudioOutputDevice", Qt::QueuedConnection, + Q_ARG(QString, _currentAudioOutputDevice), Q_ARG(bool, true)); + } } void OffscreenQmlSurface::forceQmlAudioOutputDeviceUpdate() { if (QThread::currentThread() != qApp->thread()) { QMetaObject::invokeMethod(this, "forceQmlAudioOutputDeviceUpdate", Qt::QueuedConnection); } else { - auto audioIO = DependencyManager::get(); - _currentAudioOutputDevice = audioIO->getActiveAudioDevice(QAudio::AudioOutput).deviceName(); if (_audioOutputUpdateTimer.isActive()) { _audioOutputUpdateTimer.stop(); } From d388ca5ac9e68cbd0edbe0df102a57b687124239 Mon Sep 17 00:00:00 2001 From: Zach Fox Date: Wed, 13 Dec 2017 11:22:31 -0800 Subject: [PATCH 070/148] Missed a spot. That was the problem the whole time. --- libraries/entities/src/EntityItem.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/libraries/entities/src/EntityItem.cpp b/libraries/entities/src/EntityItem.cpp index fb14ab0b5f..2a49c26e97 100644 --- a/libraries/entities/src/EntityItem.cpp +++ b/libraries/entities/src/EntityItem.cpp @@ -114,6 +114,7 @@ EntityPropertyFlags EntityItem::getEntityProperties(EncodeBitstreamParams& param requestedProperties += PROP_EDITION_NUMBER; requestedProperties += PROP_ENTITY_INSTANCE_NUMBER; requestedProperties += PROP_CERTIFICATE_ID; + requestedProperties += PROP_STATIC_CERTIFICATE_VERSION; requestedProperties += PROP_NAME; requestedProperties += PROP_HREF; From 627ce8ab87ffa252be83fca5f4851d0d0ecd550f Mon Sep 17 00:00:00 2001 From: David Rowe Date: Thu, 14 Dec 2017 08:52:21 +1300 Subject: [PATCH 071/148] Enable user connection with "x" key when capslock is on --- scripts/system/makeUserConnection.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/scripts/system/makeUserConnection.js b/scripts/system/makeUserConnection.js index 392ff3c0b5..fedadbb2b4 100644 --- a/scripts/system/makeUserConnection.js +++ b/scripts/system/makeUserConnection.js @@ -892,12 +892,14 @@ } function keyPressEvent(event) { - if ((event.text === "x") && !event.isAutoRepeat && !event.isShifted && !event.isMeta && !event.isControl && !event.isAlt) { + if ((event.text.toUpperCase() === "X") && !event.isAutoRepeat && !event.isShifted && !event.isMeta && !event.isControl + && !event.isAlt) { updateTriggers(1.0, true, Controller.Standard.RightHand); } } function keyReleaseEvent(event) { - if ((event.text === "x") && !event.isAutoRepeat && !event.isShifted && !event.isMeta && !event.isControl && !event.isAlt) { + if ((event.text.toUpperCase() === "X") && !event.isAutoRepeat && !event.isShifted && !event.isMeta && !event.isControl + && !event.isAlt) { updateTriggers(0.0, true, Controller.Standard.RightHand); } } From b4df1155076b67e7e3895d9056694ef539074833 Mon Sep 17 00:00:00 2001 From: Nissim Hadar Date: Wed, 13 Dec 2017 12:53:01 -0800 Subject: [PATCH 072/148] Protect against use of null HazePointer. --- libraries/render-utils/src/DrawHaze.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/libraries/render-utils/src/DrawHaze.cpp b/libraries/render-utils/src/DrawHaze.cpp index 4431c1bbc3..c92703fe87 100644 --- a/libraries/render-utils/src/DrawHaze.cpp +++ b/libraries/render-utils/src/DrawHaze.cpp @@ -169,7 +169,9 @@ void DrawHaze::run(const render::RenderContextPointer& renderContext, const Inpu auto hazeStage = args->_scene->getStage(); if (hazeStage && hazeStage->_currentFrame._hazes.size() > 0) { model::HazePointer hazePointer = hazeStage->getHaze(hazeStage->_currentFrame._hazes.front()); - batch.setUniformBuffer(HazeEffect_ParamsSlot, hazePointer->getHazeParametersBuffer()); + if (hazePointer) { + batch.setUniformBuffer(HazeEffect_ParamsSlot, hazePointer->getHazeParametersBuffer()); + } } batch.setUniformBuffer(HazeEffect_TransformBufferSlot, transformBuffer->getFrameTransformBuffer()); @@ -178,7 +180,7 @@ void DrawHaze::run(const render::RenderContextPointer& renderContext, const Inpu if (lightStage) { model::LightPointer keyLight; keyLight = lightStage->getCurrentKeyLight(); - if (keyLight != nullptr) { + if (keyLight) { batch.setUniformBuffer(HazeEffect_LightingMapSlot, keyLight->getLightSchemaBuffer()); } } From 3a45907df078bdc20bc915ac7103e810fbf28d5c Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Tue, 12 Dec 2017 17:16:07 -0800 Subject: [PATCH 073/148] Keep connection alive as long as the node is connected --- libraries/networking/src/udt/Connection.cpp | 82 ++++++++------------- libraries/networking/src/udt/Connection.h | 9 +-- libraries/networking/src/udt/SendQueue.cpp | 52 ++++++------- libraries/networking/src/udt/SendQueue.h | 8 +- libraries/networking/src/udt/Socket.cpp | 3 - 5 files changed, 57 insertions(+), 97 deletions(-) diff --git a/libraries/networking/src/udt/Connection.cpp b/libraries/networking/src/udt/Connection.cpp index f42049f107..7a31bbeedc 100644 --- a/libraries/networking/src/udt/Connection.cpp +++ b/libraries/networking/src/udt/Connection.cpp @@ -11,6 +11,8 @@ #include "Connection.h" +#include + #include #include @@ -60,6 +62,15 @@ Connection::Connection(Socket* parentSocket, HifiSockAddr destination, std::uniq _ack2Packet = ControlPacket::create(ControlPacket::ACK2, ACK2_PAYLOAD_BYTES); _lossReport = ControlPacket::create(ControlPacket::NAK, NAK_PACKET_PAYLOAD_BYTES); _handshakeACK = ControlPacket::create(ControlPacket::HandshakeACK, HANDSHAKE_ACK_PAYLOAD_BYTES); + + + // setup psuedo-random number generation shared by all connections + static std::random_device rd; + static std::mt19937 generator(rd()); + static std::uniform_int_distribution<> distribution(0, SequenceNumber::MAX); + + // randomize the intial sequence number + _initialSequenceNumber = SequenceNumber(distribution(generator)); } Connection::~Connection() { @@ -81,9 +92,6 @@ void Connection::stopSendQueue() { sendQueue->stop(); sendQueue->deleteLater(); - // since we're stopping the send queue we should consider our handshake ACK not receieved - _hasReceivedHandshakeACK = false; - // wait on the send queue thread so we know the send queue is gone sendQueueThread->quit(); sendQueueThread->wait(); @@ -101,13 +109,22 @@ void Connection::setMaxBandwidth(int maxBandwidth) { SendQueue& Connection::getSendQueue() { if (!_sendQueue) { - // we may have a sequence number from the previous inactive queue - re-use that so that the // receiver is getting the sequence numbers it expects (given that the connection must still be active) // Lasily create send queue - _sendQueue = SendQueue::create(_parentSocket, _destination); - _lastReceivedACK = _sendQueue->getCurrentSequenceNumber(); + + if (!_hasReceivedHandshakeACK) { + // First time creating a send queue for this connection + _sendQueue = SendQueue::create(_parentSocket, _destination, _initialSequenceNumber - 1); + _lastReceivedACK = _sendQueue->getCurrentSequenceNumber(); + } else { + // Connection already has a handshake from a previous send queue + _sendQueue = SendQueue::create(_parentSocket, _destination, _lastReceivedACK); + // This connection has already gone through the handshake + // bypass it in the send queue + _sendQueue->handshakeACK(); + } #ifdef UDT_CONNECTION_DEBUG qCDebug(networking) << "Created SendQueue for connection to" << _destination; @@ -142,14 +159,6 @@ void Connection::queueInactive() { #ifdef UDT_CONNECTION_DEBUG qCDebug(networking) << "Connection to" << _destination << "has stopped its SendQueue."; #endif - - if (!_hasReceivedHandshake || !_isReceivingData) { -#ifdef UDT_CONNECTION_DEBUG - qCDebug(networking) << "Connection SendQueue to" << _destination << "stopped and no data is being received - stopping connection."; -#endif - - deactivate(); - } } void Connection::queueTimeout() { @@ -208,19 +217,6 @@ void Connection::sync() { && duration_cast(sincePacketReceive).count() >= MIN_SECONDS_BEFORE_EXPIRY ) { // the receive side of this connection is expired _isReceivingData = false; - - // if we don't have a send queue that means the whole connection has expired and we can emit our signal - // otherwise we'll wait for it to also timeout before cleaning up - if (!_sendQueue) { - -#ifdef UDT_CONNECTION_DEBUG - qCDebug(networking) << "Connection to" << _destination << "no longer receiving any data and there is currently no send queue - stopping connection."; -#endif - - deactivate(); - - return; - } } // reset the number of light ACKs or non SYN ACKs during this sync interval @@ -242,26 +238,6 @@ void Connection::sync() { sendTimeoutNAK(); } } - } else if (!_sendQueue) { - // we haven't received a packet and we're not sending - // this most likely means we were started erroneously - // check the start time for this connection and auto expire it after 5 seconds of not receiving or sending any data - static const int CONNECTION_NOT_USED_EXPIRY_SECONDS = 5; - auto secondsSinceStart = duration_cast(p_high_resolution_clock::now() - _connectionStart).count(); - - if (secondsSinceStart >= CONNECTION_NOT_USED_EXPIRY_SECONDS) { - // it's been CONNECTION_NOT_USED_EXPIRY_SECONDS and nothing has actually happened with this connection - // consider it inactive and emit our inactivity signal - -#ifdef UDT_CONNECTION_DEBUG - qCDebug(networking) << "Connection to" << _destination << "did not receive or send any data in last" - << CONNECTION_NOT_USED_EXPIRY_SECONDS << "seconds - stopping connection."; -#endif - - deactivate(); - - return; - } } } @@ -827,11 +803,13 @@ void Connection::processHandshakeACK(ControlPacketPointer controlPacket) { SequenceNumber initialSequenceNumber; controlPacket->readPrimitive(&initialSequenceNumber); - // hand off this handshake ACK to the send queue so it knows it can start sending - getSendQueue().handshakeACK(initialSequenceNumber); - - // indicate that handshake ACK was received - _hasReceivedHandshakeACK = true; + if (initialSequenceNumber == _initialSequenceNumber) { + // hand off this handshake ACK to the send queue so it knows it can start sending + getSendQueue().handshakeACK(); + + // indicate that handshake ACK was received + _hasReceivedHandshakeACK = true; + } } } diff --git a/libraries/networking/src/udt/Connection.h b/libraries/networking/src/udt/Connection.h index c134081dde..a13c29adc8 100644 --- a/libraries/networking/src/udt/Connection.h +++ b/libraries/networking/src/udt/Connection.h @@ -72,8 +72,6 @@ public: void queueReceivedMessagePacket(std::unique_ptr packet); ConnectionStats::Stats sampleStats() { return _stats.sample(); } - - bool isActive() const { return _isActive; } HifiSockAddr getDestination() const { return _destination; } @@ -83,7 +81,6 @@ public: signals: void packetSent(); - void connectionInactive(const HifiSockAddr& sockAddr); void receiverHandshakeRequestComplete(const HifiSockAddr& sockAddr); private slots: @@ -112,8 +109,6 @@ private: void resetReceiveState(); void resetRTT(); - void deactivate() { _isActive = false; emit connectionInactive(_destination); } - SendQueue& getSendQueue(); SequenceNumber nextACK() const; void updateRTT(int rtt); @@ -138,9 +133,9 @@ private: p_high_resolution_clock::time_point _lastReceiveTime; // holds the last time we received anything from sender bool _isReceivingData { false }; // flag used for expiry of receipt portion of connection - bool _isActive { true }; // flag used for inactivity of connection - SequenceNumber _initialReceiveSequenceNumber; // Randomized by peer SendQueue on creation, identifies connection during re-connect requests + SequenceNumber _initialSequenceNumber; // Randomized on Connection creation, identifies connection during re-connect requests + SequenceNumber _initialReceiveSequenceNumber; // Randomized by peer Connection on creation, identifies connection during re-connect requests LossList _lossList; // List of all missing packets SequenceNumber _lastReceivedSequenceNumber; // The largest sequence number received from the peer diff --git a/libraries/networking/src/udt/SendQueue.cpp b/libraries/networking/src/udt/SendQueue.cpp index 0c029751aa..ef249b8f75 100644 --- a/libraries/networking/src/udt/SendQueue.cpp +++ b/libraries/networking/src/udt/SendQueue.cpp @@ -12,7 +12,6 @@ #include "SendQueue.h" #include -#include #include #include @@ -62,10 +61,10 @@ private: Mutex2& _mutex2; }; -std::unique_ptr SendQueue::create(Socket* socket, HifiSockAddr destination) { +std::unique_ptr SendQueue::create(Socket* socket, HifiSockAddr destination, SequenceNumber currentSequenceNumber) { Q_ASSERT_X(socket, "SendQueue::create", "Must be called with a valid Socket*"); - auto queue = std::unique_ptr(new SendQueue(socket, destination)); + auto queue = std::unique_ptr(new SendQueue(socket, destination, currentSequenceNumber)); // Setup queue private thread QThread* thread = new QThread; @@ -84,20 +83,12 @@ std::unique_ptr SendQueue::create(Socket* socket, HifiSockAddr destin return queue; } -SendQueue::SendQueue(Socket* socket, HifiSockAddr dest) : +SendQueue::SendQueue(Socket* socket, HifiSockAddr dest, SequenceNumber currentSequenceNumber) : _socket(socket), _destination(dest) { - // setup psuedo-random number generation for all instances of SendQueue - static std::random_device rd; - static std::mt19937 generator(rd()); - static std::uniform_int_distribution<> distribution(0, SequenceNumber::MAX); - - // randomize the intial sequence number - _initialSequenceNumber = SequenceNumber(distribution(generator)); - - // set our member variables from randomized initial number - _currentSequenceNumber = _initialSequenceNumber - 1; + // set our member variables from current sequence number + _currentSequenceNumber = currentSequenceNumber; _atomicCurrentSequenceNumber = uint32_t(_currentSequenceNumber); _lastACKSequenceNumber = uint32_t(_currentSequenceNumber) - 1; @@ -114,8 +105,8 @@ void SendQueue::queuePacket(std::unique_ptr packet) { // call notify_one on the condition_variable_any in case the send thread is sleeping waiting for packets _emptyCondition.notify_one(); - if (!this->thread()->isRunning() && _state == State::NotStarted) { - this->thread()->start(); + if (!thread()->isRunning() && _state == State::NotStarted) { + thread()->start(); } } @@ -125,8 +116,8 @@ void SendQueue::queuePacketList(std::unique_ptr packetList) { // call notify_one on the condition_variable_any in case the send thread is sleeping waiting for packets _emptyCondition.notify_one(); - if (!this->thread()->isRunning() && _state == State::NotStarted) { - this->thread()->start(); + if (!thread()->isRunning() && _state == State::NotStarted) { + thread()->start(); } } @@ -225,8 +216,11 @@ void SendQueue::sendHandshake() { std::unique_lock handshakeLock { _handshakeMutex }; if (!_hasReceivedHandshakeACK) { // we haven't received a handshake ACK from the client, send another now + // if the handshake hasn't been completed, then the initial sequence number + // should be the current sequence number + 1 + SequenceNumber initialSequenceNumber = _currentSequenceNumber + 1; auto handshakePacket = ControlPacket::create(ControlPacket::Handshake, sizeof(SequenceNumber)); - handshakePacket->writePrimitive(_initialSequenceNumber); + handshakePacket->writePrimitive(initialSequenceNumber); _socket->writeBasePacket(*handshakePacket, _destination); // we wait for the ACK or the re-send interval to expire @@ -235,18 +229,16 @@ void SendQueue::sendHandshake() { } } -void SendQueue::handshakeACK(SequenceNumber initialSequenceNumber) { - if (initialSequenceNumber == _initialSequenceNumber) { - { - std::lock_guard locker { _handshakeMutex }; - _hasReceivedHandshakeACK = true; - } - - _lastReceiverResponse = QDateTime::currentMSecsSinceEpoch(); - - // Notify on the handshake ACK condition - _handshakeACKCondition.notify_one(); +void SendQueue::handshakeACK() { + { + std::lock_guard locker { _handshakeMutex }; + _hasReceivedHandshakeACK = true; } + + _lastReceiverResponse = QDateTime::currentMSecsSinceEpoch(); + + // Notify on the handshake ACK condition + _handshakeACKCondition.notify_one(); } SequenceNumber SendQueue::getNextSequenceNumber() { diff --git a/libraries/networking/src/udt/SendQueue.h b/libraries/networking/src/udt/SendQueue.h index 484afcb88e..b6cec15ffd 100644 --- a/libraries/networking/src/udt/SendQueue.h +++ b/libraries/networking/src/udt/SendQueue.h @@ -50,7 +50,7 @@ public: Stopped }; - static std::unique_ptr create(Socket* socket, HifiSockAddr destination); + static std::unique_ptr create(Socket* socket, HifiSockAddr destination, SequenceNumber currentSequenceNumber); virtual ~SendQueue(); @@ -76,7 +76,7 @@ public slots: void nak(SequenceNumber start, SequenceNumber end); void fastRetransmit(SequenceNumber ack); void overrideNAKListFromPacket(ControlPacket& packet); - void handshakeACK(SequenceNumber initialSequenceNumber); + void handshakeACK(); signals: void packetSent(int wireSize, int payloadSize, SequenceNumber seqNum, p_high_resolution_clock::time_point timePoint); @@ -91,7 +91,7 @@ private slots: void run(); private: - SendQueue(Socket* socket, HifiSockAddr dest); + SendQueue(Socket* socket, HifiSockAddr dest, SequenceNumber currentSequenceNumber); SendQueue(SendQueue& other) = delete; SendQueue(SendQueue&& other) = delete; @@ -115,8 +115,6 @@ private: Socket* _socket { nullptr }; // Socket to send packet on HifiSockAddr _destination; // Destination addr - - SequenceNumber _initialSequenceNumber; // Randomized on SendQueue creation, identifies connection during re-connect requests std::atomic _lastACKSequenceNumber { 0 }; // Last ACKed sequence number diff --git a/libraries/networking/src/udt/Socket.cpp b/libraries/networking/src/udt/Socket.cpp index a3374a0f47..55643985c8 100644 --- a/libraries/networking/src/udt/Socket.cpp +++ b/libraries/networking/src/udt/Socket.cpp @@ -257,9 +257,6 @@ Connection* Socket::findOrCreateConnection(const HifiSockAddr& sockAddr) { congestionControl->setMaxBandwidth(_maxBandwidth); auto connection = std::unique_ptr(new Connection(this, sockAddr, std::move(congestionControl))); - // we queue the connection to cleanup connection in case it asks for it during its own rate control sync - QObject::connect(connection.get(), &Connection::connectionInactive, this, &Socket::cleanupConnection); - // allow higher-level classes to find out when connections have completed a handshake QObject::connect(connection.get(), &Connection::receiverHandshakeRequestComplete, this, &Socket::clientHandshakeRequestComplete); From 79f012424477365ca9952dd573891e8091acd60c Mon Sep 17 00:00:00 2001 From: Nissim Hadar Date: Wed, 13 Dec 2017 15:02:03 -0800 Subject: [PATCH 074/148] Protect against use of null HazePointer. --- libraries/render-utils/src/DrawHaze.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/libraries/render-utils/src/DrawHaze.cpp b/libraries/render-utils/src/DrawHaze.cpp index c92703fe87..da07f5bd9b 100644 --- a/libraries/render-utils/src/DrawHaze.cpp +++ b/libraries/render-utils/src/DrawHaze.cpp @@ -171,6 +171,9 @@ void DrawHaze::run(const render::RenderContextPointer& renderContext, const Inpu model::HazePointer hazePointer = hazeStage->getHaze(hazeStage->_currentFrame._hazes.front()); if (hazePointer) { batch.setUniformBuffer(HazeEffect_ParamsSlot, hazePointer->getHazeParametersBuffer()); + } else { + // Something is wrong, so just quit Haze + return; } } From e581c66b5696ea27f73cdc5962623ea6542952b9 Mon Sep 17 00:00:00 2001 From: luiscuenca Date: Wed, 13 Dec 2017 16:11:46 -0700 Subject: [PATCH 075/148] added mutex for audio handler --- libraries/ui/src/ui/OffscreenQmlSurface.cpp | 4 +++- libraries/ui/src/ui/OffscreenQmlSurface.h | 1 + 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/libraries/ui/src/ui/OffscreenQmlSurface.cpp b/libraries/ui/src/ui/OffscreenQmlSurface.cpp index 12220a8079..112d70c394 100644 --- a/libraries/ui/src/ui/OffscreenQmlSurface.cpp +++ b/libraries/ui/src/ui/OffscreenQmlSurface.cpp @@ -680,7 +680,9 @@ void OffscreenQmlSurface::create() { // Setup the update of the QML media components with the current audio output device QObject::connect(&_audioOutputUpdateTimer, &QTimer::timeout, this, [this]() { if (_currentAudioOutputDevice.size() > 0) { - new AudioHandler(sharedFromThis(), _currentAudioOutputDevice); + QMutexLocker lock(&_audioHandlerMutex); + QString audioDeviceName = _currentAudioOutputDevice; + new AudioHandler(sharedFromThis(), audioDeviceName); } }); int waitForAudioQmlMs = 200; diff --git a/libraries/ui/src/ui/OffscreenQmlSurface.h b/libraries/ui/src/ui/OffscreenQmlSurface.h index 4c23c62c12..370ddb4f2f 100644 --- a/libraries/ui/src/ui/OffscreenQmlSurface.h +++ b/libraries/ui/src/ui/OffscreenQmlSurface.h @@ -173,6 +173,7 @@ private: uint64_t _lastRenderTime { 0 }; uvec2 _size; + QMutex _audioHandlerMutex; QTimer _audioOutputUpdateTimer; QString _currentAudioOutputDevice; From 483443d2181f74f14b1c8b370afd047e995e6c04 Mon Sep 17 00:00:00 2001 From: luiscuenca Date: Wed, 13 Dec 2017 17:02:36 -0700 Subject: [PATCH 076/148] No mutex --- libraries/ui/src/ui/OffscreenQmlSurface.cpp | 4 +--- libraries/ui/src/ui/OffscreenQmlSurface.h | 1 - 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/libraries/ui/src/ui/OffscreenQmlSurface.cpp b/libraries/ui/src/ui/OffscreenQmlSurface.cpp index 112d70c394..12220a8079 100644 --- a/libraries/ui/src/ui/OffscreenQmlSurface.cpp +++ b/libraries/ui/src/ui/OffscreenQmlSurface.cpp @@ -680,9 +680,7 @@ void OffscreenQmlSurface::create() { // Setup the update of the QML media components with the current audio output device QObject::connect(&_audioOutputUpdateTimer, &QTimer::timeout, this, [this]() { if (_currentAudioOutputDevice.size() > 0) { - QMutexLocker lock(&_audioHandlerMutex); - QString audioDeviceName = _currentAudioOutputDevice; - new AudioHandler(sharedFromThis(), audioDeviceName); + new AudioHandler(sharedFromThis(), _currentAudioOutputDevice); } }); int waitForAudioQmlMs = 200; diff --git a/libraries/ui/src/ui/OffscreenQmlSurface.h b/libraries/ui/src/ui/OffscreenQmlSurface.h index 370ddb4f2f..4c23c62c12 100644 --- a/libraries/ui/src/ui/OffscreenQmlSurface.h +++ b/libraries/ui/src/ui/OffscreenQmlSurface.h @@ -173,7 +173,6 @@ private: uint64_t _lastRenderTime { 0 }; uvec2 _size; - QMutex _audioHandlerMutex; QTimer _audioOutputUpdateTimer; QString _currentAudioOutputDevice; From 44190f16c09fa3aae2330318c426364bbe0e8c47 Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Wed, 13 Dec 2017 16:55:08 -0800 Subject: [PATCH 077/148] Reset ACK in ctor --- libraries/networking/src/udt/Connection.cpp | 7 ++----- libraries/networking/src/udt/SendQueue.cpp | 15 +++++++++++---- libraries/networking/src/udt/SendQueue.h | 4 ++-- 3 files changed, 15 insertions(+), 11 deletions(-) diff --git a/libraries/networking/src/udt/Connection.cpp b/libraries/networking/src/udt/Connection.cpp index 7a31bbeedc..5f632fa25f 100644 --- a/libraries/networking/src/udt/Connection.cpp +++ b/libraries/networking/src/udt/Connection.cpp @@ -116,14 +116,11 @@ SendQueue& Connection::getSendQueue() { if (!_hasReceivedHandshakeACK) { // First time creating a send queue for this connection - _sendQueue = SendQueue::create(_parentSocket, _destination, _initialSequenceNumber - 1); + _sendQueue = SendQueue::create(_parentSocket, _destination, _initialSequenceNumber - 1, _hasReceivedHandshakeACK); _lastReceivedACK = _sendQueue->getCurrentSequenceNumber(); } else { // Connection already has a handshake from a previous send queue - _sendQueue = SendQueue::create(_parentSocket, _destination, _lastReceivedACK); - // This connection has already gone through the handshake - // bypass it in the send queue - _sendQueue->handshakeACK(); + _sendQueue = SendQueue::create(_parentSocket, _destination, _lastReceivedACK, _hasReceivedHandshakeACK); } #ifdef UDT_CONNECTION_DEBUG diff --git a/libraries/networking/src/udt/SendQueue.cpp b/libraries/networking/src/udt/SendQueue.cpp index ef249b8f75..3dbfb35fbe 100644 --- a/libraries/networking/src/udt/SendQueue.cpp +++ b/libraries/networking/src/udt/SendQueue.cpp @@ -61,10 +61,10 @@ private: Mutex2& _mutex2; }; -std::unique_ptr SendQueue::create(Socket* socket, HifiSockAddr destination, SequenceNumber currentSequenceNumber) { +std::unique_ptr SendQueue::create(Socket* socket, HifiSockAddr destination, SequenceNumber currentSequenceNumber, bool hasReceivedHandshakeACK) { Q_ASSERT_X(socket, "SendQueue::create", "Must be called with a valid Socket*"); - auto queue = std::unique_ptr(new SendQueue(socket, destination, currentSequenceNumber)); + auto queue = std::unique_ptr(new SendQueue(socket, destination, currentSequenceNumber, hasReceivedHandshakeACK)); // Setup queue private thread QThread* thread = new QThread; @@ -83,14 +83,21 @@ std::unique_ptr SendQueue::create(Socket* socket, HifiSockAddr destin return queue; } -SendQueue::SendQueue(Socket* socket, HifiSockAddr dest, SequenceNumber currentSequenceNumber) : +SendQueue::SendQueue(Socket* socket, HifiSockAddr dest, SequenceNumber currentSequenceNumber, bool hasReceivedHandshakeACK) : _socket(socket), _destination(dest) { // set our member variables from current sequence number _currentSequenceNumber = currentSequenceNumber; _atomicCurrentSequenceNumber = uint32_t(_currentSequenceNumber); - _lastACKSequenceNumber = uint32_t(_currentSequenceNumber) - 1; + + if (hasReceivedHandshakeACK) { + _lastACKSequenceNumber = uint32_t(_currentSequenceNumber); + } else { + _lastACKSequenceNumber = uint32_t(_currentSequenceNumber - 1); + } + + _hasReceivedHandshakeACK = hasReceivedHandshakeACK; // default the last receiver response to the current time _lastReceiverResponse = QDateTime::currentMSecsSinceEpoch(); diff --git a/libraries/networking/src/udt/SendQueue.h b/libraries/networking/src/udt/SendQueue.h index b6cec15ffd..29fe6b35ff 100644 --- a/libraries/networking/src/udt/SendQueue.h +++ b/libraries/networking/src/udt/SendQueue.h @@ -50,7 +50,7 @@ public: Stopped }; - static std::unique_ptr create(Socket* socket, HifiSockAddr destination, SequenceNumber currentSequenceNumber); + static std::unique_ptr create(Socket* socket, HifiSockAddr destination, SequenceNumber currentSequenceNumber, bool hasReceivedHandshakeACK); virtual ~SendQueue(); @@ -91,7 +91,7 @@ private slots: void run(); private: - SendQueue(Socket* socket, HifiSockAddr dest, SequenceNumber currentSequenceNumber); + SendQueue(Socket* socket, HifiSockAddr dest, SequenceNumber currentSequenceNumber, bool hasReceivedHandshakeACK); SendQueue(SendQueue& other) = delete; SendQueue(SendQueue&& other) = delete; From 553e4e24493080d66b1787bf534595144f97e77c Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Wed, 13 Dec 2017 17:26:23 -0800 Subject: [PATCH 078/148] fix RPATH for oven so it loads things from macdeployqt --- tools/oven/CMakeLists.txt | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/tools/oven/CMakeLists.txt b/tools/oven/CMakeLists.txt index 321f81ba8f..5e30b84803 100644 --- a/tools/oven/CMakeLists.txt +++ b/tools/oven/CMakeLists.txt @@ -8,13 +8,14 @@ setup_memory_debugger() if (WIN32) package_libraries_for_deployment() -endif () - -if (UNIX) +elseif (UNIX) find_package(Threads REQUIRED) if(THREADS_HAVE_PTHREAD_ARG) target_compile_options(PUBLIC oven "-pthread") endif() -endif () +elseif (APPLE) + # Fix up the rpath so macdeployqt works + set_target_properties(${TARGET_NAME} PROPERTIES INSTALL_RPATH "@executable_path/../Frameworks") +endif() install_beside_console() From 1f57ac608124b54e1e69d0dd18a52ebf93f19187 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Wed, 13 Dec 2017 18:08:39 -0800 Subject: [PATCH 079/148] don't trigger unix step on apple for oven --- tools/oven/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/oven/CMakeLists.txt b/tools/oven/CMakeLists.txt index 5e30b84803..00344179bd 100644 --- a/tools/oven/CMakeLists.txt +++ b/tools/oven/CMakeLists.txt @@ -8,7 +8,7 @@ setup_memory_debugger() if (WIN32) package_libraries_for_deployment() -elseif (UNIX) +elseif (UNIX AND NOT APPLE) find_package(Threads REQUIRED) if(THREADS_HAVE_PTHREAD_ARG) target_compile_options(PUBLIC oven "-pthread") From 0b598ea9483e5c79713a92ab43c249b14b797b0a Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Wed, 13 Dec 2017 17:26:23 -0800 Subject: [PATCH 080/148] fix RPATH for oven so it loads things from macdeployqt --- tools/oven/CMakeLists.txt | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/tools/oven/CMakeLists.txt b/tools/oven/CMakeLists.txt index 321f81ba8f..5e30b84803 100644 --- a/tools/oven/CMakeLists.txt +++ b/tools/oven/CMakeLists.txt @@ -8,13 +8,14 @@ setup_memory_debugger() if (WIN32) package_libraries_for_deployment() -endif () - -if (UNIX) +elseif (UNIX) find_package(Threads REQUIRED) if(THREADS_HAVE_PTHREAD_ARG) target_compile_options(PUBLIC oven "-pthread") endif() -endif () +elseif (APPLE) + # Fix up the rpath so macdeployqt works + set_target_properties(${TARGET_NAME} PROPERTIES INSTALL_RPATH "@executable_path/../Frameworks") +endif() install_beside_console() From 88831ff08a4923480cf18656aa7e7307d3fd82f2 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Wed, 13 Dec 2017 18:08:39 -0800 Subject: [PATCH 081/148] don't trigger unix step on apple for oven --- tools/oven/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/oven/CMakeLists.txt b/tools/oven/CMakeLists.txt index 5e30b84803..00344179bd 100644 --- a/tools/oven/CMakeLists.txt +++ b/tools/oven/CMakeLists.txt @@ -8,7 +8,7 @@ setup_memory_debugger() if (WIN32) package_libraries_for_deployment() -elseif (UNIX) +elseif (UNIX AND NOT APPLE) find_package(Threads REQUIRED) if(THREADS_HAVE_PTHREAD_ARG) target_compile_options(PUBLIC oven "-pthread") From 5bc113c81844d9d7753c8214ab67dd6f41f60d7c Mon Sep 17 00:00:00 2001 From: amantley Date: Wed, 13 Dec 2017 19:07:23 -0800 Subject: [PATCH 082/148] deleted some debug print statements in ModelEntityItemcpp and deleted else statement that was superfluous --- libraries/entities/src/ModelEntityItem.cpp | 28 ++++------------------ 1 file changed, 5 insertions(+), 23 deletions(-) diff --git a/libraries/entities/src/ModelEntityItem.cpp b/libraries/entities/src/ModelEntityItem.cpp index 3215ab9dd0..323584c7ee 100644 --- a/libraries/entities/src/ModelEntityItem.cpp +++ b/libraries/entities/src/ModelEntityItem.cpp @@ -207,12 +207,10 @@ void ModelEntityItem::update(const quint64& now) { // don't reset _lastAnimated here because we need the timestamp from the ModelEntityItem constructor for when the properties were set _currentFrame = currentAnimationProperties.getCurrentFrame(); setAnimationCurrentFrame(_currentFrame); - qCDebug(entities) << "setting first frame 1 " << _currentFrame; } else { _lastAnimated = usecTimestampNow(); _currentFrame = currentAnimationProperties.getFirstFrame(); setAnimationCurrentFrame(currentAnimationProperties.getFirstFrame()); - qCDebug(entities) << "setting first frame 2" << _currentFrame; } } else if (!currentAnimationProperties.getRunning() && _previousAnimationProperties.getRunning()) { _currentFrame = currentAnimationProperties.getFirstFrame(); @@ -220,31 +218,11 @@ void ModelEntityItem::update(const quint64& now) { } else if (currentAnimationProperties.getCurrentFrame() != _previousAnimationProperties.getCurrentFrame()) { // don't reset _lastAnimated here because the currentFrame was set with the previous setting of _lastAnimated _currentFrame = currentAnimationProperties.getCurrentFrame(); - // qCDebug(entities) << "point 3 " << _currentFrame; } }); _previousAnimationProperties = this->getAnimationProperties(); - } else { - // else the animation properties have not changed. - // if the first frame is less than zero don't do anything. - if (!(getAnimationFirstFrame() < 0)) { - - // if the current frame is less than zero then we have restarted the server. - if (_currentFrame < 0) { - //qCDebug(entities) << "setting first frame 3 " << _currentFrame; - if ((currentAnimationProperties.getCurrentFrame() < currentAnimationProperties.getLastFrame()) && - (currentAnimationProperties.getCurrentFrame() > currentAnimationProperties.getFirstFrame())) { - // _currentFrame = currentAnimationProperties.getCurrentFrame(); - } else { - //qCDebug(entities) << "setting first frame 4 " << _currentFrame; - // _currentFrame = currentAnimationProperties.getFirstFrame(); - // setAnimationCurrentFrame(_currentFrame); - // _lastAnimated = usecTimestampNow(); - } - } - } } if (isAnimatingSomething()) { @@ -263,6 +241,10 @@ bool ModelEntityItem::needsToCallUpdate() const { } void ModelEntityItem::updateFrameCount() { + + if (_currentFrame < 0.0f) { + return; + } if (!_lastAnimated) { _lastAnimated = usecTimestampNow(); @@ -298,7 +280,7 @@ void ModelEntityItem::updateFrameCount() { _currentFrame = getAnimationFirstFrame(); } } - qCDebug(entities) << "in update frame " << _currentFrame; + // qCDebug(entities) << "in update frame " << _currentFrame; setAnimationCurrentFrame(_currentFrame); } From ad547f483d76cb488f929dbc95874795e144e503 Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Wed, 13 Dec 2017 19:25:24 -0800 Subject: [PATCH 083/148] Keep track of message numbers --- libraries/networking/src/udt/Connection.cpp | 10 ++++++---- libraries/networking/src/udt/Connection.h | 2 ++ libraries/networking/src/udt/PacketQueue.cpp | 2 +- libraries/networking/src/udt/PacketQueue.h | 4 +++- libraries/networking/src/udt/SendQueue.cpp | 19 +++++++++---------- libraries/networking/src/udt/SendQueue.h | 8 ++++++-- 6 files changed, 27 insertions(+), 18 deletions(-) diff --git a/libraries/networking/src/udt/Connection.cpp b/libraries/networking/src/udt/Connection.cpp index 5f632fa25f..fc590c3a66 100644 --- a/libraries/networking/src/udt/Connection.cpp +++ b/libraries/networking/src/udt/Connection.cpp @@ -90,6 +90,9 @@ void Connection::stopSendQueue() { // tell the send queue to stop and be deleted sendQueue->stop(); + + _lastMessageNumber = sendQueue->getCurrentMessageNumber(); + sendQueue->deleteLater(); // wait on the send queue thread so we know the send queue is gone @@ -116,11 +119,11 @@ SendQueue& Connection::getSendQueue() { if (!_hasReceivedHandshakeACK) { // First time creating a send queue for this connection - _sendQueue = SendQueue::create(_parentSocket, _destination, _initialSequenceNumber - 1, _hasReceivedHandshakeACK); + _sendQueue = SendQueue::create(_parentSocket, _destination, _initialSequenceNumber - 1, _lastMessageNumber, _hasReceivedHandshakeACK); _lastReceivedACK = _sendQueue->getCurrentSequenceNumber(); } else { // Connection already has a handshake from a previous send queue - _sendQueue = SendQueue::create(_parentSocket, _destination, _lastReceivedACK, _hasReceivedHandshakeACK); + _sendQueue = SendQueue::create(_parentSocket, _destination, _lastReceivedACK, _lastMessageNumber, _hasReceivedHandshakeACK); } #ifdef UDT_CONNECTION_DEBUG @@ -417,7 +420,6 @@ void Connection::sendHandshakeRequest() { } bool Connection::processReceivedSequenceNumber(SequenceNumber sequenceNumber, int packetSize, int payloadSize) { - if (!_hasReceivedHandshake) { // Refuse to process any packets until we've received the handshake // Send handshake request to re-request a handshake @@ -509,7 +511,7 @@ bool Connection::processReceivedSequenceNumber(SequenceNumber sequenceNumber, in } else { _stats.recordReceivedPackets(payloadSize, packetSize); } - + return !wasDuplicate; } diff --git a/libraries/networking/src/udt/Connection.h b/libraries/networking/src/udt/Connection.h index a13c29adc8..4f979750f9 100644 --- a/libraries/networking/src/udt/Connection.h +++ b/libraries/networking/src/udt/Connection.h @@ -137,6 +137,8 @@ private: SequenceNumber _initialSequenceNumber; // Randomized on Connection creation, identifies connection during re-connect requests SequenceNumber _initialReceiveSequenceNumber; // Randomized by peer Connection on creation, identifies connection during re-connect requests + MessageNumber _lastMessageNumber; + LossList _lossList; // List of all missing packets SequenceNumber _lastReceivedSequenceNumber; // The largest sequence number received from the peer SequenceNumber _lastReceivedACK; // The last ACK received diff --git a/libraries/networking/src/udt/PacketQueue.cpp b/libraries/networking/src/udt/PacketQueue.cpp index 9560f2f187..0560855ecb 100644 --- a/libraries/networking/src/udt/PacketQueue.cpp +++ b/libraries/networking/src/udt/PacketQueue.cpp @@ -15,7 +15,7 @@ using namespace udt; -PacketQueue::PacketQueue() { +PacketQueue::PacketQueue(MessageNumber messageNumber) : _currentMessageNumber(messageNumber) { _channels.emplace_back(new std::list()); } diff --git a/libraries/networking/src/udt/PacketQueue.h b/libraries/networking/src/udt/PacketQueue.h index 2b3d3a4b5b..bc4c5e3432 100644 --- a/libraries/networking/src/udt/PacketQueue.h +++ b/libraries/networking/src/udt/PacketQueue.h @@ -34,7 +34,7 @@ class PacketQueue { using Channels = std::vector; public: - PacketQueue(); + PacketQueue(MessageNumber messageNumber = 0); void queuePacket(PacketPointer packet); void queuePacketList(PacketListPointer packetList); @@ -42,6 +42,8 @@ public: PacketPointer takePacket(); Mutex& getLock() { return _packetsLock; } + + MessageNumber getCurrentMessageNumber() const { return _currentMessageNumber; } private: MessageNumber getNextMessageNumber(); diff --git a/libraries/networking/src/udt/SendQueue.cpp b/libraries/networking/src/udt/SendQueue.cpp index 3dbfb35fbe..43477e4562 100644 --- a/libraries/networking/src/udt/SendQueue.cpp +++ b/libraries/networking/src/udt/SendQueue.cpp @@ -61,10 +61,12 @@ private: Mutex2& _mutex2; }; -std::unique_ptr SendQueue::create(Socket* socket, HifiSockAddr destination, SequenceNumber currentSequenceNumber, bool hasReceivedHandshakeACK) { +std::unique_ptr SendQueue::create(Socket* socket, HifiSockAddr destination, SequenceNumber currentSequenceNumber, + MessageNumber currentMessageNumber, bool hasReceivedHandshakeACK) { Q_ASSERT_X(socket, "SendQueue::create", "Must be called with a valid Socket*"); - auto queue = std::unique_ptr(new SendQueue(socket, destination, currentSequenceNumber, hasReceivedHandshakeACK)); + auto queue = std::unique_ptr(new SendQueue(socket, destination, currentSequenceNumber, + currentMessageNumber, hasReceivedHandshakeACK)); // Setup queue private thread QThread* thread = new QThread; @@ -83,19 +85,16 @@ std::unique_ptr SendQueue::create(Socket* socket, HifiSockAddr destin return queue; } -SendQueue::SendQueue(Socket* socket, HifiSockAddr dest, SequenceNumber currentSequenceNumber, bool hasReceivedHandshakeACK) : +SendQueue::SendQueue(Socket* socket, HifiSockAddr dest, SequenceNumber currentSequenceNumber, + MessageNumber currentMessageNumber, bool hasReceivedHandshakeACK) : _socket(socket), - _destination(dest) + _destination(dest), + _packets(currentMessageNumber) { // set our member variables from current sequence number _currentSequenceNumber = currentSequenceNumber; _atomicCurrentSequenceNumber = uint32_t(_currentSequenceNumber); - - if (hasReceivedHandshakeACK) { - _lastACKSequenceNumber = uint32_t(_currentSequenceNumber); - } else { - _lastACKSequenceNumber = uint32_t(_currentSequenceNumber - 1); - } + _lastACKSequenceNumber = uint32_t(_currentSequenceNumber); _hasReceivedHandshakeACK = hasReceivedHandshakeACK; diff --git a/libraries/networking/src/udt/SendQueue.h b/libraries/networking/src/udt/SendQueue.h index 29fe6b35ff..b33180c1e2 100644 --- a/libraries/networking/src/udt/SendQueue.h +++ b/libraries/networking/src/udt/SendQueue.h @@ -50,7 +50,9 @@ public: Stopped }; - static std::unique_ptr create(Socket* socket, HifiSockAddr destination, SequenceNumber currentSequenceNumber, bool hasReceivedHandshakeACK); + static std::unique_ptr create(Socket* socket, HifiSockAddr destination, + SequenceNumber currentSequenceNumber, MessageNumber currentMessageNumber, + bool hasReceivedHandshakeACK); virtual ~SendQueue(); @@ -58,6 +60,7 @@ public: void queuePacketList(std::unique_ptr packetList); SequenceNumber getCurrentSequenceNumber() const { return SequenceNumber(_atomicCurrentSequenceNumber); } + MessageNumber getCurrentMessageNumber() const { return _packets.getCurrentMessageNumber(); } void setFlowWindowSize(int flowWindowSize) { _flowWindowSize = flowWindowSize; } @@ -91,7 +94,8 @@ private slots: void run(); private: - SendQueue(Socket* socket, HifiSockAddr dest, SequenceNumber currentSequenceNumber, bool hasReceivedHandshakeACK); + SendQueue(Socket* socket, HifiSockAddr dest, SequenceNumber currentSequenceNumber, + MessageNumber currentMessageNumber, bool hasReceivedHandshakeACK); SendQueue(SendQueue& other) = delete; SendQueue(SendQueue&& other) = delete; From af346f2ced55e2583b8466305d15fe5e8e989d49 Mon Sep 17 00:00:00 2001 From: Zach Fox Date: Thu, 14 Dec 2017 10:09:10 -0800 Subject: [PATCH 084/148] Protocol change --- interface/resources/qml/js/Utils.jsc | Bin 0 -> 6596 bytes libraries/networking/src/udt/PacketHeaders.h | 3 ++- 2 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 interface/resources/qml/js/Utils.jsc diff --git a/interface/resources/qml/js/Utils.jsc b/interface/resources/qml/js/Utils.jsc new file mode 100644 index 0000000000000000000000000000000000000000..ab20e996b9469915ac6a89901da175143e6b5024 GIT binary patch literal 6596 zcmcIoZD?EP6@Kh1ckah_<+cmm)~+s7*+{cEDOm|)Y*uPBiCux$Iwl#JYtNP&7t3}W zIXI&o4oU8EkM2n zXjl7O2dDtRuNCd{@)jY-)d!#zenqKY4sn&W{weu)twmlb!$4JTzv65rm+K1vDC#!F zU$|ZVIZ9zlW+S<`HL;hgR&M8~1sQiLyXg~6*Kx4qHtya=?){4Iz`gR%B^6)FqD(EX zPx0NgjXdr9YAbNP75KOnxYqy<89DFo`<=jA05hh+!CUJc)7q5K-I-U<4BwMhw#!Kold03qHB1qPh=(m57jV zQZO*TlsKpO<^4D&)ji|-UBpF<$-`KmCFTK~acFxKqv8qb`vJ}(jwnv6ynF{ogq(=F zep_Ap)wNGud)4)O>UtbUguEF{VOB&&#)x21=BI^yoeI;=cpet< z8yEavN0<0LF8)1^DU2eDE}X7EzTC=9#(VVvU%?VLXPX@E8u^tC$cdhzrY~ z5|TzSE|9{#2}}z<=It55SzSj%iNA*yHv6nZbjwP_N>*aF82-K7|F|4Z{3((gYY*l1 z1HmPNES&HK!VAmo!G#Z7%nSc2m&=jFSbJz;vopy0hR~Acw-O%(%P$^o0YVGQoxRBc zfA58N%nJ{-l0bHGCbwg^#q(qrrDi+!w<_$cdfT#JQtVa6B|0HZKTvD>SPT8{3FK*i zWU(iZU!oSteUbW{j!MrrowDh%hwMA*Wz%5~+1G_Km+UHco!!3?d2`uawWQAO`Fhz^ zFY9DKQ7^k1!8+Li%B~H>BZmbX7dAVWSkh#gI3&0r zaF0rAW;@0YRTR^~w|fH1=rq7T1!gIn>dAFt!Sy*C45#|hZ zyKMQfPE=zR8BZ12Iu&e;jZ`qZ;(XBNe0X7VdI#CX&hyK$=>L{qIw{h|R_2l4RI7AY z^-G-Fg*Pl@c)U6&I`)6~vWKqD3?b!JxCu1uN`cA?Q-i-75ra?*w4> z7DLeZEXfck*xy13exhOT)~XM$^JKYWuGBjYFUK{J-kQV9*AmCcI=9Ipz3t&zt&~o& zbp5o=j@d0M5iMDXSkX$%t~YJ^dxYvnP2X7@RT0fd+JSJgHI(cgqRD9&=_E-h7ipTL zi!Ra}N%Kz9JRJ@v&Ijf=afs?ImCUopaAUf5Bc(P@)^4QL#!&4B4=hC;lN+q^_W+Q1 zP^n|i{5|@(6kNweRp@!g!IB0$&XzP(9WOq8UKl6|MM0Czbbp-MJtdAmS4|C?43SDf)z9}dNlLtGo5xl*UM-i)V9TyEvOFWw5I(m_-&8|fx011{`>NNH;(6Df(rr#QsN>-}$CJna|wOpzoRcq-Fq`bAH8fghvwNyJ`N_RlpJYiGQZuHu}HZ5Pa zdE8c|q5`8P==g;$uId?L_>-ZdTT7Ja(9^jWIyw}4%`oqUj`vkn%QKo+>hkt%Am^R8 zT%)}GyrqJUtqMAFDsNlV@ Date: Thu, 14 Dec 2017 10:20:46 -0800 Subject: [PATCH 085/148] Invalid WAV files should always be logged and not played --- libraries/audio/src/Sound.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/libraries/audio/src/Sound.cpp b/libraries/audio/src/Sound.cpp index 476a8d4d88..672c0b69b3 100644 --- a/libraries/audio/src/Sound.cpp +++ b/libraries/audio/src/Sound.cpp @@ -96,9 +96,13 @@ void SoundProcessor::run() { QByteArray outputAudioByteArray; int sampleRate = interpretAsWav(rawAudioByteArray, outputAudioByteArray); - if (sampleRate != 0) { - downSample(outputAudioByteArray, sampleRate); + if (sampleRate == 0) { + qCDebug(audio) << "Unsupported WAV file type"; + emit onError(300, "Failed to load sound file, reason: unsupported WAV file type"); + return; } + + downSample(outputAudioByteArray, sampleRate); } else if (fileName.endsWith(RAW_EXTENSION)) { // check if this was a stereo raw file // since it's raw the only way for us to know that is if the file was called .stereo.raw From a49ee46f541cfae25fd3b2fb4b229e070db366b9 Mon Sep 17 00:00:00 2001 From: David Kelly Date: Thu, 14 Dec 2017 11:52:56 -0700 Subject: [PATCH 086/148] Handle sold out items a bit better --- scripts/system/html/js/marketplacesInject.js | 43 +++++++++++++------- 1 file changed, 28 insertions(+), 15 deletions(-) diff --git a/scripts/system/html/js/marketplacesInject.js b/scripts/system/html/js/marketplacesInject.js index 878c3b51f1..8ad7499be4 100644 --- a/scripts/system/html/js/marketplacesInject.js +++ b/scripts/system/html/js/marketplacesInject.js @@ -199,7 +199,7 @@ var purchasesElement = document.createElement('a'); var dropDownElement = document.getElementById('user-dropdown'); - $('#user-dropdown').find('.username')[0].style = "max-width:80px;white-space:nowrap;overflow:hidden;" + + $('#user-dropdown').find('.username')[0].style = "max-width:80px;white-space:nowrap;overflow:hidden;" + "text-overflow:ellipsis;display:inline-block;position:relative;top:4px;"; $('#user-dropdown').find('.caret')[0].style = "position:relative;top:-3px;"; @@ -387,27 +387,40 @@ var href = purchaseButton.attr('href'); purchaseButton.attr('href', '#'); - purchaseButton.css({ - "background": "linear-gradient(#00b4ef, #0093C5)", - "color": "#FFF", - "font-weight": "600", - "padding-bottom": "10px" - }); + var availability = $.trim($('.item-availability').text()); + if (availability === 'available') { + purchaseButton.css({ + "background": "linear-gradient(#00b4ef, #0093C5)", + "color": "#FFF", + "font-weight": "600", + "padding-bottom": "10px" + }); + } else { + purchaseButton.css({ + "background": "linear-gradient(#a2a2a2, #fefefe)", + "color": "#000", + "font-weight": "600", + "padding-bottom": "10px" + }); + } var cost = $('.item-cost').text(); - - if (parseInt(cost) > 0 && $('#side-info').find('#buyItemButton').size() === 0) { + if (availability !== 'available') { + purchaseButton.html('UNAVAILABLE (' + availability + ')'); + } else if (parseInt(cost) > 0 && $('#side-info').find('#buyItemButton').size() === 0) { purchaseButton.html('PURCHASE ' + cost); } purchaseButton.on('click', function () { - buyButtonClicked(window.location.pathname.split("/")[3], - $('#top-center').find('h1').text(), - $('#creator').find('.value').text(), - cost, - href); - }); + if ('availabile' === availability) { + buyButtonClicked(window.location.pathname.split("/")[3], + $('#top-center').find('h1').text(), + $('#creator').find('.value').text(), + cost, + href); + } + }); maybeAddPurchasesButton(); } } From 77b102669e454b59f394e768b1752ff831719ee9 Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Tue, 12 Dec 2017 12:38:01 -0800 Subject: [PATCH 087/148] try harder to keep setTimeout loop going in controller-dispatcher --- scripts/system/controllers/controllerDispatcher.js | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/scripts/system/controllers/controllerDispatcher.js b/scripts/system/controllers/controllerDispatcher.js index 57f3b4fd8b..af3b1d2ed6 100644 --- a/scripts/system/controllers/controllerDispatcher.js +++ b/scripts/system/controllers/controllerDispatcher.js @@ -154,6 +154,15 @@ Script.include("/~/system/libraries/controllerDispatcherUtils.js"); }; this.update = function () { + try { + this.updateInternal(); + } catch (e) { + print(e); + } + Script.setTimeout(_this.update, BASIC_TIMER_INTERVAL_MS); + }; + + this.updateInternal = function () { if (PROFILE) { Script.beginProfileRange("dispatch.pre"); } @@ -376,7 +385,6 @@ Script.include("/~/system/libraries/controllerDispatcherUtils.js"); if (PROFILE) { Script.endProfileRange("dispatch.run"); } - Script.setTimeout(_this.update, BASIC_TIMER_INTERVAL_MS); }; this.setBlacklist = function() { From 9863458fef38ca0243c6d7945e16ba7a1192d6c5 Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Tue, 12 Dec 2017 12:59:35 -0800 Subject: [PATCH 088/148] oops --- scripts/system/controllers/controllerDispatcher.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/system/controllers/controllerDispatcher.js b/scripts/system/controllers/controllerDispatcher.js index af3b1d2ed6..915b3b3680 100644 --- a/scripts/system/controllers/controllerDispatcher.js +++ b/scripts/system/controllers/controllerDispatcher.js @@ -155,7 +155,7 @@ Script.include("/~/system/libraries/controllerDispatcherUtils.js"); this.update = function () { try { - this.updateInternal(); + _this.updateInternal(); } catch (e) { print(e); } From 74a5f0881ff60159b583f269dcc7d7d74a8f9a12 Mon Sep 17 00:00:00 2001 From: Zach Fox Date: Thu, 14 Dec 2017 11:56:36 -0800 Subject: [PATCH 089/148] Fix broken Buy buttons on Marketplace --- scripts/system/html/js/marketplacesInject.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/scripts/system/html/js/marketplacesInject.js b/scripts/system/html/js/marketplacesInject.js index 878c3b51f1..b361f1120b 100644 --- a/scripts/system/html/js/marketplacesInject.js +++ b/scripts/system/html/js/marketplacesInject.js @@ -265,8 +265,10 @@ }); $('.grid-item').find('#price-or-edit').find('a').each(function() { - $(this).attr('data-href', $(this).attr('href')); - $(this).attr('href', '#'); + if ($(this).attr('href') !== '#') { // Guard necessary because of the AJAX nature of Marketplace site + $(this).attr('data-href', $(this).attr('href')); + $(this).attr('href', '#'); + } cost = $(this).closest('.col-xs-3').find('.item-cost').text(); $(this).closest('.col-xs-3').prev().attr("class", 'col-xs-6'); From 7f948586dd09afd464f7b5bb53756a29f45abd59 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Thu, 14 Dec 2017 12:07:32 -0800 Subject: [PATCH 090/148] fix message erase in conn, SendQueue ctor order --- libraries/networking/src/udt/Connection.cpp | 13 +++++++++---- libraries/networking/src/udt/Connection.h | 1 - libraries/networking/src/udt/SendQueue.cpp | 4 ++-- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/libraries/networking/src/udt/Connection.cpp b/libraries/networking/src/udt/Connection.cpp index fc590c3a66..2f57523f79 100644 --- a/libraries/networking/src/udt/Connection.cpp +++ b/libraries/networking/src/udt/Connection.cpp @@ -193,11 +193,16 @@ void Connection::queueReceivedMessagePacket(std::unique_ptr packet) { while (pendingMessage.hasAvailablePackets()) { auto packet = pendingMessage.removeNextPacket(); - _parentSocket->messageReceived(std::move(packet)); - } - if (pendingMessage.isComplete()) { - _pendingReceivedMessages.erase(messageNumber); + auto packetPosition = packet->getPacketPosition(); + + _parentSocket->messageReceived(std::move(packet)); + + // if this was the last or only packet, then we can remove the pending message from our hash + if (packetPosition == Packet::PacketPosition::LAST || + packetPosition == Packet::PacketPosition::ONLY) { + _pendingReceivedMessages.erase(messageNumber); + } } } diff --git a/libraries/networking/src/udt/Connection.h b/libraries/networking/src/udt/Connection.h index 4f979750f9..8a96b1ded3 100644 --- a/libraries/networking/src/udt/Connection.h +++ b/libraries/networking/src/udt/Connection.h @@ -37,7 +37,6 @@ class Socket; class PendingReceivedMessage { public: void enqueuePacket(std::unique_ptr packet); - bool isComplete() const { return _hasLastPacket && _numPackets == _packets.size(); } bool hasAvailablePackets() const; std::unique_ptr removeNextPacket(); diff --git a/libraries/networking/src/udt/SendQueue.cpp b/libraries/networking/src/udt/SendQueue.cpp index 43477e4562..e7d1ab104a 100644 --- a/libraries/networking/src/udt/SendQueue.cpp +++ b/libraries/networking/src/udt/SendQueue.cpp @@ -87,9 +87,9 @@ std::unique_ptr SendQueue::create(Socket* socket, HifiSockAddr destin SendQueue::SendQueue(Socket* socket, HifiSockAddr dest, SequenceNumber currentSequenceNumber, MessageNumber currentMessageNumber, bool hasReceivedHandshakeACK) : + _packets(currentMessageNumber), _socket(socket), - _destination(dest), - _packets(currentMessageNumber) + _destination(dest) { // set our member variables from current sequence number _currentSequenceNumber = currentSequenceNumber; From 1d4801adf5edad026571b84dae96c3bce0a938b4 Mon Sep 17 00:00:00 2001 From: Nissim Hadar Date: Thu, 14 Dec 2017 13:48:31 -0800 Subject: [PATCH 091/148] Fix for Haze crash (bug 10537) --- libraries/render-utils/src/DrawHaze.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/libraries/render-utils/src/DrawHaze.cpp b/libraries/render-utils/src/DrawHaze.cpp index 4431c1bbc3..da07f5bd9b 100644 --- a/libraries/render-utils/src/DrawHaze.cpp +++ b/libraries/render-utils/src/DrawHaze.cpp @@ -169,7 +169,12 @@ void DrawHaze::run(const render::RenderContextPointer& renderContext, const Inpu auto hazeStage = args->_scene->getStage(); if (hazeStage && hazeStage->_currentFrame._hazes.size() > 0) { model::HazePointer hazePointer = hazeStage->getHaze(hazeStage->_currentFrame._hazes.front()); - batch.setUniformBuffer(HazeEffect_ParamsSlot, hazePointer->getHazeParametersBuffer()); + if (hazePointer) { + batch.setUniformBuffer(HazeEffect_ParamsSlot, hazePointer->getHazeParametersBuffer()); + } else { + // Something is wrong, so just quit Haze + return; + } } batch.setUniformBuffer(HazeEffect_TransformBufferSlot, transformBuffer->getFrameTransformBuffer()); @@ -178,7 +183,7 @@ void DrawHaze::run(const render::RenderContextPointer& renderContext, const Inpu if (lightStage) { model::LightPointer keyLight; keyLight = lightStage->getCurrentKeyLight(); - if (keyLight != nullptr) { + if (keyLight) { batch.setUniformBuffer(HazeEffect_LightingMapSlot, keyLight->getLightSchemaBuffer()); } } From 8b5e8f8d0843ead1df30949ad2900390de938a00 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Thu, 14 Dec 2017 15:30:25 -0800 Subject: [PATCH 092/148] only de-activate the SendQueue when it has nothing to send --- libraries/networking/src/udt/SendQueue.cpp | 22 ---------------------- 1 file changed, 22 deletions(-) diff --git a/libraries/networking/src/udt/SendQueue.cpp b/libraries/networking/src/udt/SendQueue.cpp index e7d1ab104a..4a0500f642 100644 --- a/libraries/networking/src/udt/SendQueue.cpp +++ b/libraries/networking/src/udt/SendQueue.cpp @@ -538,28 +538,6 @@ bool SendQueue::maybeResendPacket() { bool SendQueue::isInactive(bool attemptedToSendPacket) { // check for connection timeout first - // that will be the case if we have had 16 timeouts since hearing back from the client, and it has been - // at least 5 seconds - static const int NUM_TIMEOUTS_BEFORE_INACTIVE = 16; - static const int MIN_MS_BEFORE_INACTIVE = 5 * 1000; - - auto sinceLastResponse = (QDateTime::currentMSecsSinceEpoch() - _lastReceiverResponse); - - if (sinceLastResponse > 0 && - sinceLastResponse >= int64_t(NUM_TIMEOUTS_BEFORE_INACTIVE * (_estimatedTimeout / USECS_PER_MSEC)) && - sinceLastResponse > MIN_MS_BEFORE_INACTIVE) { - // If the flow window has been full for over CONSIDER_INACTIVE_AFTER, - // then signal the queue is inactive and return so it can be cleaned up - -#ifdef UDT_CONNECTION_DEBUG - qCDebug(networking) << "SendQueue to" << _destination << "reached" << NUM_TIMEOUTS_BEFORE_INACTIVE << "timeouts" - << "and" << MIN_MS_BEFORE_INACTIVE << "milliseconds before receiving any ACK/NAK and is now inactive. Stopping."; -#endif - - deactivate(); - return true; - } - if (!attemptedToSendPacket) { // During our processing above we didn't send any packets From da56d4730747bfa5ff8073249694cb3f9adc0a16 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Thu, 14 Dec 2017 15:30:51 -0800 Subject: [PATCH 093/148] make the _lastMessageNumber in Connection default to 0 --- libraries/networking/src/udt/Connection.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/networking/src/udt/Connection.h b/libraries/networking/src/udt/Connection.h index 8a96b1ded3..0017eb204a 100644 --- a/libraries/networking/src/udt/Connection.h +++ b/libraries/networking/src/udt/Connection.h @@ -136,7 +136,7 @@ private: SequenceNumber _initialSequenceNumber; // Randomized on Connection creation, identifies connection during re-connect requests SequenceNumber _initialReceiveSequenceNumber; // Randomized by peer Connection on creation, identifies connection during re-connect requests - MessageNumber _lastMessageNumber; + MessageNumber _lastMessageNumber { 0 }; LossList _lossList; // List of all missing packets SequenceNumber _lastReceivedSequenceNumber; // The largest sequence number received from the peer From 00a2013b6064b71e14a90aa19148fb3c8818dff0 Mon Sep 17 00:00:00 2001 From: Nissim Hadar Date: Thu, 14 Dec 2017 15:38:07 -0800 Subject: [PATCH 094/148] Added missing space before { --- libraries/model/src/model/Haze.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/model/src/model/Haze.h b/libraries/model/src/model/Haze.h index 5c916c3b91..2a575eb151 100644 --- a/libraries/model/src/model/Haze.h +++ b/libraries/model/src/model/Haze.h @@ -128,7 +128,7 @@ namespace model { Parameters() {} }; - UniformBufferView _hazeParametersBuffer{ nullptr }; + UniformBufferView _hazeParametersBuffer { nullptr }; }; using HazePointer = std::shared_ptr; From 32acc8ad4780f746bbbbb26ca8233fe60230e0e4 Mon Sep 17 00:00:00 2001 From: Alexander Ivash Date: Fri, 8 Dec 2017 00:20:35 +0300 Subject: [PATCH 095/148] 8992 Login window is small in tablet --- interface/resources/qml/LoginDialog/LinkAccountBody.qml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/interface/resources/qml/LoginDialog/LinkAccountBody.qml b/interface/resources/qml/LoginDialog/LinkAccountBody.qml index 300bcd46f0..0e2f2a5282 100644 --- a/interface/resources/qml/LoginDialog/LinkAccountBody.qml +++ b/interface/resources/qml/LoginDialog/LinkAccountBody.qml @@ -52,7 +52,11 @@ Item { targetHeight += hifi.dimensions.contentSpacing.y + additionalInformation.height } - parent.width = root.width = Math.max(d.minWidth, Math.min(d.maxWidth, targetWidth)); + var newWidth = Math.max(d.minWidth, Math.min(d.maxWidth, targetWidth)); + if(!isNaN(newWidth)) { + parent.width = root.width = newWidth; + } + parent.height = root.height = Math.max(d.minHeight, Math.min(d.maxHeight, targetHeight)) + (keyboardEnabled && keyboardRaised ? (200 + 2 * hifi.dimensions.contentSpacing.y) : hifi.dimensions.contentSpacing.y); } From d5d4c22a3d4aedd7de0d27bea1d6b71610352589 Mon Sep 17 00:00:00 2001 From: Nissim Hadar Date: Thu, 14 Dec 2017 15:55:31 -0800 Subject: [PATCH 096/148] Removed dual calls to getViewInverse(). --- libraries/render-utils/src/Haze.slf | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/libraries/render-utils/src/Haze.slf b/libraries/render-utils/src/Haze.slf index d758756975..e394207d16 100644 --- a/libraries/render-utils/src/Haze.slf +++ b/libraries/render-utils/src/Haze.slf @@ -48,8 +48,10 @@ void main(void) { vec4 fragColor = texture(colorMap, varTexCoord0); vec4 eyeFragPos = unpackPositionFromZeye(varTexCoord0); - vec4 worldFragPos = getViewInverse() * eyeFragPos; - vec4 worldEyePos = getViewInverse()[3]; + + mat4 viewInverse = getViewInverse(); + vec4 worldFragPos = viewInverse * eyeFragPos; + vec4 worldEyePos = viewInverse[3]; outFragColor = computeHazeColor(fragColor, eyeFragPos, worldFragPos, worldEyePos); } From 05e47ae668254ea2437da0bb6ac2e93fb43048b0 Mon Sep 17 00:00:00 2001 From: Nissim Hadar Date: Thu, 14 Dec 2017 16:14:08 -0800 Subject: [PATCH 097/148] Removed unneeded 'mix'. Defined EPSILON. --- libraries/render-utils/src/Haze.slh | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/libraries/render-utils/src/Haze.slh b/libraries/render-utils/src/Haze.slh index 97284f1c2a..ddc4e6e945 100644 --- a/libraries/render-utils/src/Haze.slh +++ b/libraries/render-utils/src/Haze.slh @@ -89,9 +89,7 @@ vec3 computeHazeColorKeyLightAttenuation(vec3 color, Light directionalLight, vec // hazeIntegral *= (1.0 - exp (-t)) / t; hazeIntegral *= 0.3171178; - float hazeAmount = 1.0 - exp(-hazeIntegral); - - return mix(color, vec3(0.0, 0.0, 0.0), hazeAmount); + return color * exp(-hazeIntegral); } // Input: @@ -177,7 +175,8 @@ vec4 computeHazeColor(vec4 fragColor, vec4 eyeFragPos, vec4 worldFragPos, vec4 w if (abs(deltaHeight) > slopeThreshold) { float t = hazeParams.hazeHeightFactor * deltaHeight; // Protect from wild values - if (abs(t) > 0.0000001) { + const float EPSILON = 0.0000001f; + if (abs(t) > EPSILON) { hazeIntegral *= (1.0 - exp (-t)) / t; } } @@ -189,7 +188,7 @@ vec4 computeHazeColor(vec4 fragColor, vec4 eyeFragPos, vec4 worldFragPos, vec4 w } // Mix with background at far range - const float BLEND_DISTANCE = 27000.0; + const float BLEND_DISTANCE = 27000.0f; vec4 outFragColor; if (distance > BLEND_DISTANCE) { outFragColor = mix(potentialFragColor, fragColor, hazeParams.backgroundBlend); From 026b19d770f121bad061bd7375525626e7c69227 Mon Sep 17 00:00:00 2001 From: Nissim Hadar Date: Thu, 14 Dec 2017 16:17:50 -0800 Subject: [PATCH 098/148] Set 4th position component from 0.0 to 1.0 --- libraries/render-utils/src/DeferredGlobalLight.slh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/render-utils/src/DeferredGlobalLight.slh b/libraries/render-utils/src/DeferredGlobalLight.slh index 311012716a..831f5732ab 100644 --- a/libraries/render-utils/src/DeferredGlobalLight.slh +++ b/libraries/render-utils/src/DeferredGlobalLight.slh @@ -224,7 +224,7 @@ vec3 evalGlobalLightingAlphaBlendedWithHaze( vec4 colorV4 = computeHazeColor( vec4(color, 0.0), // fragment original color vec4(position, 0.0), // fragment position in eye coordinates - vec4(fragEyeVector, 0.0), // fragment position in world coordinates + vec4(fragEyeVector, 1.0), // fragment position in world coordinates invViewMat[3]); // eye position in world coordinates color = colorV4.rgb; From c352d5fc23c52ee12eb5fb4875caf157a21c4ff0 Mon Sep 17 00:00:00 2001 From: Nissim Hadar Date: Thu, 14 Dec 2017 16:23:14 -0800 Subject: [PATCH 099/148] Passed light direction instead of light object into `computeHazeColorKeyLightAttenuation`. --- libraries/render-utils/src/DeferredGlobalLight.slh | 6 +----- libraries/render-utils/src/Haze.slh | 3 +-- 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/libraries/render-utils/src/DeferredGlobalLight.slh b/libraries/render-utils/src/DeferredGlobalLight.slh index 831f5732ab..9de7c7eb3a 100644 --- a/libraries/render-utils/src/DeferredGlobalLight.slh +++ b/libraries/render-utils/src/DeferredGlobalLight.slh @@ -121,10 +121,6 @@ vec3 evalSkyboxGlobalColor(mat4 invViewMat, float shadowAttenuation, float obscu color += ambientDiffuse; color += ambientSpecular; - // Directional - // Get directional light (used by both directional light and haze attenuation) - Light directionalLight = getLight(); - vec3 directionalDiffuse; vec3 directionalSpecular; evalLightingDirectional(directionalDiffuse, directionalSpecular, lightDirection, lightIrradiance, fragEyeDir, fragNormal, roughness, metallic, fresnel, albedo, shadowAttenuation @@ -137,7 +133,7 @@ vec3 evalSkyboxGlobalColor(mat4 invViewMat, float shadowAttenuation, float obscu // Attenuate the light if haze effect selected if ((hazeParams.hazeMode & HAZE_MODE_IS_KEYLIGHT_ATTENUATED) == HAZE_MODE_IS_KEYLIGHT_ATTENUATED) { - color = computeHazeColorKeyLightAttenuation(color, directionalLight, position); + color = computeHazeColorKeyLightAttenuation(color, lightDirection, position); } return color; diff --git a/libraries/render-utils/src/Haze.slh b/libraries/render-utils/src/Haze.slh index ddc4e6e945..7e74b91ede 100644 --- a/libraries/render-utils/src/Haze.slh +++ b/libraries/render-utils/src/Haze.slh @@ -50,13 +50,12 @@ layout(std140) uniform hazeBuffer { // // General algorithm taken from http://www.iquilezles.org/www/articles/fog/fog.htm, with permission // -vec3 computeHazeColorKeyLightAttenuation(vec3 color, Light directionalLight, vec3 worldFragPos) { +vec3 computeHazeColorKeyLightAttenuation(vec3 color, vec3 lightDirection, vec3 worldFragPos) { // Directional light attenuation is simulated by assuming the light source is at a fixed height above the // fragment. This height is where the haze density is reduced by 95% from the haze at the fragment's height // // The distance is computed from the height and the directional light orientation // The distance is limited to height * 1,000, which gives an angle of ~0.057 degrees - vec3 lightDirection = getLightDirection(directionalLight); // Height at which haze density is reduced by 95% (default set to 2000.0 for safety ,this should never happen) float height_95p = 2000.0; From b2beeae6b1a445d50de6a565afcb274516b57740 Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Tue, 12 Dec 2017 17:16:07 -0800 Subject: [PATCH 100/148] Keep connection alive as long as the node is connected --- libraries/networking/src/udt/Connection.cpp | 82 ++++++++------------- libraries/networking/src/udt/Connection.h | 9 +-- libraries/networking/src/udt/SendQueue.cpp | 52 ++++++------- libraries/networking/src/udt/SendQueue.h | 8 +- libraries/networking/src/udt/Socket.cpp | 3 - 5 files changed, 57 insertions(+), 97 deletions(-) diff --git a/libraries/networking/src/udt/Connection.cpp b/libraries/networking/src/udt/Connection.cpp index f42049f107..7a31bbeedc 100644 --- a/libraries/networking/src/udt/Connection.cpp +++ b/libraries/networking/src/udt/Connection.cpp @@ -11,6 +11,8 @@ #include "Connection.h" +#include + #include #include @@ -60,6 +62,15 @@ Connection::Connection(Socket* parentSocket, HifiSockAddr destination, std::uniq _ack2Packet = ControlPacket::create(ControlPacket::ACK2, ACK2_PAYLOAD_BYTES); _lossReport = ControlPacket::create(ControlPacket::NAK, NAK_PACKET_PAYLOAD_BYTES); _handshakeACK = ControlPacket::create(ControlPacket::HandshakeACK, HANDSHAKE_ACK_PAYLOAD_BYTES); + + + // setup psuedo-random number generation shared by all connections + static std::random_device rd; + static std::mt19937 generator(rd()); + static std::uniform_int_distribution<> distribution(0, SequenceNumber::MAX); + + // randomize the intial sequence number + _initialSequenceNumber = SequenceNumber(distribution(generator)); } Connection::~Connection() { @@ -81,9 +92,6 @@ void Connection::stopSendQueue() { sendQueue->stop(); sendQueue->deleteLater(); - // since we're stopping the send queue we should consider our handshake ACK not receieved - _hasReceivedHandshakeACK = false; - // wait on the send queue thread so we know the send queue is gone sendQueueThread->quit(); sendQueueThread->wait(); @@ -101,13 +109,22 @@ void Connection::setMaxBandwidth(int maxBandwidth) { SendQueue& Connection::getSendQueue() { if (!_sendQueue) { - // we may have a sequence number from the previous inactive queue - re-use that so that the // receiver is getting the sequence numbers it expects (given that the connection must still be active) // Lasily create send queue - _sendQueue = SendQueue::create(_parentSocket, _destination); - _lastReceivedACK = _sendQueue->getCurrentSequenceNumber(); + + if (!_hasReceivedHandshakeACK) { + // First time creating a send queue for this connection + _sendQueue = SendQueue::create(_parentSocket, _destination, _initialSequenceNumber - 1); + _lastReceivedACK = _sendQueue->getCurrentSequenceNumber(); + } else { + // Connection already has a handshake from a previous send queue + _sendQueue = SendQueue::create(_parentSocket, _destination, _lastReceivedACK); + // This connection has already gone through the handshake + // bypass it in the send queue + _sendQueue->handshakeACK(); + } #ifdef UDT_CONNECTION_DEBUG qCDebug(networking) << "Created SendQueue for connection to" << _destination; @@ -142,14 +159,6 @@ void Connection::queueInactive() { #ifdef UDT_CONNECTION_DEBUG qCDebug(networking) << "Connection to" << _destination << "has stopped its SendQueue."; #endif - - if (!_hasReceivedHandshake || !_isReceivingData) { -#ifdef UDT_CONNECTION_DEBUG - qCDebug(networking) << "Connection SendQueue to" << _destination << "stopped and no data is being received - stopping connection."; -#endif - - deactivate(); - } } void Connection::queueTimeout() { @@ -208,19 +217,6 @@ void Connection::sync() { && duration_cast(sincePacketReceive).count() >= MIN_SECONDS_BEFORE_EXPIRY ) { // the receive side of this connection is expired _isReceivingData = false; - - // if we don't have a send queue that means the whole connection has expired and we can emit our signal - // otherwise we'll wait for it to also timeout before cleaning up - if (!_sendQueue) { - -#ifdef UDT_CONNECTION_DEBUG - qCDebug(networking) << "Connection to" << _destination << "no longer receiving any data and there is currently no send queue - stopping connection."; -#endif - - deactivate(); - - return; - } } // reset the number of light ACKs or non SYN ACKs during this sync interval @@ -242,26 +238,6 @@ void Connection::sync() { sendTimeoutNAK(); } } - } else if (!_sendQueue) { - // we haven't received a packet and we're not sending - // this most likely means we were started erroneously - // check the start time for this connection and auto expire it after 5 seconds of not receiving or sending any data - static const int CONNECTION_NOT_USED_EXPIRY_SECONDS = 5; - auto secondsSinceStart = duration_cast(p_high_resolution_clock::now() - _connectionStart).count(); - - if (secondsSinceStart >= CONNECTION_NOT_USED_EXPIRY_SECONDS) { - // it's been CONNECTION_NOT_USED_EXPIRY_SECONDS and nothing has actually happened with this connection - // consider it inactive and emit our inactivity signal - -#ifdef UDT_CONNECTION_DEBUG - qCDebug(networking) << "Connection to" << _destination << "did not receive or send any data in last" - << CONNECTION_NOT_USED_EXPIRY_SECONDS << "seconds - stopping connection."; -#endif - - deactivate(); - - return; - } } } @@ -827,11 +803,13 @@ void Connection::processHandshakeACK(ControlPacketPointer controlPacket) { SequenceNumber initialSequenceNumber; controlPacket->readPrimitive(&initialSequenceNumber); - // hand off this handshake ACK to the send queue so it knows it can start sending - getSendQueue().handshakeACK(initialSequenceNumber); - - // indicate that handshake ACK was received - _hasReceivedHandshakeACK = true; + if (initialSequenceNumber == _initialSequenceNumber) { + // hand off this handshake ACK to the send queue so it knows it can start sending + getSendQueue().handshakeACK(); + + // indicate that handshake ACK was received + _hasReceivedHandshakeACK = true; + } } } diff --git a/libraries/networking/src/udt/Connection.h b/libraries/networking/src/udt/Connection.h index c134081dde..a13c29adc8 100644 --- a/libraries/networking/src/udt/Connection.h +++ b/libraries/networking/src/udt/Connection.h @@ -72,8 +72,6 @@ public: void queueReceivedMessagePacket(std::unique_ptr packet); ConnectionStats::Stats sampleStats() { return _stats.sample(); } - - bool isActive() const { return _isActive; } HifiSockAddr getDestination() const { return _destination; } @@ -83,7 +81,6 @@ public: signals: void packetSent(); - void connectionInactive(const HifiSockAddr& sockAddr); void receiverHandshakeRequestComplete(const HifiSockAddr& sockAddr); private slots: @@ -112,8 +109,6 @@ private: void resetReceiveState(); void resetRTT(); - void deactivate() { _isActive = false; emit connectionInactive(_destination); } - SendQueue& getSendQueue(); SequenceNumber nextACK() const; void updateRTT(int rtt); @@ -138,9 +133,9 @@ private: p_high_resolution_clock::time_point _lastReceiveTime; // holds the last time we received anything from sender bool _isReceivingData { false }; // flag used for expiry of receipt portion of connection - bool _isActive { true }; // flag used for inactivity of connection - SequenceNumber _initialReceiveSequenceNumber; // Randomized by peer SendQueue on creation, identifies connection during re-connect requests + SequenceNumber _initialSequenceNumber; // Randomized on Connection creation, identifies connection during re-connect requests + SequenceNumber _initialReceiveSequenceNumber; // Randomized by peer Connection on creation, identifies connection during re-connect requests LossList _lossList; // List of all missing packets SequenceNumber _lastReceivedSequenceNumber; // The largest sequence number received from the peer diff --git a/libraries/networking/src/udt/SendQueue.cpp b/libraries/networking/src/udt/SendQueue.cpp index 0c029751aa..ef249b8f75 100644 --- a/libraries/networking/src/udt/SendQueue.cpp +++ b/libraries/networking/src/udt/SendQueue.cpp @@ -12,7 +12,6 @@ #include "SendQueue.h" #include -#include #include #include @@ -62,10 +61,10 @@ private: Mutex2& _mutex2; }; -std::unique_ptr SendQueue::create(Socket* socket, HifiSockAddr destination) { +std::unique_ptr SendQueue::create(Socket* socket, HifiSockAddr destination, SequenceNumber currentSequenceNumber) { Q_ASSERT_X(socket, "SendQueue::create", "Must be called with a valid Socket*"); - auto queue = std::unique_ptr(new SendQueue(socket, destination)); + auto queue = std::unique_ptr(new SendQueue(socket, destination, currentSequenceNumber)); // Setup queue private thread QThread* thread = new QThread; @@ -84,20 +83,12 @@ std::unique_ptr SendQueue::create(Socket* socket, HifiSockAddr destin return queue; } -SendQueue::SendQueue(Socket* socket, HifiSockAddr dest) : +SendQueue::SendQueue(Socket* socket, HifiSockAddr dest, SequenceNumber currentSequenceNumber) : _socket(socket), _destination(dest) { - // setup psuedo-random number generation for all instances of SendQueue - static std::random_device rd; - static std::mt19937 generator(rd()); - static std::uniform_int_distribution<> distribution(0, SequenceNumber::MAX); - - // randomize the intial sequence number - _initialSequenceNumber = SequenceNumber(distribution(generator)); - - // set our member variables from randomized initial number - _currentSequenceNumber = _initialSequenceNumber - 1; + // set our member variables from current sequence number + _currentSequenceNumber = currentSequenceNumber; _atomicCurrentSequenceNumber = uint32_t(_currentSequenceNumber); _lastACKSequenceNumber = uint32_t(_currentSequenceNumber) - 1; @@ -114,8 +105,8 @@ void SendQueue::queuePacket(std::unique_ptr packet) { // call notify_one on the condition_variable_any in case the send thread is sleeping waiting for packets _emptyCondition.notify_one(); - if (!this->thread()->isRunning() && _state == State::NotStarted) { - this->thread()->start(); + if (!thread()->isRunning() && _state == State::NotStarted) { + thread()->start(); } } @@ -125,8 +116,8 @@ void SendQueue::queuePacketList(std::unique_ptr packetList) { // call notify_one on the condition_variable_any in case the send thread is sleeping waiting for packets _emptyCondition.notify_one(); - if (!this->thread()->isRunning() && _state == State::NotStarted) { - this->thread()->start(); + if (!thread()->isRunning() && _state == State::NotStarted) { + thread()->start(); } } @@ -225,8 +216,11 @@ void SendQueue::sendHandshake() { std::unique_lock handshakeLock { _handshakeMutex }; if (!_hasReceivedHandshakeACK) { // we haven't received a handshake ACK from the client, send another now + // if the handshake hasn't been completed, then the initial sequence number + // should be the current sequence number + 1 + SequenceNumber initialSequenceNumber = _currentSequenceNumber + 1; auto handshakePacket = ControlPacket::create(ControlPacket::Handshake, sizeof(SequenceNumber)); - handshakePacket->writePrimitive(_initialSequenceNumber); + handshakePacket->writePrimitive(initialSequenceNumber); _socket->writeBasePacket(*handshakePacket, _destination); // we wait for the ACK or the re-send interval to expire @@ -235,18 +229,16 @@ void SendQueue::sendHandshake() { } } -void SendQueue::handshakeACK(SequenceNumber initialSequenceNumber) { - if (initialSequenceNumber == _initialSequenceNumber) { - { - std::lock_guard locker { _handshakeMutex }; - _hasReceivedHandshakeACK = true; - } - - _lastReceiverResponse = QDateTime::currentMSecsSinceEpoch(); - - // Notify on the handshake ACK condition - _handshakeACKCondition.notify_one(); +void SendQueue::handshakeACK() { + { + std::lock_guard locker { _handshakeMutex }; + _hasReceivedHandshakeACK = true; } + + _lastReceiverResponse = QDateTime::currentMSecsSinceEpoch(); + + // Notify on the handshake ACK condition + _handshakeACKCondition.notify_one(); } SequenceNumber SendQueue::getNextSequenceNumber() { diff --git a/libraries/networking/src/udt/SendQueue.h b/libraries/networking/src/udt/SendQueue.h index 484afcb88e..b6cec15ffd 100644 --- a/libraries/networking/src/udt/SendQueue.h +++ b/libraries/networking/src/udt/SendQueue.h @@ -50,7 +50,7 @@ public: Stopped }; - static std::unique_ptr create(Socket* socket, HifiSockAddr destination); + static std::unique_ptr create(Socket* socket, HifiSockAddr destination, SequenceNumber currentSequenceNumber); virtual ~SendQueue(); @@ -76,7 +76,7 @@ public slots: void nak(SequenceNumber start, SequenceNumber end); void fastRetransmit(SequenceNumber ack); void overrideNAKListFromPacket(ControlPacket& packet); - void handshakeACK(SequenceNumber initialSequenceNumber); + void handshakeACK(); signals: void packetSent(int wireSize, int payloadSize, SequenceNumber seqNum, p_high_resolution_clock::time_point timePoint); @@ -91,7 +91,7 @@ private slots: void run(); private: - SendQueue(Socket* socket, HifiSockAddr dest); + SendQueue(Socket* socket, HifiSockAddr dest, SequenceNumber currentSequenceNumber); SendQueue(SendQueue& other) = delete; SendQueue(SendQueue&& other) = delete; @@ -115,8 +115,6 @@ private: Socket* _socket { nullptr }; // Socket to send packet on HifiSockAddr _destination; // Destination addr - - SequenceNumber _initialSequenceNumber; // Randomized on SendQueue creation, identifies connection during re-connect requests std::atomic _lastACKSequenceNumber { 0 }; // Last ACKed sequence number diff --git a/libraries/networking/src/udt/Socket.cpp b/libraries/networking/src/udt/Socket.cpp index a3374a0f47..55643985c8 100644 --- a/libraries/networking/src/udt/Socket.cpp +++ b/libraries/networking/src/udt/Socket.cpp @@ -257,9 +257,6 @@ Connection* Socket::findOrCreateConnection(const HifiSockAddr& sockAddr) { congestionControl->setMaxBandwidth(_maxBandwidth); auto connection = std::unique_ptr(new Connection(this, sockAddr, std::move(congestionControl))); - // we queue the connection to cleanup connection in case it asks for it during its own rate control sync - QObject::connect(connection.get(), &Connection::connectionInactive, this, &Socket::cleanupConnection); - // allow higher-level classes to find out when connections have completed a handshake QObject::connect(connection.get(), &Connection::receiverHandshakeRequestComplete, this, &Socket::clientHandshakeRequestComplete); From 702d2c34a59bdb32cdea97731759aebd9516b6ad Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Wed, 13 Dec 2017 16:55:08 -0800 Subject: [PATCH 101/148] Reset ACK in ctor --- libraries/networking/src/udt/Connection.cpp | 7 ++----- libraries/networking/src/udt/SendQueue.cpp | 15 +++++++++++---- libraries/networking/src/udt/SendQueue.h | 4 ++-- 3 files changed, 15 insertions(+), 11 deletions(-) diff --git a/libraries/networking/src/udt/Connection.cpp b/libraries/networking/src/udt/Connection.cpp index 7a31bbeedc..5f632fa25f 100644 --- a/libraries/networking/src/udt/Connection.cpp +++ b/libraries/networking/src/udt/Connection.cpp @@ -116,14 +116,11 @@ SendQueue& Connection::getSendQueue() { if (!_hasReceivedHandshakeACK) { // First time creating a send queue for this connection - _sendQueue = SendQueue::create(_parentSocket, _destination, _initialSequenceNumber - 1); + _sendQueue = SendQueue::create(_parentSocket, _destination, _initialSequenceNumber - 1, _hasReceivedHandshakeACK); _lastReceivedACK = _sendQueue->getCurrentSequenceNumber(); } else { // Connection already has a handshake from a previous send queue - _sendQueue = SendQueue::create(_parentSocket, _destination, _lastReceivedACK); - // This connection has already gone through the handshake - // bypass it in the send queue - _sendQueue->handshakeACK(); + _sendQueue = SendQueue::create(_parentSocket, _destination, _lastReceivedACK, _hasReceivedHandshakeACK); } #ifdef UDT_CONNECTION_DEBUG diff --git a/libraries/networking/src/udt/SendQueue.cpp b/libraries/networking/src/udt/SendQueue.cpp index ef249b8f75..3dbfb35fbe 100644 --- a/libraries/networking/src/udt/SendQueue.cpp +++ b/libraries/networking/src/udt/SendQueue.cpp @@ -61,10 +61,10 @@ private: Mutex2& _mutex2; }; -std::unique_ptr SendQueue::create(Socket* socket, HifiSockAddr destination, SequenceNumber currentSequenceNumber) { +std::unique_ptr SendQueue::create(Socket* socket, HifiSockAddr destination, SequenceNumber currentSequenceNumber, bool hasReceivedHandshakeACK) { Q_ASSERT_X(socket, "SendQueue::create", "Must be called with a valid Socket*"); - auto queue = std::unique_ptr(new SendQueue(socket, destination, currentSequenceNumber)); + auto queue = std::unique_ptr(new SendQueue(socket, destination, currentSequenceNumber, hasReceivedHandshakeACK)); // Setup queue private thread QThread* thread = new QThread; @@ -83,14 +83,21 @@ std::unique_ptr SendQueue::create(Socket* socket, HifiSockAddr destin return queue; } -SendQueue::SendQueue(Socket* socket, HifiSockAddr dest, SequenceNumber currentSequenceNumber) : +SendQueue::SendQueue(Socket* socket, HifiSockAddr dest, SequenceNumber currentSequenceNumber, bool hasReceivedHandshakeACK) : _socket(socket), _destination(dest) { // set our member variables from current sequence number _currentSequenceNumber = currentSequenceNumber; _atomicCurrentSequenceNumber = uint32_t(_currentSequenceNumber); - _lastACKSequenceNumber = uint32_t(_currentSequenceNumber) - 1; + + if (hasReceivedHandshakeACK) { + _lastACKSequenceNumber = uint32_t(_currentSequenceNumber); + } else { + _lastACKSequenceNumber = uint32_t(_currentSequenceNumber - 1); + } + + _hasReceivedHandshakeACK = hasReceivedHandshakeACK; // default the last receiver response to the current time _lastReceiverResponse = QDateTime::currentMSecsSinceEpoch(); diff --git a/libraries/networking/src/udt/SendQueue.h b/libraries/networking/src/udt/SendQueue.h index b6cec15ffd..29fe6b35ff 100644 --- a/libraries/networking/src/udt/SendQueue.h +++ b/libraries/networking/src/udt/SendQueue.h @@ -50,7 +50,7 @@ public: Stopped }; - static std::unique_ptr create(Socket* socket, HifiSockAddr destination, SequenceNumber currentSequenceNumber); + static std::unique_ptr create(Socket* socket, HifiSockAddr destination, SequenceNumber currentSequenceNumber, bool hasReceivedHandshakeACK); virtual ~SendQueue(); @@ -91,7 +91,7 @@ private slots: void run(); private: - SendQueue(Socket* socket, HifiSockAddr dest, SequenceNumber currentSequenceNumber); + SendQueue(Socket* socket, HifiSockAddr dest, SequenceNumber currentSequenceNumber, bool hasReceivedHandshakeACK); SendQueue(SendQueue& other) = delete; SendQueue(SendQueue&& other) = delete; From 34c1c27455a7fdec713bac78b1c9482b6d78a6fc Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Wed, 13 Dec 2017 19:25:24 -0800 Subject: [PATCH 102/148] Keep track of message numbers --- libraries/networking/src/udt/Connection.cpp | 10 ++++++---- libraries/networking/src/udt/Connection.h | 2 ++ libraries/networking/src/udt/PacketQueue.cpp | 2 +- libraries/networking/src/udt/PacketQueue.h | 4 +++- libraries/networking/src/udt/SendQueue.cpp | 19 +++++++++---------- libraries/networking/src/udt/SendQueue.h | 8 ++++++-- 6 files changed, 27 insertions(+), 18 deletions(-) diff --git a/libraries/networking/src/udt/Connection.cpp b/libraries/networking/src/udt/Connection.cpp index 5f632fa25f..fc590c3a66 100644 --- a/libraries/networking/src/udt/Connection.cpp +++ b/libraries/networking/src/udt/Connection.cpp @@ -90,6 +90,9 @@ void Connection::stopSendQueue() { // tell the send queue to stop and be deleted sendQueue->stop(); + + _lastMessageNumber = sendQueue->getCurrentMessageNumber(); + sendQueue->deleteLater(); // wait on the send queue thread so we know the send queue is gone @@ -116,11 +119,11 @@ SendQueue& Connection::getSendQueue() { if (!_hasReceivedHandshakeACK) { // First time creating a send queue for this connection - _sendQueue = SendQueue::create(_parentSocket, _destination, _initialSequenceNumber - 1, _hasReceivedHandshakeACK); + _sendQueue = SendQueue::create(_parentSocket, _destination, _initialSequenceNumber - 1, _lastMessageNumber, _hasReceivedHandshakeACK); _lastReceivedACK = _sendQueue->getCurrentSequenceNumber(); } else { // Connection already has a handshake from a previous send queue - _sendQueue = SendQueue::create(_parentSocket, _destination, _lastReceivedACK, _hasReceivedHandshakeACK); + _sendQueue = SendQueue::create(_parentSocket, _destination, _lastReceivedACK, _lastMessageNumber, _hasReceivedHandshakeACK); } #ifdef UDT_CONNECTION_DEBUG @@ -417,7 +420,6 @@ void Connection::sendHandshakeRequest() { } bool Connection::processReceivedSequenceNumber(SequenceNumber sequenceNumber, int packetSize, int payloadSize) { - if (!_hasReceivedHandshake) { // Refuse to process any packets until we've received the handshake // Send handshake request to re-request a handshake @@ -509,7 +511,7 @@ bool Connection::processReceivedSequenceNumber(SequenceNumber sequenceNumber, in } else { _stats.recordReceivedPackets(payloadSize, packetSize); } - + return !wasDuplicate; } diff --git a/libraries/networking/src/udt/Connection.h b/libraries/networking/src/udt/Connection.h index a13c29adc8..4f979750f9 100644 --- a/libraries/networking/src/udt/Connection.h +++ b/libraries/networking/src/udt/Connection.h @@ -137,6 +137,8 @@ private: SequenceNumber _initialSequenceNumber; // Randomized on Connection creation, identifies connection during re-connect requests SequenceNumber _initialReceiveSequenceNumber; // Randomized by peer Connection on creation, identifies connection during re-connect requests + MessageNumber _lastMessageNumber; + LossList _lossList; // List of all missing packets SequenceNumber _lastReceivedSequenceNumber; // The largest sequence number received from the peer SequenceNumber _lastReceivedACK; // The last ACK received diff --git a/libraries/networking/src/udt/PacketQueue.cpp b/libraries/networking/src/udt/PacketQueue.cpp index 9560f2f187..0560855ecb 100644 --- a/libraries/networking/src/udt/PacketQueue.cpp +++ b/libraries/networking/src/udt/PacketQueue.cpp @@ -15,7 +15,7 @@ using namespace udt; -PacketQueue::PacketQueue() { +PacketQueue::PacketQueue(MessageNumber messageNumber) : _currentMessageNumber(messageNumber) { _channels.emplace_back(new std::list()); } diff --git a/libraries/networking/src/udt/PacketQueue.h b/libraries/networking/src/udt/PacketQueue.h index 2b3d3a4b5b..bc4c5e3432 100644 --- a/libraries/networking/src/udt/PacketQueue.h +++ b/libraries/networking/src/udt/PacketQueue.h @@ -34,7 +34,7 @@ class PacketQueue { using Channels = std::vector; public: - PacketQueue(); + PacketQueue(MessageNumber messageNumber = 0); void queuePacket(PacketPointer packet); void queuePacketList(PacketListPointer packetList); @@ -42,6 +42,8 @@ public: PacketPointer takePacket(); Mutex& getLock() { return _packetsLock; } + + MessageNumber getCurrentMessageNumber() const { return _currentMessageNumber; } private: MessageNumber getNextMessageNumber(); diff --git a/libraries/networking/src/udt/SendQueue.cpp b/libraries/networking/src/udt/SendQueue.cpp index 3dbfb35fbe..43477e4562 100644 --- a/libraries/networking/src/udt/SendQueue.cpp +++ b/libraries/networking/src/udt/SendQueue.cpp @@ -61,10 +61,12 @@ private: Mutex2& _mutex2; }; -std::unique_ptr SendQueue::create(Socket* socket, HifiSockAddr destination, SequenceNumber currentSequenceNumber, bool hasReceivedHandshakeACK) { +std::unique_ptr SendQueue::create(Socket* socket, HifiSockAddr destination, SequenceNumber currentSequenceNumber, + MessageNumber currentMessageNumber, bool hasReceivedHandshakeACK) { Q_ASSERT_X(socket, "SendQueue::create", "Must be called with a valid Socket*"); - auto queue = std::unique_ptr(new SendQueue(socket, destination, currentSequenceNumber, hasReceivedHandshakeACK)); + auto queue = std::unique_ptr(new SendQueue(socket, destination, currentSequenceNumber, + currentMessageNumber, hasReceivedHandshakeACK)); // Setup queue private thread QThread* thread = new QThread; @@ -83,19 +85,16 @@ std::unique_ptr SendQueue::create(Socket* socket, HifiSockAddr destin return queue; } -SendQueue::SendQueue(Socket* socket, HifiSockAddr dest, SequenceNumber currentSequenceNumber, bool hasReceivedHandshakeACK) : +SendQueue::SendQueue(Socket* socket, HifiSockAddr dest, SequenceNumber currentSequenceNumber, + MessageNumber currentMessageNumber, bool hasReceivedHandshakeACK) : _socket(socket), - _destination(dest) + _destination(dest), + _packets(currentMessageNumber) { // set our member variables from current sequence number _currentSequenceNumber = currentSequenceNumber; _atomicCurrentSequenceNumber = uint32_t(_currentSequenceNumber); - - if (hasReceivedHandshakeACK) { - _lastACKSequenceNumber = uint32_t(_currentSequenceNumber); - } else { - _lastACKSequenceNumber = uint32_t(_currentSequenceNumber - 1); - } + _lastACKSequenceNumber = uint32_t(_currentSequenceNumber); _hasReceivedHandshakeACK = hasReceivedHandshakeACK; diff --git a/libraries/networking/src/udt/SendQueue.h b/libraries/networking/src/udt/SendQueue.h index 29fe6b35ff..b33180c1e2 100644 --- a/libraries/networking/src/udt/SendQueue.h +++ b/libraries/networking/src/udt/SendQueue.h @@ -50,7 +50,9 @@ public: Stopped }; - static std::unique_ptr create(Socket* socket, HifiSockAddr destination, SequenceNumber currentSequenceNumber, bool hasReceivedHandshakeACK); + static std::unique_ptr create(Socket* socket, HifiSockAddr destination, + SequenceNumber currentSequenceNumber, MessageNumber currentMessageNumber, + bool hasReceivedHandshakeACK); virtual ~SendQueue(); @@ -58,6 +60,7 @@ public: void queuePacketList(std::unique_ptr packetList); SequenceNumber getCurrentSequenceNumber() const { return SequenceNumber(_atomicCurrentSequenceNumber); } + MessageNumber getCurrentMessageNumber() const { return _packets.getCurrentMessageNumber(); } void setFlowWindowSize(int flowWindowSize) { _flowWindowSize = flowWindowSize; } @@ -91,7 +94,8 @@ private slots: void run(); private: - SendQueue(Socket* socket, HifiSockAddr dest, SequenceNumber currentSequenceNumber, bool hasReceivedHandshakeACK); + SendQueue(Socket* socket, HifiSockAddr dest, SequenceNumber currentSequenceNumber, + MessageNumber currentMessageNumber, bool hasReceivedHandshakeACK); SendQueue(SendQueue& other) = delete; SendQueue(SendQueue&& other) = delete; From cf28fdf188e41bed7304e5f7ac46a562a48e205b Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Thu, 14 Dec 2017 12:07:32 -0800 Subject: [PATCH 103/148] fix message erase in conn, SendQueue ctor order --- libraries/networking/src/udt/Connection.cpp | 13 +++++++++---- libraries/networking/src/udt/Connection.h | 1 - libraries/networking/src/udt/SendQueue.cpp | 4 ++-- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/libraries/networking/src/udt/Connection.cpp b/libraries/networking/src/udt/Connection.cpp index fc590c3a66..2f57523f79 100644 --- a/libraries/networking/src/udt/Connection.cpp +++ b/libraries/networking/src/udt/Connection.cpp @@ -193,11 +193,16 @@ void Connection::queueReceivedMessagePacket(std::unique_ptr packet) { while (pendingMessage.hasAvailablePackets()) { auto packet = pendingMessage.removeNextPacket(); - _parentSocket->messageReceived(std::move(packet)); - } - if (pendingMessage.isComplete()) { - _pendingReceivedMessages.erase(messageNumber); + auto packetPosition = packet->getPacketPosition(); + + _parentSocket->messageReceived(std::move(packet)); + + // if this was the last or only packet, then we can remove the pending message from our hash + if (packetPosition == Packet::PacketPosition::LAST || + packetPosition == Packet::PacketPosition::ONLY) { + _pendingReceivedMessages.erase(messageNumber); + } } } diff --git a/libraries/networking/src/udt/Connection.h b/libraries/networking/src/udt/Connection.h index 4f979750f9..8a96b1ded3 100644 --- a/libraries/networking/src/udt/Connection.h +++ b/libraries/networking/src/udt/Connection.h @@ -37,7 +37,6 @@ class Socket; class PendingReceivedMessage { public: void enqueuePacket(std::unique_ptr packet); - bool isComplete() const { return _hasLastPacket && _numPackets == _packets.size(); } bool hasAvailablePackets() const; std::unique_ptr removeNextPacket(); diff --git a/libraries/networking/src/udt/SendQueue.cpp b/libraries/networking/src/udt/SendQueue.cpp index 43477e4562..e7d1ab104a 100644 --- a/libraries/networking/src/udt/SendQueue.cpp +++ b/libraries/networking/src/udt/SendQueue.cpp @@ -87,9 +87,9 @@ std::unique_ptr SendQueue::create(Socket* socket, HifiSockAddr destin SendQueue::SendQueue(Socket* socket, HifiSockAddr dest, SequenceNumber currentSequenceNumber, MessageNumber currentMessageNumber, bool hasReceivedHandshakeACK) : + _packets(currentMessageNumber), _socket(socket), - _destination(dest), - _packets(currentMessageNumber) + _destination(dest) { // set our member variables from current sequence number _currentSequenceNumber = currentSequenceNumber; From 8a2c31d3421f49bfe14a45f50afe74e7a20a374c Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Thu, 14 Dec 2017 15:30:25 -0800 Subject: [PATCH 104/148] only de-activate the SendQueue when it has nothing to send --- libraries/networking/src/udt/SendQueue.cpp | 22 ---------------------- 1 file changed, 22 deletions(-) diff --git a/libraries/networking/src/udt/SendQueue.cpp b/libraries/networking/src/udt/SendQueue.cpp index e7d1ab104a..4a0500f642 100644 --- a/libraries/networking/src/udt/SendQueue.cpp +++ b/libraries/networking/src/udt/SendQueue.cpp @@ -538,28 +538,6 @@ bool SendQueue::maybeResendPacket() { bool SendQueue::isInactive(bool attemptedToSendPacket) { // check for connection timeout first - // that will be the case if we have had 16 timeouts since hearing back from the client, and it has been - // at least 5 seconds - static const int NUM_TIMEOUTS_BEFORE_INACTIVE = 16; - static const int MIN_MS_BEFORE_INACTIVE = 5 * 1000; - - auto sinceLastResponse = (QDateTime::currentMSecsSinceEpoch() - _lastReceiverResponse); - - if (sinceLastResponse > 0 && - sinceLastResponse >= int64_t(NUM_TIMEOUTS_BEFORE_INACTIVE * (_estimatedTimeout / USECS_PER_MSEC)) && - sinceLastResponse > MIN_MS_BEFORE_INACTIVE) { - // If the flow window has been full for over CONSIDER_INACTIVE_AFTER, - // then signal the queue is inactive and return so it can be cleaned up - -#ifdef UDT_CONNECTION_DEBUG - qCDebug(networking) << "SendQueue to" << _destination << "reached" << NUM_TIMEOUTS_BEFORE_INACTIVE << "timeouts" - << "and" << MIN_MS_BEFORE_INACTIVE << "milliseconds before receiving any ACK/NAK and is now inactive. Stopping."; -#endif - - deactivate(); - return true; - } - if (!attemptedToSendPacket) { // During our processing above we didn't send any packets From 75e56b5daa725310946d37101f5c0c68abbe17eb Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Thu, 14 Dec 2017 15:30:51 -0800 Subject: [PATCH 105/148] make the _lastMessageNumber in Connection default to 0 --- libraries/networking/src/udt/Connection.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/networking/src/udt/Connection.h b/libraries/networking/src/udt/Connection.h index 8a96b1ded3..0017eb204a 100644 --- a/libraries/networking/src/udt/Connection.h +++ b/libraries/networking/src/udt/Connection.h @@ -136,7 +136,7 @@ private: SequenceNumber _initialSequenceNumber; // Randomized on Connection creation, identifies connection during re-connect requests SequenceNumber _initialReceiveSequenceNumber; // Randomized by peer Connection on creation, identifies connection during re-connect requests - MessageNumber _lastMessageNumber; + MessageNumber _lastMessageNumber { 0 }; LossList _lossList; // List of all missing packets SequenceNumber _lastReceivedSequenceNumber; // The largest sequence number received from the peer From a5c951a6662d9028d1256f4d0ddb4dcdbbef68db Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Thu, 14 Dec 2017 15:36:56 -0800 Subject: [PATCH 106/148] remove tracking of last receiver response from SendQueue --- libraries/networking/src/udt/SendQueue.cpp | 16 +--------------- libraries/networking/src/udt/SendQueue.h | 1 - 2 files changed, 1 insertion(+), 16 deletions(-) diff --git a/libraries/networking/src/udt/SendQueue.cpp b/libraries/networking/src/udt/SendQueue.cpp index 4a0500f642..b62624aab9 100644 --- a/libraries/networking/src/udt/SendQueue.cpp +++ b/libraries/networking/src/udt/SendQueue.cpp @@ -97,9 +97,6 @@ SendQueue::SendQueue(Socket* socket, HifiSockAddr dest, SequenceNumber currentSe _lastACKSequenceNumber = uint32_t(_currentSequenceNumber); _hasReceivedHandshakeACK = hasReceivedHandshakeACK; - - // default the last receiver response to the current time - _lastReceiverResponse = QDateTime::currentMSecsSinceEpoch(); } SendQueue::~SendQueue() { @@ -141,9 +138,6 @@ int SendQueue::sendPacket(const Packet& packet) { } void SendQueue::ack(SequenceNumber ack) { - // this is a response from the client, re-set our timeout expiry and our last response time - _lastReceiverResponse = QDateTime::currentMSecsSinceEpoch(); - if (_lastACKSequenceNumber == (uint32_t) ack) { return; } @@ -170,10 +164,7 @@ void SendQueue::ack(SequenceNumber ack) { _emptyCondition.notify_one(); } -void SendQueue::nak(SequenceNumber start, SequenceNumber end) { - // this is a response from the client, re-set our timeout expiry - _lastReceiverResponse = QDateTime::currentMSecsSinceEpoch(); - +void SendQueue::nak(SequenceNumber start, SequenceNumber end) { { std::lock_guard nakLocker(_naksLock); _naks.insert(start, end); @@ -194,9 +185,6 @@ void SendQueue::fastRetransmit(udt::SequenceNumber ack) { } void SendQueue::overrideNAKListFromPacket(ControlPacket& packet) { - // this is a response from the client, re-set our timeout expiry - _lastReceiverResponse = QDateTime::currentMSecsSinceEpoch(); - { std::lock_guard nakLocker(_naksLock); _naks.clear(); @@ -241,8 +229,6 @@ void SendQueue::handshakeACK() { _hasReceivedHandshakeACK = true; } - _lastReceiverResponse = QDateTime::currentMSecsSinceEpoch(); - // Notify on the handshake ACK condition _handshakeACKCondition.notify_one(); } diff --git a/libraries/networking/src/udt/SendQueue.h b/libraries/networking/src/udt/SendQueue.h index b33180c1e2..a11aacdb91 100644 --- a/libraries/networking/src/udt/SendQueue.h +++ b/libraries/networking/src/udt/SendQueue.h @@ -130,7 +130,6 @@ private: std::atomic _estimatedTimeout { 0 }; // Estimated timeout, set from CC std::atomic _syncInterval { udt::DEFAULT_SYN_INTERVAL_USECS }; // Sync interval, set from CC - std::atomic _lastReceiverResponse { 0 }; // Timestamp for the last time we got new data from the receiver (ACK/NAK) std::atomic _flowWindowSize { 0 }; // Flow control window size (number of packets that can be on wire) - set from CC From a4696cc2b3ac311739b43266aa4f876b2b056e2d Mon Sep 17 00:00:00 2001 From: Alexander Ivash Date: Fri, 8 Dec 2017 00:20:35 +0300 Subject: [PATCH 107/148] 8992 Login window is small in tablet --- interface/resources/qml/LoginDialog/LinkAccountBody.qml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/interface/resources/qml/LoginDialog/LinkAccountBody.qml b/interface/resources/qml/LoginDialog/LinkAccountBody.qml index 300bcd46f0..0e2f2a5282 100644 --- a/interface/resources/qml/LoginDialog/LinkAccountBody.qml +++ b/interface/resources/qml/LoginDialog/LinkAccountBody.qml @@ -52,7 +52,11 @@ Item { targetHeight += hifi.dimensions.contentSpacing.y + additionalInformation.height } - parent.width = root.width = Math.max(d.minWidth, Math.min(d.maxWidth, targetWidth)); + var newWidth = Math.max(d.minWidth, Math.min(d.maxWidth, targetWidth)); + if(!isNaN(newWidth)) { + parent.width = root.width = newWidth; + } + parent.height = root.height = Math.max(d.minHeight, Math.min(d.maxHeight, targetHeight)) + (keyboardEnabled && keyboardRaised ? (200 + 2 * hifi.dimensions.contentSpacing.y) : hifi.dimensions.contentSpacing.y); } From 82b94eaacd58d33157017f03c47d5a23198f8ff1 Mon Sep 17 00:00:00 2001 From: Nissim Hadar Date: Thu, 14 Dec 2017 18:50:41 -0800 Subject: [PATCH 108/148] Reduced size of parameters in (shader) function call. --- .../render-utils/src/DeferredGlobalLight.slh | 9 ++++---- libraries/render-utils/src/Haze.slf | 2 +- libraries/render-utils/src/Haze.slh | 22 +++++++++---------- 3 files changed, 17 insertions(+), 16 deletions(-) diff --git a/libraries/render-utils/src/DeferredGlobalLight.slh b/libraries/render-utils/src/DeferredGlobalLight.slh index 9de7c7eb3a..6cdc02b7a5 100644 --- a/libraries/render-utils/src/DeferredGlobalLight.slh +++ b/libraries/render-utils/src/DeferredGlobalLight.slh @@ -218,10 +218,11 @@ vec3 evalGlobalLightingAlphaBlendedWithHaze( // Haze if ((hazeParams.hazeMode & HAZE_MODE_IS_ACTIVE) == HAZE_MODE_IS_ACTIVE) { vec4 colorV4 = computeHazeColor( - vec4(color, 0.0), // fragment original color - vec4(position, 0.0), // fragment position in eye coordinates - vec4(fragEyeVector, 1.0), // fragment position in world coordinates - invViewMat[3]); // eye position in world coordinates + vec4(color, 1.0), // fragment original color + position, // fragment position in eye coordinates + fragEyeVector, // fragment position in world coordinates + invViewMat[3].y // eye height in world coordinates + ); color = colorV4.rgb; } diff --git a/libraries/render-utils/src/Haze.slf b/libraries/render-utils/src/Haze.slf index e394207d16..5f05d52f83 100644 --- a/libraries/render-utils/src/Haze.slf +++ b/libraries/render-utils/src/Haze.slf @@ -53,6 +53,6 @@ void main(void) { vec4 worldFragPos = viewInverse * eyeFragPos; vec4 worldEyePos = viewInverse[3]; - outFragColor = computeHazeColor(fragColor, eyeFragPos, worldFragPos, worldEyePos); + outFragColor = computeHazeColor(fragColor, eyeFragPos.xyz, worldFragPos.xyz, worldEyePos.y); } diff --git a/libraries/render-utils/src/Haze.slh b/libraries/render-utils/src/Haze.slh index 7e74b91ede..2fcf5f4418 100644 --- a/libraries/render-utils/src/Haze.slh +++ b/libraries/render-utils/src/Haze.slh @@ -92,24 +92,24 @@ vec3 computeHazeColorKeyLightAttenuation(vec3 color, vec3 lightDirection, vec3 w } // Input: -// fragColor - fragment original color -// eyeFragPos - fragment position in eye coordinates -// worldFragPos - fragment position in world coordinates -// worldEyePos - eye position in world coordinates +// fragColor - fragment original color +// eyeFragPos - fragment position in eye coordinates +// worldFragPos - fragment position in world coordinates +// worldEyeHeight - eye height in world coordinates // Output: // fragment colour after haze effect // // General algorithm taken from http://www.iquilezles.org/www/articles/fog/fog.htm, with permission // -vec4 computeHazeColor(vec4 fragColor, vec4 eyeFragPos, vec4 worldFragPos, vec4 worldEyePos) { +vec4 computeHazeColor(vec4 fragColor, vec3 eyeFragPos, vec3 worldFragPos, float worldEyeHeight) { // Distance to fragment - float distance = length(eyeFragPos.xyz); + float distance = length(eyeFragPos); // Convert haze colour from uniform into a vec4 vec4 hazeColor = vec4(hazeParams.hazeColor, 1.0); // Directional light component is a function of the angle from the eye, between the fragment and the sun - vec3 eyeFragDir = normalize(worldFragPos.xyz); + vec3 eyeFragDir = normalize(worldFragPos); Light light = getLight(); vec3 lightDirection = getLightDirection(light); @@ -137,12 +137,12 @@ vec4 computeHazeColor(vec4 fragColor, vec4 eyeFragPos, vec4 worldFragPos, vec4 w // Note that the haze base reference affects only the haze density as function of altitude vec3 hazeDensityDistribution = hazeParams.colorModulationFactor * - exp(-hazeParams.hazeHeightFactor * (worldEyePos.y - hazeParams.hazeBaseReference)); + exp(-hazeParams.hazeHeightFactor * (worldEyeHeight - hazeParams.hazeBaseReference)); vec3 hazeIntegral = hazeDensityDistribution * distance; const float slopeThreshold = 0.01; - float deltaHeight = worldFragPos.y - worldEyePos.y; + float deltaHeight = worldFragPos.y - worldEyeHeight; if (abs(deltaHeight) > slopeThreshold) { float t = hazeParams.hazeHeightFactor * deltaHeight; hazeIntegral *= (1.0 - exp (-t)) / t; @@ -165,12 +165,12 @@ vec4 computeHazeColor(vec4 fragColor, vec4 eyeFragPos, vec4 worldFragPos, vec4 w // Note that the haze base reference affects only the haze density as function of altitude float hazeDensityDistribution = hazeParams.hazeRangeFactor * - exp(-hazeParams.hazeHeightFactor * (worldEyePos.y - hazeParams.hazeBaseReference)); + exp(-hazeParams.hazeHeightFactor * (worldEyeHeight - hazeParams.hazeBaseReference)); float hazeIntegral = hazeDensityDistribution * distance; const float slopeThreshold = 0.01; - float deltaHeight = worldFragPos.y - worldEyePos.y; + float deltaHeight = worldFragPos.y - worldEyeHeight; if (abs(deltaHeight) > slopeThreshold) { float t = hazeParams.hazeHeightFactor * deltaHeight; // Protect from wild values From 53e1c57e3b2c4eee5fe08d3b6be3fce9487e148a Mon Sep 17 00:00:00 2001 From: luiscuenca Date: Fri, 15 Dec 2017 13:46:15 -0700 Subject: [PATCH 109/148] Make lasers scale with avatar --- scripts/system/controllers/controllerDispatcher.js | 4 ++++ scripts/system/controllers/grab.js | 1 + 2 files changed, 5 insertions(+) diff --git a/scripts/system/controllers/controllerDispatcher.js b/scripts/system/controllers/controllerDispatcher.js index 915b3b3680..51f927f224 100644 --- a/scripts/system/controllers/controllerDispatcher.js +++ b/scripts/system/controllers/controllerDispatcher.js @@ -412,6 +412,7 @@ Script.include("/~/system/libraries/controllerDispatcherUtils.js"); triggers: [{action: Controller.Standard.LTClick, button: "Focus"}, {action: Controller.Standard.LTClick, button: "Primary"}], posOffset: getGrabPointSphereOffset(Controller.Standard.LeftHand, true), hover: true, + scaleWithAvatar: true, distanceScaleEnd: true, hand: LEFT_HAND }); @@ -421,6 +422,7 @@ Script.include("/~/system/libraries/controllerDispatcherUtils.js"); triggers: [{action: Controller.Standard.RTClick, button: "Focus"}, {action: Controller.Standard.RTClick, button: "Primary"}], posOffset: getGrabPointSphereOffset(Controller.Standard.RightHand, true), hover: true, + scaleWithAvatar: true, distanceScaleEnd: true, hand: RIGHT_HAND }); @@ -431,6 +433,7 @@ Script.include("/~/system/libraries/controllerDispatcherUtils.js"); posOffset: getGrabPointSphereOffset(Controller.Standard.LeftHand, true), triggers: [{action: Controller.Standard.LTClick, button: "Focus"}, {action: Controller.Standard.LTClick, button: "Primary"}], hover: true, + scaleWithAvatar: true, distanceScaleEnd: true, hand: LEFT_HAND }); @@ -441,6 +444,7 @@ Script.include("/~/system/libraries/controllerDispatcherUtils.js"); posOffset: getGrabPointSphereOffset(Controller.Standard.RightHand, true), triggers: [{action: Controller.Standard.RTClick, button: "Focus"}, {action: Controller.Standard.RTClick, button: "Primary"}], hover: true, + scaleWithAvatar: true, distanceScaleEnd: true, hand: RIGHT_HAND }); diff --git a/scripts/system/controllers/grab.js b/scripts/system/controllers/grab.js index 7733ca1d28..a51cea67f8 100644 --- a/scripts/system/controllers/grab.js +++ b/scripts/system/controllers/grab.js @@ -269,6 +269,7 @@ function Grabber() { joint: "Mouse", filter: Picks.PICK_ENTITIES, faceAvatar: true, + scaleWithAvatar: true, enabled: true, renderStates: renderStates }); From 52c4aef72125ed834c444e3a1868aab827621bdb Mon Sep 17 00:00:00 2001 From: SamGondelman Date: Fri, 15 Dec 2017 16:23:53 -0800 Subject: [PATCH 110/148] keep _cacheFile alive --- libraries/gpu/src/gpu/Texture.h | 5 ++--- libraries/gpu/src/gpu/Texture_ktx.cpp | 29 +++++---------------------- 2 files changed, 7 insertions(+), 27 deletions(-) diff --git a/libraries/gpu/src/gpu/Texture.h b/libraries/gpu/src/gpu/Texture.h index 1877b494cf..26de5a0804 100755 --- a/libraries/gpu/src/gpu/Texture.h +++ b/libraries/gpu/src/gpu/Texture.h @@ -324,9 +324,8 @@ public: protected: std::shared_ptr maybeOpenFile() const; - mutable std::mutex _cacheFileCreateMutex; - mutable std::mutex _cacheFileWriteMutex; - mutable std::weak_ptr _cacheFile; + mutable std::mutex _cacheFileMutex; + mutable std::shared_ptr _cacheFile; std::string _filename; cache::FilePointer _cacheEntry; diff --git a/libraries/gpu/src/gpu/Texture_ktx.cpp b/libraries/gpu/src/gpu/Texture_ktx.cpp index 08fc4ec101..49e18aaf78 100644 --- a/libraries/gpu/src/gpu/Texture_ktx.cpp +++ b/libraries/gpu/src/gpu/Texture_ktx.cpp @@ -188,35 +188,17 @@ KtxStorage::KtxStorage(const std::string& filename) : _filename(filename) { } std::shared_ptr KtxStorage::maybeOpenFile() const { - // 1. Try to get the shared ptr - // 2. If it doesn't exist, grab the mutex around its creation - // 3. If it was created before we got the mutex, return it - // 4. Otherwise, create it - - std::shared_ptr file = _cacheFile.lock(); - if (file) { - return file; + if (!_cacheFile) { + _cacheFile = std::make_shared(_filename.c_str()); } - - { - std::lock_guard lock{ _cacheFileCreateMutex }; - - file = _cacheFile.lock(); - if (file) { - return file; - } - - file = std::make_shared(_filename.c_str()); - _cacheFile = file; - } - - return file; + return _cacheFile; } PixelsPointer KtxStorage::getMipFace(uint16 level, uint8 face) const { auto faceOffset = _ktxDescriptor->getMipFaceTexelsOffset(level, face); auto faceSize = _ktxDescriptor->getMipFaceTexelsSize(level, face); if (faceSize != 0 && faceOffset != 0) { + std::lock_guard lock(_cacheFileMutex); auto file = maybeOpenFile(); if (file) { auto storageView = file->createView(faceSize, faceOffset); @@ -262,6 +244,7 @@ void KtxStorage::assignMipData(uint16 level, const storage::StoragePointer& stor return; } + std::lock_guard lock(_cacheFileMutex); auto file = maybeOpenFile(); if (!file) { qWarning() << "Failed to open file to assign mip data " << QString::fromStdString(_filename); @@ -279,8 +262,6 @@ void KtxStorage::assignMipData(uint16 level, const storage::StoragePointer& stor imageData += ktx::IMAGE_SIZE_WIDTH; { - std::lock_guard lock { _cacheFileWriteMutex }; - if (level != _minMipLevelAvailable - 1) { qWarning() << "Invalid level to be stored"; return; From 89795272c77aa379364697d2f7f1aff89690de22 Mon Sep 17 00:00:00 2001 From: Zach Fox Date: Fri, 15 Dec 2017 16:26:13 -0800 Subject: [PATCH 111/148] More security images! --- .../hifi/commerce/wallet/PassphraseChange.qml | 4 -- .../commerce/wallet/SecurityImageChange.qml | 8 ++-- .../commerce/wallet/SecurityImageModel.qml | 43 +++++++++--------- .../wallet/SecurityImageSelection.qml | 4 ++ .../qml/hifi/commerce/wallet/Wallet.qml | 5 +- .../qml/hifi/commerce/wallet/WalletSetup.qml | 1 + .../qml/hifi/commerce/wallet/images/01.jpg | Bin 36764 -> 15058 bytes .../qml/hifi/commerce/wallet/images/02.jpg | Bin 19981 -> 36764 bytes .../qml/hifi/commerce/wallet/images/04.jpg | Bin 14601 -> 43356 bytes .../qml/hifi/commerce/wallet/images/05.jpg | Bin 29209 -> 60512 bytes .../qml/hifi/commerce/wallet/images/06.jpg | Bin 43356 -> 35463 bytes .../qml/hifi/commerce/wallet/images/07.jpg | Bin 0 -> 49002 bytes .../qml/hifi/commerce/wallet/images/08.jpg | Bin 0 -> 40724 bytes .../qml/hifi/commerce/wallet/images/09.jpg | Bin 0 -> 47344 bytes .../qml/hifi/commerce/wallet/images/10.jpg | Bin 0 -> 37168 bytes .../qml/hifi/commerce/wallet/images/11.jpg | Bin 0 -> 28512 bytes .../qml/hifi/commerce/wallet/images/12.jpg | Bin 0 -> 49487 bytes .../qml/hifi/commerce/wallet/images/13.jpg | Bin 0 -> 29695 bytes .../qml/hifi/commerce/wallet/images/14.jpg | Bin 0 -> 53990 bytes .../qml/hifi/commerce/wallet/images/15.jpg | Bin 0 -> 69332 bytes .../qml/hifi/commerce/wallet/images/16.jpg | Bin 0 -> 23987 bytes .../qml/hifi/commerce/wallet/images/17.jpg | Bin 0 -> 39192 bytes .../qml/hifi/commerce/wallet/images/18.jpg | Bin 0 -> 31335 bytes .../qml/hifi/commerce/wallet/images/19.jpg | Bin 0 -> 36785 bytes .../qml/hifi/commerce/wallet/images/20.jpg | Bin 0 -> 81352 bytes .../qml/hifi/commerce/wallet/images/21.jpg | Bin 0 -> 29138 bytes .../qml/hifi/commerce/wallet/images/22.jpg | Bin 0 -> 30512 bytes .../qml/hifi/commerce/wallet/images/23.jpg | Bin 0 -> 51889 bytes .../qml/hifi/commerce/wallet/images/24.jpg | Bin 0 -> 52785 bytes .../qml/hifi/commerce/wallet/images/25.jpg | Bin 0 -> 34525 bytes .../qml/hifi/commerce/wallet/images/26.jpg | Bin 0 -> 39877 bytes .../qml/hifi/commerce/wallet/images/27.jpg | Bin 0 -> 42902 bytes .../qml/hifi/commerce/wallet/images/28.jpg | Bin 0 -> 53251 bytes .../qml/hifi/commerce/wallet/images/29.jpg | Bin 0 -> 31770 bytes .../qml/hifi/commerce/wallet/images/30.jpg | Bin 0 -> 54272 bytes .../qml/hifi/commerce/wallet/images/31.jpg | Bin 0 -> 37252 bytes .../qml/hifi/commerce/wallet/images/32.jpg | Bin 0 -> 54111 bytes .../qml/hifi/commerce/wallet/images/33.jpg | Bin 0 -> 60718 bytes .../qml/hifi/commerce/wallet/images/34.jpg | Bin 0 -> 51530 bytes 39 files changed, 31 insertions(+), 34 deletions(-) create mode 100644 interface/resources/qml/hifi/commerce/wallet/images/07.jpg create mode 100644 interface/resources/qml/hifi/commerce/wallet/images/08.jpg create mode 100644 interface/resources/qml/hifi/commerce/wallet/images/09.jpg create mode 100644 interface/resources/qml/hifi/commerce/wallet/images/10.jpg create mode 100644 interface/resources/qml/hifi/commerce/wallet/images/11.jpg create mode 100644 interface/resources/qml/hifi/commerce/wallet/images/12.jpg create mode 100644 interface/resources/qml/hifi/commerce/wallet/images/13.jpg create mode 100644 interface/resources/qml/hifi/commerce/wallet/images/14.jpg create mode 100644 interface/resources/qml/hifi/commerce/wallet/images/15.jpg create mode 100644 interface/resources/qml/hifi/commerce/wallet/images/16.jpg create mode 100644 interface/resources/qml/hifi/commerce/wallet/images/17.jpg create mode 100644 interface/resources/qml/hifi/commerce/wallet/images/18.jpg create mode 100644 interface/resources/qml/hifi/commerce/wallet/images/19.jpg create mode 100644 interface/resources/qml/hifi/commerce/wallet/images/20.jpg create mode 100644 interface/resources/qml/hifi/commerce/wallet/images/21.jpg create mode 100644 interface/resources/qml/hifi/commerce/wallet/images/22.jpg create mode 100644 interface/resources/qml/hifi/commerce/wallet/images/23.jpg create mode 100644 interface/resources/qml/hifi/commerce/wallet/images/24.jpg create mode 100644 interface/resources/qml/hifi/commerce/wallet/images/25.jpg create mode 100644 interface/resources/qml/hifi/commerce/wallet/images/26.jpg create mode 100644 interface/resources/qml/hifi/commerce/wallet/images/27.jpg create mode 100644 interface/resources/qml/hifi/commerce/wallet/images/28.jpg create mode 100644 interface/resources/qml/hifi/commerce/wallet/images/29.jpg create mode 100644 interface/resources/qml/hifi/commerce/wallet/images/30.jpg create mode 100644 interface/resources/qml/hifi/commerce/wallet/images/31.jpg create mode 100644 interface/resources/qml/hifi/commerce/wallet/images/32.jpg create mode 100644 interface/resources/qml/hifi/commerce/wallet/images/33.jpg create mode 100644 interface/resources/qml/hifi/commerce/wallet/images/34.jpg diff --git a/interface/resources/qml/hifi/commerce/wallet/PassphraseChange.qml b/interface/resources/qml/hifi/commerce/wallet/PassphraseChange.qml index a75d511793..91d2ab9f7f 100644 --- a/interface/resources/qml/hifi/commerce/wallet/PassphraseChange.qml +++ b/interface/resources/qml/hifi/commerce/wallet/PassphraseChange.qml @@ -25,10 +25,6 @@ Item { id: root; - SecurityImageModel { - id: securityImageModel; - } - // Username Text RalewayRegular { id: usernameText; diff --git a/interface/resources/qml/hifi/commerce/wallet/SecurityImageChange.qml b/interface/resources/qml/hifi/commerce/wallet/SecurityImageChange.qml index 7f767060f6..050b60159f 100644 --- a/interface/resources/qml/hifi/commerce/wallet/SecurityImageChange.qml +++ b/interface/resources/qml/hifi/commerce/wallet/SecurityImageChange.qml @@ -26,10 +26,6 @@ Item { id: root; property bool justSubmitted: false; - SecurityImageModel { - id: securityImageModel; - } - Hifi.QmlCommerce { id: commerce; @@ -213,4 +209,8 @@ Item { securityImageSubmitButton.enabled = true; securityImageSubmitButton.text = "Submit"; } + + function initModel() { + securityImageSelection.initModel(); + } } diff --git a/interface/resources/qml/hifi/commerce/wallet/SecurityImageModel.qml b/interface/resources/qml/hifi/commerce/wallet/SecurityImageModel.qml index 7b1434aa3c..b8e9db09ab 100644 --- a/interface/resources/qml/hifi/commerce/wallet/SecurityImageModel.qml +++ b/interface/resources/qml/hifi/commerce/wallet/SecurityImageModel.qml @@ -15,29 +15,28 @@ import QtQuick 2.5 ListModel { id: root; - ListElement{ - sourcePath: "images/01.jpg" - securityImageEnumValue: 1; + + function initModel() { + var array = []; + while (array.length < 6) { + // We currently have 34 security images to choose from + var randomNumber = Math.floor(Math.random() * 34) + 1; + if (array.indexOf(randomNumber) > -1) { + continue; + } + array[array.length] = randomNumber; + } + + var modelElement; + + for (var i = 0; i < 6; i++) { + modelElement = { "sourcePath":"images/" + addLeadingZero(array[i]) + ".jpg", "securityImageEnumValue": (i + 1) } + root.insert(i, modelElement); + } } - ListElement{ - sourcePath: "images/02.jpg" - securityImageEnumValue: 2; - } - ListElement{ - sourcePath: "images/03.jpg" - securityImageEnumValue: 3; - } - ListElement{ - sourcePath: "images/04.jpg" - securityImageEnumValue: 4; - } - ListElement{ - sourcePath: "images/05.jpg" - securityImageEnumValue: 5; - } - ListElement{ - sourcePath: "images/06.jpg" - securityImageEnumValue: 6; + + function addLeadingZero(n) { + return n < 10 ? '0' + n : '' + n; } function getImagePathFromImageID(imageID) { diff --git a/interface/resources/qml/hifi/commerce/wallet/SecurityImageSelection.qml b/interface/resources/qml/hifi/commerce/wallet/SecurityImageSelection.qml index e12332cd0c..1f5e67eaa5 100644 --- a/interface/resources/qml/hifi/commerce/wallet/SecurityImageSelection.qml +++ b/interface/resources/qml/hifi/commerce/wallet/SecurityImageSelection.qml @@ -95,6 +95,10 @@ Item { function getSelectedImageIndex() { return gridModel.get(securityImageGrid.currentIndex).securityImageEnumValue; } + + function initModel() { + gridModel.initModel(); + } // // FUNCTION DEFINITIONS END // diff --git a/interface/resources/qml/hifi/commerce/wallet/Wallet.qml b/interface/resources/qml/hifi/commerce/wallet/Wallet.qml index ac05bf7c84..bed99e4f0f 100644 --- a/interface/resources/qml/hifi/commerce/wallet/Wallet.qml +++ b/interface/resources/qml/hifi/commerce/wallet/Wallet.qml @@ -82,10 +82,6 @@ Rectangle { } } - SecurityImageModel { - id: securityImageModel; - } - HifiCommerceCommon.CommerceLightbox { id: lightboxPopup; visible: false; @@ -342,6 +338,7 @@ Rectangle { passphraseChange.clearPassphraseFields(); passphraseChange.resetSubmitButton(); } else if (msg.method === 'walletSecurity_changeSecurityImage') { + securityImageChange.initModel(); root.activeView = "securityImageChange"; } } diff --git a/interface/resources/qml/hifi/commerce/wallet/WalletSetup.qml b/interface/resources/qml/hifi/commerce/wallet/WalletSetup.qml index d7859d2800..1f9b56ca22 100644 --- a/interface/resources/qml/hifi/commerce/wallet/WalletSetup.qml +++ b/interface/resources/qml/hifi/commerce/wallet/WalletSetup.qml @@ -236,6 +236,7 @@ Item { height: 50; text: "Set Up Wallet"; onClicked: { + securityImageSelection.initModel(); root.activeView = "step_2"; } } diff --git a/interface/resources/qml/hifi/commerce/wallet/images/01.jpg b/interface/resources/qml/hifi/commerce/wallet/images/01.jpg index 821be6c584d86455df30a882481ae210048bb294..199920a32d7a1e0bafba3dad4b7bedd02895afe4 100644 GIT binary patch literal 15058 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 diff --git a/interface/resources/qml/hifi/commerce/wallet/images/02.jpg b/interface/resources/qml/hifi/commerce/wallet/images/02.jpg index cfcd3e38bf5e0bfd32e3d84652ed3d90ef9047b2..821be6c584d86455df30a882481ae210048bb294 100644 GIT binary patch literal 36764 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 literal 19981 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 Wd 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 diff --git a/interface/resources/qml/hifi/commerce/wallet/images/05.jpg b/interface/resources/qml/hifi/commerce/wallet/images/05.jpg index c6ce0ac0a1b64c0995bfc118a91e44fac4e19e8e..da73727dea41864b85f0ca64e706667bb2df6c3e 100644 GIT binary patch literal 60512 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 literal 0 HcmV?d00001 diff --git a/interface/resources/qml/hifi/commerce/wallet/images/14.jpg b/interface/resources/qml/hifi/commerce/wallet/images/14.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8de661e58eee90e3f8050ab0153b14e4a231d757 GIT binary patch literal 53990 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 GfB)He-+KT6 literal 0 HcmV?d00001 diff --git a/interface/resources/qml/hifi/commerce/wallet/images/15.jpg b/interface/resources/qml/hifi/commerce/wallet/images/15.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f0ac801b89f72e4d841cb93d815f8427ddb840d0 GIT binary patch literal 69332 zcmbT3bx@qo*5{uQd~gZw?(PsA2A9Fz-JJjdg1fs8K1gtf5Zpp=NeBTFJc1@bY%BL} zz4y0UwYzWa=bz_Wr%ylKN4l!}&(@!PfLuAm)d>LLa83Xd_z!Kg;~(+Xevo`(5Qx)1{~XU&sER5Ze3r1poj@7XSbu z2S%6{u>90pNXj%0D#H=YUh7z?tl6GTg&~`4xU~P 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 literal 0 HcmV?d00001 diff --git a/interface/resources/qml/hifi/commerce/wallet/images/17.jpg b/interface/resources/qml/hifi/commerce/wallet/images/17.jpg new file mode 100644 index 0000000000000000000000000000000000000000..75e811ee36af45ba836b5b1c7f977a792ee6751f GIT binary patch literal 39192 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%0AQ2j*BomzH6XaM> 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 aB2t7d;11s4>HEKZ@5WZBr_d)7EC1QbfVs{9 literal 0 HcmV?d00001 diff --git a/interface/resources/qml/hifi/commerce/wallet/images/18.jpg b/interface/resources/qml/hifi/commerce/wallet/images/18.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e4ca0b6f2888749c030f92c5a0308f22e4b6ebf9 GIT binary patch literal 31335 zcmbT4byQT}`|r;L-7$1`hXNucHFOT$k}|+hQi>?uUE&bZF*MTMNGaXYpfsq2B6^qK z?_Iy|=iasMy}xx||D5-E_Os94PwchMIe(V^YymXz0HhNDsH^heEzNF z|7r)6y8{4#|L)n-0p;*l4*~!X?dR+0000mz001KWkdFQU0GR^-fWyrfg#-Y|&EL5w zN86_W044lu_i?m$1^}oC004yEh6p79fXV;>F5#1ZXuE%CAIAWnzY!~Wcs}z+K5_P8 z;j!ms5qbfn_CujxRQkELkS7N zdqSfBNZ^&B}jl z9Qgo15)J^(AO8^#)!%+`_VMwQ5*GIN_ZLDs+6(QLV^MZ= zvh{WIVfmX>dk;4cUvHMDp0@UmEQ0@g6aRlt{0INohXBIS$ z5Fj(qW6%?jJIELG0u%;{1Eqq{paM_@s2I02}ra{Y~EzkkzE9fT}0wx4gf*HYF zU}3N%SOKgFHUwLNpMbr<&%xo~L~s_k5L^Xr2KRx-!Smov@DcbD0ze2LR1j8(AVd
8Fwv! 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 literal 0 HcmV?d00001 diff --git a/interface/resources/qml/hifi/commerce/wallet/images/24.jpg b/interface/resources/qml/hifi/commerce/wallet/images/24.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e481a587a5a02bc390626d6228dced5cea79f382 GIT binary patch literal 52785 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 A*8l(j literal 0 HcmV?d00001 diff --git a/interface/resources/qml/hifi/commerce/wallet/images/25.jpg b/interface/resources/qml/hifi/commerce/wallet/images/25.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1300edf984d78e32ed723ec348a8713916fe1905 GIT binary patch literal 34525 zcmbT3byQT}`|r;LLw7oabhiwRQbS00cMikQDV-A1p;FS_-6E+7NP~c+fHa7L0_t6U zzjyt{d3;y+0Q?r^Y z-~uo}2moyCygfAZl=T0;S{13l=&h?P|DR?4agtO@0RZI3-?Ntf5&$}40DxxYKQ`7v z03ePAfc6jnh==NLzc~B&ct{Ee`1||wqa5t`|0eXm_)`0%<=|%Lz-Wka@JG2hF)Fyb z*`s_=?rw}IxBpXx|39bwZ~VKj0RSK`{S8o9@dG3uC;-UG1OO$+2O#DJ004mgt8VJJ zhQQyGXLNu6-+lit{&kxFSHLL%0D!$wPXFp31zmkcJ6|uqfBXDBmH-xj2M_}kz&(Hg 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 aArNhK0>uQMXde1=V=W0F#aXLxEC1O?H5GyY literal 0 HcmV?d00001 diff --git a/interface/resources/qml/hifi/commerce/wallet/images/26.jpg b/interface/resources/qml/hifi/commerce/wallet/images/26.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9e3aaf93830dd66a17b35076935a2886459ba2b7 GIT binary patch literal 39877 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 literal 0 HcmV?d00001 diff --git a/interface/resources/qml/hifi/commerce/wallet/images/28.jpg b/interface/resources/qml/hifi/commerce/wallet/images/28.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8f1580ab2180f4026d28eaab45c3e9eccd575e31 GIT binary patch literal 53251 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 z

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 literal 0 HcmV?d00001 diff --git a/interface/resources/qml/hifi/commerce/wallet/images/29.jpg b/interface/resources/qml/hifi/commerce/wallet/images/29.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fdfb4438ecbc122a5b0d6590aa20d27360158d01 GIT binary patch literal 31770 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 PP!H$NcS#iAdTamLpD^Es literal 0 HcmV?d00001 diff --git a/interface/resources/qml/hifi/commerce/wallet/images/32.jpg b/interface/resources/qml/hifi/commerce/wallet/images/32.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b987c44e134b897169ef0c621cd8abe254659ceb GIT binary patch literal 54111 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%0Aux*g?u6!{NkH#xdLR3sM1@kGynJbt-YXbJljQ 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 k1gik^Xjb=0w4eY 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⪻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 literal 0 HcmV?d00001 From 3477aa57a8980413a66d7cd2ed3c55f03eeadd9a Mon Sep 17 00:00:00 2001 From: SamGondelman Date: Fri, 15 Dec 2017 16:36:07 -0800 Subject: [PATCH 112/148] remove extra recycle --- .../src/display-plugins/OpenGLDisplayPlugin.cpp | 5 ----- 1 file changed, 5 deletions(-) diff --git a/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.cpp b/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.cpp index 0993daaa8b..cb9d06dce1 100644 --- a/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.cpp +++ b/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.cpp @@ -685,11 +685,6 @@ void OpenGLDisplayPlugin::present() { } incrementPresentCount(); - { - PROFILE_RANGE_EX(render, "recycle", 0xff00ff00, frameId) - _gpuContext->recycle(); - } - if (_currentFrame) { { withPresentThreadLock([&] { From e2df9e29e20a5944d85817b14180fb137833749f Mon Sep 17 00:00:00 2001 From: "Anthony J. Thibault" Date: Fri, 15 Dec 2017 16:46:27 -0800 Subject: [PATCH 113/148] Fix for crash in AnimSkeleton::getNumJoints() When initAnimGraph is called it asynchronously loads the Animation graph in the background. If the model url is changed, or the Model is deleted in between the initial load and it's completion, It's possible to access a bad Rig::_animSkeleton pointer. The fix is to hold onto the _animSkeleton pointer via a weak ref. --- libraries/animation/src/Rig.cpp | 13 +++++++++++-- libraries/animation/src/Rig.h | 2 +- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/libraries/animation/src/Rig.cpp b/libraries/animation/src/Rig.cpp index 78aa1f4ba8..44745c5c2d 100644 --- a/libraries/animation/src/Rig.cpp +++ b/libraries/animation/src/Rig.cpp @@ -1641,9 +1641,17 @@ void Rig::initAnimGraph(const QUrl& url) { // load the anim graph _animLoader.reset(new AnimNodeLoader(url)); _animLoading = true; - connect(_animLoader.get(), &AnimNodeLoader::success, [this](AnimNode::Pointer nodeIn) { + std::weak_ptr weakSkeletonPtr = _animSkeleton; + connect(_animLoader.get(), &AnimNodeLoader::success, [this, weakSkeletonPtr](AnimNode::Pointer nodeIn) { _animNode = nodeIn; - _animNode->setSkeleton(_animSkeleton); + + // abort load if the previous skeleton was deleted. + auto sharedSkeletonPtr = weakSkeletonPtr.lock(); + if (!sharedSkeletonPtr) { + return; + } + + _animNode->setSkeleton(sharedSkeletonPtr); if (_userAnimState.clipNodeEnum != UserAnimState::None) { // restore the user animation we had before reset. @@ -1651,6 +1659,7 @@ void Rig::initAnimGraph(const QUrl& url) { _userAnimState = { UserAnimState::None, "", 30.0f, false, 0.0f, 0.0f }; overrideAnimation(origState.url, origState.fps, origState.loop, origState.firstFrame, origState.lastFrame); } + // restore the role animations we had before reset. for (auto& roleAnimState : _roleAnimStates) { auto roleState = roleAnimState.second; diff --git a/libraries/animation/src/Rig.h b/libraries/animation/src/Rig.h index e738ad1c19..1ec4d9527f 100644 --- a/libraries/animation/src/Rig.h +++ b/libraries/animation/src/Rig.h @@ -31,7 +31,7 @@ class AnimInverseKinematics; // Rig instances are reentrant. // However only specific methods thread-safe. Noted below. -class Rig : public QObject, public std::enable_shared_from_this { +class Rig : public QObject { Q_OBJECT public: struct StateHandler { From 3ae52c0e0ef2cc54b2c31c6e02ddb71e7a13b6c8 Mon Sep 17 00:00:00 2001 From: SamGondelman Date: Fri, 15 Dec 2017 17:52:48 -0800 Subject: [PATCH 114/148] clear all _cacheFiles on recycle --- libraries/gpu-gl/src/gpu/gl/GLBackend.cpp | 2 +- libraries/gpu/src/gpu/Texture.h | 7 ++++++- libraries/gpu/src/gpu/Texture_ktx.cpp | 18 ++++++++++++++++-- 3 files changed, 23 insertions(+), 4 deletions(-) diff --git a/libraries/gpu-gl/src/gpu/gl/GLBackend.cpp b/libraries/gpu-gl/src/gpu/gl/GLBackend.cpp index 6fb0d7b152..fa336665a5 100644 --- a/libraries/gpu-gl/src/gpu/gl/GLBackend.cpp +++ b/libraries/gpu-gl/src/gpu/gl/GLBackend.cpp @@ -772,7 +772,7 @@ void GLBackend::recycle() const { GLVariableAllocationSupport::manageMemory(); GLVariableAllocationSupport::_frameTexturesCreated = 0; - + Texture::KtxStorage::clearKtxFiles(); } void GLBackend::setCameraCorrection(const Mat4& correction) { diff --git a/libraries/gpu/src/gpu/Texture.h b/libraries/gpu/src/gpu/Texture.h index 26de5a0804..10edd895c0 100755 --- a/libraries/gpu/src/gpu/Texture.h +++ b/libraries/gpu/src/gpu/Texture.h @@ -321,10 +321,15 @@ public: void reset() override { } + // Don't keep files open forever. We close them at the beginning of each frame (GLBackend::recycle) + static std::vector, std::shared_ptr>> _cachedKtxFiles; + static std::mutex _cachedKtxFilesMutex; + static void clearKtxFiles(); + protected: std::shared_ptr maybeOpenFile() const; - mutable std::mutex _cacheFileMutex; + mutable std::shared_ptr _cacheFileMutex { std::make_shared() }; mutable std::shared_ptr _cacheFile; std::string _filename; diff --git a/libraries/gpu/src/gpu/Texture_ktx.cpp b/libraries/gpu/src/gpu/Texture_ktx.cpp index 49e18aaf78..46804b4b44 100644 --- a/libraries/gpu/src/gpu/Texture_ktx.cpp +++ b/libraries/gpu/src/gpu/Texture_ktx.cpp @@ -23,6 +23,9 @@ using namespace gpu; using PixelsPointer = Texture::PixelsPointer; using KtxStorage = Texture::KtxStorage; +std::vector, std::shared_ptr>> KtxStorage::_cachedKtxFiles; +std::mutex KtxStorage::_cachedKtxFilesMutex; + struct GPUKTXPayload { using Version = uint8; @@ -190,15 +193,26 @@ KtxStorage::KtxStorage(const std::string& filename) : _filename(filename) { std::shared_ptr KtxStorage::maybeOpenFile() const { if (!_cacheFile) { _cacheFile = std::make_shared(_filename.c_str()); + std::lock_guard lock(KtxStorage::_cachedKtxFilesMutex); + _cachedKtxFiles.emplace_back(_cacheFile, _cacheFileMutex); } return _cacheFile; } +void KtxStorage::clearKtxFiles() { + std::lock_guard lock(KtxStorage::_cachedKtxFilesMutex); + for (auto& cacheFileAndMutex : KtxStorage::_cachedKtxFiles) { + std::lock_guard lock(*(cacheFileAndMutex.second)); + cacheFileAndMutex.first.reset(); + } + _cachedKtxFiles.clear(); +} + PixelsPointer KtxStorage::getMipFace(uint16 level, uint8 face) const { auto faceOffset = _ktxDescriptor->getMipFaceTexelsOffset(level, face); auto faceSize = _ktxDescriptor->getMipFaceTexelsSize(level, face); if (faceSize != 0 && faceOffset != 0) { - std::lock_guard lock(_cacheFileMutex); + std::lock_guard lock(*_cacheFileMutex); auto file = maybeOpenFile(); if (file) { auto storageView = file->createView(faceSize, faceOffset); @@ -244,7 +258,7 @@ void KtxStorage::assignMipData(uint16 level, const storage::StoragePointer& stor return; } - std::lock_guard lock(_cacheFileMutex); + std::lock_guard lock(*_cacheFileMutex); auto file = maybeOpenFile(); if (!file) { qWarning() << "Failed to open file to assign mip data " << QString::fromStdString(_filename); From d69297c02e9c9724cf093ad6cd1a5c09c933536f Mon Sep 17 00:00:00 2001 From: Nissim Hadar Date: Sat, 16 Dec 2017 00:22:26 -0800 Subject: [PATCH 115/148] Replace `evalGlobalLightingAlphaBlended` with `evalGlobalLightingAlphaBlendedWithHaze` in all shaders. --- libraries/render-utils/src/forward_model_translucent.slf | 2 +- libraries/render-utils/src/model_translucent_fade.slf | 2 +- libraries/render-utils/src/overlay3D_model_translucent.slf | 2 +- libraries/render-utils/src/simple_transparent_textured.slf | 2 +- libraries/render-utils/src/simple_transparent_textured_fade.slf | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/libraries/render-utils/src/forward_model_translucent.slf b/libraries/render-utils/src/forward_model_translucent.slf index 52e8ce50e7..906393db1f 100644 --- a/libraries/render-utils/src/forward_model_translucent.slf +++ b/libraries/render-utils/src/forward_model_translucent.slf @@ -66,7 +66,7 @@ void main(void) { TransformCamera cam = getTransformCamera(); - _fragColor = vec4(evalGlobalLightingAlphaBlended( + _fragColor = vec4(evalGlobalLightingAlphaBlendedWithHaze( cam._viewInverse, 1.0, occlusionTex, diff --git a/libraries/render-utils/src/model_translucent_fade.slf b/libraries/render-utils/src/model_translucent_fade.slf index c46b396ebc..9d5477304c 100644 --- a/libraries/render-utils/src/model_translucent_fade.slf +++ b/libraries/render-utils/src/model_translucent_fade.slf @@ -76,7 +76,7 @@ void main(void) { TransformCamera cam = getTransformCamera(); - _fragColor = vec4(evalGlobalLightingAlphaBlended( + _fragColor = vec4(evalGlobalLightingAlphaBlendedWithHaze( cam._viewInverse, 1.0, occlusionTex, diff --git a/libraries/render-utils/src/overlay3D_model_translucent.slf b/libraries/render-utils/src/overlay3D_model_translucent.slf index 748eea329c..b26e70f465 100644 --- a/libraries/render-utils/src/overlay3D_model_translucent.slf +++ b/libraries/render-utils/src/overlay3D_model_translucent.slf @@ -65,7 +65,7 @@ void main(void) { vec3 fragNormal; <$transformEyeToWorldDir(cam, _normal, fragNormal)$> - vec4 color = vec4(evalGlobalLightingAlphaBlended( + vec4 color = vec4(evalGlobalLightingAlphaBlendedWithHaze( cam._viewInverse, 1.0, occlusionTex, diff --git a/libraries/render-utils/src/simple_transparent_textured.slf b/libraries/render-utils/src/simple_transparent_textured.slf index b9eb921e9d..b16b19c8b4 100644 --- a/libraries/render-utils/src/simple_transparent_textured.slf +++ b/libraries/render-utils/src/simple_transparent_textured.slf @@ -45,7 +45,7 @@ void main(void) { TransformCamera cam = getTransformCamera(); - _fragColor0 = vec4(evalGlobalLightingAlphaBlended( + _fragColor0 = vec4(evalGlobalLightingAlphaBlendedWithHaze( cam._viewInverse, 1.0, 1.0, diff --git a/libraries/render-utils/src/simple_transparent_textured_fade.slf b/libraries/render-utils/src/simple_transparent_textured_fade.slf index 20c7907bbe..ad260210a7 100644 --- a/libraries/render-utils/src/simple_transparent_textured_fade.slf +++ b/libraries/render-utils/src/simple_transparent_textured_fade.slf @@ -57,7 +57,7 @@ void main(void) { TransformCamera cam = getTransformCamera(); - _fragColor0 = vec4(evalGlobalLightingAlphaBlended( + _fragColor0 = vec4(evalGlobalLightingAlphaBlendedWithHaze( cam._viewInverse, 1.0, 1.0, From 5e194102939e558c39ea6c7a63d4ffeb3e527a8d Mon Sep 17 00:00:00 2001 From: David Rowe Date: Sun, 17 Dec 2017 15:23:40 +1300 Subject: [PATCH 116/148] Fix handshake satyhing on when release "x" if Ctrl or similar pressed --- scripts/system/makeUserConnection.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/scripts/system/makeUserConnection.js b/scripts/system/makeUserConnection.js index fedadbb2b4..d9003ffeaa 100644 --- a/scripts/system/makeUserConnection.js +++ b/scripts/system/makeUserConnection.js @@ -898,8 +898,7 @@ } } function keyReleaseEvent(event) { - if ((event.text.toUpperCase() === "X") && !event.isAutoRepeat && !event.isShifted && !event.isMeta && !event.isControl - && !event.isAlt) { + if (event.text.toUpperCase() === "X" && !event.isAutoRepeat) { updateTriggers(0.0, true, Controller.Standard.RightHand); } } From 6990dda48d9d4504f732871968a44da3ff9cd5df Mon Sep 17 00:00:00 2001 From: Sam Gondelman Date: Sun, 17 Dec 2017 15:56:34 -0800 Subject: [PATCH 117/148] cr and cleanup --- libraries/gpu-gl/src/gpu/gl/GLBackend.cpp | 2 +- libraries/gpu/src/gpu/Texture.h | 7 ++++--- libraries/gpu/src/gpu/Texture_ktx.cpp | 13 ++++++++----- 3 files changed, 13 insertions(+), 9 deletions(-) diff --git a/libraries/gpu-gl/src/gpu/gl/GLBackend.cpp b/libraries/gpu-gl/src/gpu/gl/GLBackend.cpp index fa336665a5..f93d430152 100644 --- a/libraries/gpu-gl/src/gpu/gl/GLBackend.cpp +++ b/libraries/gpu-gl/src/gpu/gl/GLBackend.cpp @@ -772,7 +772,7 @@ void GLBackend::recycle() const { GLVariableAllocationSupport::manageMemory(); GLVariableAllocationSupport::_frameTexturesCreated = 0; - Texture::KtxStorage::clearKtxFiles(); + Texture::KtxStorage::releaseOpenKtxFiles(); } void GLBackend::setCameraCorrection(const Mat4& correction) { diff --git a/libraries/gpu/src/gpu/Texture.h b/libraries/gpu/src/gpu/Texture.h index 10edd895c0..7c087fec2b 100755 --- a/libraries/gpu/src/gpu/Texture.h +++ b/libraries/gpu/src/gpu/Texture.h @@ -322,9 +322,7 @@ public: void reset() override { } // Don't keep files open forever. We close them at the beginning of each frame (GLBackend::recycle) - static std::vector, std::shared_ptr>> _cachedKtxFiles; - static std::mutex _cachedKtxFilesMutex; - static void clearKtxFiles(); + static void releaseOpenKtxFiles(); protected: std::shared_ptr maybeOpenFile() const; @@ -332,6 +330,9 @@ public: mutable std::shared_ptr _cacheFileMutex { std::make_shared() }; mutable std::shared_ptr _cacheFile; + static std::vector, std::shared_ptr>> _cachedKtxFiles; + static std::mutex _cachedKtxFilesMutex; + std::string _filename; cache::FilePointer _cacheEntry; std::atomic _minMipLevelAvailable; diff --git a/libraries/gpu/src/gpu/Texture_ktx.cpp b/libraries/gpu/src/gpu/Texture_ktx.cpp index 46804b4b44..8b054816bb 100644 --- a/libraries/gpu/src/gpu/Texture_ktx.cpp +++ b/libraries/gpu/src/gpu/Texture_ktx.cpp @@ -193,19 +193,22 @@ KtxStorage::KtxStorage(const std::string& filename) : _filename(filename) { std::shared_ptr KtxStorage::maybeOpenFile() const { if (!_cacheFile) { _cacheFile = std::make_shared(_filename.c_str()); - std::lock_guard lock(KtxStorage::_cachedKtxFilesMutex); + std::lock_guard lock(_cachedKtxFilesMutex); _cachedKtxFiles.emplace_back(_cacheFile, _cacheFileMutex); } return _cacheFile; } -void KtxStorage::clearKtxFiles() { - std::lock_guard lock(KtxStorage::_cachedKtxFilesMutex); - for (auto& cacheFileAndMutex : KtxStorage::_cachedKtxFiles) { +void KtxStorage::releaseOpenKtxFiles() { + std::vector, std::shared_ptr>> localKtxFiles; + { + std::lock_guard lock(_cachedKtxFilesMutex); + localKtxFiles.swap(_cachedKtxFiles); + } + for (auto& cacheFileAndMutex : localKtxFiles) { std::lock_guard lock(*(cacheFileAndMutex.second)); cacheFileAndMutex.first.reset(); } - _cachedKtxFiles.clear(); } PixelsPointer KtxStorage::getMipFace(uint16 level, uint8 face) const { From 6814dfcbfc5eee145e6201ebb86de729842952bf Mon Sep 17 00:00:00 2001 From: Sam Gondelman Date: Sun, 17 Dec 2017 22:09:20 -0800 Subject: [PATCH 118/148] weak_ptr _cacheFile --- libraries/gpu/src/gpu/Texture.h | 2 +- libraries/gpu/src/gpu/Texture_ktx.cpp | 22 +++++++++++++++++----- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/libraries/gpu/src/gpu/Texture.h b/libraries/gpu/src/gpu/Texture.h index 7c087fec2b..06208179e0 100755 --- a/libraries/gpu/src/gpu/Texture.h +++ b/libraries/gpu/src/gpu/Texture.h @@ -328,7 +328,7 @@ public: std::shared_ptr maybeOpenFile() const; mutable std::shared_ptr _cacheFileMutex { std::make_shared() }; - mutable std::shared_ptr _cacheFile; + mutable std::weak_ptr _cacheFile; static std::vector, std::shared_ptr>> _cachedKtxFiles; static std::mutex _cachedKtxFilesMutex; diff --git a/libraries/gpu/src/gpu/Texture_ktx.cpp b/libraries/gpu/src/gpu/Texture_ktx.cpp index 8b054816bb..883d9abf15 100644 --- a/libraries/gpu/src/gpu/Texture_ktx.cpp +++ b/libraries/gpu/src/gpu/Texture_ktx.cpp @@ -190,13 +190,25 @@ KtxStorage::KtxStorage(const std::string& filename) : _filename(filename) { } } +// maybeOpenFile should be called with _cacheFileMutex already held to avoid modifying the file from multiple threads std::shared_ptr KtxStorage::maybeOpenFile() const { - if (!_cacheFile) { - _cacheFile = std::make_shared(_filename.c_str()); - std::lock_guard lock(_cachedKtxFilesMutex); - _cachedKtxFiles.emplace_back(_cacheFile, _cacheFileMutex); + // Try to get the shared_ptr + std::shared_ptr file = _cacheFile.lock(); + if (file) { + return file; } - return _cacheFile; + + // If the file isn't open, create it and save a weak_ptr to it + file = std::make_shared(_filename.c_str()); + _cacheFile = file; + + { + // Add the shared_ptr to the global list of open KTX files, to be released at the beginning of the next present thread frame + std::lock_guard lock(_cachedKtxFilesMutex); + _cachedKtxFiles.emplace_back(file, _cacheFileMutex); + } + + return file; } void KtxStorage::releaseOpenKtxFiles() { From 355ceddcc6a0b839bb20a515fc329d6939b98e68 Mon Sep 17 00:00:00 2001 From: SamGondelman Date: Fri, 15 Dec 2017 16:23:53 -0800 Subject: [PATCH 119/148] keep _cacheFile alive --- libraries/gpu/src/gpu/Texture.h | 5 ++--- libraries/gpu/src/gpu/Texture_ktx.cpp | 29 +++++---------------------- 2 files changed, 7 insertions(+), 27 deletions(-) diff --git a/libraries/gpu/src/gpu/Texture.h b/libraries/gpu/src/gpu/Texture.h index 1877b494cf..26de5a0804 100755 --- a/libraries/gpu/src/gpu/Texture.h +++ b/libraries/gpu/src/gpu/Texture.h @@ -324,9 +324,8 @@ public: protected: std::shared_ptr maybeOpenFile() const; - mutable std::mutex _cacheFileCreateMutex; - mutable std::mutex _cacheFileWriteMutex; - mutable std::weak_ptr _cacheFile; + mutable std::mutex _cacheFileMutex; + mutable std::shared_ptr _cacheFile; std::string _filename; cache::FilePointer _cacheEntry; diff --git a/libraries/gpu/src/gpu/Texture_ktx.cpp b/libraries/gpu/src/gpu/Texture_ktx.cpp index 08fc4ec101..49e18aaf78 100644 --- a/libraries/gpu/src/gpu/Texture_ktx.cpp +++ b/libraries/gpu/src/gpu/Texture_ktx.cpp @@ -188,35 +188,17 @@ KtxStorage::KtxStorage(const std::string& filename) : _filename(filename) { } std::shared_ptr KtxStorage::maybeOpenFile() const { - // 1. Try to get the shared ptr - // 2. If it doesn't exist, grab the mutex around its creation - // 3. If it was created before we got the mutex, return it - // 4. Otherwise, create it - - std::shared_ptr file = _cacheFile.lock(); - if (file) { - return file; + if (!_cacheFile) { + _cacheFile = std::make_shared(_filename.c_str()); } - - { - std::lock_guard lock{ _cacheFileCreateMutex }; - - file = _cacheFile.lock(); - if (file) { - return file; - } - - file = std::make_shared(_filename.c_str()); - _cacheFile = file; - } - - return file; + return _cacheFile; } PixelsPointer KtxStorage::getMipFace(uint16 level, uint8 face) const { auto faceOffset = _ktxDescriptor->getMipFaceTexelsOffset(level, face); auto faceSize = _ktxDescriptor->getMipFaceTexelsSize(level, face); if (faceSize != 0 && faceOffset != 0) { + std::lock_guard lock(_cacheFileMutex); auto file = maybeOpenFile(); if (file) { auto storageView = file->createView(faceSize, faceOffset); @@ -262,6 +244,7 @@ void KtxStorage::assignMipData(uint16 level, const storage::StoragePointer& stor return; } + std::lock_guard lock(_cacheFileMutex); auto file = maybeOpenFile(); if (!file) { qWarning() << "Failed to open file to assign mip data " << QString::fromStdString(_filename); @@ -279,8 +262,6 @@ void KtxStorage::assignMipData(uint16 level, const storage::StoragePointer& stor imageData += ktx::IMAGE_SIZE_WIDTH; { - std::lock_guard lock { _cacheFileWriteMutex }; - if (level != _minMipLevelAvailable - 1) { qWarning() << "Invalid level to be stored"; return; From 90b97aba59214e9d5b5a70dd94141f95c0fb82ed Mon Sep 17 00:00:00 2001 From: SamGondelman Date: Fri, 15 Dec 2017 16:36:07 -0800 Subject: [PATCH 120/148] remove extra recycle --- .../src/display-plugins/OpenGLDisplayPlugin.cpp | 5 ----- 1 file changed, 5 deletions(-) diff --git a/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.cpp b/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.cpp index 0993daaa8b..cb9d06dce1 100644 --- a/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.cpp +++ b/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.cpp @@ -685,11 +685,6 @@ void OpenGLDisplayPlugin::present() { } incrementPresentCount(); - { - PROFILE_RANGE_EX(render, "recycle", 0xff00ff00, frameId) - _gpuContext->recycle(); - } - if (_currentFrame) { { withPresentThreadLock([&] { From 9bdcf34c9162cb3651d6eabbb32903fdec0cfa15 Mon Sep 17 00:00:00 2001 From: SamGondelman Date: Fri, 15 Dec 2017 17:52:48 -0800 Subject: [PATCH 121/148] clear all _cacheFiles on recycle --- libraries/gpu-gl/src/gpu/gl/GLBackend.cpp | 2 +- libraries/gpu/src/gpu/Texture.h | 7 ++++++- libraries/gpu/src/gpu/Texture_ktx.cpp | 18 ++++++++++++++++-- 3 files changed, 23 insertions(+), 4 deletions(-) diff --git a/libraries/gpu-gl/src/gpu/gl/GLBackend.cpp b/libraries/gpu-gl/src/gpu/gl/GLBackend.cpp index f138244fa2..0a71ee513a 100644 --- a/libraries/gpu-gl/src/gpu/gl/GLBackend.cpp +++ b/libraries/gpu-gl/src/gpu/gl/GLBackend.cpp @@ -776,7 +776,7 @@ void GLBackend::recycle() const { GLVariableAllocationSupport::manageMemory(); GLVariableAllocationSupport::_frameTexturesCreated = 0; - + Texture::KtxStorage::clearKtxFiles(); } void GLBackend::setCameraCorrection(const Mat4& correction) { diff --git a/libraries/gpu/src/gpu/Texture.h b/libraries/gpu/src/gpu/Texture.h index 26de5a0804..10edd895c0 100755 --- a/libraries/gpu/src/gpu/Texture.h +++ b/libraries/gpu/src/gpu/Texture.h @@ -321,10 +321,15 @@ public: void reset() override { } + // Don't keep files open forever. We close them at the beginning of each frame (GLBackend::recycle) + static std::vector, std::shared_ptr>> _cachedKtxFiles; + static std::mutex _cachedKtxFilesMutex; + static void clearKtxFiles(); + protected: std::shared_ptr maybeOpenFile() const; - mutable std::mutex _cacheFileMutex; + mutable std::shared_ptr _cacheFileMutex { std::make_shared() }; mutable std::shared_ptr _cacheFile; std::string _filename; diff --git a/libraries/gpu/src/gpu/Texture_ktx.cpp b/libraries/gpu/src/gpu/Texture_ktx.cpp index 49e18aaf78..46804b4b44 100644 --- a/libraries/gpu/src/gpu/Texture_ktx.cpp +++ b/libraries/gpu/src/gpu/Texture_ktx.cpp @@ -23,6 +23,9 @@ using namespace gpu; using PixelsPointer = Texture::PixelsPointer; using KtxStorage = Texture::KtxStorage; +std::vector, std::shared_ptr>> KtxStorage::_cachedKtxFiles; +std::mutex KtxStorage::_cachedKtxFilesMutex; + struct GPUKTXPayload { using Version = uint8; @@ -190,15 +193,26 @@ KtxStorage::KtxStorage(const std::string& filename) : _filename(filename) { std::shared_ptr KtxStorage::maybeOpenFile() const { if (!_cacheFile) { _cacheFile = std::make_shared(_filename.c_str()); + std::lock_guard lock(KtxStorage::_cachedKtxFilesMutex); + _cachedKtxFiles.emplace_back(_cacheFile, _cacheFileMutex); } return _cacheFile; } +void KtxStorage::clearKtxFiles() { + std::lock_guard lock(KtxStorage::_cachedKtxFilesMutex); + for (auto& cacheFileAndMutex : KtxStorage::_cachedKtxFiles) { + std::lock_guard lock(*(cacheFileAndMutex.second)); + cacheFileAndMutex.first.reset(); + } + _cachedKtxFiles.clear(); +} + PixelsPointer KtxStorage::getMipFace(uint16 level, uint8 face) const { auto faceOffset = _ktxDescriptor->getMipFaceTexelsOffset(level, face); auto faceSize = _ktxDescriptor->getMipFaceTexelsSize(level, face); if (faceSize != 0 && faceOffset != 0) { - std::lock_guard lock(_cacheFileMutex); + std::lock_guard lock(*_cacheFileMutex); auto file = maybeOpenFile(); if (file) { auto storageView = file->createView(faceSize, faceOffset); @@ -244,7 +258,7 @@ void KtxStorage::assignMipData(uint16 level, const storage::StoragePointer& stor return; } - std::lock_guard lock(_cacheFileMutex); + std::lock_guard lock(*_cacheFileMutex); auto file = maybeOpenFile(); if (!file) { qWarning() << "Failed to open file to assign mip data " << QString::fromStdString(_filename); From a39eea5a34812497203d42be1b885c504356cdce Mon Sep 17 00:00:00 2001 From: Sam Gondelman Date: Sun, 17 Dec 2017 15:56:34 -0800 Subject: [PATCH 122/148] cr and cleanup --- libraries/gpu-gl/src/gpu/gl/GLBackend.cpp | 2 +- libraries/gpu/src/gpu/Texture.h | 7 ++++--- libraries/gpu/src/gpu/Texture_ktx.cpp | 13 ++++++++----- 3 files changed, 13 insertions(+), 9 deletions(-) diff --git a/libraries/gpu-gl/src/gpu/gl/GLBackend.cpp b/libraries/gpu-gl/src/gpu/gl/GLBackend.cpp index 0a71ee513a..a36a6e0fb5 100644 --- a/libraries/gpu-gl/src/gpu/gl/GLBackend.cpp +++ b/libraries/gpu-gl/src/gpu/gl/GLBackend.cpp @@ -776,7 +776,7 @@ void GLBackend::recycle() const { GLVariableAllocationSupport::manageMemory(); GLVariableAllocationSupport::_frameTexturesCreated = 0; - Texture::KtxStorage::clearKtxFiles(); + Texture::KtxStorage::releaseOpenKtxFiles(); } void GLBackend::setCameraCorrection(const Mat4& correction) { diff --git a/libraries/gpu/src/gpu/Texture.h b/libraries/gpu/src/gpu/Texture.h index 10edd895c0..7c087fec2b 100755 --- a/libraries/gpu/src/gpu/Texture.h +++ b/libraries/gpu/src/gpu/Texture.h @@ -322,9 +322,7 @@ public: void reset() override { } // Don't keep files open forever. We close them at the beginning of each frame (GLBackend::recycle) - static std::vector, std::shared_ptr>> _cachedKtxFiles; - static std::mutex _cachedKtxFilesMutex; - static void clearKtxFiles(); + static void releaseOpenKtxFiles(); protected: std::shared_ptr maybeOpenFile() const; @@ -332,6 +330,9 @@ public: mutable std::shared_ptr _cacheFileMutex { std::make_shared() }; mutable std::shared_ptr _cacheFile; + static std::vector, std::shared_ptr>> _cachedKtxFiles; + static std::mutex _cachedKtxFilesMutex; + std::string _filename; cache::FilePointer _cacheEntry; std::atomic _minMipLevelAvailable; diff --git a/libraries/gpu/src/gpu/Texture_ktx.cpp b/libraries/gpu/src/gpu/Texture_ktx.cpp index 46804b4b44..8b054816bb 100644 --- a/libraries/gpu/src/gpu/Texture_ktx.cpp +++ b/libraries/gpu/src/gpu/Texture_ktx.cpp @@ -193,19 +193,22 @@ KtxStorage::KtxStorage(const std::string& filename) : _filename(filename) { std::shared_ptr KtxStorage::maybeOpenFile() const { if (!_cacheFile) { _cacheFile = std::make_shared(_filename.c_str()); - std::lock_guard lock(KtxStorage::_cachedKtxFilesMutex); + std::lock_guard lock(_cachedKtxFilesMutex); _cachedKtxFiles.emplace_back(_cacheFile, _cacheFileMutex); } return _cacheFile; } -void KtxStorage::clearKtxFiles() { - std::lock_guard lock(KtxStorage::_cachedKtxFilesMutex); - for (auto& cacheFileAndMutex : KtxStorage::_cachedKtxFiles) { +void KtxStorage::releaseOpenKtxFiles() { + std::vector, std::shared_ptr>> localKtxFiles; + { + std::lock_guard lock(_cachedKtxFilesMutex); + localKtxFiles.swap(_cachedKtxFiles); + } + for (auto& cacheFileAndMutex : localKtxFiles) { std::lock_guard lock(*(cacheFileAndMutex.second)); cacheFileAndMutex.first.reset(); } - _cachedKtxFiles.clear(); } PixelsPointer KtxStorage::getMipFace(uint16 level, uint8 face) const { From c39da5094ba883d3c5edcce1c1adb6207f66477e Mon Sep 17 00:00:00 2001 From: Sam Gondelman Date: Sun, 17 Dec 2017 22:09:20 -0800 Subject: [PATCH 123/148] weak_ptr _cacheFile --- libraries/gpu/src/gpu/Texture.h | 2 +- libraries/gpu/src/gpu/Texture_ktx.cpp | 22 +++++++++++++++++----- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/libraries/gpu/src/gpu/Texture.h b/libraries/gpu/src/gpu/Texture.h index 7c087fec2b..06208179e0 100755 --- a/libraries/gpu/src/gpu/Texture.h +++ b/libraries/gpu/src/gpu/Texture.h @@ -328,7 +328,7 @@ public: std::shared_ptr maybeOpenFile() const; mutable std::shared_ptr _cacheFileMutex { std::make_shared() }; - mutable std::shared_ptr _cacheFile; + mutable std::weak_ptr _cacheFile; static std::vector, std::shared_ptr>> _cachedKtxFiles; static std::mutex _cachedKtxFilesMutex; diff --git a/libraries/gpu/src/gpu/Texture_ktx.cpp b/libraries/gpu/src/gpu/Texture_ktx.cpp index 8b054816bb..883d9abf15 100644 --- a/libraries/gpu/src/gpu/Texture_ktx.cpp +++ b/libraries/gpu/src/gpu/Texture_ktx.cpp @@ -190,13 +190,25 @@ KtxStorage::KtxStorage(const std::string& filename) : _filename(filename) { } } +// maybeOpenFile should be called with _cacheFileMutex already held to avoid modifying the file from multiple threads std::shared_ptr KtxStorage::maybeOpenFile() const { - if (!_cacheFile) { - _cacheFile = std::make_shared(_filename.c_str()); - std::lock_guard lock(_cachedKtxFilesMutex); - _cachedKtxFiles.emplace_back(_cacheFile, _cacheFileMutex); + // Try to get the shared_ptr + std::shared_ptr file = _cacheFile.lock(); + if (file) { + return file; } - return _cacheFile; + + // If the file isn't open, create it and save a weak_ptr to it + file = std::make_shared(_filename.c_str()); + _cacheFile = file; + + { + // Add the shared_ptr to the global list of open KTX files, to be released at the beginning of the next present thread frame + std::lock_guard lock(_cachedKtxFilesMutex); + _cachedKtxFiles.emplace_back(file, _cacheFileMutex); + } + + return file; } void KtxStorage::releaseOpenKtxFiles() { From e075cd79fb2b44016ba07ceda3b5090b1741da82 Mon Sep 17 00:00:00 2001 From: Zach Fox Date: Mon, 18 Dec 2017 11:51:12 -0800 Subject: [PATCH 124/148] Add Passphrase Auth Status data tracking --- .../qml/hifi/commerce/checkout/Checkout.qml | 1 + .../qml/hifi/commerce/purchases/Purchases.qml | 1 + .../qml/hifi/commerce/wallet/PassphraseModal.qml | 5 ++++- .../resources/qml/hifi/commerce/wallet/Wallet.qml | 1 + .../src/UserActivityLoggerScriptingInterface.cpp | 13 +++++++++++++ .../src/UserActivityLoggerScriptingInterface.h | 2 ++ 6 files changed, 22 insertions(+), 1 deletion(-) diff --git a/interface/resources/qml/hifi/commerce/checkout/Checkout.qml b/interface/resources/qml/hifi/commerce/checkout/Checkout.qml index a058f32994..c9e5d2aaec 100644 --- a/interface/resources/qml/hifi/commerce/checkout/Checkout.qml +++ b/interface/resources/qml/hifi/commerce/checkout/Checkout.qml @@ -59,6 +59,7 @@ Rectangle { } else if (walletStatus === 2) { if (root.activeView !== "passphraseModal") { root.activeView = "passphraseModal"; + UserActivityLogger.commercePassphraseEntry("marketplace checkout"); } } else if (walletStatus === 3) { authSuccessStep(); diff --git a/interface/resources/qml/hifi/commerce/purchases/Purchases.qml b/interface/resources/qml/hifi/commerce/purchases/Purchases.qml index ff9ce16e93..5366bda4d6 100644 --- a/interface/resources/qml/hifi/commerce/purchases/Purchases.qml +++ b/interface/resources/qml/hifi/commerce/purchases/Purchases.qml @@ -54,6 +54,7 @@ Rectangle { } else if (walletStatus === 2) { if (root.activeView !== "passphraseModal") { root.activeView = "passphraseModal"; + UserActivityLogger.commercePassphraseEntry("marketplace purchases"); } } else if (walletStatus === 3) { if ((Settings.getValue("isFirstUseOfPurchases", true) || root.isDebuggingFirstUseTutorial) && root.activeView !== "firstUseTutorial") { diff --git a/interface/resources/qml/hifi/commerce/wallet/PassphraseModal.qml b/interface/resources/qml/hifi/commerce/wallet/PassphraseModal.qml index 582052c4c3..82262ebf0a 100644 --- a/interface/resources/qml/hifi/commerce/wallet/PassphraseModal.qml +++ b/interface/resources/qml/hifi/commerce/wallet/PassphraseModal.qml @@ -50,8 +50,10 @@ Item { submitPassphraseInputButton.enabled = true; if (!isAuthenticated) { errorText.text = "Authentication failed - please try again."; + UserActivityLogger.commercePassphraseAuthenticationStatus("auth failure"); } else { - sendSignalToParent({method: 'authSuccess'});; + sendSignalToParent({method: 'authSuccess'}); + UserActivityLogger.commercePassphraseAuthenticationStatus("auth success"); } } } @@ -336,6 +338,7 @@ Item { text: "Cancel" onClicked: { sendSignalToParent({method: 'passphrasePopup_cancelClicked'}); + UserActivityLogger.commercePassphraseAuthenticationStatus("passphrase modal cancelled"); } } } diff --git a/interface/resources/qml/hifi/commerce/wallet/Wallet.qml b/interface/resources/qml/hifi/commerce/wallet/Wallet.qml index ac05bf7c84..6bbf41b150 100644 --- a/interface/resources/qml/hifi/commerce/wallet/Wallet.qml +++ b/interface/resources/qml/hifi/commerce/wallet/Wallet.qml @@ -57,6 +57,7 @@ Rectangle { } else if (walletStatus === 2) { if (root.activeView !== "passphraseModal") { root.activeView = "passphraseModal"; + UserActivityLogger.commercePassphraseEntry("wallet app"); } } else if (walletStatus === 3) { root.activeView = "walletHome"; diff --git a/libraries/networking/src/UserActivityLoggerScriptingInterface.cpp b/libraries/networking/src/UserActivityLoggerScriptingInterface.cpp index 0965c9834f..aec6df4f14 100644 --- a/libraries/networking/src/UserActivityLoggerScriptingInterface.cpp +++ b/libraries/networking/src/UserActivityLoggerScriptingInterface.cpp @@ -141,3 +141,16 @@ void UserActivityLoggerScriptingInterface::commerceWalletSetupFinished(int times payload["secondsToComplete"] = secondsToComplete; doLogAction("commerceWalletSetupFinished", payload); } + +void UserActivityLoggerScriptingInterface::commercePassphraseEntry(QString source) { + QJsonObject payload; + payload["source"] = source; + doLogAction("commercePassphraseEntry", payload); +} + +void UserActivityLoggerScriptingInterface::commercePassphraseAuthenticationStatus(QString status) { + QJsonObject payload; + payload["status"] = status; + doLogAction("commercePassphraseAuthenticationStatus", payload); + +} diff --git a/libraries/networking/src/UserActivityLoggerScriptingInterface.h b/libraries/networking/src/UserActivityLoggerScriptingInterface.h index e71723f03c..0e08b050d7 100644 --- a/libraries/networking/src/UserActivityLoggerScriptingInterface.h +++ b/libraries/networking/src/UserActivityLoggerScriptingInterface.h @@ -39,6 +39,8 @@ public: Q_INVOKABLE void commerceWalletSetupStarted(int timestamp, QString setupAttemptID, int setupFlowVersion, QString referrer, QString currentDomain); Q_INVOKABLE void commerceWalletSetupProgress(int timestamp, QString setupAttemptID, int secondsElapsed, int currentStepNumber, QString currentStepName); Q_INVOKABLE void commerceWalletSetupFinished(int timestamp, QString setupAttemptID, int secondsToComplete); + Q_INVOKABLE void commercePassphraseEntry(QString source); + Q_INVOKABLE void commercePassphraseAuthenticationStatus(QString status); private: void doLogAction(QString action, QJsonObject details = {}); }; From b0ecaa10d4511a70ed6a80e2a659df46d84fc604 Mon Sep 17 00:00:00 2001 From: SamGondelman Date: Mon, 18 Dec 2017 12:38:25 -0800 Subject: [PATCH 125/148] fix equirectangular skybox loading --- libraries/image/src/image/Image.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/image/src/image/Image.cpp b/libraries/image/src/image/Image.cpp index 9e4ab2e43f..f78ed1a583 100644 --- a/libraries/image/src/image/Image.cpp +++ b/libraries/image/src/image/Image.cpp @@ -981,7 +981,7 @@ public: static QImage extractEquirectangularFace(const QImage& source, gpu::Texture::CubeFace face, int faceWidth) { QImage image(faceWidth, faceWidth, source.format()); - glm::vec2 dstInvSize(1.0f / (float)source.width(), 1.0f / (float)source.height()); + glm::vec2 dstInvSize(1.0f / faceWidth); struct CubeToXYZ { gpu::Texture::CubeFace _face; From ee3c47d5eca3f008cf67693be5dfe092bb7b0600 Mon Sep 17 00:00:00 2001 From: SamGondelman Date: Mon, 18 Dec 2017 12:38:25 -0800 Subject: [PATCH 126/148] fix equirectangular skybox loading --- libraries/image/src/image/Image.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/image/src/image/Image.cpp b/libraries/image/src/image/Image.cpp index 9e4ab2e43f..f78ed1a583 100644 --- a/libraries/image/src/image/Image.cpp +++ b/libraries/image/src/image/Image.cpp @@ -981,7 +981,7 @@ public: static QImage extractEquirectangularFace(const QImage& source, gpu::Texture::CubeFace face, int faceWidth) { QImage image(faceWidth, faceWidth, source.format()); - glm::vec2 dstInvSize(1.0f / (float)source.width(), 1.0f / (float)source.height()); + glm::vec2 dstInvSize(1.0f / faceWidth); struct CubeToXYZ { gpu::Texture::CubeFace _face; From 2fcf11455bfefa3107a533d9622610fa143bd887 Mon Sep 17 00:00:00 2001 From: Brad Davis Date: Mon, 18 Dec 2017 14:03:13 -0800 Subject: [PATCH 127/148] Fixing edit state detection --- scripts/system/edit.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/system/edit.js b/scripts/system/edit.js index 1d9398fda8..e28f877d85 100644 --- a/scripts/system/edit.js +++ b/scripts/system/edit.js @@ -427,7 +427,7 @@ var toolBar = (function () { }); createButton = activeButton; tablet.screenChanged.connect(function (type, url) { - if (isActive && (type !== "QML" || url !== "Edit.qml")) { + if (isActive && (type !== "QML" || url !== "hifi/tablet/Edit.qml")) { that.setActive(false) } }); From ddbb7a4416737ea40889d7915057180f7053c1cc Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Mon, 18 Dec 2017 14:26:25 -0800 Subject: [PATCH 128/148] when an avatar-entity's lifetime expires, remove it from avatarEntityData --- interface/src/Application.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index f76116b6ad..e93a17553e 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -1496,6 +1496,14 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo } }); + connect(getEntities()->getTree().get(), &EntityTree::deletingEntity, [=](const EntityItemID& entityItemID) { + auto avatarManager = DependencyManager::get(); + auto myAvatar = avatarManager ? avatarManager->getMyAvatar() : nullptr; + if (myAvatar) { + myAvatar->clearAvatarEntity(entityItemID); + } + }); + // Keyboard focus handling for Web overlays. auto overlays = &(qApp->getOverlays()); connect(overlays, &Overlays::overlayDeleted, [=](const OverlayID& overlayID) { From 1bfb62bd7fe9f9522a31d00a4210a29c390b4956 Mon Sep 17 00:00:00 2001 From: Thijs Wenker Date: Mon, 18 Dec 2017 15:32:32 -0800 Subject: [PATCH 129/148] list assignment types in assignment-client help --- assignment-client/src/AssignmentClientApp.cpp | 10 ++++++++-- domain-server/src/DomainServer.cpp | 2 +- libraries/networking/src/Assignment.cpp | 6 +++++- libraries/networking/src/Assignment.h | 2 ++ 4 files changed, 16 insertions(+), 4 deletions(-) diff --git a/assignment-client/src/AssignmentClientApp.cpp b/assignment-client/src/AssignmentClientApp.cpp index dd3050ba4e..b37784cddc 100644 --- a/assignment-client/src/AssignmentClientApp.cpp +++ b/assignment-client/src/AssignmentClientApp.cpp @@ -46,8 +46,14 @@ AssignmentClientApp::AssignmentClientApp(int argc, char* argv[]) : const QCommandLineOption helpOption = parser.addHelpOption(); - const QCommandLineOption clientTypeOption(ASSIGNMENT_TYPE_OVERRIDE_OPTION, - "run single assignment client of given type", "type"); + QString typeDescription = "run single assignment client of given type\n# | Type\n============================"; + for (Assignment::Type type = Assignment::FirstType; + type != Assignment::AllTypes; + type = static_cast(static_cast(type) + 1)) { + typeDescription.append(QStringLiteral("\n%1 | %2").arg(QString::number(type), Assignment::typeToString(type))); + } + const QCommandLineOption clientTypeOption(ASSIGNMENT_TYPE_OVERRIDE_OPTION, typeDescription, "type"); + parser.addOption(clientTypeOption); const QCommandLineOption poolOption(ASSIGNMENT_POOL_OPTION, "set assignment pool", "pool-name"); diff --git a/domain-server/src/DomainServer.cpp b/domain-server/src/DomainServer.cpp index 2d8bf7418a..290f4a7f53 100644 --- a/domain-server/src/DomainServer.cpp +++ b/domain-server/src/DomainServer.cpp @@ -945,7 +945,7 @@ void DomainServer::createStaticAssignmentsForType(Assignment::Type type, const Q void DomainServer::populateDefaultStaticAssignmentsExcludingTypes(const QSet& excludedTypes) { // enumerate over all assignment types and see if we've already excluded it - for (Assignment::Type defaultedType = Assignment::AudioMixerType; + for (Assignment::Type defaultedType = Assignment::FirstType; defaultedType != Assignment::AllTypes; defaultedType = static_cast(static_cast(defaultedType) + 1)) { if (!excludedTypes.contains(defaultedType) && defaultedType != Assignment::AgentType) { diff --git a/libraries/networking/src/Assignment.cpp b/libraries/networking/src/Assignment.cpp index 27d4a31ccf..58a4446aa6 100644 --- a/libraries/networking/src/Assignment.cpp +++ b/libraries/networking/src/Assignment.cpp @@ -127,7 +127,11 @@ void Assignment::swap(Assignment& otherAssignment) { } const char* Assignment::getTypeName() const { - switch (_type) { + return typeToString(_type); +} + +const char* Assignment::typeToString(Assignment::Type type) { + switch (type) { case Assignment::AudioMixerType: return "audio-mixer"; case Assignment::AvatarMixerType: diff --git a/libraries/networking/src/Assignment.h b/libraries/networking/src/Assignment.h index bbec40682f..e958c84d87 100644 --- a/libraries/networking/src/Assignment.h +++ b/libraries/networking/src/Assignment.h @@ -28,6 +28,7 @@ class Assignment : public QObject { public: enum Type : uint8_t { + FirstType = 0, AudioMixerType = 0, AvatarMixerType = 1, AgentType = 2, @@ -89,6 +90,7 @@ public: const QString& getNodeVersion() const { return _nodeVersion; } const char* getTypeName() const; + static const char* typeToString(Assignment::Type type); friend QDebug operator<<(QDebug debug, const Assignment& assignment); friend QDataStream& operator<<(QDataStream &out, const Assignment& assignment); From ca45c4e8dac8ad9c1162ab2d1f20095de7eccb74 Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Mon, 18 Dec 2017 17:30:56 -0800 Subject: [PATCH 130/148] fix logic that resets own-avatar collisions after a parenting grab is released --- libraries/entities/src/EntityItem.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/libraries/entities/src/EntityItem.cpp b/libraries/entities/src/EntityItem.cpp index 385f2ca792..271fef33c8 100644 --- a/libraries/entities/src/EntityItem.cpp +++ b/libraries/entities/src/EntityItem.cpp @@ -1634,6 +1634,10 @@ void EntityItem::setParentID(const QUuid& value) { newParentNoBootstrapping |= Simulation::NO_BOOTSTRAPPING; } + if (!oldParentID.isNull() && (oldParentID == Physics::getSessionUUID() || oldParentID == AVATAR_SELF_ID)) { + oldParentNoBootstrapping |= Simulation::NO_BOOTSTRAPPING; + } + if ((bool)(oldParentNoBootstrapping ^ newParentNoBootstrapping)) { if ((bool)(newParentNoBootstrapping & Simulation::NO_BOOTSTRAPPING)) { markDirtyFlags(Simulation::NO_BOOTSTRAPPING); From 90d0e9dc32139631c9b619dc5c3410564ee7dd72 Mon Sep 17 00:00:00 2001 From: SamGondelman Date: Mon, 18 Dec 2017 18:35:15 -0800 Subject: [PATCH 131/148] bump protocol version --- libraries/networking/src/udt/PacketHeaders.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/networking/src/udt/PacketHeaders.cpp b/libraries/networking/src/udt/PacketHeaders.cpp index 207ddf6bbb..62354da11a 100644 --- a/libraries/networking/src/udt/PacketHeaders.cpp +++ b/libraries/networking/src/udt/PacketHeaders.cpp @@ -30,7 +30,7 @@ PacketVersion versionForPacketType(PacketType packetType) { case PacketType::EntityEdit: case PacketType::EntityData: case PacketType::EntityPhysics: - return static_cast(EntityVersion::HazeEffect); + return static_cast(EntityVersion::StaticCertJsonVersionOne); case PacketType::EntityQuery: return static_cast(EntityQueryPacketVersion::ConnectionIdentifier); From 63ac426bf27c9782c0406224275862790aed1c3f Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Mon, 18 Dec 2017 17:30:56 -0800 Subject: [PATCH 132/148] fix logic that resets own-avatar collisions after a parenting grab is released --- libraries/entities/src/EntityItem.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/libraries/entities/src/EntityItem.cpp b/libraries/entities/src/EntityItem.cpp index 48370b02fd..ddc5e9795f 100644 --- a/libraries/entities/src/EntityItem.cpp +++ b/libraries/entities/src/EntityItem.cpp @@ -1626,6 +1626,10 @@ void EntityItem::setParentID(const QUuid& value) { newParentNoBootstrapping |= Simulation::NO_BOOTSTRAPPING; } + if (!oldParentID.isNull() && (oldParentID == Physics::getSessionUUID() || oldParentID == AVATAR_SELF_ID)) { + oldParentNoBootstrapping |= Simulation::NO_BOOTSTRAPPING; + } + if ((bool)(oldParentNoBootstrapping ^ newParentNoBootstrapping)) { if ((bool)(newParentNoBootstrapping & Simulation::NO_BOOTSTRAPPING)) { markDirtyFlags(Simulation::NO_BOOTSTRAPPING); From 661a63bd0ca5d2935c88c32066c538989fda240d Mon Sep 17 00:00:00 2001 From: Andrew Meadows Date: Mon, 18 Dec 2017 11:05:27 -0800 Subject: [PATCH 133/148] fix crash for bad QVector index --- libraries/entities-renderer/src/RenderableModelEntityItem.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp index e578e4858d..cf555203dc 100644 --- a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp @@ -998,7 +998,7 @@ void ModelEntityRenderer::animate(const TypedEntityPointer& entity) { // in the case where the last frame is greater than the framecount then clamp // it to the end of the animation until it loops around. - if (animationCurrentFrame < 0 || animationCurrentFrame > frameCount) { + if (animationCurrentFrame < 0 || animationCurrentFrame >= frameCount) { animationCurrentFrame = 0; } From 559cb33563b794ce84f39232a164bbc04307fd31 Mon Sep 17 00:00:00 2001 From: Andrew Meadows Date: Mon, 18 Dec 2017 11:13:11 -0800 Subject: [PATCH 134/148] remove incorrect comment --- .../entities-renderer/src/RenderableModelEntityItem.cpp | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp index cf555203dc..543c3bfbe9 100644 --- a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp @@ -993,11 +993,8 @@ void ModelEntityRenderer::animate(const TypedEntityPointer& entity) { } { - // the current frame is set on the server in update() in ModelEntityItem.cpp + // the current frame is set on the server in update() in ModelEntityItem.cpp int animationCurrentFrame = (int)(glm::floor(entity->getAnimationCurrentFrame())); - - // in the case where the last frame is greater than the framecount then clamp - // it to the end of the animation until it loops around. if (animationCurrentFrame < 0 || animationCurrentFrame >= frameCount) { animationCurrentFrame = 0; } From bad2c1df7693f9794a6f935483a0c64529d9bfc8 Mon Sep 17 00:00:00 2001 From: Andrew Meadows Date: Mon, 18 Dec 2017 12:21:23 -0800 Subject: [PATCH 135/148] proper modulus of animation frame --- .../src/RenderableModelEntityItem.cpp | 13 ++++++------- libraries/entities/src/ModelEntityItem.cpp | 6 ++---- 2 files changed, 8 insertions(+), 11 deletions(-) diff --git a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp index 543c3bfbe9..bc99522d0f 100644 --- a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp @@ -993,16 +993,15 @@ void ModelEntityRenderer::animate(const TypedEntityPointer& entity) { } { - // the current frame is set on the server in update() in ModelEntityItem.cpp - int animationCurrentFrame = (int)(glm::floor(entity->getAnimationCurrentFrame())); - if (animationCurrentFrame < 0 || animationCurrentFrame >= frameCount) { - animationCurrentFrame = 0; + float currentFrame = fmod(entity->getAnimationCurrentFrame(), (float)(frameCount)); + if (currentFrame < 0.0f) { + currentFrame += (float)frameCount; } - - if (animationCurrentFrame == _lastKnownCurrentFrame) { + int currentIntegerFrame = (int)(glm::floor(currentFrame)); + if (currentIntegerFrame == _lastKnownCurrentFrame) { return; } - _lastKnownCurrentFrame = animationCurrentFrame; + _lastKnownCurrentFrame = currentIntegerFrame; } if (_jointMapping.size() != _model->getJointStateCount()) { diff --git a/libraries/entities/src/ModelEntityItem.cpp b/libraries/entities/src/ModelEntityItem.cpp index 323584c7ee..3a79df34c6 100644 --- a/libraries/entities/src/ModelEntityItem.cpp +++ b/libraries/entities/src/ModelEntityItem.cpp @@ -245,7 +245,7 @@ void ModelEntityItem::updateFrameCount() { if (_currentFrame < 0.0f) { return; } - + if (!_lastAnimated) { _lastAnimated = usecTimestampNow(); return; @@ -263,7 +263,7 @@ void ModelEntityItem::updateFrameCount() { } int updatedFrameCount = getAnimationLastFrame() - getAnimationFirstFrame() + 1; - + if (!getAnimationHold() && getAnimationIsPlaying()) { float deltaTime = (float)interval / (float)USECS_PER_SECOND; _currentFrame += (deltaTime * getAnimationFPS()); @@ -283,8 +283,6 @@ void ModelEntityItem::updateFrameCount() { // qCDebug(entities) << "in update frame " << _currentFrame; setAnimationCurrentFrame(_currentFrame); } - - } void ModelEntityItem::debugDump() const { From 2c6868b03ead25a00986fa6b9c94734d23d8a6c7 Mon Sep 17 00:00:00 2001 From: Nissim Hadar Date: Tue, 19 Dec 2017 11:12:27 -0800 Subject: [PATCH 136/148] Pass keylight direction as parameter to the shader. --- libraries/render-utils/src/DeferredGlobalLight.slh | 3 ++- libraries/render-utils/src/Haze.slf | 6 ++++-- libraries/render-utils/src/Haze.slh | 7 ++----- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/libraries/render-utils/src/DeferredGlobalLight.slh b/libraries/render-utils/src/DeferredGlobalLight.slh index 6cdc02b7a5..de2d41be6b 100644 --- a/libraries/render-utils/src/DeferredGlobalLight.slh +++ b/libraries/render-utils/src/DeferredGlobalLight.slh @@ -221,7 +221,8 @@ vec3 evalGlobalLightingAlphaBlendedWithHaze( vec4(color, 1.0), // fragment original color position, // fragment position in eye coordinates fragEyeVector, // fragment position in world coordinates - invViewMat[3].y // eye height in world coordinates + invViewMat[3].y, // eye height in world coordinates + lightDirection // keylight direction vector ); color = colorV4.rgb; diff --git a/libraries/render-utils/src/Haze.slf b/libraries/render-utils/src/Haze.slf index 5f05d52f83..0270aa58f0 100644 --- a/libraries/render-utils/src/Haze.slf +++ b/libraries/render-utils/src/Haze.slf @@ -53,6 +53,8 @@ void main(void) { vec4 worldFragPos = viewInverse * eyeFragPos; vec4 worldEyePos = viewInverse[3]; - outFragColor = computeHazeColor(fragColor, eyeFragPos.xyz, worldFragPos.xyz, worldEyePos.y); -} + Light light = getLight(); + vec3 lightDirection = getLightDirection(light); + outFragColor = computeHazeColor(fragColor, eyeFragPos.xyz, worldFragPos.xyz, worldEyePos.y, lightDirection); +} diff --git a/libraries/render-utils/src/Haze.slh b/libraries/render-utils/src/Haze.slh index 2fcf5f4418..15e484e055 100644 --- a/libraries/render-utils/src/Haze.slh +++ b/libraries/render-utils/src/Haze.slh @@ -43,7 +43,7 @@ layout(std140) uniform hazeBuffer { // Input: // color - fragment original color -// directionalLight - parameters of the keylight +// lightDirection - parameters of the keylight // worldFragPos - fragment position in world coordinates // Output: // fragment colour after haze effect @@ -101,7 +101,7 @@ vec3 computeHazeColorKeyLightAttenuation(vec3 color, vec3 lightDirection, vec3 w // // General algorithm taken from http://www.iquilezles.org/www/articles/fog/fog.htm, with permission // -vec4 computeHazeColor(vec4 fragColor, vec3 eyeFragPos, vec3 worldFragPos, float worldEyeHeight) { +vec4 computeHazeColor(vec4 fragColor, vec3 eyeFragPos, vec3 worldFragPos, float worldEyeHeight, vec3 lightDirection) { // Distance to fragment float distance = length(eyeFragPos); @@ -111,9 +111,6 @@ vec4 computeHazeColor(vec4 fragColor, vec3 eyeFragPos, vec3 worldFragPos, float // Directional light component is a function of the angle from the eye, between the fragment and the sun vec3 eyeFragDir = normalize(worldFragPos); - Light light = getLight(); - vec3 lightDirection = getLightDirection(light); - float glareComponent = max(0.0, dot(eyeFragDir, -lightDirection)); float power = min(1.0, pow(glareComponent, hazeParams.hazeGlareBlend)); From ed5da4f83b59797ed81b0706a8616a6aa38ac9f3 Mon Sep 17 00:00:00 2001 From: Zach Fox Date: Tue, 19 Dec 2017 15:07:50 -0800 Subject: [PATCH 137/148] Fix bug preventing 'get' buttons from working in marketplace --- scripts/system/html/js/marketplacesInject.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/system/html/js/marketplacesInject.js b/scripts/system/html/js/marketplacesInject.js index 96c1916889..63d36f1a72 100644 --- a/scripts/system/html/js/marketplacesInject.js +++ b/scripts/system/html/js/marketplacesInject.js @@ -415,7 +415,7 @@ } purchaseButton.on('click', function () { - if ('availabile' === availability) { + if ('available' === availability) { buyButtonClicked(window.location.pathname.split("/")[3], $('#top-center').find('h1').text(), $('#creator').find('.value').text(), From 5da49d156ebdeaac49de2e6e753d06894ea4f295 Mon Sep 17 00:00:00 2001 From: Zach Fox Date: Tue, 19 Dec 2017 16:26:58 -0800 Subject: [PATCH 138/148] Commerce: Fix the behavior of the 'cancel' button in Wallet Setup --- .../qml/hifi/commerce/checkout/Checkout.qml | 4 +++- .../qml/hifi/commerce/wallet/WalletSetup.qml | 2 +- scripts/system/commerce/wallet.js | 16 +++++++++++++++- scripts/system/html/js/marketplacesInject.js | 11 +++++++---- scripts/system/marketplaces/marketplaces.js | 2 +- 5 files changed, 27 insertions(+), 8 deletions(-) diff --git a/interface/resources/qml/hifi/commerce/checkout/Checkout.qml b/interface/resources/qml/hifi/commerce/checkout/Checkout.qml index c9e5d2aaec..79332d08fa 100644 --- a/interface/resources/qml/hifi/commerce/checkout/Checkout.qml +++ b/interface/resources/qml/hifi/commerce/checkout/Checkout.qml @@ -41,6 +41,7 @@ Rectangle { property bool debugCheckoutSuccess: false; property bool canRezCertifiedItems: Entities.canRezCertified() || Entities.canRezTmpCertified(); property bool isWearable; + property string referrer; // Style color: hifi.colors.white; Hifi.QmlCommerce { @@ -131,7 +132,7 @@ Rectangle { id: notSetUpTimer; interval: 200; onTriggered: { - sendToScript({method: 'checkout_walletNotSetUp', itemId: itemId}); + sendToScript({method: 'checkout_walletNotSetUp', itemId: itemId, referrer: referrer}); } } @@ -877,6 +878,7 @@ Rectangle { itemName = message.params.itemName; root.itemPrice = message.params.itemPrice; itemHref = message.params.itemHref; + referrer = message.params.referrer; setBuyText(); break; default: diff --git a/interface/resources/qml/hifi/commerce/wallet/WalletSetup.qml b/interface/resources/qml/hifi/commerce/wallet/WalletSetup.qml index 1f9b56ca22..5d05b8fba3 100644 --- a/interface/resources/qml/hifi/commerce/wallet/WalletSetup.qml +++ b/interface/resources/qml/hifi/commerce/wallet/WalletSetup.qml @@ -252,7 +252,7 @@ Item { height: 50; text: "Cancel"; onClicked: { - sendSignalToWallet({method: 'walletSetup_cancelClicked'}); + sendSignalToWallet({method: 'walletSetup_cancelClicked', referrer: root.referrer ? root.referrer : "" }); } } } diff --git a/scripts/system/commerce/wallet.js b/scripts/system/commerce/wallet.js index a4cdc5b097..a37f2bfe91 100644 --- a/scripts/system/commerce/wallet.js +++ b/scripts/system/commerce/wallet.js @@ -61,10 +61,24 @@ function fromQml(message) { switch (message.method) { case 'passphrasePopup_cancelClicked': - case 'walletSetup_cancelClicked': case 'needsLogIn_cancelClicked': tablet.gotoHomeScreen(); break; + case 'walletSetup_cancelClicked': + switch (message.referrer) { + case '': // User clicked "Wallet" app + tablet.gotoHomeScreen(); + break; + case 'purchases': + case 'marketplace cta': + case 'mainPage': + tablet.gotoWebScreen(MARKETPLACE_URL, MARKETPLACES_INJECT_SCRIPT_URL); + break; + default: // User needs to return to an individual marketplace item URL + tablet.gotoWebScreen(MARKETPLACE_URL + '/items/' + message.referrer, MARKETPLACES_INJECT_SCRIPT_URL); + break; + } + break; case 'needsLogIn_loginClicked': openLoginWindow(); break; diff --git a/scripts/system/html/js/marketplacesInject.js b/scripts/system/html/js/marketplacesInject.js index 63d36f1a72..698dd93f29 100644 --- a/scripts/system/html/js/marketplacesInject.js +++ b/scripts/system/html/js/marketplacesInject.js @@ -243,13 +243,14 @@ }); } - function buyButtonClicked(id, name, author, price, href) { + function buyButtonClicked(id, name, author, price, href, referrer) { EventBridge.emitWebEvent(JSON.stringify({ type: "CHECKOUT", itemId: id, itemName: name, itemPrice: price ? parseInt(price, 10) : 0, - itemHref: href + itemHref: href, + referrer: referrer })); } @@ -316,7 +317,8 @@ $(this).closest('.grid-item').find('.item-title').text(), $(this).closest('.grid-item').find('.creator').find('.value').text(), $(this).closest('.grid-item').find('.item-cost').text(), - $(this).attr('data-href')); + $(this).attr('data-href'), + "mainPage"); }); } @@ -420,7 +422,8 @@ $('#top-center').find('h1').text(), $('#creator').find('.value').text(), cost, - href); + href, + "itemPage"); } }); maybeAddPurchasesButton(); diff --git a/scripts/system/marketplaces/marketplaces.js b/scripts/system/marketplaces/marketplaces.js index 004375bff7..a365730cd5 100644 --- a/scripts/system/marketplaces/marketplaces.js +++ b/scripts/system/marketplaces/marketplaces.js @@ -437,7 +437,7 @@ var selectionDisplay = null; // for gridTool.js to ignore wireEventBridge(true); tablet.sendToQml({ method: 'updateWalletReferrer', - referrer: message.itemId + referrer: message.referrer === "itemPage" ? message.itemId : message.referrer }); openWallet(); break; From a72ed27a25c5faf8034a7aa73544e5b877e75c47 Mon Sep 17 00:00:00 2001 From: Zach Fox Date: Tue, 19 Dec 2017 16:57:48 -0800 Subject: [PATCH 139/148] CR feedback --- interface/resources/qml/hifi/commerce/wallet/WalletSetup.qml | 2 +- scripts/system/commerce/wallet.js | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/interface/resources/qml/hifi/commerce/wallet/WalletSetup.qml b/interface/resources/qml/hifi/commerce/wallet/WalletSetup.qml index 5d05b8fba3..36f29b3f31 100644 --- a/interface/resources/qml/hifi/commerce/wallet/WalletSetup.qml +++ b/interface/resources/qml/hifi/commerce/wallet/WalletSetup.qml @@ -252,7 +252,7 @@ Item { height: 50; text: "Cancel"; onClicked: { - sendSignalToWallet({method: 'walletSetup_cancelClicked', referrer: root.referrer ? root.referrer : "" }); + sendSignalToWallet({method: 'walletSetup_cancelClicked', referrer: root.referrer }); } } } diff --git a/scripts/system/commerce/wallet.js b/scripts/system/commerce/wallet.js index a37f2bfe91..4ad043f71e 100644 --- a/scripts/system/commerce/wallet.js +++ b/scripts/system/commerce/wallet.js @@ -67,6 +67,8 @@ case 'walletSetup_cancelClicked': switch (message.referrer) { case '': // User clicked "Wallet" app + case undefined: + case null: tablet.gotoHomeScreen(); break; case 'purchases': From e02e6790fea7397befa2da9d624830904ab55a4b Mon Sep 17 00:00:00 2001 From: Zach Fox Date: Wed, 20 Dec 2017 13:46:02 -0800 Subject: [PATCH 140/148] Fix error state for Commerce passphrase TextInputs --- .../resources/qml/hifi/commerce/wallet/PassphraseModal.qml | 3 +++ .../resources/qml/hifi/commerce/wallet/PassphraseSelection.qml | 3 +++ 2 files changed, 6 insertions(+) diff --git a/interface/resources/qml/hifi/commerce/wallet/PassphraseModal.qml b/interface/resources/qml/hifi/commerce/wallet/PassphraseModal.qml index 379a217adb..87430246f3 100644 --- a/interface/resources/qml/hifi/commerce/wallet/PassphraseModal.qml +++ b/interface/resources/qml/hifi/commerce/wallet/PassphraseModal.qml @@ -50,9 +50,11 @@ Item { submitPassphraseInputButton.enabled = true; if (!isAuthenticated) { errorText.text = "Authentication failed - please try again."; + passphraseField.error = true; UserActivityLogger.commercePassphraseAuthenticationStatus("auth failure"); } else { sendSignalToParent({method: 'authSuccess'}); + passphraseField.error = false; UserActivityLogger.commercePassphraseAuthenticationStatus("auth success"); } } @@ -72,6 +74,7 @@ Item { // TODO: Fix this unlikely bug onVisibleChanged: { if (visible) { + passphraseField.error = false; passphraseField.focus = true; sendSignalToParent({method: 'disableHmdPreview'}); } else { diff --git a/interface/resources/qml/hifi/commerce/wallet/PassphraseSelection.qml b/interface/resources/qml/hifi/commerce/wallet/PassphraseSelection.qml index 3ed66f703b..50e58f8cc4 100644 --- a/interface/resources/qml/hifi/commerce/wallet/PassphraseSelection.qml +++ b/interface/resources/qml/hifi/commerce/wallet/PassphraseSelection.qml @@ -54,6 +54,9 @@ Item { // TODO: Fix this unlikely bug onVisibleChanged: { if (visible) { + passphraseField.error = false; + passphraseFieldAgain.error = false; + currentPassphraseField.error = false; if (root.shouldImmediatelyFocus) { focusFirstTextField(); } From 7a9d566e023dd4b7080bfc1f8d4758ef281fe56d Mon Sep 17 00:00:00 2001 From: Andrew Meadows Date: Mon, 18 Dec 2017 13:56:20 -0800 Subject: [PATCH 141/148] remove unnecessary whitespace --- interface/src/LODManager.cpp | 42 ++++++++++++++++++------------------ 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/interface/src/LODManager.cpp b/interface/src/LODManager.cpp index 01ccbd0d9a..7b99c89cee 100644 --- a/interface/src/LODManager.cpp +++ b/interface/src/LODManager.cpp @@ -64,11 +64,11 @@ void LODManager::autoAdjustLOD(float batchTime, float engineRunTime, float delta // translate into fps for legacy implementation float currentFPS = (float)MSECS_PER_SECOND / _avgRenderTime; - + _fpsAverageStartWindow.updateAverage(currentFPS); _fpsAverageDownWindow.updateAverage(currentFPS); _fpsAverageUpWindow.updateAverage(currentFPS); - + quint64 now = usecTimestampNow(); quint64 elapsedSinceDownShift = now - _lastDownShift; @@ -76,22 +76,22 @@ void LODManager::autoAdjustLOD(float batchTime, float engineRunTime, float delta quint64 lastStableOrUpshift = glm::max(_lastUpShift, _lastStable); quint64 elapsedSinceStableOrUpShift = now - lastStableOrUpshift; - + if (_automaticLODAdjust) { bool changed = false; - - // LOD Downward adjustment + + // LOD Downward adjustment // If we've been downshifting, we watch a shorter downshift window so that we will quickly move toward our // target frame rate. But if we haven't just done a downshift (either because our last shift was an upshift, // or because we've just started out) then we look at a much longer window to consider whether or not to start // downshifting. - bool doDownShift = false; + bool doDownShift = false; if (_isDownshifting) { // only consider things if our DOWN_SHIFT time has elapsed... if (elapsedSinceDownShift > DOWN_SHIFT_ELPASED) { doDownShift = _fpsAverageDownWindow.getAverage() < getLODDecreaseFPS(); - + if (!doDownShift) { qCDebug(interfaceapp) << "---- WE APPEAR TO BE DONE DOWN SHIFTING -----"; _isDownshifting = false; @@ -99,10 +99,10 @@ void LODManager::autoAdjustLOD(float batchTime, float engineRunTime, float delta } } } else { - doDownShift = (elapsedSinceStableOrUpShift > START_SHIFT_ELPASED + doDownShift = (elapsedSinceStableOrUpShift > START_SHIFT_ELPASED && _fpsAverageStartWindow.getAverage() < getLODDecreaseFPS()); } - + if (doDownShift) { // Octree items... stepwise adjustment @@ -118,17 +118,17 @@ void LODManager::autoAdjustLOD(float batchTime, float engineRunTime, float delta if (_isDownshifting) { // subsequent downshift qCDebug(interfaceapp) << "adjusting LOD DOWN..." - << "average fps for last "<< DOWN_SHIFT_WINDOW_IN_SECS <<"seconds was " - << _fpsAverageDownWindow.getAverage() - << "minimum is:" << getLODDecreaseFPS() + << "average fps for last "<< DOWN_SHIFT_WINDOW_IN_SECS <<"seconds was " + << _fpsAverageDownWindow.getAverage() + << "minimum is:" << getLODDecreaseFPS() << "elapsedSinceDownShift:" << elapsedSinceDownShift << " NEW _octreeSizeScale=" << _octreeSizeScale; } else { // first downshift qCDebug(interfaceapp) << "adjusting LOD DOWN after initial delay..." - << "average fps for last "<< START_DELAY_WINDOW_IN_SECS <<"seconds was " - << _fpsAverageStartWindow.getAverage() - << "minimum is:" << getLODDecreaseFPS() + << "average fps for last "<< START_DELAY_WINDOW_IN_SECS <<"seconds was " + << _fpsAverageStartWindow.getAverage() + << "minimum is:" << getLODDecreaseFPS() << "elapsedSinceUpShift:" << elapsedSinceUpShift << " NEW _octreeSizeScale=" << _octreeSizeScale; } @@ -139,10 +139,10 @@ void LODManager::autoAdjustLOD(float batchTime, float engineRunTime, float delta emit LODDecreased(); } } else { - + // LOD Upward adjustment if (elapsedSinceUpShift > UP_SHIFT_ELPASED) { - + if (_fpsAverageUpWindow.getAverage() > getLODIncreaseFPS()) { // Octee items... stepwise adjustment @@ -158,11 +158,11 @@ void LODManager::autoAdjustLOD(float batchTime, float engineRunTime, float delta changed = true; } } - + if (changed) { - qCDebug(interfaceapp) << "adjusting LOD UP... average fps for last "<< UP_SHIFT_WINDOW_IN_SECS <<"seconds was " + qCDebug(interfaceapp) << "adjusting LOD UP... average fps for last "<< UP_SHIFT_WINDOW_IN_SECS <<"seconds was " << _fpsAverageUpWindow.getAverage() - << "upshift point is:" << getLODIncreaseFPS() + << "upshift point is:" << getLODIncreaseFPS() << "elapsedSinceUpShift:" << elapsedSinceUpShift << " NEW _octreeSizeScale=" << _octreeSizeScale; @@ -173,7 +173,7 @@ void LODManager::autoAdjustLOD(float batchTime, float engineRunTime, float delta } } } - + if (changed) { auto lodToolsDialog = DependencyManager::get()->getLodToolsDialog(); if (lodToolsDialog) { From 5c84c5f84572e1882b6cc42f552b924a3a6d2e02 Mon Sep 17 00:00:00 2001 From: Andrew Meadows Date: Tue, 19 Dec 2017 13:03:36 -0800 Subject: [PATCH 142/148] measure average time of 'present' --- .../src/display-plugins/OpenGLDisplayPlugin.cpp | 2 ++ libraries/plugins/src/plugins/DisplayPlugin.h | 5 +++++ 2 files changed, 7 insertions(+) diff --git a/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.cpp b/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.cpp index cb9d06dce1..e646ba27f5 100644 --- a/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.cpp +++ b/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.cpp @@ -679,6 +679,7 @@ void OpenGLDisplayPlugin::internalPresent() { void OpenGLDisplayPlugin::present() { auto frameId = (uint64_t)presentCount(); PROFILE_RANGE_EX(render, __FUNCTION__, 0xffffff00, frameId) + uint64_t startPresent = usecTimestampNow(); { PROFILE_RANGE_EX(render, "updateFrameData", 0xff00ff00, frameId) updateFrameData(); @@ -713,6 +714,7 @@ void OpenGLDisplayPlugin::present() { gpu::Backend::freeGPUMemSize.set(gpu::gl::getFreeDedicatedMemory()); } + _movingAveragePresent.addSample((float)(usecTimestampNow() - startPresent)); } float OpenGLDisplayPlugin::newFramePresentRate() const { diff --git a/libraries/plugins/src/plugins/DisplayPlugin.h b/libraries/plugins/src/plugins/DisplayPlugin.h index efce158864..2c717f629c 100644 --- a/libraries/plugins/src/plugins/DisplayPlugin.h +++ b/libraries/plugins/src/plugins/DisplayPlugin.h @@ -21,8 +21,10 @@ #include #include +#include #include #include +#include #include #include "Plugin.h" @@ -203,6 +205,7 @@ public: virtual void cycleDebugOutput() {} void waitForPresent(); + float getAveragePresentTime() { return _movingAveragePresent.average / (float)USECS_PER_MSEC; } // in msec std::function getHUDOperator(); @@ -220,6 +223,8 @@ protected: std::function _hudOperator { std::function() }; + MovingAverage _movingAveragePresent; + private: QMutex _presentMutex; QWaitCondition _presentCondition; From 8e0d367a2d7fa0a8a6636dfd82153794c7aa96ea Mon Sep 17 00:00:00 2001 From: Andrew Meadows Date: Tue, 19 Dec 2017 13:13:13 -0800 Subject: [PATCH 143/148] use full 'present' time for FPS calculation also, refactor LOD adjust logic --- interface/src/Application.cpp | 4 +- interface/src/LODManager.cpp | 189 ++++++++++------------------------ interface/src/LODManager.h | 42 ++------ 3 files changed, 68 insertions(+), 167 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 81ed5a0578..174424f4ca 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -4323,9 +4323,9 @@ void Application::updateLOD(float deltaTime) const { PerformanceTimer perfTimer("LOD"); // adjust it unless we were asked to disable this feature, or if we're currently in throttleRendering mode if (!isThrottleRendering()) { - float batchTime = (float)_gpuContext->getFrameTimerBatchAverage(); + float presentTime = getActiveDisplayPlugin()->getAveragePresentTime(); float engineRunTime = (float)(_renderEngine->getConfiguration().get()->getCPURunTime()); - DependencyManager::get()->autoAdjustLOD(batchTime, engineRunTime, deltaTime); + DependencyManager::get()->autoAdjustLOD(presentTime, engineRunTime, deltaTime); } else { DependencyManager::get()->resetLODAdjust(); } diff --git a/interface/src/LODManager.cpp b/interface/src/LODManager.cpp index 7b99c89cee..c416e6a6c7 100644 --- a/interface/src/LODManager.cpp +++ b/interface/src/LODManager.cpp @@ -19,6 +19,11 @@ #include "LODManager.h" +const uint64_t LOD_AUTO_ADJUST_PERIOD = 500 * USECS_PER_MSEC; +const float LOD_AUTO_ADJUST_DECREMENT_FACTOR = 0.8f; +const float LOD_AUTO_ADJUST_INCREMENT_FACTOR = 1.2f; + + Setting::Handle desktopLODDecreaseFPS("desktopLODDecreaseFPS", DEFAULT_DESKTOP_LOD_DOWN_FPS); Setting::Handle hmdLODDecreaseFPS("hmdLODDecreaseFPS", DEFAULT_HMD_LOD_DOWN_FPS); @@ -39,156 +44,74 @@ float LODManager::getLODIncreaseFPS() { return getDesktopLODIncreaseFPS(); } -void LODManager::autoAdjustLOD(float batchTime, float engineRunTime, float deltaTimeSec) { - - // NOTE: our first ~100 samples at app startup are completely all over the place, and we don't - // really want to count them in our average, so we will ignore the real frame rates and stuff - // our moving average with simulated good data - const int IGNORE_THESE_SAMPLES = 100; - if (_fpsAverageUpWindow.getSampleCount() < IGNORE_THESE_SAMPLES) { - _lastStable = _lastUpShift = _lastDownShift = usecTimestampNow(); - } - +void LODManager::autoAdjustLOD(float presentTime, float engineRunTime, float deltaTimeSec) { // compute time-weighted running average renderTime - const float OVERLAY_AND_SWAP_TIME_BUDGET = 2.0f; // msec - float renderTime = batchTime + OVERLAY_AND_SWAP_TIME_BUDGET; - float maxTime = glm::max(renderTime, engineRunTime); - const float BLEND_TIMESCALE = 0.3f; // sec - const float MIN_DELTA_TIME = 0.001f; - const float safeDeltaTime = glm::max(deltaTimeSec, MIN_DELTA_TIME); - float blend = BLEND_TIMESCALE / safeDeltaTime; - if (blend > 1.0f) { - blend = 1.0f; - } + float maxTime = glm::max(presentTime, engineRunTime); + const float LOD_ADJUST_TIMESCALE = 0.1f; // sec + float blend = (deltaTimeSec < LOD_ADJUST_TIMESCALE) ? deltaTimeSec / LOD_ADJUST_TIMESCALE : 1.0f; _avgRenderTime = (1.0f - blend) * _avgRenderTime + blend * maxTime; // msec + if (!_automaticLODAdjust) { + // early exit + return; + } - // translate into fps for legacy implementation + float oldOctreeSizeScale = _octreeSizeScale; float currentFPS = (float)MSECS_PER_SECOND / _avgRenderTime; - - _fpsAverageStartWindow.updateAverage(currentFPS); - _fpsAverageDownWindow.updateAverage(currentFPS); - _fpsAverageUpWindow.updateAverage(currentFPS); - - quint64 now = usecTimestampNow(); - - quint64 elapsedSinceDownShift = now - _lastDownShift; - quint64 elapsedSinceUpShift = now - _lastUpShift; - - quint64 lastStableOrUpshift = glm::max(_lastUpShift, _lastStable); - quint64 elapsedSinceStableOrUpShift = now - lastStableOrUpshift; - - if (_automaticLODAdjust) { - bool changed = false; - - // LOD Downward adjustment - // If we've been downshifting, we watch a shorter downshift window so that we will quickly move toward our - // target frame rate. But if we haven't just done a downshift (either because our last shift was an upshift, - // or because we've just started out) then we look at a much longer window to consider whether or not to start - // downshifting. - bool doDownShift = false; - - if (_isDownshifting) { - // only consider things if our DOWN_SHIFT time has elapsed... - if (elapsedSinceDownShift > DOWN_SHIFT_ELPASED) { - doDownShift = _fpsAverageDownWindow.getAverage() < getLODDecreaseFPS(); - - if (!doDownShift) { - qCDebug(interfaceapp) << "---- WE APPEAR TO BE DONE DOWN SHIFTING -----"; - _isDownshifting = false; - _lastStable = now; - } - } - } else { - doDownShift = (elapsedSinceStableOrUpShift > START_SHIFT_ELPASED - && _fpsAverageStartWindow.getAverage() < getLODDecreaseFPS()); - } - - if (doDownShift) { - - // Octree items... stepwise adjustment + uint64_t now = usecTimestampNow(); + if (currentFPS < getLODDecreaseFPS()) { + if (now > _decreaseFPSExpiry) { + _decreaseFPSExpiry = now + LOD_AUTO_ADJUST_PERIOD; if (_octreeSizeScale > ADJUST_LOD_MIN_SIZE_SCALE) { - _octreeSizeScale *= ADJUST_LOD_DOWN_BY; + _octreeSizeScale *= LOD_AUTO_ADJUST_DECREMENT_FACTOR; if (_octreeSizeScale < ADJUST_LOD_MIN_SIZE_SCALE) { _octreeSizeScale = ADJUST_LOD_MIN_SIZE_SCALE; } - changed = true; + qCDebug(interfaceapp) << "adjusting LOD UP" + << "fps =" << currentFPS + << "targetFPS =" << getLODDecreaseFPS(); } - - if (changed) { - if (_isDownshifting) { - // subsequent downshift - qCDebug(interfaceapp) << "adjusting LOD DOWN..." - << "average fps for last "<< DOWN_SHIFT_WINDOW_IN_SECS <<"seconds was " - << _fpsAverageDownWindow.getAverage() - << "minimum is:" << getLODDecreaseFPS() - << "elapsedSinceDownShift:" << elapsedSinceDownShift - << " NEW _octreeSizeScale=" << _octreeSizeScale; + _decreaseFPSExpiry = now + LOD_AUTO_ADJUST_PERIOD; + } + _increaseFPSExpiry = now + LOD_AUTO_ADJUST_PERIOD; + } else if (currentFPS > getLODIncreaseFPS()) { + if (now > _increaseFPSExpiry) { + _increaseFPSExpiry = now + LOD_AUTO_ADJUST_PERIOD; + if (_octreeSizeScale < ADJUST_LOD_MAX_SIZE_SCALE) { + if (_octreeSizeScale < ADJUST_LOD_MIN_SIZE_SCALE) { + _octreeSizeScale = ADJUST_LOD_MIN_SIZE_SCALE; } else { - // first downshift - qCDebug(interfaceapp) << "adjusting LOD DOWN after initial delay..." - << "average fps for last "<< START_DELAY_WINDOW_IN_SECS <<"seconds was " - << _fpsAverageStartWindow.getAverage() - << "minimum is:" << getLODDecreaseFPS() - << "elapsedSinceUpShift:" << elapsedSinceUpShift - << " NEW _octreeSizeScale=" << _octreeSizeScale; - } - - _lastDownShift = now; - _isDownshifting = true; - - emit LODDecreased(); - } - } else { - - // LOD Upward adjustment - if (elapsedSinceUpShift > UP_SHIFT_ELPASED) { - - if (_fpsAverageUpWindow.getAverage() > getLODIncreaseFPS()) { - - // Octee items... stepwise adjustment - if (_octreeSizeScale < ADJUST_LOD_MAX_SIZE_SCALE) { - if (_octreeSizeScale < ADJUST_LOD_MIN_SIZE_SCALE) { - _octreeSizeScale = ADJUST_LOD_MIN_SIZE_SCALE; - } else { - _octreeSizeScale *= ADJUST_LOD_UP_BY; - } - if (_octreeSizeScale > ADJUST_LOD_MAX_SIZE_SCALE) { - _octreeSizeScale = ADJUST_LOD_MAX_SIZE_SCALE; - } - changed = true; - } - } - - if (changed) { - qCDebug(interfaceapp) << "adjusting LOD UP... average fps for last "<< UP_SHIFT_WINDOW_IN_SECS <<"seconds was " - << _fpsAverageUpWindow.getAverage() - << "upshift point is:" << getLODIncreaseFPS() - << "elapsedSinceUpShift:" << elapsedSinceUpShift - << " NEW _octreeSizeScale=" << _octreeSizeScale; - - _lastUpShift = now; - _isDownshifting = false; - - emit LODIncreased(); + _octreeSizeScale *= LOD_AUTO_ADJUST_INCREMENT_FACTOR; } + if (_octreeSizeScale > ADJUST_LOD_MAX_SIZE_SCALE) { + _octreeSizeScale = ADJUST_LOD_MAX_SIZE_SCALE; + } + qCDebug(interfaceapp) << "adjusting LOD DOWN" + << "fps =" << currentFPS + << "targetFPS =" << getLODDecreaseFPS(); } + _increaseFPSExpiry = now + LOD_AUTO_ADJUST_PERIOD; } + _decreaseFPSExpiry = now + LOD_AUTO_ADJUST_PERIOD; + } else { + _increaseFPSExpiry = now + LOD_AUTO_ADJUST_PERIOD; + _decreaseFPSExpiry = _increaseFPSExpiry; + } - if (changed) { - auto lodToolsDialog = DependencyManager::get()->getLodToolsDialog(); - if (lodToolsDialog) { - lodToolsDialog->reloadSliders(); - } + if (oldOctreeSizeScale != _octreeSizeScale) { + auto lodToolsDialog = DependencyManager::get()->getLodToolsDialog(); + if (lodToolsDialog) { + lodToolsDialog->reloadSliders(); } + // Assuming the LOD adjustment will work: we optimistically reset _avgRenderTime + // to be at middle of target zone. It will drift close to its true value within + // about three few LOD_ADJUST_TIMESCALEs and we'll adjust again as necessary. + float expectedFPS = 0.5f * (getLODIncreaseFPS() + getLODDecreaseFPS()); + _avgRenderTime = MSECS_PER_SECOND / expectedFPS; } } void LODManager::resetLODAdjust() { - _fpsAverageStartWindow.reset(); - _fpsAverageDownWindow.reset(); - _fpsAverageUpWindow.reset(); - _lastUpShift = _lastDownShift = usecTimestampNow(); - _isDownshifting = false; + _decreaseFPSExpiry = _increaseFPSExpiry = usecTimestampNow() + LOD_AUTO_ADJUST_PERIOD; } const float MIN_DECREASE_FPS = 0.5f; @@ -206,7 +129,7 @@ float LODManager::getDesktopLODDecreaseFPS() const { } float LODManager::getDesktopLODIncreaseFPS() const { - return glm::max(((float)MSECS_PER_SECOND / _desktopMaxRenderTime) + INCREASE_LOD_GAP, MAX_LIKELY_DESKTOP_FPS); + return glm::max(((float)MSECS_PER_SECOND / _desktopMaxRenderTime) + INCREASE_LOD_GAP_FPS, MAX_LIKELY_DESKTOP_FPS); } void LODManager::setHMDLODDecreaseFPS(float fps) { @@ -222,7 +145,7 @@ float LODManager::getHMDLODDecreaseFPS() const { } float LODManager::getHMDLODIncreaseFPS() const { - return glm::max(((float)MSECS_PER_SECOND / _hmdMaxRenderTime) + INCREASE_LOD_GAP, MAX_LIKELY_HMD_FPS); + return glm::max(((float)MSECS_PER_SECOND / _hmdMaxRenderTime) + INCREASE_LOD_GAP_FPS, MAX_LIKELY_HMD_FPS); } QString LODManager::getLODFeedbackText() { diff --git a/interface/src/LODManager.h b/interface/src/LODManager.h index 1b3797a0ca..4ec36e613b 100644 --- a/interface/src/LODManager.h +++ b/interface/src/LODManager.h @@ -19,29 +19,13 @@ #include #include -const float DEFAULT_DESKTOP_LOD_DOWN_FPS = 20.0; -const float DEFAULT_HMD_LOD_DOWN_FPS = 20.0; +const float DEFAULT_DESKTOP_LOD_DOWN_FPS = 20.0f; +const float DEFAULT_HMD_LOD_DOWN_FPS = 45.0f; const float DEFAULT_DESKTOP_MAX_RENDER_TIME = (float)MSECS_PER_SECOND / DEFAULT_DESKTOP_LOD_DOWN_FPS; // msec const float DEFAULT_HMD_MAX_RENDER_TIME = (float)MSECS_PER_SECOND / DEFAULT_HMD_LOD_DOWN_FPS; // msec -const float MAX_LIKELY_DESKTOP_FPS = 59.0; // this is essentially, V-synch - 1 fps -const float MAX_LIKELY_HMD_FPS = 74.0; // this is essentially, V-synch - 1 fps -const float INCREASE_LOD_GAP = 15.0f; - -const float START_DELAY_WINDOW_IN_SECS = 3.0f; // wait at least this long after steady state/last upshift to consider downshifts -const float DOWN_SHIFT_WINDOW_IN_SECS = 0.5f; -const float UP_SHIFT_WINDOW_IN_SECS = 2.5f; - -const int ASSUMED_FPS = 60; -const quint64 START_SHIFT_ELPASED = USECS_PER_SECOND * START_DELAY_WINDOW_IN_SECS; -const quint64 DOWN_SHIFT_ELPASED = USECS_PER_SECOND * DOWN_SHIFT_WINDOW_IN_SECS; // Consider adjusting LOD down after half a second -const quint64 UP_SHIFT_ELPASED = USECS_PER_SECOND * UP_SHIFT_WINDOW_IN_SECS; - -const int START_DELAY_SAMPLES_OF_FRAMES = ASSUMED_FPS * START_DELAY_WINDOW_IN_SECS; -const int DOWN_SHIFT_SAMPLES_OF_FRAMES = ASSUMED_FPS * DOWN_SHIFT_WINDOW_IN_SECS; -const int UP_SHIFT_SAMPLES_OF_FRAMES = ASSUMED_FPS * UP_SHIFT_WINDOW_IN_SECS; - -const float ADJUST_LOD_DOWN_BY = 0.9f; -const float ADJUST_LOD_UP_BY = 1.1f; +const float MAX_LIKELY_DESKTOP_FPS = 59.0f; // this is essentially, V-synch - 1 fps +const float MAX_LIKELY_HMD_FPS = 74.0f; // this is essentially, V-synch - 1 fps +const float INCREASE_LOD_GAP_FPS = 15.0f; // fps // The default value DEFAULT_OCTREE_SIZE_SCALE means you can be 400 meters away from a 1 meter object in order to see it (which is ~20:20 vision). const float ADJUST_LOD_MAX_SIZE_SCALE = DEFAULT_OCTREE_SIZE_SCALE; @@ -78,7 +62,7 @@ public: Q_INVOKABLE float getLODIncreaseFPS(); static bool shouldRender(const RenderArgs* args, const AABox& bounds); - void autoAdjustLOD(float batchTime, float engineRunTime, float deltaTimeSec); + void autoAdjustLOD(float presentTime, float engineRunTime, float deltaTimeSec); void loadSettings(); void saveSettings(); @@ -92,21 +76,15 @@ private: LODManager(); bool _automaticLODAdjust = true; - float _avgRenderTime { 0.0 }; + float _avgRenderTime { 0.0f }; float _desktopMaxRenderTime { DEFAULT_DESKTOP_MAX_RENDER_TIME }; float _hmdMaxRenderTime { DEFAULT_HMD_MAX_RENDER_TIME }; float _octreeSizeScale = DEFAULT_OCTREE_SIZE_SCALE; int _boundaryLevelAdjust = 0; - - quint64 _lastDownShift = 0; - quint64 _lastUpShift = 0; - quint64 _lastStable = 0; - bool _isDownshifting = false; // start out as if we're not downshifting - - SimpleMovingAverage _fpsAverageStartWindow = START_DELAY_SAMPLES_OF_FRAMES; - SimpleMovingAverage _fpsAverageDownWindow = DOWN_SHIFT_SAMPLES_OF_FRAMES; - SimpleMovingAverage _fpsAverageUpWindow = UP_SHIFT_SAMPLES_OF_FRAMES; + + uint64_t _decreaseFPSExpiry { 0 }; + uint64_t _increaseFPSExpiry { 0 }; }; #endif // hifi_LODManager_h From 9c4a0c8c702b6f3565c2c1c1945aa058503d48e4 Mon Sep 17 00:00:00 2001 From: Andrew Meadows Date: Tue, 19 Dec 2017 14:12:46 -0800 Subject: [PATCH 144/148] tweak LOD adjustment logging --- interface/src/LODManager.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/interface/src/LODManager.cpp b/interface/src/LODManager.cpp index c416e6a6c7..77aabccb78 100644 --- a/interface/src/LODManager.cpp +++ b/interface/src/LODManager.cpp @@ -66,9 +66,10 @@ void LODManager::autoAdjustLOD(float presentTime, float engineRunTime, float del if (_octreeSizeScale < ADJUST_LOD_MIN_SIZE_SCALE) { _octreeSizeScale = ADJUST_LOD_MIN_SIZE_SCALE; } - qCDebug(interfaceapp) << "adjusting LOD UP" + qCDebug(interfaceapp) << "adjusting LOD DOWN" << "fps =" << currentFPS - << "targetFPS =" << getLODDecreaseFPS(); + << "targetFPS =" << getLODDecreaseFPS() + << "octreeSizeScale =" << _octreeSizeScale; } _decreaseFPSExpiry = now + LOD_AUTO_ADJUST_PERIOD; } @@ -85,9 +86,10 @@ void LODManager::autoAdjustLOD(float presentTime, float engineRunTime, float del if (_octreeSizeScale > ADJUST_LOD_MAX_SIZE_SCALE) { _octreeSizeScale = ADJUST_LOD_MAX_SIZE_SCALE; } - qCDebug(interfaceapp) << "adjusting LOD DOWN" + qCDebug(interfaceapp) << "adjusting LOD UP" << "fps =" << currentFPS - << "targetFPS =" << getLODDecreaseFPS(); + << "targetFPS =" << getLODDecreaseFPS() + << "octreeSizeScale =" << _octreeSizeScale; } _increaseFPSExpiry = now + LOD_AUTO_ADJUST_PERIOD; } From 4fb9680f3b96654675cff9fcec91b6efcb64755f Mon Sep 17 00:00:00 2001 From: Andrew Meadows Date: Tue, 19 Dec 2017 16:43:49 -0800 Subject: [PATCH 145/148] also consider GPU render time for LOD adjust --- interface/src/Application.cpp | 4 +++- interface/src/LODManager.cpp | 5 ++--- interface/src/LODManager.h | 2 +- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 174424f4ca..f17e06cb35 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -4325,7 +4325,9 @@ void Application::updateLOD(float deltaTime) const { if (!isThrottleRendering()) { float presentTime = getActiveDisplayPlugin()->getAveragePresentTime(); float engineRunTime = (float)(_renderEngine->getConfiguration().get()->getCPURunTime()); - DependencyManager::get()->autoAdjustLOD(presentTime, engineRunTime, deltaTime); + float gpuTime = getGPUContext()->getFrameTimerGPUAverage(); + float maxRenderTime = glm::max(gpuTime, glm::max(presentTime, engineRunTime)); + DependencyManager::get()->autoAdjustLOD(maxRenderTime, deltaTime); } else { DependencyManager::get()->resetLODAdjust(); } diff --git a/interface/src/LODManager.cpp b/interface/src/LODManager.cpp index 77aabccb78..c369920cf3 100644 --- a/interface/src/LODManager.cpp +++ b/interface/src/LODManager.cpp @@ -44,12 +44,11 @@ float LODManager::getLODIncreaseFPS() { return getDesktopLODIncreaseFPS(); } -void LODManager::autoAdjustLOD(float presentTime, float engineRunTime, float deltaTimeSec) { +void LODManager::autoAdjustLOD(float renderTime, float deltaTimeSec) { // compute time-weighted running average renderTime - float maxTime = glm::max(presentTime, engineRunTime); const float LOD_ADJUST_TIMESCALE = 0.1f; // sec float blend = (deltaTimeSec < LOD_ADJUST_TIMESCALE) ? deltaTimeSec / LOD_ADJUST_TIMESCALE : 1.0f; - _avgRenderTime = (1.0f - blend) * _avgRenderTime + blend * maxTime; // msec + _avgRenderTime = (1.0f - blend) * _avgRenderTime + blend * renderTime; // msec if (!_automaticLODAdjust) { // early exit return; diff --git a/interface/src/LODManager.h b/interface/src/LODManager.h index 4ec36e613b..eadb3f2e5c 100644 --- a/interface/src/LODManager.h +++ b/interface/src/LODManager.h @@ -62,7 +62,7 @@ public: Q_INVOKABLE float getLODIncreaseFPS(); static bool shouldRender(const RenderArgs* args, const AABox& bounds); - void autoAdjustLOD(float presentTime, float engineRunTime, float deltaTimeSec); + void autoAdjustLOD(float renderTime, float deltaTimeSec); void loadSettings(); void saveSettings(); From 5c11ae346962639c57fb8a89fc1b4979cec5a079 Mon Sep 17 00:00:00 2001 From: Andrew Meadows Date: Tue, 19 Dec 2017 16:50:31 -0800 Subject: [PATCH 146/148] bump desktop min FPS from 20 to 30 msec --- interface/src/LODManager.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/src/LODManager.h b/interface/src/LODManager.h index eadb3f2e5c..374f6a2e73 100644 --- a/interface/src/LODManager.h +++ b/interface/src/LODManager.h @@ -19,7 +19,7 @@ #include #include -const float DEFAULT_DESKTOP_LOD_DOWN_FPS = 20.0f; +const float DEFAULT_DESKTOP_LOD_DOWN_FPS = 30.0f; const float DEFAULT_HMD_LOD_DOWN_FPS = 45.0f; const float DEFAULT_DESKTOP_MAX_RENDER_TIME = (float)MSECS_PER_SECOND / DEFAULT_DESKTOP_LOD_DOWN_FPS; // msec const float DEFAULT_HMD_MAX_RENDER_TIME = (float)MSECS_PER_SECOND / DEFAULT_HMD_LOD_DOWN_FPS; // msec From 721e9d426aa3462c63e141ff55ebe5c874bde722 Mon Sep 17 00:00:00 2001 From: Andrew Meadows Date: Wed, 20 Dec 2017 09:14:53 -0800 Subject: [PATCH 147/148] restore signals on LOD change --- interface/src/LODManager.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/interface/src/LODManager.cpp b/interface/src/LODManager.cpp index c369920cf3..714cc31f13 100644 --- a/interface/src/LODManager.cpp +++ b/interface/src/LODManager.cpp @@ -69,6 +69,7 @@ void LODManager::autoAdjustLOD(float renderTime, float deltaTimeSec) { << "fps =" << currentFPS << "targetFPS =" << getLODDecreaseFPS() << "octreeSizeScale =" << _octreeSizeScale; + emit LODDecreased(); } _decreaseFPSExpiry = now + LOD_AUTO_ADJUST_PERIOD; } @@ -89,6 +90,7 @@ void LODManager::autoAdjustLOD(float renderTime, float deltaTimeSec) { << "fps =" << currentFPS << "targetFPS =" << getLODDecreaseFPS() << "octreeSizeScale =" << _octreeSizeScale; + emit LODIncreased(); } _increaseFPSExpiry = now + LOD_AUTO_ADJUST_PERIOD; } From c1906215ba455113fc7c24ad3d89f21b76782b62 Mon Sep 17 00:00:00 2001 From: Andrew Meadows Date: Wed, 20 Dec 2017 11:36:51 -0800 Subject: [PATCH 148/148] add comments --- interface/src/LODManager.cpp | 28 +++++++++++++++++++++------- interface/src/LODManager.h | 2 +- 2 files changed, 22 insertions(+), 8 deletions(-) diff --git a/interface/src/LODManager.cpp b/interface/src/LODManager.cpp index 714cc31f13..9e6fabd439 100644 --- a/interface/src/LODManager.cpp +++ b/interface/src/LODManager.cpp @@ -19,10 +19,6 @@ #include "LODManager.h" -const uint64_t LOD_AUTO_ADJUST_PERIOD = 500 * USECS_PER_MSEC; -const float LOD_AUTO_ADJUST_DECREMENT_FACTOR = 0.8f; -const float LOD_AUTO_ADJUST_INCREMENT_FACTOR = 1.2f; - Setting::Handle desktopLODDecreaseFPS("desktopLODDecreaseFPS", DEFAULT_DESKTOP_LOD_DOWN_FPS); Setting::Handle hmdLODDecreaseFPS("hmdLODDecreaseFPS", DEFAULT_HMD_LOD_DOWN_FPS); @@ -44,10 +40,28 @@ float LODManager::getLODIncreaseFPS() { return getDesktopLODIncreaseFPS(); } -void LODManager::autoAdjustLOD(float renderTime, float deltaTimeSec) { +// We use a "time-weighted running average" of the renderTime and compare it against min/max thresholds +// to determine if we should adjust the level of detail (LOD). +// +// A time-weighted running average has a timescale which determines how fast the average tracks the measured +// value in real-time. Given a step-function in the mesured value, and assuming measurements happen +// faster than the runningAverage is computed, the error between the value and its runningAverage will be +// reduced by 1/e every timescale of real-time that passes. +const float LOD_ADJUST_RUNNING_AVG_TIMESCALE = 0.1f; // sec +// +// Assuming the measured value is affected by logic invoked by the runningAverage bumping up against its +// thresholds, we expect the adjustment to introduce a step-function. We want the runningAverage settle +// to the new value BEFORE we test it aginst its thresholds again. Hence we test on a period that is a few +// multiples of the running average timescale: +const uint64_t LOD_AUTO_ADJUST_PERIOD = 5 * (uint64_t)(LOD_ADJUST_RUNNING_AVG_TIMESCALE * (float)USECS_PER_MSEC); // usec + +const float LOD_AUTO_ADJUST_DECREMENT_FACTOR = 0.8f; +const float LOD_AUTO_ADJUST_INCREMENT_FACTOR = 1.2f; + +void LODManager::autoAdjustLOD(float renderTime, float realTimeDelta) { // compute time-weighted running average renderTime - const float LOD_ADJUST_TIMESCALE = 0.1f; // sec - float blend = (deltaTimeSec < LOD_ADJUST_TIMESCALE) ? deltaTimeSec / LOD_ADJUST_TIMESCALE : 1.0f; + // Note: we MUST clamp the blend to 1.0 for stability + float blend = (realTimeDelta < LOD_ADJUST_RUNNING_AVG_TIMESCALE) ? realTimeDelta / LOD_ADJUST_RUNNING_AVG_TIMESCALE : 1.0f; _avgRenderTime = (1.0f - blend) * _avgRenderTime + blend * renderTime; // msec if (!_automaticLODAdjust) { // early exit diff --git a/interface/src/LODManager.h b/interface/src/LODManager.h index 374f6a2e73..cf38342db0 100644 --- a/interface/src/LODManager.h +++ b/interface/src/LODManager.h @@ -62,7 +62,7 @@ public: Q_INVOKABLE float getLODIncreaseFPS(); static bool shouldRender(const RenderArgs* args, const AABox& bounds); - void autoAdjustLOD(float renderTime, float deltaTimeSec); + void autoAdjustLOD(float renderTime, float realTimeDelta); void loadSettings(); void saveSettings();

^K>H#k)|JvcKsdpI|^ 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 C)_aiv literal 0 HcmV?d00001 diff --git a/interface/resources/qml/hifi/commerce/wallet/images/19.jpg b/interface/resources/qml/hifi/commerce/wallet/images/19.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4c25f3dda24fed1ca5c3948f9c4777be7bcb5caf GIT binary patch literal 36785 zcmbT3Wl&wu*5>yS+}$NO2Past;Batvf;$HbZoz|Va0%}2?k)-L5F`*>k|2S|RPLR6 z?|-IhX5O0Lm;Kc0)w_F1@9O<$?av-SD(ho!0|0P13_u0`!=G~iPsY>I(H8&#Pyhh* z0N~F)raoL++EiUrO%ARs3xGfXfT^Ht@9YA`1ptJzhr6b{6s^92AuY-W01Ti3$N&!j zm|MPfRnd~u{`+dUtTgRwO?j#REc2JU6#(@2xyYfQPD}g0j{QHuvvhU$0059W007Ue ztY2FK04N*)04Hw`*T42_000Or9RF(Y-#7@}^$iRG08IK<+x}a#|I6p!TH>#^LO5Fi z0Qm2oU9AvSfAt6e08w6^)>Z%jQ3e1Y(#zi38vr0n001yJc_Qoq0P^s6F2dUUH2^>{ z|JpsQE$sjR$_)Sjrn|PLGyp(F0RR=#_8;2fAKJs($K!9r(k`yP?)J8J9<(f$th78Y zUI@`DSbIBJdw6iDn_D`XyIavpyC7W6oqYk|-!cCS{J*)Sh096{@VpQZ;Na!t`A7Qx zuY>XSRhWy*+uNJd-rAD$Z$kfz|EI%$gMX~Y`FFkl${nqYwT-!_lLzhJ zq*}T-xp=zMzIHXYw5H|w-<$aVd*VO%$3ECKt!=E`t(`5cX?5+bz3rWCX{BA9t?WJQ zU7Ts{o&Qf2{{Nizzwz(B1^|GdmUG zo*vDYfA{^r_}6LvUjZiq004e%Z~L$Qk=E3vwe)oN`nS*DV+kMu=l~8t2#^8P06oA0 zZ~(l3ARq!r0J4B0pay6I2EZ%860idhfIHv~1OOpGBoGTE0ck)s@E#}uDuFtn31|m; zfI(mkm!QU+;)3_xZe zTaYuz6BGan1I2<;K-r)|P$j4l)Cn2{O@ih@>!3Z*3Fs^65exxif(gM?U?wmZSO_c$ zRsw5-O~AHbH?SW#9Gn2o1Q&s8z-{0`@HBWCybC@9-$DQg280;$48j2sf=ENuAchbd zh&v<*5(7zx6hZ1BU666eB4ihG4*3B^h7v$&p&U>Vr~*_6Y6*3N20`PX+0Y7T8*~J^ z2;GBTLw_S-AyFc+AqgYFk@S&lk-U*2k zko}S4kn@o1kq40Hkq?k>QBY9GP}oq!P}ES&Q9Mv0QL<2KQ2J38P!3TZP%%(xPGV590?WJ|+xP8q*ll6Egv`9CHA3 z9rGI&78Vnh1ePI|2UY@BCDt(34%P!U0X8Q#9NP-}4R#K88}%!f zP@XQHue>l`OWqvbrRP}B<(|KJ-tqi~kB!foFQ0FXpMYP5|1JLz|1SYS0e68qffGRn zK{LTz!BrtbA$6fRp@|nrFQi_)dC~LYhp>RKhj5edl?aE3qezv=u_&{swP=axff${b zxmcmtt~jl@nRtQt?#pK{&0iM1+?Sx2u#zZ~_#(+F=^$Anc`3y$Yty&@$Dk(z?@@(oWRg)M3%_)EUyn(KXhs)Vtf9uPKhHxoNW*l9`@amDx{oHS;3#TMM{F zuEn*bv}K0nnU#dqJF63GG3ylTFE(N}DK^KpVz#NaCw4FG((TUerR}rrZyXdH-aFho zsyUWB{&CWCsz;zA%n+T<_|A^bBQDe~J}&dFY_5^6yKcg6X>Qlv}i);Q2WF%=p55qkX^l$@!J~L;WrNhXS4jgaqsbN(L4N zfr2c8hThP>34e1KEFWAEf*#@+G8@VrniBdwOfRe}oGLsx{2)R;qB;^g(mitZt;pN= zQP3#+s1MQ4qqCxa$5_Qo#d61{$Nr47jGKz*iO-DxlVFqZAyFVPKM6U>IcX*NWpYId zUW#AJL8?k>+dJBKG4H;onWjyq^QFJfK+o{Z*v(YV?8susO3M0~ZI`{ABb8I1OPL#; zd!J{Ow~#N9U-zEseeCd;<<8~1 z6`BXRDdnz>q;+KxJoy25(m`q&1b!L#AC(X4T$NvUb5S*W?L zg|Q{Km7q1I4bSDUh{ni=QKiv|F}bnfamn%i39*TuN#V)PDWR$MX@Tjs8UC5p zS^nA94+0&9n0qnTH7`2fxA1ada8YJ)Yze+Jy{x)CzoN6Uwrae(yJod^yzaDq zv*ESzv>CjGv=y_ByPdv6xl{Cs^;7+>z;5rJ%-+nt*8b*!<-ytK*PnkLh96-arGKIM zQhCgK+;bv#GIwfpdU)n~_H-V3fp?L6$#U6pC2=)#t$%%Z<9_q!Yuq=oZ{^?lz7O51 z-|pNY?w;;r9>^XlehB>-f7E;Y^5p#!kDU!cgyC@9FtXn#TfFF^nDhaf|t z$Y?0YDE}DwZ}MjVz(WNAAOHfw1HgD72p;Iq2&f1E0Aw)aA9oxSRAeM58U!5-0x&=T zfD8fs{WJQXAR|E`C}30&8i0<03xGjjBrpVujEsZ?f*`wqzz`@N67n;A0EI`A09Av| zoX{cZSfRlvHVw z*I`9XmW+H_`_24JGTK(MI?U+dEu>`REUYjAL7^AIa`FmrMcu!?oKwBviHG4KleS8uKcF_c4O%aR{zz4KM~ zrD>W9j7|H$1d;R6>K3J@eS=MT64OQ!KXVdKtZ=iiA6Ya}mwvXvPUd7dG(zBS=Q4`Q zZ%{$NclzOAhvyi5^EHd`{WYZz`8896YSk{W`5_N+vp()+4w|@cEOv&YKa45;tmX@Audg^oew-#{&JaefqC3q}8^f{|BP6P)PZ8 z?s6QPI-OU|bjDzGtO!QKv>CyBDmg2p7F9l&S4mboOKK!5;>VyMF~R9B)L!hLAAxlP zE2F#z27XoH#5LP)wRfi!ogM8s1b-ztiNupU$_rMkyvr=>sytQPszeXT6vk>3-n46XHqsFw;72Yzm9WKQ%aq)3 zsYFo+sKq~F+f~(K&3_>&%vlmyR-(~72D3{q5tB4+ zpFFG(VE~04%Linv``e_QtBb2Ma6vWyxZ^Hx>#oX2Po16(K$DSDbH!evy6sOK&tEoL zV57cm#P;TE>l7EhC%Il6&StC4MKbeC98X=rFaoOR%vQ_hZO7yxJU(sN#T zwO)z_^}aaC_F+aJaIkS%SbVxC>0tJZ%xi79m`0LyROJtzK-GJ)TI0>hA-?3ACDIun zI-%A{+-9r#Bzfh4czx5CTfu)^gH0OTj-R=4bWbl?x)$)Fsp@Xypnq#?#Q+z-*rfg1 zCB9SBVURy+>ITwMcTXM+fz-C+2k?nj@)*^)AO?roCi(_1F>=CO>Q(jhYl$c8vJEuS z2u7$QPCIHNdx~<1{+3Ldm31Y-)7iZH}V6f;JCA7`82i%_3C`Jze+<*YAEjLXA?Z*NAx2aHz+}9c6N03s;>V%6syy4k#JBwMR8`j zRWwB!nbDbKT#D1*ZQD~Ts-k&JN6Gkyy=VUw#?A%~wOw5guB_lby0WI+uleAuu>r$D zmA8qalz4{P+UI8vZGQBVSxwcjeS@NMqT1nTc$MoEEKVv|q4o;IXUIb>;xZz22(hmU zGI3aAL&DjgKb9udj(Ay{P$U>kzXOHTBI^jnVEzG6wv2e-^D~PP zN1}!S(^|jGe@yK7mQ-s{Ir)c}@@*^Oy++^!iCNq=I65<{P}t_LxGE`#4`8|3h@U_< z)G$NJjvC3(hqS3;3Z6Xw0Js7-U&`wFLr(Eomh`!WbM7InJqm||RjK;nGYRu+efwS; zoBFBsbK(hxjv5iKBegReSn)|gn(YlFZC$^pMJst!7_FuGtZ4e5?s86i+#UFXeLW#IX#d?3)_!SQ>h|J=ZHcP!RQ>+NrTs3|K07 z6&Ie@eYy_`RL=pG73}O94Q*BGI0+hK z)YN%n4^0hRs+2gh-6rU1)SlE)c-P&+2roB0G)k}BU&z87&54F=@Z^uSLM6zJLlx$d zD**RYRgke}VegTF=%hOSjAYYKm-E&1?1czxZA|CdqV_9@BbJl1MCXCE&Th=-IMpcU zCW@WSh^zHCZ&`P=Y#dDZBU$v*#l z?)mc1U7pABbSXI9>9CQ5T$h_?l|`;1T}Vw(=G3aXb?@vs(D|f-5T}3Z)ES{;U-G?C z!PbtF&DZQ{Qz~zEQy6T(nA3SGN)6@8_G;pqS68!uLJl zw2tdSjM==(=TE=LWSnsk&#bl`J49Mn6OptkQ`LI0D+^vMyjEjx{?QT8{c{d&gVZN% z^OeB>HUrkr0lGMBF5Mnqw|tEC5qlpDD^!TP80PC!dCY9o zSRE|lU|)m!6p+*RvBTEj z{=`p1W%bcI27IR9#2B>G+@(uo@Fn{`g^*kgA5kZ(g-@3B1{~~k+L(c#Rsjbm*?SP(`wz=(>YKm@NKkLPk zK8&_D0@TR?hiM*u?g91jD1WcYcfz=)0;;Kw9uD(PM3h z$d>5z&;QciujNL5^iqLs5Sxf!TJ~!&BRVI>S#&l7~Fa@gqqz#m^`uWOyxIB|(YX z(UYLw5}&Uz<`OzvJ}k17^+Ps&luC3qt=c;c7TV)G=u@O68Lz%*Abjl8C$fs}Wyl42 zwKTT`)9~bJW0B|^7fs}YsL(B#a(K3wvdcpC(@FE)(?LX%+ij16ci;TteVCHdd`)qq z8QxAhats|4c`i{T{Q7a~gUOnoK*P*a0%cbttPr>p)bgis8GgqEo0P@Kl#!xqXB-rS zK5dWRtj2SAwqn}JpM0=Y?l&NkvDPk)A8d`U{dBS?wxC!wNU9#6(>2xc0s0+XMs{_F zek2%cV$Xu~nNGtph-|D3{j}2>*jC*~T^TuZfdo-*;v=z2(WMY=rpvjGP;qoS2S2Tl z2<&BRJ3PXOBrHj_=PsLRS~%9i-cY=@%HByfw$dC41y?>JN(inGMllJ@I7HJiX6mGe zHz3-(-3dW!Ij8c`S5s-^uDmK<6%t#azoEU$k$Lr-?al(FS|<)&*+d8iCe8!*{1xg? zA9Jut>%Da%gLth^5W0VGa?XF?chWRj z52yN~6nZxwyrh3-c`$ocMmV26iQ#P2IoCLip-T*uG0t~=uJAm=LXXMgjg68wt3!4z*5JU<5Hj3axm;*1n35>MLYDU7Gg%&85f#_m+Uhla)Srj!Drs~IJkR{EG$P(+K zEJ(-2-Q#AjSh}M#MPcNvu8_)(#0BVD4)A$m|w<}o4TN&+XZct<{Nkv7F5lnJ@)rEcBa^-SVT)5vQO@ z@x9oE*co0ui?L&91njrsX9dX`OWqLmDdKz;)pj41j|uIai(e1na8h!|9}Z(kOnH_g zItT0)wpp`bthz?8ru=VGvQ=->ll8~Aq-q;;Ea>!6Od#BI_*~})l~&p8MiRP;evkH( z>CCz!9^HOHSOQsaEbCk$GNJ6WXT>am5qDV>HJPIX`;;FSQEynTHC3fI& zS*%Y&5Z{47W0~%#Qkr)R+L?H}D_);I=b<)SZ0z3m6LfrznX_PZTs%GH5*LoVw?KZp z+Y-yTdGvw%6%#g=pccO5|H4i|Fzsr7y)X>dQ*C=r3)+gf0dPvL^H_OlE#YLXM$W9( zGGRlZJqqm0m{XF1g2EJdj+-h%wANPWvhFfVH3Y~%R%L;)SI6PrO!vZWw<0o$CfNN3nt zG<=P%Sq}CONOO#RaP2)G5m4njZrAM40RJ=+)6)I^hJUY@=UDD})ZYB`+i9b?RfUFO zhDckUp(G^Ci4wL~M_=~F=CiwwNI{D0%@Bm%`!X)=UV~$PVm7s8o)_HNl%po!_*+)= z5)^~cBWc5S{bSucd#6%t?AVa#cePWbVXnDw-ceN=bU+N2BI`vulI~l zVu`YAdTCyv{gis$E5)!dt7brer7sgq5&PgiSOhTZ{%B z2I#P|Z_#=DtwjYJuXD0Yd?Ju=%8SF!NW#1$ zvpLpf>SE8>s@tomTNM0~Y0_tiqDa5e@=(&Zm+a^UnLiae_mL>wss(ac#KzoqG7dZK z_s87~nsGDJxcA)N#o=tb2$)-Noxft#Izb_jW9KXKQolK=C!E&Kvc8GyHr0bi)YP4_ zjc`WOl2GJ132Yu8x;PVZq^p|^#*kTI@j2&Uqv5km-7+t|EO~sX_TmlU(Ak-NS1$&; zK}>$0p`Qg2r3!C)myy?Y4%WriYZ~|7%Z{Jl;I181SA%N94O`?BFj+cmphk$xX9=1+>E&8J4i z{GKd{1~E14G7){IDl;SA;*bcvoOO%j`}gL>TlHS`g!K*nc5{Blr~Rd(K^feV%ef}k z0pcm4WZdM@#C8Tbjz6YbCE54dE}#xC61#`{4PTSs?Q}$b$B%eMUb=&(Py66E;z5K7 zliZ<96t~$~JFImWi3mZ#q@O^fN|wGccvKUB1zXH2J;(P9iLco}rVpJ-_22LsZ0);z zs|Zpb0~g~8msy14IB)M1Ru-sH%3_HLj{Op}d8sC};xqdA&g&vKrz=DIJYfEEVMo4KCi1TqxY%rvruYkasrPHqM=+RITY+7mZYXi;9BFvM1B(R>bF45m~&Ex4?S9*#14A-^b40 zwbfI~&{};LPk8#Wg`iPVh?KOF=Q$rrYp>S>lYkl4+($&_D@mGOM8}!gCTu<%nR#?h-*Fc@>e2_Fkk=&`) zTW$UT(OVlkpIoTio*CISu*3u!YkDPqS7A`zp-n-~YrS$C$(xca%X@=94QI{P!N+Rq z@BLlh6W|>9ww(~2InbkLLSOTv5utN;n&Cz)^_KPWywX(R8Q0$RoOz=(F2*Is=H^H4 ztg#fWC`w~|w&g`Yo@HM~cU1Q-==NpE%DezYYQR!`R)(i?6}<*=cQDC(LO$hl-$f|8 z=4cB{h3RX(!6z)ltrCZOV&DaHI)jaHq$2@>W8>#DudRw%3QU&Z$FDOF_XfYDkJw*x znJ?R3-%rHJWYT_I@$P0RvYqp_eES3Nj|A@A z$7G+jKeSUTh1#nd#If22?*&39z^TM#gf17A=aBZlt-6Cfy+<%zCWCff4%T)l0g|6Y`H@ zP^Mb~Ug|p(34W&Gkigp=$G}h1RDD4nZQOu`wyUCiR>*Q&=Fchobx)s=D?T^j@&{cj z%8<0?72ndjdSwXhytKGUjJC9v4&69`4!_(0^1#PN1>jgMvg1ec-Gy7wZEbgad9RoM z1OpTsFJwF#8bWEc_#?<+`f{_0;-*%;Mj6vJQCY32@zL(*bKWm{!bTCdc#Q@Pc8#oT z`_&q#nKE`I+QFsk-YyjFuT}(FANm9Q)w`yhbIsXF@WUBpB?br>!saBv!Zz{ER0l4s z-CCf6Ca}U7lic&S&7Ty{U(S7!EBTNXC^GOE@!3*{kzZz6yH(%gj6p7R%-xt6h`PVDak6)yzwpjmLa1u@O|&o7`y_k%TEJ5x+_`6Z==Tm2ng~uLSTU7W#cjv*W;d$q*{gW^OZ4Nj z?n)%4zm#cl{bmSuePlH1H}JjjTmP4-VpK zUkmPqof=y-E}HYruV}9pPmm|{3C1ha;-`q;Zp?O_;=JBWq1MN%kY3FkV=Jg51Y1Uc9wh>IYHrGeEL?X{D6kVs4 zPBTSb7mrESApPXCUd918b|rQ&_iucO5YfQzbl+|3JLCviD^+6!5%ZmFjv+2 z%~y z_r1opz=`7b=JJkKYT1E#TT6oo_4(0w_&4RRlV2=w2$Tn!^PF+a{XruzRlbed(70>{ z6U-TYjJHQ1-5(TNWDcv!wllH`|>NOt5O1 zMJB77f^rAL0xm5*>XSTUV%tvPJkRSx%I7*P3#=v~76`4mpRz>lxi86!a~o*SzoqS; z`#X5|Ksz*dToYy6Ed%)>{flF|%cMm|Z)xCx0W*0xAHR3Dvsrk) zu<6TjfNQ~-Q`t1TgYwz(P^~%|7lUVyx9`4*cygagr4+^;d=3~KaVx|&^_eH91i_ij z*X7SD-bdR=e|RURGuSXQ9;JQQa~LtdXtm)N;~woRS~7yS6l%#{+P4xpHg?zd-1=Ai zQCokCn>pjkmWHpS{79U~1w&2YU9L8zHjwxks4b-^0v7RPFEe75pMrYTX8 zcT9EGAj0*<@v|`+l5!vGWZlx!qLlC}9mhzi&xn_hy@6GGlMGwE_N%Ri;DUmcL_#Mh zJFe@oSOA;BVQf~!Vm)tCkq7i4asazd+!Ut%<&8!jvzUE`z&_a@fb-~_fM81K7d7cp z61iSUw%xFnruJl`ck@<+jW|l{=-l&8gQ=#0g*D;Zwo;#vCHw+-93V#Px^Hh%8df>= z2jJvbiny;$!>>dSwU$uD8=ui^XY;E*&gXc?jaiaak2aV<6QRDBhP^Q!7m1 zq6Ue5|APods1NC^$jguEU4#5qDaR)U7R2D2nPt4sUE~4Zxbi;ST!Nz}p zUaUN!Q66jOYL8WlTe6&nn(ny6n%AG*`H3OYOk5h2LR5h!H1ATSte8HMt{kd%ZQSiY z{o0((oTy!S!X^r`G+bCqD}^mn2(aNLf@LXs9j>QHSJFaFwcaYEmEeUWpcL7gFVrY8 z9Ezfc!L*OqyWd*A%Ze#}zG~iq@D$m@(_B&$<1Q&p{&YUJr#k2IraI(eclw)rp3V^a z_Wbre945)e1de%^#6%}oo8O|5+jFrvFv{bS0HeS^1;kaajvW%I< z#H>b*6MO)VT`~7TB25d(e3PzGGqZD}DLOF|0SA1%_MM*GINeu+FSk9>5p0G7+M(K# zU=Rvvax{f~?imBIS~#Pkp$DVV%LCGocJmOe(`zTgpbkAr*^Cp`rn;a)KPSaHcC$f~ zs6~kz#0blXx7}gc_7z>StK{`Tr)68zlypKGhwdp7E2>_I6)E)KnS8>48-qn8Z@})RdNO{o+IU6i-X! zLRjgq?7IiA#YCpr=R9!ZS-moFJekWdLFFxBp6uvXgmH-3xZTY4*caDtdyNgu8&%Gt zKD{jAqsW(aaO3&A;V<^OpQ$F_co>-=%5NwY8j({o7_^QkcgN7gtuml#tpg|{ft2R9 zmQ&dTFz!@U-{Zu<2}3f z!L3hr4Pm8AdfYITQ+Fn-oknJu3zbh?HMwi`uq3nGw>s&;uU;Zy2OT=P%sGv@Dptd8 z3?s#b<)N9#pQvQX%HK`RY=kzkP}TUBIwVuD(kW$+r9u)2#DBu9($1~Xh&cFM*n;EP zn-oRv1TZcRL*prU*@{iF`dp@q>{w4vEqT)P2PqT;JKg<#?57!R^7&6^ISss4Qy~Aixw1MaN zPZX@`ttzwL5QXsCz=Sb}qlS|k{Mzx< zqGvIeT^CuU?WtL$6?AvOg!o+k_TzY^iXb@@6{emJLo&@AxmK*`B<3nr$VwU+vR%nZ zq+LPj8(~t-gc=bXj(Q>~=Z?;cj$PIPC6ZPs?T{xIPIAH;M;3Ttk~*2n3>p(BBK@*C*vrn2A-5K- ze#3H(GUVk(ArFaQtN!}FP(jh$m+pPlk3_P_A^|tU4t^rh7C5a#3mrW@J!w0U@OrJA z@2N2$w74*s$~S z7c!rtvcUPOH=QHdv+}E$(=y!!)#+kwu7h_;s@eWR8(-x<;My;JxkMo69^CRQk$V{w zj8^UC^TV3RO7zqvQOr@4;;}l`wqs3?ajX&B2Od#O0sGlEzx!=_EHRDg>hY>722Zy0 zVfIudWqP!c)>2-fl1m{$r0bvAxqIyumYXa|kBb~u81g*CfOx#pld$MlLmV+7)Noa{^`sGbhwXwsuzAEqszKGA}FTkv;wVIt-%OEXF?VJ#y8P z>Zlj7UMjCGE()FinC+|Mr-u=muyD855`|2;YWyEo2#uDVaT63|Lm7=#Ux~V)e8n2r z3)-+l8GT%W2+O)30%1jG8-D;(m_?3eJoB>|GUxZ@M4dt9D1I~3dK#eOu?VMzaVQtv zkEBW2#uTFmfnC|3KJ)T1HE9Y39|1X`#9n*U8dL9)x4?LgX%2ym? zSE2Rl;?PW^37JR`T=zP&g42oGS}6r7tZhL*b#rfQrIyZK33aJJ*lxz-YHr8kW2e^R zv|8r1zU!oQW-pZ!zIM|z^sPT@jBMkEBr)C3=;pe$!D<2u(6SErs6Tik$TSo+dksqthFBoatTH3-?;4#C);#)=;e0X@F+&V)y%5}*5&p>X zPTP)(>@A@HIcMO=E^4-pN37s<_`ZuyUs-^}xL}4okr_Iz#pUSL zmA?Jn#a?acRLG``L0*w=Fg?2F_kJ-eN;dwzwIh$A8|-2;!skCy&2{)4-!f{3cqSM| zrETlpZ6g#G_V15ok14Dcy$$@Uol0Aw_}n6v^)z|5w*<>wJFPZo-&DjY!mTNpIR+}R zF~T$lB_q`5y4l@ip&Au7BAL$KHeQ!%7%n*eiL#s%9R2jHDT*Cg3_ns8gHjIv0MhfH zXE?hn%PZV%VO@k3wWJIkLc^LB-CSv;Rk1T9=oCixmp;?Ve958?_b>9D%2&d}OB>Aa z(U?Jr+s$vW-Vxq{tHQ`fN^1sA-v1D%V2_DqmDc!r{(1B$vqn(g5h1j^0Y0cobgyo0 ziPBwcOWAQnU%=%kY}%s!gm>%O(3G_*ay0o_Dy_A#ZtK|$k?b1fn?Z~E{Z=2MNtbSrj)QXI=jmNNnkn{>&S{o-rRa6|`KJs!*I_yG zglbStK9jFmrJfE}*Yx3!&@Ynp5f4-Aiy?Tbf77*3FKiYv| zNR`m2sBAXGK+su}6LhiW|3+M2)3X&^sl@xCl1Qo%%O^8Ze4*^_;o6+A1g*e@Ki!zP z{PpD@AV52|H2-oTUC`X$>!_+M`9kTNkJg81ESx+e6$pb&Lq~&+$trE*(i7Jdr%g>9 z5}iB8i}&PwPLgmp(v+RyQUQo57V>7>Q6+XMBE$8Aur2L(7hHGeoJijf3@etQ zqi(^I(3Z~)DKgI@-d?epj^_w1w0+hM__)-wh-5pZWT5@Mf!JSLhL ztD2^zYCW$kG40x|g);@J{Q}PgHt{3jpFxs3I_ynV6*Bf#&k-Wih8KJF&a5`;ZEr(p zeKkqAi2Hj|zrcNApJQ~a1m!5AsO~wlO|SMFSkXV#6{Z+a@2}c)v}GsP^;{#TR=$?v zQea5l8$Zb;A~?(*Do8^6y68*QN_|DtWRcRXh>6^K+*Cqz)ofQDkJ{TmML;#NbW+-3 zmZqTjV+r{+SzqBs4p0q+d{Feb+rX?E{U^gTEZ zVs#5dY42FCA_iAp7LwxvPa&D;h~f=|Ogq037c|?10N_yPz}&BB>O9&wjGRo$miiTP z99Y6haU*n3dl?5Dghtc$Q@qRhz9)l57m|-fp9e;}QwV1jQmp-6hn?E;RQO`4o4!Sr zs{jUK4lGyW64;+X$y$3>a~35y9g#Az3JUHNBzJK6`NFC!)37K$L*|?6@A%!!7cnBz zs>YM9Dl@bDBK|_2&Js@O;3HI~3&pcil(JWq%T}1CFQ(zxR0d3332Ibl<_R^h9~!6C zw6tDS<2YZpb~kz3Vyt1$=OowL4<%=JC+0I*OIaP@@{+W;es9QuU)uZo&CeH92PL!f zz1KoC0Kd2AD9#(MJOQ8U-jcy2EQDD^Cw;;_$fi+Ko?EI#Yh7YpfjS5F?6v26jhJ-D zsOwRRD-v5(7&M<#p}*%a+!3dgc^G>~yQi4ThU*C{c`9(UK!wKce11qE=~Sf9LDOgQ zAHdeif!3Bq?W340MyNEiESm_LYLqvJCkpHtj}gd=ePgW1wV-25(2qqf;aiJY&aSk^ zTo|V#RrVs*>HTmKn0@nhsT9o8Hjj2CYKe~5w9TdTO%+jHRa=#VTvi;DVpkZ$ef{IN z`nRR6PtJSg!x3kU^yFRZ8c)#2QNCL)szI}li2~@vl;Ukr>o_pDt8QJOt-Rm))v_#{ zZ@A{&u6>Q=`9gt~b;>~e$|KH~(E&~7)Cg@Rr?eo=(s{3`Bn64Kg}~tg!Tv;~LK^|y zjF5u&LI`8*N@;y~2yl)=t>P!|eMx)R#+Kg5&ct2O4b0X}GjTEu(E6JlhbET&K z9IBr)$VjI{Hdz)RpdipGP1GK(yB8UrK-khAlU79^u6#Rld!9fTxVNYO_0qIxw5r0~ z3$LXjQbMgqzd`WvE#X_#LUA3l*djb`HR_nb<+=>{@X?=l*=1yUhcJgDJx@9P6BvC+ zK;hH*=oNwwB|a#S{5xTl6;|F$9AVR*r-GWU<(%MCT`CNohIlA;u8kf2tOmJV<$@8< z*X0oE6Cee-Pt=H?vQk4u`$q2ce2U4?XBr9NG$Vn95bFu-lG%H1GO7aQZ!?PEL}gmN z7RI(q=5J6z&0|VF7`uUKSiqW&XxRhfmB$_fsdt3e%hDZ;`BkW8BFOi)Ezwm=psAZT z`$x-gR035pQvwIvxe>V&`id>R-?XX=DicuC81*W|cQDKb&9E{OU|^m}GVOia>*77$ z4(qXRMfZRE(o#qcBgX8(=_oxFKY^7&CC7$W2I`>koi={F@u2NvZIYC-3d0*Ni$gdY zzE)Gtb=R^U7qxW8tjft(TdrVpI++w?eIxd)~8YmI{G-+@2L!?1)(A(}+a-O?$;>YQl({tq_;_I+Qw6I@sYg(JUZ0>}kV zL6p}z8jeG8tMb)-MrE18a>P=sf_PQiJ!1k32W>sC7G~59&y~u07ui)A-g7II@Tw&) zMUr1U({b`_Z%<&HD9M0WLwW;eTOK~x8M2G=CGT8>}kbyvdnZYQ_u(}SrL<-zlU$0S8T-bil}XltA2i$f8Uy$DNkwX>fJYMBR#c8Q-%-7cfwHG z%ZE>UBkjZkaY!8PZzvtHpXa_Z4$4vve0RKM#z(#GLQ&%sEsZeIa z<*f7FLU`W$g^2ry9W2pfuFX}3ZLV`cR}>rOmS|lR?*9N1=mqV=4()) z$WHKRqaNtC)leG4;d>4|lSvkwDYF%m`Oavc2Ew44d`AVujY}d%rA%H>TLW+}^z!90 zs$r9%0+_OAL~|_$G5psN-ce`s))a}~a2u?w#em(fEaNhmtD@iqO*msXe4*wfI>{W~ zS&aLycGLo+_VA@h2viz2ZQWoRnS`3Ed}=rn;h;_TxBvtf)Qk2bo{%WXtAde%rjDT0 z;uT2du4nmgDjIYK?z?A|r*%+$q;}`K!l<4U+xIF~1e5DQ?@*v>EJ8YWyB{eneKcT5 z9v0B?*k?k1&u(lil{6PjG&oC`BS#pwya3ny(Pro1UN&HV)@c;zug9<5vU` zOMa7G^L0!D>wF%)MfKC<-u}-Hcq%D}W~8IXHbtdYH+X5nj}|s}>@S9RyKHx=4b(Nmf#pM0*B0@oHC9xKWHMEn2<_h}B_GNhH*iQk9A1P_jO^ zxf<*B_vZCik|i@)>Q+kZ7N-y_LsCSmBOcnisrGwEJXKq4fU1j3V0ukA83cD*9W1@> z508FRUKFh1P^%tx!8bZgjR5%Zu&Jju)R+gE7&3eDf;U)zNj>!Zx#Fs2QY)zD5yvEU zc*3wDuh?G4!^CrGRaA)-WO`LsBzXe}iJH;1ByDr8?r-*O#mGJpLA#UtQYtS_YRMSY zu0)viRj+-aLobcUzL)0H#*@A_c~Do^yekgDvy?**UnT45MD-vR2-5C#+!UJ)0PUyW z#7~%28(1F&Ir&vk^rsZ5kRwAJ_#No0sU>p z2&C#b)W7G(C}EB^F~mLH{g1l3Tzq)ZY}K{JWs5aWP9^vDZ9#CPhEO|OPH43>;CPCQ zE^4Z3m7FnH;U4MK5XSwzz8vvv3TFb+f)Kc><1O4bY$){mCl7^mb_H3Sm&yxP@3DW?Mkv+iP$A0;D#Hr__oD9$Zw@lz&ECnRX4HXBnUNTzGFV(e7f;3?I+ zTiL@BFrxD_NKEO9Ri%Djg;@R|3`I4<_41 zu#!PLpTJo7@sgY=T3jNTf2`8i#3?Znf+nd-g)R2Ufi^0GVlDLhIpn6Vs%bOSTv>69 zbLNl*ia?}|Km|ptJ-6e@O*G{(LcvzxiCOlgh%5z~_xgDFR8mrzrz}1(4SbWPgJp(- z+paYu+BrooYQZr}Zk3o{J&5W50Lev#*CRHn#QdDMH|D9gHdhwHeEf+|T&&@#*Z@P7 zPz0I+owdI_mocO%Os<^rPxFjJZ8Z++b562PB*Yfjkpj-l5EJh9Hun5@y`@cA_)2D+ zBBYWUPv+IEe5#pDaa15CCo$QtVl*T$HahFa!HQ>B0a@a%!9^8a1!SRTtfyZgmOCMI zaVFOaY!A9MvFC$>jWk{nL7nP_EMg6kOB?}?fPy>RlkoU)wW|tLfsHodb!4TaUntKbUt5q) zy{tRYtN=Q|~3=N3vM;#7QOP1m(0qQEN=QF%cwq+P}cN$+uay&;8x@6IwT7Xec6%+pe z&6ce$surNb<&Z%>TuTVK`;QpoS9C(CuvGw9o>N6=E~Cqd&RFdXLJi7DC3kp& zboO73l*MSSouI{oQ=~KK!`xOjEx3&U9?mptN>x{mA&Axt=jTz$JuJ`^h)EN)ZWcu< z>v64^F$7;*{CM2ax}2=I(qerrpp28rUA%VBNLVnEuz zPuI^CRTH+IaJqSnUS7@Hn2@IZ+f7J1-;I?TaxkTbM=AH`f>hbp53jQUu9VUXSoh|N z@TS&@r7aE%hSYR&nc{CR5@rRJfoJoDR?)C7gj>Mzww7egB5^uYD+OL(#IoKGOPFcO z(|<7BqDbW;W!K(WV^ejw7Swj_uMEV2a_IAnehkn`}r! z<7-&^IbiJ73N)&uWt@v9YQ^Qk>1LzAs-Zj6`Gl^EA_4=dy2juU-`*nr-e{9Gr*1p6 z%uO#b4@~ux)PFyfaf%FLwwBTch^O5XZvZNqeB!Dx`NJro&M^Q{gYY^W!v z^`M6{;aH9lNNMq?WTUQ*r0$5W!T|!{t*xOR&K10sHeifsS#0_pNKy=>>@>>C@+fy! zAyap{J4c`d{{RjpDkhhvDZZYWE)ha zn}BVuk|cH@n`v=z$581wQe|SOk6snl37fMXT9M|#<`Bg>GWjSs!FKF69WCtFijuM^ zr!COD4L4^Tdl}62>y6?OM-xX1!p#^VNL!nQCqr}3ER&60mQv7!(1DIUEL|ZHLl}Td zM+W;1T1MHf?~i^lsM2MLRT@5n;+{uK@Msx;o*HE;0JsF)fvMAvClOakBA0advoxU$ z-=ibl^8*d4*E)-7-1AFCY?-NPh||i;Y2$ZeYg}k8f3`s5dLpz*sT9=)c4mc6BvRng=hg)c*`LtYP^j{xnDs^-Q5GJ|vKBF&x(>yNJ{|StwHTtMUJ0V-m@C4_ZH4aO_yj*f;^6hy0sm_jrp zn^+w{V}g)lr#>maw(Bh1X=wD@FpHR-Q>#S&*cZm0ny* zO_$$~MJi8Wsnqc@+ybqtqV)qIt`C(T8K_xOAgw5pB9)Y+L;+(HAs4r>jx^oCDvEIm z#(}oRa4O7R3YaC4#X5xA>9xpXuVP1!ZW-+rwJx7B=S{IJ>555);p!u$p{1$CYii^G zMNdOR8Ij%3Z+L*9dr0C7+t%%n6uu-R0ko1}0nWMIT!C=6 zu|6EDi$V|F50R%WgO4PV+R{h#gin?xp0d-(;6#CM8t2H^{DOmEu-(JPDE=+Yu#xYM!@~*-o3}uX3-PTJR{0ZW(&LKk; z3P_Bowyz3JCG!O*PjfvZ&4}amm9>-sqNR#sBgr8a+qH`}m+gCTE6=4zY|*n8-PnMb zq=RAEewIlhG&s$vqIDHV+-{A2i)+O3jVc=}x$tSJtxEJY_s-T$s`6P(OB~hp;WAPj+m3gjR)P&CvqU&*K-8E!8oGL+ zb@O$UGLfkO19E$5#?8Z^&kAEm zCX6Rc@j2--W*RBpSR7NJx=4E!1y0joIHe}E049`_nbRGOL3~1Hkq{I!d-~i02`82` z?vYtWeaB45WUES~WA7msQMeLK?etrl0&7|Uu9H0GSeQK|>n${osNc2irGVGRl_;u~ z#b$@9nDR(`<#ZZ*$af7z^tJo;@5+|JrlOo<>#l4|!BJOGF1sW1L2t9+sVBpX7HZlJ zbbUbL$IDYxrcr-(SW&D8X1P|@#@xT<#cNFoo`7;6PQT8V&*QBPEgm0?&_WdR^!y1x6`NTZFMd)Pem43hJ}hTR0xA_xX9k#+*Z8-yePfY zjWtC6u4%I0`O}^}C?xn{sHknnzRg0hw~g#LRF%T0%Gz`aC|L_CVpU@i$6%(Fuv3fA zh9yqc5Q>1-87Pk8|iB$C@SuT&gMi z49l_Am{MXGO){VZP!)CY@VVh-%cd!{D;hjrls^yrmDkRZW?H;@dTJ=}915=1|<9|&ASGw4=P~NPnzj4`p_xI^9Z7vV!$8< zP_Eu)qTd_xLPpAcMvV4F!K*R8ja2kYCFP3BzOwa08>qx_ELt}+ODJ{cVZx5=YKai(B}`jR(ly)xHu2-(RYfA3t80JL zB~tEEIUENYk#_Dj&=GIw<-?Ipgw{G5v>1vcW6oJ+8`fXaN4K#({5frNTheMg_@zt8 zw|OE^003Q9#M;*7imO^`eqEX*#_1}WX=a)kcNnE5lictJ*=|!+cqVFn2l9yAH_X(| zj&28*sx>D;?{nScSG%lf0UzQv;^x#Mn@TGvmYkn71MZ&0+}vDi zuN)?8$_BcUtXN2rYWCj8w(s2r!`MFlI54eN6|9L+8QAF2c z5ZFS-!2vr^#?F?<2A*L&{P3WR#nnebE!*fVg-os;625t({~I4D8b?% ziVs%sysZ`y^ReSpl*$%LO7&X0Nn+SW*&=X7tjE5*O|4X3n^H{y*)h6R*8G1nW8Fu_ zYVx$XH!W6X93C1)NtU}A!)jo4ppZxo#FZKBz#X;(f&t@hsl=vGokm6y2OLg48))X; zq+khwMUSWWw3RrnGxComJtbZzEW(=QfG%FgaPhIVz#nnpkWFYJDQiYyiHkL&5!jFo zl$&Y=&&QM`nyQ4-p8>9?gAk=qLct0XVtzgK)OdH{Wy)zYs){u^E7la9BlN4(48Mca zK>43KWqQ0SnmH0WgpP)`2_dSMNT*kg$c?O_fg0S6I9SD>?b5!3RBB18t;q4y&6qIw z>MtEMl~9J+ed049xdpB+0qjBG$+}!pbkXw38P&2cOLGov%QH3;n6T^~zM77%B4U*! zo`I>{DEVDNGOsELy4sa|-}uAhMS}vPf0#y%RG_j5SQbW!#hNx37g99+ zM+geyq{dpEl%;N$Nggpk*iGfbaa1o7J=x-w8q&n$L3Jj;j^f-cyL==}(Y3X?RuM;U z(9fXi?yNNP*QC(X!whC45ZcC9@gReK$4&$8b1>qxrjDFtHt5u|0*p3q{3zr0e{szMqhC_kZG2)3w50-P?{{gV)P}NunFZ_XQzK6+0<`?!A7lSIy}13?yU!Z4hxj?01O+PN?+ zMuk)~3WlZEdfiJ9!9Xf+--lL-k&PF;p)}74%J5=T^^`cku3CA~mM4YbXH5sVcQ6+= z@Z$1_q~$`o!g6TGF&2)QriPwi@;b^2g@#5Vn5!SPxD9+cT5OS6uE<}NlVR8bROSfjBaF=@JY|B(B5x?xC$;^( zxnQZLyX4f|w~_O98;jFb;uw6$rbdBQQDF1DZLwEg{yeD_;NYbW0nn`dDFLX`iCbvh zJw!1Rai-v2_aJF*{AFgILx9k;(@#iQ(;TP^B}N-cVR+S*rfCRsVgU#U3~$2Am%;&~ z8*!?P9$)+}Gln6Ctz6SfQ4ZS`r-7tUd)yW);&@JT0XWj~*Hts)zKLiu1#~qtC3(eg z$wa7=z1`50l{!^FQuAFd zSiyo*&5c$^NU=zpWLYO*ibP-lMa}))e0UNq$*a7e1q%M4zX#7zeK5lfW+ZU=sT4NZ z;CHB}b8CUSXaM{Ozb?CY#)^%}N}?!{^*bTwj-BFfhUR)HuxaVbB28<;?4BsNleYMN(rMOSnazh zPvF)z=GtlvIMaC0EtH9y7NrX0vQ)%-S#GW2<9-^Xz@q|*O&Xj#8>l@Q$6-y!bv;V4 zVn}Nu18)rvZa%e+V4(BDZg zER)k3Y*r|iO8VG<-oO$80`~fNvvI5waJ9VP1SbFvIG#R~3Evy_mxBo~k?%A()KSw^ z!q85OBvK0yMuZ+oZ`iWyWeP}x)j*W3K*%_XD!#CKNqP6+^zbZGd(AAzYAx@lz-iyZ zklp)c#`v^O0Q;&%$!?9!zl-h^L%Olk{9cA?ku6RW8phT|63WNEr|cWs+BhV!x@?cQ zdurDL||ic3EVIt38(GLIJ4YhS}hD8Y+E~nh82v zgPdQe*i9UfoJ3Srt)ZCyi)aMgmGA*?!$9T~T(L$fqbEC3|yaep3fyau-zQ=K?D zdYDpRu+h*`DY;mji6>N;Vt+l=29D!q}!;Cti6r$au zIMK)SE7HuFnlnum4NX-xB1sVH3ryRb$X-S(t9#Z5*mw`kpPT`qHKQd6CMwvn-%m1* z34y_d($Q125yYx)px;gkGW?#~^5`l~qCh0jF5@wMP7|n(ssO!XdV8tGD9$aFAzE4~ z05T*ogjHoAsobC&-@x!4oile~ehYFLQRu_UdT2?L+_iGiLzt|4O;>MPI#G|)<5iPa ziKeO&5X|4DQU$i{C*j*pAK7M|;eu&;>{0}QK)yYcDru%OPYN48;$2GEvGGycUI`kx zLE}YlTM%|qdblzMbvOgH41~R;-CvY>nkSg_TQQ;I^b2cN~0Hl#@%UOh+8Tv52v(D>lc4 z*5UIk@ky{Gi!^58lG{cROD16LciRVRomHTzO)qBvi=TUrsK|;gUA&qFdavr(bsH)F03ywJ235}DMew<*Sn7F~ZjTtL(R0KC-IjCL)+8_NM>+<*ty%jv?F z0Tk^=j#T0Dc~RX}kG1R3x|Zq%nlli|M7VG(4u0TBupS5_iiL zPbmS61yHV+EG=R`j~qf`oIs>rNUcgtdk?LYe8oK_Y%20~R?tAbEa;35sOk)@ci~t--#Ke=t@S$^8 zXzs!Sl&B=iw&G?yhQU_t=pU=tMt9$Ck$d}~g(Cj|Uj#dac3Ze{gRw$= zN9j@K`dJX*xEl^0v|ug|C4FFu0@8b^9XY`Ig@wK!if)QVLaQR{+*?p|JPYUBvu~Mr z=SzSd)_2iK>nq)LIFT|rNK1b@!HcPIelLD#1u*I0Opi?Y$j$93@#DIlJ z1dE+~I5NnWsjXACi?cY@9TW(3LGb!+sbI}23|LiFe7e(*aBisvEzKiX4V$+QZLPsb z`)E4m+A-MHACsul`E6>^ip)B2(jzRMYOId`0Oc7-&rWDDVPCYJEg1gVB zj)J0|pao`}NWhocsjx91?d~-ExauaTw#-!8oVPWcZcxk+WBy-YdUS>ekW!ru_$5>j}6`4rQc0#G$2 z!y~Kpq0^=Go{v8eo{dp;x2H6Wm@Yje)UPB<@)(6KBS!mbDXJqv$-N1_mjn<&vEm!7 zy2uiyk9MQOhqLge5t?4xD?-koI&t^ypl7W=g#}eg)K~P^7!{sqBvV!(5)osdVdJj~ z{{T60Z-Gcq97Ysw&Tnq;hb0HvD5Ujs(KlSWeJibI3ngqY0;S+x@s&|)t1XY;#msL5 z2k$yhtb1uuwbzShQ0kyVAIezn3o9*U6Vpi#xwmN&hFt*w>w9qdi{{*oDw;y|n$l#5 zq>d#U#^v2oLnn0rk`adD8v2a~hi)1+?i7J&ifNT8LTJnd+TDe(_H`cHaX@mY8>m%? z>mrq3nYOEcb%`DB!`p9%A48%khXhlWC(sy$Qw%n~7^p6Mzcf3@ruu{J1BF5es=E~j z7U(`ThsG*ep;{!k6M0OrIRj9Im|XoF*+vwExF(U<#!;@McLm}ot+m^B(kwJTdE+=u zJR*YrmB9r|<1kc(aB6+#B$3_01NL)DHFV->&lk%MEj+l{Yzcwkv z3QS-xMH60GtYERxN%wVYUiZJZmnM}YMI4M%(T-}O^j$;hvbLh6V0nU)I|=pwMG=}nKNO)x`9r#?y)R1aOth}W@~~zt|Bb!O&EuY4Oti9@9G*x>cm-MvS*r$ z62dB$+rTDBg2))y8=Ef(+(5K&zm6RSDV)_N>d>}2L90li%`|mTERivgIJhK>+ky*i z?r0B28abvl)g~MeF zP$2Lkv>RGXilcA%Qhq_nIY-rYT*Y#&Bv^JMobpUH*tC(Bywy-wRMNoYT-wn_ssey4 zJ-jBiX@(W0lPTN!P^Q7x9%ILe1}eY$2bO2e-D=C3Wf5wo#qku1C>W5YrB#|Tc94G3 zf;Hir_dU}JaQ^@ZCX_R59CRb3#TibdWX%5nmaz$%vJ#Jb845~0eNM_tM;W+)^`QCZ}L|-xI0DXDuX>Y$gRFNfFf) z+}(p;Qh4GnDW|P~7*LOuvwm2?@cN8THU9uJdSpm~tsPsejU=uT#JRP*oAJQ>ZN`xc zc`ztk=!aE0Z8jwhCI=Qa^~f&}sH;9+!EVMNJ9{{a>DJaD2=${oW)|6!ebi9Bb#;!O zFH?D%k1Wv7k||)RM60Kgs(SNLT4NGDaCwO<=LQY5Xg^tkP43TUFAvZ+vt%W}a+`*H2edq%t9Dzewm8mnGEZFuT79&z? zs;aSSxl9!`!NQIGWiiCDN5be9gZ4U(;Z`we0(uXCr-#QpMt zrN~oiPYIyw)lZ|`{{Yc!o&9+a9%Sj?%*6-Kpz@@KqITO9b0c@$domI|w&KPe)l7nr zssk{yPzYd%);GAg@Ugh@@860}%6%e+%%$oVsnp#os_2QuDr!1?i^~q|Hdk{5CJDtw z;zD#&BHW8x#@E+`*9;?BUXiP&F{NxYlAvQ6Q)SA?DZrFn_E@k2%5SMY@E#r`h0dgt zM@=XsQY)xgh)vW7c#Zt3Xa>@6+ul8_FRv7`&xV?P*;N~_!rQ2FWzSK#3#`E@<%Y5+ zQc19unoIoyx5I=x!pvE?dL!dTHa<0k^wqp&KCRQoPJm1#Q~tMW_8g3VHKw1t$;yt( zRpGr{pwoQniEVCeV{ZIV-e(+WncRtd1y7Tzbf;@UJaQEm(1JDk`B!sw3{t90GDUF) zsfYd)JJbZtez7phVB6OO$e3&;Pi1K;t0vRfPX0(+sOyj0cZ=drx}Qa;w`ixXXsv!8 zl29+M9+XL4x8-Kfm`yy0PK7G!k`h|}-TV_~Nt+jkN)`V4X)0YPa42vyS8wV!(Z&Ou zAevk*C8nxVbQ&@q_qyB1nEb=8TQ5>c6gIHUknjn1h?ib{9%lTv=fMRjG+W#3D(c5p zAd#nT46@DQTHy*f^zfyx<*g_cqY=?Xt2y+KGhx!qlPAlxeje)Gg|r2GTjRlnz4%a> znh!r@LD@+vT(4J!)=MTN&v?iH5*Pv8lWlbEuMOIEMHD{4rz+u1TY}GrQpgsrX(4qI z5Q@nYH<&ke2T{d9$fEQ#Lgtr!1FNFTlSx;LO20ijBv1wS?FZUxk*1_uUNW>AUJRNn zzlgO~9Y3i$oL>fzGWY1}X#KcW}$;kH_n-Q&|m8JPiN%7FSBiCc7p z9s5qYok2F!*f?&M=%l$@0(w@=AJm^t`3o*#cYHGf$~aXjd3I?307FF)VhSBWVoxFr z=G9BRbwqy=sY5DSe<;`=(G(*80G$_*5fp_AcrSe~uW{IErwNs6MHzT%O+Qzr64*a= z00Ky{zNXjbg}hdZ5^38D>t$390F<@#)vhd0h&{cW@|rP8*KU(f)O~QFsEkKes>V=9 zxiTu97O7p4)|o?c!I{ zg(g@dWgGthO*tP8mcEi`T8c`SD5|nS6OpfpDcF4=o)oWb7F;P*1O7LDqy0f?zR1 zz{bQgAls<00{75b{v22hA0m{|V6JHfDGZ3pTq8yp`Jsp>dj9~cpuW5>xZ6eyK&jAX zI_fC5q_Qk$-L~so`~dLw@eg+b!+RB)30k7Jk6^9eeSj+NPORlV+-$@q*6M=AT&jtcCY2 z1_gxCi<{qNFPUI({?2(#L+9$xXh7nkV z53(ui;d005w+0WRQz}nNNcT`}F*w%9pV!(fb!0-y-e&DQP0pOghg>8 zq6$x^3OZ6-c{q%H^jP|d(EM*L)xAU%aYam|sb4R!V{JDAd-!l|mv0J4g_tx=b(MmA zB1IxrStvn{wu+Z(5Qz!Z=J{YX> z$6ypvmS!Ww>IJ+s<1SSSMJsUcQNE$Fz7;I^bzNQ#)JX248g&E+!SQ7_?SA}5S_IQ& zq!W!4oXsv_s>UjDEKp5RUt2TFGst|x%_$_d?)sC(2}uHsnm`G{yTU)1Aq}vu@E37Y z_CfKu?0Mx9DMAG+az-osuNtGOtcblN6)0wesIiDQya@JN+r+Mk6s@pkm)Yy2I8G{! zjpbRB42nU#AwFdp+zVJ+-b3*E_?ZJ5Q2_0rQn4Qe#_DJrY%^2JP=#S4mQXGO4Lon( zi&6wpd$=lwe@-=%%Zt&)Ats)pr4`U8ahgx0V=_>?DgGA#%|4Qm*h*r4D(PGOAC|6y1e} znu~oF<0jPAwN-I`A=!#dXVng6t&rW>XrfjE>-s7YwLf~C~o}5 ztGgnX6bAx+H86ywXaw;C;X(!v)R?PLceUAoA&UXu+IxLmFYX95!tBQi&tHhr*TTsu z606t%K=JmDU%M%*A+nl6XTF}{801bwAcqX#FTVg3A?4^5XG@qqI0+vZDqN!wvhKxn3pYbX8Znqy#1lGBb z7@8@1&PEkmzQ3wIW7Q^Or-hnYd@toG;}5@ZNT}jF2_PLVM9{HA zpn{eqVpJ#C0gaaZ`~bfWW{D!ML(>j=$@qt-{Fyy>&(luXV-7A95jfg`sTst6)?^|dHh^ zr#J5Hylpy-y|2oa#b3RF6)@&!H<6mrC@*3`dy(un*Xrd%Vw(;c#Z`||O&E}|XK)Eu zB z1oqm)-(p9J*Wv8vfUSUHpw!UebpWAQG+p3CtgqG^SskwRV#ov;U?mk!1vqr|8& zdUlFcs$mQrt{v3lM;Tt?W3M zHzt#*(l$|d`PpmhWUHHLlCD;fklbD7C5?ulabAcNn^vPkcS2-}hPsMCEZ%PB1Oh+} zd-m<&--Xv`@ESX?R1rt>8R%|%$aw=QbqgPknjF8?{4ip8Ge=OeOkfNZ%&}ZL8#Tq& z#C9iu8~m|M=~0MQBOi}N3^M%5r_{72Wf&Yj2aPtsB!yK|aa&lo?%(M68*r(1_|dR- zvs7ZVm}Ca05s~SsC`po~kqnHq=r>5q8L=f)Tn`h|!Z>j^qlz?!Icg(_vLiOj?NWB$*EYW-oV}#9+FMS+QO)zNJfgLT zQQI3RB%-CR^X^8?L48H9g{jzuz;C(pICyn6pExVur}}q$4yQ6p|KR%q@H8QlofFqqC{tq8@FL**HC@{aLttw zOf5A?{{V{G5Jrc$(aEPF5n$JqMOo%IjuF#A1|Ai*pnY}_ zr1vF_xOkC71jSlcq}6(lO*uBMGQnR0f+Z_+V+%4LyKe$Hi@I)9I_PPZCT&nhMG4Si zbyQ=^s47tH0Go|8KS3mMICE7kC^aq|#^J&iTCp384}ljScejrLg*HV@pvS1gd38Qw zNLW3=L10DfRQIoA%k z#wH+b1&3=~Tid4^DHOq_J`aG>R&AY(lO%)QzU4t+FL8eYc*2D@BA7b0K~0C$P(u_e z3(Ff8Ww^h*0Bvq~>tdF$sz!M-Gcj%36m0=Thzw8B^zp?CT9Y-G1f+@#PAa!zhLTXg zsP~4;AG2*vhqn>9aHk4pnEg-YA^mp4Xs~$-P*Y(^DikGuOH}Mwi(15m0FQ?nWhZSU ze*+YPp~dPXoi{%6*0UX0GK=2iA7>O(DHzbf(tN=*Rg{Yp?MsCu5Ut>R0O3{Qhy+p9 zqIOk=ei<3B0MDIvZk+Wh8eG|yv!-0F!;%bEK%yz)**!B-%_NFpkxCt<2s)4fzX2JC zc!t!ZfKOPO5V)h=f|64N96n=+qbb(!KsmQ5JlO9~gt*QKrJv+#8b9VSAtuFHec2R^ z0I+X?;R9EJL&bsjQoCHyw=kS&yJn0B70c~c4NW>FP8}4DB^5+Z=d(hjnBFZ9y=x2o z99q+XTPbN-B5Jhyvx(Ja9OH`PRTPx@eyba-nyySfjs?T$>E)5jG%!=33mPdl3N#!X zS}GDK9d?nZ(iXOotWGT>sBd7?Y1a4cZ*LD6T#6=iL8GVWhaALV=rer9BQC{>ZVLlGMfwv1L?%=3s;uJu-Hd#!P}kZwrt zueX6`Er&%2n{d*<2+ZY|e3BMT#6EM7pA=J1I?uW|XZ79EA^@2adNU)+GCQklRMVPim(%sD@8= z`>a5)`*-@zgOv&4TH919>#rC7aq9!AID`@jW1Bc)h`UbV`WmK-Qg!{#P5DA}+B84C z9}0-`MNP|};~$L$_+djKh5h2`+UL1F?S37k(Hnwl-#-q{pUIp37Uaxeyl?|cR|e<1 zAM{H3&{zY18+PP#yf+#zmOQ={B5wOy>`^^`8WVB8nL&rh(nnBcKrMZ@V%@ z3)#J$v}&thDLGe`;iPTQEQ-Jra6<05?Pb2Y--fMRgGk6y%R_h8Rm{DTrb%NcJC3OJh)VfZ9==2hN>ho($<+FDio_RT?w^_ z(4O7-WRXo2(_K`!lSlejYNb(S3j35?`=o>0#{6|8(|TwV%rA#gg49$=8NX(^Euj~? zeSSYr1?ix<25AqOW}6g8p~NZTNG46DGCje4EvIhY-a3&_CuId$n+(J-3`Xl}ni|Kv zQiF1u8^->_Z9yH!$DTE%6H)1Fn{X=V)*rdMQ`+ZSTzK+?*7k~ZpvRpb%92$U2E^XP z0jR&njVfufntY(nNr&E7lgw4{7t|igH9DR*rfH(trVP=Ts&k!ub=70aN_8=!sbZ@g z?|pv0Z9W=W%Vwd+OHNnHhu)BVr(ksO(0fNTwNm6G8pVy%wqL`JF)Nc%BLsj2Bo-=l zJ;*o7P$nC4{_UpOW-t`6WIO2j?YBBZFPI5wBN`xiqz-q zhb)^Kmaqd|Os}all`c068~crQJ{Ir5t;=awRVca1*m+&(@UN?3^B+1C`k9sbPuJWD zvjq`KoIt>`M_P)o*VBnU%2aLK3iuzizQe+F+$p7CX02+28df5xpVZv3R&|RsR?$o= zsE#{Z^3?-HmK2@QUgP{gTzokw*#cWnl?888`$c)sUsX->BshKDwHIJT`wky6AW?CZ{D?0Jnv>L6|oWD4sabr!0eRm^(0`GY7_uahYP? z40a~=Ro3HA1FyG)&LB~u6%?_+^8!kt8QIJ&_E-Sg9_QLY;zhI#ED9u2pAN+-Tr8V{ zw70d6)&YnBY1@g`-BVR4FpPcah!HUdQJ@47bEe_p`SCiMr;?)-uE6s&QzQ~ewo+IF zVr^nYt~L1g97d*br&7A1k5M?ni7^MeAU>2{<+ApX3 zpyXe@>M6`T(x073`>h|5{{T4rsKn#BOva4$2qSp{`@Zdoz5b2|8+6csrjZ$kC&HBy zI_+zc%0`W6DyGPy+l*%nI;KaKO6Z|wC0pMkMf+Wjm$$QnU??V| zG>gZxrVk`T{Vo<;pK%#(E^l*lsj&l&CuLY*F{G|DnezOwy(L2|&`WgK*Y}qCo3D?s z^LlF7QaWmJ1y7etJhQ;&@sdh00DG#|@g66~lp`9tMM$L^!|rJdh6n97-NRcShZ`xa z6x8Lv`to=F)_E4cj`3@^a1hZN@kR&0bY8^=nzU9%w0Xg z4b89G{AplQ$yIU8Ir1vJxh5GTeteZJAC$~DNUo>4SPeka>*ZT)>YAhON@9|MC2Nq@ zE~3G#3hSsNi-K^X=z~vqEiBhbPzP<+WmdPxL9euOi$y%y#)ZCxbnh4H9(Tg>jsX<4 zxb9@FijI~L3&_(|$RmwGvF=FMgjdj%nWL+B0L0bwdRP29`Wxw^E5S%8Xezp$SBFCu zCyZ7|DyrV3p!2+uCXvIw_6P;+E>9xd#mDYkAgm=I;3hp!O(u6cSu)(k2$_$hlvFhB zB{0KHBu8y8=GG7iPAKQbN)uHu+JmQG60h zYA_BX&Wt`Ak5I`U%tf*|(@n$z7!h#8Z*i{!3uMrp4hnOn$7rFb_w1tj*fSlZi`(OV z{A0Q_p)OLF1`ZE}0|_*;!S)mH`OKE6wK-(d2nmhei+>onPiN}gac9iT=GB_unB#s~VB3<}Dn+ z`DaU!_H;I|KX(Gj5GYWpVZ0RXQm!{ zNH-g_O14l2peZKf>F2iA>(EVCeYHwqEg=Yf)DDB*1OR^5!u-;(uM=6CwiIH{yV#){ zu0aFX2=U`&!KV^xJ$5%tvJh2-mjnkO0c|&T@8QoCQ<{WRYT{K@vTQqzIK8fJEOgVu z$6k9()is%@wbkm?L1~E*Q!kdsKtiv5JNG@fp$Nj7TC0^L>u{C;TF2SA>Md?w4K@uZ zvc$qU0^a4$hW9!P*+KSr@uwsTeW50g@8FHomCe4f@XXm)95wVEGNYdymN`LSYGF?* zl!6EW!^jA}ns67q*T0vwD%web>-tfdXsM+naTRwpSgjT%hkVUaM^6;%Z_=nYx|3kt z#g4j;My_0k6O2(Xw^A1Zf(-4{nry3CH5AyPj+!I2Rf-lM=oGTpkZmldxYH{rsmeve0U&c1r=N>leLx9w6giuEMp;5 z?`!CF(`eI&EIWk~J~5i*OPz5z%R@xsg#ZaDfC$;O>|Bya;^eGTNu#yUx{92|(VV}J z%~=twmV?T8z4FDW*`s3Y*B7#Z-+;`;K{rcGarn^dENHoGl~c-9$xBdar4lT1w*LTj z`*nFXe(s@ z07Wk$K+5||Y5u4PEN^qK3N8^8wWR|}Zm0T&=Wv;RiQ;v5Y?y9MqM%?Y z=FIg7ML+Wy6~n^>U^Ik{TGsK_`AxG=JW}NB!_Ij6QcU9M_E`#QHu$G(byX_nxauqM zDXY}2K*VO2W(saMO69vBr`yRPoCQZu8K&wSHnF7;tVNq?1d(rvzZW3V14qm7k@Zhe z()#IrHRcElV0}u(O@1FxvJoUWzsss@k~@_u=@o+j2tLqs4R20Z9%H`;#NQ5(cKXnp zcJKSAyP_~($MCBZ!m&S?Dy(*yP3&8@aBcuL?`!fjQVmEYQY*Y$5-<(1x=nD$xhGqa zHSMA0n-xi>AQ4OHSudhu#bY$8B}(--?o`rdJhT z^u0U7>49Vr%H$97VVREZ?g+5(-qD&Z7$ zkTpG02aaK9(1JE-3ZL-v_$a-*e&-#Y(EJS}Z;{ipw(tVh-Rf;i(;m6gG*fD8)6? zmX0D~I{a({6WG}CP#9AyRZM}Lkfn43U;@JC_uM&8I-*WApv$brRCQvmbq&~9n|`N_ zI0RC*&NXU3fhJx!UR=(3_E{+CC&ebD!y%fYUm{|#t5is_l0YkRmmWNdcm3=dXmpi) zht7o=V?}6Eh$mp#HDr%ph0lb&B`zsPQCb4pHJ({fU67C?RZH$V{`I*W7ReiG>1|=j zC{%e5#(;jP#XWOWL@|Lcm*&&UPGK(M>Q&SUHrQ*e&l?CdFSPqc5me>t>!fwL2h>J9 zlu|uT8A(yeLwq2CwP)@?v3t$EN-0@pUGezq~VWP@d^vp9@;t%}-K_(?=C6z|_J(Lhn}9PL{e7 zK0FKrt)&oXR$XoMgB5}DWo0cAzTjjzhW#06Zcrt(=^*%98Owmg0kFSM7d9R4`s(4N)0r4(&DVp&DM-;(&;zqMLCHP6bDj5YwZZy@!IE-u;Il#1~CsTn0bHXS25sET@L-Q~~jZe!f7hi3rX{$4hr25IqtnrW)7mcG2o z?t}ql+KnRnr^dqn03IrD0ZEGF*8@FIlG2@^#=%0HE1R2>v4GGHJE+quCbCmv?jOo; zdvjPF3X6-9Y=4I|YiU%|&Jl}LQxGFi>KvhR#9wi^w|{T9iJm5uwMSpkFIaltlX_-w zoQT+d6^CNg@=EhcvP#Wl5tJ;T0H6GjE5II9F-X?kpb?2CHUn>d1xpsF{sMh}N;>hYi1t^jdP~-9!vma8IM%w`MW%Xq zMS%s%ZQf4ZFW-#^+Xn{6#*`tYAL29xde7)4FM;HUv(-i~QJSW}Wm;JtqIRp8($yP= zMz)HtZQZ-@N048IJX?SP6M*AIxvj74^#Vzvqg6&sYbXW6Dcy5(;cyA?wwxR26cTX3 zsFhSS%01NFtM6L=^~nV3e*Ad}rnc4tK?2L75b)>`t*CDwruuPGQYom$o-n#d{Lv7$ z?M}Acx8N<`_tI*C=%wj#XSYF~d;vL%b#_bn^gP6ZZSmk~_Eoe{g5KyENu}TQ zR|?FEwRo(?d@fW`NmU=04Yc>J>Z46AL;nCCBPvp9L2W9a%hkU}vW-VUb2Ryf`EG2& zuzV7$7o{%k9b8p(aXEq1i*0o$_gR4&c-xDtoKST-c+oy*YM$jp;s!NSb#*c=?P(xU z?Dvh0^#g-;#YfK9Dtf77UAsKU?btB;O{v}E#R)WxTWHn(8ofTr`I|Fh{X)$W%?2;i zMyG5l80Hl5d9{lwNi(SzeVcm?HPmpgIelqpB|8;?qwI#=4mebHrx8c956$>47O}}y zTTfLYF47B-<68l#AdjPfrx0jkt}8WXRPa@mj0`J1?XfzaH%8Fg-SGN3P~H`O^a{jt z^)aYgi0RJBL9t|&&fdfYu^e$N)fDKi;?DKp-QZ`4oBPUdw{6q|ps~2+l-c1;mql=_ z%$4)9l#QWvTeB*t1d*U1H`AuJ<=Rh8X)Bs*mZu#z+&5mui?Z()*5=;P?7trg6-P-m F|Jmt*lW+h4 literal 0 HcmV?d00001 diff --git a/interface/resources/qml/hifi/commerce/wallet/images/20.jpg b/interface/resources/qml/hifi/commerce/wallet/images/20.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a5a4565a8762bfa7b3766d6c42291213edf98a86 GIT binary patch literal 81352 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 X6Qn-hoCS=0;+(lyEUrJIeii@OO^Ah% literal 0 HcmV?d00001 diff --git a/interface/resources/qml/hifi/commerce/wallet/images/21.jpg b/interface/resources/qml/hifi/commerce/wallet/images/21.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3747c9558e963283bbacc4df83b7d3d9fba73465 GIT binary patch literal 29138 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

@!B}W){zhZD9J)JDD=24mTprH=BjycyouQ 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 D0LvPJ literal 0 HcmV?d00001 diff --git a/interface/resources/qml/hifi/commerce/wallet/images/08.jpg b/interface/resources/qml/hifi/commerce/wallet/images/08.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9d49866c91f265bdc379f509863735c0b8cd8933 GIT binary patch literal 40724 zcmbT5bx_>Fw&#B{gS)%?;2t2j5AIHI8QdWOLU4x!3k>e=PH+YYmH@#a!GaS4ga8Q; zwsP-#@7}jnyZdTC|ID{epPueM-CcD~{~lK!w*d;JAh;s{z+jvJ2JkN)PXR(je>>Ob z00=+<0Kgak9(Qm|UL+&%n!^i<>-Oiaxf&_4iR z024q11OULs&euy*U)kXAU&E9X7<~0qMEy z2=WU2TloI3jsHXb?(IKaf9U>W&p>3;|FZpyf7v`s06^>~06<><%VwJc0G-hQK(Y2O z8%q%Y;70*K$H#wL582=I;_T<=CBerR7#PS4cd+CA8_@sa|LO2Q;NQmM{X5=&#g0MI z!O_Ow&5z-4Q0+Y3JpFwbe7$V!92j{1_e1>u-SOY}w|Q{uIXF7_IC$7OFc`rd0^uG` z3<{ne_HaMArw0SvU4-vOrr008!dJN@JQDCik5*!lYe{L|;}wFFQBEC3%M z0Vn}FfEnNbcmP4*3Gft<1(X0aKpQXsOo3;B9pDVO13o|?5CVh)F+d{l8ps3?Kp{{D zR09n_3(yJl0z<$UFa^v4i@-Xt1?&MQz&UUY+<`zKbPz6x7(@x82eE>18w>&CfJwl# zU^XxxSPU!&RtFn^Ex}G;Z}1Cn6gUN(4K4xKfjhuM;3@DTcnf?2{s{pf*bp)ZBZLPc z22p@$L(CwK5Ff}(NCG4aQUYm!^gzZTpCDV1Q^+qAG!$YK1{5BYrzol@hA4I@-Y73o zl28yRRVW=ONR&?~+bHKKe^7BzX;8UPB~W3gCa6xRfv7R4S*R7L?Wm)ui>Q03*Jx;H zWN7SYPta7+OwnA>g3*%D^3fX62GQowcF}&KqoY%zbD>M2Yopts`=Q66=b+c251`MZ z@1fsfU}Ml@2x2H>m|=KeL||lL)L`^u%wrs2++h-6vSLbLYGc}CKF3VOEW_-<{D`@S zd51-a#f~L~Wq{>^6^@mS)qpjMwSn~m8ylMmTO3;#8;<=7I~%(R`#ttH_AeYF98Mes z919$OoD`f&oI#vboFBNjxNNwxxMsM1xGA{RxFfhO|VSxlaQEDfKZ#zoiK^8hH!%L zkO-ZKjYx^eo+yf_lxT!#ml#6KOsqg`M;u99Mm$QqM}kJeP68uwAxR{uC;32fPD(^7 zOlm|LM4C(5N4iA@A!8$hk-3qjlC_X6k^Ls8C6^<2Ade?+AfG3{p`fOarEs7~plGC6 zr1(wAK&eFOO8JJelkzha3Kb`nE>$2^0o5qgDK!c8Q))Zv1nL&*H5xDtCygFWFik1V zG|f+1I$9N4FWMa15!zEaGCEm07rG3(e!3%iVtQ$MIDH2F0R1roDT5q?8$&h&lHr_@ zhEbK#pRt(n1LGYNJCh+(1XCl^XJ#yBF=j{R4CZ0xa~66QO_mUrT9!3dOja>gXV$l@ z} z2Rsx#qZ0xy89XxJ$T~d2o2-cmjB8dA51Ucr|zOL}5a7SR-m6&V(J z5Pc%*BibN(^n~S!^^?3O%VH#AI$}v;@5NEY<;BCqd&PfAh)VcLv`Bn^%JbCqY0c9^ zNp?vG$uh}ZDJCf!sbZ-uX$EO)=_2VZ8Acf!nG%^DS!P*#*$UYMIjEeAT%FvRJiok; ze7pROf`me-!k{8VQAII9@q-ePlA#hp>5DRxvXgSH^0|tLO0deHDypiw>KoN%7%j{W zRt-B>d!iPqhE&H<*H=fV?`Uvp_-OQKf;H7N(=|7=ShYN~I<*09n0C7MXB~DOZ=H9# zXu3MOxw`v$0(v2OIj=aMLa`bTcEf3bUW)O6Hm7dln)VF&0af?3O{66VIrgxjpN%!nd-qYPCkSHny&@ zzPHh~DY5x!3$x9$J-1V^duw-MFKeG+f8-$LkmhjUDCL;uc<3bMlQm9CF&#%_)781B~Y-5x|9t{zBFI?o`_IWI1+7_TjF3GYnrb02k| z3SW?~rEixXiJzC>v_FS`wEuR1bU<#vZJ<$LYY<_ON6_?h&gb#Z4_+w0C=W&nwhJB( zVGIcm*$$NpEq)1lY5Q_Gj5#bSZ10uItEzCUaM$pe2>yt)h^t8B$et+Ls8>tCuSwyC)p)UCJQ8ICqJe*rhG^hO)Yqh z_S)n1(i@pKRcVB2FVc3?HPbsX7%~zvt}?AMC$faI3g2SA^?$pSt&!c8!; zpsGl$c&PNK+^W*6LRLSiuCAe}Nv#Ff`qv)SS=7zeE7o^4@H7-Rk~Jna0Zsl*$IaHw zOD*ax!>wYi4Q;G#dF{mQ2_2x0=N;#r&YfFbrd@O0YTd&{>@N~#&Xm{9ZczwiVWC5v*{4lCM`hHA#Y-C(+eBiy*``!tOiS9|U z$<8U!sg7xp>Gm0snf4E&A38oh`PelpKHD=VIoCfgGe7i6@zdA>Y+-6qYjJMLaA{@P zVtH%De&ul0ZS`U;VC`=G)duQD!e@fdSzlc%o{}m7v$Ui_qLH!E~8X7t}8XD$b zu>K3sKl~wRC@5%{=xFHw*785(aS$NH00AHX0wM&!gdhkZ=n)Aj0RR9E4EeVl2OR?q z6$KN51qK1wAOJvvfc{oS{{b2*3IrXD0m1~Zun7P#2#gAbprE0lqJki3o**y;g%A~u zkqAH+kR!&>WwIgh4i|ibSl?UB(DN5@@d?>Eh^p$EuI`@q6O${eYllb2x4(W9 z0w4$&f`X0)L4ly5ql4feFoY05VMHYoK$APywLvFl@(zDf+&qLKI7hP0d?8P&he;-6 zJMY61F`SmJK<*n^(qhLdtiRJL!lr0ouVl!M71c&TNyP!>6n!ElE}^WV3R5%sJ6i`w zCug{epMOAL(DN73F|l#+2^pDLZ?kg{rDf$6l~vU>?H!$6-9017(XsLO6O*477MGS+ zR@ZjF?(H8O9vxr)xcYg0bNlP};~Ibi0Rdn_2q7Q?Boif?tpx?qr%H&q656)7p;#Q3 z>P~99vAIsqDOSL+#;K0_-s{?3NU8^idOA+L*hY4Qw^hB8s>n23mGRqh`Hbo+38d>Z zOImVNe<{f)^N;iR;UKLk2C-^edWhV8?<@VSle-g@41=#Oj4-2gb4PmUKrcXhmFGtp z?@ybuM?f*??JYk1vJB7RM9U1($L~fybIcP`!>6KHPYa%Y8t+1o=_QreMJM-kWX;Gs zm*{PQ1pYbmaG?qEce>sO&2I5$mZ(`V#rG~3T$``1z>ym#1sCG>FD$0wm9lKsJ-_BW zCo`KVZTZMq=vVkNFO(+b%;UqbU6oFI#l#AGL$=pZ^Yhfny#$k%P?QAhciG1RaJ%n4 zuzij={FGVg^x?A`<25Ku(Y-1smvY!zpr065lq*j5wAEIG`zJqljhul}5>v-F&$c%g zyLeo52!Dp~IgPGUF-K{l0dZsPghhSP$q>#Iack#*j;*;`lFPcan7%)fHfHhZ(Qa@G z92efFg*~bHRd~4h5yaZ|%qtE?qNv#7nRVvIjmdJd-n4&_Q==!J){=)?(SRB zrvdK1b{)*&+=HWQ!h&Nbq=0L?y_QXaK{E%@jS=~EdinQJ)jN3f!@`_pdTW+kKy|sy z%z4;_N&sg+`31cdcWJa6J67)7)^<`;0mEmQv3{Wx!O!JLO@u2WG$eZX1eqvgtnspL zH#315bBu=a!D>!sma*cc{fBXPvF(Z(n~~a9UW;mW{ER;FCj=AUKV{Okoy(|5)pSzm zwW54naR_FWW~a6>)Po1y98KKH#4d@$YerS4`vj*go-aQ?e`p=Us9LGVNu71&2`y;zWQrr!{0H${r>cBQy0W zWvfnkdgKqwvZPk|t`^F+HgAk;GplH@RAd1RaWR7BIm+Syrn0uLuXae`7k<~>WbU(5 z12x#3x|G(3pHRC|XrRGNoS*4ecaCPSc+XlJ8ekUPfh&;S-0~Vj=HC}>eT37#dAE`n#Onq9ax^^Se)hHnG9-xMmw3QU7jP7 zJXB%=3xuHS4BSS7QhRKJ*r7D@T6J8LEOrXg%41|2<1yPSnVdQXi^jubVPca7F7L|? z6%r%9P`QrOf6=~w(*6i|cs|_g1~@lfk`Ew_?~Y1~t>SfUynd}j)q=yTfVO1c@>28k z8{d-E{;;j&M!XuaNT=79{a>Bl`W|Ndc{phTTI{X5wMw)$qf#&W7pAftMMo(qtk{6wV z^%W`qo;YiLq7B(hdD%}K?VPnxP1e>5D335)e~IdMo>oV9$ZrdDEKGvnd@7S0_heo_ z_!HtSF%tjzm%FjDr5T`mW-7<(ao;Si2$?j7qYvuQ?ws>46P`2Kb-FFG%}d?OuY`!@ z^_1`r8YjrEcQo%Mfn%p1fsi&4ibV^VvLA4SXw<7O-*b3Qi*5$OVu@cDh#|a)DQxt7 z9cjbmdfZm2wGAlCot>8iV-!{`mrhTm8SrDN{R+g4b5kfjDOm=vnqwd}{C*L04HoDk zsu-)CGd7}JvA?XX(8nL7Vbak^oJ@t^(5q?fKIoO!)V-id)WB(l9M~?>SJb5G`8$Vy z`-v;n>sH22+g{SrKqyxslKKFD6b!`9@%F_x=Nb>aEB@rmDY*M-sGD%9>S5vJ{d&c%0?<`Qf=?+ zlt|-Gzt@`J$8y)X#2bm}(ettKMH+Rm#%QzBDw$JSdYFmgcz$P`eFzB^L^V{Qve=SR ztH{F&8Nz@6-c9oArpOc0?a%cq#mZ18yV~TVrcZ@?l968Ap-YANxUQyqRN)2Z(MOU+ za1R`6nc+L8_*oZ2tb>-Y|LPsvW@?;_>Yig=h&l8VkJGeh3nkRmU0dhoM!QG$8qXZJ zT^?gNgOEq~yf`Y}#%3cZ;whc5hJGZW#oiE!UR`+L#*zEWKc*B*8Hj_Z1v?6q@TOnX z@7eaz-;LY^g&OVc*XV1DP_F-~pwv}Tt%#*T@bO@Wy+OU=rS6YxlDrTzv@N!#P$DCa zZCIkSJ#>>9soX?f9cpS;)mHL9cL}{CZYV4iB_-`@FlEO36PT)=An_#;c%ULKa;ZkY zpBzAX?|TcnBo69ZnfMC(uO_52%yq4!t*vc|ENs4yOYQr(I8JJyMe!*URnpJImxsnx z_yTDr!qaXhTQQXCYL%fn+@^uRxZp00mr`urH}ihBNYpzo4l4V>>e|e;!?(6k5{?K0 zQRsOJ`Ng=Y5gKOHMDrLj$J-{D_sXljcUZWaYV5f81`KHsUPmzkDN~CU1L6DA5~X~* zA||~=lnhK3(&gLM>cX9U53jy#;?a9thHckZKLQb*fBtY(is;^_Z|-nCT+PMTpLoc` z6T{v#edMhuR?|${c~_RD`LGJ@Y|=gbGJd#~&i}zO)WMb2^{GJ#>}K(s8#Nq+0fJJ4 z74iMqy|r^1tJF@{jSUes`AD7K*atfC+!hw5L6FCLbWE}fBQD`C29_Wtl{&Lty%J6{ zm&P}va0&@IwP8$xGc3%t&`-PHgTD+R)vd1J3&6|WXQSRLM>Tdsmy437v0{_U^~jSa z%crg;xR)kmRIV%L$2%fbT2J8{0XV242Kx7XoVML#4VARj&)-gt%uRB=-yc5pqY7xb z-c_vnwrV6HJ3_2=t4y18Fc}!lZ1MJO(?xfMV0N)=M>Ds3z#mDs32DM-VDtop0L?>s zk0;AQHuw>+Y88PoEG$6wRBT+=)UP`OAA#4;OWuqVn|=F?MN5o8BI?mhjFbBV%Z=x@?6oH)Wi2#TT4Mb+jj@U;n0}(pBj9XMn-}t35 zD$X^dDu<+0-lFe8*_3y}%{S5fEsv~-jRboz2+nV{Hpsl_9JEAAIp z^O}R8zvcZZwt2;dncd}%6c(nap8jJ9%1ni7%dnV~&2(h@FgTY~9n z=3dkW@_<_3DG*y&POVjy#5{s3ShMu7Hqx~quq5Sr7 zJ{ymmN{m#(N>XY8GnM#!Sma1ub{iKO38Ow7ePZ&u*}+!{VviucU>%Me4d0 zZ2mJ(J!!>k&$)29O+p)Qsqs@eb(jpzv6G0PtVstNdxc-&-cV(WL8#mV3X2?tY}oVY zhzGO6R4TnB+0|zhdGJ(%QO20WuYz^h`cEyWstw{Yf-)3p>En03jSSg2s!CkCxlA8{ zyd8etqq59_x!KL$)L@e!)IT4BmZJ31QI1l4W<1s7Li#ievU_7VIPDE1U=i3&4D4ag*+eOM8HEmKXIH&LMI9>ll(r|7rJ@#G_B_vemq z_ND%${po-j4P!hL?~W`14UQV%GAo~iV6d6fJkZY7e78{)$B;CxsFwWw?KO64USpyh znFyNMWg)0Qbw`JcAsOHUqbDo$L-`dz;p$BDY@c?h-rgG7yHZk?-=h{>dtcPzceQCm09^9GP!M99&ow_UF;LhR1*iP2>~uq&X7o4T zFZb>)BUoN+u2P}Wx)b!@KT0pLy4$0)%*o3m>x-M0)$c@P@C3^)*cvdjCN=k^YaQLL zBVzeDrn+BTD<%h=>FzY&c$TLwh)qb5mN=%1q-|3=eE4>IW}WR4b;gObx=N#7xku}D zm+!@u%{;ChUUrO+7U8^`os-98xpj-9pXnMNwPY*P-Mjx-(9Ge}U|v#<=ubcBnpGvcu%LI{$!H4_vz>QcKtf@1R(C{y8y)4ptOf&*A&J9-u}-oz=d12A^Hk4c%Srrhb^!~E~-#z7-g zfwH1aFDeaWfopC>JiF+@ggh!iO|kiLmN5m6)wb7s#a&XjS@2=5XeF)*O=EFURVI)@ z@?a}JuyW5gncTj`G2o<=nKN7@&@w;OzNooC@vu)7%s1I>PD)N#n(3UuGwaIOwCqi7 z__8l(@T9Ws*0y!KZIhKV?TM0njQ(Be2DR~c!I~@5hGZzVZPCzEqI{{*w?6vAl7#D( zc`6PxUu^y@>wKNQh^DRpk3)=N+ZY=$F zd+P0?aav}tyyjUu<PB>->os_TT(-Ydf1xsv5w`(!na)Os_3E3#KfwJ7Sap`}`Y6 zIXjVDU5G;(T|KqvVj5S}UQbIpR!%9esV*4uT3M71!%Y;qE0)i}%aVb_9Z6u> zvVE76J_mbtK6{QBdL{RI38HuLvu`tkXRdf+k(UV~p>1)9S1g+!T9wod7gWQP=kG=i zV+c3nv$za)V;6T!>Xf-fg`#W@Wne;YexRy^ek_tZr}4n`=z}8|jYm+e1v| zv(~gw-UZA=#cyc5*Mx!a;c%^?YNR1NcYNTNmR2UK>vuYeKxaXxyWM8#uAjP1hmU}q zMA)1p%bbInoivY0v8#Yuu9V-wJMd;#=d#Pux9;T}s~+ma%(D|+w|uQPJKiQ$Kf_)~ z#MUi|epmjrPq~}+yR8F1y6vH~?y8{mh@^ZbeRkfOlztkUo79D&CA8!+K-c!^dbCu% zBeeZ<;;Vq}a>#VfEkxNedzEuH$duX6MqOG~1(^U&4pn*=9Ygu2#+#k7)L})@6T<~n_)Z7SERgPG*4*Z8tvWsV=xyy(xwWQ?)RE_u9&}q{;TVKoby4LT} z619dRNIR?Z#LmxC9V|-)25eBJ+#dZ*Aw_q_aAyHBDs7ClK)M^kS2eJF~4a=1x@HL3NU^iRwZ0*kkN%yjwuQ*la6=<@GB7_@Zn5d zm{PXQDoS{<4vf5u{M$IHAgtnduXuHdK+oIoTshA!pX^92YbC`L%=3wtPWV|GqP_Gt zf=WZD_?;;qHHGUmp*{tn$PZ8DB6rW9rx`BEVHqemJpH1i+lQC6Y;GQ#+c9wapM^*7 zp3GPLN8oSeF$*&A&ill?W18YCBL0rxRFUD%G}ovTdGU!Y2@PDdVB2OOT0XU~(_bTJ zqjTg;aQ#4aV>iixSeU4DLXU{CvCJuZOE7xurk6)O)o4=@C!-@S&!yt7HFEAYgt$-( z8BoAk$zs&yoeUwy)tmkhOqt{1`K|Bc+&E9&X170&U_^V>pehmU7@YfZyMmfmtSEy8 z#xh9fnDhw9hmz{pxNGOWn0&o++lIwbHgyOZIf5-vC0eNN-ZQK{O!=}rA#aXZ{p6qf zs@xsdi+=Y_+avIT{|FI&Gv4mcXV_t+rab(e_z%POAA#`_juAO+62dxyno%51LPEg6 zP|iW8R2G;Y^kvY?C}xBb0I$#hyl|ZtpSg7PlG5zc+tSCfeP#6cxjS86HSP>!>qr`J_0Ur9bXLhIx*Bt)Y@Fr8BOFQ!S+Lk>mr;&t1S&r zLdj2g)Iwp)r5MmL*MYxRiC}k@kkCKq!J+-1>|8x$ z;$3tf0b$uk;ALsSs5_{;C*%>p(kq0gpBF*+4p7}_PuSaH$!ig1uiTch^rjm6X-1t$ zH0=e6wYo$-2;WzT;u3ZCQuhzkcTJ$NPvn;Jp(`9XHUpI2t;%*15erx3H+4M=x-S>KQMX#N>i^=>DLlGp0dJXkMjkc) zX~tAjoieMcW+MU_UKuY@0Cfmx_ziCDrVCYh)w0VXSMCRkM2hlguS17e(&X?gQ<}js z%v~l!Ru9Qh>%JlMuKk3xa3heK@X5R+gWa!J%gYjr8Wb=?9Ye#4EMWuQZ2&bngV;T& zKrQLhERaA}eJ+P+?$H1{{5XVeek@pf8AF6=ej6id8QSaLmQw@O)wVPo%VH^;JTLqO zZK|rm{tT~PSL*yd^9xVxXc*P-P11ab;mD5&PFLZMrt_9{edM-$=6OR<*~R=UCA02+ zXxzfu>9_J&WPz2tu5jBB!^m&nH_uv08O`ydYq_kNU1EV#ddt_|SIJCi^=6C0RC|;6 zdzy)c`#mn*#r5NkF7Z1oeL`fXk{w+w^%)`P(5l5EydE%Hsc>F9buQai6Gp2 zRfeYfUtSFex5|2o26NBrB8evgv_v*US}6-{Af@KsG6Ej zQo%L)BFpl+f8_M{uhM8&cmqkka?)fQWg1)Yo2TjCRTukZR9~11P#vig8M2ZWr>>ch z<^!U2uCk+I4rQMaUQt{D6#39|8ymr6eB4eS{oJ)jp!3O}KTtFuxv9-Zz}4#Rs0ix? z)u|Hdv!|T8HW_88vGkJ^^r;uW8WB)^;K7mo=TSg)Z* zAC7t`t$PGie-^5i7nvuI-)Wc;q zKBbxp^-1$7(4z8x7RY8=`EtlzBf~gGzp7>;2z2x{CqdO+vndkM zvK32tj?D*n5u;2vc1#Asda&^|zOqhQLjmZ zguWCdp7j4^LE#V6Nv)#IL}=~YCdkU<1P zX2&OnJNW{xI_pqo{i}=2TFT1#IMSH@%-+2hpnbKkM3Yk6T>-l;w4{C%>stAeL-c}< zW!1H)=Nk=*XLvO(AAga^DA&CVA4jNAIV_&nefAn>8xx??h>oS5lQ-%lgmm6}6Lv0* zAMa(@kLosSQj9U`reB^rcZB@ZCHVB6deLk-kl~hN`KXiAkhB#o{Z?C-dGsLYf-@{D zGGOH(@l-Gwn^Yp%b3HkB9#6#MOqrypq!HOPPLZNt@BEtWTTLKx6HTG`_wAqJd*R`5 zYPd?czdy5o<;=pj7~u~3Cqy|6><|76jf*eMG<6c5kNP~*_~<9!AV6}y@PJ5gukTtP zTZ8|kb5-0mUx0(MC3F!!-Y(PKT(%@|-zJL{{8;ZPTdox&kDLRlgO6gOl*y4whN4gy zR(+fMPYeKk>>%duUCMvvGt&ou7{VUv!@gHUAVSy)$C_20>7cF89IL!(MQK$6qFH>c z%NQgcftpU~FEm2VCm+z(VR{+X089D;s^rO`JE}S(lp@UwGCh}h7+ZX}c=W@`T+No$ z%goGT0R0^d^ZTFII>(_k1Li?KVH;n@hy6AjS1xcNfBvZ49sZQ$B>M7U5m*>A{c0g| zi2j@TkYij=XMR?HTuFh%&(AM`Ie{b7E}k%$lj#t+^$Bt4SaV}+iz>qaFaUq7$ign~ z#mssoHL)~}^nF+U#DI=jpC2$7;wy9CN6)EFE|HqAq$HN_6)n|?t$~XHj`paC5^E59 zO~)&PqKtTU(19GfK`XtMkf`s}>PJkw9B+@pWhIj4ag@C*iTO`ZLq=>gOlvuaek1=$ zyXM#Ck3vSDTXprQm2)Ckj#-fBCw0xIyNtaPE$u>nfZ38EFbxLi+Q>icJojX^4eEcI z!})3_*20dZGpyuaZG3?&zP@KlJep z3T!+jD>FNFW!L7Ge@j$c5=mZ~6@!ow6wo$1lYf#|U^-X#lxMif0XI!!DNkoxPMUV< zOR1w)sV&8|H|~?45sq16{bnNNm;^1Vug6U7f^o;;-^1{r92z#TcCKX3qMGXIpf+DY z7%eZYFQbD4^-z2A;IcR5Xy?fccPE8jonb0=Hz=qsK?wmb^eer|{7^>vy?THquEqsnwB3~@ zo>dcjnFG+av7!rH^!b`m{NE);*x_~r=6saw{}ba zF}2)RvzkzKdUKZMV^&UcNF>*yUh4C0x!+cveFSs;nakTVh#~_$ecYJ{&d7)ZH9J*^ zJMVEwiDwndwG3n|xEKECN=bZ&mT_3f4f!!b#t>k_4&Iy)Bg3hmzF?6$qt8n zEDw^obn=!ej?9-|CfHiD9wO$z@q$DrnH4sGM-5QV}B z=v+gW=wbW$j7+_=3vg)6-l}b-@ENX@?9bC%dcYBoNH9NkM1HDdEM;+xllR zaZMrG6t5Sa^4}zgGH@7IK;4%Cbgqf*HQ9E z7MVRFt)G)d&{#pAS|LuYiqt|lk(zc8t=Tn*p3Xv0zKp6egqbjz=XdbpG(>`Ven&M^ zM>%nCkzqEy6q8A!8YN)2)=SjJP!?;9q^Y>Haj5WDgF%fmnPtH6dWp>`bmhVBE$j`$ zqG}SZlnt#F*sx?KV?V<6^j93nIsUrEMP)&ohpkPC^YR)!)0fwNSfDD6YOD--wc}oVd9@g>qV{oH5`{jRDVC{3?wLeQA_LD&`XE+z_G;&=8%!(>H z)DMSL$&$5ijZfGIgi-^Z@NvJNeHwM__s!d+>X+Z&OeDd4s{eV6PnWluIW<9H+w*@U zBC=4oHz?%nU+D3$;}Mt;i+O%Y9#6<*x*=O{;zmBNcB&-28~o1X3^n?p$5-E=;p?z~ zWFQXm{GODoqeFr-E+4}Y_!Vp_XZ58uxS#y1=^Ea-sl{2}aQ)}SddrmvxdqZ4ZLLA4 zGJmR!8|=VF_s%y_8zPlz!PBzLFzu)mYSk08L{ZfF)u#Sp+xhz}zG&;VTOQVDLdkNv z>PDHQkAU#ip3$4AFM6Xm?tRK7JA(ke0I4eUxUP_eSoXm3Yw@TMx2Y>{<%C18gtg5j zY5|qAuHy?Ybtp%RRAyc1y7@>nIhe#yo8g>fH1_M7i%0y9iGKi}u6mNOCU=JS{c21a z6_$yG^o^m(b!py}3&DNZ`v;*B{%(Q16^fJSJoJ&XQ;Ne%6fC?s-WeNjw35!X`N6nbzKfVO0A zw!1!=2Hh4&7PngrGNO#q9gSD{VXzWy^87VN*z8!vXy&`{io8owG*>kkQ|<*`%vRUE zg3#4)ueC`=!9_IYFBMOlXNNCQ2(P@)t1BW@h3B*pLTuV~6zqB&R(REMq$y2|0xg^0 zV#rbGWAf%SEji2aX!SJ{TKcfDy4<@Y2(61YpNZz6HF%R$4f#qlM=Xrf;Qz?>7QHNE z?MSrx?1?AwR$wfbXGYSF(yrn`ztSZ{m$_stKOhG%Ip$kKzJa3;{;>#pqhZS-JRM4O zjILG@;sh1ixus!whtVl%qjLMnNV`(^V!xtOxch3+GX7v3DdYjwSP3za+??9_ff~6$ ziYo-Yz``KEEimz0Bu&;FcPSKhsy>+w8KaLVd{glV;2+NHc|QU~t`8$g9LI*zZ!m}R zIPD@Z0YolaV-=KRVOnY;!nWT zOLu&xnr58PO=yVp>@nm$__E#|@4jZ9m@=sWPYXJioX~RdX}3z}MWs=0IfEZWX%$7k zHbAv*Kz?IYl~~V$lo{IVV@&*j#g8EP*QRE77QrbUSb+&-+H*o9I+C^2tx((z>ST0| zV?sL4HIgE0y+%;Yv}rJwVu5iL@|otFFY8~8T@`6?u?elUvF_gcP>bn?tHc;UonT6A zA}oGlh`OH_NIIh=)Hs1Nk#n}|?KB!rl6ZK6j^8Hl!nURCkV8?Ln#tbi;k+SA+$vQC zzriha3f?EfXJ zCYG3jMDtajJHwkA7I?9mi%I1VBl*@iI~9aN|JO4cn-$QsqWGY<3m~h@89xX+pql)+ zSB?o2I|8)J!IX$rym4<0>5`U;29Bm2Cqc8m((*dwv8+9*u(fhEm~*48?gm&%hAHpH z8;v}}V0H)kU^61ki-rw`Dt{adxoFgya##>1rQI7;LbfS)aRBPF`j@SiZ8Z4x0x}-bvi4oHM8`t%0 zy~M&*xujFwsW_>4ANPOfYeIUske~{W0e`!4a8)o(l z^AS+J4Vk8qcm%4}xL&Fp?d>S(>+Wi<21=HRxM%$s6_^S_syOb;S6MYJtZmA5ibf?g z8|V!LP}6`*3Jj~m{8mMnJ#8xs46rWk5#EEp)04N_>7MZs+ldk9s<5wCCj~zVu(^7; zFL}m{wT2+6dMoPi@ilQ0wRZ(K1TPV{ zl#nO;##Xj(VvpEJr@^FSNQp=FfiW&LU+&ZPM>wKJL;sISWh9e*wYMZpbg~&SnR}@5 z0qy;(>uamZ6c#wiT1qJ_1P|e8mNb-XvTS=PrC9gn5a;*$p{}(w&Cj4&{6+57?B9|4 z=F*03Z9ME#C6Eq%70h-2zWROY!lKJELlHZTRegyHOw-G*QHHdjoy)R{YBaVr3Xz4C zqw?ggNe8ri77m@lS59u&k`60JxQeD>gfF5}#FD>8PQxI4In3jpA;B2mT`$gip_w27 zy_1$_(@Ne@BT4}*#Y;N|^yp|^EB=TbWO8ID^2XhRR)ADK!Dc##E|scuq*+6vAw@$i z#=knPLL|9BEct#>IVs%nRBm7->8)NhtP)I;%~T)}9J6GbVYL+E!T&}NEhbZQK{6qr zcM?DLtZ^CX-bMshTT(6mfE!&dDecu%Rk#@(tYY&MkCH*Q%tc5oCFj#roKq5S;3M!H z>MdaoS}h~4Jl|eA+s!rm=c5ou?bAmfEBF!k=K2VP3OlX|g-(?Q-FZBp9dt#HnY=`f ze8Z+cJgBHM6j@0b9=Qp|J3t`nuJo1dK9HE;3``Y62*yq2NG1d7Ts9q!S(a^c4|#mI zB!f^kasM>GpVfVs-%29D`_N9mP4{CsHn*_rN%u}<>~+A_PK)SI25+fg^qx1NvL|Th z>0TM5zKY+IY(Knw1~%Ga%Ae7UnU7FU3(hC|^P}UHFLCSi=Z&$8sdw4D+!Kd10Hg>v zGoxGD=!2#6=khMbHVoqUBbI_RXRHsQmg!_wq?BnC0+_v@bYu5i;MgNHV_Sy1#4e_T z*C$&=fm^zJc&TcV9HPd5J;l^t?@jM4Of0&tOA{qAFroYd9csKKt9h8$OuMW%kd zPUEzlh*3qE{#mWzf=pJ@_#m3k_?Fmw(YH#J1lZPX3VYP3K~7BhMNJKKEr+=RETMfB z{DwuBx-f`9^XGNo0Ih;8w7ol-L&9^RJ5PAU?TMfYLxQrSR^q`~E|+bN zX6_RQ(} zCirAJUfs~iQn?*Q-CEQg)op4lWkkBR3yOX}t&~Afc*c{r3ap8>)Q4ds)$F;8nn#t> z1JOzd?^`3{cc>%zE}UV*AL)OIMc;jHmr^V4|L8dKH?dP%(aZO{}DY#Ut=)DtttsEG~@$L@hd6Pa30tR$lOS*pfEkm3NMab6LMgj7`_HV=R4zX`XXy(K-|H?v~v3 z$`4(z3rlQk@;T$A3)&0x19x=!aDQ$P{h+nRyd(j&hB<1s*PEg=l~wxQEnv(Dp3Fo zNjnFfT@9&f2}mTI02q>bsUeGJY4MnzJgF*SxI94lxWzyV8vu5(qz_;~{{V{{Pw<1^ zkY4(BucuY6RAlTf@E_t1KjR!aI%;#=?#f4o=QSN+ukg?M5$bqQNu4^8h2S%sua#k! zG-hh@Skf6>s}?5H*Hi)PN!uiu^h{X$p~CdCm3jA zBEumzo??EZX*UDTcQVj})Vhd{JY;VXK~0mN@THv7)ZzPbh105NXRc ztSXKQOUp@=De<|epUuE4Da*#NgcK;iAPh``Gq{!@8<2G#2c98YMl{eV7*H(X9Q*?pwc zS-dUaIFyWOdSWU?Y=0w_rC2U1DvH2A;zRrS>em{@gGRV*H_a7AXvgVUzQ|i%Yq_F!g!o+xk!!!T}G=*gCrkE+;7Q&{gtb!aH8p576nlZRQR${8G zLmf0yqz1S>jjTE41lE$HQ?O2x`Yqh&H#J873YdUDG-o+FRs zd6NyVk#|S2$%y#=j#ar|p{_oTTnQA>Fma?jIEPWXVOR1QmYQ1HG`JF4@)a6fTH%Mq zPc{X3s|s>Mkh+lps7;iZtN#GHA=xN@4eO=;zG+CUg$iNEdTo#3GBsr&{$WdPCZ-#l z0jKFB_I>(p^IquBZT|c)Ru1!Twz)!MJTWwCFx-K z`lSn1QZ&DHkHB%n4w`J!9#F;q0Iof9%Ucfo0|U%-2}}oRCpD1tDchnAR zYyR5b`}m@)@BUfu{{XeG{q)hS%=w!F$+&sMvFW~A7HyG6fXO`4ct-?7R&S%}Hs*Kd z8Rec=ZeO}sN_cdW&<7J(bCKj%xwGM$R23_U;E~d!z;Y-v&DpCL%rkt(X^vbsF4B9@ z;E=lAzhNcfWpPKKO6#?sTHqmhJc;ZC6^)A1#C5Sv9&lhhvf?IfIuR zR(N$FaP!)I)DY*Mu;bax92Wtqrl+97)s1d87_JvaipKu{C%fHg6lv!XVcId{$i>IF zC-+o@lyOxCU(7{pGT=ELd2r0DBQUSTq+tb3b2+oQce5l!ok=%7KF$^`>5!joJP-hr z?5Oq21r8tNVXV<%l;_DCe?;>;*acP8?J7H7=f=SCrC>1GT8T9i8#EaZfT!SbteMBtY~Ri> zSIHASO$fx@@qvm;wNAKO#zFEOl$X%#vAMOpFU_UGDYY?4ydxlBIe!wL4WvO`Nr!oq zTjaYTi5}!Aa>r;Q$}jvmr8rf#ww8ixJh8=Fh`^|U%q;T(*eq%`CWGO|$$?IRO_}pH z;kk1eqRZ85DW@@c^Gu6)m83dvKGWZx8z#J?70))|IMzFqgqdsoGYhM+sW31#0wJ%u zqf#{1-0?Nx29UM1u}rHKdYGj^Rca&mC0}j!jXztCYzom3Y4a_08f+dP^UPMFm`NtPx3N2v z7Tk64*S{E2logK3a3m3hG~w73neQ>-A_%@(LZ35HPQV?L%C>05yb#>q#{6zUFe%Uo z5@=ke%hkB1H$#^t3Y7H(dFr}_rhr|(@GbT7;A2}PMJalNC(TyUWvU#@{!It_qZUvC@2D(9k^@tm)T=X#m2Oaf%Xu?VT! zPn%#_6ZcU~uc_NTAlZ^+TmKqY2Nnk6(sF-=nUC7LAkPw@3(Mnm1UF*GJ*lWh_LbFDwNa04LV@>jwP3on+KWc+%3RweH;$qOyfx$CS(PqWb-JQyBpr^8Tx+yE=z#zq^f2%Qg1qXY@w=^@tlt_ zp{*YJsE`Z)0K_F4AEEyKT}r0(bkaVTHRrCL;s*}R^pjP=4u(*LW>xLElf-;hPEF=iQnrnL z!t3?lIL`qgO$`bq=1-?K~X`nljF)s$dVKB?nUM-pW`9PGrgGzO*A z+sUFjAEBSH_+O5iXji&BM@dc8tglTHZFR@+-)VjqPAku#RmHr>8YYo?kT>CzWaWBA7@$J z)?)d7>3WsJpbmgG0r8|+Mo(#$+lzZdXipxJdP&+%16lK`wVBd}YOG=8${jC?O@;;q zYw;-ts*VA<2f{FHJF)f!E^cHKuu=O>LFqJw#BoeRHYbr+3t%}Wgoz=bj>0ep*pi`z zx4E~vzjwEUj=EQX!8ENPC#=^y3V0P(no3GzBBT_DX{nlZyD4A?ymh_4%HPECsRI+T zy#$yQ6Eb5EeEg>;6q@kM8E?Qe5#Hu4Wy}L1dXKZ6g2vM>5dVU zX(7#(Mw=hZbyU(TBW-A@H@~`&f(R#V_cwEYtkG@8-LE?Vw!m>;XupRM(ZQO07MMVSG!3e zu)Y4iP}bzvJh4slb&^!=^5HTFRQ~{}7N4`8Rc$rL3YP%Irl`U5g*e4&YAU5M)ou5d z?X`6t^4JY6%_U=HZAs%?abA_?jGCX%I&(W>*gzg<%3pf{<76Lbf5d+7Ua2unSZ#Js z>J3No+-e`{#%~R^^a`>OrkBybk2PDGW6r%V$1>LHr(Z6K+uf*(-luDnc@O&QpeN&@`18y0RZt3OYxKtjWkv;vXDn`Q(i5j;I;Co%tEKdUYC7EOiGd7LmxdBY*`=nrmB-S;-&Y?>aFbM7 z;aDgml*vA0#D|w#jnr>dH)}_riaU61TLZ+)8jWn>g-66>tyyKLs3XXavjgsh9vbr1 z;6*&;sA+OWO{>h<*ZF#o)v~F!?Uu9PRXn z>&45(9_V&Hp=61#s0P;`cPJekYel|_MrXfE_+}|9W^R*LoV|&--XJVmmO?erwJY>B z{*lX&6be5;z#a9rI_6$Mj)v`z0*u|14a=v4hS|ivIvzk32~mDuW%g%at>SQK>T}HcG|lUaJ$tW%8q%#RAw}-c>d$veg0JF9PNqG?G8>GA}bE?f;(6$p6%o9CxtI5OT}KwSdtPTSE=Q#`KY3-iLnfFTdf@xGTu1k zZ8tT++)e%FH}(&M5n3mrx#F`7uUcsE$woWWDZ%rq$G=TNUgefMn{OT`u4;E$e@g$O3DV2|y zB92yvWkIlCG+OPqO>NvBdr2a!9RSn*XzG8>Wuu1qh31t)AO_^KwS!!Hc$r{|RDumL z(9=w`KIhw+$-8#_2=A|j_{gVCJz=m^VVQm2m@JiXz*a5#D^$y(ZngB>Z_3UwTGJTP zJ1gdj%(afDTk170@;pXy`YN^`=u=xj=>3Mj9$QEiy;DLq6^P>bc>Mh#^QqkL^2M4b zUk2~|IYO;FYT9OE-Z>pk6f9QIN7 z5l#wkq{0qk%&_IkcQa5&{*_q30-i)fZ9;vlY`of2CbYApS1zwr3|^`XnM_BONXu7Q zw$?5`$j5Jh_lWvAb<-`R%+ez`;=?S_uai3Y5k_7`YcW(B1P9v8eY{Sr4LioTWInD@ zV)c)L&`T{IVZvAaDFQn}x?Fj?lwDYMK0XJYL&u`F<3g7hjy06?We4(1^+``rNl>5z zBKefXn?O~*(jSffzA8(A(lsEBlo{u5OZeUaBjyf{Rg{iT(tj?fV8DT`qJ0&=BlPoS zAd1=?BW)w%>ee%YR4!f5baG|fW`(vNG%!a5_>u*_9B815eJci+Ic|7y{4`giM^vnB zAC8yrYxm_f5nfQG1`n7qd@4PZgghy$LpQw{0RHJ3uhpj?OM;kMDgOWq%vpaIs#U3t zC^5Lys;t3GfnM9ZseC~m8hsqPR1GpxMI>{5O;%*g9%)uwCkQ1e5zdUqN0^U~Vesb3 z73eh|<(d*6tvvX`{W_l!^m2n5u{c1d&Y$Dh9!AaBW_--Dj58k%!t;_a~v^J><1I&Ub8-eO6XPXek$i}l~FiW#k z7I#?NLh_X$D*ph5M!o{vF>t}utVyM5#{qz>Z9XMciX1lySu1lTNeeYws0kcvrG?M9 zpmo|s9DakJR={gmXT(r7)BsGwWgpl z5b!EELR<~aduTM|r@fnkH)|q7_3M4rgsg<&rU?m2IHwVb+OI4sG~IptJI9biYR4K@{m<*Ih8rmv-cG8u$$g=$KO+-{IFIX=d) z+wI|dr%#E{y zUW(^@C{kk>yNU4PJj4>K!sXCiKoSj2h4_uf0*(}^9uZGe^zSV@O&Tn8&{~~dONmL{ z`ar2~A8q_N$uKF=B-3Y6@u5vihG3B~N3W{+hK@3K7^y(oNz?a;?d;`ROp+95oGGZT6LkLoIrRRN;`str&)Fqz#}9M9 zvKahA5%z%i3;a2w3abT0Jmh@am9wQQQQ<_<;+^NBm-JJkgWwNx4~XZqfGXPL(*FPl z#wUW6@Qi*Ti{XsBB#w0sS~L5kHNhWGHWWtMs?Zg(k{S2X_7{!K{cz~rSM_@_$NEo_ zE>b4(3aoFo{>HfW5yt=u#8Wb)?WbQ&m>*CvY|~$h^)iY~8m}V-p@2-K1hsRaFECT! zk=R@kJ?#%R2O7~_h^1XjlH>W7r!hUnBuB`iTWj+0k^>L;lU=^PHcYCVP6D{sVX{oE zT-W&|*I+hVfvLB*no*o8$$?HeGYX~2IYO&9SA!h*kTsG6qxlP^JVV%8_xf9oplMAs z;x=~PmWtwzh;M8~o%1h{rO#~Q~fYy705dDc)XY9tFCJQg41)jjP8 zhqnB4K|3j+zM2(suTl}>j!FucA^C|J5{_3>8_O8n%djyjYzY?nc|s(^zYPOo3rBGEUbLRfo_U#5}q@J3Cdug(}SoRmQaVl&b^0l+yc>0v}Xu2+;T8 zhFNAVZkuUDfVHJEHi;leq&bz@x3_W70Vqn99WV)s0Pt)-8OIOu{1!;4>Eb?hZFxKP zTU)%%+=1-V*~3^f*G`Bds++SOXQmLzmGWD#!iCNwi%4xXOJCo!_X+u)CtMAb?2}RQ zMn}f;o;ORCGNlZ-t|5xb7M_wdK4k1o{Mqeov5xj9;!koMu*>c*pGyoRt!gj;=VwXb zN$)RMv|&%app+y@Ct&A*qs`F&07{T_vm)1Fl(k-eRI{}o%GF}An?(~j1u1F3D`?b! z3usTk06CKxM`!;4$+A0;+mUwTXH$YkkTKGpAaI?e<5=mLc7QW{_S;)?XxoAiK$R1K zQi1c3HUZaAdaIl9To0xA%`I)KC&DUesIa<<#Xe0=B$R=rMT`PuNaSeL6WxO!4ncSO z!F_X;w`TH+(Avs`l2wlaPS7}c)a7lFSzG2VU9^Cetsy1=0}N&d6UU|n797u=sHDKE zsqpMB92+y#;+1l)BSR8VK_yg?nX834RgZK??o_chI%-MOEa(x99XHiM2*t5Hsg6`V zB_#NjG||HesKT0eOV_66l9E?s3icsY@8WC+f)a$2N)ob>6zhcbPe0^(x5F?T3M>M* z5{`HpNDOmS8Rv~zWu9_NfT+Nzy@|OO>=Uh_ww^)p+(JhfXJ& zO1YYMY0~%%{L(N;MwG9{iU70D^0MTzv?H(+XU!Do$d|b77)dnmzA53~LNNU-?fu zL;I)ObAD9S!l_Hsk5E-vW~MrP%(7FxTLB$ZE9TR*dqY~GLtMDltf6OV5DiN zB_Szs%1~sba5TG+G(O(P+Bu~rwv`GIa1l>e1UTMZtXj%>6f|={!NV!;G~-yL;Z`aH zQlg^~#A~o=sL_QrZCoZ4sRHN~^dzr=u{=;5!kP#G(+8I=1uydXkyOL_HFdtwfN8JQ z#_7#9-5oRIc@jGrQAGgP?HEhI+oyW+;mKAvp?RaH=dHJho`)8iP`E=j_{YFZ7I zxPf1?Kjj`1Z->42a_*`yrqVdjG3pno^|^Mw9F>NfVik+?6$P|N;s()1ZQ{fh`Ul61 zMAeGAC^*P{OvN&;Ed+U>!9w-Zn41xiL(wx-9X!W2Xn|{AQKyOHYGBNYuy{oZ*rX>n z;WNX7!qiomJH~3#grjLPv5dni07Dy&>J7Pc9T7Cz#=Vq?$Ffae!0X!@hMsyS2C}(o zV`!G57=k&dE`WuU>H*w50k?iS6*z-UX~GRQRM6$TH!sCiOMt#!#ptn08EEERlvQ(0 zQ#X+ss!_;G?^j?9w^MVa&G^!gqLVc9YDgjl3%FJdB_UWVfvT#R0jSinZf|)|e*y62 zEtIW>to%hhVfl*~!m4TTd?qu9eB6r~(@Mu^L-vY3r9c|^jw|mV#V78>NvPhSa(7QL z9IYj8WuaP}ex!m*Oj&@ zY3cJYV`HtEK8A9bjTKgC!eU+8NP+92QDz;$`0(o?bN(3HkN6@#--QzAt<8hy{szDI z(?!=dX4tW6U+UIX-Gk(M19_$=Y?UlDFCibgdV$^A$(3s*OMVDy2 z2uPAoJ5K?|kEf?kP1$py8F;YSjpwXo2lG5ojac_I^!tU@H9tXPsj#paUAbG6ZIH1z zE%gr)`aiu-K=|!7ikt1e_ZjQjQz^Ge@TaHy<#e8buu|hV=Nu<0;O$3+d04(|Xd0%Z znG!f?;j!}Lc^EKR9N5?bcHHUX9Cnqz8Gnas3aci4x@V)t^AViwdNt`HE>E;2Mty9L&1!fmk zR<7$91hh|UH~@oU0}s!Li;$?>N|KF2YFynV#;}i;dvf9wBv#di+E!%@$&P0X0Mu1bO_s439ipkGpY5cPwV6l4<4cS4RZ$a89`Y!L zpcza1t=O9%r<#d1x^T!;7%c`NS0pm-#qlOlUe4(_Hm3R?{hH&`89pN7yJ;vW0sa4KK|tCvA8UvYWB2r_-*!R!f?) zZFs_SonT*?rK&7qmQ+wSIyKreU2nPo=MC(O0n=Xa(w0VXMVLr$^MJ!6~IKj|d^`=pWB zU%(H`iknOdX>w`vB;baU33FaD7M`MXZ!3Sgu~HzpbAHzX{{TlELU@{K)o>Jq#wV@M z*`@O|p_c=oQw|*uvK!r|V1If-E`Amqu`^A9QVgPsRRj?7Xf^?Je}(x$uZKFcz@ zoW|ug_UI~FxO~q*98EQt=2rQAx~?u35`>IN_zseI4m5xLJ^FUbJqF7E04GQj7S1@T zhQ)DaUw&B{#KjKnRv>#1-a4NEGN*JmLf0d=guKBn#E1?-#eW4ax>SAJ1w7~c_Xc04n-9X|NU<7yqN=gV2x#MTYq4?xkb|Q5Ugy|IH|Kv_%h0P^ zRZYPVNZ610E`h^o=%F^@c6#Odk$HHSw-|((mGpThua68U2kOUG@SHTRP0Ix;aayEm znd)i?c&Ve1Zj%tK+z9S2p|yVh0AvnheZ$I8Dp4gz5>7s*vOTuakOD*`U;y|EFS(C1 z!;0^Uo?43h0}!h%C!Tj=Sk5G)cb!svAztB5fOqiVdF5+8Um7w%fk}*W$jlMXL%dZ~ zOLa4y zS$7+^hsMfT;Z1~&G`FwlwR2(dP)R*TA5gKSU(2r4l4xO!`48tgO}7>#w{hZlpS@Nh zp6+4|a?2Q{K2(DdmZ&O5k^IUv*3DsOwT`;4=f+@=DNYm)WB9#BV>NNgSyvR0`Ju15 zqrT%{JP9X{q(voC=L&&AOILzMQhIN?xLGyw)_%8pd1CVB?)=Cz7` z_&y<&@`OcSRM#~MD*X8nQ`JeMI+Bq)TSDMyeVXfU9(Y!bI7yhQV2IP=tMZOre3u8# zqc#@+F}02V0Cj*T!;Ls}<5xh{g$tgWaO!FbJVQB^RcfgjBhV=S02HsMw?W2G3B>WG zI1dP+&n9DE)!d0$o2r-n`C}x>PaA5-aq{USKS?{jgU5%2RTL(&W!S1HXaF+3MDmX| zSqZh|Z+VFy6R#+oO?sqeEX^KX!wp?cHBK!jmStq5LoDJHw)qMV0eyJr7}ksm!;-PQ zvzn;dw=7g8WNgKxLUz0QXWgQ@9Yr z;M}-$jkV=BG#GUY(pFl`wF5Zxeyrq--3RFfIC`HS35oX*-(o&%qehR?WGU|-O>_(@) zzCR8;+0<%|D@d<(Uos_4LS#Ay5JEtc6LtOAbY!O|!*+#-vct!YsM2&Mai*B+Dd2=b z0|Ot~8+#M*9BWXgG)6SpH<&BgV~@{arM}+hOj+zS1-R4&?E3NYW(IM^&i6*+~4o)ofQ7mS@Z~D@labJAA63-6~VJ*-1ep zIku+U-+C&#FsJ^D^hc-JgVdK#GqzYOf?}99dBCdJQ-6?`$;D~pWO(ih76RI7@Zq*k zr}NAa{{S3E`|zTy-&f>c2mUs{_tQov)90rgr_d~}FzhHUEt>IUQ;TBEKTA<4_lie- zRwX@$k8`hV!QEZgwaIPtqr~dIkhe zR)khf6p_?b2<4VEsI1;3k)>5&8Cm<>cGI^mWK}RGDT~#9JB85VaAB12M^8O95{>bM zR9G5NsTSMX!D1i_X?-}}lUKrvS5o?ln5G`sa)=|T+LU0xf+OTa6f-v7{{Uvh_?}$} z#;CJ}Bcc(=fJ#cPmLS=IzLq1Gicd8rBLr=8`bANHHb1sM;$z2_(koM5o{FBTMX8AS z6Ae;$jhI`&j~-WLZnLcNMw>Au4jkA{nxlWjt=RKrHR-H)kIYd~nPCE^lAvw!o8Csg zn@4}Ul!L~%G&gkNDdC~Qazz!RYN(MaN{amXTHtbu6!K&yg*?%kDW=9~^5quQ zqs!5yOvtC*5;)lk5&o*&{bQ9Tt%*3(_6>`|0l?K1h{RA$oINvVPMuV?Z0KEdn6?*xFyT@*`8M9a*u zX*8D=LH!0BiTsSUII4X1CyGdAndBqPX(T(Cw|#Z`xX2{a#UN~`SmiA6T1q0+(5SnB zE-p0CTaBz!jh>oS^wTRkQpb*Bs&`5WrwlfYPx(WChi*S^jwYFXV_>9@P%-)XgP2AW zg}FIH0G8#(vDDS2!GDS;W%iwYoOx>DO{Fo3puei!dcpE;WQ!r-VX+)n4``bZXdrs1 zDcW)cJv6R^YCMcZu0hlf9(zKfYkHG3F#0CXF=jrx zMfa^8X_F}5Aaw9UHfMNkzT2s2DVyGEx{}th({igDvGQns=lDKmDsi>*Cm*pc3)6Fv*0*L>h%MT6s;ng_eoC_^3*xO>8T&#Ty(oC_9%M=*i7@ln`sKCQf6P8agR5NY&l;}@u9$2(UuO;EegHFD6UVPP@ z@fhe$(mH`kt$oU(nF1C)`y2fv@wFx^(?|>>0Y#Cj7z(ABUDi`~H#a0PA0O`Jbw(AV zHIlb0LpJBaTJl=$1ADB#I$yUONU9S}a#Kl#f=ar`JPq%1d!B3wHCZCELb6E_k^%ub zwf@6>EBi-16?*ELx>(!Eok|%r@|#e9;tkl3f#pcA16fiz=wIe&iJlmnd8U(F5wE*` zSB^Eh5c(CHVIsFWVj-#Gr`=5ueG112-!T{Z0OppMtAk2hx11Lesi?;4nbx-$m(L>q z0A&fXFVGgljKw~hT;bTH*w@Qol(KA}5^)~ul0;|iw})i}^IU6FjV?2uVWy2R?1hHy zijk2fsu%k-uzRr~{{V?Fx%xS>Dx``<^+T>})2||)lgpAkKWo$nAxjrFjRW7^@i*}1 zwGoAQfwq@fCn*_NEoPl-Y#dOFlssPf3MxCE>1C%T)BJ{)yBDuiQ&dlBh2 zVat27M?o3^S6AV(Y^0XQMgW3iBiO^03ySebG})iJdDEV*(D@m{ zjWBG+%eFemtg@EuEg=?h{;U05xNsV5ppBH((T;-G^p3X_#WNl%GZhgExL29DEiEFc zX{2KMhHl-+0C(4yNC3@IN--4%vZ5}cW@pFicSnNZ;KhbS-Tab$`Pg_ggah-(q=}`DTw{0}$il9}JCZpgvZcKX>-6&y)&;Kf(HWC3Z<_EF#ra*tJDICoMyjpXVx| zsY<2p+l@)V;FAEo^FweL{n%1~VKs{bgA~arSy71LwO`Na zaUbQYOET`7Sza*bZoo(~ZynB~Uce42?zEy$8elJ4pm3)=%haBzPc!69R)RmBro&Dv z4ikk-`gkUVLny1MUve|B1GO)yu{XWi&??I&pk@54fYfICn%u)jS@JQ|B|JHTzOEW1 z-vR&KgePa{uiLk`#F)aX3FA$f*CEm64A1aXu86e)> zk8U-n6OCF3taR9QRv#Y6L*{p~{hyD1HlPWsq~Tm8@}`(EFBMXKmR%TsNc_3r2(1{d zQmrjw{I)Kh=r&rI?4?LL6W-s$maWtbO9QFHSI&U0Ax2HsSo?r~#G|)7tSeQ9o;d28 z%9T}+_8Jkp;l|3VbuD6!n*RVYhN?coz!?=!!@1=OrkoH3N2`YuhYOaAFVzLYYX`j@ zw-vi?V5dSa*n`UjPTFkOJQF)tVUjIABYJfMX5;ovzCTwtq#c#yxJ3*78_l$lQ_Goa zWCAErqK(PDql{iwU%K3ErYhQrr)nOd(yUe4*A{W-RFfvhAZ&$3*x~^9(!=THF`9D- zpt7?$9L1alBZ@JmpXNO1+E8{eJ=s0v3>0bKKs#}jEQN^}Q=uTF!N!+AHBUo^Q`OT& zD^w%2s`QSK!~!z3jEyTOQpAsU?)LFWq{PK7@<&>$vh74Qa#U2;VZ?cVGa55g?nc^T zo)h-UoelNzzbZs*s|8I8_?0hB`rClT25_c{s|W_05`*+pM}M+bLN_4?_ghX?Dw^7b zCUG1StGyOeQTkr0bnZJ^X!XS@VJAZ3=Xe9+N5peQ0M?STPkC!OU^(p!*eyhLbn*WH zm#2HA@wfW%wTR+nf(|tJP^aWcs;FeZs+`nel?oA{e#RmDs>I&M#2$GrC{+}Yaj3K5 zv{e4(5(_W8u|9E>biDk>LDVr9>9I>m!>lod&?ql8C+w^e#$0kP#c_@r{(={C} zZZ}%6P>AA4k(dh)Dw>!ZZ*p|FT|508NJgU-b6mfgCT6Kjvw%k>c3z^D6`k(wT~Hh= zF;S^edng)lBg#7kI@l9KZ%;ZohjiNu#`C{au-K-kslpZT$QodkR8m#G%gGBO+F=jS z5njM=y_Q?p5Q4SsJ1HyIK&wi23JEa^jN6A)zF)w9nAPLB)St{MYOyF5f~-~45CB6a z#wwArDPjf9y|?C;4xDSvm@+9dn6s`il^VW_1j1_Z9LtMVF|Nd-h(k=Y=5cd9MUgM;dzP@U zumb#V4T80g8W#Nq^y(b#h-3L5GT?P{;Il-s$5mY#EMG2?uvp4OHpL)fN!#xpT^BqI`d*i#B4xloyu|U|PB*9n4Ms=)VuO^z&f=ilH!Qx?-7iVykFp zNge6)g$-65 z!bF$?B4c=%cd#P%=Yp$59u*Q;X{M0LOrnPnRl7#o3!e}_qm?3R)#jy^KqQde!24ab z9Bha+bgC-`)>FL)%g%e18W2CkJbAH&RGe$7sya+me5GP7G_#8ax9Hmb!{B}gmXa~5 z7^&3oV>nJC8y%OuxuD{OQAq}xdY{rPrC8~l@K%>5XHg;ujLu`8zzESA()KOC z*nXZoajF9brBhcXA5bRp{$R3b%l=R&as~Ocoi$aRLMS=wcc;3Ju4Wp3qvV`&rwq;b zH8Rt|OEZy1u_JFNst34PjoRRXeVkAh4KzVb2YA0xGhR^*lX~ZbNgON!e9xEW(@PjO z+{^Clh~|?{ z8KA!#$(5L8OX0YcJJHH+uTM}c7!3~6ZV37~=vm=SsS`qPp=!*}h5F3tB_Cj(pph1n5~^eKica{XaK*($g@9q>yT-r(EyfhOuuM{BJiD561tiT$hDnLiEL&0t z+vVk{NEdWIO3KTl0;IXH?b}PVl-1^h-%ULTPNj7+EHbWn-xK3P&wP zL#LV@3g688chKwM--lVQ>RsAew{$#gtO69C6Tw4=p2{Q3H>S$&>B~@byxAb6?J>nY zBacX@8M<+Y)Zxl0Le@~A3fd6r{{XxhbY)N4p~b0IeGi{{UAT#Wi6S2B!|GrTl9}&xgs;EH* zuoyR&H0S22>DVJmp7PucboO73C_%3SHNu)USqid=Q*p38t?cH?tJOSAsc2Mrh`r)# zk#AzL<77=ZlNi=H6)M!ki{~geF}{*6z8u&QT99iRM^j53mvv+S>a0IXzthVIHCU|F zl+e^Enubl21Me-Yeuf;;73$%MPYp{dVw>>F-~x)+4%XT{9Giw82EWzD*4k7t6Hg&( zPQycANvDeh!qUHDp;)}Cb!+J#iMO@6LWuIM6)4cn)7c@ZgZj^jA0`-;zFT>+gkQBO zzlXDpgvqNF2(DCli8Gcc*wNg$Z8zxXBXPI%Wa}=|;^bfGu;mt_O?W0LLrGEQMzJsG zowO`FkUTiuUri>ukCb|WnXm_!r!{ckn6(7ql+FQKpDZ2G-GKt;+Mm2}=D~_>a19}{ z{{UVw%(sXxRO@CNHdn_W_XTQ$@{T(K*X%wzkB=SLDxwLc@i1c0MUG|KrHoiVnNHi4 z!S>t0@wul8aIDoem?m(++XU(b3>d~2G23|%KGyBJ!&Pr#Q+_y?2Fh(sz@Vo$`clU- ztz+jtgJMpx$V;{w&KlrrwMijg=xaB`@%#v?g^`6JaXzIrMPbVQSi%zn#3@ggE6R+q z7afh*28^F?@#AU)VkyMI+d?m-j+)_<`n~BUIhCpsx`qy=<$8yPMg~NVJaUnll1|P5 z@H+iGdd1K3mj3|8PsCDe$q{Pj_^S9C25}0(f>O(uFsZj<)kqF0h+L5j15*+=jr)B( z5t?Zy3R-%3^!>BAq13p7YCPYuVZ;#M&^NA#n@{h{n4kk&FChrIMB=09-=N> z!$wlePPhzMWg@jq(E;Tb?&CJ#saSVk871rh<|d*K$+Q zM6keti6re+01`>lza&d58+%(}ZrXolCj*Y%vpZ@n%rkqd%d>XkziLP_p9~SQBV|ex ziunY!l0F}bpbC}IC}Qdd*s6;`BK&^P@H~!pkF(aDm#iTw;)AgN0E&2d96YL3-CopG zh+{IuYz_g4{{R?q^BDAlP%&CH-mzjr8V6!R%NZ?4IX%3Yd>h)0WAySFy|jAW!iN%4 zp|lYOru$o_ZW|6ZproCI86N5mdfSq6W+jvHIJ0#mSe5}COlGH@6vrmjEJ0S%`e=B7 ztA!~Enya3+SJC4+_YuUh{X94oHW@NfMNb5!n8OSx1e>2zb+ySBzkeQBC#JoqQhtjP zg03$s6;RP3_hz=ztTeNM_6YWkILeU~V5zK<#Pny$g#65PKW0T6q*Nbih#EDAVmxie zw${yK#BjPsjcTxG6mv$qZy&sjzu|Cu^I&wQX(YZ~mk+Lx-(!E0k-yYq;(eUi zNHtj^x~meyDW;k~ED$!o#CTtg6vbY!M;V%6WL+ZngN+Txu#HD7lZ9x^)Z+f?t#a-5 zOrL0f#D^$qz}Fct<#rRs-dq0U@!H4W-`mYr%v4&IPdy;U$Vz2ke9%3@LA{&V&5UbB zQ9?&gaf)okh{c7{F%&dPty3lLHh3r_#ksXW6||~^tkIvTs~Rkuh7%1cDw^LfMG%Vt z+#4h0d359cCEdOsPZOx&6>vDxgDqmQh?X@zSpatb00`}I#MJOKs=}*UzEOu#w(Yvj zDDIJ;VfLR6YzZ~8VzTD!-8C7HD&@IWlNFIwrk_UnYGJ6*f;YXizhSSlj_joB#MDe$ zuO{c3M$1|LnwJ(xkP_gJIwg>MuVwe+zqDw1ZE?1(qoRZCN1~lU>2o$e(c1RSc~$Pu zgv@uy6TOn!HHY{${{UB-AR6#d8*7$K>z-W1@ekx!q;lo_!dRsAm7~iW$J+AP=zfm; zX-Oils2X12d!l1kgv#{IAuLqs8w2fL$CgUSt0^GVZ0nS=KT@a;6Q8i?-l;B;RY&ej zfxKgs3#j-t$G3_Q?y6--)3TEun!Pn=UY2^n>3(6zmCcT1wdy`vlCA(inmR#^Qkh)D zO_&A0yoc#tJiN6paa!;({?k;dv4urtghmP)EMt2|bVsiPw!?HN&Sl z62CuZtS2qum9XKp`Kq;IqN%MdrqC&fsr+bDWCLGjB`j#B5Oehmq*&I8c{&x2pRm za#&QL{m4IQ{0~^5d)3xm&*{R4@rMtGU1V14Z?0dQCrVC-V-ypQ`KS1YmOUb?->TSFTCdOewFp(B z#HyZATM+Wh#U9j3#eA3tYh3Fu#VjBj`M$lUoX?o_TfJ=yW?s9mgxCy{e>A z)4er~D}IJS?;`-nev!(W+;mqe+G<(j(M2Tkd!ZXxoSy)B>5BALJQFeE9Xi8mX=vz~ zs%qqEBQff)G0}IQ0KeVMlQpm^R!8bPrDptHnjA()Eh|Z>XJc|r{+>2bHN8*_d1q0kE(guXoavsBETIvJ46vdSU8bu8yP8Q8FV1?OGcB0T`JW=CTGiiBy%GLAEXM?N_&7n$(7 zl*8$^e8ohN*F_@30g&wyITliMxz|ovD^S^5(1o2UAOnP*gRI6eUZPB+>8qy6l``cq z#IdYOV+4CZ7>+B8I)KM;Cu*(rAX+uhd&F`~2un!oq9UTB)j<9ym?W>RuBNVGn6nNt z!aPo?PRduAG>ZJA}Z*i`Ul3W_RNrJ9}=RhG70 z$dO@m2%wg+VYyUjHxt{53F2wQjslDiqt8V7j$G+Bed?7wl=uz>E#qjnMIC-9imenh z?8*_P6zK(lqSFXk5kN*}XHm38%c{3sp1Th20zUjhBHq~$YRnlf~;xcGZ{?RD)H z(4!XDzk%nq(?nN)D4=L9f4fe5U2FhFbZLMVBKmzJp4C;N&Fe?5`THQ(9Fq*uU>O@Y z2rz`iX%WUOF-$^MRE0}uQba<#(#05pZaEO|cK6-~p0aENq)JKJNQ`kiC#td|arYlB zO|8B9!j$O&LQDjnpgKCuS1(nh%-Lf+)K=mqqN*B*s%fXIkpBRsJ~fAyo=}XZ#2YT# z>Q8<~tQk#7?w=MEh0J*ZuK>#sX1Z)p$CzL+%UMLqs~Q?sv%qif`zfjCD$^ zJ=SQ*8`S$pJpk6R6&O+)b81p*>2Gj=>OH$j{s)>;Ytvk$rlhI{rkt26sq`+Q(gHjf z9^>ibWL2b7MlZa)QdE;iQGLFAV(>^C!d2GC>HGQW^jD@@ssvLgxNrz%)-tSngW<;G z8nLM{m|4VP%^ZT{H__XT8ntF>c|3y{0=k%j3~ql&FR9qy4`JuL>)Qo0*X7E5LKieF zT1f9;-sI`*=H@HI8k5rO*@k5Ws%&bfZZ}1|%w`5Rj-3y?us3jhqeIK7I)sYW!xZla zRwvArvSZa@-j!~EugAxiNg!cVP^Ww-S5a2d zNd;J|fg}d0DqqYKM4+>w1YJnnEpOq=6@oFUgpr7;`ExkuOq|vD{T+QiBSo~CscMu_ z(~XY1Je7@Q3{A*4Z)T&7IHX1bD$VMgO%9nGt@xc*84T5ts?$z@ntF!XO1RU@koLc@ zj@)gx4Lr07u34L;84IXV{{UDrWbctPj9|zfn0X+`b@$>zJbY8@2Z~Zb7}G}sS^6WN zGw)40=aTZrS!7HHFJd{f38q}<7Sl&X6t(c9R@7XgkqACxY7K^K^muP1yZgW4M!6h|-3UPS`1v{G3qU z;X&~_-H&o^d5{@Zi&hrNWxa!G;!hJ;!=C2v=2vQc-a7{bjsR3x@X$f{ad~!$^v!cj zED}NNFK*Y@nlDu}R~MiNK~dOgam|M&sH8<Ih1CisxSCKc;Cpj=>ZKLI zpb@J`{{UeIC0=aHrXnUnk7EFaZI_J@Z2{C$*oaMiPK^f_=9}RiycfKHCAgJ z)1zwFiZg5djo)Z?Fc$E+X7%cvx70$Uom>?-fz`*>vdeebzPGVMS6X!-019>#fFPc} z9+W}4yNbJ1J$4IGQ6+8}RporN$kM{q5;lRT4!y6=~z&v%3^{^ z;w*pCK!!qWvqpW>_5Q=l8mO!_FoJ(hp@7rPPqKgFOX2kKr6y^>YXou0L>VX;G;X@X zCb4`<9|QSuxUJ1Xl898v=Ena3Dk&KFHn_k>Us=L&_*t z^;DIlS)FQbRz+KfLuMRks+<(rnJ{?jq4Q;iI{KLZ0LjQyU3Y1J>F0syt(t;xIVdeA z9?eSYsCe~^pNjZ>T;F*cYrzE9g?k|p;*hPSHuKP3Pt$Hx!P!?#rnAokQYPsC0MjXl z+1hN%e0H~S^c^{*$g3+6g>!6wZ*|5$2_B637xe6 z0GHXT;daH*qN5Y}f|=~eB*U`+2^)Qb$BYCjaW!QqL;*sMMxa-W;&`h0PM{iS+qT~Z zH}U1P<6cbC+X$wvsje5iP<^0NM%;gRp5vYb)r~x2f7Bf5nljg?obU!dJwxM|eobsO zpKOv+W-7Sw>FOnWk18}-$=`5q+g?6U;*fi?5~#qDARYvcARZLPv>`!D5|D8K!6S$V zg!I#PK*;s^=2~W@qpZfLs;b32QJd6M<2cOkz8IA)cK5Bg>tJu8Dhz_;MHGRLI8~nd zE%d2R(oCHd9x||3W?V?CV{=8cQp;Nfr5IH+4FwezhC&UblEY8|1n#7`y(z|h=kOl$ zPOa?;)T|(Xr5!$J+%cgus=30iI^th16s;}~KtM}aERrDGyeO~=28uqDt=@{wZJ zwf_KhR^Fk}`1RI4?{<6q!S3y&44~oGdQZ!$k|PTMTEwq@3A^eA7UH=s9d80b=8Lsn z=CUOK1H%6R9#FYj(G`w*D<_w0uY3G?bh(Vx6pFwpRX=nvAdPkVzC3eXQ$*|BxL&PYV(ER@m4)bLr*5^i%Lm^z-l{i zbT@9>GqFSL!*0Y8{3MJq94DlEDl2<@u5x_Q%Uh{&nUtU6N>z`j9S0t|3-O#27s*x6 zNu4RacP~wG9w!86YK#4vnAZ01_J*8}ukx##Cp5g054iaqhNRrPHMGBIIc%_`^=%$w zXg+k`nsR0zh+*O4K|L`Z?6IBTD+>+B>)~p|QIcr1b=%PfR?UK3Qz`_?S(0MR?5VpB znf17qATFf;0Eu<@9$70qYf4W=6Hcsj-#zrB9XKvvqL&GfTt--Vl(PVS)Dw*eKF;IB z4mqe1RD((Aq?S@uN6SxPzBW>}Ev?G;7w|l6r;ThHwHQu@%lK? zz}5IvF@#Pkl>5~*boZH^Kg)~VRY>f7Pu0(As>Mu#l31ZNbR*`ekQ=XJ0PZc`Wl+oh{1v-fG4p!e|w-I*`THO}0l6?<9^tbbNT`nWl+@LsZ=;lBW!olMuuz zsp=X%hI&>J1p?P8aDF56_H$`St*L6F`VBSRQ+K$70M~QObB_Pt4j_=cB2|=^~aBdwZo=iw|#Z zDs8Yx6rJKi6nc$YccL#!xQ<%KBF&ifBT&^xM-t#r*fGIytWXjiBR^{ru0e2ZbO(2B zyANG;M8`f}b+Qta^!&);f4v_4lx(wXv1R%N%2+a`J3|V=IE0fFFehqA+s4G5?fb^( z$AcZ($`X<;93SG3pW*GOt9^HfkZl<|e)ID67k5r1coHQv=U8saDbZr8q-@#g!=qLWzVq6Kvx8gjwPZAqxIP_6Do zf$!tTgOt%puTrPVxG@1CzmIXQzj)K0QPoyKgG2-I7WETJoU=^X8z)tYe36qSlJkSQ zDQjU})fGnCGC(w6X|Vm{zz*|f%D7OsN${s{TE9x2w-a}hm)o0%2kl+y{uJ;YXKA8K zjn+p{@=IPCDrn=5dYH+)i$;xlIwF6^D<3iar0^h7L$2~_J{41l3|Km^ojj6w<{G}QYo#*0R*6-O7*f1->7tQp#iJ7Z`j$ars)iQ-gpmQ}2FR#+El2I0SY z{{XrVi*QG~*+{!~Tpk4N>*ybi1NX;2{#j`#Keb*7;~gaVd}_sT90LZ+wRm-Y3rA0d z)#X99fWU$jg%&oA7Bx!+344os2eX2kz1XyV^jw?(0BHaKV_`KH+3)518FH;YX(YDp(ucpw^5AtC_ipi_=G;>wmuCy6p^l=w|1 zAq!L1qSRANELF7@;!DeBZd)z7kfih;aH9;fGP<#NJ8rUtb#Wa8Y$A|3m!sH@1uU4x zMso4Vb2c3M)3`nCqwJrGkEC)n&9^qpG9gwxMlncJ0N1GAW6tx_O|irT+ka3X{a9##q4{Z{q9SPsDMBrnVPd zP^6Tx8u$xUM_k**&ELvjbuI1CUyP|0aJrJMNmY3%-{oqpV(2Y@^<4wnXDl zW}$`M<&cazq0jk2cBg+0f5Lg<0j;J*Ld0UO!%)3UW=e2&mqX?+z}#}ARpc6grk1fU z6{J@1`20Cjfvwg#&hLNnY#a zG>x>pzu^nqk>EJqk`5H)h%-kUrky9tofyh%m#~R{nqu_|Cd9ER04-4{)JGB4(JlSa zfw)|W%q|~eQzgdgN>a(Tw*;b~P2+Z`|M9Xqv^>wJzQd8m) z<5bO0JkhHwG9-XA06`#k9IJ~{X(}5=HB~22Bc`@Z=(aZi)gk%30iE*(HB-WJ-Rvm2s)t62BH3tPCuAdQ zAtPSkjvS@nM9~Y35NafpWL-$Ly`J7Y7fDNX8d^{VyWha^(7K^T0sghR_e0VCp1xSZ z=U6kwbcy4Qw{7`MH){%trz25t3a^jaBTzV7n`Q>xuMgaQG1$Nr6>$;M;0i%q1X_dWBnuPr7T9I%AdSGCo71j|$8Ac9|(- zmtYljK2Wi#s*_UkIlCVKNw%Dl^6b64CbXw%i9LUXW5)4s1Np1rOMryPNF4{KtkQ}+ zI0f7V$l|i?5C+X<6imNB9v{T=z2$hIiscnOh$M4GRb-~JtZUoA>#v6?G~g7O&ly7} z;&LRojZHRP$Erd3dWLx6cOyayxf_SJ+WdG!n`CyEfT>W0{{TpQ#~+Oi_iK6cJ1+tf zr57tT?KM{spR|uEpF_8o>BvBz& zHPm%KD^PBljixty*jPV2*p3)gmt1nh;tV=J<~w4ZtQe)9?IH$ijaUWl0T=r>@#1#| zHMplLn%JZN07gsD%JvbJ1jNca20?opc#brtd6OjS|n*6}_hb7aj|jXmL5k;0YD`NoD^^J=l?89IG+U4mU$@cUiUJ^ERM#}!UzKZXDSWZEYIw*+ zNi<=93k@yHrbS&)M#|yQOpPuF>Kh_gVbUZ|L7gy4fLwtW=1FGYwRp#yC**4hC8kaz$9!1B=3kploE2>?LDvj2y+`iJ(i_4E20v7D=$zX#0T!HbsFnvIrM zR8)jk+1A&|*2{}a%hKA>(!+*U&ehq?(#0PD{vGqbAo!bGTBw4Y5U;3^5Emae??2M_ ze_i}<^0&7CcD>X7SIs~qQ~$C3hyU1Iivd970RSLL|FKzR0YG~M0FbW#$HrI)0Jv`f zpl#+K@sRxO7Y8pdH?il>eSLkoVYb%Xe-rv&{68K38~o!u?!V{#SMF%#ZS5?*oxEuO zCe_;2$<^C~*3-?>+Lo5k`Sglv!OiyVoZj$Dr1iadh6gnWej6$J%_1ce1f7)2Sy z7zK_Jh!TgAhthyDfHH@2fbxKfib{scfhviriE4@Jg&K*Pg<6Z+k2;Tfg!&x~6O9Iq z4^0ux1kD9494#HK8m$j)9_<9}CpsQF6S^3>Cb|u}KYAj1DS8+B4EhoJPYiqv77R%Y zJq$QT7)B;WJ;n&eCdM5mCMG?mD5f?h3^Non6SEQXBjz6FBNhP`JC+=l8J0Iz0#*gq z0M;7T9X2*LGqyCg3APt@0(KSl5cW3qcN{_-ZX76%4bE$v9Go_sd7RI<=(tR{GPvfr z0l4Y7?{Q~vFY(avnDONBEb&6{a_~CwR`4G13GsRHHSwMC7(ju0LZp%AeUL5bi*u|#!5pNOuB35W%V4T$}SbBKG1 zcS#^5%p_0}Cz3>xW|C!+AJ3?s$vm@t7W1tB+5EF_q!gsmq_(68(gxBc(jR2BWC~=C zWXWXhWLxA&XX|40a6f7zP=x8EF{R8G{&W7}uH5nM9Zzm@=5gn7%QyFdH&Q zF}E|HvXHVsSpryUST1vZ1hvusO2jvCXoB*#+4h*mKxtIKUi2959YN zjyX2m2488#WXOs&jkSsqyr*;d(aa$<79 zas%=Zc_n#-{3ith1$~8Vg>6N8MSH~>#cL%&r9h7KiS_QpU5mpIS z8CJzo)m6<_-B)8*^HA$j2dk^7r>bviFlo4Gv}*#IP|Z}$EiD!;cdc%16m2c-9PMKr zUY#JFF?G|{>`v_^?NjZ~99}r2J6yu#VA-%6xH7x| z{>@R-vBL3>lc7_CGn%u7bEgY|i=)f1E48bi>zo^hTcq2ryO?{L`?ZIvN4Y1+^QC8p z7m=5n*OWJ_cZBzzkCac2&v#z~-}ip_elC7f{_OrS{wD#70cC+mf!2Y8L3BZ3L3_b6 z!9^jU5UY^E*9@=UzCH?73at#o2y+aZ4(AC^3BP}1_@?VE)!Wdw2N6mUHIX=x9+4|i z;!y?BNYSw9Pci&4Suwv6Hi(H>p4jx*r#S1liFn@l%=kYEb_t&ng%b0VP?B7dmXlv3 zSEk^n1f(3Ks;9QSqkV^Xcc1nuZ9H8dy&wZ4!#iU)Q!TS2i!m!H>nYnIdnrdYry-Xz zHzxO6o=x6-zI1+l0aZb4!H+^%;cAgmQCl%{ae4_#iBHLKsX^&jnMhexIeB?(`L7C> zirq?`%Hb;Es;X+r>ckpwjd#sity%4CoqSzKJy(5E14%<{BhcvGc-~~uwA`%PJosMZ zeSHg4OKvM+E20h5=HGVR?$Ey5Vcap-snR*vCEnHA&D~wmL)VkjOWd2-htc=8?@xa~ z|HFXWz~u+~4+n#<1~-O`h8Bmlhd+&|j(i+d932{y8SDQj`LSnQY`k+qWTJgiXtHfe zaH@4$aJu!A(5JQ;;hBzE(b=v!iMhV{7xNz$LN}2&5nFg$>D!ds#XD>}4ZA|Sy?gR|Q~SF68wb`07l)pQPe*T$v5(VF zXiln5`A&Pz6whYQP0x=m+%A4zMqc4x<$h-U-10^G%ha{e_0f&T&7a%2JF>fqdx87G z2d#(gug+h8enWgG`(F7d@;LUx@W;td-zU_k%wKH3x_+zv-u&bI=g*(d0FI1}tCcNa zGw^r5__G1L1;C)cfI%SeUj>GM!C){10{$x?NRWSlgoOMTBoq`>R1_5SzhL|qpnv&8 zP>_&N&{0uP|FQDl>E4*B@k?i04T5ZglvcFkt|BF0HhzrFD2@ap~~r z{vkc1yrQjrbZmL$_~h$17~Ic4AUXz-nU!5xRo&6q^>KV+b#49h?EL%V4}1Uw0Yi{b zQ6NYV6jW3Y3k-g!JxV$wf^c(D>$v_84wtiFMFP_^swW7{dos zQstg`zA0|DW)jfde=o=^uVF+q?URuiw5u{`j*FU_n3t7$1TUya0H9L#+!}9#*ns1W^ptHMl~4hWz#;fAEvW zxLBpBFb{C_K0pKi0qlm_h4lx!@JX~Jd)5TIz9mUt19uB1yyiTR%4>-m!ShR5*PG+= zT5R7Vn4`&wxr^gy54}*+A`NIpU2i3w28}y zQrvwjyk^*W(rQrL$q4+)!`+!t55V@oBX~U=i_3rEVR zuygy?^-0ar%w!`qaQ@m}*tFhUVSxNBj!u7Ovf2`oxr0&pngK`r zo@Tc_(S z(<=dsJJp=>Ve`7Gnrb+6s0IQbTS9IcE@o0yOh1oVD0M1^66aaB_Q{1(cH4=Ml02M{ z5t$v7B}GsY2M(%KhXp&mO-ik;0M}*W#%Wo`*>bK$*jG~$)(WnUg5KIm2o;vA4Kk$l zXWMf!lO7N51q@VyA}qysrU88FUs&n8;QjUUS(uKM57{6yv&fWoeJ`B9E%v06v;NnM zRMZO%hu`|TQ5Jr6)FuhdPJ-7}>iPmFCuj7JbrFX|jvSm#DflX(7s2|bWfjw#u z;GY??vY~h)I5dgsFgERnQs$tVD(J;6OX^cfjZnjkEF0T8X${=c&D>ZuscBFT9csa4 zA+0kONpkutQ<4Jv1*7F)*p!`C=4J!i<0*`0GD-Gj&v3#yZsv**t(jxtENtZJvU&BA`dYo@!xsIFLGDTn zHUqCqa@^rYU4FrBL_XIL)Jf9!=Bwv|3F1;(vG*J1-GX_&Dg;*c2Y5vt;OK7l7WMT2 zb%5ihV?S3~7=RZf+Vu_NBOS}-sbbHANhg|SAUw#wv%$SKoZoFY(EIwNyxr`r+;2v- z>t8*aD>WIZ=G4lXN{Y|&+!Sy>&^YYweOY2UPbNFcIx&VJz%{uZC~dW>3N zBRv3hA-60O#o+^6HLNKy)1>%HBCan01(XH?%y(P+<}geS-P?Rk*eVRoGO>ZClMPygeo=d+18AvYC4K?-e4?N9@tcryhzS zxe;+Y#cH8V+enM9a^SDnHY@ zl%?`%5O%I(Pzj>Fc~lRS5z)rJ;P=u<71UkP(Kgi9qBOS~gR`#c8Z2lq-jQVBl-MO1 zA7~XTDm00uR)IHs4VvPdhHh#?6({xzdO7Sl$J1%5jm)XyM&9vGDAtjF6=qj5j8(i{ z^#2~Gw;&PMs4IX=A#^q66xg^MxxmsVw3BIK*<1MFl)MmKdOk&l<7+X|=1<+Fbiy5R z+;JyFqaL*z=6K%dU84er7LFVh;1-w1n-Z_Tr@EPGI%YH~8|a&x{%yR1^Oj|V5K>a% z+Lrev38~6R-3bGB86q(rsxF8B(w`zSFHu#O@b|6)h)4Y_@9$%B$yY$o04(CXPeom-2!T-JQ0c&E=W~hW?g2PZPn(qf4no&`iZqwXw@10e9v$##Ax4%g z+qfJ#R)L=*PoL|n9?tir-q*S24hIgeM`Ey(ifA)$`FJ-HNvjw*yx(nO6aryq~D3%^dlbh9dXZ43Zg!Nzl&NnmD~y zES)L#T2 zc!$=OS)(7mVGekX*l{dkHK8y-ovGJ_uP7A%Fn;i>)fS zemd=pPomJ0CbX>g6odMQf?bdyUfEd?mFCEeqaAV%?m%NtuOXGfOB{x`-IK4hdHMAw z$gJNr_m~p9?7boR$uiYd+JfeR##_42;B>IkqPSiZ!HwazA?Zc3Xzl$aW|7fm&%;3IQfvA?5g@W#)3e7%KMd?1_q6lACG4Z==HL>pz^lslkzqY@lFzSGe}?| zJNuse4ED|Jd6cX3<5}GbOhYB55LVvhI6du$aTA&+9#-|Ev#L(P1MiiFOS?Iq*(T_9 zx48>E?I?Qv5L>S^(=umu>(Ivad{9Fja|%h|1;VEcHON(PHv+BXV) z{8lkkj@8OV#5~ZHFlmeG6Fv;|lsm6&r6|32NTN(-JP5-FoQ8^dMV7d}g?%F~JE&rm zzPl?#tz7#ebck5Le8srey1GT83^kxcZ(J}X^2@0cL>BZclb=&XdUqKel(tD$#)xx} z>$$ixr=FUA}42(Wp|0lOV~zWJ>f@Vb#ab9{-raueIgHHvXlG zTI$(Jc^k(L$KEOpP4w5hfEvY)O!P1JI|noB@XnyVHWFITf#nguh0RxkTaRZo7?%q$ zJCd7|Qp0#ZU1Jxoudmicuk_CkTP^`d;}FVwM63599`L>WM?u@}j$^ew1 zLt=BKCh3i7ENs>9PS-@=r!jE-!qwiz#c^O+A#$vBfbxF%g7)pVtB}oW!Ro`7fpf2Z zSJ3qMfq7v@L$JxHn15O|D`R$fD$lW*tQsLkemG;|xLXyYcQmsXKLLw^bA^)=H+0cM zaL4(eugQ+|ol58z0ICf6oaDEUT2P1H9M>9Eq#9v~Pv1q*qlH zCec+@uB|n%vBH`Y?Fgo9?B?H6pj`VtVzVA^)BCAIk=RfG z|0tIly?BHGOK&9xsa5@?P8wb7qAM$x(~+}@_FK75@!{z*2er_?4jLQAsmR{)3lpN6 zu#=Vh(%(*l@}zIIEcN+iB9=#>9C{x|{Z3-7Y8OW5*i&h8df3*{w4OHz1-5jSi6rFv z=|*cWMAv1mXQBvw*=fHyRz)U{r0*j7_SyORdw!t4K{wp8{0n5~@1%T9z!4ojy3GFi zc_OE}lVLm${jlHfw&PavTEhsDOU`F)eRDJLI>fihoxb#6x%bQa-H*=BKdVKr^gAjf zo})(=rwx~)W+9G<`{uwwLuOKvoDr?GeZ5`DICs(zB>+(a2;kGFj>F`l)> zM(h;2CX;B~>tOlv`Nyn4L5s<^cASP%PwnHDt=^N!YPah0t<4Kf@tVoBF|irm>|9nN zI8(mWw{xsa=uB|J#B~fiBuKP46bbvC*C(}w30l@@REK>m>!l+zF>P)2^XKB~amQrt zF&^fEDy=EDqYWjsALg4$&)^t6EmJ!@^!&1rVcEI~li?<4@|tKS*ZhxkQ$|v43}_~! z5{(4C72C!MA^hDb#9$l<7dns?R_Ak(ITOAso1766PCQuB*0<96nX)v|#4|JUZnCky$`pVEXHpS|O0vu&XxuMS@{}yXmZYD(Y^;86DycHi%w#n6l62e; zg~1Si`W1_=oHm!FAkCEi-aL6k0*|d$@KI9qplcJi(A&>LSsQ0il??~5Y+-4Bi6ld@ zwJW(uJHvB_N|?!%Wt-TrHtmD`>13fK#zd>=8#>MS74H=~y}9{gv+4A(S7l1>Zw60>!AIgR2unjrSh*6DQgYHA8-?De=yv?}DoN?-#z3 z)xE~Bqsmac$cZu2Cs7?x4Oqc5zq-0`ZNnv>@*3ZiojIq;Nj3^)=y-%z(eKn@^u*yH zy3$rpTWtz567wq0C`Y!~hfLa29AMA_!v_N4A>G+{VtnHVGQZus3@J89BIv zRcpT_oMAU6kA7nTWbJ0QhaA@xl)w89nWwK~h(;B$F&RhrAN39B4h*LRN+?Ll- z?djRq#2VQ`n&AZRuiJ0!j^U6$30T1ycVC&7<85uTZxX9 zog|&GZi#s_ zJ4U5zO;D;A^OCa3`8J<4wZp)G##tE>*1J1t&<3sxRhh3EutE=2mcR<27I05{iE~}H zKpQ=LO*(>-g^}8@oo-(`^-FiKZ1B1^CWF1|^z2%pdW0u?ot*Jq&{q~_>N;XBr8H6> zoO<8pN}t|vM>%gh*?KxUHU@Osu^UoS0@QYNf$H7nA84+_DpB$YMG`N9kvrv9xZTb| z+(bP%`MGR9)gO!E&?GEQBQ!cRSkn?#6L6#F-^(w~K7W^@J1yYs$@T|e{Nhn&@c1*X zLr0dNS?znHAyK6zpok)}M^xo+?Sd_xl2?MI1QwgYUmA^5q$w!5hy)?LQTdh)cGIqR zYghAC6RM*KM|oya5=b%#iz*^*;07k)`UEPG;_cjnwHF^44B0xIRT=l083}}}81N6> zi<@V>O3QfLoh*EIU*pU7-+(@NGRvN8P^9tXKE_%t8pBOq9VguD%OO z!7A*M)3~&MK+#?zq#F}_n@8CFz|A4E@}y#M=Zx;TSo_x4?^q}Dn2PIYof#ccr2(zOE3utl%*3pqyLafh00eVLv%LTd=B6pPrp zK0fX>f7G@bJjBIan^q6t7{s0|{zXF_03R?^R}XgfVcy(aF3uKMGe z!Lr897OEe@;0hAA=4Pz0M{=d`+LO8gYU_6isgVQU&Xp^xxUTU^(S6s$i8-vMjGB9D zc*k>`U7Yybf=Ek=Nd{XyB+MuaBNV-x28Vlc<8z&f{1hF-CL7mX@6lxJ8v6@!-E7a* z)o|C5R4B*J^Fkze@9%<&>?Kp;b!qH+ZkZpVSNbIpeha{QaMAspr+K|>CJ*y+2UYi- zt^WDZZF~QK=lX^IN8K|E!7ue)cL6m^I}=|>EFJTozE-c+zh;Mky=eTeX5e+xK5VW1 z-l+YO)vadJf{D#fU%R$Ehz{D@H7!nB$(KA$+;^YvSx%qVtuR(JG5(YiK1N*3sriR% zl;|9@KI71ywIZ{vJR-)`r9)I&VJS^!DhK*o%ArG8KMUoAiwq&$Dy5Nm6ALhcd+}_N z?6;s;S6PyBZB#*d8L;#7z2TA+)~VPdFNZXJl<3)R=Am@7ERi z3^Y#jk){>}1SPneA=(NYOMifh`uBDYw=bn+&K~Sc8_w#jhUtdb+|IKx>>G+k3j@~Q zQ;bn2bIwgk6fWV5b)|f>e>uRBd-O%*9ZA*=?LatEIJ%^+h!xh z<%i1cNHf!C=hU1{W0}0wjM@rY0%kAwJ;1Bl>DAMgm85R*l-`22h4+J>H@lV` z6}Ndd+UY09$4m24d28dKb-xnv?N1R!=9_xGTkV>c-Dj)H1JWXnNI&T-x8b`W%Z?2y zdzVb=1w(>a+`^~8uyG=CAX%K_jm&TCXWu>6s~a6lP-8JcJDRSN^sU6hGM4Qf689^` zJ#4?;v=z|IQ4%SbY6PJ8ob%{K-cRJ?kIVuSQyVHw!&yxQx4`7(3 z&bNG1M^+pKg6C>f;5?2HEbC-dvsc5}Cds{%iUp+cl$%enJ1o1zuinM=ZLf{(Ew+J6 z*%`g6>9e;JX5J5PNqXhHUSqR~X3Lb+72wf*)aT)P$_AXtQ=S%g}1X=5tDbJH}pW*&}qH7B2P;N4_#Xv zpn#T<7-(*r(Qmyycei1pb!NOI9>T6F9_3l(jpJJG#u(m*?q>7*9Y$)A8EZD~Bs8C! zNt*!oiF;g-Bv)$sE?i;4un&z~-(A!*)+LMdfQ1R}ZYA7QFmD)RZ&^7jXe+-m22 zqKG|z60zJN^)&VoqJ`VinA_W!i}9MBcdSz)BDTmVRX#QJVUN&&$}ln z+f`IPBE=x^Qs^gyak+9#Da>dRqi|#^yVX7MzH_G^KNuEw*3!l%2`(H|NLII(cV>I^ z!*_A*1*>~Y5%Ld8wL14huvVqL4%0rqlmH%rlG+bFySBZXq zYZxgGJyc>weov)e^N|Dh{DqFq#V4oAX)2j>A?QFP@5`uc6*?4w;h?;ig7Vj+uwC^9 z?4MRuNs3L46yw0e@}`;S?ERYE1PA`FkQ)#4uv8#h)A8-8wB_!9+ zdARLEDa<9((%E}l+{^4<91T%N(-BJ;?)CK9s%Aeo`lEzv^}R4o7g~GcLcWyb;22DB zB&PeqxpAY0JuUThvcHV`AcsCPchqWdsLw{BekAt{sIe3%82yp4@YI=eT^kXH8OPhZ!O6i=q&6)UvU zV4iP_N+CYJ6=kc_%1zK`n3KBcrVx{0a@B^ve|%OeshOu+u`mPa_qAzaf2P#8WmOPn*C=e$9*?y7z@zjy}%vFXl#6f9DXn_O|z zui84Cblg*8qM-X@HK<75f^p~{PkjMwk<#j~RA0XAH zC?#8zm5r{bCfz=bntgQ}JUazoMQ(Trw~jGR#kM+@?=XLVMxcX)MsBgMNIFBKf@n`{ zs^N%r+A`7w=DV{S##>$FDa_HGtLB8GO|kdEi^cbWKAw7$*R1~ z3*C#Ciq+32)pj}eZ7_?P4=J+BqZ_@BGlh)4E|80rRQpI}HFTtqUG8AOK$lElWaKKV zRkhG$4(8{2Xn*h5+)|0xx%MP(zws6!)izG)FS$!EFjhaoX5RhF!0M&TFbZbc1^bN| zMg?|_zuQN(WJ?|^RQn8lFzb#0TAbTjckjOt1B0)MXqF-Q z^&9awXx|{57>Y8>apM#+kE(0J6UleN_2m>II))tSv-6GeRVuN%kC0_ax*`H`NJ6~& zl)MVO-PYa5B1oCnxFFjQdLb(om#sHgB6BY<5=%7NcY|rCs5EEtG#(KNg-ZIV z>p7weE1GYH!mQb_i3QDxBNwOopCb%1E%l9^Vk~{Jgqsw$4R)PXbUSKc5mvk+FjPws z=U)!fHOGs)=q>`^8zreEWz|{uqROA_xxK<0il{*2{yDshIzijWOHN!hj3U1@Y^UB4 z3%DEPIxHdB9U?fZBwEIQD9>wgUz*0XI%$o=(kH@8IW-ZQWSK)?#ZB1uBa`Kr9%!KS zI*d{%*A3NA?9JBZIX9a?n| zwwIhoJRzz}hS?b|%$ehngeo0TB#W*WDUhy7rM8f>CUARA3M9kjLIakjL75a;n{#fgWt_b0r zs?+<6{`q>hG0VwSDR{+i%U9}#`skGi6+dI19iET*)}fGQ`FZ++mNo`m7fwgv7L%5U zgT(G!Hon`F*(|oh1r(Dfm0&JA3>BCoFZ*SyK0>ee#pJRszXS|R<=B@e1I%Y?!Js2E zzkU;zzm|lqr>XqyQGY4T3aIHYXFV=5BnAI1i}e;6)C-Dyu7ZYgybj z^vBx2BvXH9@?(4Y58&YRAkEC1O7Vj1yyg$U+`-1odwTY3k?5pgp}cuuqQT0W3)LA!`RIieP%Sgy~@ z4A%IeNY9611!PaklKOT-hPQrK%vh_n0{7GgG#UiT8Zo*tVD8d&# z?U5F5KT@E4YFdV09k!i`ggc-+jpulB3u`B!pYw7CsSBDI1WiR6vttU>&Z!ttjl>Ai z^n^&TdK{i(n#A4TlrXlui>I}m(_y`lI0&CtP{<;$!6>dsT4W+heQ8k0*W%%?e8>Q? z_5k&hzZ_?qk05hKI`Mp;n<G`f712NAl}X@k1zeAnSM4%|A}yyx zvP#QX73Ri)MYluinfqA~alRFDuA{ELpF= z9Ie&~i1eZAtptfR85eFZQxsWNOTGO}<4eKLPsu(3W7jAOE9bN?GxFh_jJf}nZ_=SP zErhRQAfc@<%~W-)g*4gld97BQaD=O?t_Pu5Ny@4;aJOQ{cVZflk#@#3a9krAh3v3R z*4XpXq)0v(5yQ!pu8IVZY;Meb*c72-B49G^ZZtkOVw0?*?73hLS;QjN(^mn9e(b=DskHq%0Ox( zeUnmOe&Uvu_gjA=CU`{PFrE=xJ(@yUBwPdO4U#kQv*X^R&GicXT&YaH)V)_ls{xT~ z)n6Y3nQa;_2&_8pNk=uNlMFRutVDu@$`jbv4n4J2Z4TGYZ0!hWlTgszJ)RF-d{gUa zt)n1rQx>_2-Vl&Jg9q!fOruZ!`wfpBXBy_IsFS)@5k*nh4Yl@yXdIGKdQ<(9YtTT!s~u;U z&2CFo7xOCbsZQY#)vf8uI#^2Ly`v6J5iMd7OglfHvG~kPn{7X6%rwU!zh12KjKgO| zCuo|%KZa#;2^E*t3k!s5zG<@T^3%>cmv{J+RLlIOvEg+>0>W|Hyr192e4qwa&EK-> z<*}r1U?uR~Ga8;!ZA0*BiHjhL1objSxe2`7&YJsqH(v4#Lg44TVXk4mI4*r!JaXYH zICl^%P&LJdjO-FJgU{r`fY9sF^Un_A^JFs7lZE58bRWgV_^e%7y1R+I3cA)lW6oHo z=b=ERI(?1%IcI(^-<&^(y{Wp~mD?`G!6I{zbAlK)8(+NBGj=fWVWwUtDJfghKx5!H zTkZ7^=KB*}P7g{=lF=InM!aSQPDfuIEb9r`c5?hmscpX6ua{_pY#-7#?x#g9rDDY( zGL#}A43P(dB5?}2WHtFjTg*j=yx~gChrS0GpT3~yX`gAdr$`7SdqNfbpb1IpiOh?_P zRIw^h?(YO}%o+Q>=PN`&QHL>uC5-qhtchYu6KuxUW9TdP`Z7JL2U>ZLO6}t~)pes5 zbr#eq<+fZo_0)V&o?*MM-mu>(DI(id#^TSiePIcpJmY?5iX*Oh$B)P#}2(+0R)znGRK~*NDPtZu!sq_@)aXm&t&rw*Re?!V{JzRg^Ceb}s&h#b0+S;90O}$f=hC|6`ihv@OA-Oi)d+im%|xEBoHcPV!UH()JocL)~*4 zXRCCta;6F&1z{2`Op>o_b(cTa2Ncz|4JYzs)yZavh35Y zml*zUZigjVxb8IJ6~=H9x@F+|=FfDmU$~O7O2Dq0_>D`qI19x2#*aCiIZHYG!@^#s zi%0ZmT23e?Yh-Gt>RkK*YSt=ijc>52yxg5*NlT2T0|?rw;YR365gXg>)-!a9*(NHQ zZ>X!jd+AtHf6UwlX+F(XANbo$Oj0wc1f6mcE8jW!Dvs_NUp3HtVR3dw(UdtofSTE} z9&N5fy=I%zYux`H4Db7BA8-52y-iV8n%&t#rJy09bd)}2%jCUVJT4=fq?H5q#q&a} znA}RsjEbcc8-It`H&IY>L(A0KRL*UaPta@{Kbm0U=zd2W?)E84rxf=BXAr;C%w<8U ziz@tdy})knOj^nCm&8MC1)iQA)>-I2+56`UF}^Dn3w?ByM*19~<&NCn)2}*RvMJ1W zO(PAysdK)Kkhv(tvF&_}PfCf0ooPs26^DPn3Hp#|IhU562j@o?@RWPAq^BzXTMw&g zzIKP_^SnUulyS7av_?dSjn2FLBoPEAE77jcY|(;wosKOV!{m~u)`4*>pR&VSz55Fx zDp1-w8@p9*w6zYSDM}J6t*6!59wUcxxuH`EBjQ;AEUD>f@+A~XP4U9O9mF58851>2 zuV5?4&+ddG^39c&CeWo6V%0jeHZa9!lZ;5jWp~;B$Q8nsM`YZ_jVzVg<@vV`B0!$C(oT6p&JV6~Yw3VMr& zq6JCQV~wE=y`|3TAKv@y)%d5zGCzwVY}Ay_g;&{9&=)?a z78>{CW!aw{8kt)7HPi5sBbE^?$;rtd3>3fl>_|JikZ+g^5&qPblC5;s(~L|t_MHFZ zwWX>Xt!t5tvBQoJgBmbe^XfxSuFqM<-~&g_1PM@El2po7D8PV z%w#`hSlPIIFgve1W_A%J$(bPWB0A=iA%~NPoY#ofXFVFyYH%Ct>7PWs#YQ zbe<0cB(w-g0i#iqGA~39Hlk1a2Oly+iZ6wKqt!6?lgD#U9%tIxB{Us-vCP8|6 z0VF%9Ti58Abw9ySFWYJ(+Q!NZ)3r6=zdTIc&vX+=H_@PW|z61)cAmC?3eBcb-9>-+3?M|x1rK4_EbFXqbB3l2a@Fz zQ$LR*DA=Yoe*K2dMlYpK3|!Mze#Dr*u2T`url|7MwLXMd{ln z>CX{Z`=ArhPflh_k&|gwte0>l$<7m;1E;@FWY=Bpb&563v`Lp^x( z@NRt)G5hWFW0;xnrl{O>ZP|Q$@sT?}KISV{@O^RF5UjFt7@xJgRME-`F;4!*)mz`W z{7wJdVA?YhTlrMENariAWUN9)oKR#>!wRmW;U+{({Q4zDyJMomSC5etsjIX-ue9Kf z>>+Up)y6Q8WwEFoBMs)p=aU@y0`|Ll7?_8-N4PdbuY6Xm#9dnXi-n-rclYsCB@Cz1 zBpGqX)^gcMG50&X@@`=xHnA#3>f=8^flvjMudY?E@olua8+@ETI@@ZZ?z7A7B%t}D zD|KgMOeF;=7Z%UWIxtugM$tr&1&1@eYNf>|KqvX8GwtmcaxZWByo!bUm7z0{Cw%hL zLG?7X5#PEX?`7C%F4H-p95>juG1B1Bn_qoCsWYQR;m*i4hqki&+Eplhv51z&viiA5 zi|c3i7iUoiDpw}y}(3|`co8%wKWqXgCF%ljC z|Ap2UWji`cOd1qPcZ`W1!;?zdc%7ZIA49=jl+_-St*`5z|6;4jJD*ti1Ms31=-yUz zy;j_=VNc=|hw(X{oO6=u*AShy?;n?`&?lcSMk)2KI$$wSOasrl#Q&~%Qs?5W3Gs(=AIbk6KcsnU4;A( z0RKM#z#B|q39HZG4^G6od>5Um%?|xAK0NVON=vRm1PE3Dug(F>L3Ts9PPY7dVA2sOvT? zoA)_Q7@bDv7w>Cn%OdUO#3e*gc4NDFb@(OL#;@ro1N!>VO`QD*X3V!sQHXSkw+zjc z)fM!Q1`&uvks5q5jM%|S?p-CAUvPOHG`_bt;-;^{i0?tdWb~Q=X1$%dnN_O7heEJE z-IWf8rn94XMJ+VRj(?o&z9*iS0L3VyOgSh@>@qHrB}5=v;I^b`ZsgJXmeiD#fJ{f1 zTvUB~mt5Jbhfq*QNQtB#YV{$HX8|`+G1;Z3%y~9=>9BlD320zd^Y<-Rl3E#7XnDLynm^aCPdQstLNe5Zk86H;WD z>G2_t;f5;O*kqbNIoe3u%Vv$D4iv|7!9X_9gbgi7AQOP$R+&lFOI%`Ylno9qG&44m zv*GmY()o5JN0`$h8y_8npKk^r;}p`tic3_@QBMO?Q_#;(OFVxx2Ix|=%SN}J^0Kq2 z_E>iKao{Gawua9~Jq)Y$Iht{NH8HFUrPxkVrG}|j6t5I<%4c$|cZDw@ETgd+UtYtE zKGW-jGEfXjDv|7pILjAef>(4Fp@bz6C(d|zQIn(e4}oFPB4$3V^!knBK#%3sMepo4 z9$+%WTG#PBD0?G$W?i{xdj6t^c3bb4S)=@($b-`(-e8)KU+GKJK3|k3Y3tTV!DWUEkaOr3oyJQ${HzANz>l=vqa`Q@mF{!EV?dNAMKVtY_|VMw+Vs03Uv&z`~CV z!}?)@J1|5*^>SH>uoe|+IO*OT%Y$ei=AXu?{I!#{Mx|mOj5n=n-+F?VDB(!jk1r0I zT?qdGk1Csu9pcRo^hf!p@v98J+obz{N)PjI$URF-+H&a9mn|?V1`~7Ak`q z{{VrQtfO$gqW2uw&NF3+3laV(`PKgbBWgGwZ6xuZ#{U4-6;w|->LiqEfRZUNIymib zW$8~f`TW^O`>c8=@T-1O+xkB9Nz51Vfb~Pvtjh*f!n&uKX>p8Hm8M^pro$qVP%q`H zqzms5GzY)a&lP589{FC;_*T2SQT!s5t?JX(?NsJWQ>j_bNH&|V^Eu&8-Xb!io=R`Y z@jAcs#;Z2`5W;OtzYShs}!+ytMzh=%yQ>{y4w#i$fefzS*^eK8>Npj zPvc4qAJrZO6rrTVvHUC>0+qCMweXK^1imtvr5y{enx2*n)(CMZ1IB5nMxV5shyPky#-AsV!)WBB^DH>d7*gs546A*wd@ZY zJFR|_6osL2#48g-7q>gRbO}OTw_ij`XtCqjKdd=>JK}VC4+NPo?wi%q#fev8^aYi6 z$}LumWD>NX5&&=j1KuLy>D1C0B`=s)MC>#ab)==j5_Jv-r`tv!80+6rsxas1{%64O zJnfY8bWlXI%Sl&=Vi=Vs6BnIHEBwCONCER4h8r0By}i=sm#k_k!99C8Qnb6J5CE=q z-9G6jsoLnJg>hb)^#ZbznsI_M!1TY&VWkxGxP=`pb6)%6-c~1fDxk3ho0m6m?W*`G zJv$6j%?4e=V!hPa)Bga&_Y3JqQ;u`4qkQL#*3wBiIPG0KPc-vSB(ixFlOpYDTVUPh zi$wSLi8e61&J_E469GL{W!jRj7Rnd$UR>(78zmW`!vJc^x~M4VX_g~C12!P1 zDO-vlb#hcpZQk z*;c@w-Otm(=Cpyrn$k#$cd5x8M8(RqxJ_KukRl@)-USU3`=LUJ#f8Pjy}R+Da*mp) zZCw@4m!cg*#ZjKVfGL7PVnH-eKy(B2sJHVw`$rjF+i|jL-O;8VrKV5mg=AFO-nS0Q z^)gY!<|!UY=N$~cu4XQV(9 zV@1BuO5iY#RFmFTWwTh0$C^!|ZzV|^Fr_VAmV^_wpQw5`W3egQzmGPok_I&Jy(W?P z{{T_?MUyivPEN+EYDQzhWsVw}c&TdYHcL7zsHRBbWYt|xjpMHvMoOioLU8k~s`w>P zO$xM~CP8AzZ)@A&d@sxY03}GPesI+2`dXi7%iFi><;G6f#=LJ8Ngl7`I2T7?p{mAc zYH?_@1y{*Hw1P6?efC;sPf&|`AH`G#O^G2+lvNJ6ZZj43&O3Gu9Ky(vRuXm$FkkI34vJrB=~78FTY8SZMRceDMZTWF$67@^ zvq2Ce2~&;`O#tJt>r^8na%Nbek8%dOMdfNa$*6MOIm% zs4}cFJ;TvP+ly^Ke-*CXtpxRasI$CRc^!3KIObxf#JZ80u(+as2iQ1=P)2r`hgBFYvbs)ZC_w!hkbMZ(9-4 z;n|ld#UWLCoEk+%ZAoRR@E=&>r&%dVJgK0tb$QfIrC}9M>E?ICH@wf7C~qWe7BLIL z%w9(aL<9mzzlMj77J?bpdTEmPjykEcC(+f#(%j8eMTpCX8Z0I$A;fEAs0|LFc8t{gyg|gVAkl*bX7@nVKsvZ&2sLD=X~b4+XC?H!Tc6*x;s-UgJF`6@%8kyjuF~?7OsT1X;Uo<}1Lqu4X+)9CFw!A{(*4fk&CTGv8 zmMPFU?WJWOKp{-8hv1kD*uElhq9UP!Ng|SHno$$WQy%zj5s;`N*4zl)U^v3AhkJ@~ zilhY~kZ=^2=wDNF0?^aq&xp;7<*MpoJ2hn_5#oO{D?9wWn}}a3HIY~qC5^SyP8_Q> zDO!@D9#rFGs$*p@o2__scy!p7F5k$o%qmZpsNJ{O#&uw!Q_V%V{PDLtjSEB-J67qx~x4oT)k?VQUSf-0>s#t`b6E4U@K; z)hX0AbkGNm^p^t9^;DV57sV@RE2u-%OqBH!*LkLyJlL)$&`E3DvXV}M#Bz+@t*}xA z&l9$rLupu*Di032I=_T>PCX}7bn7rvbz?E&RCwMim|&G9si}hwd8uZBqgf%2XtahF ziNo$7u9vwt;qFhGp{;3rgr-DB+wr#pci8)AN9l_{htTQRGn!Mzgt zX?!}KrEn*y6TutqlCG}jaszS%win^@Y*`=^CVJ^7dZC3oQ+hx2-%35)uSqZbyq2m@ z<1a1zy^fE0uXoF;`221?CHiU1rv%Cw!izO!9GgWo9w$t>4yK0>tNHehx}D7LiA7MQ z85n($dx64d(cN6BE#M#@k4-6UI?xI0rMKW!>0i=cPr5Oj@vF8w(3}zlRjQ%P2_Fl+4CIhZ1@{X{0Gc;!Re^<8u~9 z9cjU`PEw$Q0mN|3zXQ(|6j4#pDXWs9mT3ZnK!0~pyGwT9Q#Vo*d_qJ3kv@2uGqQ6_ za84weAXwH?pEzb(xacEV+B_{9rbUuis6>&%;RJi-arVxZTeq-xvN!G!%Rx&zWXDg! zom1FG!f+H_vaSUxoWm_lHF!6bkK#)lRdGn7W%EE+rI4r%5j%ph{{RWpo*6o=NdYE& zKQ1Dw(#Tb9AL*`0syz$jSsbYn^s5IBMS%YRk_c36_@b~ucd>jnHryX4-OwvHh0{=H3>TSY1@mPWE7*y znG5^8>6)g$G1B^a#In8tB(%8pH=jS1;qpqWAuucqArLIS?c5Qx>EBIwmf*GdUluT| zeJYKGceBzeZc^#)XP475K{=lk%Lt8IP|E-{A3l=_T1lN$1tQzGTTKscJ{?Eo z)aV##`PE#Iun%2z)2t$+2kACyi!@s{RVG-K>ROs(T(v}0qux1_?Sd>twD9f5nF(^p zsW=GZ!y2JhAXI#UDX{*5W{TRKh#|tDky)LfjLjA#zFy~DK;3JR&t9@klB28RT6B`I zD8FKP>WdP@pB|SSt$b4ssWnq!^)DpPEoDZ?-^zWY8|*>}xl~Xt-NAcS>PiB12}=(Z{ZKccXr!>iUnA;OY$qDMOdB zOmhJ<&ki;s#c>Qiri*P1q1G@ATimRy9aS8V02%-dzO!+c6iy;yM;du92#POo=lotg z9*Yga=8H7Y<>seqx#x~_j;fky)TB!S`LbM=P)3^QEJ5Oe#Sk=N%Jrot%eYLBidI(8gYqj=6bd#p&d62MR3gpcs05I)#=kDmQc0752Ck4wd}aju z>0>4rma$q|D#XVh49eJ>e6!P3NlvAVNwCKANHr{bc$0lVJVvM1Bxwa*Kcy*gfTEP3 zaN)+GHdK~}7Nx7ATt6`3_-xPREW4poLhjyCorcjQk&s*yYu@^f`tPI}2Agqd8e<--z8N(_;MFws?#YDV)L3*zHK?SLC{i{}p`>ky z36PD)T}wtPO^*NhraQ>m=@zZr`D&oa(LL{3K zf+Z5cD27O-o88{aWw;80=f4(Zd5cgRxKfgF0tATsX~h!~AfGz2EF%=4Tq2rES7yW3 zF&Z?Z%V8WU0+|C?sUpW)aD2t$R)nZ*#B^XfeCV-gAep92!`9B3;Pka7ryauL@(HIW z<{>+3ywL%PuHXg^!$L<9+~?M)DnMA(kGEu1lF`7Olw5sS=l=jh`R1ZrSFO0aXV~(d z7$uJk%d&5m{SIkY&hsO1Ti$Oh4F=$NL3f*3hf3U8CrA*UkWU&~+Eu4YKkT%7M2`_I0p)a%E1hC*x z!3K3nJ4VO{ZWs_THFp|9(IrB7Y{#acdawLOx^LBtql@K^km7Z9Pm~i6#3HH0VE$QF zYa^9TAweBLNePl@T%oc8H7G`eqs}*tx6(sok%1BbRN*7nr>dxxC7=$~bsRdq1ruLU zeOAN$O!cO>tG!>QsIH~OQUT@DxWeUv3JPB?mL*3^G<5SaJMPheHn#~Enm+2wi&u!@ zfEfI}DV=&qk+4vAHgM=p5R{mPGlNNuw)Z&5O8Mu(s-&k)lfxYF!i#89RwNtU^g4h! zx9^tbltDUr<8H{q4`)qP`+#CT6e@HJ5Bw|o!@T`W{CiAje=C2d@y(Zc|}M2;1Sw%c6T{WcW&{ zR!^|1wBwpY6=UQ-3PpNz>nEk&hIJzY>h4?g@zY!}vi>P9E-}m^rxvBfaQsw0>ROO% zs_FugV~~R5$Tsq^4z$OoH0u58!pkujJi&P<|*bCRW+t7hbqD{SdujW z@Hd!dw@#}|O469%2$}OIXH{KJAtn+ggFH&1v&LSIACbc9>7H2WaN0apj-L>w5Yw_2 z+Vs9*Q{{uD$7}Z2gorl{I#e7~@x;?!m_+f@ zx1CoRf68i}co~1*^-GQQ zik@j=jbqx8%L}KL!q&Q6u9w#QG_%Yz7LZULI(UP#-%PD(DwDROWnPSQ#z--2gO;%T zdn7@K;d4=~G`rrK?owIIRqUe5ByfP0xv{X})xP*R(^_3ZR+Vjo5GSITE$Uv{aijEg zMTcYx+@FU{4kt&C(tNv9Nm6|0iKJKE=17VYY=j-eTnigqjxD<1i&rg{*g}#_LEEs- zHFdB`fd*)+V*dbz&r~b3#Z4Xz@@11xFnl8rlXf9Ph*HzQW|mU)QIC~jw&7=GVlF_w zhSs~((QIlUn8a)&+qSfp*BHeNJu~zJj%B)hol05qZ#KW@)>*eZbraoJMxRew}+wre?$D%9tW zx8#YjDo7%z!&({e!y5et za8=StAE)C_0+M9mL_0b*RLMER3&wCsk5lqJJy*@FjYCm@m%>F$C(FxAF*2b$SyUH0 zZ=pBPR?t(ekbElhoM|eO2{A^?q1{O7CJUIcy!)22^&V=<`L-GyI{)NP676f|~4isaVAzss39} zQ!Pb7h9oMco@OYQdln#E_Ey&XWxID2Le2=Cw7oZJYgcvrSVutUp#K0PWiGAZu-Df> z_-$m^(-dqbN!D2C=8|ak*Hp?LIGv(Fv6L$hc-#@#%H{i2l%@}#PgQLVq{09W6$p%Q z_+##+R#3t^x0vX$2{6i4g9gbnMTXMJD@#j+Pb3pb^J1CDy{jPA!zzslw;Ol3Y=JnO zOmOq3nznUlBql(^%cP!x*I02*sAlXdD$vx>(BrdHVJ}S-lha5l>#Nn3-q1R-MoSr0 zUDOgZ1Yes?qia!;B+rnf!S>|Hg^t@HFG9@Xe9bSmQhTseoFPYO6Vtb#)8D7e z{{Ylnzn$c4v0G6=mME~*dc1CmtSv;e#zl%+G37@bks}Sm%lBLpt-<4W>1`-Vzlfck zRD$9GPJ`D!(FcVbiVwtp)H?K{t066XR5)b>4;2$iifXDU*%Ql+oGUpBq{V-T_N{3C8hkX`)AkXHd-@WJwIOib(9G zf`&RS`-WgHEymky+&D^=;_0H*I;h)0hHC14K25I}-f4oPFJuXzdL6aM^HkDFMDe9M zOH2qQn3BPRfI-}J?5!4^@b1ucFWuLTCt8;qYEDNO1!Z0#h-Dl?n-I!5=B_D2Q%JQ` zdsd%t@~^xPF7|VBsz?faLOaHufE-EGje}(4#z3-OBc8o!<)wM> z>0b|YsE>Ur)k_7Vkk}&GSxx*2)bTrv=v2lNAXea&M*&Xw-A)%kk1izg2E(YMq&1Pn zEq!f8M(-|Y>p!(T@!f$to$4kGHBieYK@1>61(tKU)qZMA+U;f*5l4 z7lIlnXNsOlaN9#8M?B#fRLdBJT1{B8-EINYuQn^C%Z1<@(zhPIlqC|YT^rA(_$Ovz5lb#xBQ0SmFL4|B(tCGy)GBlV}7eQ+@(iWstI zQ?c0a#5rFV7={OxVWt>$Dy3aCP*uR87Nc!%oL!CGVoUpg>2b92gsob&6p*>|rOdol z)m(8}+z%eYYN_$P)p%7^=Bb+#D>T6QWkfK;`bkQ?_WuB?Mfjv#IFk_sbPstowYsgC z8RJa2MMg#$Hxs9)m2ez00H4dDcq(b&rG^PYypX(G9fXX;-JMmu$M|tTeMF{2tK<8s ziFhOst+a=)#-A0fR>_QM+LNu7^cANm)Wr`>@~&Khq3FgTRM>`NN?71{ z#J?(DN0hY6#TGdTWhA!Isb}(oZ0aT^1{HmHQ-?$|o@}Gccy&&FGv^GYj^Qg)fn(T> zRB=^7PO~g;Pc={k!qSv1s#LHxH@@yA%@{(Ed%P45APTG70i`A(>O%;dsx##JO8Kx{ zPI8f9^!3W6H+;~BNj%qJlB*Zm9aICUUBnI-BQ98DTu)6hhYuPMGUrn8EK-uDJPNj2 zm~i!4YKpj-DWIONjwO;<rLSYe1@XZ~9s@d3~Pz8@}Z7Nb^?V6&eWg?-?Ik%^|rxeFCP{nE~ z@EW>$IyI^>;dpG+Z0%9=^!2qU#+hMgFY@6B(ryP08z?CoG3fc#!bliXZEiu&86&Bu z9LsB%@oXaz#NxzZ!m1vb>uO$SVJ%haVNmFj$Tt+&2y=0|7a8NWFNfRT;A<5bf(r7CIROT zntM)^#^04NL6vYmlJqe$*rLG)Q&t+YL4;+>s;GWqXzdKO%9w#z+E9-p-Qsg%EqmzW zj;;6g6&(caJUXd>fjIG?zpb4V8Q%qbZkHaZqRdzuu%md}%BH0gOC(}Q=7}Q#>ZJ+# zFyuxH7Ss{N*?wl0$V!tSjCl3z>J{f6X##ZZNVAAF(D^_|Kt0_z^D`GWM8pNZTc9Jx2FYLS6 zUs3=d@p-mWZW7?|ffyfT(jM(eP$}9y(L&Q=nJ=d;NsecT(i?iaAp;nHj zj5@i6l18(u#0AB{xz~h5Jn12`s16(jIJNhRA@6l^#xnG{u1&4O@tjJwEIT$twDfe- zG+2C<6)3J=MW?F)?7*yQuH$N;YXNI*x5^$&BpBn+Iw_`izYH4$R}H6*PDT z6SAVJndqdf%nqwvRf*zNCTM4}4X?5S;gy=>YL>Q_K3YrQsa$3N!T{OoY1LeXz#~jk zej$%_ZzN)rm}gCDXU(`?IaU^_BB-TljPW`JnmNlyJPp{2S6a@$Rt zOAB4JWr|EGLj#ZL9W>O*#9>Kl%=Ty~Ai5y(4rqCdjC{7-DbW=ch zjG9ArLl(`#u8$z&6j;Ahx`CXYVI3_@beL`n9QcvCiRx)&keI-Wd}3Bnw(f193$2)G zN4!A@LOAUvImWEF0+ZxvMbmzqi{s((yk4J7)F)J~vu=N7|p z$_eW$@N9ODYPuXcrm5>EN+Gr>UDQ|0(EiV0>+W~UjFJXWT8>sca>q2Oj|3l%IF7GvJ(O@|pn z3Vao+V}x~9ys0ZPWvt_vv0S%{WZXWguA&NrioT3BRs-Z#P36-qLqZV5<7jpW5!S>J zZYe2ow1p+Z9A|DF9W}I)J!!8O%e_RFYV5l<50-H}JWJgQ}b06`>SSIE18)i zSlQ!Ne%e_;ARDFjK?Idd`cq{(MioC5T&F{s7J`o(rF=Uaqo-_opAx5%G^WBSkCEh2 z;w$8+aMBAbOL9piuGi;~wW$XVCL^TvRe%^!dy}$;NzECcbsCE{O_;D;p<7o^L6l`L zU0k$~Mtp^fb-dCJ&_slWQ+7HVu5oKiUD-qu1goEwT14SNPHpOz2HB=8XAG~zC~*X? zXfccp@d@M-QsISEpPPsX(WG@g>}ph7!rGd#XrS2y1BM1VYf8roGW{6pc3sFBZvc}q zR8-gh09mQ#nx7P^jW^Q0D;ZQaTs~!%Dma8{WUzL3CEHMJTFZVIHDu$7@Fd0q ztIoV+(5aPR>hG!ytrZSr$aBq+DVSoaYU<^lin6LnSxdn^!>}yt?(ZXN-0ODX_0C8b zhgeCI7y*U?j2QqKIFs(B&r0ht%D??)*3e`+icBvNgBz`CD)yG1qH2rN#8kV8 z(gl%1NDbLm%m#)5`vA&&j zH0F%W4K_QR^T?==1IzR>M+OrX6-^p71ob$vkIkJ?x3`z(d+drVRkT}aW8d6DNeN6z z{V6(t9drz0-DO-`rMOlphEU@eUME+B*BY9gi(N+*ZETwiu+>B!D5==SHZ_acm~IS7 z;^bwax6Y_31bjL=X&Z@@`5$MU1X+uzUZ601EM+XpwKO%=by41qu9YLHsg97eD1xWW z4A9171!D`i?)R<;JUh3tvm~t%vux~|(i|vI(;(89`pZYvIq_UWs2Oh%#;`0hG{q{V zslu$Yz6`T0)KxWU<&d!e9Bq?r_h?4mA_z9*1ULaWece4Cbn9BwpcKA5Ni@0t05SNM z8`FFf1jvm+)4ZF6?8Gq%stJZE@oMUUQ1MCT2VkK}I-pI5Ku7=ri8-rf<&~XEI1Zo$ zQM+nRf~`OS!-;{3p0lu0i>{RTUVdzPw*$mzuo^6hM-pL@EP_&Ig;HeP@4Bu}4LI8tK}^v>B|Bh_FNmde@ps`I8PTR}xxO(k+*I6L{vK~E(}JBg9d zz3v#LuV6T_yxUu$L`o1MVC_6=u3M=MlA*>qA3c-|RP@iPImVJ~uMQ6lH278_Q4Dx| zvi!w;E9{P79RC25A=`D7>PRdB8&3~S<+DT*t)OGmNR*-unrh1#lP~0MrnFe*5;HgQ zFE0*~8Zi)}SEOMauM0S}N;kad$4ilY4Z?>QQ_M z%(ab$%~K!EVRW()^H^;KRBQ6_)EHxp*s%rPHVjVVwA=y+5pL2`vT!rjN1ZRy(#FZ8 zws4=RIa8-k)9##BNs3L3(V1RaIyJ%S300UZJEk6E+!D^nftPZY?hiK8EV}o2u^90) z`U)*|DN~1NpgNwmZnHsKU)1bsew@XSu-TH1IvQyN^Z7LLJ9*N8sLg1K0tsLMQf_a- z2w+=4Wjgg7aoOcmN&qo5tn~9;h#s8Fm@)b_&ofk0#873xXtWl>L5BibSj7t>8tDp{;-dl|wu)_4Vqam2Aw9uo) z7!=W2{Is={cx%IJD+Hk-Lj@hU^No3FB*>--bA=8mf>7YNm3;WJW#x*Zm401fpr;{s zOwQs(W@ph$Z15Jpei`>95bLS+ zf_9H>JY@d>!!y(@*zI0n%-NeGU{n?L2CPzvYw;@9WtQ;AB}s-56tB8$4TZoW;@Wcg zl8^#S^z5fmk-B!MQ#VpS29B$Bt_bk_=hU37mFbS@VwVPvwz_57017b6PA+=0M|icfms$!tK;-S3Q$!c+tCuh30GBu5=9?F%LKjArEnrR}AY~$1nOEFIiGe~gYxLjpl>%+fE0;}6nbfZ^k<}$)fAW%6f;+5 zPb!|KZ{_P-S3M;%1%euxWhJC#1488Maz*ZWUghFtOD2rke$|oSYyrIuwy+l<5IvSWFhhCBGpWKTvgKA~CrT0zR@x{1 zLiD?W;9X(Has2twEXkI##x9X!SgiCkRrBFAaZWypBlWUR~-@?nzJ5QmA%4olZe=3<TK6XPv+qeVKnr(EkB;}7O#c~eCb5-HOLo|HDXzxb%x^GQk1$iB4q8IgRD|@w`Qey zmU{3$+5@xCri`17;F>~Qq+lxTE4y0- zt>$i_(i<9QkFQ70sztgK0aS`E`SUd9KTmlB1I6DRXzOtNTCSfBpvBdVal>F!B`rNt zQ!rZ>Dq2Aq1%Ue^(eCQs+y5)xAnX52oOzlNV z=Q~l*L}|n|6?Bm_NFu3eUTMuhNvxol$OWuI*a5?(<%&ybLuPc(9D2H>Q)ME0C|aRh z$ARK>x!(_~tH&s+(ypQ$7ZZ6Xs4D|5*=M9mn9waeY>DPMSkYF%ZewO62t(kYfCz~r z5;}}=r^0lJsQ5o!dcl}8YGM6Mqokw4prn@?nx+&J;j|Rd(-SpBPzEAEYy?-e+fHqH zO|xywM-pSK`TXg7=}2dw*Ovh{xm>m@dEqw6LUieZ?PIl`(s zTrLP)Vi=s$Op-wFPftChsERRjaJz28{yY|0F4br(DF+NmI1g_MO6#sVxHzA}rDUG2 zRP=i&SLLkOaYlf8sOM8rqFiy9#n|< zu{4h9)<(>|Ud1tGsY=XWF=eJ|xvDE_pUUzn;*i5b0UqlYxISYrTMYpRhBr4Uwg?6^ zoIhH14XI}eTY7z>o2K~cbe)^> zQoLsoL5x*cjx*DoDzZE(T*-w{Vycw*i^v`sDk_JYQ58KkG-Sp}m5{WIs_Z@6mC(@| zTYW=N1dW{$#(q^qtR`oTAu+taNrmBQCi%@>d_>Cxk$Ey8N!d^^C$J0MbZ>`l8n*VW zl;?&d8k3bVXz1}+A)Z&Hr>Aw5-T)eHi(=ssiiS4u-LGr$r&B5Erj8YE{{VvBPIt_` z8OJdk$wvit1BhY^RSq*vEW2hBz@A++aLB68@dfvp2|(8yt`8&p`AszJap?Kbt0fE2 zaKN3kawp63RnfyeEOoNhL>qjPhK)>5sAxfL8E<2KKK>G==7{K{qSC93xjt-4I6s=i z^brWf?iJo!T$hz2A%Q3I@aDC&F`CpsryM^f;51Z*N}NJ@S`&4r*cJih{{XCo91C~l zL#T@IHO;zrfys!orA#nJAQL%OX_DV*m&lHo4RW+nihcEQDvk}C1;WRZ-Qe6a+R3UHCeKIw! z4fG>HuN2$muDWqf9?DGX=^G6Qm`6;q{t~hI$wx&kF*04-bo-jb?qWebyiX6>%dHv% zRC=01w_Q>2%{tZMS$7ABNi2}mSle~?*#7{81Sj$wQubwR!f+t@Q%JORXCHkgdWY7E z44;O#K8R+KWS00yzWi39hqtdg}E7?C?Y zDI1oK>C~egR9~@2kCg{qWa`F!$}v(=W6dv8BaNb~tdkHhEYwu^gQSqn z4Ma&c-z}q(6ap<(ZW7l#S8ZyApAdmhrI>OK-@=1Fw0fb;*zQNeGnY@~!n$pX&iJMi zSg_L{Ik8CU4Oh)p%NTS;P!%GG!W@(K!E5n-wTpf3g<=5N)zwYCJ>;n~KrTPgtQW09 z92+XuQR2ON%ysf4xMfOI;g}X5M)E9^#>zK~Oo_A*bPDI*W&|8Fm@3c`q@L^zxDrh- z7Ot&9w2WeWhvC;xco(FPPaP)8?0TDx(`Wvr;tqu*oXt^|V5yD3wJjj>O+Zh?Be$6WHy}$*@Oj0S>cCOJlVgMo|r)JYVJrhBecB{?ZQ_XmVc2mrC z^I{z@!~E%DuiJz>;WRaB&{IPYc8!c~rP)Q7MYZk2Ry(U!f>wYvn8O@nX*5dW)SxFC z5iwkOFz$z8*;^N)#wKj!Ad*mG5KXjBvXCp8oksS1sL^j_umapAOJv>mNh-4jKShLOtRDu%a|RWLR$vr7le(^28DB}9`&B=Cu2c8kmsI38b_YY+jm zENEpUtx5txCm1B*9eD8Qr%@!y+GsG%RQV?_dVUxlOpdbvgB`4!8IEjDb((qBifHKS z=pm}2C=nFB+2kZL`$*x-Mb+KvatsK7FcXZyoef5{5*>5o8SSBro=UjI! z;F8qSNsH1{;neZZjMdZ7A(>K*Jh+00gkk*2q_T?=Mx4FU(3K}b6nGigk58XfF0r&r zi-o8r1dWFt1EUkRc2XA+&RA|6nW*!cVpzT*gU=F6QHJ2+S`12y5M(h*Vl&2R-+L0y zBWo7DtzbcbWT~=<0PrUeesxQg=mZ5!;$s0mRm&}P8z{$^t8+(CmleNlsimnpfWnaZ z+M6+Sr!K*TV3@T&X25e)4>T2!0UW0dcJjjnkwlSiF$O@^VzxHz!y8p1>B6O;q^E)D z`O<_fK_KELk$A^YC;4b8=OUuI1$XnBJJmOw=1sCp#^haz;hHURCxuZ;17%^49(wh1 z^${fyjY}P$rU-k5@xRghIezO-%4DWZJ>;&cXAGN9jo!d%-b?JOp$cJw-T_1!8v69W$3wb2d_?qmvKJKhE$4fhZ}k{{TJ; zDClVrn5RVBV|LK(2HG2s6BBC6T_hC2+dE|Nru(R*)@Z@Ht&C3ihAV*Lm>oSUd46?8 z6yDPQLowMHm#%Kaap#PH~iUISQApIP<|$Ka8Ce;3s|~>weZmRsZZ!Dtxy$F42?iH>e0Ib;U21&wjI{9(g(rRob6{@b9rda8Zl}LQ_ zY3JMSt&-cVrM;tz##?I2B&2vm$?EB(#rGCtrmFt{)sORzr1cty8pUg9E3gis(AP~Z zE*U|IQeqL}&pJ@iJzLi!NJLLj3L_ZNe9|mJvEW&|bcYMX0<(!CKo~~Dj?S7$`%fv| zYVwaSl_wW7)#LRP-4y61B~4qAdPhM=SBXu8$rU~oMP4e6EmRb#6pt<=vTrswD&F*^ zPrbC?%R$9%2qfXwID4rAn#kcOvt>Rx8t45+R8RtTQy0C3AQbxe&&Ct1V7C)D(HQr8L_ZcLtt z`Oq`bwaT3~%d>T-uT}ItSjO|UE%1Dy^PXKyrDu5>rxKZ@h@y!UFP5gkNz&Xmy$iWe zV%!uZJ5?Ux>BgI3ZItS9N|cBZ@R`7TIw&@z&bj{pt~l;BjN{7`aA0v5C&QyfY`cfy zty0oMNH#J=kj7ZLSRKS(#FN8QYR#HblyTU2lha9(q^U(jojn|AcF8%{qh)EZ96tub ztMU~EHu`#DLmZfmbwxcRONe4MbuP%U%H-_>X4OG(3tW)(?Yrm4sOp}W8*mZOD8RpB zv#6ke1VTRtg1iOY1*8G zmFOaxkr{`Sl7xG24X8g0B}rSV0U%?tJ@9&c)pFPhfOtuyUR~;EOsAl)!L#-n@L&`` zwh>vmhAR#r%Oby*G+?NJvw5u^#sJuBrwkWr_)t@7lf-cS^`sq1#GE#CRvg2hI!%|^ z+bvN^4k3zVs!Az7a+FqxF`7A;?_*L6IFSivu>#}`Hj7!SOO?j6fKfYQMNn!;G}(l8 z6Ef0e><tfAcF- zdJIJ|=ANWxs_b2+=zSUA}SGD^dDQ?vXOaz4aRXf!- z2uZ<17^!t#RH(wLR|?71by#jh!`3=z0jeot{FG)*j`_v{y52ky7WFK%IF zM05&V)>Cx9;g32qy#@RSC(3z>4A0e!(}3d8;nFP0MS)Y)DQVN}pO~E$Yzp=fo(C^? z*f@OV z$CRhUDHl9SE*+n^`)TDVDIaLA;jhdS(2Tc%W!j2-HbwFhhIpb(JjZ>>x)xHKeYe-! z;l+0LH!k7<$BsW5s;^V9ig2O9zpGUMX8N2Dr&ZOcW{#Q79A0EGGQwV&7_Q5DVTt-f#TVBCNc{TcXrZ1I$PcE#rF9MU=^4= zYKyw)6Hb&FQ!VA3JISSvnJFl&LK!!*>ObPw)cXn7hKOC2xB^GS(qe~P*eeZ3P;ja! zq>}`RE2YD%S&$S`pxD^>5p8ZiXA{4jq#xPiRz;^xGt_3x@rZPd#OQJ7 zu}CJINo*WxLx$vP3VPS9FD-0!2J)dBk?brz?G3c?zYgqj=fTvfVdvT#De{jhK-X%3 zp-J8mtb2W%_TY)TbfjV^vDZqD6*@dNikVL2GZeAV+qcoLEVmMo6;!lIrt0j?K}L`A zEc1jV50s>ZJ{zyZ?&b(ZKATc#KF_(Tzcpi3y*x@9=rY9Ec$&8{Q`8z^9YeBh!_gvT zo6K;;-EIKy?BONuY?7Qd8eYw>b^_#2MFM!nKax6iot}p=QNuPPh0qF*ovMmeh*85U z%8V7P`? zgB8Q`tsV=BJd$H32=JULk_>!-B-Pb8bQAo{QO4zbvgL%J-@b<#TH9e|dSXOjwrSgo zbuLmOn&|plo^#Jd@Jyjrv~-x(POqepz7yptUpIlYr=_$`ANVRZcI5HBLR%3UQghO^=0P(!LnwVj@E8JE6N9 zY8$u5v!C1Kq{3Q})^VoBMCTQWrDjh50EFdDL6Wg7k()Z31_?urfhx&_&@_SOfCX8n z^W8fR%B1PyIFWnk6zFrinCUfSZt~~E;Pz9mPX7SmJXsqnQKc4Q>P>!W!Rc%%-vojj zB6DWm#E@rq02Uib9m&5bb-pTIC~OJo#+`2=Z3L3(#|%Gxdl3HsgyVWssG^e(Z1bEy zm9UmVyC|fr6>_(_%PK|!#x4se8vA(Dd-HS^A+*TztuG>GaCFC&cY%MxcDfgpY35oE zre{j3XQEi4St6l?>cyCbDIo4`VPWmKFjy|3}&Wp9n?UZ4P`(~~7YBphl+2mb&G>huSP zW?Avvey28Pid_>CB_rD8QyjhZ_T{zRo-KGJO z3H7BW2l#RN49kHb!#aDDXeFe7Fc>iSt0hvTgjQ*mTd2N-e@_#f;`v5Y>bEG^2O9fvBes#jez%gp_$yI$Z=lNP7IdW5#SX4 zg7kl+8CHTSY^i|d{H=wy*<$jjsbYntB|{ccg^3$)uD2KBcP?CW6)ex0rGmwT5HyN* z#OvuEALUe$#Y+K0`dVcuj1B$Jv9fKkI$!D>WQ;MV98)cfU=FHJ=3G-PJv>puD?HfY zLbX(Kr87$*ByIAYpLo;)r2S)#C5>1CNL{;UhBW6MPR)4DBsBDLRpqLCjnK^T!p1h$ zK}L>E2mDAL8C&GH4x9!ZdnppGV`V?(eu2_KGu2{s7=?BtEQV!h=6YB~+U0z>$OhUQ zk$E?0Fd2=}88Iv2zS&yZ4a#dmR zU=>vIQ;NEfs#>y&cq$`y+6o8vSwj#Gyh`q9+Es=mRnp#(2aQ6;y33fcV?7f_Xs9QV zgmc7)SYS}h5;M4xPsaYv5Zqlj;)yCTTJK{7ifq8}UZLW3&m^8!5r51{q$OP~Itb(aEbXcSF74jh-%oA%qF_yX zOw?-Z=Y&u|$vlxPkg49F?f{Jjr^5PsI9mQ;r}(0jHp+S^FU|d8&28ec9Zx0t2m1Gc3Nj|pGQ4{F4xsfLGt#6oQDWGB9aAI5wJ_4{mufHy zOp!CL+xxc!-@njS>+d)vMz!AIg*aijZ&8{(n+^*>Jx{#TzWE~vPwAY7WdPh;Tie;M z3l@c|0&0nMbXz)woX%V8g+)hDQxDH{SftH^Vl=d-d`BOv!)aH|qm3}XFUl~lo~<(O z_twkrTyXK0JHI&erGvraR}ttbPoCiE_AS!9M+(NNt1{0|DX^-EDx|1dtTB!dmSl-k zw04GQV{MmFwMbGf7;zJ?X;>-RPBdQff|d$nZ54dM);^kL?z2gP^v?%_GUlvyww|VX z94mHOr>mx@20St_)b!)brWFYT$Rdiz-f&jTcxR#4+ABB>m}AMLH&+E@p%dxGr*yxm zl~u6jsB@UiIj^ac<`l(oj8_Jvqg=)?rbL+G)Y9$Tw6L`)EbQU^>nhoeonfQ}!cG8e zCk}dP>sEp_3B<-76=PIbrZ0yx)Z&#Cm~_V4eeunFKcnonpRL%w9{rehQor;iny@)d`byr zV2LGCQ^=y*Hpj3r8h9Q#pmfr8S^^NmL?9qAZGpM%#1**mly~ z)JY7M`aGrb)~O7d1?z#~Nxq&=qb$xBz$Y<+A+L_?pcx92MKrine>U)mlSo6tAIEvD*f^bw*9Zyv$YAGR( zf;j1#q1R+_f|renA&dLXa4qhz(_MLP?9&U)PzQubsI@r0Cy3OFN$L`6l`R~IuBy%m zW91}bPqHuHPHZ9$G===pak45#8`IqPi`UL+m*;S~9ZY^>v~=lq_kfb+O|C8mx8a4h zT;tzpq=DDhjF{`CZXeND%&2h*Kbc27MArFC(JITKR8Mxy03GfR4{Wj^47rHtrkyZ$ z%`5Pnkw=FFr=*6Sogo(5z&xVfA=>2L*YB^71jx2&0uYb|F{p}rg9DdktlXA?e z)<5AO+<-)N7HoGpFjs|0PONMr$xCG%Z&XUFM+rD(t@sUZ>6Lrl!lywZR_ zMB8;+eS9x^-S-ARzO3O9;ZzYp+w`|G9A;`f3Vc3>2_f3j&MK0pb9S?x$#uTGX&Ftz zx`h|cllKZ<_5ue*E$-Vul4%#3^UeH=aR=ZJ3*1=RYfUJxWn=0VdBZwym9YveM;4Ae z>hMe{R+gM%6*1K!vs0OrxPUKaVIwG8>TTVSwdva)l7D?Z;uMq;l>r|PuDUBdW9i~! zIl~X?eqF@VDs_W3$kdOD&r>Z}s9Ywhnn{`pWe7Zyi5yPU;gqN#xkbMgx0yNJl(-Cg z%=uT9e3djdV}?C{I_I3DtIV}{%jRri3Yq~=T{O6Qtwl}?iN}k8FltQ960b2- z!-e_r&rL{Xe=!m-FKBSv0*2gAU|7szEfBTLnSsRmd1GE` z;0GWGJ#=#*>P8!i30i`NqCe&F$2*Y6EhGs z`&PHJh6uKSiLHgWp(I5#QDk`YRLJ;64PIn-R)oBSwKa($T~hG9h3rTpPiGV`#lzJQazP&TS$TLr^s-U*H}T46!(%e z7DXi3=q+!L3|e4=fB;iVc_2j1NP>YOgho&~+)AkXHrK@d&MXPSk`pzZa>i`MsIi=6;xpD|$1>8x1$Au&63rrz&ownX z(Z?%WPtqy3hc=ZFvyE8P#DN)pC;NKU9fL%G~0+E%C=W8>f*-`k1wSmq{E^{Y)W!xkglrBauA~;ki*{B;janq zFG5TwXH68na!v^L)BX*UXT>O1u3F~AlA; zTT-!6r9NGwtjiP=EHvUu>WPDS?I4k*Ne`BuUaH#=kPWVF^zp9!6>rQGhz5{dLBrtw zvJADw5?(*{|0D#c0^ zJaD-y<^awmxCTsJ+o%_UND3Gdouj6WEp3nhOFE`FpN%VebC+v+v61l%)6><148%HV zlySf0`G%VilCi0%CxWi3DQBlXP&D+!%v#b0aqg30xTAf?ZJlWfOzI=qw3E?>%rNz* za{}TT2`Lax1Z_Pu5BhPg$Q3;;j~eOrC}HX5R)z{eLz^(g2OWGqCazifU?j z-JTd45ikIiQFc3(+*`UHNqkAw{5a_c2$7B>9vIPbP^BRts!|N~`B2+I_@w#~!tpAY zu`I{)Z-qp{7o?)8nv$|$Rikug7Gi~uxcpkBbol!2NoK;UWzly)5 z>{3LkgA<`=k&JQ3w5E_oY2W=FqzhqY1ch7N5^td8PV8nQ?nNj=sEkc3un$~)E6*5? z9RyjM4;6TuG_6NMqNQV19&35pU0hsTfHnNsUP}8w>OrT{@^~5%GM`eZ^F@3#I8AA% ztgm-iX#AzV+GMwx9aGB)i31T#y5dqHJ8CLn&rv6zF?VTA-3i=F z3-0z4sNu>GkN^W^7cEMYjZLSa5QZM?(Z)rDw?6*>dz0)xmlTXCvyDoQ7H@VnF`^#g z$~QN#>*2B?p&FHvX`RR014YsWDzWik1+EX zu|O1VZ2&h0-qFOWQkHtDQb0{WYWJF=YH{98hV;_)E(Le7gr;@ z6QJ#GC`(#!rWWq3Yn3(|EHnAjJf387S&I_8wHDt@r!^E|j-AuHf6 zt|Ok8<)w;el?Le$d0?xXcqO`XWKt#N+*F1yYa;gsM#^i=k6RHLV5GELS@K%(L_@>Nw;#}vrY zMs`9($8N%c?BoJ&LA|&ga_J|A+AlW}WK;Y-QlqTHBBn^?T1tP?d6GLTi6K=-DPX3= zn_9tkgQ4%n)^!T9-YZU+r5t&~6u@W|VU*7GF9Z?FN1Gf_RqsO~3|a1^4`2Wj+*^r& zN>z!iG=(UU&?z;P6Fqf9G2(b8J-;l=MNY3!MKP$uDyeH_mMAD?s;Q=UnrGUwSroKj z?zkZFmu_1LQdFQIPTxKF`TAnH@8YyX|O39GI?v(!kFg7l?-fkQjQj+QxPTvwzpmqU?IN&iD#N$dr^x%+W z3?iiCQ)OI@(gml?7=fm#p{$22W_tX7o|2ljx-32jYAPsErj9n8Q?!wJtiEi8lt%9M zW5;Z*L(jHaOeIpFF^n)ecudR;BW@J+vJ)vvOit27#Q@kYDVVdyR)Z{K80KTa@)lyP zsFCwt8w%6qjBf|7MOMN5s1}jrEll!BChZd89FRdlEz%Oz!q$)!tOy%O_RM1u@U2{0 zC_bX4N_LOJgFd3!he5xpd} zYSO*maZ=-Qwx$f-JliGPglNaENg_|5R?17MYVd*SL<*l2rrWY5GdmHyYy>Xf8F~d^nwU`mi+cTu_IUy4mUv4|QCWwAp%&bYGaB zJU)^Xl}T0xS<1N}Sa&>O%$1jZ@K3E=I_C-(^53fe09Tnq4UO=8=Uokdn9i`!r5!9$ z$j*=NR8Jhwx7-%;!0{H>jg8vN_@aGJ<4aq;c^_$yN>gS30K^;BtXR5cyy?_T*VGKf z6iAIkwa~U2Vu?JZ3kS<4(Ppu}r0c2XhV0l!*ggLMjX12<;F(gV(0&wS`d9eR^)mv? ziA|fZTsJ#N%b@p^)0JEMSGR`|JGzP2;4nI<#k}?r;uz4e(~rgf02k^7 zVp0D9RO)F}Kwmklk)t4uhxBVkTEP5u=fAT^Y--gt;hd>vA}G}K->z6jbfQZ`Q5{1@ zjDJMY#db^CT&f?36PrSlwgp_=r1{W=Lsy65aU{56JgZ;^{Zs+|waD=03?`~1)S$8| z-e%b`DAd?%uZM0>s+KlR>U~ zk!nReQ<>)y84P~)n#8MFirYhAYPn2$rMdDlH<)|U;-kI+K@>EZt=M0;8vvU zsVgK~T1PwOKch?gn?{}%*Fk>V^g*o};aN2_33p{76roT+I~%^xF2$EqrkvT?UKHI` zj8e5sYH#lCQMG`PmDa~gSOM(Uji}R!CYrH_rmCiDsSxrfV(_RV8%eEIw z9UV3ww8+ys%2^?h%`{{vR@~$FgL|OgPzd6LIRY25okg)$%FCInvRzgIgBfwEdDj?@ zo_b7251y8qq~Ub3l`T-xN)>(mwotmg_U=5OaUnz{J32-aP9Z5ugqR+66FhatKVf+{ z7+I=*M=oKo94;I}A1aAzDKU8Fl6uq(Rbw(z#v%zLZVXGU*r7f~P=wr|7%C!mP9q?*%6^jFiK9|jT9>TK6RE?LTS*o7_?J#JylzV;zeh*io1)6uV! z7*dr1oG2~kZy`j>wz+xWyOXJS?VTy;fwFwZ4i!|q)Ez&p(z~eLZq8VaVWFbV)3$Za zZ53q>F_x(-Fx6TK@p`B#6+vNllrTf4kc5HVYrP9QROpDm?)O@bd^-Kbw)~w zN%A9QmM}cAU@TXQShg=a-X%aJfsgUvc0m{px8p~55U8Y)BUv!Tf@tGkmuQ}vGkvV!6;MYL=I^&|nOe@2 zKmblBu6FI)L@2yPu$(~Z+wZFWPMl(p#wg(Vc`8~#zs;A*ASkd3?4SaDm*o4RDUB4m zr^_(m_$+mwCr1NE5|Zr{HEbWS1+88xSl^o{AmLsL9BEDb&!I5T?vowGjw4$ltA@hlsMudy25O{JW801Cc>e$gzMUQ4 z6?>`{3!3txMN*V_T~=$7skX;GT1!S_9hJmzGlEDL05`y%I$3fyflX>h3K24=QaT|| zG!o*yAg8E~8}EEZqZgZdI_=!CrXc`QeT07=HQYTDuiPr#<6qJD(Dl>5QJnywUpk+s zct${uCkpb>VTkNJy-lhr@s{u-xZ-u&ynl*)e@b~Tx6u?ibfee5q>Pl2tgTUlQKH-l zjvjA&jj04ab2o>N=fc~I3x#l{O+MF654m6QD)fs!85<^LQBkX{C<@Yz_9^-(&>sLV zw@wv1V{o0RG+>9@JZb9$_0`i{fw0A}Ty}bf7#^Brr`* zmNFqI%@DeVQkD!2{50aUHfCuniySMeELR3rXO6a%B9Rn(oCdhKJ9n@)xH=9hNHmp4 zrl-YQMLi=&30lczTdKzQK`3BY8+N_)<@Qx;fb$?E+)~sVIZc4J=I#%-+3y}|wkw41 zBv37*X^c9ban(aJTEu|b9dG$^gu$x;P32x<^${#_!R3IZ-(;8HayFe!t_VC~Mx7L$ z%o(ofwVBoy>GMDf;*yzqu;~CepAIbF%+gq3@|l*s9aJmG0kMeKcQ+@B7ndbMaG!Nq%$>Cf zNyptoRzk?xHvq}FeoDr$m}AB8q>T*oOlQPawPRS!=AlN%C6tvzxkuU{-0;0t$!=vc zJy=yz!)+%@lO$tJ-A2uCk+4BokmQ#Wsi&GWsG_A5wRwiNWpPf?q5`z;;f{q%Yj1Su zIGx*Iq9FlChYxKkQo?{C0QG*91ohL_{M|au6c1g5=4`Kp;t;?iqorRWxv9!MB&Mxp zQXW~V19@tZc8uw5cwcdqEz-1z)xvfI`cY-Y*|)d_QU^f&Xq5gSy>;r&8`K(Zv*r57 zz_3itB~uk_H139Y0;N}$r2ugAUd)jyqk^DrUJUnNFKKLdZU9uCJwG_}qC1Bhd1S`Z zMb2MUxraF6l41DVhaao?%4)}x5vi!eDE?xde5EqeNPY6dMs3$3*0$aYRg*T^3QA)L zrq!!t#SIw;G~|4fOD|J14D~fsa>q?kgj8X*6?E9Vk_FvMQ%;NmZJJk*%n;t_0)o5O zf!ns7boWURahU+&&}(V#i-`n~IG&mmv!_!sSE^j!jP-MuQXijO zJun!Ks(Dw-AeH#Z+p8V4qsaBW9vwui!>c61s3~QqV;j#yRUR8vQH02iCML9)Vu@Mm z)_1eVwnF1^AOZqgu;cA&5`2iCEO5i4Wflg&LB@#9Rxb?lBh?CDHX>#OMZQqLTx;l4_L1Cb|-C#8*w>RCI*iflcW{kA~`K&&YNuik8V#Fl#?84RrMX>z@9@=wV z*{y2Eq*V1HpU4zThv6|#9A$mfDEofajNJ|m9e_@-o)pUv{|D$2UrP{fuuhDk_ZZ*zS({{Zs#V+4Wd zDYJOz5>Kr@Vg9}SK;W??xoWcr$@|9ElLo@5sj9Rj2Qsv7ZZzzE9B=tk1f5cSYk!}6 zgbHk}_4Df5T6Ts`qGt$JzU0RaD^Uz~E7@X+fE|I-+_Ex@G5)qI%FHff?=;6#>Z7kX zoUznmdD}JDvM-vU@mj`aAY6^UZ;h;OZN(|Dw;#Ygl$_nXe~8lKr=GNWlLYBQk3|M~ z7f@%$rK-fHCA?&6iiT0N_>NIodvSmR&{K)LSo^W{q5lA;zle4l)09@hx>eJ9tYjo? zaT=QXT1WGDF)~|tHw622@!|)v{ zB>4D=5iBV;i7WBGq2+8!UE0#% z(!L=%b-lt_K{q1TKGDQqlDJXup!*_}ckQR{B73gfYuoa_6bzc-LmF*Y?M@WK7vo3KoJy!RV*X2(FzLx!c?;rIEUK0pT?Hrr zw}z+c<7>&T2Fz;0`L8NXXK%*8(hge2C~0YiH<@OvA!n(<>0%VIBiOjTYr^D{WA1=- z`^m1dtDvkC5!be!Iio2U$?~Yueky%8>O7yzx;;p>^fTC2R_0pBurW=!8bdTFqDdKc zix4ag#-QuK?bWmB#c7W$Nu*EapdSdDNnqcL&H+b{K2)rO4f#USd6=vSd%nmEWL+dc$OW8R?^~l zl+8tr;@E8*h#H`YDV|#@l#Qffhs)Ya5I0_?*;g(ZL=(%!A_89kZs*v@y)PAUD z49h+rpXes3te7)0S1fW$5}~)#)l#%eVH-w37H!_!cI1t_*?VlZG##BD`Sqed%M=V~ zxnhkb5l*gR6g6^yrkz#%u^Bf~&dhG!HrHQg1?|D7B9)j1Vb7GfB?U$$7A7z{HvU^k z@qmQ+YgYBf~=M+y}2PPI`%g;3$R43ptCxJDy4mseX? zQ8wBzBUmGg%493$n5?Gyl1T)f5jB;9qNNXKPfa8`lzM7MOuCUrSD0gI>FNa4{%FJL z-b-$%bY_ZAD{$JfmGK?yE#b{wSd9_wtCWypjCZFj&46Z_OdCDO$%0~71{*z1ZAE*> zB$b%F)jm>H)mGM2BZ=jY%vFv%ouJ$(UIeo?`JAz!utcHn)K9#R)Xo5nQ0Ji66g`$*9^C zs(S-1y`K(P*1)XEJkqg=z>*Tc?l%`=FQNAH(^}h7Qn6xDF(uKC)?n8fHNgN|w>=f8 zijf^sNX5P3Ba)wwBR`(lpeLXjiL^RFbuuYpV+| z1gZgHrR;m#l{gA;8pjQ0AtZ!H8$=}5!0Jkl_CH3Jw;EI&YkX^}n!HU-o=EAzUwM^7 z$Q$>78;+*_-ZubKg;m0awgio*sl5A}v#DY3f%vYNolt=PM}*B1VaF3kG|s(&P^x z9eDgxVAnY7OKn+~d^)Hpq4tsNxb_ZiFs)5yrmm1NjS*R3A&>wEyZ2k_=HOPfV@?oM z)IdOph9Ja1F&ao^c$;~1y^iL&Ex4Op_U**?3wQn% z!UrvYnH93ot}iteC2Q2AvB_Liqi-dS&_%Z?I(D(Q5WL2r6vmOVmUuR7!Rs(Y6>CpP z4J3Q#c*4b3A(4P)1&?*Mp5Lp4u39KB3b05UDsBzx<3HrAB7C!xs!kJ!EK(?N1X4V+ zd!)3Hg*O2EzgX?ZRg@vp3xaC>;S`d@y;F6+GvW~nTxzQfj#@b|*<`1@Ff|2CCJMNU z4|Ms-?lHEbzqgB;$?Z}6BDeX4f=unCgt&%ec-A~ldW=`)&AiFks+blx0e6x}`uJ!W zKo|(E;&#+HXlrTeMQcRMPfSHbhDITnJB13P*{+_>Swu$K-V;;vy>ns|0;ZGBs-~x! znPP$e07{l{#J#+358uQ#$O%`@n~|_nbWs^Z7>+24xRh~86fu))Mjy?J;CO-!_X2&q zeM^G^n@Ix-pOJE|Z_K#Zs>?9ViRRg4K^7B7X`Wx08y3iI*sYWjK8_~2T6E*Hro6RL zqUj!Q>Q6v0d~+{#X9=dr6xl+j4aTczvmO&sQHa-0vpn$9(A37z`CfV4g!!RDmO7m{ z627-;;b~GyB*+kb=gOTLRGFgth*wKGnx{!(RBe%)g3OaxvD zm{Z~L#8{h>Sz<&s)E(q;)8VZ|)5Lu_#}^McidEq8f?M=UT#r zIHn*|Dy&dqi6aCNk+M*BFe*VTL)ae@H0OnA#da|ig>G&OlW@A~Z=eL*maRk@%SDQh zEbV5NPy&WvONAY~3m*=9ZFp3qtum_xW)dg>`{6-B+<<-@(TdP9T!lepEca`RoyOoW z&{%s1D>UG&xOHtLOc*LhD}wvjGp^I1AddWQws5StzAHv!UBJs>=9d>xNYlgv^&U|` znzBd+lNiP@(L^d4oQ7ii!i#Mn1qX!}Nl-O%sTfmanDrwvPe_U?LXjgf`{Q2%evTHY zB+^n2+QB|MJxZ^f!UmXa2KN0;xlIPCBv+usZpJAHWNYsP2L$Q}w|?CAgEi?pYE*cg zJS?a-uatnSXf0v|fYZ0t&0|(3oMOzB)U=R^sbH*;4)9*@Vh_3q4P$%uJlYm% zlTIZ#V@gaft-V>Sz$)^_KZ{L>;MnYtHEdNc^KrPME%MG9UF?p#&Z@wX-uy~(_CkV! KYuJsOEC1PMiFXJ9 literal 0 HcmV?d00001 diff --git a/interface/resources/qml/hifi/commerce/wallet/images/10.jpg b/interface/resources/qml/hifi/commerce/wallet/images/10.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1f6fc1de274d646d7884e78cb5da9b90adafe470 GIT binary patch literal 37168 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眴ZQ%2bo7Ej%JIYH=@)B5dxy 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 literal 0 HcmV?d00001 diff --git a/interface/resources/qml/hifi/commerce/wallet/images/11.jpg b/interface/resources/qml/hifi/commerce/wallet/images/11.jpg new file mode 100644 index 0000000000000000000000000000000000000000..37c3b937a5a9cb8d299e5a2aa9d87579accfc218 GIT binary patch literal 28512 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 literal 0 HcmV?d00001 diff --git a/interface/resources/qml/hifi/commerce/wallet/images/13.jpg b/interface/resources/qml/hifi/commerce/wallet/images/13.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3ae86be465c22c8066bbd8655ed8bf51bfb45523 GIT binary patch literal 29695 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