From a9fd6e2d4e709dd5c497c832a245f3f245eabe83 Mon Sep 17 00:00:00 2001 From: ArcadeFever Date: Sat, 10 Oct 2020 19:13:34 -0700 Subject: [PATCH 001/152] Updated instructions for building Oculus Quest with latest Android Studio, including additional troubleshooting tips. --- BUILD_ANDROID.md | 37 ++++++++++++++++++++++++++++--------- 1 file changed, 28 insertions(+), 9 deletions(-) diff --git a/BUILD_ANDROID.md b/BUILD_ANDROID.md index 0bea3e5a90..32f8242523 100644 --- a/BUILD_ANDROID.md +++ b/BUILD_ANDROID.md @@ -1,6 +1,6 @@ # Build Android -*Last Updated on December 21, 2019* +*Last Updated on October 9, 2020* Please read the [general build guide](BUILD.md) for information on building other platforms. Only Android specific instructions are found in this file. **Note that these instructions apply to building for Oculus Quest.** @@ -14,7 +14,7 @@ Please install the dependencies for your OS using the [Windows](BUILD_WIN.md), [ ### Android Studio -Download the [Android Studio](https://developer.android.com/studio/index.html) installer and run it. Once installed, at the welcome screen, click _Configure_ in the lower right corner and select _SDK Manager_. +Download the [Android Studio](https://developer.android.com/studio/index.html) installer and run it. Once installed, click _File_ then _Settings_, expand _Appearance & Behavior_ then expand _System Settings_ and select _Android SDK_. From the _SDK Platforms_ tab, select API levels 26 and 28. @@ -27,14 +27,16 @@ From the _SDK Tools_ tab, select the following * Android SDK Tools * NDK (even if you have the NDK installed separately) -Still in the _SDK Tools_ tab, click _Show Package Details_. Select CMake 3.6.4. Do this even if you have a separate CMake installation. +Still in the _SDK Tools_ tab, check off _Show Package Details_ at the bottom. Select CMake 3.6.4. Do this even if you have a separate CMake installation. Also, make sure the NDK installed version is 18 (or higher). -Also, make sure the NDK installed version is 18 (or higher). +Now go back to _File_ then _Project Structure_ then under _Project_ set the Android Gradel Plugin Version to `3.2.1` and Gradel Version to `4.10.1`. + +If Android Studio pops open the "Plugin Update Recommeded" dialog, do not click update, just click X on the top right to close. Later versions of the gradel plugin have known issues with cz.malohlava. ## Environment ### Create a keystore in Android Studio -Follow the directions [here](https://developer.android.com/studio/publish/app-signing#generate-key) to create a keystore file. You can save it anywhere (preferably not in the `hifi` folder). +Follow the directions [here](https://developer.android.com/studio/publish/app-signing#generate-key) to create a keystore file. You can save it anywhere (preferably not in the `project-athena` folder). ### Set up machine specific Gradle properties @@ -62,7 +64,11 @@ Add these lines to `gradle.properties` SUPPRESS_INTERFACE SUPPRESS_FRAME_PLAYER -The above code to suppress modules is not necessary, but will speed up the build process. + +#### The Frame Player for both Android Phone and Oculus Quest is optional, so if you encounter problems with these during your build, you can skip them by adding these lines to `gradle.properties` + + SUPPRESS_FRAME_PLAYER + SUPPRESS_QUEST_FRAME_PLAYER ### Clone the repository @@ -74,12 +80,17 @@ The above code to suppress modules is not necessary, but will speed up the build * Open Android Studio * Choose _Open an existing Android Studio project_ -* Navigate to the `hifi` repository and choose the `android` folder and select _OK_ +* Navigate to the `project-athena` repository you cloned and choose the `android` folder and select _OK_ * Wait for Gradle to sync (this should take around 20 minutes the first time) -* From the _Build_ menu select _Make Project_ +* If a dialog pops open saying "Plugin Update Recommeded" dialog, do not click update, just click X on the top right to close. +* In the _Projet_ window click on the project you wish to build (i.e. "questInterface") then click _Build_ in the top menu and choose _Make Module 'questInterface'_ +* By default this will build the "debug" apk, you can change this by opening the _Build Varients_ window along the left side and select other build types like "release" +* Your newly build APK should reside in project-athena\android\apps\questInterface\release (if you chose release) ### Running a Module +You are free to use "abd" command line or other development tools to install (sideload on quest) your newly build APK, or you can follow the instrutions below to load the APK via Android Studio. + * In the toolbar at the top of Android Studio, next to the green hammer icon, you should see a dropdown menu. * You may already see a configuration for the module you are trying to build. If so, select it. * Otherwise, select _Edit Configurations_. @@ -112,9 +123,17 @@ To view a more complete debug log, * Click the icon with the two overlapping squares in the upper left corner of the tab where the sync is running (hover text says _Toggle view_) * To change verbosity, click _File > Settings_. Under _Build, Execution, Deployment > Compiler_ you can add command-line flags, as per Gradle documentation +If you encounter cmake issues, try adding the following system environment variable: + +Naviagte to 'Edit the System Environment Variables' Through the start menu. +* Click on 'Advanced' tab, then 'Environment Variables' +* Select 'New' under System variables +* Set "Variable name" to QT_CMAKE_PREFIX_PATH +* Set "Variable value" the directory that your android build placed the cmake 3.6.4 library cmake directory (i.e. android\qt\lib\cmake) + Some things you can try if you want to do a clean build -* Delete the `build` and `.externalNativeBuild` folders from the folder for each module you're building (for example, `hifi/android/apps/interface`) +* Delete the `build` and `.externalNativeBuild` folders from the folder for each module you're building (for example, `project-athena/android/apps/interface`) * If you have set your `HIFI_VCPKG_ROOT` environment variable, delete the contents of that directory; otherwise, delete `AppData/Local/Temp/hifi` * In Android Studio, click _File > Invalidate Caches / Restart_ and select _Invalidate and Restart_ From 3198cb1460810053bf82faddee6a61d236e49959 Mon Sep 17 00:00:00 2001 From: David Rowe Date: Sun, 18 Oct 2020 14:44:33 +1300 Subject: [PATCH 002/152] Rename installer build guide --- INSTALL.md => INSTALLER.md | 0 README.md | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) rename INSTALL.md => INSTALLER.md (100%) diff --git a/INSTALL.md b/INSTALLER.md similarity index 100% rename from INSTALL.md rename to INSTALLER.md diff --git a/README.md b/README.md index baf333d81f..54de3f881a 100644 --- a/README.md +++ b/README.md @@ -30,7 +30,7 @@ Vircadia is a 3D social software project seeking to incrementally bring about a ### How to generate an Installer -[For Windows](https://github.com/kasenvr/project-athena/blob/master/INSTALL.md) +[For Windows](https://github.com/kasenvr/project-athena/blob/master/INSTALLER.md) [For Linux - AppImage - Vircadia Builder](https://github.com/kasenvr/vircadia-builder/blob/master/README.md#building-appimages) From 5f283e45b5d605897620110e408d8212ab4de53f Mon Sep 17 00:00:00 2001 From: David Rowe Date: Sun, 18 Oct 2020 15:55:59 +1300 Subject: [PATCH 003/152] Fix use of the BYPASS_SIGNING flag --- cmake/macros/SetPackagingParameters.cmake | 1 + 1 file changed, 1 insertion(+) diff --git a/cmake/macros/SetPackagingParameters.cmake b/cmake/macros/SetPackagingParameters.cmake index 1e05cad109..c9cf91bd3d 100644 --- a/cmake/macros/SetPackagingParameters.cmake +++ b/cmake/macros/SetPackagingParameters.cmake @@ -25,6 +25,7 @@ macro(SET_PACKAGING_PARAMETERS) set_from_env(RELEASE_NUMBER RELEASE_NUMBER "") set_from_env(STABLE_BUILD STABLE_BUILD 0) set_from_env(INITIAL_STARTUP_LOCATION INITIAL_STARTUP_LOCATION "") + set_from_env(BYPASS_SIGNING BYPASS_SIGNING 0) message(STATUS "The RELEASE_TYPE variable is: ${RELEASE_TYPE}") From c33fb5df84e52f3f4abeeba3afb2f226a635163c Mon Sep 17 00:00:00 2001 From: David Rowe Date: Sun, 18 Oct 2020 16:35:17 +1300 Subject: [PATCH 004/152] Fix cmake warning when bypassing signing --- cmake/macros/OptionalWinExecutableSigning.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/macros/OptionalWinExecutableSigning.cmake b/cmake/macros/OptionalWinExecutableSigning.cmake index cbefdaea8f..8f9fde672c 100644 --- a/cmake/macros/OptionalWinExecutableSigning.cmake +++ b/cmake/macros/OptionalWinExecutableSigning.cmake @@ -10,7 +10,7 @@ # macro(optional_win_executable_signing) - if (WIN32 AND PRODUCTION_BUILD) + if (WIN32 AND PRODUCTION_BUILD AND NOT BYPASS_SIGNING) if (DEFINED ENV{HF_PFX_FILE}) if (DEFINED ENV{HF_PFX_PASSPHRASE}) message(STATUS "Executable for ${TARGET_NAME} will be signed with SignTool.") From 857bf7decc58a9e1ab01ecdd3290f80457f46bec Mon Sep 17 00:00:00 2001 From: David Rowe Date: Mon, 19 Oct 2020 09:53:59 +1300 Subject: [PATCH 005/152] Don't show "Console" options in Interface-only installer --- cmake/templates/NSIS.template.in | 111 ++++++++++++++++++++++--------- 1 file changed, 79 insertions(+), 32 deletions(-) diff --git a/cmake/templates/NSIS.template.in b/cmake/templates/NSIS.template.in index 013eb98f84..04c839f58d 100644 --- a/cmake/templates/NSIS.template.in +++ b/cmake/templates/NSIS.template.in @@ -837,16 +837,24 @@ Function PostInstallOptionsPage !insertmacro SetInstallOption $DesktopClientCheckbox @CLIENT_DESKTOP_SHORTCUT_REG_KEY@ ${BST_CHECKED} ${EndIf} + ; FIXME: Re-enable or permanently remove system tray "Console" for Interface-only installs. + ;${If} @SERVER_COMPONENT_CONDITIONAL@ + ; ${NSD_CreateCheckbox} 0 $CurrentOffset$OffsetUnits 100% 10u "&Create a desktop shortcut for @SANDBOX_HF_SHORTCUT_NAME@" + ;${Else} + ; ${NSD_CreateCheckbox} 0 $CurrentOffset$OffsetUnits 100% 10u "&Create a desktop shortcut for @CONSOLE_HF_SHORTCUT_NAME@" + ;${EndIf} + ;Pop $DesktopConsoleCheckbox + ;IntOp $CurrentOffset $CurrentOffset + 15 + ; + ;; set the checkbox state depending on what is present in the registry + ;!insertmacro SetInstallOption $DesktopConsoleCheckbox @CONSOLE_DESKTOP_SHORTCUT_REG_KEY@ ${BST_UNCHECKED} ${If} @SERVER_COMPONENT_CONDITIONAL@ ${NSD_CreateCheckbox} 0 $CurrentOffset$OffsetUnits 100% 10u "&Create a desktop shortcut for @SANDBOX_HF_SHORTCUT_NAME@" - ${Else} - ${NSD_CreateCheckbox} 0 $CurrentOffset$OffsetUnits 100% 10u "&Create a desktop shortcut for @CONSOLE_HF_SHORTCUT_NAME@" + Pop $DesktopConsoleCheckbox + IntOp $CurrentOffset $CurrentOffset + 15 + ; set the checkbox state depending on what is present in the registry + !insertmacro SetInstallOption $DesktopConsoleCheckbox @CONSOLE_DESKTOP_SHORTCUT_REG_KEY@ ${BST_UNCHECKED} ${EndIf} - - Pop $DesktopConsoleCheckbox - IntOp $CurrentOffset $CurrentOffset + 15 - ; set the checkbox state depending on what is present in the registry - !insertmacro SetInstallOption $DesktopConsoleCheckbox @CONSOLE_DESKTOP_SHORTCUT_REG_KEY@ ${BST_UNCHECKED} ${If} @CLIENT_COMPONENT_CONDITIONAL@ ${NSD_CreateCheckbox} 0 $CurrentOffset$OffsetUnits 100% 10u "&Launch @INTERFACE_HF_SHORTCUT_NAME@ after install" @@ -861,31 +869,54 @@ Function PostInstallOptionsPage ${EndIf} ${EndIf} + ; FIXME: Re-enable or permanently remove system tray "Console" for Interface-only installs. + ;${If} @SERVER_COMPONENT_CONDITIONAL@ + ; ${NSD_CreateCheckbox} 0 $CurrentOffset$OffsetUnits 100% 10u "&Launch @SANDBOX_HF_SHORTCUT_NAME@ after install" + ;${Else} + ; ${NSD_CreateCheckbox} 0 $CurrentOffset$OffsetUnits 100% 10u "&Launch @CONSOLE_HF_SHORTCUT_NAME@ after install" + ;${EndIf} + ;Pop $LaunchConsoleNowCheckbox + ; + ;; set the checkbox state depending on what is present in the registry + ;!insertmacro SetInstallOption $LaunchConsoleNowCheckbox @SERVER_LAUNCH_NOW_REG_KEY@ ${BST_UNCHECKED} + ;${StrContains} $substringResult "/forceNoLaunchServer" $CMDLINE + ;${IfNot} $substringResult == "" + ; ${NSD_SetState} $LaunchConsoleNowCheckbox ${BST_UNCHECKED} + ;${EndIf} + ;IntOp $CurrentOffset $CurrentOffset + 15 ${If} @SERVER_COMPONENT_CONDITIONAL@ ${NSD_CreateCheckbox} 0 $CurrentOffset$OffsetUnits 100% 10u "&Launch @SANDBOX_HF_SHORTCUT_NAME@ after install" - ${Else} - ${NSD_CreateCheckbox} 0 $CurrentOffset$OffsetUnits 100% 10u "&Launch @CONSOLE_HF_SHORTCUT_NAME@ after install" - ${EndIf} - Pop $LaunchConsoleNowCheckbox - - ; set the checkbox state depending on what is present in the registry - !insertmacro SetInstallOption $LaunchConsoleNowCheckbox @SERVER_LAUNCH_NOW_REG_KEY@ ${BST_UNCHECKED} - ${StrContains} $substringResult "/forceNoLaunchServer" $CMDLINE - ${IfNot} $substringResult == "" + Pop $LaunchConsoleNowCheckbox + + ; set the checkbox state depending on what is present in the registry + !insertmacro SetInstallOption $LaunchConsoleNowCheckbox @SERVER_LAUNCH_NOW_REG_KEY@ ${BST_UNCHECKED} + ${StrContains} $substringResult "/forceNoLaunchServer" $CMDLINE + ${IfNot} $substringResult == "" ${NSD_SetState} $LaunchConsoleNowCheckbox ${BST_UNCHECKED} + ${EndIf} + IntOp $CurrentOffset $CurrentOffset + 15 ${EndIf} - IntOp $CurrentOffset $CurrentOffset + 30 - - ${If} @SERVER_COMPONENT_CONDITIONAL@ - ${NSD_CreateCheckbox} 0 $CurrentOffset$OffsetUnits 100% 10u "&Launch @SANDBOX_HF_SHORTCUT_NAME@ on startup" - ${Else} - ${NSD_CreateCheckbox} 0 $CurrentOffset$OffsetUnits 100% 10u "&Launch @CONSOLE_HF_SHORTCUT_NAME@ on startup" - ${EndIf} - Pop $ConsoleStartupCheckbox IntOp $CurrentOffset $CurrentOffset + 15 - ; set the checkbox state depending on what is present in the registry - !insertmacro SetInstallOption $ConsoleStartupCheckbox @CONSOLE_STARTUP_REG_KEY@ ${BST_UNCHECKED} + ; FIXME: Re-enable or permanently remove system tray "Console" for Interface-only installs. + ;${If} @SERVER_COMPONENT_CONDITIONAL@ + ; ${NSD_CreateCheckbox} 0 $CurrentOffset$OffsetUnits 100% 10u "&Launch @SANDBOX_HF_SHORTCUT_NAME@ on startup" + ;${Else} + ; ${NSD_CreateCheckbox} 0 $CurrentOffset$OffsetUnits 100% 10u "&Launch @CONSOLE_HF_SHORTCUT_NAME@ on startup" + ;${EndIf} + ;Pop $ConsoleStartupCheckbox + ;IntOp $CurrentOffset $CurrentOffset + 15 + ; + ;; set the checkbox state depending on what is present in the registry + ;!insertmacro SetInstallOption $ConsoleStartupCheckbox @CONSOLE_STARTUP_REG_KEY@ ${BST_UNCHECKED} + ${If} @SERVER_COMPONENT_CONDITIONAL@ + ${NSD_CreateCheckbox} 0 $CurrentOffset$OffsetUnits 100% 10u "&Launch @SANDBOX_HF_SHORTCUT_NAME@ on startup" + Pop $ConsoleStartupCheckbox + IntOp $CurrentOffset $CurrentOffset + 15 + + ; set the checkbox state depending on what is present in the registry + !insertmacro SetInstallOption $ConsoleStartupCheckbox @CONSOLE_STARTUP_REG_KEY@ ${BST_UNCHECKED} + ${EndIf} ${NSD_CreateCheckbox} 0 $CurrentOffset$OffsetUnits 100% 10u "&Perform a clean install (Delete older settings and content)" Pop $CleanInstallCheckbox @@ -957,13 +988,29 @@ FunctionEnd Function ReadPostInstallOptions - ; check if the user asked for a desktop shortcut to console - ${NSD_GetState} $DesktopConsoleCheckbox $DesktopConsoleState - ${LogText} "Option: Start Desktop Console: $DesktopConsoleState" + ; FIXME: Re-enable or permanently remove system tray "Console" for Interface-only installs. + ;; check if the user asked for a desktop shortcut to console + ;${NSD_GetState} $DesktopConsoleCheckbox $DesktopConsoleState + ;${LogText} "Option: Start Desktop Console: $DesktopConsoleState" + ${If} @SERVER_COMPONENT_CONDITIONAL@ + ; check if the user asked for a desktop shortcut to console + ${NSD_GetState} $DesktopConsoleCheckbox $DesktopConsoleState + ${LogText} "Option: Start Desktop Console: $DesktopConsoleState" + ${Else} + StrCpy $DesktopConsoleState ${BST_UNCHECKED} + ${EndIf} - ; check if the user asked to have console launched every startup - ${NSD_GetState} $ConsoleStartupCheckbox $ConsoleStartupState - ${LogText} "Option: Start Desktop Console On Startup: $ConsoleStartupState" + ; FIXME: Re-enable or permanently remove system tray "Console" for Interface-only installs. + ;; check if the user asked to have console launched every startup + ;${NSD_GetState} $ConsoleStartupCheckbox $ConsoleStartupState + ;${LogText} "Option: Start Desktop Console On Startup: $ConsoleStartupState" + ${If} @SERVER_COMPONENT_CONDITIONAL@ + ; check if the user asked to have console launched every startup + ${NSD_GetState} $ConsoleStartupCheckbox $ConsoleStartupState + ${LogText} "Option: Start Desktop Console On Startup: $ConsoleStartupState" + ${Else} + StrCpy $ConsoleStartupState ${BST_UNCHECKED} + ${EndIf} ${If} @SERVER_COMPONENT_CONDITIONAL@ ${LogText} "Option: Install Server" From f523416f75761725d9a06762ede134f4b82d99e9 Mon Sep 17 00:00:00 2001 From: David Rowe Date: Mon, 26 Oct 2020 10:09:25 +1300 Subject: [PATCH 006/152] Don't create "Console" Start Menu item --- cmake/templates/NSIS.template.in | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/cmake/templates/NSIS.template.in b/cmake/templates/NSIS.template.in index 04c839f58d..91f5519a33 100644 --- a/cmake/templates/NSIS.template.in +++ b/cmake/templates/NSIS.template.in @@ -1355,10 +1355,13 @@ Section "-Core installation" ${Else} ; handling for interface only console shortcut Delete "$SMPROGRAMS\$STARTMENU_FOLDER\@SANDBOX_HF_SHORTCUT_NAME@.lnk" - CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\@CONSOLE_SHORTCUT_NAME@.lnk" \ - "$INSTDIR\@CONSOLE_INSTALL_SUBDIR@\@CONSOLE_WIN_EXEC_NAME@" - ; Set appUserModelId - ApplicationID::Set "$SMPROGRAMS\$STARTMENU_FOLDER\@CONSOLE_SHORTCUT_NAME@.lnk" "@APP_USER_MODEL_ID@" + + ; FIXME: Re-enable or permanently remove system tray "Console" for Interface-only installs. + ;CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\@CONSOLE_SHORTCUT_NAME@.lnk" \ + ; "$INSTDIR\@CONSOLE_INSTALL_SUBDIR@\@CONSOLE_WIN_EXEC_NAME@" + ;; Set appUserModelId + ;ApplicationID::Set "$SMPROGRAMS\$STARTMENU_FOLDER\@CONSOLE_SHORTCUT_NAME@.lnk" "@APP_USER_MODEL_ID@" + ${EndIf} CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\Uninstall.lnk" "$INSTDIR\@UNINSTALLER_NAME@" From cfc7309c96f9ac3867a77145673853163c600258 Mon Sep 17 00:00:00 2001 From: Kalila L Date: Fri, 20 Nov 2020 03:19:19 -0500 Subject: [PATCH 007/152] Send address and port with each metaverse heartbeat. --- .../resources/describe-settings.json | 17 +++++++++ domain-server/resources/web/js/shared.js | 7 ++-- domain-server/src/DomainServer.cpp | 36 ++++++++++++++++--- domain-server/src/DomainServer.h | 4 +-- 4 files changed, 54 insertions(+), 10 deletions(-) diff --git a/domain-server/resources/describe-settings.json b/domain-server/resources/describe-settings.json index 42b15adefe..2cef93ad53 100644 --- a/domain-server/resources/describe-settings.json +++ b/domain-server/resources/describe-settings.json @@ -2013,6 +2013,23 @@ } ] }, + { + "name": "domain_server", + "label": "Setup Domain Server", + "restart": false, + "hidden": true, + "settings": [ + { + "name": "network_address", + "default": "" + }, + { + "name": "port", + "type": "int", + "default": 0 + } + ] + }, { "name": "installed_content", "label": "Installed Content", diff --git a/domain-server/resources/web/js/shared.js b/domain-server/resources/web/js/shared.js index bffd512890..542771c60e 100644 --- a/domain-server/resources/web/js/shared.js +++ b/domain-server/resources/web/js/shared.js @@ -129,9 +129,10 @@ function getCurrentDomainIDType() { return DOMAIN_ID_TYPE_UNKNOWN; } if (DomainInfo !== null) { - if (DomainInfo.name !== undefined) { - return DOMAIN_ID_TYPE_TEMP; - } + // Disabled because detecting as temp domain... and we're not even using temp domains right now. + // if (DomainInfo.name !== undefined) { + // return DOMAIN_ID_TYPE_TEMP; + // } return DOMAIN_ID_TYPE_FULL; } return DOMAIN_ID_TYPE_UNKNOWN; diff --git a/domain-server/src/DomainServer.cpp b/domain-server/src/DomainServer.cpp index f26dc4ac27..80458e7ad0 100644 --- a/domain-server/src/DomainServer.cpp +++ b/domain-server/src/DomainServer.cpp @@ -1507,10 +1507,23 @@ QJsonObject jsonForDomainSocketUpdate(const HifiSockAddr& socket) { const QString DOMAIN_UPDATE_AUTOMATIC_NETWORKING_KEY = "automatic_networking"; void DomainServer::performIPAddressUpdate(const HifiSockAddr& newPublicSockAddr) { - sendHeartbeatToMetaverse(newPublicSockAddr.getAddress().toString()); + static const QString PUBLIC_SOCKET_ADDRESS_KEY = "network_address"; + static const QString PUBLIC_SOCKET_PORT_KEY = "port"; + const QString& publicSocketAddress = newPublicSockAddr.getAddress().toString(); + const int publicSocketPort = newPublicSockAddr.getPort(); + + sendHeartbeatToMetaverse(publicSocketAddress, publicSocketPort); + + QString newSettingsJSON = QString("{\"domain_server\": { \"%1\": \"%2\", \"%3\": %4}}") + .arg(PUBLIC_SOCKET_ADDRESS_KEY) + .arg(publicSocketAddress) + .arg(PUBLIC_SOCKET_PORT_KEY) + .arg(publicSocketPort); + auto settingsDocument = QJsonDocument::fromJson(newSettingsJSON.toUtf8()); + _settingsManager.recurseJSONObjectAndOverwriteSettings(settingsDocument.object(), DomainSettings); } -void DomainServer::sendHeartbeatToMetaverse(const QString& networkAddress) { +void DomainServer::sendHeartbeatToMetaverse(const QString& networkAddress, const int port) { // Setup the domain object to send to the data server QJsonObject domainObject; @@ -1520,10 +1533,23 @@ void DomainServer::sendHeartbeatToMetaverse(const QString& networkAddress) { static const QString PROTOCOL_VERSION_KEY = "protocol"; domainObject[PROTOCOL_VERSION_KEY] = protocolVersionsSignatureBase64(); - // add networking + static const QString PUBLIC_SOCKET_ADDRESS_KEY = "network_address"; + static const QString PUBLIC_SOCKET_PORT_KEY = "port"; + + static const QString NETWORK_ADDRESS_SETTINGS_KEY = "domain_server." + PUBLIC_SOCKET_ADDRESS_KEY; + const QString networkAddressFromSettings = _settingsManager.valueForKeyPath(NETWORK_ADDRESS_SETTINGS_KEY).toString(); if (!networkAddress.isEmpty()) { - static const QString PUBLIC_NETWORK_ADDRESS_KEY = "network_address"; - domainObject[PUBLIC_NETWORK_ADDRESS_KEY] = networkAddress; + domainObject[PUBLIC_SOCKET_ADDRESS_KEY] = networkAddress; + } else if (!networkAddressFromSettings.isEmpty()) { + domainObject[PUBLIC_SOCKET_ADDRESS_KEY] = networkAddressFromSettings; + } + + static const QString PORT_SETTINGS_KEY = "domain_server." + PUBLIC_SOCKET_PORT_KEY; + const int portFromSettings = _settingsManager.valueForKeyPath(PORT_SETTINGS_KEY).toInt(); + if (port != NULL) { + domainObject[PUBLIC_SOCKET_PORT_KEY] = port; + } else if (portFromSettings != NULL) { + domainObject[PUBLIC_SOCKET_PORT_KEY] = portFromSettings; } static const QString AUTOMATIC_NETWORKING_KEY = "automatic_networking"; diff --git a/domain-server/src/DomainServer.h b/domain-server/src/DomainServer.h index 7a09141db6..69c99e5cf4 100644 --- a/domain-server/src/DomainServer.h +++ b/domain-server/src/DomainServer.h @@ -113,7 +113,7 @@ private slots: void sendPendingTransactionsToServer(); void performIPAddressUpdate(const HifiSockAddr& newPublicSockAddr); - void sendHeartbeatToMetaverse() { sendHeartbeatToMetaverse(QString()); } + void sendHeartbeatToMetaverse() { sendHeartbeatToMetaverse(QString(), int()); } void sendHeartbeatToIceServer(); void nodePingMonitor(); @@ -176,7 +176,7 @@ private: void setupAutomaticNetworking(); void setupICEHeartbeatForFullNetworking(); void setupHeartbeatToMetaverse(); - void sendHeartbeatToMetaverse(const QString& networkAddress); + void sendHeartbeatToMetaverse(const QString& networkAddress, const int port); void randomizeICEServerAddress(bool shouldTriggerHostLookup); From 97681786cdfbc019e6bfa06480575fcb4416d6c0 Mon Sep 17 00:00:00 2001 From: Kalila L Date: Wed, 25 Nov 2020 04:54:47 -0500 Subject: [PATCH 008/152] Potentially fix STUN IP+Port init for heartbeat issue? --- domain-server/src/DomainServer.cpp | 15 +++++++-------- domain-server/src/DomainServer.h | 2 +- libraries/networking/src/LimitedNodeList.cpp | 2 +- 3 files changed, 9 insertions(+), 10 deletions(-) diff --git a/domain-server/src/DomainServer.cpp b/domain-server/src/DomainServer.cpp index 80458e7ad0..66bb06b2d6 100644 --- a/domain-server/src/DomainServer.cpp +++ b/domain-server/src/DomainServer.cpp @@ -901,14 +901,13 @@ void DomainServer::setupAutomaticNetworking() { qDebug() << "domain-server" << _automaticNetworkingSetting << "automatic networking enabled for ID" << uuidStringWithoutCurlyBraces(domainID) << "via" << _oauthProviderURL.toString(); + auto nodeList = DependencyManager::get(); + + // send any public socket changes to the data server so nodes can find us at our new IP + connect(nodeList.data(), &LimitedNodeList::publicSockAddrChanged, this, + &DomainServer::performIPAddressPortUpdate); + if (_automaticNetworkingSetting == IP_ONLY_AUTOMATIC_NETWORKING_VALUE) { - - auto nodeList = DependencyManager::get(); - - // send any public socket changes to the data server so nodes can find us at our new IP - connect(nodeList.data(), &LimitedNodeList::publicSockAddrChanged, - this, &DomainServer::performIPAddressUpdate); - // have the LNL enable public socket updating via STUN nodeList->startSTUNPublicSocketUpdate(); } @@ -1506,7 +1505,7 @@ QJsonObject jsonForDomainSocketUpdate(const HifiSockAddr& socket) { const QString DOMAIN_UPDATE_AUTOMATIC_NETWORKING_KEY = "automatic_networking"; -void DomainServer::performIPAddressUpdate(const HifiSockAddr& newPublicSockAddr) { +void DomainServer::performIPAddressPortUpdate(const HifiSockAddr& newPublicSockAddr) { static const QString PUBLIC_SOCKET_ADDRESS_KEY = "network_address"; static const QString PUBLIC_SOCKET_PORT_KEY = "port"; const QString& publicSocketAddress = newPublicSockAddr.getAddress().toString(); diff --git a/domain-server/src/DomainServer.h b/domain-server/src/DomainServer.h index 69c99e5cf4..24d26540c1 100644 --- a/domain-server/src/DomainServer.h +++ b/domain-server/src/DomainServer.h @@ -112,7 +112,7 @@ private slots: void setupPendingAssignmentCredits(); void sendPendingTransactionsToServer(); - void performIPAddressUpdate(const HifiSockAddr& newPublicSockAddr); + void performIPAddressPortUpdate(const HifiSockAddr& newPublicSockAddr); void sendHeartbeatToMetaverse() { sendHeartbeatToMetaverse(QString(), int()); } void sendHeartbeatToIceServer(); void nodePingMonitor(); diff --git a/libraries/networking/src/LimitedNodeList.cpp b/libraries/networking/src/LimitedNodeList.cpp index d867b49b30..3da5b53dcb 100644 --- a/libraries/networking/src/LimitedNodeList.cpp +++ b/libraries/networking/src/LimitedNodeList.cpp @@ -1197,7 +1197,7 @@ void LimitedNodeList::stopInitialSTUNUpdate(bool success) { } // We now setup a timer here to fire every so often to check that our IP address has not changed. - // Or, if we failed - if will check if we can eventually get a public socket + // Or, if we failed - it will check if we can eventually get a public socket const int STUN_IP_ADDRESS_CHECK_INTERVAL_MSECS = 10 * 1000; QTimer* stunOccasionalTimer = new QTimer { this }; From cec112dd286c034d2f078262e9a90415cbcf587f Mon Sep 17 00:00:00 2001 From: Kalila L Date: Wed, 25 Nov 2020 15:19:35 -0500 Subject: [PATCH 009/152] "port" -> "network_port" --- domain-server/resources/describe-settings.json | 2 +- domain-server/src/DomainServer.cpp | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/domain-server/resources/describe-settings.json b/domain-server/resources/describe-settings.json index 2cef93ad53..bb7acf344c 100644 --- a/domain-server/resources/describe-settings.json +++ b/domain-server/resources/describe-settings.json @@ -2024,7 +2024,7 @@ "default": "" }, { - "name": "port", + "name": "network_port", "type": "int", "default": 0 } diff --git a/domain-server/src/DomainServer.cpp b/domain-server/src/DomainServer.cpp index 66bb06b2d6..9f5c7e0bb0 100644 --- a/domain-server/src/DomainServer.cpp +++ b/domain-server/src/DomainServer.cpp @@ -1507,7 +1507,7 @@ const QString DOMAIN_UPDATE_AUTOMATIC_NETWORKING_KEY = "automatic_networking"; void DomainServer::performIPAddressPortUpdate(const HifiSockAddr& newPublicSockAddr) { static const QString PUBLIC_SOCKET_ADDRESS_KEY = "network_address"; - static const QString PUBLIC_SOCKET_PORT_KEY = "port"; + static const QString PUBLIC_SOCKET_PORT_KEY = "network_port"; const QString& publicSocketAddress = newPublicSockAddr.getAddress().toString(); const int publicSocketPort = newPublicSockAddr.getPort(); @@ -1533,7 +1533,7 @@ void DomainServer::sendHeartbeatToMetaverse(const QString& networkAddress, const domainObject[PROTOCOL_VERSION_KEY] = protocolVersionsSignatureBase64(); static const QString PUBLIC_SOCKET_ADDRESS_KEY = "network_address"; - static const QString PUBLIC_SOCKET_PORT_KEY = "port"; + static const QString PUBLIC_SOCKET_PORT_KEY = "network_port"; static const QString NETWORK_ADDRESS_SETTINGS_KEY = "domain_server." + PUBLIC_SOCKET_ADDRESS_KEY; const QString networkAddressFromSettings = _settingsManager.valueForKeyPath(NETWORK_ADDRESS_SETTINGS_KEY).toString(); From 699f28c9b49f7add16080c7e46ec8f6bbc53b5ba Mon Sep 17 00:00:00 2001 From: Alezia Kurdis <60075796+AleziaKurdis@users.noreply.github.com> Date: Tue, 8 Dec 2020 23:36:57 -0500 Subject: [PATCH 010/152] New Material Icon and Harmonization Add a new entity in-world edition icon for Material (when not parented) and new version for the 4 existing icons: Now they are all dark gray (same tone) with a white border for a better visibility under different lighting. --- .../create/assets/images/icon-material.svg | 5 + .../create/assets/images/icon-particles.svg | 43 +++---- .../create/assets/images/icon-point-light.svg | 105 ++++++++---------- .../create/assets/images/icon-spot-light.svg | 63 +++++------ .../system/create/assets/images/icon-zone.svg | 72 +----------- 5 files changed, 95 insertions(+), 193 deletions(-) create mode 100644 scripts/system/create/assets/images/icon-material.svg diff --git a/scripts/system/create/assets/images/icon-material.svg b/scripts/system/create/assets/images/icon-material.svg new file mode 100644 index 0000000000..470fed5dbd --- /dev/null +++ b/scripts/system/create/assets/images/icon-material.svg @@ -0,0 +1,5 @@ + + + + +Layer 1 \ No newline at end of file diff --git a/scripts/system/create/assets/images/icon-particles.svg b/scripts/system/create/assets/images/icon-particles.svg index 5e0105d7cd..2b3f365889 100644 --- a/scripts/system/create/assets/images/icon-particles.svg +++ b/scripts/system/create/assets/images/icon-particles.svg @@ -1,29 +1,14 @@ - - - - - - - - - - - - - - - - + + + + + + + + + + + + + +Layer 1 \ No newline at end of file diff --git a/scripts/system/create/assets/images/icon-point-light.svg b/scripts/system/create/assets/images/icon-point-light.svg index 896c35b63b..0f2e91d55b 100644 --- a/scripts/system/create/assets/images/icon-point-light.svg +++ b/scripts/system/create/assets/images/icon-point-light.svg @@ -1,57 +1,48 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + +Layer 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/scripts/system/create/assets/images/icon-spot-light.svg b/scripts/system/create/assets/images/icon-spot-light.svg index ac2f87bb27..d8e196ffd7 100644 --- a/scripts/system/create/assets/images/icon-spot-light.svg +++ b/scripts/system/create/assets/images/icon-spot-light.svg @@ -1,37 +1,26 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + +Layer 1 + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/scripts/system/create/assets/images/icon-zone.svg b/scripts/system/create/assets/images/icon-zone.svg index 41aeac4951..bfd8e07160 100644 --- a/scripts/system/create/assets/images/icon-zone.svg +++ b/scripts/system/create/assets/images/icon-zone.svg @@ -1,73 +1,5 @@ - - - -image/svg+xmlLayer 1 \ No newline at end of file From 5a3f4b59c8db1d54180ba310ad66c94c12db637c Mon Sep 17 00:00:00 2001 From: Alezia Kurdis <60075796+AleziaKurdis@users.noreply.github.com> Date: Tue, 8 Dec 2020 23:39:26 -0500 Subject: [PATCH 011/152] Add a Name on the Material of the shape visualizer Add a Name on the Material of the shape visualizer to be able to exclude it when a zone is selected. --- scripts/system/create/modules/entityShapeVisualizer.js | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/system/create/modules/entityShapeVisualizer.js b/scripts/system/create/modules/entityShapeVisualizer.js index 45cf68fdb5..7a1cd74d25 100644 --- a/scripts/system/create/modules/entityShapeVisualizer.js +++ b/scripts/system/create/modules/entityShapeVisualizer.js @@ -143,6 +143,7 @@ EntityShape.prototype = { var PROJECTED_MATERIALS = false; this.materialEntity = Entities.addEntity({ type: "Material", + name: "MATERIAL_" + this.entityShapeVisualizerSessionName, localPosition: Vec3.ZERO, localRotation: Quat.IDENTITY, localDimensions: properties.localDimensions, From aea3e7936fbdb971b5c702ff112c77fd0a126a3e Mon Sep 17 00:00:00 2001 From: Alezia Kurdis <60075796+AleziaKurdis@users.noreply.github.com> Date: Tue, 8 Dec 2020 23:52:04 -0500 Subject: [PATCH 012/152] Add Material icons in edit mode MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1- This adds a new Material icon to identify the material entities that are linked to a parent. Since those material entities become invisible, this help to figure their presence. 2- The Create App - Preference: "Show Zones in Create Mode" has been removed, since it was doing nothing for a couple of years now. the method behind is still in the API, but do nothing. (abandoned since it was only drawing a box that wasn't useful to figure the shape of the zone) There was no real value to bring this back in a different way. 3- The Create App - Preference: "Show Lights and Particle Systems in Create Mode" has been renamed for "Show Icons in Create Mode" since this setting was also managing all the icons (including Zones and now the Parented Materials) The objective of the setting is mainly to simplify the display at the edit when a scene is very dense. (In the future, we might want to make this "à la carte". For now, I think we can try as is. ) --- scripts/system/create/edit.js | 56 ++++++++++++++--------------------- 1 file changed, 23 insertions(+), 33 deletions(-) diff --git a/scripts/system/create/edit.js b/scripts/system/create/edit.js index fc3d4fc10f..9e94b68ba1 100644 --- a/scripts/system/create/edit.js +++ b/scripts/system/create/edit.js @@ -87,21 +87,24 @@ var PARTICLE_SYSTEM_URL = Script.resolvePath("assets/images/icon-particles.svg") var POINT_LIGHT_URL = Script.resolvePath("assets/images/icon-point-light.svg"); var SPOT_LIGHT_URL = Script.resolvePath("assets/images/icon-spot-light.svg"); var ZONE_URL = Script.resolvePath("assets/images/icon-zone.svg"); +var MATERIAL_URL = Script.resolvePath("assets/images/icon-material.svg"); -var entityIconOverlayManager = new EntityIconOverlayManager(['Light', 'ParticleEffect', 'Zone'], function(entityID) { - var properties = Entities.getEntityProperties(entityID, ['type', 'isSpotlight']); - if (properties.type === 'Light') { - return { - url: properties.isSpotlight ? SPOT_LIGHT_URL : POINT_LIGHT_URL, - }; - } else if (properties.type === 'Zone') { - return { - url: ZONE_URL, +var entityIconOverlayManager = new EntityIconOverlayManager(["Light", "ParticleEffect", "Zone", "Material"], function(entityID) { + var properties = Entities.getEntityProperties(entityID, ["type", "isSpotlight", "parentID", "name"]); + if (properties.type === "Light") { + return { + imageURL: properties.isSpotlight ? SPOT_LIGHT_URL : POINT_LIGHT_URL }; + } else if (properties.type === "Zone") { + return { imageURL: ZONE_URL }; + } else if (properties.type === "Material") { + if (properties.parentID !== Uuid.NULL && properties.name !== "MATERIAL_" + entityShapeVisualizerSessionName) { + return { imageURL: MATERIAL_URL }; + } else { + return { imageURL: "" }; + } } else { - return { - url: PARTICLE_SYSTEM_URL, - }; + return { imageURL: PARTICLE_SYSTEM_URL }; } }); @@ -154,8 +157,7 @@ var MENU_CREATE_SEPARATOR = "Create Application"; var SUBMENU_ENTITY_EDITOR_PREFERENCES = "Edit > Preferences"; var MENU_AUTO_FOCUS_ON_SELECT = "Auto Focus on Select"; var MENU_EASE_ON_FOCUS = "Ease Orientation on Focus"; -var MENU_SHOW_LIGHTS_AND_PARTICLES_IN_EDIT_MODE = "Show Lights and Particle Systems in Create Mode"; -var MENU_SHOW_ZONES_IN_EDIT_MODE = "Show Zones in Create Mode"; +var MENU_SHOW_ICONS_IN_CREATE_MODE = "Show Icons in Create Mode"; var MENU_CREATE_ENTITIES_GRABBABLE = "Create Entities As Grabbable (except Zones, Particles, and Lights)"; var MENU_ALLOW_SELECTION_LARGE = "Allow Selecting of Large Models"; var MENU_ALLOW_SELECTION_SMALL = "Allow Selecting of Small Models"; @@ -1041,8 +1043,7 @@ var toolBar = (function () { // everybody else to think that Interface has lost focus overall. fogbugzid:558 // Window.setFocus(); } - entityIconOverlayManager.setVisible(isActive && Menu.isOptionChecked(MENU_SHOW_LIGHTS_AND_PARTICLES_IN_EDIT_MODE)); - Entities.setDrawZoneBoundaries(isActive && Menu.isOptionChecked(MENU_SHOW_ZONES_IN_EDIT_MODE)); + entityIconOverlayManager.setVisible(isActive && Menu.isOptionChecked(MENU_SHOW_ICONS_IN_CREATE_MODE)); }; initialize(); @@ -1465,22 +1466,15 @@ function setupModelMenus() { }); Menu.addMenuItem({ menuName: SUBMENU_ENTITY_EDITOR_PREFERENCES, - menuItemName: MENU_SHOW_LIGHTS_AND_PARTICLES_IN_EDIT_MODE, + menuItemName: MENU_SHOW_ICONS_IN_CREATE_MODE, afterItem: MENU_EASE_ON_FOCUS, isCheckable: true, isChecked: Settings.getValue(SETTING_SHOW_LIGHTS_AND_PARTICLES_IN_EDIT_MODE) !== "false" }); - Menu.addMenuItem({ - menuName: SUBMENU_ENTITY_EDITOR_PREFERENCES, - menuItemName: MENU_SHOW_ZONES_IN_EDIT_MODE, - afterItem: MENU_SHOW_LIGHTS_AND_PARTICLES_IN_EDIT_MODE, - isCheckable: true, - isChecked: Settings.getValue(SETTING_SHOW_ZONES_IN_EDIT_MODE) !== "false" - }); Menu.addMenuItem({ menuName: SUBMENU_ENTITY_EDITOR_PREFERENCES, menuItemName: MENU_ENTITY_LIST_DEFAULT_RADIUS, - afterItem: MENU_SHOW_ZONES_IN_EDIT_MODE + afterItem: MENU_SHOW_ICONS_IN_CREATE_MODE }); Entities.setLightsArePickable(false); @@ -1497,8 +1491,7 @@ function cleanupModelMenus() { Menu.removeMenuItem(SUBMENU_ENTITY_EDITOR_PREFERENCES, MENU_ALLOW_SELECTION_LIGHTS); Menu.removeMenuItem(SUBMENU_ENTITY_EDITOR_PREFERENCES, MENU_AUTO_FOCUS_ON_SELECT); Menu.removeMenuItem(SUBMENU_ENTITY_EDITOR_PREFERENCES, MENU_EASE_ON_FOCUS); - Menu.removeMenuItem(SUBMENU_ENTITY_EDITOR_PREFERENCES, MENU_SHOW_LIGHTS_AND_PARTICLES_IN_EDIT_MODE); - Menu.removeMenuItem(SUBMENU_ENTITY_EDITOR_PREFERENCES, MENU_SHOW_ZONES_IN_EDIT_MODE); + Menu.removeMenuItem(SUBMENU_ENTITY_EDITOR_PREFERENCES, MENU_SHOW_ICONS_IN_CREATE_MODE); Menu.removeMenuItem(SUBMENU_ENTITY_EDITOR_PREFERENCES, MENU_CREATE_ENTITIES_GRABBABLE); Menu.removeMenuItem(SUBMENU_ENTITY_EDITOR_PREFERENCES, MENU_ENTITY_LIST_DEFAULT_RADIUS); Menu.removeMenu(SUBMENU_ENTITY_EDITOR_PREFERENCES); @@ -1511,8 +1504,7 @@ Script.scriptEnding.connect(function () { toolBar.setActive(false); Settings.setValue(SETTING_AUTO_FOCUS_ON_SELECT, Menu.isOptionChecked(MENU_AUTO_FOCUS_ON_SELECT)); Settings.setValue(SETTING_EASE_ON_FOCUS, Menu.isOptionChecked(MENU_EASE_ON_FOCUS)); - Settings.setValue(SETTING_SHOW_LIGHTS_AND_PARTICLES_IN_EDIT_MODE, Menu.isOptionChecked(MENU_SHOW_LIGHTS_AND_PARTICLES_IN_EDIT_MODE)); - Settings.setValue(SETTING_SHOW_ZONES_IN_EDIT_MODE, Menu.isOptionChecked(MENU_SHOW_ZONES_IN_EDIT_MODE)); + Settings.setValue(SETTING_SHOW_LIGHTS_AND_PARTICLES_IN_EDIT_MODE, Menu.isOptionChecked(MENU_SHOW_ICONS_IN_CREATE_MODE)); Settings.setValue(SETTING_EDIT_PREFIX + MENU_ALLOW_SELECTION_LARGE, Menu.isOptionChecked(MENU_ALLOW_SELECTION_LARGE)); Settings.setValue(SETTING_EDIT_PREFIX + MENU_ALLOW_SELECTION_SMALL, Menu.isOptionChecked(MENU_ALLOW_SELECTION_SMALL)); @@ -1869,10 +1861,8 @@ function handleMenuEvent(menuItem) { undoHistory.undo(); } else if (menuItem === "Redo") { undoHistory.redo(); - } else if (menuItem === MENU_SHOW_LIGHTS_AND_PARTICLES_IN_EDIT_MODE) { - entityIconOverlayManager.setVisible(isActive && Menu.isOptionChecked(MENU_SHOW_LIGHTS_AND_PARTICLES_IN_EDIT_MODE)); - } else if (menuItem === MENU_SHOW_ZONES_IN_EDIT_MODE) { - Entities.setDrawZoneBoundaries(isActive && Menu.isOptionChecked(MENU_SHOW_ZONES_IN_EDIT_MODE)); + } else if (menuItem === MENU_SHOW_ICONS_IN_CREATE_MODE) { + entityIconOverlayManager.setVisible(isActive && Menu.isOptionChecked(MENU_SHOW_ICONS_IN_CREATE_MODE)); } else if (menuItem === MENU_CREATE_ENTITIES_GRABBABLE) { Settings.setValue(SETTING_EDIT_PREFIX + menuItem, Menu.isOptionChecked(menuItem)); } else if (menuItem === MENU_ENTITY_LIST_DEFAULT_RADIUS) { From 28e53c9c8686345a2747c76333c81c2a0a57dad9 Mon Sep 17 00:00:00 2001 From: Alezia Kurdis <60075796+AleziaKurdis@users.noreply.github.com> Date: Tue, 8 Dec 2020 23:54:32 -0500 Subject: [PATCH 013/152] Migrate from 3dImage Overlay to Local Entities Migrate from 3dImage Overlay to Local Entities --- .../libraries/entityIconOverlayManager.js | 21 +++++++++++-------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/scripts/system/libraries/entityIconOverlayManager.js b/scripts/system/libraries/entityIconOverlayManager.js index 68104ff4bb..bed83b55a0 100644 --- a/scripts/system/libraries/entityIconOverlayManager.js +++ b/scripts/system/libraries/entityIconOverlayManager.js @@ -29,7 +29,7 @@ EntityIconOverlayManager = function(entityTypes, getOverlayPropertiesFunc) { overlayProperties[key] = customProperties[key]; } } - Overlays.editOverlay(entityOverlays[entityID], overlayProperties); + Entities.editEntity(entityOverlays[entityID], overlayProperties); } }; @@ -63,7 +63,7 @@ EntityIconOverlayManager = function(entityTypes, getOverlayPropertiesFunc) { if (visible !== isVisible) { visible = isVisible; for (var id in entityOverlays) { - Overlays.editOverlay(entityOverlays[id], { + Entities.editEntity(entityOverlays[id], { visible: visible, ignorePickIntersection: !visible }); @@ -75,7 +75,11 @@ EntityIconOverlayManager = function(entityTypes, getOverlayPropertiesFunc) { function getOverlay() { var overlay; if (unusedOverlays.length === 0) { - overlay = Overlays.addOverlay("image3d", {}); + overlay = Entities.addEntity({ + "type": "Image", + "billboardMode": "full", + "emissive": true + },"local"); allOverlays.push(overlay); } else { overlay = unusedOverlays.pop(); @@ -85,7 +89,7 @@ EntityIconOverlayManager = function(entityTypes, getOverlayPropertiesFunc) { function releaseOverlay(overlay) { unusedOverlays.push(overlay); - Overlays.editOverlay(overlay, { + Entities.editEntity(overlay, { visible: false, ignorePickIntersection: true }); @@ -103,9 +107,8 @@ EntityIconOverlayManager = function(entityTypes, getOverlayPropertiesFunc) { visible: visible, ignorePickIntersection: !visible, alpha: 0.9, - scale: 0.5, - drawInFront: true, - isFacingAvatar: true, + dimensions: { x: 0.5, y: 0.5, z: 0.01 }, + renderLayer: "front", color: { red: 255, green: 255, @@ -118,7 +121,7 @@ EntityIconOverlayManager = function(entityTypes, getOverlayPropertiesFunc) { overlayProperties[key] = customProperties[key]; } } - Overlays.editOverlay(overlay, overlayProperties); + Entities.editEntity(overlay, overlayProperties); } } @@ -149,7 +152,7 @@ EntityIconOverlayManager = function(entityTypes, getOverlayPropertiesFunc) { Script.scriptEnding.connect(function() { for (var i = 0; i < allOverlays.length; i++) { - Overlays.deleteOverlay(allOverlays[i]); + Entities.deleteEntity(allOverlays[i]); } }); }; From 0468c98c30eb8bba6e32c7a4531de18b9e4241d1 Mon Sep 17 00:00:00 2001 From: Kalila L Date: Fri, 11 Dec 2020 15:55:24 -0500 Subject: [PATCH 014/152] CR, move duplicate consts to top of file. --- domain-server/src/DomainServer.cpp | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/domain-server/src/DomainServer.cpp b/domain-server/src/DomainServer.cpp index 9f5c7e0bb0..5d72f71797 100644 --- a/domain-server/src/DomainServer.cpp +++ b/domain-server/src/DomainServer.cpp @@ -68,6 +68,9 @@ Q_LOGGING_CATEGORY(domain_server_ice, "hifi.domain_server.ice") const QString ACCESS_TOKEN_KEY_PATH = "metaverse.access_token"; const QString DomainServer::REPLACEMENT_FILE_EXTENSION = ".replace"; +const QString PUBLIC_SOCKET_ADDRESS_KEY = "network_address"; +const QString PUBLIC_SOCKET_PORT_KEY = "network_port"; +const QString DOMAIN_UPDATE_AUTOMATIC_NETWORKING_KEY = "automatic_networking"; const int MIN_PORT = 1; const int MAX_PORT = 65535; @@ -1503,11 +1506,7 @@ QJsonObject jsonForDomainSocketUpdate(const HifiSockAddr& socket) { return socketObject; } -const QString DOMAIN_UPDATE_AUTOMATIC_NETWORKING_KEY = "automatic_networking"; - void DomainServer::performIPAddressPortUpdate(const HifiSockAddr& newPublicSockAddr) { - static const QString PUBLIC_SOCKET_ADDRESS_KEY = "network_address"; - static const QString PUBLIC_SOCKET_PORT_KEY = "network_port"; const QString& publicSocketAddress = newPublicSockAddr.getAddress().toString(); const int publicSocketPort = newPublicSockAddr.getPort(); @@ -1532,9 +1531,6 @@ void DomainServer::sendHeartbeatToMetaverse(const QString& networkAddress, const static const QString PROTOCOL_VERSION_KEY = "protocol"; domainObject[PROTOCOL_VERSION_KEY] = protocolVersionsSignatureBase64(); - static const QString PUBLIC_SOCKET_ADDRESS_KEY = "network_address"; - static const QString PUBLIC_SOCKET_PORT_KEY = "network_port"; - static const QString NETWORK_ADDRESS_SETTINGS_KEY = "domain_server." + PUBLIC_SOCKET_ADDRESS_KEY; const QString networkAddressFromSettings = _settingsManager.valueForKeyPath(NETWORK_ADDRESS_SETTINGS_KEY).toString(); if (!networkAddress.isEmpty()) { From 663fb3491bd5b3f60d36fa23b58037a87f173896 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 12 Dec 2020 19:44:53 +0000 Subject: [PATCH 015/152] Bump electron from 6.0.12 to 7.2.4 in /screenshare Bumps [electron](https://github.com/electron/electron) from 6.0.12 to 7.2.4. - [Release notes](https://github.com/electron/electron/releases) - [Changelog](https://github.com/electron/electron/blob/master/docs/breaking-changes.md) - [Commits](https://github.com/electron/electron/compare/v6.0.12...v7.2.4) Signed-off-by: dependabot[bot] --- screenshare/package-lock.json | 965 +++------------------------------- screenshare/package.json | 2 +- 2 files changed, 64 insertions(+), 903 deletions(-) diff --git a/screenshare/package-lock.json b/screenshare/package-lock.json index 8195347159..4d0fea0805 100644 --- a/screenshare/package-lock.json +++ b/screenshare/package-lock.json @@ -71,27 +71,9 @@ } }, "@types/node": { - "version": "10.14.21", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.14.21.tgz", - "integrity": "sha512-nuFlRdBiqbF+PJIEVxm2jLFcQWN7q7iWEJGsBV4n7v1dbI9qXB8im2pMMKMCUZe092sQb5SQft2DHfuQGK5hqQ==", - "dev": true - }, - "ajv": { - "version": "6.10.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", - "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", - "dev": true, - "requires": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "version": "12.19.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.19.9.tgz", + "integrity": "sha512-yj0DOaQeUrk3nJ0bd3Y5PeDRJ6W0r+kilosLA+dzF3dola/o9hxhMSg2sFvVcA2UHS5JSOsZp4S0c1OEXc4m1Q==", "dev": true }, "ansi-styles": { @@ -102,12 +84,6 @@ "color-convert": "^1.9.0" } }, - "array-find-index": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", - "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", - "dev": true - }, "asar": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/asar/-/asar-2.0.1.tgz", @@ -123,45 +99,12 @@ "tmp-promise": "^1.0.5" } }, - "asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", - "dev": true, - "requires": { - "safer-buffer": "~2.1.0" - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true - }, "author-regex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/author-regex/-/author-regex-1.0.0.tgz", "integrity": "sha1-0IiFvmubv5Q5/gh8dihyRfCoFFA=", "dev": true }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "dev": true - }, - "aws4": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", - "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==", - "dev": true - }, "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", @@ -174,15 +117,6 @@ "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==", "dev": true }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "dev": true, - "requires": { - "tweetnacl": "^0.14.3" - } - }, "bluebird": { "version": "3.7.1", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.1.tgz", @@ -215,6 +149,12 @@ "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", "dev": true }, + "buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", + "dev": true + }, "buffer-fill": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", @@ -259,28 +199,6 @@ } } }, - "camelcase": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", - "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", - "dev": true - }, - "camelcase-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", - "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", - "dev": true, - "requires": { - "camelcase": "^2.0.0", - "map-obj": "^1.0.0" - } - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true - }, "chromium-pickle-js": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/chromium-pickle-js/-/chromium-pickle-js-0.2.0.tgz", @@ -336,12 +254,6 @@ "mimic-response": "^1.0.0" } }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true - }, "color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", @@ -355,15 +267,6 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, "commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", @@ -392,44 +295,6 @@ "inherits": "^2.0.3", "readable-stream": "^2.2.2", "typedarray": "^0.0.6" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } } }, "core-util-is": { @@ -464,24 +329,6 @@ "integrity": "sha1-QICG1AlVDCYxFVYZ6fp7ytw7mRs=", "dev": true }, - "currently-unhandled": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", - "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", - "dev": true, - "requires": { - "array-find-index": "^1.0.1" - } - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, "debug": { "version": "3.2.6", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", @@ -505,68 +352,29 @@ "mimic-response": "^1.0.0" } }, - "deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true - }, "defer-to-connect": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.0.2.tgz", "integrity": "sha512-k09hcQcTDY+cwgiwa6PYKLm3jlagNzQ+RSvhjzESOGOx+MNOuXkxTfEvPrO1IOQ81tArCFYQgi631clB70RpQw==", "dev": true }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true - }, "duplexer3": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", "dev": true }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "dev": true, - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, "electron": { - "version": "6.0.12", - "resolved": "https://registry.npmjs.org/electron/-/electron-6.0.12.tgz", - "integrity": "sha512-70ODZa1RP6K0gE9IV9YLCXPSyhLjXksCuYSSPb3MljbfwfHo5uE6X0CGxzm+54YuPdE2e7EPnWZxOOsJYrS5iQ==", + "version": "7.2.4", + "resolved": "https://registry.npmjs.org/electron/-/electron-7.2.4.tgz", + "integrity": "sha512-Z+R692uTzXgP8AHrabE+kkrMlQJ6pnAYoINenwj9QSqaD2YbO8IuXU9DMCcUY0+VpA91ee09wFZJNUKYPMnCKg==", "dev": true, "requires": { - "@types/node": "^10.12.18", - "electron-download": "^4.1.0", + "@electron/get": "^1.0.1", + "@types/node": "^12.0.12", "extract-zip": "^1.0.3" } }, - "electron-download": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/electron-download/-/electron-download-4.1.1.tgz", - "integrity": "sha512-FjEWG9Jb/ppK/2zToP+U5dds114fM1ZOJqMAR4aXXL5CvyPE9fiqBK/9YcwC9poIFQTEJk/EM/zyRwziziRZrg==", - "dev": true, - "requires": { - "debug": "^3.0.0", - "env-paths": "^1.0.0", - "fs-extra": "^4.0.1", - "minimist": "^1.2.0", - "nugget": "^2.0.1", - "path-exists": "^3.0.0", - "rc": "^1.2.1", - "semver": "^5.4.1", - "sumchecker": "^2.0.2" - } - }, "electron-notarize": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/electron-notarize/-/electron-notarize-0.1.1.tgz", @@ -713,12 +521,6 @@ "once": "^1.4.0" } }, - "env-paths": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-1.0.0.tgz", - "integrity": "sha1-QWgTO0K7BcOKNbGuQ5fIKYqzaeA=", - "dev": true - }, "error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -728,22 +530,16 @@ "is-arrayish": "^0.2.1" } }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, "extract-zip": { - "version": "1.6.7", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.6.7.tgz", - "integrity": "sha1-qEC0uK9kAyZMjbV/Txp0Mz74H+k=", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.7.0.tgz", + "integrity": "sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA==", "dev": true, "requires": { - "concat-stream": "1.6.2", - "debug": "2.6.9", - "mkdirp": "0.5.1", - "yauzl": "2.4.1" + "concat-stream": "^1.6.2", + "debug": "^2.6.9", + "mkdirp": "^0.5.4", + "yauzl": "^2.10.0" }, "dependencies": { "debug": { @@ -755,6 +551,21 @@ "ms": "2.0.0" } }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -763,54 +574,15 @@ } } }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true - }, - "fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", - "dev": true - }, - "fast-json-stable-stringify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", - "dev": true - }, "fd-slicer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz", - "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", "dev": true, "requires": { "pend": "~1.2.0" } }, - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "dev": true, - "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "dependencies": { - "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dev": true, - "requires": { - "pinkie-promise": "^2.0.0" - } - } - } - }, "flora-colossus": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/flora-colossus/-/flora-colossus-1.0.1.tgz", @@ -843,23 +615,6 @@ } } }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "dev": true - }, - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, "fs-extra": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", @@ -979,12 +734,6 @@ } } }, - "get-stdin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", - "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", - "dev": true - }, "get-stream": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", @@ -994,15 +743,6 @@ "pump": "^3.0.0" } }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, "glob": { "version": "7.1.4", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", @@ -1042,22 +782,6 @@ "integrity": "sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q==", "dev": true }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "dev": true - }, - "har-validator": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", - "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", - "dev": true, - "requires": { - "ajv": "^6.5.5", - "har-schema": "^2.0.0" - } - }, "hosted-git-info": { "version": "2.8.5", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.5.tgz", @@ -1070,26 +794,6 @@ "integrity": "sha512-TcIMG3qeVLgDr1TEd2XvHaTnMPwYQUQMIBLy+5pLSDKYFc7UIqj39w8EGzZkaxoLv/l2K8HaI0t5AVA+YYgUew==", "dev": true }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "indent-string": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", - "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", - "dev": true, - "requires": { - "repeating": "^2.0.0" - } - }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -1106,52 +810,16 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, - "ini": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.7.tgz", - "integrity": "sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ==", - "dev": true - }, "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", "dev": true }, - "is-finite": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", - "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true - }, - "is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", - "dev": true - }, "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", "dev": true }, "isbinaryfile": { @@ -1163,42 +831,12 @@ "buffer-alloc": "^1.2.0" } }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true - }, "json-buffer": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", "dev": true }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true - }, "jsonfile": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", @@ -1208,18 +846,6 @@ "graceful-fs": "^4.1.6" } }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "dev": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, "junk": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/junk/-/junk-3.1.0.tgz", @@ -1235,19 +861,6 @@ "json-buffer": "3.0.0" } }, - "load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" - } - }, "locate-path": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", @@ -1264,61 +877,12 @@ "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=", "dev": true }, - "loud-rejection": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", - "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", - "dev": true, - "requires": { - "currently-unhandled": "^0.4.1", - "signal-exit": "^3.0.0" - } - }, "lowercase-keys": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", "dev": true }, - "map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", - "dev": true - }, - "meow": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", - "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", - "dev": true, - "requires": { - "camelcase-keys": "^2.0.0", - "decamelize": "^1.1.2", - "loud-rejection": "^1.0.0", - "map-obj": "^1.0.1", - "minimist": "^1.1.3", - "normalize-package-data": "^2.3.4", - "object-assign": "^4.0.1", - "read-pkg-up": "^1.0.1", - "redent": "^1.0.0", - "trim-newlines": "^1.0.0" - } - }, - "mime-db": { - "version": "1.40.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz", - "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==", - "dev": true - }, - "mime-types": { - "version": "2.1.24", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz", - "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==", - "dev": true, - "requires": { - "mime-db": "1.40.0" - } - }, "mimic-response": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", @@ -1381,62 +945,6 @@ "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==", "dev": true }, - "nugget": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/nugget/-/nugget-2.0.1.tgz", - "integrity": "sha1-IBCVpIfhrTYIGzQy+jytpPjQcbA=", - "dev": true, - "requires": { - "debug": "^2.1.3", - "minimist": "^1.1.0", - "pretty-bytes": "^1.0.2", - "progress-stream": "^1.1.0", - "request": "^2.45.0", - "single-line-log": "^1.1.2", - "throttleit": "0.0.2" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true - }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true - }, - "object-keys": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz", - "integrity": "sha1-KKaq50KN0sOpLz2V8hM13SBOAzY=", - "dev": true - }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -1511,50 +1019,18 @@ "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", "dev": true }, - "path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, "pend": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", "dev": true }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "dev": true - }, "pify": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", "dev": true }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", - "dev": true - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "dev": true, - "requires": { - "pinkie": "^2.0.0" - } - }, "plist": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/plist/-/plist-3.0.1.tgz", @@ -1572,38 +1048,12 @@ "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", "dev": true }, - "pretty-bytes": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-1.0.4.tgz", - "integrity": "sha1-CiLoIQYJrTVUL4yNXSFZr/B1HIQ=", - "dev": true, - "requires": { - "get-stdin": "^4.0.1", - "meow": "^3.1.0" - } - }, "process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true }, - "progress-stream": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/progress-stream/-/progress-stream-1.2.0.tgz", - "integrity": "sha1-LNPP6jO6OonJwSHsM0er6asSX3c=", - "dev": true, - "requires": { - "speedometer": "~0.1.2", - "through2": "~0.2.3" - } - }, - "psl": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.4.0.tgz", - "integrity": "sha512-HZzqCGPecFLyoRj5HLfuDSKYTJkAfB5thKBIkRHtGjWwY7p1dAyveIbXIq4tO0KYfDF2tHqPUgY9SDnGm00uFw==", - "dev": true - }, "pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", @@ -1614,114 +1064,25 @@ "once": "^1.3.1" } }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true - }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", - "dev": true - }, - "rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dev": true, - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - } - }, "rcedit": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/rcedit/-/rcedit-2.0.0.tgz", "integrity": "sha512-XcFGyEBjhWSsud+R8elwQtGBbVkCf7tAiad+nXo5jc6l2rMf46NfGNwjnmBNneBIZDfq+Npf8lwP371JTONfrw==", "dev": true }, - "read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", - "dev": true, - "requires": { - "load-json-file": "^1.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^1.0.0" - } - }, - "read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", - "dev": true, - "requires": { - "find-up": "^1.0.0", - "read-pkg": "^1.0.0" - } - }, "readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, "requires": { "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "redent": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", - "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", - "dev": true, - "requires": { - "indent-string": "^2.1.0", - "strip-indent": "^1.0.1" - } - }, - "repeating": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", - "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", - "dev": true, - "requires": { - "is-finite": "^1.0.0" - } - }, - "request": { - "version": "2.88.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", - "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", - "dev": true, - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.0", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.4.3", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, "require-directory": { @@ -1762,15 +1123,9 @@ } }, "safe-buffer": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", - "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==", - "dev": true - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true }, "sanitize-filename": { @@ -1793,21 +1148,6 @@ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" }, - "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", - "dev": true - }, - "single-line-log": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/single-line-log/-/single-line-log-1.1.2.tgz", - "integrity": "sha1-wvg/Jzo+GhbtsJlWYdoO1e8DM2Q=", - "dev": true, - "requires": { - "string-width": "^1.0.1" - } - }, "spdx-correct": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", @@ -1840,119 +1180,13 @@ "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==", "dev": true }, - "speedometer": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/speedometer/-/speedometer-0.1.4.tgz", - "integrity": "sha1-mHbb0qFp0xFUAtSObqYynIgWpQ0=", - "dev": true - }, - "sshpk": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", - "dev": true, - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dev": true, - "requires": { - "is-utf8": "^0.2.0" - } - }, - "strip-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", - "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", - "dev": true, - "requires": { - "get-stdin": "^4.0.1" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true - }, - "sumchecker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-2.0.2.tgz", - "integrity": "sha1-D0LBDl0F2l1C7qPlbDOZo31sWz4=", - "dev": true, - "requires": { - "debug": "^2.2.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "throttleit": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-0.0.2.tgz", - "integrity": "sha1-z+34jmDADdlpe2H90qg0OptoDq8=", - "dev": true - }, - "through2": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.2.3.tgz", - "integrity": "sha1-6zKE2k6jEbbMis42U3SKUqvyWj8=", - "dev": true, - "requires": { - "readable-stream": "~1.1.9", - "xtend": "~2.1.1" + "safe-buffer": "~5.1.0" } }, "tmp": { @@ -1980,30 +1214,6 @@ "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", "dev": true }, - "tough-cookie": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", - "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", - "dev": true, - "requires": { - "psl": "^1.1.24", - "punycode": "^1.4.1" - }, - "dependencies": { - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true - } - } - }, - "trim-newlines": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", - "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", - "dev": true - }, "truncate-utf8-bytes": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", @@ -2013,21 +1223,6 @@ "utf8-byte-length": "^1.0.1" } }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true, - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true - }, "typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", @@ -2040,15 +1235,6 @@ "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", "dev": true }, - "uri-js": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", - "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, "url-parse-lax": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", @@ -2070,12 +1256,6 @@ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", "dev": true }, - "uuid": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz", - "integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ==", - "dev": true - }, "validate-npm-package-license": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", @@ -2086,17 +1266,6 @@ "spdx-expression-parse": "^3.0.0" } }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, "which-module": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", @@ -2160,15 +1329,6 @@ "integrity": "sha1-1QH5ezvbQDr4757MIFcxh6rawOk=", "dev": true }, - "xtend": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz", - "integrity": "sha1-bv7MKk2tjmlixJAbM3znuoe10os=", - "dev": true, - "requires": { - "object-keys": "~0.4.0" - } - }, "y18n": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", @@ -2282,12 +1442,13 @@ } }, "yauzl": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.4.1.tgz", - "integrity": "sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU=", + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", "dev": true, "requires": { - "fd-slicer": "~1.0.1" + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" } } } diff --git a/screenshare/package.json b/screenshare/package.json index 372679082f..e92e20a073 100644 --- a/screenshare/package.json +++ b/screenshare/package.json @@ -18,7 +18,7 @@ }, "homepage": "https://github.com/highfidelity/hifi#readme", "devDependencies": { - "electron": "^6.0.12", + "electron": "^7.2.4", "electron-packager": "^14.0.6" }, "dependencies": { From 5c9b1edb86bb435c1c41053b614a61073319065a Mon Sep 17 00:00:00 2001 From: Kalila L Date: Mon, 14 Dec 2020 01:03:36 -0500 Subject: [PATCH 016/152] Convert QString to QJsonObject. --- domain-server/src/DomainServer.cpp | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/domain-server/src/DomainServer.cpp b/domain-server/src/DomainServer.cpp index 5d72f71797..1d7ef7fcfc 100644 --- a/domain-server/src/DomainServer.cpp +++ b/domain-server/src/DomainServer.cpp @@ -1507,18 +1507,19 @@ QJsonObject jsonForDomainSocketUpdate(const HifiSockAddr& socket) { } void DomainServer::performIPAddressPortUpdate(const HifiSockAddr& newPublicSockAddr) { + const QString& DOMAIN_SERVER_SETTINGS_KEY = "domain_server"; const QString& publicSocketAddress = newPublicSockAddr.getAddress().toString(); const int publicSocketPort = newPublicSockAddr.getPort(); sendHeartbeatToMetaverse(publicSocketAddress, publicSocketPort); - QString newSettingsJSON = QString("{\"domain_server\": { \"%1\": \"%2\", \"%3\": %4}}") - .arg(PUBLIC_SOCKET_ADDRESS_KEY) - .arg(publicSocketAddress) - .arg(PUBLIC_SOCKET_PORT_KEY) - .arg(publicSocketPort); - auto settingsDocument = QJsonDocument::fromJson(newSettingsJSON.toUtf8()); - _settingsManager.recurseJSONObjectAndOverwriteSettings(settingsDocument.object(), DomainSettings); + QJsonObject rootObject; + QJsonObject domainServerObject; + domainServerObject.insert(PUBLIC_SOCKET_ADDRESS_KEY, publicSocketAddress); + domainServerObject.insert(PUBLIC_SOCKET_PORT_KEY, publicSocketPort); + rootObject.insert(DOMAIN_SERVER_SETTINGS_KEY, domainServerObject); + QJsonDocument doc(rootObject); + _settingsManager.recurseJSONObjectAndOverwriteSettings(rootObject, DomainSettings); } void DomainServer::sendHeartbeatToMetaverse(const QString& networkAddress, const int port) { From 5e17639bed67e2e46da6110c1a0ddd7e72c475c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20Gro=C3=9F?= Date: Tue, 15 Dec 2020 02:43:39 +0100 Subject: [PATCH 017/152] Fix building with GLES --- cmake/ports/glad/portfile.cmake | 3 ++- libraries/gpu-gl-common/src/gpu/gl/GLBackend.cpp | 8 ++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/cmake/ports/glad/portfile.cmake b/cmake/ports/glad/portfile.cmake index 54b1d91c89..c13306ed80 100644 --- a/cmake/ports/glad/portfile.cmake +++ b/cmake/ports/glad/portfile.cmake @@ -3,11 +3,12 @@ vcpkg_check_linkage(ONLY_STATIC_LIBRARY) file(READ "${VCPKG_ROOT_DIR}/_env/EXTERNAL_BUILD_ASSETS.txt" EXTERNAL_BUILD_ASSETS) -if (ANDROID) +if (ANDROID OR ${GLES_OPTION} ON) vcpkg_download_distfile( SOURCE_ARCHIVE URLS ${EXTERNAL_BUILD_ASSETS}/dependencies/glad/glad32es.zip SHA512 2e02ac633eed8f2ba2adbf96ea85d08998f48dd2e9ec9a88ec3c25f48eaf1405371d258066327c783772fcb3793bdb82bd7375fdabb2ba5e2ce0835468b17f65 + FILENAME glad32es.zip ) else() # else Linux desktop diff --git a/libraries/gpu-gl-common/src/gpu/gl/GLBackend.cpp b/libraries/gpu-gl-common/src/gpu/gl/GLBackend.cpp index 38aca093cd..aa5d3f8ca1 100644 --- a/libraries/gpu-gl-common/src/gpu/gl/GLBackend.cpp +++ b/libraries/gpu-gl-common/src/gpu/gl/GLBackend.cpp @@ -153,7 +153,7 @@ void GLBackend::init() { if (vendor.contains("NVIDIA") ) { qCDebug(gpugllogging) << "NVIDIA card detected"; -#if !defined(Q_OS_ANDROID) +#if !defined(Q_OS_ANDROID) == !defined(USE_GLES) GL_GET_INTEGER(GPU_MEMORY_INFO_DEDICATED_VIDMEM_NVX); GL_GET_INTEGER(GPU_MEMORY_INFO_TOTAL_AVAILABLE_MEMORY_NVX); GL_GET_INTEGER(GPU_MEMORY_INFO_CURRENT_AVAILABLE_VIDMEM_NVX); @@ -170,7 +170,7 @@ void GLBackend::init() { } else if (vendor.contains("ATI")) { qCDebug(gpugllogging) << "ATI card detected"; -#if !defined(Q_OS_ANDROID) +#if !defined(Q_OS_ANDROID) == !defined(USE_GLES) GL_GET_INTEGER(TEXTURE_FREE_MEMORY_ATI); #endif @@ -225,12 +225,12 @@ size_t GLBackend::getAvailableMemory() { switch( _videoCard ) { case NVIDIA: -#if !defined(Q_OS_ANDROID) +#if !defined(Q_OS_ANDROID) == !defined(USE_GLES) glGetIntegerv(GL_GPU_MEMORY_INFO_CURRENT_AVAILABLE_VIDMEM_NVX, &mem[0]); #endif return mem[0] * BYTES_PER_KIB; case ATI: -#if !defined(Q_OS_ANDROID) +#if !defined(Q_OS_ANDROID) == !defined(USE_GLES) glGetIntegerv(GL_TEXTURE_FREE_MEMORY_ATI, &mem[0]); #endif return mem[0] * BYTES_PER_KIB; From 0cebb700fbb61753cb992ee750cb4dbbcc4f2d77 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20Gro=C3=9F?= Date: Tue, 15 Dec 2020 04:15:44 +0100 Subject: [PATCH 018/152] Change conditionals according to review --- libraries/gpu-gl-common/src/gpu/gl/GLBackend.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/libraries/gpu-gl-common/src/gpu/gl/GLBackend.cpp b/libraries/gpu-gl-common/src/gpu/gl/GLBackend.cpp index aa5d3f8ca1..8126988294 100644 --- a/libraries/gpu-gl-common/src/gpu/gl/GLBackend.cpp +++ b/libraries/gpu-gl-common/src/gpu/gl/GLBackend.cpp @@ -153,7 +153,7 @@ void GLBackend::init() { if (vendor.contains("NVIDIA") ) { qCDebug(gpugllogging) << "NVIDIA card detected"; -#if !defined(Q_OS_ANDROID) == !defined(USE_GLES) +#if !defined(Q_OS_ANDROID) && !defined(USE_GLES) GL_GET_INTEGER(GPU_MEMORY_INFO_DEDICATED_VIDMEM_NVX); GL_GET_INTEGER(GPU_MEMORY_INFO_TOTAL_AVAILABLE_MEMORY_NVX); GL_GET_INTEGER(GPU_MEMORY_INFO_CURRENT_AVAILABLE_VIDMEM_NVX); @@ -170,7 +170,7 @@ void GLBackend::init() { } else if (vendor.contains("ATI")) { qCDebug(gpugllogging) << "ATI card detected"; -#if !defined(Q_OS_ANDROID) == !defined(USE_GLES) +#if !defined(Q_OS_ANDROID) && !defined(USE_GLES) GL_GET_INTEGER(TEXTURE_FREE_MEMORY_ATI); #endif @@ -225,12 +225,12 @@ size_t GLBackend::getAvailableMemory() { switch( _videoCard ) { case NVIDIA: -#if !defined(Q_OS_ANDROID) == !defined(USE_GLES) +#if !defined(Q_OS_ANDROID) && !defined(USE_GLES) glGetIntegerv(GL_GPU_MEMORY_INFO_CURRENT_AVAILABLE_VIDMEM_NVX, &mem[0]); #endif return mem[0] * BYTES_PER_KIB; case ATI: -#if !defined(Q_OS_ANDROID) == !defined(USE_GLES) +#if !defined(Q_OS_ANDROID) && !defined(USE_GLES) glGetIntegerv(GL_TEXTURE_FREE_MEMORY_ATI, &mem[0]); #endif return mem[0] * BYTES_PER_KIB; From 3485efd8081c665982ac6104aea86d12fb90503d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20Gro=C3=9F?= Date: Tue, 15 Dec 2020 05:00:58 +0100 Subject: [PATCH 019/152] Fix failing builds --- CMakeLists.txt | 12 +++++++++++- cmake/ports/glad/portfile.cmake | 3 ++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 424fbdc940..33efb2f240 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -41,6 +41,17 @@ endif() file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/_env/EXTERNAL_BUILD_ASSETS.txt" "${EXTERNAL_BUILD_ASSETS}") MESSAGE(STATUS "EXTERNAL_BUILD_ASSETS: ${EXTERNAL_BUILD_ASSETS}") +set(GLES_OPTION OFF) + +if( DEFINED ENV{USE_GLES} ) + set(USE_GLES "$ENV{USE_GLES}") + set(GLES_OPTION "$ENV{USE_GLES}") +endif() + +# Will affect VCPKG dependencies +file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/_env/USE_GLES.txt" "${GLES_OPTION}") +MESSAGE(STATUS "GLES_OPTION: ${GLES_OPTION}") + include("${CMAKE_CURRENT_SOURCE_DIR}/cmake/macros/TargetPython.cmake") target_python() @@ -129,7 +140,6 @@ set(BUILD_TESTS_OPTION OFF) set(BUILD_MANUAL_TESTS_OPTION ${BUILD_TESTS_OPTION}) set(BUILD_TOOLS_OPTION ON) set(BUILD_INSTALLER_OPTION ON) -set(GLES_OPTION OFF) set(DISABLE_QML_OPTION OFF) set(DOWNLOAD_SERVERLESS_CONTENT_OPTION OFF) diff --git a/cmake/ports/glad/portfile.cmake b/cmake/ports/glad/portfile.cmake index c13306ed80..0c2106e581 100644 --- a/cmake/ports/glad/portfile.cmake +++ b/cmake/ports/glad/portfile.cmake @@ -2,8 +2,9 @@ include(vcpkg_common_functions) vcpkg_check_linkage(ONLY_STATIC_LIBRARY) file(READ "${VCPKG_ROOT_DIR}/_env/EXTERNAL_BUILD_ASSETS.txt" EXTERNAL_BUILD_ASSETS) +file(READ "${VCPKG_ROOT_DIR}/_env/USE_GLES.txt" USE_GLES) -if (ANDROID OR ${GLES_OPTION} ON) +if (ANDROID OR USE_GLES) vcpkg_download_distfile( SOURCE_ARCHIVE URLS ${EXTERNAL_BUILD_ASSETS}/dependencies/glad/glad32es.zip From db9a4143dfe355b8cf958a620fb720557340f6d8 Mon Sep 17 00:00:00 2001 From: Kalila <69767640+digisomni@users.noreply.github.com> Date: Tue, 15 Dec 2020 01:34:47 -0500 Subject: [PATCH 020/152] Apply suggestions from code review Co-authored-by: kasenvr <52365539+kasenvr@users.noreply.github.com> --- BUILD_ANDROID.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/BUILD_ANDROID.md b/BUILD_ANDROID.md index 32f8242523..1d93fe6248 100644 --- a/BUILD_ANDROID.md +++ b/BUILD_ANDROID.md @@ -83,13 +83,13 @@ Add these lines to `gradle.properties` * Navigate to the `project-athena` repository you cloned and choose the `android` folder and select _OK_ * Wait for Gradle to sync (this should take around 20 minutes the first time) * If a dialog pops open saying "Plugin Update Recommeded" dialog, do not click update, just click X on the top right to close. -* In the _Projet_ window click on the project you wish to build (i.e. "questInterface") then click _Build_ in the top menu and choose _Make Module 'questInterface'_ -* By default this will build the "debug" apk, you can change this by opening the _Build Varients_ window along the left side and select other build types like "release" -* Your newly build APK should reside in project-athena\android\apps\questInterface\release (if you chose release) +* In the _Project_ window click on the project you wish to build (i.e. "questInterface") then click _Build_ in the top menu and choose _Make Module 'questInterface'_ +* By default this will build the "debug" apk, you can change this by opening the _Build Variants_ window along the left side and select other build types such as "release". +* Your newly build APK should reside in `project-athena\android\apps\questInterface\release` (if you chose release). ### Running a Module -You are free to use "abd" command line or other development tools to install (sideload on quest) your newly build APK, or you can follow the instrutions below to load the APK via Android Studio. +You are free to use "abd" command line or other development tools to install (sideload on Quest) your newly built APK, or you can follow the instructions below to load the APK via Android Studio. * In the toolbar at the top of Android Studio, next to the green hammer icon, you should see a dropdown menu. * You may already see a configuration for the module you are trying to build. If so, select it. @@ -129,7 +129,7 @@ Naviagte to 'Edit the System Environment Variables' Through the start menu. * Click on 'Advanced' tab, then 'Environment Variables' * Select 'New' under System variables * Set "Variable name" to QT_CMAKE_PREFIX_PATH -* Set "Variable value" the directory that your android build placed the cmake 3.6.4 library cmake directory (i.e. android\qt\lib\cmake) +* Set "Variable value" to the directory that your android build placed the cmake 3.6.4 library cmake directory (i.e. android\qt\lib\cmake). Some things you can try if you want to do a clean build @@ -138,4 +138,4 @@ Some things you can try if you want to do a clean build * In Android Studio, click _File > Invalidate Caches / Restart_ and select _Invalidate and Restart_ If you see lots of "couldn't acquire lock" errors, -* Open Task Manager and close any running Clang / Gradle processes \ No newline at end of file +* Open Task Manager and close any running Clang / Gradle processes From daf3ab3e928c242951883cbc638e388c1595e93e Mon Sep 17 00:00:00 2001 From: Kalila <69767640+digisomni@users.noreply.github.com> Date: Tue, 15 Dec 2020 01:42:37 -0500 Subject: [PATCH 021/152] Apply suggestions from code review --- BUILD_ANDROID.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/BUILD_ANDROID.md b/BUILD_ANDROID.md index 1d93fe6248..c0eecd3b33 100644 --- a/BUILD_ANDROID.md +++ b/BUILD_ANDROID.md @@ -1,6 +1,6 @@ # Build Android -*Last Updated on October 9, 2020* +*Last Updated on December 15, 2020* Please read the [general build guide](BUILD.md) for information on building other platforms. Only Android specific instructions are found in this file. **Note that these instructions apply to building for Oculus Quest.** @@ -36,7 +36,7 @@ If Android Studio pops open the "Plugin Update Recommeded" dialog, do not click ## Environment ### Create a keystore in Android Studio -Follow the directions [here](https://developer.android.com/studio/publish/app-signing#generate-key) to create a keystore file. You can save it anywhere (preferably not in the `project-athena` folder). +Follow the directions [here](https://developer.android.com/studio/publish/app-signing#generate-key) to create a keystore file. You can save it anywhere (preferably not in the `vircadia` folder). ### Set up machine specific Gradle properties @@ -80,16 +80,16 @@ Add these lines to `gradle.properties` * Open Android Studio * Choose _Open an existing Android Studio project_ -* Navigate to the `project-athena` repository you cloned and choose the `android` folder and select _OK_ +* Navigate to the `vircadia` repository that had you cloned and choose the `android` folder and select _OK_ * Wait for Gradle to sync (this should take around 20 minutes the first time) * If a dialog pops open saying "Plugin Update Recommeded" dialog, do not click update, just click X on the top right to close. * In the _Project_ window click on the project you wish to build (i.e. "questInterface") then click _Build_ in the top menu and choose _Make Module 'questInterface'_ * By default this will build the "debug" apk, you can change this by opening the _Build Variants_ window along the left side and select other build types such as "release". -* Your newly build APK should reside in `project-athena\android\apps\questInterface\release` (if you chose release). +* Your newly build APK should reside in `vircadia\android\apps\questInterface\release` (if you chose release). ### Running a Module -You are free to use "abd" command line or other development tools to install (sideload on Quest) your newly built APK, or you can follow the instructions below to load the APK via Android Studio. +You are free to use the "adb" command line or other development tools to install (sideload on Quest) your newly built APK, or you can follow the instructions below to load the APK via Android Studio. * In the toolbar at the top of Android Studio, next to the green hammer icon, you should see a dropdown menu. * You may already see a configuration for the module you are trying to build. If so, select it. @@ -123,17 +123,17 @@ To view a more complete debug log, * Click the icon with the two overlapping squares in the upper left corner of the tab where the sync is running (hover text says _Toggle view_) * To change verbosity, click _File > Settings_. Under _Build, Execution, Deployment > Compiler_ you can add command-line flags, as per Gradle documentation -If you encounter cmake issues, try adding the following system environment variable: +If you encounter CMake issues, try adding the following system environment variable: -Naviagte to 'Edit the System Environment Variables' Through the start menu. +With your start menu, search for 'Edit the System Environment Variables' and open it. * Click on 'Advanced' tab, then 'Environment Variables' * Select 'New' under System variables * Set "Variable name" to QT_CMAKE_PREFIX_PATH -* Set "Variable value" to the directory that your android build placed the cmake 3.6.4 library cmake directory (i.e. android\qt\lib\cmake). +* Set "Variable value" to the directory that your android build placed the CMake 3.6.4 library CMake directory (i.e. android\qt\lib\cmake). Some things you can try if you want to do a clean build -* Delete the `build` and `.externalNativeBuild` folders from the folder for each module you're building (for example, `project-athena/android/apps/interface`) +* Delete the `build` and `.externalNativeBuild` folders from the folder for each module you're building (for example, `vircadia/android/apps/interface`) * If you have set your `HIFI_VCPKG_ROOT` environment variable, delete the contents of that directory; otherwise, delete `AppData/Local/Temp/hifi` * In Android Studio, click _File > Invalidate Caches / Restart_ and select _Invalidate and Restart_ From 65fb1320ccf4827e22b1b575527871ca52f9627c Mon Sep 17 00:00:00 2001 From: ArcadeFever Date: Tue, 15 Dec 2020 00:04:59 -0800 Subject: [PATCH 022/152] Upgraded Oculus SDKs to latest --- cmake/macros/TargetOculusMobile.cmake | 4 ++-- hifi_android.py | 12 ++++++------ libraries/oculusMobile/src/ovr/Helpers.h | 6 +++--- libraries/oculusMobile/src/ovr/VrHandler.cpp | 2 +- .../src/OculusMobileControllerManager.cpp | 18 +++++++++--------- 5 files changed, 21 insertions(+), 21 deletions(-) diff --git a/cmake/macros/TargetOculusMobile.cmake b/cmake/macros/TargetOculusMobile.cmake index f5229845a9..34d5e33058 100644 --- a/cmake/macros/TargetOculusMobile.cmake +++ b/cmake/macros/TargetOculusMobile.cmake @@ -1,6 +1,6 @@ macro(target_oculus_mobile) - set(INSTALL_DIR ${HIFI_ANDROID_PRECOMPILED}/oculus_1.22/VrApi) + set(INSTALL_DIR ${HIFI_ANDROID_PRECOMPILED}/ovr_sdk_mobile_1.37.0/VrApi) # Mobile SDK set(OVR_MOBILE_INCLUDE_DIRS ${INSTALL_DIR}/Include) @@ -12,7 +12,7 @@ macro(target_oculus_mobile) target_link_libraries(${TARGET_NAME} ${OVR_MOBILE_LIBRARIES}) # Platform SDK - set(INSTALL_DIR ${HIFI_ANDROID_PRECOMPILED}/oculusPlatform) + set(INSTALL_DIR ${HIFI_ANDROID_PRECOMPILED}/ovr_platform_sdk_23.0.0) set(OVR_PLATFORM_INCLUDE_DIRS ${INSTALL_DIR}/Include) target_include_directories(${TARGET_NAME} PRIVATE ${OVR_PLATFORM_INCLUDE_DIRS}) set(OVR_PLATFORM_LIBRARIES ${INSTALL_DIR}/Android/libs/arm64-v8a/libovrplatformloader.so) diff --git a/hifi_android.py b/hifi_android.py index 06640390d4..07ea00d270 100644 --- a/hifi_android.py +++ b/hifi_android.py @@ -39,15 +39,15 @@ ANDROID_PACKAGES = { 'sharedLibFolder': 'lib', 'includeLibs': ['libnvtt.so', 'libnvmath.so', 'libnvimage.so', 'libnvcore.so'] }, - 'oculus_1.22': { - 'file': 'ovr_sdk_mobile_1.22.zip', - 'checksum': '1ac3c5b0521e5406f287f351015daff8', + 'ovr_sdk_mobile_1.37.0': { + 'file': 'ovr_sdk_mobile_1.37.0.zip', + 'checksum': '6040e1966f335a3e5015295154cd7383', 'sharedLibFolder': 'VrApi/Libs/Android/arm64-v8a/Release', 'includeLibs': ['libvrapi.so'] }, - 'oculusPlatform': { - 'file': 'OVRPlatformSDK_v1.34.0.zip', - 'checksum': '16e4c5f39520f122bc49cb6d5bb88289', + 'ovr_platform_sdk_23.0.0': { + 'file': 'ovr_platform_sdk_23.0.0.zip', + 'checksum': '29d02b560f60d0fa7b8a64cd965dd55b', 'sharedLibFolder': 'Android/libs/arm64-v8a', 'includeLibs': ['libovrplatformloader.so'] }, diff --git a/libraries/oculusMobile/src/ovr/Helpers.h b/libraries/oculusMobile/src/ovr/Helpers.h index 2bd0b7f603..10058dbac8 100644 --- a/libraries/oculusMobile/src/ovr/Helpers.h +++ b/libraries/oculusMobile/src/ovr/Helpers.h @@ -31,9 +31,9 @@ static inline void for_each_eye(const std::function& f) { f(VRAPI_EYE_RIGHT); } -static inline void for_each_hand(const std::function& f) { - f(VRAPI_HAND_LEFT); - f(VRAPI_HAND_RIGHT); +static inline void for_each_hand(const std::function& f) { + f(VRAPI_TRACKED_DEVICE_HAND_LEFT); + f(VRAPI_TRACKED_DEVICE_HAND_RIGHT); } static inline glm::mat4 toGlm(const ovrMatrix4f& om) { diff --git a/libraries/oculusMobile/src/ovr/VrHandler.cpp b/libraries/oculusMobile/src/ovr/VrHandler.cpp index aff1f256b5..1fe4d19401 100644 --- a/libraries/oculusMobile/src/ovr/VrHandler.cpp +++ b/libraries/oculusMobile/src/ovr/VrHandler.cpp @@ -324,7 +324,7 @@ struct VrSurface : public TaskQueue { vrapi_SetTrackingSpace( session, VRAPI_TRACKING_SPACE_LOCAL); vrapi_SetPerfThread(session, VRAPI_PERF_THREAD_TYPE_RENDERER, gettid()); vrapi_SetClockLevels(session, 2, 4); - vrapi_SetExtraLatencyMode(session, VRAPI_EXTRA_LATENCY_MODE_DYNAMIC); + vrapi_SetExtraLatencyMode(session, VRAPI_EXTRA_LATENCY_MODE_ON); // Generates a warning on the quest: "vrapi_SetDisplayRefreshRate: Dynamic Display Refresh Rate not supported" // vrapi_SetDisplayRefreshRate(session, 72); }); diff --git a/libraries/oculusMobilePlugin/src/OculusMobileControllerManager.cpp b/libraries/oculusMobilePlugin/src/OculusMobileControllerManager.cpp index 705045b517..54a796954e 100644 --- a/libraries/oculusMobilePlugin/src/OculusMobileControllerManager.cpp +++ b/libraries/oculusMobilePlugin/src/OculusMobileControllerManager.cpp @@ -31,7 +31,7 @@ const quint64 LOST_TRACKING_DELAY = 3000000; namespace ovr { - controller::Pose toControllerPose(ovrHandedness hand, const ovrRigidBodyPosef& handPose) { + controller::Pose toControllerPose(ovrTrackedDeviceTypeId hand, const ovrRigidBodyPosef& handPose) { // When the sensor-to-world rotation is identity the coordinate axes look like this: // // user @@ -111,7 +111,7 @@ namespace ovr { return pose; } - controller::Pose toControllerPose(ovrHandedness hand, + controller::Pose toControllerPose(ovrTrackedDeviceTypeId hand, const ovrRigidBodyPosef& handPose, const ovrRigidBodyPosef& lastHandPose) { static const glm::quat yFlip = glm::angleAxis(PI, Vectors::UNIT_Y); @@ -165,9 +165,9 @@ public: private: void handlePose(float deltaTime, const controller::InputCalibrationData& inputCalibrationData, - ovrHandedness hand, const ovrRigidBodyPosef& handPose); + ovrTrackedDeviceTypeId hand, const ovrRigidBodyPosef& handPose); void handleRotationForUntrackedHand(const controller::InputCalibrationData& inputCalibrationData, - ovrHandedness hand, const ovrRigidBodyPosef& handPose); + ovrTrackedDeviceTypeId hand, const ovrRigidBodyPosef& handPose); void handleHeadPose(float deltaTime, const controller::InputCalibrationData& inputCalibrationData, const ovrRigidBodyPosef& headPose); @@ -379,9 +379,9 @@ void OculusMobileInputDevice::update(float deltaTime, const controller::InputCal handleHeadPose(deltaTime, inputCalibrationData, _headTracking.HeadPose); static const auto REQUIRED_HAND_STATUS = VRAPI_TRACKING_STATUS_ORIENTATION_TRACKED | VRAPI_TRACKING_STATUS_POSITION_TRACKED; - ovr::for_each_hand([&](ovrHandedness hand) { - size_t handIndex = (hand == VRAPI_HAND_LEFT) ? 0 : 1; - int controller = (hand == VRAPI_HAND_LEFT) ? controller::LEFT_HAND : controller::RIGHT_HAND; + ovr::for_each_hand([&](ovrTrackedDeviceTypeId hand) { + size_t handIndex = (hand == VRAPI_TRACKED_DEVICE_HAND_LEFT) ? 0 : 1; + int controller = (hand == VRAPI_TRACKED_DEVICE_HAND_LEFT) ? controller::LEFT_HAND : controller::RIGHT_HAND; auto& handData = _hands[handIndex]; const auto& tracking = handData.tracking; ++numTrackedControllers; @@ -476,7 +476,7 @@ void OculusMobileInputDevice::focusOutEvent() { void OculusMobileInputDevice::handlePose(float deltaTime, const controller::InputCalibrationData& inputCalibrationData, - ovrHandedness hand, const ovrRigidBodyPosef& handPose) { + ovrTrackedDeviceTypeId hand, const ovrRigidBodyPosef& handPose) { auto poseId = (hand == VRAPI_HAND_LEFT) ? controller::LEFT_HAND : controller::RIGHT_HAND; auto& pose = _poseStateMap[poseId]; pose = ovr::toControllerPose(hand, handPose); @@ -507,7 +507,7 @@ void OculusMobileInputDevice::handleHeadPose(float deltaTime, } void OculusMobileInputDevice::handleRotationForUntrackedHand(const controller::InputCalibrationData& inputCalibrationData, - ovrHandedness hand, const ovrRigidBodyPosef& handPose) { + ovrTrackedDeviceTypeId hand, const ovrRigidBodyPosef& handPose) { auto poseId = (hand == VRAPI_HAND_LEFT ? controller::LEFT_HAND : controller::RIGHT_HAND); auto& pose = _poseStateMap[poseId]; const auto& lastHandPose = (hand == VRAPI_HAND_LEFT) ? _hands[0].lastPose : _hands[1].lastPose; From 2a849358f8f0ea784d30d054e477ffe6af825237 Mon Sep 17 00:00:00 2001 From: Kalila <69767640+digisomni@users.noreply.github.com> Date: Tue, 15 Dec 2020 04:13:18 -0500 Subject: [PATCH 023/152] Update BUILD_ANDROID.md --- BUILD_ANDROID.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/BUILD_ANDROID.md b/BUILD_ANDROID.md index c0eecd3b33..47a3a4434b 100644 --- a/BUILD_ANDROID.md +++ b/BUILD_ANDROID.md @@ -29,9 +29,9 @@ From the _SDK Tools_ tab, select the following Still in the _SDK Tools_ tab, check off _Show Package Details_ at the bottom. Select CMake 3.6.4. Do this even if you have a separate CMake installation. Also, make sure the NDK installed version is 18 (or higher). -Now go back to _File_ then _Project Structure_ then under _Project_ set the Android Gradel Plugin Version to `3.2.1` and Gradel Version to `4.10.1`. +Now go back to _File_ then _Project Structure_ then under _Project_ set the Android Gradle Plugin Version to `3.2.1` and Gradle Version to `4.10.1`. -If Android Studio pops open the "Plugin Update Recommeded" dialog, do not click update, just click X on the top right to close. Later versions of the gradel plugin have known issues with cz.malohlava. +If Android Studio pops open the "Plugin Update Recommeded" dialog, do not click update, just click X on the top right to close. Later versions of the Gradle plugin have known issues with cz.malohlava. ## Environment From 4e18382089508a89266360a9456dc35479f9d575 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20Gro=C3=9F?= Date: Tue, 15 Dec 2020 13:53:17 +0100 Subject: [PATCH 024/152] Work around android not building with set glad32es.zip filename --- cmake/ports/glad/portfile.cmake | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/cmake/ports/glad/portfile.cmake b/cmake/ports/glad/portfile.cmake index 0c2106e581..bb6a26a40e 100644 --- a/cmake/ports/glad/portfile.cmake +++ b/cmake/ports/glad/portfile.cmake @@ -4,7 +4,13 @@ vcpkg_check_linkage(ONLY_STATIC_LIBRARY) file(READ "${VCPKG_ROOT_DIR}/_env/EXTERNAL_BUILD_ASSETS.txt" EXTERNAL_BUILD_ASSETS) file(READ "${VCPKG_ROOT_DIR}/_env/USE_GLES.txt" USE_GLES) -if (ANDROID OR USE_GLES) +if (ANDROID) + vcpkg_download_distfile( + SOURCE_ARCHIVE + URLS ${EXTERNAL_BUILD_ASSETS}/dependencies/glad/glad32es.zip + SHA512 2e02ac633eed8f2ba2adbf96ea85d08998f48dd2e9ec9a88ec3c25f48eaf1405371d258066327c783772fcb3793bdb82bd7375fdabb2ba5e2ce0835468b17f65 + ) +elseif (USE_GLES) vcpkg_download_distfile( SOURCE_ARCHIVE URLS ${EXTERNAL_BUILD_ASSETS}/dependencies/glad/glad32es.zip From dcd26c8ad6803e32161061d1aa4883d0fd38bb0f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20Gro=C3=9F?= Date: Tue, 15 Dec 2020 21:19:49 +0100 Subject: [PATCH 025/152] Add comment about `FILENAME` being missing from ANDROID --- cmake/ports/glad/portfile.cmake | 1 + 1 file changed, 1 insertion(+) diff --git a/cmake/ports/glad/portfile.cmake b/cmake/ports/glad/portfile.cmake index bb6a26a40e..6e3118b31e 100644 --- a/cmake/ports/glad/portfile.cmake +++ b/cmake/ports/glad/portfile.cmake @@ -4,6 +4,7 @@ vcpkg_check_linkage(ONLY_STATIC_LIBRARY) file(READ "${VCPKG_ROOT_DIR}/_env/EXTERNAL_BUILD_ASSETS.txt" EXTERNAL_BUILD_ASSETS) file(READ "${VCPKG_ROOT_DIR}/_env/USE_GLES.txt" USE_GLES) +# GitHub Actions Android builds fail with `FILENAME` set while desktop builds with GLES fail without a set `FILENAME`. if (ANDROID) vcpkg_download_distfile( SOURCE_ARCHIVE From b416ca1e174bc5cd530015b8bcf44cfb7d0cc047 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20Gro=C3=9F?= Date: Wed, 16 Dec 2020 16:50:54 +0100 Subject: [PATCH 026/152] Simplify code according to review --- CMakeLists.txt | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 33efb2f240..f111f482ae 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -41,12 +41,7 @@ endif() file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/_env/EXTERNAL_BUILD_ASSETS.txt" "${EXTERNAL_BUILD_ASSETS}") MESSAGE(STATUS "EXTERNAL_BUILD_ASSETS: ${EXTERNAL_BUILD_ASSETS}") -set(GLES_OPTION OFF) - -if( DEFINED ENV{USE_GLES} ) - set(USE_GLES "$ENV{USE_GLES}") - set(GLES_OPTION "$ENV{USE_GLES}") -endif() +set(GLES_OPTION "$ENV{USE_GLES}") # Will affect VCPKG dependencies file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/_env/USE_GLES.txt" "${GLES_OPTION}") From 7069e48073de69b5836f617cc77c693932a1a369 Mon Sep 17 00:00:00 2001 From: HifiExperiments Date: Wed, 16 Dec 2020 21:01:56 -0800 Subject: [PATCH 027/152] working on pivot --- interface/src/ui/Stats.h | 8 +-- .../src/avatars-renderer/SkeletonModel.cpp | 6 +- .../src/EntityTreeRenderer.h | 8 +-- .../src/RenderableModelEntityItem.cpp | 24 ++++++-- .../src/RenderableModelEntityItem.h | 3 +- .../src/RenderablePolyVoxEntityItem.cpp | 6 +- libraries/entities/src/EntityItem.cpp | 54 +++++++++++------- libraries/entities/src/EntityItem.h | 1 + .../entities/src/EntityItemProperties.cpp | 9 +++ libraries/entities/src/EntityItemProperties.h | 1 + libraries/entities/src/EntityPropertyFlags.h | 19 ++++--- libraries/entities/src/EntityTreeElement.cpp | 57 +++++++++---------- libraries/entities/src/ModelEntityItem.cpp | 19 +++++++ libraries/entities/src/ModelEntityItem.h | 4 ++ libraries/render-utils/src/Model.cpp | 42 ++++++++------ libraries/render-utils/src/Model.h | 7 ++- 16 files changed, 167 insertions(+), 101 deletions(-) diff --git a/interface/src/ui/Stats.h b/interface/src/ui/Stats.h index 27ab375a42..ebd65de612 100644 --- a/interface/src/ui/Stats.h +++ b/interface/src/ui/Stats.h @@ -248,9 +248,9 @@ private: \ * Read-only. * @property {string} lodStatus - Description of the current LOD. * Read-only. - * @property {string} numEntityUpdates - The number of entity updates that happened last frame. + * @property {number} numEntityUpdates - The number of entity updates that happened last frame. * Read-only. - * @property {string} numNeededEntityUpdates - The total number of entity updates scheduled for last frame. + * @property {number} numNeededEntityUpdates - The total number of entity updates scheduled for last frame. * Read-only. * @property {string} timingStats - Details of the average time (ms) spent in and number of calls made to different parts of * the code. Provided only if timingExpanded is true. Only the top 10 items are provided if @@ -547,8 +547,8 @@ class Stats : public QQuickItem { STATS_PROPERTY(int, lodAngle, 0) STATS_PROPERTY(int, lodTargetFramerate, 0) STATS_PROPERTY(QString, lodStatus, QString()) - STATS_PROPERTY(int, numEntityUpdates, 0) - STATS_PROPERTY(int, numNeededEntityUpdates, 0) + STATS_PROPERTY(quint64, numEntityUpdates, 0) + STATS_PROPERTY(quint64, numNeededEntityUpdates, 0) STATS_PROPERTY(QString, timingStats, QString()) STATS_PROPERTY(QString, gameUpdateStats, QString()) STATS_PROPERTY(int, serverElements, 0) diff --git a/libraries/avatars-renderer/src/avatars-renderer/SkeletonModel.cpp b/libraries/avatars-renderer/src/avatars-renderer/SkeletonModel.cpp index 4950b86f75..5ac808d3fb 100644 --- a/libraries/avatars-renderer/src/avatars-renderer/SkeletonModel.cpp +++ b/libraries/avatars-renderer/src/avatars-renderer/SkeletonModel.cpp @@ -156,17 +156,13 @@ void SkeletonModel::simulate(float deltaTime, bool fullUpdate) { updateAttitude(_owningAvatar->getWorldOrientation()); setBlendshapeCoefficients(_owningAvatar->getHead()->getSummedBlendshapeCoefficients()); + Parent::simulate(deltaTime, fullUpdate); if (fullUpdate) { - - Parent::simulate(deltaTime, fullUpdate); - // let rig compute the model offset glm::vec3 registrationPoint; if (_rig.getModelRegistrationPoint(registrationPoint)) { setOffset(registrationPoint); } - } else { - Parent::simulate(deltaTime, fullUpdate); } // FIXME: This texture loading logic should probably live in Avatar, to mirror RenderableModelEntityItem, diff --git a/libraries/entities-renderer/src/EntityTreeRenderer.h b/libraries/entities-renderer/src/EntityTreeRenderer.h index f7623aad10..009e5f6c4f 100644 --- a/libraries/entities-renderer/src/EntityTreeRenderer.h +++ b/libraries/entities-renderer/src/EntityTreeRenderer.h @@ -136,8 +136,8 @@ public: static bool addMaterialToAvatar(const QUuid& avatarID, graphics::MaterialLayer material, const std::string& parentMaterialName); static bool removeMaterialFromAvatar(const QUuid& avatarID, graphics::MaterialPointer material, const std::string& parentMaterialName); - int getPrevNumEntityUpdates() const { return _prevNumEntityUpdates; } - int getPrevTotalNeededEntityUpdates() const { return _prevTotalNeededEntityUpdates; } + size_t getPrevNumEntityUpdates() const { return _prevNumEntityUpdates; } + size_t getPrevTotalNeededEntityUpdates() const { return _prevTotalNeededEntityUpdates; } signals: void enterEntity(const EntityItemID& entityItemID); @@ -253,8 +253,8 @@ private: ReadWriteLockable _changedEntitiesGuard; std::unordered_set _changedEntities; - int _prevNumEntityUpdates { 0 }; - int _prevTotalNeededEntityUpdates { 0 }; + size_t _prevNumEntityUpdates { 0 }; + size_t _prevTotalNeededEntityUpdates { 0 }; std::unordered_set _renderablesToUpdate; std::unordered_map _entitiesInScene; diff --git a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp index d6b7313ae7..940bf55e86 100644 --- a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp @@ -149,10 +149,11 @@ void RenderableModelEntityItem::updateModelBounds() { bool overridingModelTransform = model->isOverridingModelTransformAndOffset(); glm::vec3 scaledDimensions = getScaledDimensions(); glm::vec3 registrationPoint = getRegistrationPoint(); + bool needsSimulate = false; if (!overridingModelTransform && (model->getScaleToFitDimensions() != scaledDimensions || model->getRegistrationPoint() != registrationPoint || - !model->getIsScaledToFit() || _needsToRescaleModel)) { + !model->getIsScaledToFit() || _useOriginalPivot == model->getSnapModelToRegistrationPoint())) { // The machinery for updateModelBounds will give existing models the opportunity to fix their // translation/rotation/scale/registration. The first two are straightforward, but the latter two // have guards to make sure they don't happen after they've already been set. Here we reset those guards. @@ -162,9 +163,10 @@ void RenderableModelEntityItem::updateModelBounds() { // now recalculate the bounds and registration model->setScaleToFit(true, scaledDimensions); - model->setSnapModelToRegistrationPoint(true, registrationPoint); + model->setSnapModelToRegistrationPoint(!_useOriginalPivot, registrationPoint); updateRenderItems = true; - model->scaleToFit(); + needsSimulate = true; + locationChanged(); _needsToRescaleModel = false; } @@ -176,7 +178,7 @@ void RenderableModelEntityItem::updateModelBounds() { updateRenderItems = true; } - if (_needsInitialSimulation || _needsJointSimulation || isAnimatingSomething()) { + if (_needsInitialSimulation || _needsJointSimulation || needsSimulate || isAnimatingSomething()) { // NOTE: on isAnimatingSomething() we need to call Model::simulate() which calls Rig::updateRig() // TODO: there is opportunity to further optimize the isAnimatingSomething() case. model->simulate(0.0f); @@ -222,6 +224,16 @@ EntityItemProperties RenderableModelEntityItem::getProperties(const EntityProper return properties; } +glm::vec3 RenderableModelEntityItem::getPivot() const { + auto model = getModel(); + auto raycastOffset = EntityItem::getPivot(); + if (!model || !model->isLoaded() || !_useOriginalPivot) { + return raycastOffset; + } + + return raycastOffset + model->getOriginalOffset(); +} + bool RenderableModelEntityItem::supportsDetailedIntersection() const { return true; } @@ -452,7 +464,7 @@ void RenderableModelEntityItem::computeShapeInfo(ShapeInfo& shapeInfo) { pointCollection[i][j] = scaleToFit * (pointCollection[i][j] + model->getOffset()) - registrationOffset; } } - shapeInfo.setParams(type, 0.5f * extents, getCompoundShapeURL()); + shapeInfo.setParams(type, 0.5f * extents, getCompoundShapeURL() + model->getSnapModelToRegistrationPoint()); adjustShapeInfoByRegistration(shapeInfo); } else if (type >= SHAPE_TYPE_SIMPLE_HULL && type <= SHAPE_TYPE_STATIC_MESH) { updateModelBounds(); @@ -685,7 +697,7 @@ void RenderableModelEntityItem::computeShapeInfo(ShapeInfo& shapeInfo) { } } - shapeInfo.setParams(type, 0.5f * extents.size(), getModelURL()); + shapeInfo.setParams(type, 0.5f * extents.size(), getModelURL() + model->getSnapModelToRegistrationPoint()); adjustShapeInfoByRegistration(shapeInfo); } else { EntityItem::computeShapeInfo(shapeInfo); diff --git a/libraries/entities-renderer/src/RenderableModelEntityItem.h b/libraries/entities-renderer/src/RenderableModelEntityItem.h index 4501f6d88c..1ef11b6906 100644 --- a/libraries/entities-renderer/src/RenderableModelEntityItem.h +++ b/libraries/entities-renderer/src/RenderableModelEntityItem.h @@ -42,7 +42,7 @@ protected: void setModel(const ModelPointer& model); ModelPointer getModel() const; - bool _needsInitialSimulation{ true }; + bool _needsInitialSimulation { true }; private: ModelPointer _model; }; @@ -63,6 +63,7 @@ public: virtual EntityItemProperties getProperties(const EntityPropertyFlags& desiredProperties, bool allowEmptyDesiredProperties) const override; void updateModelBounds(); + glm::vec3 getPivot() const override; virtual bool supportsDetailedIntersection() const override; virtual bool findDetailedRayIntersection(const glm::vec3& origin, const glm::vec3& direction, OctreeElementPointer& element, float& distance, diff --git a/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.cpp b/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.cpp index f0a6684654..d779409e9c 100644 --- a/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.cpp @@ -723,8 +723,10 @@ ShapeType RenderablePolyVoxEntityItem::getShapeType() const { } void RenderablePolyVoxEntityItem::setRegistrationPoint(const glm::vec3& value) { - if (value != _registrationPoint) { - _shapeReady = false; + if (value != getRegistrationPoint()) { + withWriteLock([&] { + _shapeReady = false; + }); EntityItem::setRegistrationPoint(value); startUpdates(); } diff --git a/libraries/entities/src/EntityItem.cpp b/libraries/entities/src/EntityItem.cpp index d7a5e992e1..48490aeb51 100644 --- a/libraries/entities/src/EntityItem.cpp +++ b/libraries/entities/src/EntityItem.cpp @@ -1607,8 +1607,13 @@ void EntityItem::recordCreationTime() { const Transform EntityItem::getTransformToCenter(bool& success) const { Transform result = getTransform(success); - if (getRegistrationPoint() != ENTITY_ITEM_HALF_VEC3) { // If it is not already centered, translate to center - result.postTranslate((ENTITY_ITEM_HALF_VEC3 - getRegistrationPoint()) * getScaledDimensions()); // Position to center + glm::vec3 pivot = getPivot(); + if (pivot != ENTITY_ITEM_ZERO_VEC3) { + result.postTranslate(pivot); + } + glm::vec3 registrationPoint = getRegistrationPoint(); + if (registrationPoint != ENTITY_ITEM_HALF_VEC3) { // If it is not already centered, translate to center + result.postTranslate((ENTITY_ITEM_HALF_VEC3 - registrationPoint) * getScaledDimensions()); // Position to center } return result; } @@ -1624,7 +1629,8 @@ AACube EntityItem::getMaximumAACube(bool& success) const { // we want to compute the furthestExtent that an entity can extend out from its "position" // to do this we compute the max of these two vec3s: registration and 1-registration // and then scale by dimensions - glm::vec3 maxExtents = getScaledDimensions() * glm::max(_registrationPoint, glm::vec3(1.0f) - _registrationPoint); + glm::vec3 offset = getScaledDimensions() * getRegistrationPoint() + getPivot(); + glm::vec3 maxExtents = glm::max(offset, glm::vec3(1.0f) - offset); // there exists a sphere that contains maxExtents for all rotations float radius = glm::length(maxExtents); @@ -1650,9 +1656,12 @@ AACube EntityItem::getMinimumAACube(bool& success) const { if (success) { _recalcMinAACube = false; glm::vec3 dimensions = getScaledDimensions(); - glm::vec3 unrotatedMinRelativeToEntity = - (dimensions * _registrationPoint); - glm::vec3 unrotatedMaxRelativeToEntity = dimensions * (glm::vec3(1.0f, 1.0f, 1.0f) - _registrationPoint); + glm::vec3 registrationPoint = getRegistrationPoint(); + glm::vec3 pivot = getPivot(); + glm::vec3 unrotatedMinRelativeToEntity = -(dimensions * registrationPoint); + glm::vec3 unrotatedMaxRelativeToEntity = dimensions * (ENTITY_ITEM_ONE_VEC3 - registrationPoint); Extents extents = { unrotatedMinRelativeToEntity, unrotatedMaxRelativeToEntity }; + extents.shiftBy(pivot); extents.rotate(getWorldOrientation()); // shift the extents to be relative to the position/registration point @@ -1680,9 +1689,12 @@ AABox EntityItem::getAABox(bool& success) const { if (success) { _recalcAABox = false; glm::vec3 dimensions = getScaledDimensions(); - glm::vec3 unrotatedMinRelativeToEntity = - (dimensions * _registrationPoint); - glm::vec3 unrotatedMaxRelativeToEntity = dimensions * (glm::vec3(1.0f, 1.0f, 1.0f) - _registrationPoint); + glm::vec3 registrationPoint = getRegistrationPoint(); + glm::vec3 pivot = getPivot(); + glm::vec3 unrotatedMinRelativeToEntity = -(dimensions * registrationPoint); + glm::vec3 unrotatedMaxRelativeToEntity = dimensions * (ENTITY_ITEM_ONE_VEC3 - registrationPoint); Extents extents = { unrotatedMinRelativeToEntity, unrotatedMaxRelativeToEntity }; + extents.shiftBy(pivot); extents.rotate(getWorldOrientation()); // shift the extents to be relative to the position/registration point @@ -1723,11 +1735,10 @@ float EntityItem::getRadius() const { } void EntityItem::adjustShapeInfoByRegistration(ShapeInfo& info) const { - if (_registrationPoint != ENTITY_ITEM_DEFAULT_REGISTRATION_POINT) { - glm::mat4 scale = glm::scale(getScaledDimensions()); - glm::mat4 registration = scale * glm::translate(ENTITY_ITEM_DEFAULT_REGISTRATION_POINT - getRegistrationPoint()); - glm::vec3 regTransVec = glm::vec3(registration[3]); // extract position component from matrix - info.setOffset(regTransVec); + glm::vec3 registrationPoint = getRegistrationPoint(); + if (registrationPoint != ENTITY_ITEM_DEFAULT_REGISTRATION_POINT) { + glm::vec3 registration = (ENTITY_ITEM_DEFAULT_REGISTRATION_POINT - registrationPoint) * getScaledDimensions(); + info.setOffset(registration); } } @@ -1739,7 +1750,7 @@ bool EntityItem::contains(const glm::vec3& point) const { // anything with shapeType == SPHERE must collide as a bounding sphere in the world-frame regardless of dimensions // therefore we must do math using an unscaled localPoint relative to sphere center glm::vec3 dimensions = getScaledDimensions(); - glm::vec3 localPoint = point - (getWorldPosition() + getWorldOrientation() * (dimensions * (ENTITY_ITEM_DEFAULT_REGISTRATION_POINT - getRegistrationPoint()))); + glm::vec3 localPoint = point - (getWorldPosition() + getWorldOrientation() * (dimensions * (ENTITY_ITEM_DEFAULT_REGISTRATION_POINT - getRegistrationPoint()) + getPivot())); const float HALF_SQUARED = 0.25f; return glm::length2(localPoint) < HALF_SQUARED * glm::length2(dimensions); } @@ -1797,11 +1808,16 @@ float EntityItem::getVolumeEstimate() const { } void EntityItem::setRegistrationPoint(const glm::vec3& value) { - if (value != _registrationPoint) { - withWriteLock([&] { + bool changed = false; + withWriteLock([&] { + if (value != _registrationPoint) { _registrationPoint = glm::clamp(value, glm::vec3(ENTITY_ITEM_MIN_REGISTRATION_POINT), glm::vec3(ENTITY_ITEM_MAX_REGISTRATION_POINT)); - }); + changed = true; + } + }); + + if (changed) { dimensionsChanged(); // Registration Point affects the bounding box markDirtyFlags(Simulation::DIRTY_SHAPE); } @@ -2892,11 +2908,9 @@ QString EntityItem::getCollisionSoundURL() const { } glm::vec3 EntityItem::getRegistrationPoint() const { - glm::vec3 result; - withReadLock([&] { - result = _registrationPoint; + return resultWithReadLock([&] { + return _registrationPoint; }); - return result; } float EntityItem::getAngularDamping() const { diff --git a/libraries/entities/src/EntityItem.h b/libraries/entities/src/EntityItem.h index 2a6952fc0d..e12c2d864b 100644 --- a/libraries/entities/src/EntityItem.h +++ b/libraries/entities/src/EntityItem.h @@ -204,6 +204,7 @@ public: virtual glm::vec3 getScaledDimensions() const; virtual void setScaledDimensions(const glm::vec3& value); virtual glm::vec3 getRaycastDimensions() const { return getScaledDimensions(); } + virtual glm::vec3 getPivot() const { return glm::vec3(0.0f); } // pivot offset for positioning, mainly for model entities glm::vec3 getUnscaledDimensions() const; virtual void setUnscaledDimensions(const glm::vec3& value); diff --git a/libraries/entities/src/EntityItemProperties.cpp b/libraries/entities/src/EntityItemProperties.cpp index ff55137a03..06e981238d 100644 --- a/libraries/entities/src/EntityItemProperties.cpp +++ b/libraries/entities/src/EntityItemProperties.cpp @@ -538,6 +538,7 @@ EntityPropertyFlags EntityItemProperties::getChangedProperties() const { CHECK_PROPERTY_CHANGE(PROP_RELAY_PARENT_JOINTS, relayParentJoints); CHECK_PROPERTY_CHANGE(PROP_GROUP_CULLED, groupCulled); CHECK_PROPERTY_CHANGE(PROP_BLENDSHAPE_COEFFICIENTS, blendshapeCoefficients); + CHECK_PROPERTY_CHANGE(PROP_USE_ORIGINAL_PIVOT, useOriginalPivot); changedProperties += _animation.getChangedProperties(); // Light @@ -1733,6 +1734,7 @@ QScriptValue EntityItemProperties::copyToScriptValue(QScriptEngine* engine, bool COPY_PROPERTY_TO_QSCRIPTVALUE(PROP_RELAY_PARENT_JOINTS, relayParentJoints); COPY_PROPERTY_TO_QSCRIPTVALUE(PROP_GROUP_CULLED, groupCulled); COPY_PROPERTY_TO_QSCRIPTVALUE(PROP_BLENDSHAPE_COEFFICIENTS, blendshapeCoefficients); + COPY_PROPERTY_TO_QSCRIPTVALUE(PROP_USE_ORIGINAL_PIVOT, useOriginalPivot); if (!psuedoPropertyFlagsButDesiredEmpty) { _animation.copyToScriptValue(_desiredProperties, properties, engine, skipDefaults, defaultEntityProperties); } @@ -2142,6 +2144,7 @@ void EntityItemProperties::copyFromScriptValue(const QScriptValue& object, bool COPY_PROPERTY_FROM_QSCRIPTVALUE(relayParentJoints, bool, setRelayParentJoints); COPY_PROPERTY_FROM_QSCRIPTVALUE(groupCulled, bool, setGroupCulled); COPY_PROPERTY_FROM_QSCRIPTVALUE(blendshapeCoefficients, QString, setBlendshapeCoefficients); + COPY_PROPERTY_FROM_QSCRIPTVALUE(useOriginalPivot, bool, setUseOriginalPivot); _animation.copyFromScriptValue(object, _defaultSettings); // Light @@ -2434,6 +2437,7 @@ void EntityItemProperties::merge(const EntityItemProperties& other) { COPY_PROPERTY_IF_CHANGED(relayParentJoints); COPY_PROPERTY_IF_CHANGED(groupCulled); COPY_PROPERTY_IF_CHANGED(blendshapeCoefficients); + COPY_PROPERTY_IF_CHANGED(useOriginalPivot); _animation.merge(other._animation); // Light @@ -2790,6 +2794,7 @@ bool EntityItemProperties::getPropertyInfo(const QString& propertyName, EntityPr ADD_PROPERTY_TO_MAP(PROP_RELAY_PARENT_JOINTS, RelayParentJoints, relayParentJoints, bool); ADD_PROPERTY_TO_MAP(PROP_GROUP_CULLED, GroupCulled, groupCulled, bool); ADD_PROPERTY_TO_MAP(PROP_BLENDSHAPE_COEFFICIENTS, BlendshapeCoefficients, blendshapeCoefficients, QString); + ADD_PROPERTY_TO_MAP(PROP_USE_ORIGINAL_PIVOT, UseOriginalPivot, useOriginalPivot, bool); { // Animation ADD_GROUP_PROPERTY_TO_MAP(PROP_ANIMATION_URL, Animation, animation, URL, url); ADD_GROUP_PROPERTY_TO_MAP(PROP_ANIMATION_ALLOW_TRANSLATION, Animation, animation, AllowTranslation, allowTranslation); @@ -4129,6 +4134,7 @@ void EntityItemProperties::markAllChanged() { _relayParentJointsChanged = true; _groupCulledChanged = true; _blendshapeCoefficientsChanged = true; + _useOriginalPivotChanged = true; _animation.markAllChanged(); // Light @@ -4701,6 +4707,9 @@ QList EntityItemProperties::listChangedProperties() { if (blendshapeCoefficientsChanged()) { out += "blendshapeCoefficients"; } + if (useOriginalPivotChanged()) { + out += "useOriginalPivot"; + } getAnimation().listChangedProperties(out); // Light diff --git a/libraries/entities/src/EntityItemProperties.h b/libraries/entities/src/EntityItemProperties.h index f7fde73430..f056187d4f 100644 --- a/libraries/entities/src/EntityItemProperties.h +++ b/libraries/entities/src/EntityItemProperties.h @@ -302,6 +302,7 @@ public: DEFINE_PROPERTY(PROP_RELAY_PARENT_JOINTS, RelayParentJoints, relayParentJoints, bool, ENTITY_ITEM_DEFAULT_RELAY_PARENT_JOINTS); DEFINE_PROPERTY_REF(PROP_GROUP_CULLED, GroupCulled, groupCulled, bool, false); DEFINE_PROPERTY_REF(PROP_BLENDSHAPE_COEFFICIENTS, BlendshapeCoefficients, blendshapeCoefficients, QString, ""); + DEFINE_PROPERTY_REF(PROP_USE_ORIGINAL_PIVOT, UseOriginalPivot, useOriginalPivot, bool, false); DEFINE_PROPERTY_GROUP(Animation, animation, AnimationPropertyGroup); // Light diff --git a/libraries/entities/src/EntityPropertyFlags.h b/libraries/entities/src/EntityPropertyFlags.h index 93bb8a89a7..35c1f9a908 100644 --- a/libraries/entities/src/EntityPropertyFlags.h +++ b/libraries/entities/src/EntityPropertyFlags.h @@ -218,16 +218,17 @@ enum EntityPropertyList { PROP_RELAY_PARENT_JOINTS = PROP_DERIVED_6, PROP_GROUP_CULLED = PROP_DERIVED_7, PROP_BLENDSHAPE_COEFFICIENTS = PROP_DERIVED_8, + PROP_USE_ORIGINAL_PIVOT = PROP_DERIVED_9, // Animation - PROP_ANIMATION_URL = PROP_DERIVED_9, - PROP_ANIMATION_ALLOW_TRANSLATION = PROP_DERIVED_10, - PROP_ANIMATION_FPS = PROP_DERIVED_11, - PROP_ANIMATION_FRAME_INDEX = PROP_DERIVED_12, - PROP_ANIMATION_PLAYING = PROP_DERIVED_13, - PROP_ANIMATION_LOOP = PROP_DERIVED_14, - PROP_ANIMATION_FIRST_FRAME = PROP_DERIVED_15, - PROP_ANIMATION_LAST_FRAME = PROP_DERIVED_16, - PROP_ANIMATION_HOLD = PROP_DERIVED_17, + PROP_ANIMATION_URL = PROP_DERIVED_10, + PROP_ANIMATION_ALLOW_TRANSLATION = PROP_DERIVED_11, + PROP_ANIMATION_FPS = PROP_DERIVED_12, + PROP_ANIMATION_FRAME_INDEX = PROP_DERIVED_13, + PROP_ANIMATION_PLAYING = PROP_DERIVED_14, + PROP_ANIMATION_LOOP = PROP_DERIVED_15, + PROP_ANIMATION_FIRST_FRAME = PROP_DERIVED_16, + PROP_ANIMATION_LAST_FRAME = PROP_DERIVED_17, + PROP_ANIMATION_HOLD = PROP_DERIVED_18, // Light PROP_IS_SPOTLIGHT = PROP_DERIVED_0, diff --git a/libraries/entities/src/EntityTreeElement.cpp b/libraries/entities/src/EntityTreeElement.cpp index 9af0bbfdb6..16b6ccac9b 100644 --- a/libraries/entities/src/EntityTreeElement.cpp +++ b/libraries/entities/src/EntityTreeElement.cpp @@ -205,10 +205,7 @@ EntityItemID EntityTreeElement::evalDetailedRayIntersection(const glm::vec3& ori // (this is faster and more likely to cull results than the filter check below so we do it first) bool success; AABox entityBox = entity->getAABox(success); - if (!success) { - return; - } - if (!entityBox.rayHitsBoundingSphere(origin, direction)) { + if (!success || !entityBox.rayHitsBoundingSphere(origin, direction)) { return; } @@ -226,7 +223,7 @@ EntityItemID EntityTreeElement::evalDetailedRayIntersection(const glm::vec3& ori glm::vec3 dimensions = entity->getRaycastDimensions(); glm::vec3 registrationPoint = entity->getRegistrationPoint(); - glm::vec3 corner = -(dimensions * registrationPoint); + glm::vec3 corner = -(dimensions * registrationPoint) + entity->getPivot(); AABox entityFrameBox(corner, dimensions); @@ -244,6 +241,9 @@ EntityItemID EntityTreeElement::evalDetailedRayIntersection(const glm::vec3& ori // now ask the entity if we actually intersect if (entity->supportsDetailedIntersection()) { QVariantMap localExtraInfo; + if (entity->getName().contains("boop")) { + qDebug() << entity->getName() << entity->getPivot() << entityFrameBox; + } if (entity->findDetailedRayIntersection(origin, direction, element, localDistance, localFace, localSurfaceNormal, localExtraInfo, searchFilter.isPrecise())) { if (localDistance < distance) { @@ -277,11 +277,12 @@ bool EntityTreeElement::findSpherePenetration(const glm::vec3& center, float rad bool result = false; withReadLock([&] { foreach(EntityItemPointer entity, _entityItems) { - glm::vec3 entityCenter = entity->getWorldPosition(); + bool success; + glm::vec3 entityCenter = entity->getCenterPosition(success); float entityRadius = entity->getRadius(); // don't penetrate yourself - if (entityCenter == center && entityRadius == radius) { + if (!success || (entityCenter == center && entityRadius == radius)) { return; } @@ -349,15 +350,12 @@ EntityItemID EntityTreeElement::evalDetailedParabolaIntersection(const glm::vec3 // (this is faster and more likely to cull results than the filter check below so we do it first) bool success; AABox entityBox = entity->getAABox(success); - if (!success) { - return; - } // Instead of checking parabolaInstersectsBoundingSphere here, we are just going to check if the plane // defined by the parabola slices the sphere. The solution to parabolaIntersectsBoundingSphere is cubic, // the solution to which is more computationally expensive than the quadratic AABox::findParabolaIntersection // below - if (!entityBox.parabolaPlaneIntersectsBoundingSphere(origin, velocity, acceleration, normal)) { + if (!success || !entityBox.parabolaPlaneIntersectsBoundingSphere(origin, velocity, acceleration, normal)) { return; } @@ -375,7 +373,7 @@ EntityItemID EntityTreeElement::evalDetailedParabolaIntersection(const glm::vec3 glm::vec3 dimensions = entity->getRaycastDimensions(); glm::vec3 registrationPoint = entity->getRegistrationPoint(); - glm::vec3 corner = -(dimensions * registrationPoint); + glm::vec3 corner = -(dimensions * registrationPoint) + entity->getPivot(); AABox entityFrameBox(corner, dimensions); @@ -445,7 +443,6 @@ void EntityTreeElement::evalEntitiesInSphere(const glm::vec3& position, float ra bool success; AABox entityBox = entity->getAABox(success); - // if the sphere doesn't intersect with our world frame AABox, we don't need to consider the more complex case glm::vec3 penetration; if (success && entityBox.findSpherePenetration(position, radius, penetration)) { @@ -464,10 +461,9 @@ void EntityTreeElement::evalEntitiesInSphere(const glm::vec3& position, float ra float entityTrueRadius = dimensions.x / 2.0f; bool success; - if (findSphereSpherePenetration(position, radius, entity->getCenterPosition(success), entityTrueRadius, penetration)) { - if (success) { - foundEntities.push_back(entity->getID()); - } + glm::vec3 center = entity->getCenterPosition(success); + if (success && findSphereSpherePenetration(position, radius, center, entityTrueRadius, penetration)) { + foundEntities.push_back(entity->getID()); } } else { // determine the worldToEntityMatrix that doesn't include scale because @@ -478,7 +474,7 @@ void EntityTreeElement::evalEntitiesInSphere(const glm::vec3& position, float ra glm::mat4 worldToEntityMatrix = glm::inverse(entityToWorldMatrix); glm::vec3 registrationPoint = entity->getRegistrationPoint(); - glm::vec3 corner = -(dimensions * registrationPoint); + glm::vec3 corner = -(dimensions * registrationPoint) + entity->getPivot(); AABox entityFrameBox(corner, dimensions); @@ -499,7 +495,6 @@ void EntityTreeElement::evalEntitiesInSphereWithType(const glm::vec3& position, bool success; AABox entityBox = entity->getAABox(success); - // if the sphere doesn't intersect with our world frame AABox, we don't need to consider the more complex case glm::vec3 penetration; if (success && entityBox.findSpherePenetration(position, radius, penetration)) { @@ -518,10 +513,9 @@ void EntityTreeElement::evalEntitiesInSphereWithType(const glm::vec3& position, float entityTrueRadius = dimensions.x / 2.0f; bool success; - if (findSphereSpherePenetration(position, radius, entity->getCenterPosition(success), entityTrueRadius, penetration)) { - if (success) { - foundEntities.push_back(entity->getID()); - } + glm::vec3 center = entity->getCenterPosition(success); + if (success && findSphereSpherePenetration(position, radius, center, entityTrueRadius, penetration)) { + foundEntities.push_back(entity->getID()); } } else { // determine the worldToEntityMatrix that doesn't include scale because @@ -532,7 +526,7 @@ void EntityTreeElement::evalEntitiesInSphereWithType(const glm::vec3& position, glm::mat4 worldToEntityMatrix = glm::inverse(entityToWorldMatrix); glm::vec3 registrationPoint = entity->getRegistrationPoint(); - glm::vec3 corner = -(dimensions * registrationPoint); + glm::vec3 corner = -(dimensions * registrationPoint) + entity->getPivot(); AABox entityFrameBox(corner, dimensions); @@ -575,12 +569,11 @@ void EntityTreeElement::evalEntitiesInSphereWithName(const glm::vec3& position, // NOTE: entity->getRadius() doesn't return the true radius, it returns the radius of the // maximum bounding sphere, which is actually larger than our actual radius float entityTrueRadius = dimensions.x / 2.0f; - bool success; - if (findSphereSpherePenetration(position, radius, entity->getCenterPosition(success), entityTrueRadius, penetration)) { - if (success) { - foundEntities.push_back(entity->getID()); - } + glm::vec3 center = entity->getCenterPosition(success); + + if (success && findSphereSpherePenetration(position, radius, center, entityTrueRadius, penetration)) { + foundEntities.push_back(entity->getID()); } } else { // determine the worldToEntityMatrix that doesn't include scale because @@ -591,7 +584,7 @@ void EntityTreeElement::evalEntitiesInSphereWithName(const glm::vec3& position, glm::mat4 worldToEntityMatrix = glm::inverse(entityToWorldMatrix); glm::vec3 registrationPoint = entity->getRegistrationPoint(); - glm::vec3 corner = -(dimensions * registrationPoint); + glm::vec3 corner = -(dimensions * registrationPoint) + entity->getPivot(); AABox entityFrameBox(corner, dimensions); @@ -612,6 +605,7 @@ void EntityTreeElement::evalEntitiesInCube(const AACube& cube, PickFilter search bool success; AABox entityBox = entity->getAABox(success); + // FIXME - handle entity->getShapeType() == SHAPE_TYPE_SPHERE case better // FIXME - consider allowing the entity to determine penetration so that // entities could presumably dull actuall hull testing if they wanted to @@ -642,6 +636,7 @@ void EntityTreeElement::evalEntitiesInBox(const AABox& box, PickFilter searchFil bool success; AABox entityBox = entity->getAABox(success); + // FIXME - handle entity->getShapeType() == SHAPE_TYPE_SPHERE case better // FIXME - consider allowing the entity to determine penetration so that // entities could presumably dull actuall hull testing if they wanted to @@ -680,7 +675,7 @@ void EntityTreeElement::evalEntitiesInFrustum(const ViewFrustum& frustum, PickFi }); } -void EntityTreeElement::getEntities(EntityItemFilter& filter, QVector& foundEntities) { +void EntityTreeElement::getEntities(EntityItemFilter& filter, QVector& foundEntities) { forEachEntity([&](EntityItemPointer entity) { if (filter(entity)) { foundEntities.push_back(entity); diff --git a/libraries/entities/src/ModelEntityItem.cpp b/libraries/entities/src/ModelEntityItem.cpp index 4716db6a41..50fd1f267a 100644 --- a/libraries/entities/src/ModelEntityItem.cpp +++ b/libraries/entities/src/ModelEntityItem.cpp @@ -73,6 +73,7 @@ EntityItemProperties ModelEntityItem::getProperties(const EntityPropertyFlags& d COPY_ENTITY_PROPERTY_TO_PROPERTIES(relayParentJoints, getRelayParentJoints); COPY_ENTITY_PROPERTY_TO_PROPERTIES(groupCulled, getGroupCulled); COPY_ENTITY_PROPERTY_TO_PROPERTIES(blendshapeCoefficients, getBlendshapeCoefficients); + COPY_ENTITY_PROPERTY_TO_PROPERTIES(useOriginalPivot, getUseOriginalPivot); withReadLock([&] { _animationProperties.getProperties(properties); }); @@ -96,6 +97,7 @@ bool ModelEntityItem::setSubClassProperties(const EntityItemProperties& properti SET_ENTITY_PROPERTY_FROM_PROPERTIES(relayParentJoints, setRelayParentJoints); SET_ENTITY_PROPERTY_FROM_PROPERTIES(groupCulled, setGroupCulled); SET_ENTITY_PROPERTY_FROM_PROPERTIES(blendshapeCoefficients, setBlendshapeCoefficients); + SET_ENTITY_PROPERTY_FROM_PROPERTIES(useOriginalPivot, setUseOriginalPivot); withWriteLock([&] { AnimationPropertyGroup animationProperties = _animationProperties; @@ -130,6 +132,7 @@ int ModelEntityItem::readEntitySubclassDataFromBuffer(const unsigned char* data, READ_ENTITY_PROPERTY(PROP_RELAY_PARENT_JOINTS, bool, setRelayParentJoints); READ_ENTITY_PROPERTY(PROP_GROUP_CULLED, bool, setGroupCulled); READ_ENTITY_PROPERTY(PROP_BLENDSHAPE_COEFFICIENTS, QString, setBlendshapeCoefficients); + READ_ENTITY_PROPERTY(PROP_USE_ORIGINAL_PIVOT, bool, setUseOriginalPivot); // grab a local copy of _animationProperties to avoid multiple locks int bytesFromAnimation; @@ -169,6 +172,7 @@ EntityPropertyFlags ModelEntityItem::getEntityProperties(EncodeBitstreamParams& requestedProperties += PROP_RELAY_PARENT_JOINTS; requestedProperties += PROP_GROUP_CULLED; requestedProperties += PROP_BLENDSHAPE_COEFFICIENTS; + requestedProperties += PROP_USE_ORIGINAL_PIVOT; requestedProperties += _animationProperties.getEntityProperties(params); return requestedProperties; @@ -198,6 +202,7 @@ void ModelEntityItem::appendSubclassData(OctreePacketData* packetData, EncodeBit APPEND_ENTITY_PROPERTY(PROP_RELAY_PARENT_JOINTS, getRelayParentJoints()); APPEND_ENTITY_PROPERTY(PROP_GROUP_CULLED, getGroupCulled()); APPEND_ENTITY_PROPERTY(PROP_BLENDSHAPE_COEFFICIENTS, getBlendshapeCoefficients()); + APPEND_ENTITY_PROPERTY(PROP_USE_ORIGINAL_PIVOT, getUseOriginalPivot()); withReadLock([&] { _animationProperties.appendSubclassData(packetData, params, entityTreeElementExtraEncodeData, requestedProperties, @@ -251,6 +256,7 @@ void ModelEntityItem::debugDump() const { qCDebug(entities) << " model URL:" << getModelURL(); qCDebug(entities) << " compound shape URL:" << getCompoundShapeURL(); qCDebug(entities) << " blendshapeCoefficients:" << getBlendshapeCoefficients(); + qCDebug(entities) << " useOrigialPivot:" << getUseOriginalPivot(); } void ModelEntityItem::setShapeType(ShapeType type) { @@ -713,3 +719,16 @@ QVector ModelEntityItem::getBlendshapeCoefficientVector() { return _blendshapeCoefficientsVector; }); } + +void ModelEntityItem::setUseOriginalPivot(bool value) { + withWriteLock([&] { + _needsRenderUpdate |= _useOriginalPivot != value; + _useOriginalPivot = value; + }); +} + +bool ModelEntityItem::getUseOriginalPivot() const { + return resultWithReadLock([&] { + return _useOriginalPivot; + }); +} diff --git a/libraries/entities/src/ModelEntityItem.h b/libraries/entities/src/ModelEntityItem.h index b835b48d13..6e92b225a1 100644 --- a/libraries/entities/src/ModelEntityItem.h +++ b/libraries/entities/src/ModelEntityItem.h @@ -119,6 +119,9 @@ public: bool blendshapesChanged() const { return _blendshapesChanged; } QVector getBlendshapeCoefficientVector(); + bool getUseOriginalPivot() const; + void setUseOriginalPivot(bool useOriginalPivot); + private: void setAnimationSettings(const QString& value); // only called for old bitstream format bool applyNewAnimationProperties(AnimationPropertyGroup newProperties); @@ -152,6 +155,7 @@ protected: bool _relayParentJoints; bool _groupCulled { false }; QVariantMap _blendshapeCoefficientsMap; + bool _useOriginalPivot { false }; ThreadSafeValueCache _compoundShapeURL; diff --git a/libraries/render-utils/src/Model.cpp b/libraries/render-utils/src/Model.cpp index 1015c87038..3ce43e059e 100644 --- a/libraries/render-utils/src/Model.cpp +++ b/libraries/render-utils/src/Model.cpp @@ -151,6 +151,7 @@ void Model::setOffset(const glm::vec3& offset) { // if someone manually sets our offset, then we are no longer snapped to center _snapModelToRegistrationPoint = false; _snappedToRegistrationPoint = false; + _needsTransformUpdate = true; } void Model::calculateTextureInfo() { @@ -344,6 +345,9 @@ bool Model::findRayIntersectionAgainstSubMeshes(const glm::vec3& origin, const g // extents is the entity relative, scaled, centered extents of the entity glm::mat4 modelToWorldMatrix = createMatFromQuatAndPos(_rotation, _translation); + if (!_snapModelToRegistrationPoint) { + modelToWorldMatrix = modelToWorldMatrix * glm::translate(getOriginalOffset()); + } glm::mat4 worldToModelMatrix = glm::inverse(modelToWorldMatrix); Extents modelExtents = getMeshExtents(); // NOTE: unrotated @@ -375,8 +379,7 @@ bool Model::findRayIntersectionAgainstSubMeshes(const glm::vec3& origin, const g calculateTriangleSets(hfmModel); } - glm::mat4 meshToModelMatrix = glm::scale(_scale) * glm::translate(_offset); - glm::mat4 meshToWorldMatrix = modelToWorldMatrix * meshToModelMatrix; + glm::mat4 meshToWorldMatrix = createMatFromQuatAndPos(_rotation, _translation) * (glm::scale(_scale) * glm::translate(_offset)); glm::mat4 worldToMeshMatrix = glm::inverse(meshToWorldMatrix); glm::vec3 meshFrameOrigin = glm::vec3(worldToMeshMatrix * glm::vec4(origin, 1.0f)); @@ -499,6 +502,9 @@ bool Model::findParabolaIntersectionAgainstSubMeshes(const glm::vec3& origin, co // extents is the entity relative, scaled, centered extents of the entity glm::mat4 modelToWorldMatrix = createMatFromQuatAndPos(_rotation, _translation); + if (!_snapModelToRegistrationPoint) { + modelToWorldMatrix = modelToWorldMatrix * glm::translate(getOriginalOffset()); + } glm::mat4 worldToModelMatrix = glm::inverse(modelToWorldMatrix); Extents modelExtents = getMeshExtents(); // NOTE: unrotated @@ -531,8 +537,7 @@ bool Model::findParabolaIntersectionAgainstSubMeshes(const glm::vec3& origin, co calculateTriangleSets(hfmModel); } - glm::mat4 meshToModelMatrix = glm::scale(_scale) * glm::translate(_offset); - glm::mat4 meshToWorldMatrix = modelToWorldMatrix * meshToModelMatrix; + glm::mat4 meshToWorldMatrix = createMatFromQuatAndPos(_rotation, _translation) * (glm::scale(_scale) * glm::translate(_offset)); glm::mat4 worldToMeshMatrix = glm::inverse(meshToWorldMatrix); glm::vec3 meshFrameOrigin = glm::vec3(worldToMeshMatrix * glm::vec4(origin, 1.0f)); @@ -1182,17 +1187,8 @@ glm::vec3 Model::getNaturalDimensions() const { } Extents Model::getMeshExtents() const { - if (!isLoaded()) { - return Extents(); - } - const Extents& extents = getHFMModel().meshExtents; - - // even though our caller asked for "unscaled" we need to include any fst scaling, translation, and rotation, which - // is captured in the offset matrix - glm::vec3 minimum = glm::vec3(getHFMModel().offset * glm::vec4(extents.minimum, 1.0f)); - glm::vec3 maximum = glm::vec3(getHFMModel().offset * glm::vec4(extents.maximum, 1.0f)); - Extents scaledExtents = { minimum * _scale, maximum * _scale }; - return scaledExtents; + Extents extents = getUnscaledMeshExtents(); + return { extents.minimum * _scale, extents.maximum * _scale}; } Extents Model::getUnscaledMeshExtents() const { @@ -1406,6 +1402,7 @@ void Model::setSnapModelToRegistrationPoint(bool snapModelToRegistrationPoint, c _snapModelToRegistrationPoint = snapModelToRegistrationPoint; _registrationPoint = clampedRegistrationPoint; _snappedToRegistrationPoint = false; // force re-centering + _needsTransformUpdate = true; } } @@ -1417,6 +1414,15 @@ void Model::snapToRegistrationPoint() { _snappedToRegistrationPoint = true; } +glm::vec3 Model::getOriginalOffset() const { + Extents modelMeshExtents = getUnscaledMeshExtents(); + glm::vec3 dimensions = (modelMeshExtents.maximum - modelMeshExtents.minimum); + glm::vec3 offset = modelMeshExtents.minimum + (dimensions * _registrationPoint); + glm::mat4 transform = glm::scale(_scale) * glm::translate(offset); + return transform[3]; +} + + void Model::setUseDualQuaternionSkinning(bool value) { _useDualQuaternionSkinning = value; } @@ -1424,7 +1430,7 @@ void Model::setUseDualQuaternionSkinning(bool value) { void Model::simulate(float deltaTime, bool fullUpdate) { DETAILED_PROFILE_RANGE(simulation_detail, __FUNCTION__); fullUpdate = updateGeometry() || fullUpdate || (_scaleToFit && !_scaledToFit) - || (_snapModelToRegistrationPoint && !_snappedToRegistrationPoint); + || (_snapModelToRegistrationPoint && !_snappedToRegistrationPoint) || _needsTransformUpdate; if (isLoaded() && fullUpdate) { onInvalidate(); @@ -1437,8 +1443,10 @@ void Model::simulate(float deltaTime, bool fullUpdate) { snapToRegistrationPoint(); } // update the world space transforms for all joints - glm::mat4 parentTransform = glm::scale(_scale) * glm::translate(_offset); + glm::mat4 parentTransform = glm::scale(_scale) * (_snapModelToRegistrationPoint ? + glm::translate(_offset) : glm::translate(getNaturalDimensions() * (0.5f - _registrationPoint))); updateRig(deltaTime, parentTransform); + _needsTransformUpdate = false; } } diff --git a/libraries/render-utils/src/Model.h b/libraries/render-utils/src/Model.h index 1e7ab55d5a..7b606840f5 100644 --- a/libraries/render-utils/src/Model.h +++ b/libraries/render-utils/src/Model.h @@ -167,6 +167,7 @@ public: void setSnapModelToRegistrationPoint(bool snapModelToRegistrationPoint, const glm::vec3& registrationPoint); bool getSnapModelToRegistrationPoint() { return _snapModelToRegistrationPoint; } + bool getSnappedToRegistrationPoint() { return _snappedToRegistrationPoint; } virtual void simulate(float deltaTime, bool fullUpdate = true); virtual void updateClusterMatrices(); @@ -203,6 +204,7 @@ public: void setOffset(const glm::vec3& offset); const glm::vec3& getOffset() const { return _offset; } + glm::vec3 getOriginalOffset() const; void setScaleToFit(bool scaleToFit, float largestDimension = 0.0f, bool forceRescale = false); void setScaleToFit(bool scaleToFit, const glm::vec3& dimensions, bool forceRescale = false); @@ -348,6 +350,7 @@ public: virtual bool replaceScriptableModelMeshPart(scriptable::ScriptableModelBasePointer model, int meshIndex, int partIndex) override; void scaleToFit(); + void snapToRegistrationPoint(); bool getUseDualQuaternionSkinning() const { return _useDualQuaternionSkinning; } void setUseDualQuaternionSkinning(bool value); @@ -409,14 +412,14 @@ protected: bool _snapModelToRegistrationPoint; /// is the model's offset automatically adjusted to a registration point in model space bool _snappedToRegistrationPoint; /// are we currently snapped to a registration point - glm::vec3 _registrationPoint = glm::vec3(0.5f); /// the point in model space our center is snapped to + glm::vec3 _registrationPoint { glm::vec3(0.5f) }; /// the point in model space our center is snapped to + bool _needsTransformUpdate { false }; std::vector _meshStates; virtual void initJointStates(); void setScaleInternal(const glm::vec3& scale); - void snapToRegistrationPoint(); virtual void updateRig(float deltaTime, glm::mat4 parentTransform); From 7ff8236da26f0c0e2d1c3e37c425aeb22ddf6789 Mon Sep 17 00:00:00 2001 From: Alezia Kurdis <60075796+AleziaKurdis@users.noreply.github.com> Date: Thu, 17 Dec 2020 22:07:11 -0500 Subject: [PATCH 028/152] Minor Code Adjustments Minor Code Adjustments --- scripts/system/libraries/entityIconOverlayManager.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/scripts/system/libraries/entityIconOverlayManager.js b/scripts/system/libraries/entityIconOverlayManager.js index bed83b55a0..f2ca5625ea 100644 --- a/scripts/system/libraries/entityIconOverlayManager.js +++ b/scripts/system/libraries/entityIconOverlayManager.js @@ -76,10 +76,10 @@ EntityIconOverlayManager = function(entityTypes, getOverlayPropertiesFunc) { var overlay; if (unusedOverlays.length === 0) { overlay = Entities.addEntity({ - "type": "Image", - "billboardMode": "full", - "emissive": true - },"local"); + type: "Image", + billboardMode: "full", + emissive: true + }, "local"); allOverlays.push(overlay); } else { overlay = unusedOverlays.pop(); From 2179c153de8bd8d1b455894e9ccd3699df133c3f Mon Sep 17 00:00:00 2001 From: Phil Palmer Date: Tue, 22 Dec 2020 14:22:27 -0500 Subject: [PATCH 029/152] VR fixes for: couldn't sit on the floor, wrong walk directions. - Divided the option "Avatar leaning behavior" into two options that work more usefully: "Allow my avatar to stand" and "Allow my avatar to lean" (PreferencesDialog.cpp). Made the necessary fixes so that the avatar can be set to stand only when the user is standing (more details below). - The logic controlling the direction of MyAvatar's action motor is now centralised in calculateScaledDirection (was previously split between there and updateMotors). calculateScaledDirection now returns a velocity in world space. - CharacterController::FollowHelper now uses separate follow timers for rotation, horizontal and vertical (previously followed all three based on the longest of their follow times). Where appropriate, FollowHelper can now snap immediately to the desired rotation/horizontal/vertical independently (see FOLLOW_TIME_IMMEDIATE_SNAP). - FollowHelper::FollowType has therefore moved to CharacterController::FollowType. - MyAvatar::FollowHelper::postPhysicsUpdate: If MyAvatar is not allowed to stand when the user is sitting, this now avoids recentring the body based on the head height. - Removed Q_PROPERTY(MyAvatar::SitStandModelType, as the sitting/standing/leaning model uses different enums now (see setAllowAvatarStandingPreference, setAllowAvatarLeaningPreference). - Removed Q_PROPERTY(bool isSitStandStateLocked which is no longer used, because we now always track the user's real-world sit/stand state, regardless of what we're doing with it. - MyAvatar::FollowHelper::shouldActivateHorizontal: If MyAvatar is not allowed to lean, this now returns true to recentre the footing if the head is outside the base of support. - MyAvatar::FollowHelper::shouldActivateHorizontalCG: If MyAvatar is not allowed to lean, this now always returns true to recentre the footing. Rearranged to avoid computing values that weren't used depending on the conditions. Resolved some duplicated code. - MyAvatar::setUserRecenterModel previously set HMDLeanRecenterEnabled based on the chosen mode, but it got reset when getting out of a sit. Now HMDLeanRecenterEnabled is only controlled by the scripts. - Added Rig::getUnscaledHipsHeight (like getUnscaledEyeHeight). Refactored a little to avoid duplicated code. Added DEFAULT_AVATAR_HIPS_HEIGHT which is the value that Rig::getUnscaledHipsHeight returns when using the default avatar. - Fix for recentring not behaving as requested by the user after getting up from click-to-sit (always behaving like 'Auto') : MyAvatar::endSit now passes false to centerBody for 'forceFollowYPos'. - Fix for incorrect vertical position of the avatar and viewpoint after changing lean recentre mode while not standing in the real world: MyAvatar::setAllowAvatarStandingPreference now calls centerBody with false for 'forceFollowYPos'. - computeHipsInSensorFrame: The code now matches the comments in that it only skips the dampening of the hips rotation if the centre-of-gravity model is being used. --- interface/src/avatar/MyAvatar.cpp | 738 +++++++++++------- interface/src/avatar/MyAvatar.h | 93 ++- .../src/avatar/MyCharacterController.cpp | 4 +- interface/src/avatar/MyCharacterController.h | 2 +- interface/src/avatar/MySkeletonModel.cpp | 15 +- interface/src/ui/AnimStats.cpp | 6 +- interface/src/ui/PreferencesDialog.cpp | 62 +- libraries/animation/src/Rig.cpp | 51 +- libraries/animation/src/Rig.h | 6 + libraries/physics/src/CharacterController.cpp | 131 ++-- libraries/physics/src/CharacterController.h | 23 +- libraries/shared/src/AvatarConstants.h | 1 + 12 files changed, 691 insertions(+), 441 deletions(-) diff --git a/interface/src/avatar/MyAvatar.cpp b/interface/src/avatar/MyAvatar.cpp index b3231b906d..e5413105f8 100644 --- a/interface/src/avatar/MyAvatar.cpp +++ b/interface/src/avatar/MyAvatar.cpp @@ -96,10 +96,8 @@ const float CENTIMETERS_PER_METER = 100.0f; const QString AVATAR_SETTINGS_GROUP_NAME { "Avatar" }; -static const QString USER_RECENTER_MODEL_FORCE_SIT = QStringLiteral("ForceSit"); -static const QString USER_RECENTER_MODEL_FORCE_STAND = QStringLiteral("ForceStand"); -static const QString USER_RECENTER_MODEL_AUTO = QStringLiteral("Auto"); -static const QString USER_RECENTER_MODEL_DISABLE_HMD_LEAN = QStringLiteral("DisableHMDLean"); +static const QString ALLOW_AVATAR_STANDING_ALWAYS = QStringLiteral("Always"); +static const QString ALLOW_AVATAR_STANDING_WHEN_USER_IS_STANDING = QStringLiteral("UserStanding"); const QString HEAD_BLEND_DIRECTIONAL_ALPHA_NAME = "lookAroundAlpha"; const QString HEAD_BLEND_LINEAR_ALPHA_NAME = "lookBlendAlpha"; @@ -111,30 +109,38 @@ const QString POINT_BLEND_LINEAR_ALPHA_NAME = "pointBlendAlpha"; const QString POINT_REF_JOINT_NAME = "RightShoulder"; const float POINT_ALPHA_BLENDING = 1.0f; -MyAvatar::SitStandModelType stringToUserRecenterModel(const QString& str) { - if (str == USER_RECENTER_MODEL_FORCE_SIT) { - return MyAvatar::ForceSit; - } else if (str == USER_RECENTER_MODEL_FORCE_STAND) { - return MyAvatar::ForceStand; - } else if (str == USER_RECENTER_MODEL_DISABLE_HMD_LEAN) { - return MyAvatar::DisableHMDLean; - } else { - return MyAvatar::Auto; +const std::array(MyAvatar::AllowAvatarStandingPreference::Count)> + MyAvatar::allowAvatarStandingPreferenceStrings = { + QStringLiteral("WhenUserIsStanding"), + QStringLiteral("Always") +}; + +const std::array(MyAvatar::AllowAvatarLeaningPreference::Count)> + MyAvatar::allowAvatarLeaningPreferenceStrings = { + QStringLiteral("WhenUserIsStanding"), + QStringLiteral("Always"), + QStringLiteral("Never"), + QStringLiteral("AlwaysNoRecenter") +}; + +MyAvatar::AllowAvatarStandingPreference stringToAllowAvatarStandingPreference(const QString& str) { + for (uint stringIndex = 0; stringIndex < static_cast(MyAvatar::AllowAvatarStandingPreference::Count); stringIndex++) { + if (MyAvatar::allowAvatarStandingPreferenceStrings[stringIndex] == str) { + return static_cast(stringIndex); + } } + + return MyAvatar::AllowAvatarStandingPreference::Default; } -QString userRecenterModelToString(MyAvatar::SitStandModelType model) { - switch (model) { - case MyAvatar::ForceSit: - return USER_RECENTER_MODEL_FORCE_SIT; - case MyAvatar::ForceStand: - return USER_RECENTER_MODEL_FORCE_STAND; - case MyAvatar::DisableHMDLean: - return USER_RECENTER_MODEL_DISABLE_HMD_LEAN; - case MyAvatar::Auto: - default: - return USER_RECENTER_MODEL_AUTO; +MyAvatar::AllowAvatarLeaningPreference stringToAllowAvatarLeaningPreference(const QString& str) { + for (uint stringIndex = 0; stringIndex < static_cast(MyAvatar::AllowAvatarLeaningPreference::Count); stringIndex++) { + if (MyAvatar::allowAvatarLeaningPreferenceStrings[stringIndex] == str) { + return static_cast(stringIndex); + } } + + return MyAvatar::AllowAvatarLeaningPreference::Default; } static const QStringList TRIGGER_REACTION_NAMES = { @@ -166,7 +172,7 @@ MyAvatar::MyAvatar(QThread* thread) : _scriptedMotorFrame(SCRIPTED_MOTOR_CAMERA_FRAME), _scriptedMotorMode(SCRIPTED_MOTOR_SIMPLE_MODE), _motionBehaviors(AVATAR_MOTION_DEFAULTS), - _characterController(std::shared_ptr(this)), + _characterController(std::shared_ptr(this), _follow._timeRemaining), _eyeContactTarget(LEFT_EYE), _realWorldFieldOfView("realWorldFieldOfView", DEFAULT_REAL_WORLD_FIELD_OF_VIEW_DEGREES), @@ -214,8 +220,12 @@ MyAvatar::MyAvatar(QThread* thread) : _analogWalkSpeedSetting(QStringList() << AVATAR_SETTINGS_GROUP_NAME << "analogWalkSpeed", _analogWalkSpeed.get()), _analogPlusWalkSpeedSetting(QStringList() << AVATAR_SETTINGS_GROUP_NAME << "analogPlusWalkSpeed", _analogPlusWalkSpeed.get()), _controlSchemeIndexSetting(QStringList() << AVATAR_SETTINGS_GROUP_NAME << "controlSchemeIndex", _controlSchemeIndex), - _userRecenterModelSetting(QStringList() << AVATAR_SETTINGS_GROUP_NAME << "userRecenterModel", USER_RECENTER_MODEL_AUTO) -{ + _allowAvatarStandingPreferenceSetting(QStringList() << AVATAR_SETTINGS_GROUP_NAME << "allowAvatarStandingPreference", + allowAvatarStandingPreferenceStrings[static_cast( + AllowAvatarStandingPreference::Default)]), + _allowAvatarLeaningPreferenceSetting(QStringList() << AVATAR_SETTINGS_GROUP_NAME << "allowAvatarLeaningPreference", + allowAvatarLeaningPreferenceStrings[static_cast( + AllowAvatarLeaningPreference::Default)]) { _clientTraitsHandler.reset(new ClientTraitsHandler(this)); // give the pointer to our head to inherited _headData variable from AvatarData @@ -487,14 +497,17 @@ void MyAvatar::resetSensorsAndBody() { reset(true, false, true); } -void MyAvatar::centerBody() { +// forceFollowYPos: true to force the body matrix to be affected by the HMD's +// vertical position, even if crouch recentering is disabled. +void MyAvatar::centerBody(const bool forceFollowYPos) { if (QThread::currentThread() != thread()) { QMetaObject::invokeMethod(this, "centerBody"); return; } // derive the desired body orientation from the current hmd orientation, before the sensor reset. - auto newBodySensorMatrix = deriveBodyFromHMDSensor(); // Based on current cached HMD position/rotation.. + auto newBodySensorMatrix = + deriveBodyFromHMDSensor(forceFollowYPos); // Based on current cached HMD position/rotation.. // transform this body into world space auto worldBodyMatrix = _sensorToWorldMatrix * newBodySensorMatrix; @@ -571,64 +584,63 @@ void MyAvatar::reset(bool andRecenter, bool andReload, bool andHead) { } } +// Determine if the user is sitting or standing in the real world. void MyAvatar::updateSitStandState(float newHeightReading, float dt) { const float STANDING_HEIGHT_MULTIPLE = 1.2f; const float SITTING_HEIGHT_MULTIPLE = 0.833f; const float SITTING_TIMEOUT = 4.0f; // 4 seconds const float STANDING_TIMEOUT = 0.3333f; // 1/3 second const float SITTING_UPPER_BOUND = 1.52f; - if (!getIsSitStandStateLocked()) { - if (!getIsAway() && getControllerPoseInAvatarFrame(controller::Action::HEAD).isValid()) { - if (getIsInSittingState()) { - if (newHeightReading > (STANDING_HEIGHT_MULTIPLE * _tippingPoint)) { - // if we recenter upwards then no longer in sitting state - _sitStandStateTimer += dt; - if (_sitStandStateTimer > STANDING_TIMEOUT) { - _averageUserHeightSensorSpace = newHeightReading; - _tippingPoint = newHeightReading; - setIsInSittingState(false); - } - } else if (newHeightReading < (SITTING_HEIGHT_MULTIPLE * _tippingPoint)) { - // if we are mis labelled as sitting but we are standing in the real world this will - // make sure that a real sit is still recognized so we won't be stuck in sitting unable to change state - _sitStandStateTimer += dt; - if (_sitStandStateTimer > SITTING_TIMEOUT) { - _averageUserHeightSensorSpace = newHeightReading; - _tippingPoint = newHeightReading; - // here we stay in sit state but reset the average height - setIsInSittingState(true); - } - } else { - // sanity check if average height greater than 5ft they are not sitting(or get off your dangerous barstool please) - if (_averageUserHeightSensorSpace > SITTING_UPPER_BOUND) { - setIsInSittingState(false); - } else { - // tipping point is average height when sitting. - _tippingPoint = _averageUserHeightSensorSpace; - _sitStandStateTimer = 0.0f; - } + if (!getIsAway() && getControllerPoseInAvatarFrame(controller::Action::HEAD).isValid()) { + if (getIsInSittingState()) { + if (newHeightReading > (STANDING_HEIGHT_MULTIPLE * _tippingPoint)) { + // if we recenter upwards then no longer in sitting state + _sitStandStateTimer += dt; + if (_sitStandStateTimer > STANDING_TIMEOUT) { + _averageUserHeightSensorSpace = newHeightReading; + _tippingPoint = newHeightReading; + setIsInSittingState(false); + } + } else if (newHeightReading < (SITTING_HEIGHT_MULTIPLE * _tippingPoint)) { + // if we are mis labelled as sitting but we are standing in the real world this will + // make sure that a real sit is still recognized so we won't be stuck in sitting unable to change state + _sitStandStateTimer += dt; + if (_sitStandStateTimer > SITTING_TIMEOUT) { + _averageUserHeightSensorSpace = newHeightReading; + _tippingPoint = newHeightReading; + // here we stay in sit state but reset the average height + setIsInSittingState(true); } } else { - // in the standing state - if (newHeightReading < (SITTING_HEIGHT_MULTIPLE * _tippingPoint)) { - _sitStandStateTimer += dt; - if (_sitStandStateTimer > SITTING_TIMEOUT) { - _averageUserHeightSensorSpace = newHeightReading; - _tippingPoint = newHeightReading; - setIsInSittingState(true); - } + // sanity check if average height greater than 5ft they are not sitting(or get off your dangerous barstool please) + if (_averageUserHeightSensorSpace > SITTING_UPPER_BOUND) { + setIsInSittingState(false); } else { - // use the mode height for the tipping point when we are standing. - _tippingPoint = getCurrentStandingHeight(); + // tipping point is average height when sitting. + _tippingPoint = _averageUserHeightSensorSpace; _sitStandStateTimer = 0.0f; } } } else { - //if you are away then reset the average and set state to standing. - _averageUserHeightSensorSpace = _userHeight.get(); - _tippingPoint = _userHeight.get(); - setIsInSittingState(false); + // in the standing state + if (newHeightReading < (SITTING_HEIGHT_MULTIPLE * _tippingPoint)) { + _sitStandStateTimer += dt; + if (_sitStandStateTimer > SITTING_TIMEOUT) { + _averageUserHeightSensorSpace = newHeightReading; + _tippingPoint = newHeightReading; + setIsInSittingState(true); + } + } else { + // use the mode height for the tipping point when we are standing. + _tippingPoint = getCurrentStandingHeight(); + _sitStandStateTimer = 0.0f; + } } + } else { + //if you are away then reset the average and set state to standing. + _averageUserHeightSensorSpace = _userHeight.get(); + _tippingPoint = _userHeight.get(); + setIsInSittingState(false); } } @@ -692,9 +704,9 @@ void MyAvatar::update(float deltaTime) { } float angleSpine2 = glm::dot(upSpine2, glm::vec3(0.0f, 1.0f, 0.0f)); - if (getControllerPoseInAvatarFrame(controller::Action::HEAD).getTranslation().y < (headDefaultPositionAvatarSpace.y - SQUAT_THRESHOLD) && - (angleSpine2 > COSINE_THIRTY_DEGREES) && - (getUserRecenterModel() != MyAvatar::SitStandModelType::ForceStand)) { + if (getHMDCrouchRecenterEnabled() && + getControllerPoseInAvatarFrame(controller::Action::HEAD).getTranslation().y < (headDefaultPositionAvatarSpace.y - SQUAT_THRESHOLD) && + (angleSpine2 > COSINE_THIRTY_DEGREES)) { _squatTimer += deltaTime; if (_squatTimer > SQUATTY_TIMEOUT) { @@ -832,7 +844,7 @@ void MyAvatar::recalculateChildCauterization() const { _cauterizationNeedsUpdate = true; } -bool MyAvatar::isFollowActive(FollowHelper::FollowType followType) const { +bool MyAvatar::isFollowActive(CharacterController::FollowType followType) const { return _follow.isActive(followType); } @@ -1277,6 +1289,10 @@ void MyAvatar::resizeAvatarEntitySettingHandles(uint32_t maxIndex) { void MyAvatar::saveData() { _dominantHandSetting.set(getDominantHand()); + _allowAvatarStandingPreferenceSetting.set( + allowAvatarStandingPreferenceStrings[static_cast(getAllowAvatarStandingPreference())]); + _allowAvatarLeaningPreferenceSetting.set( + allowAvatarLeaningPreferenceStrings[static_cast(getAllowAvatarLeaningPreference())]); _strafeEnabledSetting.set(getStrafeEnabled()); _hmdAvatarAlignmentTypeSetting.set(getHmdAvatarAlignmentType()); _headPitchSetting.set(getHead()->getBasePitch()); @@ -1311,7 +1327,10 @@ void MyAvatar::saveData() { _analogWalkSpeedSetting.set(getAnalogWalkSpeed()); _analogPlusWalkSpeedSetting.set(getAnalogPlusWalkSpeed()); _controlSchemeIndexSetting.set(getControlSchemeIndex()); - _userRecenterModelSetting.set(userRecenterModelToString(getUserRecenterModel())); + _allowAvatarStandingPreferenceSetting.set( + allowAvatarStandingPreferenceStrings[static_cast(getAllowAvatarStandingPreference())]); + _allowAvatarLeaningPreferenceSetting.set( + allowAvatarLeaningPreferenceStrings[static_cast(getAllowAvatarLeaningPreference())]); auto hmdInterface = DependencyManager::get(); saveAvatarEntityDataToSettings(); @@ -2004,7 +2023,10 @@ void MyAvatar::loadData() { setUserHeight(_userHeightSetting.get(DEFAULT_AVATAR_HEIGHT)); setTargetScale(_scaleSetting.get()); - setUserRecenterModel(stringToUserRecenterModel(_userRecenterModelSetting.get(USER_RECENTER_MODEL_AUTO))); + setAllowAvatarStandingPreference(stringToAllowAvatarStandingPreference(_allowAvatarStandingPreferenceSetting.get( + allowAvatarStandingPreferenceStrings[static_cast(AllowAvatarStandingPreference::Default)]))); + setAllowAvatarLeaningPreference(stringToAllowAvatarLeaningPreference(_allowAvatarLeaningPreferenceSetting.get( + allowAvatarLeaningPreferenceStrings[static_cast(AllowAvatarLeaningPreference::Default)]))); setEnableMeshVisible(Menu::getInstance()->isOptionChecked(MenuOption::MeshVisible)); _follow.setToggleHipsFollowing (Menu::getInstance()->isOptionChecked(MenuOption::ToggleHipsFollowing)); @@ -2666,15 +2688,8 @@ controller::Pose MyAvatar::getControllerPoseInAvatarFrame(controller::Action act } } -glm::quat MyAvatar::getOffHandRotation() const { - auto hand = (getDominantHand() == DOMINANT_RIGHT_HAND) ? controller::Action::LEFT_HAND : controller::Action::RIGHT_HAND; - auto pose = getControllerPoseInAvatarFrame(hand); - return pose.rotation; -} - void MyAvatar::updateMotors() { _characterController.clearMotors(); - glm::quat motorRotation; const float FLYING_MOTOR_TIMESCALE = 0.05f; const float WALKING_MOTOR_TIMESCALE = 0.2f; @@ -2693,35 +2708,17 @@ void MyAvatar::updateMotors() { } if (_motionBehaviors & AVATAR_MOTION_ACTION_MOTOR_ENABLED) { - if (_characterController.getState() == CharacterController::State::Hover || - _characterController.computeCollisionMask() == BULLET_COLLISION_MASK_COLLISIONLESS) { - CameraMode mode = qApp->getCamera().getMode(); - if (!qApp->isHMDMode() && (mode == CAMERA_MODE_FIRST_PERSON_LOOK_AT || mode == CAMERA_MODE_LOOK_AT || mode == CAMERA_MODE_SELFIE)) { - motorRotation = getLookAtRotation(); - } else { - motorRotation = getMyHead()->getHeadOrientation(); - } - } else { - // non-hovering = walking: follow camera twist about vertical but not lift - // we decompose camera's rotation and store the twist part in motorRotation - // however, we need to perform the decomposition in the avatar-frame - // using the local UP axis and then transform back into world-frame - glm::quat orientation = getWorldOrientation(); - glm::quat headOrientation = glm::inverse(orientation) * getMyHead()->getHeadOrientation(); // avatar-frame - glm::quat liftRotation; - swingTwistDecomposition(headOrientation, Vectors::UNIT_Y, liftRotation, motorRotation); - motorRotation = orientation * motorRotation; - } - if (_isPushing || _isBraking || !_isBeingPushed) { - _characterController.addMotor(_actionMotorVelocity, motorRotation, horizontalMotorTimescale, verticalMotorTimescale); + _characterController.addMotor(_actionMotorVelocity, Quaternions::IDENTITY, horizontalMotorTimescale, + verticalMotorTimescale); } else { // _isBeingPushed must be true --> disable action motor by giving it a long timescale, // otherwise it's attempt to "stand in in place" could defeat scripted motor/thrusts - _characterController.addMotor(_actionMotorVelocity, motorRotation, INVALID_MOTOR_TIMESCALE); + _characterController.addMotor(_actionMotorVelocity, Quaternions::IDENTITY, INVALID_MOTOR_TIMESCALE); } } if (_motionBehaviors & AVATAR_MOTION_SCRIPTED_MOTOR_ENABLED) { + glm::quat motorRotation; if (_scriptedMotorFrame == SCRIPTED_MOTOR_CAMERA_FRAME) { motorRotation = getMyHead()->getHeadOrientation() * glm::angleAxis(PI, Vectors::UNIT_Y); } else if (_scriptedMotorFrame == SCRIPTED_MOTOR_AVATAR_FRAME) { @@ -3793,54 +3790,115 @@ glm::vec3 MyAvatar::scaleMotorSpeed(const glm::vec3 forward, const glm::vec3 rig } } -glm::vec3 MyAvatar::calculateScaledDirection(){ +// Calculate the world-space motor velocity for the avatar. +glm::vec3 MyAvatar::calculateScaledDirection() { CharacterController::State state = _characterController.getState(); // compute action input // Determine if we're head or controller relative... - glm::vec3 forward, right; + glm::vec3 forward; + glm::vec3 right; - if (qApp->isHMDMode()) { - auto handRotation = getOffHandRotation(); - glm::vec3 controllerForward(0.0f, 1.0f, 0.0f); - glm::vec3 controllerRight(0.0f, 0.0f, (getDominantHand() == DOMINANT_RIGHT_HAND ? 1.0f : -1.0f)); - glm::vec3 transform; - switch (getMovementReference()) { - case LocomotionRelativeMovementMode::MOVEMENT_HAND_RELATIVE: - forward = (handRotation * controllerForward); - right = (handRotation * controllerRight); - break; - case LocomotionRelativeMovementMode::MOVEMENT_HAND_RELATIVE_LEVELED: - forward = (handRotation * controllerForward); - transform = forward - (glm::dot(forward, Vectors::UNIT_Y) * Vectors::UNIT_Y); - if (glm::length(transform) > EPSILON) { - forward = glm::normalize(transform); - } else { - forward = Vectors::ZERO; - } - right = (handRotation * controllerRight); - transform = right - (glm::dot(right, Vectors::UNIT_Y) * Vectors::UNIT_Y); - if (glm::length(transform) > EPSILON) { - right = glm::normalize(transform); - } else { - right = Vectors::ZERO; - } - break; - case LocomotionRelativeMovementMode::MOVEMENT_HMD_RELATIVE: - default: - forward = IDENTITY_FORWARD; - right = IDENTITY_RIGHT; + const int movementReference = getMovementReference(); + CameraMode cameraMode = qApp->getCamera().getMode(); + + bool vectorsAreInAvatarFrame = true; + bool removeLocalYComponent = false; + + const bool HMDHandRelativeMovement = + qApp->isHMDMode() && (movementReference == LocomotionRelativeMovementMode::MOVEMENT_HAND_RELATIVE || + movementReference == LocomotionRelativeMovementMode::MOVEMENT_HAND_RELATIVE_LEVELED); + + const bool desktopLookatOrSelfieMode = + !qApp->isHMDMode() && (cameraMode == CAMERA_MODE_FIRST_PERSON_LOOK_AT || cameraMode == CAMERA_MODE_LOOK_AT || + cameraMode == CAMERA_MODE_SELFIE); + + const bool hoveringOrCollisionless = _characterController.getState() == CharacterController::State::Hover || + _characterController.computeCollisionMask() == BULLET_COLLISION_MASK_COLLISIONLESS; + + if (HMDHandRelativeMovement) { + const controller::Action directionHand = + (getDominantHand() == DOMINANT_RIGHT_HAND) ? controller::Action::LEFT_HAND : controller::Action::RIGHT_HAND; + const controller::Pose handPoseInAvatarFrame = getControllerPoseInAvatarFrame(directionHand); + + if (handPoseInAvatarFrame.isValid()) { + const glm::vec3 controllerForward(0.0f, 1.0f, 0.0f); + const glm::vec3 controllerRight(0.0f, 0.0f, (directionHand == controller::Action::LEFT_HAND) ? 1.0f : -1.0f); + + forward = (handPoseInAvatarFrame.rotation * controllerForward); + right = (handPoseInAvatarFrame.rotation * controllerRight); + + removeLocalYComponent = (movementReference == LocomotionRelativeMovementMode::MOVEMENT_HAND_RELATIVE_LEVELED); + } + } else { // MOVEMENT_HMD_RELATIVE or desktop mode + if (qApp->isHMDMode()) { + forward = -IDENTITY_FORWARD; + right = -IDENTITY_RIGHT; + } else { + forward = IDENTITY_FORWARD; + right = IDENTITY_RIGHT; + } + + glm::quat rotation = Quaternions::IDENTITY; + + if (hoveringOrCollisionless && desktopLookatOrSelfieMode) { + rotation = getLookAtRotation(); + removeLocalYComponent = false; + vectorsAreInAvatarFrame = false; + } else { + controller::Pose headPoseLocal = getControllerPoseInAvatarFrame(controller::Action::HEAD); + if (headPoseLocal.isValid()) { + rotation = headPoseLocal.rotation; + } + removeLocalYComponent = !hoveringOrCollisionless; + } + + forward = rotation * forward; + right = rotation * right; + } + + if (removeLocalYComponent) { + assert(vectorsAreInAvatarFrame); + + auto removeYAndNormalize = [](glm::vec3& vector) { + vector.y = 0.f; + // Normalize if the remaining components are large enough to get a reliable direction. + const float length = glm::length(vector); + const float MIN_LENGTH_FOR_NORMALIZE = 0.061f; // sin(3.5 degrees) + if (length > MIN_LENGTH_FOR_NORMALIZE) { + vector /= length; + } else { + vector = Vectors::ZERO; + } + }; + + removeYAndNormalize(forward); + removeYAndNormalize(right); + } + + // In HMD, we combine the head pitch into the flying direction even when using hand-relative movement. + // Todo: Option to ignore head pitch in hand-relative flying (MOVEMENT_HAND_RELATIVE_LEVELED would then act like MOVEMENT_HAND_RELATIVE when flying). + if (HMDHandRelativeMovement && hoveringOrCollisionless) { + controller::Pose headPoseLocal = getControllerPoseInAvatarFrame(controller::Action::HEAD); + + if (headPoseLocal.isValid()) { + glm::quat headLocalPitchRotation; + glm::quat headLocalYawRotation_unused; + swingTwistDecomposition(headPoseLocal.rotation, Vectors::UP, headLocalPitchRotation, headLocalYawRotation_unused); + + forward = headLocalPitchRotation * forward; + right = headLocalPitchRotation * right; } - } else { - forward = IDENTITY_FORWARD; - right = IDENTITY_RIGHT; } glm::vec3 direction = scaleMotorSpeed(forward, right); - if (state == CharacterController::State::Hover || - _characterController.computeCollisionMask() == BULLET_COLLISION_MASK_COLLISIONLESS) { - glm::vec3 up = (getDriveKey(TRANSLATE_Y)) * IDENTITY_UP; + if (vectorsAreInAvatarFrame) { + direction = getWorldOrientation() * direction; + } + + if (hoveringOrCollisionless) { + glm::vec3 up = getDriveKey(TRANSLATE_Y) * IDENTITY_UP; direction += up; } @@ -4724,7 +4782,9 @@ void MyAvatar::triggerRotationRecenter() { } // old school meat hook style -glm::mat4 MyAvatar::deriveBodyFromHMDSensor() const { +// forceFollowYPos (default false): true to force the body matrix to be affected by the HMD's +// vertical position, even if crouch recentering is disabled. +glm::mat4 MyAvatar::deriveBodyFromHMDSensor(const bool forceFollowYPos) const { glm::vec3 headPosition(0.0f, _userHeight.get(), 0.0f); glm::quat headOrientation; auto headPose = getControllerPoseInSensorFrame(controller::Action::HEAD); @@ -4760,8 +4820,30 @@ glm::mat4 MyAvatar::deriveBodyFromHMDSensor() const { float invSensorToWorldScale = getUserEyeHeight() / getEyeHeight(); glm::vec3 bodyPos = headPosition + invSensorToWorldScale * (headToNeck + neckToRoot); + glm::quat bodyQuat; - return createMatFromQuatAndPos(headOrientationYawOnly, bodyPos); + const controller::Pose hipsControllerPose = getControllerPoseInSensorFrame(controller::Action::HIPS); + if (hipsControllerPose.isValid()) { + const glm::quat hipsOrientation = hipsControllerPose.rotation * Quaternions::Y_180; + const glm::quat hipsOrientationYawOnly = cancelOutRollAndPitch(hipsOrientation); + + const glm::vec3 hipsPos = hipsControllerPose.getTranslation(); + bodyPos.x = hipsPos.x; + bodyPos.z = hipsPos.z; + + bodyQuat = hipsOrientationYawOnly; + } else { + bodyQuat = headOrientationYawOnly; + } + + if (!forceFollowYPos && !getHMDCrouchRecenterEnabled()) { + // Set the body's vertical position as if it were standing in its T-pose. + bodyPos.y = rig.getUnscaledHipsHeight(); + } + + glm::mat4 bodyMat = createMatFromQuatAndPos(bodyQuat, bodyPos); + + return bodyMat; } glm::mat4 MyAvatar::getSpine2RotationRigSpace() const { @@ -5159,16 +5241,19 @@ bool MyAvatar::getIsInWalkingState() const { return _isInWalkingState; } +// Determine if the user is sitting in the real world. bool MyAvatar::getIsInSittingState() const { return _isInSittingState.get(); } -MyAvatar::SitStandModelType MyAvatar::getUserRecenterModel() const { - return _userRecenterModel.get(); +// Get the user preference of when MyAvatar may stand. +MyAvatar::AllowAvatarStandingPreference MyAvatar::getAllowAvatarStandingPreference() const { + return _allowAvatarStandingPreference.get(); } -bool MyAvatar::getIsSitStandStateLocked() const { - return _lockSitStandState.get(); +// Get the user preference of when MyAvatar may lean. +MyAvatar::AllowAvatarLeaningPreference MyAvatar::getAllowAvatarLeaningPreference() const { + return _allowAvatarLeaningPreference.get(); } float MyAvatar::getWalkSpeed() const { @@ -5221,59 +5306,29 @@ void MyAvatar::setIsInWalkingState(bool isWalking) { _isInWalkingState = isWalking; } +// Specify whether the user is sitting or standing in the real world. void MyAvatar::setIsInSittingState(bool isSitting) { _sitStandStateTimer = 0.0f; _squatTimer = 0.0f; // on reset height we need the count to be more than one in case the user sits and stands up quickly. _isInSittingState.set(isSitting); setResetMode(true); - if (isSitting) { - setCenterOfGravityModelEnabled(false); - } else { - setCenterOfGravityModelEnabled(true); - } + setCenterOfGravityModelEnabled(!isSitting); setSitStandStateChange(true); } -void MyAvatar::setUserRecenterModel(MyAvatar::SitStandModelType modelName) { +// Set the user preference of when the avatar may stand. +void MyAvatar::setAllowAvatarStandingPreference(const MyAvatar::AllowAvatarStandingPreference preference) { + _allowAvatarStandingPreference.set(preference); - _userRecenterModel.set(modelName); - - switch (modelName) { - case MyAvatar::SitStandModelType::ForceSit: - setHMDLeanRecenterEnabled(true); - setIsInSittingState(true); - setIsSitStandStateLocked(true); - break; - case MyAvatar::SitStandModelType::ForceStand: - setHMDLeanRecenterEnabled(true); - setIsInSittingState(false); - setIsSitStandStateLocked(true); - break; - case MyAvatar::SitStandModelType::Auto: - default: - setHMDLeanRecenterEnabled(true); - setIsInSittingState(false); - setIsSitStandStateLocked(false); - break; - case MyAvatar::SitStandModelType::DisableHMDLean: - setHMDLeanRecenterEnabled(false); - setIsInSittingState(false); - setIsSitStandStateLocked(false); - break; - } + // Set the correct vertical position for the avatar body relative to the HMD, + // according to the newly-selected avatar standing preference. + centerBody(false); } -void MyAvatar::setIsSitStandStateLocked(bool isLocked) { - _lockSitStandState.set(isLocked); - _sitStandStateTimer = 0.0f; - _squatTimer = 0.0f; - _averageUserHeightSensorSpace = _userHeight.get(); - _tippingPoint = _userHeight.get(); - if (!isLocked) { - // always start the auto transition mode in standing state. - setIsInSittingState(false); - } +// Set the user preference of when the avatar may lean. +void MyAvatar::setAllowAvatarLeaningPreference(const MyAvatar::AllowAvatarLeaningPreference preference) { + _allowAvatarLeaningPreference.set(preference); } void MyAvatar::setWalkSpeed(float value) { @@ -5402,10 +5457,12 @@ float MyAvatar::getAnalogPlusSprintSpeed() const { return _analogPlusSprintSpeed.get(); } +// Indicate whether the user's real-world sit/stand state has changed or not. void MyAvatar::setSitStandStateChange(bool stateChanged) { _sitStandStateChange = stateChanged; } +// Determine if the user's real-world sit/stand state has changed. float MyAvatar::getSitStandStateChange() const { return _sitStandStateChange; } @@ -5499,65 +5556,82 @@ MyAvatar::FollowHelper::FollowHelper() { } void MyAvatar::FollowHelper::deactivate() { - for (int i = 0; i < NumFollowTypes; i++) { - deactivate((FollowType)i); + for (uint i = 0, e = static_cast(CharacterController::FollowType::Count); i < e; ++i) { + deactivate((CharacterController::FollowType)i); } } -void MyAvatar::FollowHelper::deactivate(FollowType type) { - assert(type >= 0 && type < NumFollowTypes); +void MyAvatar::FollowHelper::deactivate(CharacterController::FollowType type) { + assert(static_cast(type) >= 0 && type < CharacterController::FollowType::Count); _timeRemaining[(int)type] = 0.0f; } -void MyAvatar::FollowHelper::activate(FollowType type) { - assert(type >= 0 && type < NumFollowTypes); +// snapFollow: true to snap immediately to the desired transform with regard to 'type', +// eg. activate(FollowType::Rotation, true) snaps the FollowHelper's rotation immediately +// to the rotation of its _followDesiredBodyTransform. +void MyAvatar::FollowHelper::activate(CharacterController::FollowType type, const bool snapFollow) { + assert(static_cast(type) >= 0 && type < CharacterController::FollowType::Count); + // TODO: Perhaps, the follow time should be proportional to the displacement. - _timeRemaining[(int)type] = FOLLOW_TIME; + _timeRemaining[(int)type] = snapFollow ? CharacterController::FOLLOW_TIME_IMMEDIATE_SNAP : FOLLOW_TIME; } -bool MyAvatar::FollowHelper::isActive(FollowType type) const { - assert(type >= 0 && type < NumFollowTypes); +bool MyAvatar::FollowHelper::isActive(CharacterController::FollowType type) const { + assert(static_cast(type) >= 0 && type < CharacterController::FollowType::Count); return _timeRemaining[(int)type] > 0.0f; } bool MyAvatar::FollowHelper::isActive() const { - for (int i = 0; i < NumFollowTypes; i++) { - if (isActive((FollowType)i)) { + for (uint i = 0, e = static_cast(CharacterController::FollowType::Count); i < e; ++i) { + if (isActive((CharacterController::FollowType)i)) { return true; } } return false; } -float MyAvatar::FollowHelper::getMaxTimeRemaining() const { - float max = 0.0f; - for (int i = 0; i < NumFollowTypes; i++) { - if (_timeRemaining[i] > max) { - max = _timeRemaining[i]; +void MyAvatar::FollowHelper::decrementTimeRemaining(float dt) { + for (uint i = 0, e = static_cast(CharacterController::FollowType::Count); i < e; ++i) { + if (_timeRemaining[i] == CharacterController::FOLLOW_TIME_IMMEDIATE_SNAP) { + _timeRemaining[i] = 0.f; + } + else { + _timeRemaining[i] -= dt; } } - return max; } -void MyAvatar::FollowHelper::decrementTimeRemaining(float dt) { - for (int i = 0; i < NumFollowTypes; i++) { - _timeRemaining[i] -= dt; +// shouldSnapOut: (out) true if the FollowHelper should snap immediately to its desired rotation. +bool MyAvatar::FollowHelper::shouldActivateRotation(const MyAvatar& myAvatar, + const glm::mat4& desiredBodyMatrix, + const glm::mat4& currentBodyMatrix, + bool& shouldSnapOut) const { + shouldSnapOut = false; + + // If hips are under direct control (tracked), they give our desired body rotation and we snap to it every frame. + if (myAvatar.areHipsTracked()) { + shouldSnapOut = true; + return true; } -} -bool MyAvatar::FollowHelper::shouldActivateRotation(const MyAvatar& myAvatar, const glm::mat4& desiredBodyMatrix, const glm::mat4& currentBodyMatrix) const { const float FOLLOW_ROTATION_THRESHOLD = cosf(myAvatar.getRotationThreshold()); glm::vec2 bodyFacing = getFacingDir2D(currentBodyMatrix); return glm::dot(-myAvatar.getHeadControllerFacingMovingAverage(), bodyFacing) < FOLLOW_ROTATION_THRESHOLD; } bool MyAvatar::FollowHelper::shouldActivateHorizontal(const MyAvatar& myAvatar, const glm::mat4& desiredBodyMatrix, const glm::mat4& currentBodyMatrix) const { + if (!myAvatar.isAllowedToLean()) { + controller::Pose currentHeadPose = myAvatar.getControllerPoseInAvatarFrame(controller::Action::HEAD); + if (!withinBaseOfSupport(currentHeadPose)) { + return true; + } + } + // -z axis of currentBodyMatrix in world space. glm::vec3 forward = glm::normalize(glm::vec3(-currentBodyMatrix[0][2], -currentBodyMatrix[1][2], -currentBodyMatrix[2][2])); // x axis of currentBodyMatrix in world space. glm::vec3 right = glm::normalize(glm::vec3(currentBodyMatrix[0][0], currentBodyMatrix[1][0], currentBodyMatrix[2][0])); glm::vec3 offset = extractTranslation(desiredBodyMatrix) - extractTranslation(currentBodyMatrix); - controller::Pose currentHeadPose = myAvatar.getControllerPoseInAvatarFrame(controller::Action::HEAD); float forwardLeanAmount = glm::dot(forward, offset); float lateralLeanAmount = glm::dot(right, offset); @@ -5567,11 +5641,7 @@ bool MyAvatar::FollowHelper::shouldActivateHorizontal(const MyAvatar& myAvatar, const float MAX_BACKWARD_LEAN = 0.1f; bool stepDetected = false; - if (myAvatar.getIsInSittingState()) { - if (!withinBaseOfSupport(currentHeadPose)) { - stepDetected = true; - } - } else if (forwardLeanAmount > 0 && forwardLeanAmount > MAX_FORWARD_LEAN) { + if (forwardLeanAmount > MAX_FORWARD_LEAN) { stepDetected = true; } else if (forwardLeanAmount < 0 && forwardLeanAmount < -MAX_BACKWARD_LEAN) { stepDetected = true; @@ -5583,50 +5653,60 @@ bool MyAvatar::FollowHelper::shouldActivateHorizontal(const MyAvatar& myAvatar, bool MyAvatar::FollowHelper::shouldActivateHorizontalCG(MyAvatar& myAvatar) const { - // get the current readings - controller::Pose currentHeadPose = myAvatar.getControllerPoseInAvatarFrame(controller::Action::HEAD); - controller::Pose currentLeftHandPose = myAvatar.getControllerPoseInAvatarFrame(controller::Action::LEFT_HAND); - controller::Pose currentRightHandPose = myAvatar.getControllerPoseInAvatarFrame(controller::Action::RIGHT_HAND); - controller::Pose currentHeadSensorPose = myAvatar.getControllerPoseInSensorFrame(controller::Action::HEAD); - - bool stepDetected = false; - float myScale = myAvatar.getAvatarScale(); - if (myAvatar.getIsInWalkingState()) { - stepDetected = true; - } else { - if (!withinBaseOfSupport(currentHeadPose) && - headAngularVelocityBelowThreshold(currentHeadPose) && - isWithinThresholdHeightMode(currentHeadSensorPose, myAvatar.getCurrentStandingHeight(), myScale) && - handDirectionMatchesHeadDirection(currentLeftHandPose, currentRightHandPose, currentHeadPose) && - handAngularVelocityBelowThreshold(currentLeftHandPose, currentRightHandPose) && - headVelocityGreaterThanThreshold(currentHeadPose) && - isHeadLevel(currentHeadPose, myAvatar.getAverageHeadRotation())) { - // a step is detected + return true; + } + + controller::Pose currentHeadPose = myAvatar.getControllerPoseInAvatarFrame(controller::Action::HEAD); + bool stepDetected = false; + + if (!withinBaseOfSupport(currentHeadPose)) { + if (!myAvatar.isAllowedToLean()) { stepDetected = true; - if (glm::length(currentHeadPose.velocity) > DEFAULT_AVATAR_WALK_SPEED_THRESHOLD) { - myAvatar.setIsInWalkingState(true); - } } else { - glm::vec3 defaultHipsPosition = myAvatar.getAbsoluteDefaultJointTranslationInObjectFrame(myAvatar.getJointIndex("Hips")); - glm::vec3 defaultHeadPosition = myAvatar.getAbsoluteDefaultJointTranslationInObjectFrame(myAvatar.getJointIndex("Head")); - glm::vec3 currentHeadPosition = currentHeadPose.getTranslation(); - float anatomicalHeadToHipsDistance = glm::length(defaultHeadPosition - defaultHipsPosition); - if (!isActive(Horizontal) && - (!isActive(Vertical)) && - (glm::length(currentHeadPosition - defaultHipsPosition) > (anatomicalHeadToHipsDistance + (DEFAULT_AVATAR_SPINE_STRETCH_LIMIT * anatomicalHeadToHipsDistance)))) { - myAvatar.setResetMode(true); + float myScale = myAvatar.getAvatarScale(); + + // get the current readings + controller::Pose currentLeftHandPose = myAvatar.getControllerPoseInAvatarFrame(controller::Action::LEFT_HAND); + controller::Pose currentRightHandPose = myAvatar.getControllerPoseInAvatarFrame(controller::Action::RIGHT_HAND); + controller::Pose currentHeadSensorPose = myAvatar.getControllerPoseInSensorFrame(controller::Action::HEAD); + + if (headAngularVelocityBelowThreshold(currentHeadPose) && + isWithinThresholdHeightMode(currentHeadSensorPose, myAvatar.getCurrentStandingHeight(), myScale) && + handDirectionMatchesHeadDirection(currentLeftHandPose, currentRightHandPose, currentHeadPose) && + handAngularVelocityBelowThreshold(currentLeftHandPose, currentRightHandPose) && + headVelocityGreaterThanThreshold(currentHeadPose) && + isHeadLevel(currentHeadPose, myAvatar.getAverageHeadRotation())) { + // a step is detected stepDetected = true; - if (glm::length(currentHeadPose.velocity) > DEFAULT_AVATAR_WALK_SPEED_THRESHOLD) { - myAvatar.setIsInWalkingState(true); - } } } } + + if (!stepDetected) { + glm::vec3 defaultHipsPosition = myAvatar.getAbsoluteDefaultJointTranslationInObjectFrame(myAvatar.getJointIndex("Hips")); + glm::vec3 defaultHeadPosition = myAvatar.getAbsoluteDefaultJointTranslationInObjectFrame(myAvatar.getJointIndex("Head")); + glm::vec3 currentHeadPosition = currentHeadPose.getTranslation(); + float anatomicalHeadToHipsDistance = glm::length(defaultHeadPosition - defaultHipsPosition); + if (!isActive(CharacterController::FollowType::Horizontal) && (!isActive(CharacterController::FollowType::Vertical)) && + (glm::length(currentHeadPosition - defaultHipsPosition) > (anatomicalHeadToHipsDistance + (DEFAULT_AVATAR_SPINE_STRETCH_LIMIT * anatomicalHeadToHipsDistance)))) { + myAvatar.setResetMode(true); + stepDetected = true; + } + } + + if (stepDetected) { + if (glm::length(currentHeadPose.velocity) > DEFAULT_AVATAR_WALK_SPEED_THRESHOLD) { + myAvatar.setIsInWalkingState(true); + } + } + return stepDetected; } -bool MyAvatar::FollowHelper::shouldActivateVertical(const MyAvatar& myAvatar, const glm::mat4& desiredBodyMatrix, const glm::mat4& currentBodyMatrix) const { +bool MyAvatar::FollowHelper::shouldActivateVertical(const MyAvatar& myAvatar, + const glm::mat4& desiredBodyMatrix, + const glm::mat4& currentBodyMatrix) const { const float CYLINDER_TOP = 2.0f; const float CYLINDER_BOTTOM = -1.5f; const float SITTING_BOTTOM = -0.02f; @@ -5638,9 +5718,6 @@ bool MyAvatar::FollowHelper::shouldActivateVertical(const MyAvatar& myAvatar, co returnValue = true; } else { if (myAvatar.getIsInSittingState()) { - if (myAvatar.getIsSitStandStateLocked()) { - returnValue = (offset.y > CYLINDER_TOP); - } if (offset.y < SITTING_BOTTOM) { // we recenter more easily when in sitting state. returnValue = true; @@ -5657,51 +5734,80 @@ bool MyAvatar::FollowHelper::shouldActivateVertical(const MyAvatar& myAvatar, co return returnValue; } -void MyAvatar::FollowHelper::prePhysicsUpdate(MyAvatar& myAvatar, const glm::mat4& desiredBodyMatrix, - const glm::mat4& currentBodyMatrix, bool hasDriveInput) { +void MyAvatar::FollowHelper::prePhysicsUpdate(MyAvatar& myAvatar, + const glm::mat4& desiredBodyMatrix, + const glm::mat4& currentBodyMatrix, + bool hasDriveInput) { + const bool feetAreTracked = myAvatar.areFeetTracked(); - if (myAvatar.getHMDLeanRecenterEnabled() && - qApp->getCamera().getMode() != CAMERA_MODE_MIRROR) { - if (!isActive(Rotation) && (shouldActivateRotation(myAvatar, desiredBodyMatrix, currentBodyMatrix) || hasDriveInput)) { - activate(Rotation); - myAvatar.setHeadControllerFacingMovingAverage(myAvatar.getHeadControllerFacing()); - } - if (myAvatar.getCenterOfGravityModelEnabled()) { - if (!isActive(Horizontal) && (shouldActivateHorizontalCG(myAvatar) || hasDriveInput)) { - activate(Horizontal); - if (myAvatar.getEnableStepResetRotation()) { - activate(Rotation); - myAvatar.setHeadControllerFacingMovingAverage(myAvatar.getHeadControllerFacing()); - } + if (myAvatar.getHMDLeanRecenterEnabled()) { + + // Rotation recenter + + { + bool snapFollow = false; + if (!isActive(CharacterController::FollowType::Rotation) && + (shouldActivateRotation(myAvatar, desiredBodyMatrix, currentBodyMatrix, snapFollow) || hasDriveInput)) { + activate(CharacterController::FollowType::Rotation, snapFollow); + myAvatar.setHeadControllerFacingMovingAverage(myAvatar.getHeadControllerFacing()); } + } + + // Horizontal and rotation recenter + + if ((feetAreTracked || getForceActivateHorizontal()) && !isActive(CharacterController::FollowType::Horizontal)) { + activate(CharacterController::FollowType::Horizontal, feetAreTracked); + setForceActivateHorizontal(false); } else { - // center of gravity model is not enabled - if (!isActive(Horizontal) && (shouldActivateHorizontal(myAvatar, desiredBodyMatrix, currentBodyMatrix) || hasDriveInput)) { - activate(Horizontal); - if (myAvatar.getEnableStepResetRotation() && !myAvatar.getIsInSittingState()) { - activate(Rotation); - myAvatar.setHeadControllerFacingMovingAverage(myAvatar.getHeadControllerFacing()); + if ((myAvatar.getAllowAvatarLeaningPreference() != MyAvatar::AllowAvatarLeaningPreference::AlwaysNoRecenter) && + qApp->getCamera().getMode() != CAMERA_MODE_MIRROR) { + if (myAvatar.getCenterOfGravityModelEnabled()) { + if (!isActive(CharacterController::FollowType::Horizontal) && (shouldActivateHorizontalCG(myAvatar) || hasDriveInput)) { + activate(CharacterController::FollowType::Horizontal, false); + if (myAvatar.getEnableStepResetRotation()) { + activate(CharacterController::FollowType::Rotation, false); + myAvatar.setHeadControllerFacingMovingAverage(myAvatar.getHeadControllerFacing()); + } + } + } else { + // center of gravity model is not enabled + if (!isActive(CharacterController::FollowType::Horizontal) && + (shouldActivateHorizontal(myAvatar, desiredBodyMatrix, currentBodyMatrix) || hasDriveInput)) { + activate(CharacterController::FollowType::Horizontal, false); + if (myAvatar.getEnableStepResetRotation() && !myAvatar.getIsInSittingState()) { + activate(CharacterController::FollowType::Rotation, false); + myAvatar.setHeadControllerFacingMovingAverage(myAvatar.getHeadControllerFacing()); + } + } } } } - if (!isActive(Vertical) && (shouldActivateVertical(myAvatar, desiredBodyMatrix, currentBodyMatrix) || hasDriveInput)) { - activate(Vertical); - if (_squatDetected) { - _squatDetected = false; + + // Vertical recenter + + if (myAvatar.getHMDCrouchRecenterEnabled() && qApp->getCamera().getMode() != CAMERA_MODE_MIRROR) { + if (!isActive(CharacterController::FollowType::Vertical) && + (shouldActivateVertical(myAvatar, desiredBodyMatrix, currentBodyMatrix) || hasDriveInput)) { + activate(CharacterController::FollowType::Vertical, false); + if (_squatDetected) { + _squatDetected = false; + } } } } else { - if (!isActive(Rotation) && getForceActivateRotation()) { - activate(Rotation); + // Forced activations can be requested by MyAvatar::triggerVerticalRecenter, callable from scripts. + + if (!isActive(CharacterController::FollowType::Rotation) && getForceActivateRotation()) { + activate(CharacterController::FollowType::Rotation, true); myAvatar.setHeadControllerFacingMovingAverage(myAvatar.getHeadControllerFacing()); setForceActivateRotation(false); } - if (!isActive(Horizontal) && getForceActivateHorizontal()) { - activate(Horizontal); + if (!isActive(CharacterController::FollowType::Horizontal) && getForceActivateHorizontal()) { + activate(CharacterController::FollowType::Horizontal, true); setForceActivateHorizontal(false); } - if (!isActive(Vertical) && getForceActivateVertical()) { - activate(Vertical); + if (!isActive(CharacterController::FollowType::Vertical) && getForceActivateVertical()) { + activate(CharacterController::FollowType::Vertical, true); setForceActivateVertical(false); } } @@ -5721,21 +5827,21 @@ void MyAvatar::FollowHelper::prePhysicsUpdate(MyAvatar& myAvatar, const glm::mat // remove scale present from sensorToWorldMatrix followWorldPose.scale() = glm::vec3(1.0f); - if (isActive(Rotation)) { - //use the hmd reading for the hips follow - followWorldPose.rot() = glmExtractRotation(desiredWorldMatrix); + if (isActive(CharacterController::FollowType::Rotation)) { + //use the hmd reading for the hips follow + followWorldPose.rot() = glmExtractRotation(desiredWorldMatrix); } - if (isActive(Horizontal)) { + if (isActive(CharacterController::FollowType::Horizontal)) { glm::vec3 desiredTranslation = extractTranslation(desiredWorldMatrix); followWorldPose.trans().x = desiredTranslation.x; followWorldPose.trans().z = desiredTranslation.z; } - if (isActive(Vertical)) { + if (isActive(CharacterController::FollowType::Vertical)) { glm::vec3 desiredTranslation = extractTranslation(desiredWorldMatrix); followWorldPose.trans().y = desiredTranslation.y; } - myAvatar.getCharacterController()->setFollowParameters(followWorldPose, getMaxTimeRemaining()); + myAvatar.getCharacterController()->setFollowParameters(followWorldPose); } glm::mat4 MyAvatar::FollowHelper::postPhysicsUpdate(MyAvatar& myAvatar, const glm::mat4& currentBodyMatrix) { @@ -5755,11 +5861,15 @@ glm::mat4 MyAvatar::FollowHelper::postPhysicsUpdate(MyAvatar& myAvatar, const gl glm::mat4 newBodyMat = createMatFromQuatAndPos(sensorAngularDisplacement * glmExtractRotation(currentBodyMatrix), sensorLinearDisplacement + extractTranslation(currentBodyMatrix)); - if (myAvatar.getSitStandStateChange()) { - myAvatar.setSitStandStateChange(false); - deactivate(Vertical); - setTranslation(newBodyMat, extractTranslation(myAvatar.deriveBodyFromHMDSensor())); + + if (myAvatar.getHMDCrouchRecenterEnabled()) { + if (myAvatar.getSitStandStateChange()) { + myAvatar.setSitStandStateChange(false); + deactivate(CharacterController::FollowType::Vertical); + setTranslation(newBodyMat, extractTranslation(myAvatar.deriveBodyFromHMDSensor())); + } } + return newBodyMat; } else { return currentBodyMatrix; @@ -6127,7 +6237,7 @@ void MyAvatar::updateHoldActions(const AnimPose& prePhysicsPose, const AnimPose& } bool MyAvatar::isRecenteringHorizontally() const { - return _follow.isActive(FollowHelper::Horizontal); + return _follow.isActive(CharacterController::FollowType::Horizontal); } const MyHead* MyAvatar::getMyHead() const { @@ -6583,7 +6693,7 @@ void MyAvatar::beginSit(const glm::vec3& position, const glm::quat& rotation) { setHMDLeanRecenterEnabled(false); // Disable movement setSitDriveKeysStatus(false); - centerBody(); + centerBody(true); int hipIndex = getJointIndex("Hips"); clearPinOnJoint(hipIndex); pinJoint(hipIndex, position, rotation); @@ -6601,7 +6711,7 @@ void MyAvatar::endSit(const glm::vec3& position, const glm::quat& rotation) { _characterController.setSeated(false); setCollisionsEnabled(true); setHMDLeanRecenterEnabled(true); - centerBody(); + centerBody(false); slamPosition(position); setWorldOrientation(rotation); @@ -6906,6 +7016,30 @@ bool MyAvatar::isJumping() { _characterController.getState() == CharacterController::State::Takeoff) && !isFlying(); } +// Determine if the avatar is allowed to lean in its current situation. +bool MyAvatar::isAllowedToLean() const { + return (getAllowAvatarLeaningPreference() == MyAvatar::AllowAvatarLeaningPreference::Always) || + ((getAllowAvatarLeaningPreference() == MyAvatar::AllowAvatarLeaningPreference::WhenUserIsStanding) && + !getIsInSittingState()); +} + +// Determine if the feet are under direct control (tracked). +bool MyAvatar::areFeetTracked() const { + // Foot tracking only activates when both feet are tracked, so we only need to test one. + return getControllerPoseInSensorFrame(controller::Action::LEFT_FOOT).isValid(); +} + +// Determine if the hips are under direct control (tracked). +bool MyAvatar::areHipsTracked() const { + return getControllerPoseInSensorFrame(controller::Action::HIPS).isValid(); +} + +// Determine if crouch recentering is enabled (making the avatar stand when the user is sitting in the real world). +bool MyAvatar::getHMDCrouchRecenterEnabled() const { + return (!_characterController.getSeated() && + (_allowAvatarStandingPreference.get() == AllowAvatarStandingPreference::Always) && !areFeetTracked()); +} + bool MyAvatar::setPointAt(const glm::vec3& pointAtTarget) { if (QThread::currentThread() != thread()) { bool result = false; diff --git a/interface/src/avatar/MyAvatar.h b/interface/src/avatar/MyAvatar.h index 3140c68f88..9e817b5167 100644 --- a/interface/src/avatar/MyAvatar.h +++ b/interface/src/avatar/MyAvatar.h @@ -282,16 +282,11 @@ class MyAvatar : public Avatar { *

Warning: Setting this value also sets the value of analogPlusSprintSpeed to twice * the value.

* @property {number} analogPlusSprintSpeed - The sprint (run) speed of your avatar for the "AnalogPlus" control scheme. - * @property {MyAvatar.SitStandModelType} userRecenterModel - Controls avatar leaning and recentering behavior. - * @property {number} isInSittingState - true if the user wearing the HMD is determined to be sitting - * (avatar leaning is disabled, recentering is enabled), false if the user wearing the HMD is - * determined to be standing (avatar leaning is enabled, and avatar recenters if it leans too far). - * If userRecenterModel == 2 (i.e., "auto") the property value automatically updates as the user sits - * or stands, unless isSitStandStateLocked == true. Setting the property value overrides the current - * sitting / standing state, which is updated when the user next sits or stands unless - * isSitStandStateLocked == true. - * @property {boolean} isSitStandStateLocked - true to lock the avatar sitting/standing state, i.e., use this - * to disable automatically changing state. + * @property {number} isInSittingState - true if the user wearing the HMD is determined to be sitting; + * false if the user wearing the HMD is determined to be standing. This can affect whether the avatar + * is allowed to stand, lean or recenter its footing, depending on user preferences. + * The property value automatically updates as the user sits or stands. Setting the property value overrides the current + * sitting / standing state, which is updated when the user next sits or stands. * @property {boolean} allowTeleporting - true if teleporting is enabled in the Interface settings, * false if it isn't. Read-only. * @@ -413,8 +408,6 @@ class MyAvatar : public Avatar { Q_PROPERTY(float walkBackwardSpeed READ getWalkBackwardSpeed WRITE setWalkBackwardSpeed NOTIFY walkBackwardSpeedChanged); Q_PROPERTY(float sprintSpeed READ getSprintSpeed WRITE setSprintSpeed NOTIFY sprintSpeedChanged); Q_PROPERTY(bool isInSittingState READ getIsInSittingState WRITE setIsInSittingState); - Q_PROPERTY(MyAvatar::SitStandModelType userRecenterModel READ getUserRecenterModel WRITE setUserRecenterModel); - Q_PROPERTY(bool isSitStandStateLocked READ getIsSitStandStateLocked WRITE setIsSitStandStateLocked); Q_PROPERTY(bool allowTeleporting READ getAllowTeleporting) const QString DOMINANT_LEFT_HAND = "left"; @@ -549,6 +542,31 @@ public: }; Q_ENUM(SitStandModelType) + // Note: The option strings in setupPreferences (PreferencesDialog.cpp) must match this order. + enum class AllowAvatarStandingPreference : uint + { + WhenUserIsStanding, + Always, + Count, + Default = Always, + }; + Q_ENUM(AllowAvatarStandingPreference) + + // Note: The option strings in setupPreferences (PreferencesDialog.cpp) must match this order. + enum class AllowAvatarLeaningPreference : uint + { + WhenUserIsStanding, + Always, + Never, + AlwaysNoRecenter, // experimental + Count, + Default = WhenUserIsStanding, + }; + Q_ENUM(AllowAvatarLeaningPreference) + + static const std::array allowAvatarStandingPreferenceStrings; + static const std::array allowAvatarLeaningPreferenceStrings; + explicit MyAvatar(QThread* thread); virtual ~MyAvatar(); @@ -576,7 +594,7 @@ public: * the HMD. * @function MyAvatar.centerBody */ - Q_INVOKABLE void centerBody(); // thread-safe + Q_INVOKABLE void centerBody(const bool forceFollowYPos); // thread-safe /**jsdoc @@ -1417,7 +1435,6 @@ public: controller::Pose getControllerPoseInSensorFrame(controller::Action action) const; controller::Pose getControllerPoseInWorldFrame(controller::Action action) const; controller::Pose getControllerPoseInAvatarFrame(controller::Action action) const; - glm::quat getOffHandRotation() const; bool hasDriveInput() const; @@ -1709,7 +1726,7 @@ public: // derive avatar body position and orientation from the current HMD Sensor location. // results are in sensor frame (-z forward) - glm::mat4 deriveBodyFromHMDSensor() const; + glm::mat4 deriveBodyFromHMDSensor(const bool forceFollowYPos = false) const; glm::mat4 getSpine2RotationRigSpace() const; @@ -1753,10 +1770,10 @@ public: bool getIsInWalkingState() const; void setIsInSittingState(bool isSitting); bool getIsInSittingState() const; - void setUserRecenterModel(MyAvatar::SitStandModelType modelName); - MyAvatar::SitStandModelType getUserRecenterModel() const; - void setIsSitStandStateLocked(bool isLocked); - bool getIsSitStandStateLocked() const; + void setAllowAvatarStandingPreference(const AllowAvatarStandingPreference preference); + AllowAvatarStandingPreference getAllowAvatarStandingPreference() const; + void setAllowAvatarLeaningPreference(const AllowAvatarLeaningPreference preference); + AllowAvatarLeaningPreference getAllowAvatarLeaningPreference() const; void setWalkSpeed(float value); float getWalkSpeed() const; void setWalkBackwardSpeed(float value); @@ -1989,6 +2006,10 @@ public: glm::vec3 getLookAtPivotPoint(); glm::vec3 getCameraEyesPosition(float deltaTime); bool isJumping(); + bool getHMDCrouchRecenterEnabled() const; + bool isAllowedToLean() const; + bool areFeetTracked() const; + bool areHipsTracked() const; public slots: @@ -2841,23 +2862,15 @@ private: struct FollowHelper { FollowHelper(); - enum FollowType { - Rotation = 0, - Horizontal, - Vertical, - NumFollowTypes - }; - float _timeRemaining[NumFollowTypes]; + CharacterController::FollowTimePerType _timeRemaining; void deactivate(); - void deactivate(FollowType type); - void activate(); - void activate(FollowType type); + void deactivate(CharacterController::FollowType type); + void activate(CharacterController::FollowType type, const bool snapFollow); bool isActive() const; - bool isActive(FollowType followType) const; - float getMaxTimeRemaining() const; + bool isActive(CharacterController::FollowType followType) const; void decrementTimeRemaining(float dt); - bool shouldActivateRotation(const MyAvatar& myAvatar, const glm::mat4& desiredBodyMatrix, const glm::mat4& currentBodyMatrix) const; + bool shouldActivateRotation(const MyAvatar& myAvatar, const glm::mat4& desiredBodyMatrix, const glm::mat4& currentBodyMatrix, bool& shouldSnapOut) const; bool shouldActivateVertical(const MyAvatar& myAvatar, const glm::mat4& desiredBodyMatrix, const glm::mat4& currentBodyMatrix) const; bool shouldActivateHorizontal(const MyAvatar& myAvatar, const glm::mat4& desiredBodyMatrix, const glm::mat4& currentBodyMatrix) const; bool shouldActivateHorizontalCG(MyAvatar& myAvatar) const; @@ -2880,7 +2893,7 @@ private: FollowHelper _follow; - bool isFollowActive(FollowHelper::FollowType followType) const; + bool isFollowActive(CharacterController::FollowType followType) const; bool _goToPending { false }; bool _physicsSafetyPending { false }; @@ -2922,6 +2935,9 @@ private: bool _centerOfGravityModelEnabled { true }; bool _hmdLeanRecenterEnabled { true }; + bool _hmdCrouchRecenterEnabled{ + true + }; // Is MyAvatar allowed to recenter vertically (stand) when the user is sitting in the real world. bool _sprint { false }; AnimPose _prePhysicsRoomPose; @@ -2953,7 +2969,6 @@ private: ThreadSafeValueCache _userHeight { DEFAULT_AVATAR_HEIGHT }; float _averageUserHeightSensorSpace { _userHeight.get() }; bool _sitStandStateChange { false }; - ThreadSafeValueCache _lockSitStandState { false }; // max unscaled forward movement speed ThreadSafeValueCache _defaultWalkSpeed { DEFAULT_AVATAR_MAX_WALKING_SPEED }; @@ -2969,7 +2984,12 @@ private: float _walkSpeedScalar { AVATAR_WALK_SPEED_SCALAR }; bool _isInWalkingState { false }; ThreadSafeValueCache _isInSittingState { false }; - ThreadSafeValueCache _userRecenterModel { MyAvatar::SitStandModelType::Auto }; + ThreadSafeValueCache _allowAvatarStandingPreference{ + MyAvatar::AllowAvatarStandingPreference::Default + }; // The user preference of when MyAvatar may stand. + ThreadSafeValueCache _allowAvatarLeaningPreference{ + MyAvatar::AllowAvatarLeaningPreference::Default + }; // The user preference of when MyAvatar may lean. float _sitStandStateTimer { 0.0f }; float _squatTimer { 0.0f }; float _tippingPoint { _userHeight.get() }; @@ -3012,7 +3032,8 @@ private: Setting::Handle _controlSchemeIndexSetting; std::vector> _avatarEntityIDSettings; std::vector> _avatarEntityDataSettings; - Setting::Handle _userRecenterModelSetting; + Setting::Handle _allowAvatarStandingPreferenceSetting; + Setting::Handle _allowAvatarLeaningPreferenceSetting; // AvatarEntities stuff: // We cache the "map of unfortunately-formatted-binary-blobs" because they are expensive to compute diff --git a/interface/src/avatar/MyCharacterController.cpp b/interface/src/avatar/MyCharacterController.cpp index 997dcfe685..0d382934b8 100755 --- a/interface/src/avatar/MyCharacterController.cpp +++ b/interface/src/avatar/MyCharacterController.cpp @@ -26,7 +26,9 @@ void MyCharacterController::RayShotgunResult::reset() { walkable = true; } -MyCharacterController::MyCharacterController(std::shared_ptr avatar) { +MyCharacterController::MyCharacterController(std::shared_ptr avatar, + const FollowTimePerType& followTimeRemainingPerType) : + CharacterController(followTimeRemainingPerType) { assert(avatar); _avatar = avatar; diff --git a/interface/src/avatar/MyCharacterController.h b/interface/src/avatar/MyCharacterController.h index eefcc92637..b25c2412a0 100644 --- a/interface/src/avatar/MyCharacterController.h +++ b/interface/src/avatar/MyCharacterController.h @@ -23,7 +23,7 @@ class DetailedMotionState; class MyCharacterController : public CharacterController { public: - explicit MyCharacterController(std::shared_ptr avatar); + explicit MyCharacterController(std::shared_ptr avatar, const FollowTimePerType& followTimeRemainingPerType); ~MyCharacterController (); void addToWorld() override; diff --git a/interface/src/avatar/MySkeletonModel.cpp b/interface/src/avatar/MySkeletonModel.cpp index 6fe199aaba..2d33ee35ca 100755 --- a/interface/src/avatar/MySkeletonModel.cpp +++ b/interface/src/avatar/MySkeletonModel.cpp @@ -65,13 +65,20 @@ static AnimPose computeHipsInSensorFrame(MyAvatar* myAvatar, bool isFlying) { return result; } + const bool useCenterOfGravityModel = + myAvatar->getCenterOfGravityModelEnabled() && !isFlying && !myAvatar->getIsInWalkingState() && + !myAvatar->getIsInSittingState() && myAvatar->getHMDLeanRecenterEnabled() && + (myAvatar->getAllowAvatarLeaningPreference() != MyAvatar::AllowAvatarLeaningPreference::AlwaysNoRecenter) && + myAvatar->getHMDCrouchRecenterEnabled(); + glm::mat4 hipsMat; - if (myAvatar->getCenterOfGravityModelEnabled() && !isFlying && !(myAvatar->getIsInWalkingState()) && !(myAvatar->getIsInSittingState()) && myAvatar->getHMDLeanRecenterEnabled()) { + if (useCenterOfGravityModel) { // then we use center of gravity model hipsMat = myAvatar->deriveBodyUsingCgModel(); - } else { + } + else { // otherwise use the default of putting the hips under the head - hipsMat = myAvatar->deriveBodyFromHMDSensor(); + hipsMat = myAvatar->deriveBodyFromHMDSensor(true); } glm::vec3 hipsPos = extractTranslation(hipsMat); glm::quat hipsRot = glmExtractRotation(hipsMat); @@ -82,7 +89,7 @@ static AnimPose computeHipsInSensorFrame(MyAvatar* myAvatar, bool isFlying) { // dampen hips rotation, by mixing it with the avatar orientation in sensor space // turning this off for center of gravity model because it is already mixed in there - if (!(myAvatar->getCenterOfGravityModelEnabled())) { + if (!useCenterOfGravityModel) { const float MIX_RATIO = 0.5f; hipsRot = safeLerp(glmExtractRotation(avatarToSensorMat), hipsRot, MIX_RATIO); } diff --git a/interface/src/ui/AnimStats.cpp b/interface/src/ui/AnimStats.cpp index 2a355e48d1..fff69cb1c0 100644 --- a/interface/src/ui/AnimStats.cpp +++ b/interface/src/ui/AnimStats.cpp @@ -67,13 +67,13 @@ void AnimStats::updateStats(bool force) { // print if we are recentering or not. _recenterText = "Recenter: "; - if (myAvatar->isFollowActive(MyAvatar::FollowHelper::Rotation)) { + if (myAvatar->isFollowActive(CharacterController::FollowType::Rotation)) { _recenterText += "Rotation "; } - if (myAvatar->isFollowActive(MyAvatar::FollowHelper::Horizontal)) { + if (myAvatar->isFollowActive(CharacterController::FollowType::Horizontal)) { _recenterText += "Horizontal "; } - if (myAvatar->isFollowActive(MyAvatar::FollowHelper::Vertical)) { + if (myAvatar->isFollowActive(CharacterController::FollowType::Vertical)) { _recenterText += "Vertical "; } emit recenterTextChanged(); diff --git a/interface/src/ui/PreferencesDialog.cpp b/interface/src/ui/PreferencesDialog.cpp index 79d9ebaa5c..12615426f1 100644 --- a/interface/src/ui/PreferencesDialog.cpp +++ b/interface/src/ui/PreferencesDialog.cpp @@ -422,40 +422,40 @@ void setupPreferences() { preferences->addPreference(preference); } { - auto getter = [myAvatar]()->int { - switch (myAvatar->getUserRecenterModel()) { - case MyAvatar::SitStandModelType::Auto: - default: - return 0; - case MyAvatar::SitStandModelType::ForceSit: - return 1; - case MyAvatar::SitStandModelType::ForceStand: - return 2; - case MyAvatar::SitStandModelType::DisableHMDLean: - return 3; - } + const IntPreference::Getter getter = [myAvatar]() -> int { + return static_cast(myAvatar->getAllowAvatarStandingPreference()); }; - auto setter = [myAvatar](int value) { - switch (value) { - case 0: - default: - myAvatar->setUserRecenterModel(MyAvatar::SitStandModelType::Auto); - break; - case 1: - myAvatar->setUserRecenterModel(MyAvatar::SitStandModelType::ForceSit); - break; - case 2: - myAvatar->setUserRecenterModel(MyAvatar::SitStandModelType::ForceStand); - break; - case 3: - myAvatar->setUserRecenterModel(MyAvatar::SitStandModelType::DisableHMDLean); - break; - } + + const IntPreference::Setter setter = [myAvatar](const int& value) { + myAvatar->setAllowAvatarStandingPreference(static_cast(value)); }; - auto preference = new RadioButtonsPreference(VR_MOVEMENT, "Auto / Force Sit / Force Stand / Disable Recenter", getter, setter); + + auto preference = new RadioButtonsPreference(VR_MOVEMENT, "Allow my avatar to stand", getter, setter); QStringList items; - items << "Auto - turns on avatar leaning when standing in real world" << "Seated - disables all avatar leaning while sitting in real world" << "Standing - enables avatar leaning while sitting in real world" << "Disabled - allows avatar sitting on the floor [Experimental]"; - preference->setHeading("Avatar leaning behavior"); + items << "When I'm standing" + << "Always"; // Must match the order in MyAvatar::AllowAvatarStandingPreference. + assert(items.size() == static_cast(MyAvatar::AllowAvatarStandingPreference::Count)); + preference->setHeading("Allow my avatar to stand:"); + preference->setItems(items); + preferences->addPreference(preference); + } + { + const IntPreference::Getter getter = [myAvatar]() -> int { + return static_cast(myAvatar->getAllowAvatarLeaningPreference()); + }; + + const IntPreference::Setter setter = [myAvatar](const int& value) { + myAvatar->setAllowAvatarLeaningPreference(static_cast(value)); + }; + + auto preference = new RadioButtonsPreference(VR_MOVEMENT, "Allow my avatar to lean", getter, setter); + QStringList items; + items << "When I'm standing" + << "Always" + << "Never" + << "Always, no recenter (Experimental)"; // Must match the order in MyAvatar::AllowAvatarLeaningPreference. + assert(items.size() == static_cast(MyAvatar::AllowAvatarLeaningPreference::Count)); + preference->setHeading("Allow my avatar to lean:"); preference->setItems(items); preferences->addPreference(preference); } diff --git a/libraries/animation/src/Rig.cpp b/libraries/animation/src/Rig.cpp index 06fe558964..bcdef45440 100644 --- a/libraries/animation/src/Rig.cpp +++ b/libraries/animation/src/Rig.cpp @@ -1855,6 +1855,16 @@ glm::vec3 Rig::deflectHandFromTorso(const glm::vec3& handPosition, const HFMJoin return position; } +// Get the scale factor to convert distances in the geometry frame into the unscaled rig frame. +// Typically it will be the unit conversion from cm to m. +float Rig::GetScaleFactorGeometryToUnscaledRig() const { + // Normally the model offset transform will contain the avatar scale factor; we explicitly remove it here. + AnimPose modelOffsetWithoutAvatarScale(glm::vec3(1.0f), getModelOffsetPose().rot(), getModelOffsetPose().trans()); + AnimPose geomToRigWithoutAvatarScale = modelOffsetWithoutAvatarScale * getGeometryOffsetPose(); + + return geomToRigWithoutAvatarScale.scale().x; // in practice this is always a uniform scale factor. +} + void Rig::updateHands(bool leftHandEnabled, bool rightHandEnabled, bool hipsEnabled, bool hipsEstimated, bool leftArmEnabled, bool rightArmEnabled, bool headEnabled, float dt, const AnimPose& leftHandPose, const AnimPose& rightHandPose, @@ -2703,10 +2713,10 @@ void Rig::computeAvatarBoundingCapsule( Extents totalExtents; totalExtents.reset(); - // HACK by convention our Avatars are always modeled such that y=0 is the ground plane. - // add the zero point so that our avatars will always have bounding volumes that are flush with the ground + // HACK by convention our Avatars are always modeled such that y=0 (GEOMETRY_GROUND_Y) is the ground plane. + // add the ground point so that our avatars will always have bounding volumes that are flush with the ground // even if they do not have legs (default robot) - totalExtents.addPoint(glm::vec3(0.0f)); + totalExtents.addPoint(glm::vec3(0.f, GEOMETRY_GROUND_Y, 0.f)); // To reduce the radius of the bounding capsule to be tight with the torso, we only consider joints // from the head to the hips when computing the rest of the bounding capsule. @@ -2747,24 +2757,20 @@ void Rig::initFlow(bool isActive) { } } +// Get the vertical position of eye joints, in the rig coordinate frame, ignoring the avatar scale. float Rig::getUnscaledEyeHeight() const { // Normally the model offset transform will contain the avatar scale factor, we explicitly remove it here. AnimPose modelOffsetWithoutAvatarScale(glm::vec3(1.0f), getModelOffsetPose().rot(), getModelOffsetPose().trans()); AnimPose geomToRigWithoutAvatarScale = modelOffsetWithoutAvatarScale * getGeometryOffsetPose(); - // This factor can be used to scale distances in the geometry frame into the unscaled rig frame. - // Typically it will be the unit conversion from cm to m. - float scaleFactor = geomToRigWithoutAvatarScale.scale().x; // in practice this always a uniform scale factor. + // Factor to scale distances in the geometry frame into the unscaled rig frame. + float scaleFactor = GetScaleFactorGeometryToUnscaledRig(); int headTopJoint = indexOfJoint("HeadTop_End"); int headJoint = indexOfJoint("Head"); int eyeJoint = indexOfJoint("LeftEye") != -1 ? indexOfJoint("LeftEye") : indexOfJoint("RightEye"); int toeJoint = indexOfJoint("LeftToeBase") != -1 ? indexOfJoint("LeftToeBase") : indexOfJoint("RightToeBase"); - // Makes assumption that the y = 0 plane in geometry is the ground plane. - // We also make that assumption in Rig::computeAvatarBoundingCapsule() - const float GROUND_Y = 0.0f; - // Values from the skeleton are in the geometry coordinate frame. auto skeleton = getAnimSkeleton(); if (eyeJoint >= 0 && toeJoint >= 0) { @@ -2772,8 +2778,8 @@ float Rig::getUnscaledEyeHeight() const { float eyeHeight = skeleton->getAbsoluteDefaultPose(eyeJoint).trans().y - skeleton->getAbsoluteDefaultPose(toeJoint).trans().y; return scaleFactor * eyeHeight; } else if (eyeJoint >= 0) { - // Measure Eye joint to y = 0 plane. - float eyeHeight = skeleton->getAbsoluteDefaultPose(eyeJoint).trans().y - GROUND_Y; + // Measure Eye joint to ground plane. + float eyeHeight = skeleton->getAbsoluteDefaultPose(eyeJoint).trans().y - GEOMETRY_GROUND_Y; return scaleFactor * eyeHeight; } else if (headTopJoint >= 0 && toeJoint >= 0) { // Measure from ToeBase joint to HeadTop_End joint, then remove forehead distance. @@ -2783,19 +2789,36 @@ float Rig::getUnscaledEyeHeight() const { } else if (headTopJoint >= 0) { // Measure from HeadTop_End joint to the ground, then remove forehead distance. const float ratio = DEFAULT_AVATAR_EYE_TO_TOP_OF_HEAD / DEFAULT_AVATAR_HEIGHT; - float headHeight = skeleton->getAbsoluteDefaultPose(headTopJoint).trans().y - GROUND_Y; + float headHeight = skeleton->getAbsoluteDefaultPose(headTopJoint).trans().y - GEOMETRY_GROUND_Y; return scaleFactor * (headHeight - headHeight * ratio); } else if (headJoint >= 0) { // Measure Head joint to the ground, then add in distance from neck to eye. const float DEFAULT_AVATAR_NECK_TO_EYE = DEFAULT_AVATAR_NECK_TO_TOP_OF_HEAD - DEFAULT_AVATAR_EYE_TO_TOP_OF_HEAD; const float ratio = DEFAULT_AVATAR_NECK_TO_EYE / DEFAULT_AVATAR_NECK_HEIGHT; - float neckHeight = skeleton->getAbsoluteDefaultPose(headJoint).trans().y - GROUND_Y; + float neckHeight = skeleton->getAbsoluteDefaultPose(headJoint).trans().y - GEOMETRY_GROUND_Y; return scaleFactor * (neckHeight + neckHeight * ratio); } else { return DEFAULT_AVATAR_EYE_HEIGHT; } } +// Get the vertical position of the hips joint, in the rig coordinate frame, ignoring the avatar scale. +float Rig::getUnscaledHipsHeight() const { + // This factor can be used to scale distances in the geometry frame into the unscaled rig frame. + const float scaleFactor = GetScaleFactorGeometryToUnscaledRig(); + + const int hipsJoint = indexOfJoint("Hips"); + + // Values from the skeleton are in the geometry coordinate frame. + if (hipsJoint >= 0) { + // Measure hip joint to ground plane. + float hipsHeight = getAnimSkeleton()->getAbsoluteDefaultPose(hipsJoint).trans().y - GEOMETRY_GROUND_Y; + return scaleFactor * hipsHeight; + } else { + return DEFAULT_AVATAR_HIPS_HEIGHT; + } +} + void Rig::setDirectionalBlending(const QString& targetName, const glm::vec3& blendingTarget, const QString& alphaName, float alpha) { _animVars.set(targetName, blendingTarget); _animVars.set(alphaName, alpha); diff --git a/libraries/animation/src/Rig.h b/libraries/animation/src/Rig.h index 60a2602316..c58be799cf 100644 --- a/libraries/animation/src/Rig.h +++ b/libraries/animation/src/Rig.h @@ -251,6 +251,7 @@ public: Flow& getFlow() { return _internalFlow; } float getUnscaledEyeHeight() const; + float getUnscaledHipsHeight() const; void buildAbsoluteRigPoses(const AnimPoseVec& relativePoses, AnimPoseVec& absolutePosesOut) const; int getOverrideJointCount() const; @@ -287,6 +288,11 @@ protected: glm::vec3 deflectHandFromTorso(const glm::vec3& handPosition, const HFMJointShapeInfo& hipsShapeInfo, const HFMJointShapeInfo& spineShapeInfo, const HFMJointShapeInfo& spine1ShapeInfo, const HFMJointShapeInfo& spine2ShapeInfo) const; + // Get the scale factor to convert distances in the geometry frame into the unscaled rig frame. + float GetScaleFactorGeometryToUnscaledRig() const; + + // The ground plane Y position in geometry space. + static constexpr float GEOMETRY_GROUND_Y = 0.0f; AnimPose _modelOffset; // model to rig space AnimPose _geometryOffset; // geometry to model space (includes unit offset & fst offsets) diff --git a/libraries/physics/src/CharacterController.cpp b/libraries/physics/src/CharacterController.cpp index e222692aea..d14e59dbd2 100755 --- a/libraries/physics/src/CharacterController.cpp +++ b/libraries/physics/src/CharacterController.cpp @@ -107,12 +107,12 @@ CharacterController::CharacterMotor::CharacterMotor(const glm::vec3& vel, const static uint32_t _numCharacterControllers { 0 }; -CharacterController::CharacterController() { +CharacterController::CharacterController(const FollowTimePerType& followTimeRemainingPerType) : + _followTimeRemainingPerType(followTimeRemainingPerType) { _floorDistance = _scaleFactor * DEFAULT_AVATAR_FALL_HEIGHT; _targetVelocity.setValue(0.0f, 0.0f, 0.0f); _followDesiredBodyTransform.setIdentity(); - _followTimeRemaining = 0.0f; _state = State::Hover; _isPushingUp = false; _rayHitStartTime = 0; @@ -351,66 +351,108 @@ void CharacterController::playerStep(btCollisionWorld* collisionWorld, btScalar computeNewVelocity(dt, velocity); const float MINIMUM_TIME_REMAINING = 0.005f; - const float MAX_DISPLACEMENT = 0.5f * _radius; - _followTimeRemaining -= dt; - if (_followTimeRemaining >= MINIMUM_TIME_REMAINING) { - btTransform bodyTransform = _rigidBody->getWorldTransform(); + static_assert(FOLLOW_TIME_IMMEDIATE_SNAP > MINIMUM_TIME_REMAINING, "The code below assumes this condition is true."); + bool hasFollowTimeRemaining = false; + for (float followTime : _followTimeRemainingPerType) { + if (followTime > MINIMUM_TIME_REMAINING) { + hasFollowTimeRemaining = true; + break; + } + } + + if (hasFollowTimeRemaining) { + const float MAX_DISPLACEMENT = 0.5f * _radius; + + btTransform bodyTransform = _rigidBody->getWorldTransform(); btVector3 startPos = bodyTransform.getOrigin(); btVector3 deltaPos = _followDesiredBodyTransform.getOrigin() - startPos; - btVector3 vel = deltaPos / _followTimeRemaining; - btVector3 linearDisplacement = clampLength(vel * dt, MAX_DISPLACEMENT); // clamp displacement to prevent tunneling. + + btVector3 linearDisplacement(0, 0, 0); + { + linearDisplacement.setZero(); + + const float horizontalTime = _followTimeRemainingPerType[static_cast(FollowType::Horizontal)]; + const float verticalTime = _followTimeRemainingPerType[static_cast(FollowType::Vertical)]; + + if (horizontalTime == FOLLOW_TIME_IMMEDIATE_SNAP) { + linearDisplacement.setX(deltaPos.x()); + linearDisplacement.setZ(deltaPos.z()); + } else if (horizontalTime > MINIMUM_TIME_REMAINING) { + linearDisplacement.setX((deltaPos.x() * dt) / horizontalTime); + linearDisplacement.setZ((deltaPos.z() * dt) / horizontalTime); + } + + if (verticalTime == FOLLOW_TIME_IMMEDIATE_SNAP) { + linearDisplacement.setY(deltaPos.y()); + } else if (verticalTime > MINIMUM_TIME_REMAINING) { + linearDisplacement.setY((deltaPos.y() * dt) / verticalTime); + } + + linearDisplacement = clampLength(linearDisplacement, MAX_DISPLACEMENT); // clamp displacement to prevent tunneling. + } + btVector3 endPos = startPos + linearDisplacement; // resolve the simple linearDisplacement _followLinearDisplacement += linearDisplacement; // now for the rotational part... + btQuaternion startRot = bodyTransform.getRotation(); - btQuaternion desiredRot = _followDesiredBodyTransform.getRotation(); // startRot as default rotation btQuaternion endRot = startRot; - // the dot product between two quaternions is equal to +/- cos(angle/2) - // where 'angle' is that of the rotation between them - float qDot = desiredRot.dot(startRot); + const float rotationTime = _followTimeRemainingPerType[static_cast(FollowType::Rotation)]; + if (rotationTime > MINIMUM_TIME_REMAINING) { + btQuaternion desiredRot = _followDesiredBodyTransform.getRotation(); - // when the abs() value of the dot product is approximately 1.0 - // then the two rotations are effectively adjacent - const float MIN_DOT_PRODUCT_OF_ADJACENT_QUATERNIONS = 0.99999f; // corresponds to approx 0.5 degrees - if (fabsf(qDot) < MIN_DOT_PRODUCT_OF_ADJACENT_QUATERNIONS) { - if (qDot < 0.0f) { - // the quaternions are actually on opposite hyperhemispheres - // so we move one to agree with the other and negate qDot - desiredRot = -desiredRot; - qDot = -qDot; + // the dot product between two quaternions is equal to +/- cos(angle/2) + // where 'angle' is that of the rotation between them + float qDot = desiredRot.dot(startRot); + + // when the abs() value of the dot product is approximately 1.0 + // then the two rotations are effectively adjacent + const float MIN_DOT_PRODUCT_OF_ADJACENT_QUATERNIONS = 0.99999f; // corresponds to approx 0.5 degrees + if (fabsf(qDot) < MIN_DOT_PRODUCT_OF_ADJACENT_QUATERNIONS) { + if (qDot < 0.0f) { + // the quaternions are actually on opposite hyperhemispheres + // so we move one to agree with the other and negate qDot + desiredRot = -desiredRot; + qDot = -qDot; + } + btQuaternion deltaRot = desiredRot * startRot.inverse(); + + // the axis is the imaginary part, but scaled by sin(angle/2) + btVector3 axis(deltaRot.getX(), deltaRot.getY(), deltaRot.getZ()); + axis /= sqrtf(1.0f - qDot * qDot); + + // compute the angle we will resolve for this dt, but don't overshoot + float angle = 2.0f * acosf(qDot); + + if (rotationTime != FOLLOW_TIME_IMMEDIATE_SNAP) { + if (dt < rotationTime) { + angle *= dt / rotationTime; + } + } + + // accumulate rotation + deltaRot = btQuaternion(axis, angle); + _followAngularDisplacement = (deltaRot * _followAngularDisplacement).normalize(); + + // in order to accumulate displacement of avatar position, we need to take _shapeLocalOffset into account. + btVector3 shapeLocalOffset = glmToBullet(_shapeLocalOffset); + + endRot = deltaRot * startRot; + btVector3 swingDisplacement = + rotateVector(endRot, -shapeLocalOffset) - rotateVector(startRot, -shapeLocalOffset); + _followLinearDisplacement += swingDisplacement; } - btQuaternion deltaRot = desiredRot * startRot.inverse(); - - // the axis is the imaginary part, but scaled by sin(angle/2) - btVector3 axis(deltaRot.getX(), deltaRot.getY(), deltaRot.getZ()); - axis /= sqrtf(1.0f - qDot * qDot); - - // compute the angle we will resolve for this dt, but don't overshoot - float angle = 2.0f * acosf(qDot); - if (dt < _followTimeRemaining) { - angle *= dt / _followTimeRemaining; - } - - // accumulate rotation - deltaRot = btQuaternion(axis, angle); - _followAngularDisplacement = (deltaRot * _followAngularDisplacement).normalize(); - - // in order to accumulate displacement of avatar position, we need to take _shapeLocalOffset into account. - btVector3 shapeLocalOffset = glmToBullet(_shapeLocalOffset); - - endRot = deltaRot * startRot; - btVector3 swingDisplacement = rotateVector(endRot, -shapeLocalOffset) - rotateVector(startRot, -shapeLocalOffset); - _followLinearDisplacement += swingDisplacement; } _rigidBody->setWorldTransform(btTransform(endRot, endPos)); } + _followTime += dt; if (_steppingUp) { @@ -606,8 +648,7 @@ void CharacterController::setParentVelocity(const glm::vec3& velocity) { _parentVelocity = glmToBullet(velocity); } -void CharacterController::setFollowParameters(const glm::mat4& desiredWorldBodyMatrix, float timeRemaining) { - _followTimeRemaining = timeRemaining; +void CharacterController::setFollowParameters(const glm::mat4& desiredWorldBodyMatrix) { _followDesiredBodyTransform = glmToBullet(desiredWorldBodyMatrix) * btTransform(btQuaternion::getIdentity(), glmToBullet(_shapeLocalOffset)); } diff --git a/libraries/physics/src/CharacterController.h b/libraries/physics/src/CharacterController.h index e7ad3ddfa8..899c99890b 100755 --- a/libraries/physics/src/CharacterController.h +++ b/libraries/physics/src/CharacterController.h @@ -53,7 +53,21 @@ const btScalar MIN_CHARACTER_MOTOR_TIMESCALE = 0.05f; class CharacterController : public btCharacterControllerInterface { public: - CharacterController(); + enum class FollowType : uint8_t + { + Rotation, + Horizontal, + Vertical, + Count + }; + + // Remaining follow time for each FollowType + typedef std::array(FollowType::Count)> FollowTimePerType; + + // Follow time value meaning that we should snap immediately to the target. + static constexpr float FOLLOW_TIME_IMMEDIATE_SNAP = FLT_MAX; + + CharacterController(const FollowTimePerType& followTimeRemainingPerType); virtual ~CharacterController(); bool needsRemoval() const; bool needsAddition() const; @@ -99,7 +113,8 @@ public: void getPositionAndOrientation(glm::vec3& position, glm::quat& rotation) const; void setParentVelocity(const glm::vec3& parentVelocity); - void setFollowParameters(const glm::mat4& desiredWorldMatrix, float timeRemaining); + + void setFollowParameters(const glm::mat4& desiredWorldMatrix); float getFollowTime() const { return _followTime; } glm::vec3 getFollowLinearDisplacement() const; glm::quat getFollowAngularDisplacement() const; @@ -144,7 +159,7 @@ public: void setPendingFlagsUpdateCollisionMask(){ _pendingFlags |= PENDING_FLAG_UPDATE_COLLISION_MASK; } void setSeated(bool isSeated) { _isSeated = isSeated; } - bool getSeated() { return _isSeated; } + bool getSeated() const { return _isSeated; } void resetStuckCounter() { _numStuckSubsteps = 0; } @@ -178,7 +193,7 @@ protected: btVector3 _preSimulationVelocity; btVector3 _velocityChange; btTransform _followDesiredBodyTransform; - btScalar _followTimeRemaining; + const FollowTimePerType& _followTimeRemainingPerType; btTransform _characterBodyTransform; btVector3 _position; btQuaternion _rotation; diff --git a/libraries/shared/src/AvatarConstants.h b/libraries/shared/src/AvatarConstants.h index 4a79f6b487..a25142b2ad 100644 --- a/libraries/shared/src/AvatarConstants.h +++ b/libraries/shared/src/AvatarConstants.h @@ -20,6 +20,7 @@ const float DEFAULT_AVATAR_EYE_TO_TOP_OF_HEAD = 0.11f; // meters const float DEFAULT_AVATAR_NECK_TO_TOP_OF_HEAD = 0.185f; // meters const float DEFAULT_AVATAR_NECK_HEIGHT = DEFAULT_AVATAR_HEIGHT - DEFAULT_AVATAR_NECK_TO_TOP_OF_HEAD; const float DEFAULT_AVATAR_EYE_HEIGHT = DEFAULT_AVATAR_HEIGHT - DEFAULT_AVATAR_EYE_TO_TOP_OF_HEAD; +const float DEFAULT_AVATAR_HIPS_HEIGHT = 1.01327407f; // meters const float DEFAULT_SPINE2_SPLINE_PROPORTION = 0.71f; const float DEFAULT_AVATAR_SUPPORT_BASE_LEFT = -0.25f; const float DEFAULT_AVATAR_SUPPORT_BASE_RIGHT = 0.25f; From 6fc40385ca8270193f57aa671eedc50738228d01 Mon Sep 17 00:00:00 2001 From: Phil Palmer Date: Tue, 22 Dec 2020 15:51:03 -0500 Subject: [PATCH 030/152] Fix compile error building macOS-latest: changed MINIMUM_TIME_REMAINING from const to constexpr in CharacterController::playerStep. Error was: "static_assert expression is not an integral constant expression", "read of non-constexpr variable 'MINIMUM_TIME_REMAINING' is not allowed in a constant expression". Error started in last commit (2179c153de8bd8d1b455894e9ccd3699df133c3f). --- libraries/physics/src/CharacterController.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/physics/src/CharacterController.cpp b/libraries/physics/src/CharacterController.cpp index d14e59dbd2..aa4d8c42e3 100755 --- a/libraries/physics/src/CharacterController.cpp +++ b/libraries/physics/src/CharacterController.cpp @@ -350,7 +350,7 @@ void CharacterController::playerStep(btCollisionWorld* collisionWorld, btScalar btVector3 velocity = _rigidBody->getLinearVelocity() - _parentVelocity; computeNewVelocity(dt, velocity); - const float MINIMUM_TIME_REMAINING = 0.005f; + constexpr float MINIMUM_TIME_REMAINING = 0.005f; static_assert(FOLLOW_TIME_IMMEDIATE_SNAP > MINIMUM_TIME_REMAINING, "The code below assumes this condition is true."); bool hasFollowTimeRemaining = false; From 287f710ea138a6fc6ce4e8630d3de7e3e9dc35fd Mon Sep 17 00:00:00 2001 From: Phil Palmer Date: Tue, 22 Dec 2020 19:32:43 -0500 Subject: [PATCH 031/152] Fix MyAvatar::centerBody breaking existing scripts (eg. away.js) by having a new parameter: Moved the body of the function to a private internal method (centerBodyInternal), which takes the parameter instead. Previously, when leaving 'away' state, the 'Away' overlay would stay on screen because of the bug. The bug started in "VR fixes for: couldn't sit on the floor, wrong walk directions." (2179c153de8bd8d1b455894e9ccd3699df133c3f). --- interface/src/avatar/MyAvatar.cpp | 16 ++++++++++------ interface/src/avatar/MyAvatar.h | 3 ++- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/interface/src/avatar/MyAvatar.cpp b/interface/src/avatar/MyAvatar.cpp index e5413105f8..be5fa39e1b 100644 --- a/interface/src/avatar/MyAvatar.cpp +++ b/interface/src/avatar/MyAvatar.cpp @@ -497,14 +497,18 @@ void MyAvatar::resetSensorsAndBody() { reset(true, false, true); } -// forceFollowYPos: true to force the body matrix to be affected by the HMD's -// vertical position, even if crouch recentering is disabled. -void MyAvatar::centerBody(const bool forceFollowYPos) { +void MyAvatar::centerBody() { if (QThread::currentThread() != thread()) { QMetaObject::invokeMethod(this, "centerBody"); return; } + centerBodyInternal(false); +} + +// forceFollowYPos (default false): true to force the body matrix to be affected by the HMD's +// vertical position, even if crouch recentering is disabled. +void MyAvatar::centerBodyInternal(const bool forceFollowYPos) { // derive the desired body orientation from the current hmd orientation, before the sensor reset. auto newBodySensorMatrix = deriveBodyFromHMDSensor(forceFollowYPos); // Based on current cached HMD position/rotation.. @@ -5323,7 +5327,7 @@ void MyAvatar::setAllowAvatarStandingPreference(const MyAvatar::AllowAvatarStand // Set the correct vertical position for the avatar body relative to the HMD, // according to the newly-selected avatar standing preference. - centerBody(false); + centerBodyInternal(false); } // Set the user preference of when the avatar may lean. @@ -6693,7 +6697,7 @@ void MyAvatar::beginSit(const glm::vec3& position, const glm::quat& rotation) { setHMDLeanRecenterEnabled(false); // Disable movement setSitDriveKeysStatus(false); - centerBody(true); + centerBodyInternal(true); int hipIndex = getJointIndex("Hips"); clearPinOnJoint(hipIndex); pinJoint(hipIndex, position, rotation); @@ -6711,7 +6715,7 @@ void MyAvatar::endSit(const glm::vec3& position, const glm::quat& rotation) { _characterController.setSeated(false); setCollisionsEnabled(true); setHMDLeanRecenterEnabled(true); - centerBody(false); + centerBodyInternal(false); slamPosition(position); setWorldOrientation(rotation); diff --git a/interface/src/avatar/MyAvatar.h b/interface/src/avatar/MyAvatar.h index 9e817b5167..c06a1a88ab 100644 --- a/interface/src/avatar/MyAvatar.h +++ b/interface/src/avatar/MyAvatar.h @@ -594,7 +594,7 @@ public: * the HMD. * @function MyAvatar.centerBody */ - Q_INVOKABLE void centerBody(const bool forceFollowYPos); // thread-safe + Q_INVOKABLE void centerBody(); // thread-safe /**jsdoc @@ -2812,6 +2812,7 @@ private: void resetLookAtRotation(const glm::vec3& avatarPosition, const glm::quat& avatarOrientation); void resetPointAt(); static glm::vec3 aimToBlendValues(const glm::vec3& aimVector, const glm::quat& frameOrientation); + void centerBodyInternal(const bool forceFollowYPos = false); // Avatar Preferences QUrl _fullAvatarURLFromPreferences; From 8b839fe71b9a2d412100d61671fbd1d71cb6d8c9 Mon Sep 17 00:00:00 2001 From: Phil Palmer Date: Wed, 23 Dec 2020 07:54:59 -0500 Subject: [PATCH 032/152] VR fixes for different user heights and avatar scales. - The user's real-world height is now taken into account in MyAvatar::deriveBodyFromHMDSensor. Therefore, for any user height, the floor stays correctly positioned in all modes of 'Allow my avatar to stand'. - Whenever the user's real-world height is changed, centerBodyInternal is now called to position the body accordingly. The floor therefore stays correctly positioned in all modes of 'Allow my avatar to stand'. (MyAvatar::setUserHeight) - Fix for walk speeds in VR being too fast at large avatar scale and too slow at small avatar scale. The action motor velocity was being scaled once too many by the sensor-to-world scale. The bug existed before this branch. (MyAvatar::scaleMotorSpeed) --- interface/src/avatar/MyAvatar.cpp | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/interface/src/avatar/MyAvatar.cpp b/interface/src/avatar/MyAvatar.cpp index be5fa39e1b..d609ca0efc 100644 --- a/interface/src/avatar/MyAvatar.cpp +++ b/interface/src/avatar/MyAvatar.cpp @@ -3758,15 +3758,15 @@ glm::vec3 MyAvatar::scaleMotorSpeed(const glm::vec3 forward, const glm::vec3 rig if (length > EPSILON) { direction /= length; } - return getSensorToWorldScale() * direction * getSprintSpeed() * _walkSpeedScalar; + return direction * getSprintSpeed() * _walkSpeedScalar; } else { return Vectors::ZERO; } case LocomotionControlsMode::CONTROLS_ANALOG: case LocomotionControlsMode::CONTROLS_ANALOG_PLUS: if (zSpeed || xSpeed) { - glm::vec3 scaledForward = getSensorToWorldScale() * calculateGearedSpeed(zSpeed) * _walkSpeedScalar * ((zSpeed >= stickFullOn) ? getSprintSpeed() : getWalkSpeed()) * forward; - glm::vec3 scaledRight = getSensorToWorldScale() * calculateGearedSpeed(xSpeed) * _walkSpeedScalar * ((xSpeed > stickFullOn) ? getSprintSpeed() : getWalkSpeed()) * right; + glm::vec3 scaledForward = calculateGearedSpeed(zSpeed) * _walkSpeedScalar * ((zSpeed >= stickFullOn) ? getSprintSpeed() : getWalkSpeed()) * forward; + glm::vec3 scaledRight = calculateGearedSpeed(xSpeed) * _walkSpeedScalar * ((xSpeed > stickFullOn) ? getSprintSpeed() : getWalkSpeed()) * right; direction = scaledForward + scaledRight; return direction; } else { @@ -4785,6 +4785,7 @@ void MyAvatar::triggerRotationRecenter() { _follow.setForceActivateRotation(true); } +// Derive the sensor-space matrix for the body, based on the pose of the HMD and hips tracker. // old school meat hook style // forceFollowYPos (default false): true to force the body matrix to be affected by the HMD's // vertical position, even if crouch recentering is disabled. @@ -4822,8 +4823,8 @@ glm::mat4 MyAvatar::deriveBodyFromHMDSensor(const bool forceFollowYPos) const { glm::vec3 headToNeck = headOrientation * Quaternions::Y_180 * (localNeck - localHead); glm::vec3 neckToRoot = headOrientationYawOnly * Quaternions::Y_180 * -localNeck; - float invSensorToWorldScale = getUserEyeHeight() / getEyeHeight(); - glm::vec3 bodyPos = headPosition + invSensorToWorldScale * (headToNeck + neckToRoot); + const float worldToSensorScale = getUserEyeHeight() / getEyeHeight(); + glm::vec3 bodyPos = headPosition + worldToSensorScale * (headToNeck + neckToRoot); glm::quat bodyQuat; const controller::Pose hipsControllerPose = getControllerPoseInSensorFrame(controller::Action::HIPS); @@ -4842,7 +4843,7 @@ glm::mat4 MyAvatar::deriveBodyFromHMDSensor(const bool forceFollowYPos) const { if (!forceFollowYPos && !getHMDCrouchRecenterEnabled()) { // Set the body's vertical position as if it were standing in its T-pose. - bodyPos.y = rig.getUnscaledHipsHeight(); + bodyPos.y = worldToSensorScale * rig.getUnscaledHipsHeight(); } glm::mat4 bodyMat = createMatFromQuatAndPos(bodyQuat, bodyPos); @@ -5230,6 +5231,7 @@ float MyAvatar::getUserHeight() const { void MyAvatar::setUserHeight(float value) { _userHeight.set(value); + centerBodyInternal(false); float sensorToWorldScale = getEyeHeight() / getUserEyeHeight(); emit sensorToWorldScaleChanged(sensorToWorldScale); From a489e9ddcae0b391c485ac9dee10d9fb638d7003 Mon Sep 17 00:00:00 2001 From: Phil Palmer Date: Wed, 23 Dec 2020 19:00:05 -0500 Subject: [PATCH 033/152] Code style: made some little things more conformant with the coding standards and the rest of the codebase. https://github.com/vircadia/vircadia/blob/master/CODING_STANDARD.md --- interface/src/avatar/MyAvatar.cpp | 22 +++++++++---------- libraries/animation/src/Rig.cpp | 2 +- libraries/physics/src/CharacterController.cpp | 5 +---- 3 files changed, 13 insertions(+), 16 deletions(-) diff --git a/interface/src/avatar/MyAvatar.cpp b/interface/src/avatar/MyAvatar.cpp index d609ca0efc..e4189b8bf2 100644 --- a/interface/src/avatar/MyAvatar.cpp +++ b/interface/src/avatar/MyAvatar.cpp @@ -5562,8 +5562,8 @@ MyAvatar::FollowHelper::FollowHelper() { } void MyAvatar::FollowHelper::deactivate() { - for (uint i = 0, e = static_cast(CharacterController::FollowType::Count); i < e; ++i) { - deactivate((CharacterController::FollowType)i); + for (uint i = 0; i < static_cast(CharacterController::FollowType::Count); i++) { + deactivate(static_cast(i)); } } @@ -5588,8 +5588,8 @@ bool MyAvatar::FollowHelper::isActive(CharacterController::FollowType type) cons } bool MyAvatar::FollowHelper::isActive() const { - for (uint i = 0, e = static_cast(CharacterController::FollowType::Count); i < e; ++i) { - if (isActive((CharacterController::FollowType)i)) { + for (uint i = 0; i < static_cast(CharacterController::FollowType::Count); i++) { + if (isActive(static_cast(i))) { return true; } } @@ -5597,12 +5597,12 @@ bool MyAvatar::FollowHelper::isActive() const { } void MyAvatar::FollowHelper::decrementTimeRemaining(float dt) { - for (uint i = 0, e = static_cast(CharacterController::FollowType::Count); i < e; ++i) { - if (_timeRemaining[i] == CharacterController::FOLLOW_TIME_IMMEDIATE_SNAP) { - _timeRemaining[i] = 0.f; + for (auto& time : _timeRemaining) { + if (time == CharacterController::FOLLOW_TIME_IMMEDIATE_SNAP) { + time = 0.0f; } else { - _timeRemaining[i] -= dt; + time -= dt; } } } @@ -5612,13 +5612,14 @@ bool MyAvatar::FollowHelper::shouldActivateRotation(const MyAvatar& myAvatar, const glm::mat4& desiredBodyMatrix, const glm::mat4& currentBodyMatrix, bool& shouldSnapOut) const { - shouldSnapOut = false; - // If hips are under direct control (tracked), they give our desired body rotation and we snap to it every frame. if (myAvatar.areHipsTracked()) { shouldSnapOut = true; return true; } + else { + shouldSnapOut = false; + } const float FOLLOW_ROTATION_THRESHOLD = cosf(myAvatar.getRotationThreshold()); glm::vec2 bodyFacing = getFacingDir2D(currentBodyMatrix); @@ -5875,7 +5876,6 @@ glm::mat4 MyAvatar::FollowHelper::postPhysicsUpdate(MyAvatar& myAvatar, const gl setTranslation(newBodyMat, extractTranslation(myAvatar.deriveBodyFromHMDSensor())); } } - return newBodyMat; } else { return currentBodyMatrix; diff --git a/libraries/animation/src/Rig.cpp b/libraries/animation/src/Rig.cpp index bcdef45440..8b49334925 100644 --- a/libraries/animation/src/Rig.cpp +++ b/libraries/animation/src/Rig.cpp @@ -2716,7 +2716,7 @@ void Rig::computeAvatarBoundingCapsule( // HACK by convention our Avatars are always modeled such that y=0 (GEOMETRY_GROUND_Y) is the ground plane. // add the ground point so that our avatars will always have bounding volumes that are flush with the ground // even if they do not have legs (default robot) - totalExtents.addPoint(glm::vec3(0.f, GEOMETRY_GROUND_Y, 0.f)); + totalExtents.addPoint(glm::vec3(0.0f, GEOMETRY_GROUND_Y, 0.0f)); // To reduce the radius of the bounding capsule to be tight with the torso, we only consider joints // from the head to the hips when computing the rest of the bounding capsule. diff --git a/libraries/physics/src/CharacterController.cpp b/libraries/physics/src/CharacterController.cpp index aa4d8c42e3..04ccd9e547 100755 --- a/libraries/physics/src/CharacterController.cpp +++ b/libraries/physics/src/CharacterController.cpp @@ -368,10 +368,8 @@ void CharacterController::playerStep(btCollisionWorld* collisionWorld, btScalar btVector3 startPos = bodyTransform.getOrigin(); btVector3 deltaPos = _followDesiredBodyTransform.getOrigin() - startPos; - btVector3 linearDisplacement(0, 0, 0); + btVector3 linearDisplacement(0.0f, 0.0f, 0.0f); { - linearDisplacement.setZero(); - const float horizontalTime = _followTimeRemainingPerType[static_cast(FollowType::Horizontal)]; const float verticalTime = _followTimeRemainingPerType[static_cast(FollowType::Vertical)]; @@ -452,7 +450,6 @@ void CharacterController::playerStep(btCollisionWorld* collisionWorld, btScalar } _rigidBody->setWorldTransform(btTransform(endRot, endPos)); } - _followTime += dt; if (_steppingUp) { From 1475cae504083e8076d6d78fa80918e613529bd1 Mon Sep 17 00:00:00 2001 From: HifiExperiments Date: Wed, 23 Dec 2020 21:29:59 -0800 Subject: [PATCH 034/152] wip --- .../src/avatars-renderer/SkeletonModel.cpp | 4 ++-- .../avatars-renderer/src/avatars-renderer/SkeletonModel.h | 2 +- libraries/entities/src/EntityTreeElement.cpp | 3 --- libraries/render-utils/src/Model.cpp | 7 +++++-- libraries/render-utils/src/Model.h | 2 +- 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/libraries/avatars-renderer/src/avatars-renderer/SkeletonModel.cpp b/libraries/avatars-renderer/src/avatars-renderer/SkeletonModel.cpp index 5ac808d3fb..b1c9f7262e 100644 --- a/libraries/avatars-renderer/src/avatars-renderer/SkeletonModel.cpp +++ b/libraries/avatars-renderer/src/avatars-renderer/SkeletonModel.cpp @@ -152,11 +152,11 @@ void SkeletonModel::updateAttitude(const glm::quat& orientation) { // Called by Avatar::simulate after it has set the joint states (fullUpdate true if changed), // but just before head has been simulated. -void SkeletonModel::simulate(float deltaTime, bool fullUpdate) { +void SkeletonModel::simulate(float deltaTime, bool fullUpdate, bool skeleton) { updateAttitude(_owningAvatar->getWorldOrientation()); setBlendshapeCoefficients(_owningAvatar->getHead()->getSummedBlendshapeCoefficients()); - Parent::simulate(deltaTime, fullUpdate); + Parent::simulate(deltaTime, fullUpdate, true); if (fullUpdate) { // let rig compute the model offset glm::vec3 registrationPoint; diff --git a/libraries/avatars-renderer/src/avatars-renderer/SkeletonModel.h b/libraries/avatars-renderer/src/avatars-renderer/SkeletonModel.h index e24d969461..b21c414c37 100644 --- a/libraries/avatars-renderer/src/avatars-renderer/SkeletonModel.h +++ b/libraries/avatars-renderer/src/avatars-renderer/SkeletonModel.h @@ -36,7 +36,7 @@ public: void initJointStates() override; - void simulate(float deltaTime, bool fullUpdate = true) override; + void simulate(float deltaTime, bool fullUpdate = true, bool skeleton = false) override; glm::vec3 avoidCrossedEyes(const glm::vec3& lookAt); void updateRig(float deltaTime, glm::mat4 parentTransform) override; void updateAttitude(const glm::quat& orientation); diff --git a/libraries/entities/src/EntityTreeElement.cpp b/libraries/entities/src/EntityTreeElement.cpp index 16b6ccac9b..66d44d89de 100644 --- a/libraries/entities/src/EntityTreeElement.cpp +++ b/libraries/entities/src/EntityTreeElement.cpp @@ -241,9 +241,6 @@ EntityItemID EntityTreeElement::evalDetailedRayIntersection(const glm::vec3& ori // now ask the entity if we actually intersect if (entity->supportsDetailedIntersection()) { QVariantMap localExtraInfo; - if (entity->getName().contains("boop")) { - qDebug() << entity->getName() << entity->getPivot() << entityFrameBox; - } if (entity->findDetailedRayIntersection(origin, direction, element, localDistance, localFace, localSurfaceNormal, localExtraInfo, searchFilter.isPrecise())) { if (localDistance < distance) { diff --git a/libraries/render-utils/src/Model.cpp b/libraries/render-utils/src/Model.cpp index 78ff17a8ef..0194b838cc 100644 --- a/libraries/render-utils/src/Model.cpp +++ b/libraries/render-utils/src/Model.cpp @@ -362,6 +362,9 @@ bool Model::findRayIntersectionAgainstSubMeshes(const glm::vec3& origin, const g // we can use the AABox's intersection by mapping our origin and direction into the model frame // and testing intersection there. if (modelFrameBox.findRayIntersection(modelFrameOrigin, modelFrameDirection, 1.0f / modelFrameDirection, distance, face, surfaceNormal)) { + if (getURL().toString().toLower().contains("sink")) { + qDebug() << "boop" << modelFrameBox; + } QMutexLocker locker(&_mutex); float bestDistance = FLT_MAX; @@ -1427,7 +1430,7 @@ void Model::setUseDualQuaternionSkinning(bool value) { _useDualQuaternionSkinning = value; } -void Model::simulate(float deltaTime, bool fullUpdate) { +void Model::simulate(float deltaTime, bool fullUpdate, bool skeleton) { DETAILED_PROFILE_RANGE(simulation_detail, __FUNCTION__); fullUpdate = updateGeometry() || fullUpdate || (_scaleToFit && !_scaledToFit) || (_snapModelToRegistrationPoint && !_snappedToRegistrationPoint) || _needsTransformUpdate; @@ -1443,7 +1446,7 @@ void Model::simulate(float deltaTime, bool fullUpdate) { snapToRegistrationPoint(); } // update the world space transforms for all joints - glm::mat4 parentTransform = glm::scale(_scale) * (_snapModelToRegistrationPoint ? + glm::mat4 parentTransform = glm::scale(_scale) * ((_snapModelToRegistrationPoint || skeleton) ? glm::translate(_offset) : glm::translate(getNaturalDimensions() * (0.5f - _registrationPoint))); updateRig(deltaTime, parentTransform); _needsTransformUpdate = false; diff --git a/libraries/render-utils/src/Model.h b/libraries/render-utils/src/Model.h index 7b606840f5..800bfc7e15 100644 --- a/libraries/render-utils/src/Model.h +++ b/libraries/render-utils/src/Model.h @@ -169,7 +169,7 @@ public: bool getSnapModelToRegistrationPoint() { return _snapModelToRegistrationPoint; } bool getSnappedToRegistrationPoint() { return _snappedToRegistrationPoint; } - virtual void simulate(float deltaTime, bool fullUpdate = true); + virtual void simulate(float deltaTime, bool fullUpdate = true, bool skeleton = false); virtual void updateClusterMatrices(); virtual void updateBlendshapes(); From 1ce338d972712d6eea6fca00598750839b0fea45 Mon Sep 17 00:00:00 2001 From: Alezia Kurdis <60075796+AleziaKurdis@users.noreply.github.com> Date: Thu, 24 Dec 2020 22:55:09 -0500 Subject: [PATCH 035/152] Support for "Rotate as the Next Clicked Surface" Support for "Rotate as the Next Clicked Surface" Add "surfaceNormal" in the returned data. --- scripts/system/controllers/controllerModules/inEditMode.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/scripts/system/controllers/controllerModules/inEditMode.js b/scripts/system/controllers/controllerModules/inEditMode.js index 5709b19efe..5bef8ec11a 100644 --- a/scripts/system/controllers/controllerModules/inEditMode.js +++ b/scripts/system/controllers/controllerModules/inEditMode.js @@ -2,6 +2,9 @@ // inEditMode.js // +// Copyright 2014 High Fidelity, Inc. +// Copyright 2020 Vircadia contributors. +// // Distributed under the Apache License, Version 2.0. // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html @@ -80,7 +83,8 @@ Script.include("/~/system/libraries/utils.js"); Messages.sendLocalMessage(this.ENTITY_TOOL_UPDATES_CHANNEL, JSON.stringify({ method: "selectEntity", entityID: this.selectedTarget.objectID, - hand: hand + hand: hand, + surfaceNormal: this.selectedTarget.surfaceNormal })); } else if (this.selectedTarget.type === Picks.INTERSECTED_OVERLAY) { Messages.sendLocalMessage(this.ENTITY_TOOL_UPDATES_CHANNEL, JSON.stringify({ From 79b34ae54150635436a30531d3400ccf0b4d4c5f Mon Sep 17 00:00:00 2001 From: Alezia Kurdis <60075796+AleziaKurdis@users.noreply.github.com> Date: Thu, 24 Dec 2020 22:57:49 -0500 Subject: [PATCH 036/152] Add "Rotate as the Next Clicked Surface" Add "Rotate as the Next Clicked Surface" --- scripts/system/create/edit.js | 97 +++++++++++++++---- .../entitySelectionTool.js | 64 +++++++++++- 2 files changed, 140 insertions(+), 21 deletions(-) diff --git a/scripts/system/create/edit.js b/scripts/system/create/edit.js index 9e94b68ba1..92a6206100 100644 --- a/scripts/system/create/edit.js +++ b/scripts/system/create/edit.js @@ -109,6 +109,8 @@ var entityIconOverlayManager = new EntityIconOverlayManager(["Light", "ParticleE }); var hmdMultiSelectMode = false; +var expectingRotateAsClickedSurface = false; +var keepSelectedOnNextClick = false; var cameraManager = new CameraManager(); @@ -1106,25 +1108,41 @@ function findClickedEntity(event) { } var result; - - if (iconResult.intersects) { - result = iconResult; - } else if (entityResult.intersects) { - result = entityResult; + if (expectingRotateAsClickedSurface) { + if (!SelectionManager.hasSelection() || !SelectionManager.hasUnlockedSelection()) { + audioFeedback.rejection(); + Window.notifyEditError("You have nothing selected, or the selection is locked."); + expectingRotateAsClickedSurface = false; + } else { + //Rotate Selection according the Surface Normal + selectionDisplay.rotateSelection(Quat.lookAt(Vec3.ZERO, Vec3.multiply(entityResult.surfaceNormal, -1), Vec3.UP)); + selectionManager._update(false, this); + pushCommandForSelections(); + expectingRotateAsClickedSurface = false; + audioFeedback.action(); + } + keepSelectedOnNextClick = true; + return null; } else { - return null; - } + if (iconResult.intersects) { + result = iconResult; + } else if (entityResult.intersects) { + result = entityResult; + } else { + return null; + } - if (!result.accurate) { - return null; - } + if (!result.accurate) { + return null; + } - var foundEntity = result.entityID; - return { - pickRay: pickRay, - entityID: foundEntity, - intersection: result.intersection - }; + var foundEntity = result.entityID; + return { + pickRay: pickRay, + entityID: foundEntity, + intersection: result.intersection + }; + } } // Handles selections on overlays while in edit mode by querying entities from @@ -1295,7 +1313,10 @@ function mouseClickEvent(event) { if (result === null || result === undefined) { if (!event.isShifted) { - selectionManager.clearSelections(this); + if (!keepSelectedOnNextClick) { + selectionManager.clearSelections(this); + } + keepSelectedOnNextClick = false; } return; } @@ -2052,6 +2073,26 @@ function gridToAvatarKey(value) { alignGridToAvatar(); } } +function rotateAsNextClickedSurfaceKey(value) { + if (value === 0) { // on release + rotateAsNextClickedSurface(); + } +} +function quickRotate90xKey(value) { + if (value === 0) { // on release + selectionDisplay.rotate90degreeSelection("X"); + } +} +function quickRotate90yKey(value) { + if (value === 0) { // on release + selectionDisplay.rotate90degreeSelection("Y"); + } +} +function quickRotate90zKey(value) { + if (value === 0) { // on release + selectionDisplay.rotate90degreeSelection("Z"); + } +} function recursiveAdd(newParentID, parentData) { if (parentData.children !== undefined) { var children = parentData.children; @@ -2819,6 +2860,10 @@ mapping.from([Controller.Hardware.Keyboard.J]).to(gridKey); mapping.from([Controller.Hardware.Keyboard.G]).to(viewGridKey); mapping.from([Controller.Hardware.Keyboard.H]).to(snapKey); mapping.from([Controller.Hardware.Keyboard.K]).to(gridToAvatarKey); +mapping.from([Controller.Hardware.Keyboard["0"]]).to(rotateAsNextClickedSurfaceKey); +mapping.from([Controller.Hardware.Keyboard["7"]]).to(quickRotate90xKey); +mapping.from([Controller.Hardware.Keyboard["8"]]).to(quickRotate90yKey); +mapping.from([Controller.Hardware.Keyboard["9"]]).to(quickRotate90zKey); mapping.from([Controller.Hardware.Keyboard.X]) .when([Controller.Hardware.Keyboard.Control]) .to(whenReleased(function() { selectionManager.cutSelectedEntities() })); @@ -2867,6 +2912,14 @@ keyUpEventFromUIWindow = function(keyUpEvent) { snapKey(pressedValue); } else if (keyUpEvent.keyCodeString === "K") { gridToAvatarKey(pressedValue); + } else if (keyUpEvent.keyCodeString === "0") { + rotateAsNextClickedSurfaceKey(pressedValue); + } else if (keyUpEvent.keyCodeString === "7") { + quickRotate90xKey(pressedValue); + } else if (keyUpEvent.keyCodeString === "8") { + quickRotate90yKey(pressedValue); + } else if (keyUpEvent.keyCodeString === "9") { + quickRotate90zKey(pressedValue); } else if (keyUpEvent.controlKey && keyUpEvent.keyCodeString === "X") { selectionManager.cutSelectedEntities(); } else if (keyUpEvent.controlKey && keyUpEvent.keyCodeString === "C") { @@ -3015,4 +3068,14 @@ function toggleGridVisibility() { } } +function rotateAsNextClickedSurface() { + if (!SelectionManager.hasSelection() || !SelectionManager.hasUnlockedSelection()) { + audioFeedback.rejection(); + Window.notifyEditError("You have nothing selected, or the selection is locked."); + expectingRotateAsClickedSurface = false; + } else { + expectingRotateAsClickedSurface = true; + } +} + }()); // END LOCAL_SCOPE diff --git a/scripts/system/create/entitySelectionTool/entitySelectionTool.js b/scripts/system/create/entitySelectionTool/entitySelectionTool.js index f9a30ef6a5..8941ff24f2 100644 --- a/scripts/system/create/entitySelectionTool/entitySelectionTool.js +++ b/scripts/system/create/entitySelectionTool/entitySelectionTool.js @@ -103,10 +103,25 @@ SelectionManager = (function() { if (wantDebug) { print("setting selection to " + messageParsed.entityID); } - if (hmdMultiSelectMode) { - that.addEntity(messageParsed.entityID, true, that); + if (expectingRotateAsClickedSurface) { + if (!SelectionManager.hasSelection() || !SelectionManager.hasUnlockedSelection()) { + audioFeedback.rejection(); + Window.notifyEditError("You have nothing selected, or the selection is locked."); + expectingRotateAsClickedSurface = false; + } else { + //Rotate Selection according the Surface Normal + selectionDisplay.rotateSelection(Quat.lookAt(Vec3.ZERO, Vec3.multiply(messageParsed.surfaceNormal, -1), Vec3.UP)); + that._update(false, this); + pushCommandForSelections(); + expectingRotateAsClickedSurface = false; + audioFeedback.action(); + } } else { - that.setSelections([messageParsed.entityID], that); + if (hmdMultiSelectMode) { + that.addEntity(messageParsed.entityID, true, that); + } else { + that.setSelections([messageParsed.entityID], that); + } } } } else if (messageParsed.method === "clearSelection") { @@ -2377,7 +2392,48 @@ SelectionDisplay = (function() { } debugPickPlaneHits = []; }; - + + that.rotateSelection = function(rotation) { + SelectionManager.saveProperties(); + if (SelectionManager.selections.length === 1) { + SelectionManager.savedProperties[SelectionManager.selections[0]].rotation = Quat.IDENTITY; + } + updateSelectionsRotation(rotation, SelectionManager.worldPosition); + }; + + that.rotate90degreeSelection = function(axis) { + //axis is a string and expect "X", "Y" or "Z" + if (!SelectionManager.hasSelection() || !SelectionManager.hasUnlockedSelection()) { + audioFeedback.rejection(); + Window.notifyEditError("You have nothing selected, or the selection is locked."); + } else { + var currentRotation, axisRotation; + SelectionManager.saveProperties(); + if (selectionManager.selections.length === 1 && spaceMode === SPACE_LOCAL) { + currentRotation = SelectionManager.localRotation; + }else{ + currentRotation = SelectionManager.worldRotation; + } + switch(axis) { + case "X": + axisRotation = Quat.angleAxis(90.0, Quat.getRight(currentRotation)); + break; + case "Y": + axisRotation = Quat.angleAxis(90.0, Quat.getUp(currentRotation)); + break; + case "Z": + axisRotation = Quat.angleAxis(90.0, Quat.getForward(currentRotation)); + break; + default: + return; + } + updateSelectionsRotation(axisRotation, SelectionManager.worldPosition); + SelectionManager._update(false, this); + pushCommandForSelections(); + audioFeedback.action(); + } + }; + function addUnlitMaterialOnToolEntity(toolEntityParentID) { var toolEntitiesMaterialData = "{\n \"materialVersion\": 1,\n \"materials\": [\n {\n \"name\": \"0\",\n \"defaultFallthrough\": true,\n \"unlit\": true,\n \"model\": \"hifi_pbr\"\n }\n ]\n}"; var materialEntityID = Entities.addEntity({ From adf4249b3225f63a271475dc84b0ba33b7e2485c Mon Sep 17 00:00:00 2001 From: Alezia Kurdis <60075796+AleziaKurdis@users.noreply.github.com> Date: Thu, 24 Dec 2020 22:59:30 -0500 Subject: [PATCH 037/152] Add "action" sound. Add "action" sound. --- scripts/system/create/audioFeedback/audioFeedback.js | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/scripts/system/create/audioFeedback/audioFeedback.js b/scripts/system/create/audioFeedback/audioFeedback.js index f1900d5716..67af004844 100644 --- a/scripts/system/create/audioFeedback/audioFeedback.js +++ b/scripts/system/create/audioFeedback/audioFeedback.js @@ -15,6 +15,7 @@ audioFeedback = (function() { var confirmationSound = SoundCache.getSound(Script.resolvePath("./sounds/confirmation.mp3")); var rejectionSound = SoundCache.getSound(Script.resolvePath("./sounds/rejection.mp3")); + var actionSound = SoundCache.getSound(Script.resolvePath("./sounds/action.mp3")); that.confirmation = function() { //Play a confirmation sound var injector = Audio.playSound(confirmationSound, { @@ -30,5 +31,12 @@ audioFeedback = (function() { }); } + that.action = function() { //Play an action sound + var injector = Audio.playSound(actionSound, { + "volume": 0.3, + "localOnly": true + }); + } + return that; })(); From eeecf4861c22b0ba4d1727a94f12a057eedd11d7 Mon Sep 17 00:00:00 2001 From: Alezia Kurdis <60075796+AleziaKurdis@users.noreply.github.com> Date: Thu, 24 Dec 2020 23:00:09 -0500 Subject: [PATCH 038/152] Add "action" sound. Add "action" sound. --- .../create/audioFeedback/sounds/action.mp3 | Bin 0 -> 10448 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 scripts/system/create/audioFeedback/sounds/action.mp3 diff --git a/scripts/system/create/audioFeedback/sounds/action.mp3 b/scripts/system/create/audioFeedback/sounds/action.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..fd004847b05da3ce5db46eb29f4df7dc08148308 GIT binary patch literal 10448 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 Date: Thu, 24 Dec 2020 23:02:57 -0500 Subject: [PATCH 039/152] Add "Rotate As Next Clicked Surface" Add "Rotate As Next Clicked Surface" Add also "Rotate 90 degree on X axis", "Rotate 90 degree on Z axis" and "Rotate 90 degree on Z axis" --- scripts/system/create/entityList/entityList.js | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/scripts/system/create/entityList/entityList.js b/scripts/system/create/entityList/entityList.js index a4d4decedb..5119d7d3da 100644 --- a/scripts/system/create/entityList/entityList.js +++ b/scripts/system/create/entityList/entityList.js @@ -383,6 +383,14 @@ EntityListTool = function(shouldUseEditTabletApp) { SelectionManager.selectTopFamily(); } else if (data.type === 'teleportToEntity') { SelectionManager.teleportToEntity(); + } else if (data.type === 'rotateAsTheNextClickedSurface') { + rotateAsNextClickedSurface(); + } else if (data.type === 'quickRotate90x') { + selectionDisplay.rotate90degreeSelection("X"); + } else if (data.type === 'quickRotate90y') { + selectionDisplay.rotate90degreeSelection("Y"); + } else if (data.type === 'quickRotate90z') { + selectionDisplay.rotate90degreeSelection("Z"); } else if (data.type === 'moveEntitySelectionToAvatar') { SelectionManager.moveEntitiesSelectionToAvatar(); } else if (data.type === 'loadConfigSetting') { From cd0293d635b39772d9d51b0873edd00ad804cf8e Mon Sep 17 00:00:00 2001 From: Alezia Kurdis <60075796+AleziaKurdis@users.noreply.github.com> Date: Thu, 24 Dec 2020 23:03:55 -0500 Subject: [PATCH 040/152] Add "Rotate As Next Clicked Surface" Add "Rotate As Next Clicked Surface" Add also "Rotate 90 degree on X axis", "Rotate 90 degree on Z axis" and "Rotate 90 degree on Z axis" --- .../create/entityList/html/entityList.html | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/scripts/system/create/entityList/html/entityList.html b/scripts/system/create/entityList/html/entityList.html index 9817f9ddf9..99dc213cf1 100644 --- a/scripts/system/create/entityList/html/entityList.html +++ b/scripts/system/create/entityList/html/entityList.html @@ -156,6 +156,31 @@ + + + + +
From cba79c72f51338f80674c27649ef83801c1a004d Mon Sep 17 00:00:00 2001 From: Phil Palmer Date: Wed, 30 Dec 2020 01:01:35 -0500 Subject: [PATCH 053/152] Re-added API features that are no longer used internally; marked them as deprecated. As suggested in the review here: https://github.com/vircadia/vircadia/pull/928/files#r549821976 Re-added and deprecated MyAvatar.userRecenterModel. Retained the functionality of setUserRecenterModel, and approximated that of getUserRecenterModel (some stand+lean preference pairs had no equivalent before). Re-added and deprecated MyAvatar.isSitStandStateLocked. Approximated the functionality of getIsSitStandStateLocked. Didn't retain that of setIsSitStandStateLocked, because it wouldn't be useful on its own; someone using it would probably want setUserRecenterModel instead (or new functions to set the standing and leaning preferences). isSitStandStateLocked's reason to exist was that we could stop keeping track of the user's real-world sit/stand state (in updateSitStandState), and instead pretend the user was always standing (for SitStandModelType::ForceStand) or always sitting (for SitStandModelType::ForceSit). That determined whether the avatar was allowed to lean (wouldn't lean if the user was sitting or in ForceSit). Now though, the user explicitly chooses when the avatar may lean: never / just when the user is standing / even when the user is sitting. These API features were removed in 2179c153de8bd8d1b455894e9ccd3699df133c3f ("VR fixes for: couldn't sit on the floor, wrong walk directions"). --- interface/src/avatar/MyAvatar.cpp | 60 +++++++++++++++++++++++++++++++ interface/src/avatar/MyAvatar.h | 26 ++++++++++++++ 2 files changed, 86 insertions(+) diff --git a/interface/src/avatar/MyAvatar.cpp b/interface/src/avatar/MyAvatar.cpp index c374bd9d25..5349b82a0b 100644 --- a/interface/src/avatar/MyAvatar.cpp +++ b/interface/src/avatar/MyAvatar.cpp @@ -5273,6 +5273,33 @@ bool MyAvatar::getIsInSittingState() const { return _isInSittingState.get(); } +// Deprecated, will be removed. +MyAvatar::SitStandModelType MyAvatar::getUserRecenterModel() const { + qCDebug(interfaceapp) + << "MyAvatar.getUserRecenterModel is deprecated and will be removed. If you need it, please contact the developers."; + + // The legacy SitStandModelType corresponding to each AllowAvatarLeaningPreference. + std::array(AllowAvatarLeaningPreference::Count)> legacySitStandModels = { + SitStandModelType::Auto, // AllowAvatarLeaningPreference::WhenUserIsStanding + SitStandModelType::ForceStand, // AllowAvatarLeaningPreference::Always + SitStandModelType::ForceSit, // AllowAvatarLeaningPreference::Never + SitStandModelType::DisableHMDLean // AllowAvatarLeaningPreference::AlwaysNoRecenter + }; + + return legacySitStandModels[static_cast(_allowAvatarLeaningPreference.get())]; +} + +// Deprecated, will be removed. +bool MyAvatar::getIsSitStandStateLocked() const { + qCDebug(interfaceapp) << "MyAvatar.getIsSitStandStateLocked is deprecated and will be removed. If you need it, please " + "contact the developers. See also: MyAvatar.getUserRecenterModel."; + + // In the old code, the record of the user's sit/stand state was locked except when using + // SitStandModelType::Auto or SitStandModelType::DisableHMDLean. + return (_allowAvatarStandingPreference.get() != AllowAvatarStandingPreference::WhenUserIsStanding) && + (_allowAvatarLeaningPreference.get() != AllowAvatarLeaningPreference::AlwaysNoRecenter); +} + // Get the user preference of when MyAvatar may stand. MyAvatar::AllowAvatarStandingPreference MyAvatar::getAllowAvatarStandingPreference() const { return _allowAvatarStandingPreference.get(); @@ -5344,6 +5371,32 @@ void MyAvatar::setIsInSittingState(bool isSitting) { setSitStandStateChange(true); } +// Deprecated, will be removed. +void MyAvatar::setUserRecenterModel(MyAvatar::SitStandModelType modelName) { + qCDebug(interfaceapp) + << "MyAvatar.setUserRecenterModel is deprecated and will be removed. If you need it, please contact the developers."; + + switch (modelName) { + case SitStandModelType::ForceSit: + setAllowAvatarStandingPreference(AllowAvatarStandingPreference::Always); + setAllowAvatarLeaningPreference(AllowAvatarLeaningPreference::Never); + break; + case SitStandModelType::ForceStand: + setAllowAvatarStandingPreference(AllowAvatarStandingPreference::Always); + setAllowAvatarLeaningPreference(AllowAvatarLeaningPreference::Always); + break; + case SitStandModelType::Auto: + default: + setAllowAvatarStandingPreference(AllowAvatarStandingPreference::Always); + setAllowAvatarLeaningPreference(AllowAvatarLeaningPreference::WhenUserIsStanding); + break; + case SitStandModelType::DisableHMDLean: + setAllowAvatarStandingPreference(AllowAvatarStandingPreference::WhenUserIsStanding); + setAllowAvatarLeaningPreference(AllowAvatarLeaningPreference::AlwaysNoRecenter); + break; + } +} + // Set the user preference of when the avatar may stand. void MyAvatar::setAllowAvatarStandingPreference(const MyAvatar::AllowAvatarStandingPreference preference) { _allowAvatarStandingPreference.set(preference); @@ -5353,6 +5406,13 @@ void MyAvatar::setAllowAvatarStandingPreference(const MyAvatar::AllowAvatarStand centerBodyInternal(false); } +// Deprecated, will be removed. +void MyAvatar::setIsSitStandStateLocked(bool isLocked) { + Q_UNUSED(isLocked); + qCDebug(interfaceapp) << "MyAvatar.setIsSitStandStateLocked is deprecated and will be removed. If you need it, please " + "contact the developers. See also: MyAvatar.setUserRecenterModel."; +} + // Set the user preference of when the avatar may lean. void MyAvatar::setAllowAvatarLeaningPreference(const MyAvatar::AllowAvatarLeaningPreference preference) { _allowAvatarLeaningPreference.set(preference); diff --git a/interface/src/avatar/MyAvatar.h b/interface/src/avatar/MyAvatar.h index f424e3ba2c..b773f802d2 100644 --- a/interface/src/avatar/MyAvatar.h +++ b/interface/src/avatar/MyAvatar.h @@ -282,11 +282,18 @@ class MyAvatar : public Avatar { *

Warning: Setting this value also sets the value of analogPlusSprintSpeed to twice * the value.

* @property {number} analogPlusSprintSpeed - The sprint (run) speed of your avatar for the "AnalogPlus" control scheme. + * @property {MyAvatar.SitStandModelType} userRecenterModel - Controls avatar leaning and recentering behavior. + *

Deprecated: This property is deprecated and will be removed. If you need it, please contact + * the developers.

* @property {boolean} isInSittingState - true if the user wearing the HMD is determined to be sitting; * false if the user wearing the HMD is determined to be standing. This can affect whether the avatar * is allowed to stand, lean or recenter its footing, depending on user preferences. * The property value automatically updates as the user sits or stands. Setting the property value overrides the current * sitting / standing state, which is updated when the user next sits or stands. + * @property {boolean} isSitStandStateLocked - true to lock the avatar sitting/standing state, i.e., use this + * to disable automatically changing state. + *

Deprecated: This property is deprecated and will be removed. If you need it, please contact + * the developers. See also: getUserRecenterModel and setUserRecenterModel.

* @property {boolean} allowTeleporting - true if teleporting is enabled in the Interface settings, * false if it isn't. Read-only. * @@ -408,6 +415,19 @@ class MyAvatar : public Avatar { Q_PROPERTY(float walkBackwardSpeed READ getWalkBackwardSpeed WRITE setWalkBackwardSpeed NOTIFY walkBackwardSpeedChanged); Q_PROPERTY(float sprintSpeed READ getSprintSpeed WRITE setSprintSpeed NOTIFY sprintSpeedChanged); Q_PROPERTY(bool isInSittingState READ getIsInSittingState WRITE setIsInSittingState); + + /**jsdoc + * @deprecated This property is deprecated and will be removed. If you need it, please contact the developers. + */ + Q_PROPERTY(MyAvatar::SitStandModelType userRecenterModel READ getUserRecenterModel WRITE setUserRecenterModel); + + /**jsdoc + * @deprecated This property is deprecated and will be removed. If you need it, please contact the developers. + * See also: {@link MyAvatar.getUserRecenterModel|getUserRecenterModel} and + * {@link MyAvatar.setUserRecenterModel|setUserRecenterModel}. + */ + Q_PROPERTY(bool isSitStandStateLocked READ getIsSitStandStateLocked WRITE setIsSitStandStateLocked); + Q_PROPERTY(bool allowTeleporting READ getAllowTeleporting) const QString DOMINANT_LEFT_HAND = "left"; @@ -512,6 +532,8 @@ public: /**jsdoc *

Specifies different avatar leaning and recentering behaviors.

+ *

Deprecated: This enumeration is deprecated and will be removed. If you need it, please contact + * the developers

* * * @@ -1769,6 +1791,10 @@ public: bool getIsInWalkingState() const; void setIsInSittingState(bool isSitting); bool getIsInSittingState() const; + void setUserRecenterModel(MyAvatar::SitStandModelType modelName); // Deprecated, will be removed. + MyAvatar::SitStandModelType getUserRecenterModel() const; // Deprecated, will be removed. + void setIsSitStandStateLocked(bool isLocked); // Deprecated, will be removed. + bool getIsSitStandStateLocked() const; // Deprecated, will be removed. void setAllowAvatarStandingPreference(const AllowAvatarStandingPreference preference); AllowAvatarStandingPreference getAllowAvatarStandingPreference() const; void setAllowAvatarLeaningPreference(const AllowAvatarLeaningPreference preference); From 8ca64213766232d9eab137c22786c66508206703 Mon Sep 17 00:00:00 2001 From: Phil Palmer Date: Wed, 30 Dec 2020 01:56:05 -0500 Subject: [PATCH 054/152] Correct the name of a scale factor (had inverted meaning). --- interface/src/avatar/MyAvatar.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/interface/src/avatar/MyAvatar.cpp b/interface/src/avatar/MyAvatar.cpp index 5349b82a0b..4a5afbef47 100644 --- a/interface/src/avatar/MyAvatar.cpp +++ b/interface/src/avatar/MyAvatar.cpp @@ -4863,8 +4863,8 @@ glm::mat4 MyAvatar::deriveBodyFromHMDSensor(const bool forceFollowYPos) const { if (!forceFollowYPos && !getHMDCrouchRecenterEnabled()) { // Set the body's vertical position as if it were standing in its T-pose. - float userToRigScale = getUserEyeHeight() / getUnscaledEyeHeight(); - bodyPos.y = userToRigScale * rig.getUnscaledHipsHeight(); + float rigToUserScale = getUserEyeHeight() / getUnscaledEyeHeight(); + bodyPos.y = rigToUserScale * rig.getUnscaledHipsHeight(); } glm::mat4 bodyMat = createMatFromQuatAndPos(bodyQuat, bodyPos); From 8cf76609938648437db449e12246c3a0f05ae823 Mon Sep 17 00:00:00 2001 From: Phil Palmer Date: Wed, 30 Dec 2020 02:00:28 -0500 Subject: [PATCH 055/152] Replace a tab with spaces. --- interface/src/avatar/MyAvatar.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/src/avatar/MyAvatar.h b/interface/src/avatar/MyAvatar.h index b773f802d2..188220554b 100644 --- a/interface/src/avatar/MyAvatar.h +++ b/interface/src/avatar/MyAvatar.h @@ -423,7 +423,7 @@ class MyAvatar : public Avatar { /**jsdoc * @deprecated This property is deprecated and will be removed. If you need it, please contact the developers. - * See also: {@link MyAvatar.getUserRecenterModel|getUserRecenterModel} and + * See also: {@link MyAvatar.getUserRecenterModel|getUserRecenterModel} and * {@link MyAvatar.setUserRecenterModel|setUserRecenterModel}. */ Q_PROPERTY(bool isSitStandStateLocked READ getIsSitStandStateLocked WRITE setIsSitStandStateLocked); From ee0904d5618d940bccff7562134cf2f0c09edf18 Mon Sep 17 00:00:00 2001 From: Phil Palmer Date: Wed, 30 Dec 2020 04:13:37 -0500 Subject: [PATCH 056/152] Remove MyAvatar "squat" recenter from ad6bbc7ff6954461c35da6ddbdef7b71bf7c5c55 The "squat" recenter pre-dates the sit/stand detection, but the current version basically came from ad6bbc7ff6954461c35da6ddbdef7b71bf7c5c55 in 2018. I'm removing it because it doesn't seem useful anymore (with or without the other changes in this branch). What it did (on the current master) : - If "Avatar leaning behavior" was "Auto" - and the user was standing - but their head was more than 5cm below standing height - and their chest was upright - for 30 seconds - do a vertical recenter so that the avatar stands straight (instead of having knees bent). When the user stood up straight after that recenter, the avatar would hover off the ground until the next recenter (eg. walking). --- interface/src/avatar/MyAvatar.cpp | 33 ------------------------------- interface/src/avatar/MyAvatar.h | 1 - 2 files changed, 34 deletions(-) diff --git a/interface/src/avatar/MyAvatar.cpp b/interface/src/avatar/MyAvatar.cpp index 4a5afbef47..bcf5192bed 100644 --- a/interface/src/avatar/MyAvatar.cpp +++ b/interface/src/avatar/MyAvatar.cpp @@ -652,8 +652,6 @@ void MyAvatar::update(float deltaTime) { // update moving average of HMD facing in xz plane. const float HMD_FACING_TIMESCALE = getRotationRecenterFilterLength(); const float PERCENTAGE_WEIGHT_HEAD_VS_SHOULDERS_AZIMUTH = 0.0f; // 100 percent shoulders - const float COSINE_THIRTY_DEGREES = 0.866f; - const float SQUATTY_TIMEOUT = 30.0f; // 30 seconds const float HEIGHT_FILTER_COEFFICIENT = 0.01f; float tau = deltaTime / HMD_FACING_TIMESCALE; @@ -720,29 +718,6 @@ void MyAvatar::update(float deltaTime) { setAverageHeadRotation(computeAverageHeadRotation(getControllerPoseInAvatarFrame(controller::Action::HEAD))); } - // if the spine is straight and the head is below the default position by 5 cm then increment squatty count. - const float SQUAT_THRESHOLD = 0.05f; - glm::vec3 headDefaultPositionAvatarSpace = getAbsoluteDefaultJointTranslationInObjectFrame(getJointIndex("Head")); - glm::quat spine2OrientationAvatarSpace = getAbsoluteJointRotationInObjectFrame(getJointIndex("Spine2")); - glm::vec3 upSpine2 = spine2OrientationAvatarSpace * glm::vec3(0.0f, 1.0f, 0.0f); - if (glm::length(upSpine2) > 0.0f) { - upSpine2 = glm::normalize(upSpine2); - } - float angleSpine2 = glm::dot(upSpine2, glm::vec3(0.0f, 1.0f, 0.0f)); - - if (getHMDCrouchRecenterEnabled() && - getControllerPoseInAvatarFrame(controller::Action::HEAD).getTranslation().y < (headDefaultPositionAvatarSpace.y - SQUAT_THRESHOLD) && - (angleSpine2 > COSINE_THIRTY_DEGREES)) { - - _squatTimer += deltaTime; - if (_squatTimer > SQUATTY_TIMEOUT) { - _squatTimer = 0.0f; - _follow._squatDetected = true; - } - } else { - _squatTimer = 0.0f; - } - // put update sit stand state counts here updateSitStandState(newHeightReading.getTranslation().y, deltaTime); @@ -5363,7 +5338,6 @@ void MyAvatar::setIsInWalkingState(bool isWalking) { // Specify whether the user is sitting or standing in the real world. void MyAvatar::setIsInSittingState(bool isSitting) { _sitStandStateTimer = 0.0f; - _squatTimer = 0.0f; // on reset height we need the count to be more than one in case the user sits and stands up quickly. _isInSittingState.set(isSitting); setResetMode(true); @@ -5811,10 +5785,6 @@ bool MyAvatar::FollowHelper::shouldActivateVertical(const MyAvatar& myAvatar, } else { // in the standing state returnValue = (offset.y > CYLINDER_TOP) || (offset.y < CYLINDER_BOTTOM); - // finally check for squats in standing - if (_squatDetected) { - returnValue = true; - } } } return returnValue; @@ -5873,9 +5843,6 @@ void MyAvatar::FollowHelper::prePhysicsUpdate(MyAvatar& myAvatar, if (!isActive(CharacterController::FollowType::Vertical) && (shouldActivateVertical(myAvatar, desiredBodyMatrix, currentBodyMatrix) || hasDriveInput)) { activate(CharacterController::FollowType::Vertical, false); - if (_squatDetected) { - _squatDetected = false; - } } } } else { diff --git a/interface/src/avatar/MyAvatar.h b/interface/src/avatar/MyAvatar.h index 188220554b..5fe068a3df 100644 --- a/interface/src/avatar/MyAvatar.h +++ b/interface/src/avatar/MyAvatar.h @@ -2920,7 +2920,6 @@ private: void setForceActivateHorizontal(bool val); bool getToggleHipsFollowing() const; void setToggleHipsFollowing(bool followHead); - bool _squatDetected { false }; std::atomic _forceActivateRotation { false }; std::atomic _forceActivateVertical { false }; std::atomic _forceActivateHorizontal { false }; From 8d3e2ae9eecc456cabc46757c6b64e379427859f Mon Sep 17 00:00:00 2001 From: Phil Palmer Date: Wed, 30 Dec 2020 04:13:37 -0500 Subject: [PATCH 057/152] Remove MyAvatar "squat" recenter from ad6bbc7ff6954461c35da6ddbdef7b71bf7c5c55 The "squat" recenter pre-dates the sit/stand detection, but the current version basically came from ad6bbc7ff6954461c35da6ddbdef7b71bf7c5c55 in 2018. I'm removing it because it doesn't seem useful anymore (with or without the other changes in this branch). What it did (on the current master) : - If "Avatar leaning behavior" was "Auto" - and the user was standing - but their head was more than 5cm below standing height - and their chest was upright - for 30 seconds - do a vertical recenter so that the avatar stands straight (instead of having knees bent). When the user stood up straight after that recenter, the avatar would hover off the ground until the next recenter (eg. walking). --- interface/src/avatar/MyAvatar.cpp | 33 ------------------------------- interface/src/avatar/MyAvatar.h | 2 -- 2 files changed, 35 deletions(-) diff --git a/interface/src/avatar/MyAvatar.cpp b/interface/src/avatar/MyAvatar.cpp index 4a5afbef47..bcf5192bed 100644 --- a/interface/src/avatar/MyAvatar.cpp +++ b/interface/src/avatar/MyAvatar.cpp @@ -652,8 +652,6 @@ void MyAvatar::update(float deltaTime) { // update moving average of HMD facing in xz plane. const float HMD_FACING_TIMESCALE = getRotationRecenterFilterLength(); const float PERCENTAGE_WEIGHT_HEAD_VS_SHOULDERS_AZIMUTH = 0.0f; // 100 percent shoulders - const float COSINE_THIRTY_DEGREES = 0.866f; - const float SQUATTY_TIMEOUT = 30.0f; // 30 seconds const float HEIGHT_FILTER_COEFFICIENT = 0.01f; float tau = deltaTime / HMD_FACING_TIMESCALE; @@ -720,29 +718,6 @@ void MyAvatar::update(float deltaTime) { setAverageHeadRotation(computeAverageHeadRotation(getControllerPoseInAvatarFrame(controller::Action::HEAD))); } - // if the spine is straight and the head is below the default position by 5 cm then increment squatty count. - const float SQUAT_THRESHOLD = 0.05f; - glm::vec3 headDefaultPositionAvatarSpace = getAbsoluteDefaultJointTranslationInObjectFrame(getJointIndex("Head")); - glm::quat spine2OrientationAvatarSpace = getAbsoluteJointRotationInObjectFrame(getJointIndex("Spine2")); - glm::vec3 upSpine2 = spine2OrientationAvatarSpace * glm::vec3(0.0f, 1.0f, 0.0f); - if (glm::length(upSpine2) > 0.0f) { - upSpine2 = glm::normalize(upSpine2); - } - float angleSpine2 = glm::dot(upSpine2, glm::vec3(0.0f, 1.0f, 0.0f)); - - if (getHMDCrouchRecenterEnabled() && - getControllerPoseInAvatarFrame(controller::Action::HEAD).getTranslation().y < (headDefaultPositionAvatarSpace.y - SQUAT_THRESHOLD) && - (angleSpine2 > COSINE_THIRTY_DEGREES)) { - - _squatTimer += deltaTime; - if (_squatTimer > SQUATTY_TIMEOUT) { - _squatTimer = 0.0f; - _follow._squatDetected = true; - } - } else { - _squatTimer = 0.0f; - } - // put update sit stand state counts here updateSitStandState(newHeightReading.getTranslation().y, deltaTime); @@ -5363,7 +5338,6 @@ void MyAvatar::setIsInWalkingState(bool isWalking) { // Specify whether the user is sitting or standing in the real world. void MyAvatar::setIsInSittingState(bool isSitting) { _sitStandStateTimer = 0.0f; - _squatTimer = 0.0f; // on reset height we need the count to be more than one in case the user sits and stands up quickly. _isInSittingState.set(isSitting); setResetMode(true); @@ -5811,10 +5785,6 @@ bool MyAvatar::FollowHelper::shouldActivateVertical(const MyAvatar& myAvatar, } else { // in the standing state returnValue = (offset.y > CYLINDER_TOP) || (offset.y < CYLINDER_BOTTOM); - // finally check for squats in standing - if (_squatDetected) { - returnValue = true; - } } } return returnValue; @@ -5873,9 +5843,6 @@ void MyAvatar::FollowHelper::prePhysicsUpdate(MyAvatar& myAvatar, if (!isActive(CharacterController::FollowType::Vertical) && (shouldActivateVertical(myAvatar, desiredBodyMatrix, currentBodyMatrix) || hasDriveInput)) { activate(CharacterController::FollowType::Vertical, false); - if (_squatDetected) { - _squatDetected = false; - } } } } else { diff --git a/interface/src/avatar/MyAvatar.h b/interface/src/avatar/MyAvatar.h index 188220554b..a2a02fa7f8 100644 --- a/interface/src/avatar/MyAvatar.h +++ b/interface/src/avatar/MyAvatar.h @@ -2920,7 +2920,6 @@ private: void setForceActivateHorizontal(bool val); bool getToggleHipsFollowing() const; void setToggleHipsFollowing(bool followHead); - bool _squatDetected { false }; std::atomic _forceActivateRotation { false }; std::atomic _forceActivateVertical { false }; std::atomic _forceActivateHorizontal { false }; @@ -3027,7 +3026,6 @@ private: MyAvatar::AllowAvatarLeaningPreference::Default }; // The user preference of when MyAvatar may lean. float _sitStandStateTimer { 0.0f }; - float _squatTimer { 0.0f }; float _tippingPoint { _userHeight.get() }; // load avatar scripts once when rig is ready From 44324584b4a5ea9a675da7c45283f480061cf985 Mon Sep 17 00:00:00 2001 From: Phil Palmer Date: Wed, 30 Dec 2020 04:30:52 -0500 Subject: [PATCH 058/152] Fix accidental change of bracing style. --- interface/src/avatar/MySkeletonModel.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/interface/src/avatar/MySkeletonModel.cpp b/interface/src/avatar/MySkeletonModel.cpp index 7413e4ece7..e7341ceec6 100755 --- a/interface/src/avatar/MySkeletonModel.cpp +++ b/interface/src/avatar/MySkeletonModel.cpp @@ -75,8 +75,7 @@ static AnimPose computeHipsInSensorFrame(MyAvatar* myAvatar, bool isFlying) { if (useCenterOfGravityModel) { // then we use center of gravity model hipsMat = myAvatar->deriveBodyUsingCgModel(); - } - else { + } else { // otherwise use the default of putting the hips under the head hipsMat = myAvatar->deriveBodyFromHMDSensor(true); } From a95d29d3277927c80c1b9ba64f0de2a291f9815a Mon Sep 17 00:00:00 2001 From: Phil Palmer Date: Wed, 30 Dec 2020 21:36:24 -0500 Subject: [PATCH 059/152] Fix leaning not using center-of-gravity model in mode 'Allow avatar to stand: When I'm standing'. computeHipsInSensorFrame was accidentally setting useCenterOfGravityModel to false if !getHMDCrouchRecenterEnabled. Now it sets it to true if !getHMDCrouchRecenterEnabled. So if artificial standing is disabled, it uses center-of-gravity regardless of the user's sit/stand state. --- interface/src/avatar/MySkeletonModel.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/interface/src/avatar/MySkeletonModel.cpp b/interface/src/avatar/MySkeletonModel.cpp index e7341ceec6..4984c1d335 100755 --- a/interface/src/avatar/MySkeletonModel.cpp +++ b/interface/src/avatar/MySkeletonModel.cpp @@ -65,11 +65,13 @@ static AnimPose computeHipsInSensorFrame(MyAvatar* myAvatar, bool isFlying) { return result; } + // Use the center-of-gravity model if the user and the avatar are standing, unless flying or walking. + // If artificial standing is disabled, use center-of-gravity regardless of the user's sit/stand state. bool useCenterOfGravityModel = myAvatar->getCenterOfGravityModelEnabled() && !isFlying && !myAvatar->getIsInWalkingState() && - !myAvatar->getIsInSittingState() && myAvatar->getHMDLeanRecenterEnabled() && - (myAvatar->getAllowAvatarLeaningPreference() != MyAvatar::AllowAvatarLeaningPreference::AlwaysNoRecenter) && - myAvatar->getHMDCrouchRecenterEnabled(); + (!myAvatar->getHMDCrouchRecenterEnabled() || !myAvatar->getIsInSittingState()) && + myAvatar->getHMDLeanRecenterEnabled() && + (myAvatar->getAllowAvatarLeaningPreference() != MyAvatar::AllowAvatarLeaningPreference::AlwaysNoRecenter); glm::mat4 hipsMat; if (useCenterOfGravityModel) { From dd2a11f53b0ab0b34adc5c8caab16c337c4c0f7f Mon Sep 17 00:00:00 2001 From: Phil Palmer Date: Wed, 30 Dec 2020 22:38:31 -0500 Subject: [PATCH 060/152] Decouple MyAvatar.centerOfGravityModelEnabled from the user standing state. Engine code no longer controls MyAvatar.centerOfGravityModelEnabled. Maybe we should deprecate it now, since its reason to exist seemed to be only to disable the CG model while the user was sitting, which is now done more explicitly (see below). MyAvatar::FollowHelper: - rename shouldActivateHorizontal to shouldActivateHorizontal_userSitting, now private. - rename shouldActivateHorizontalCG to shouldActivateHorizontal_userStanding, now private. - add new shouldActivateHorizontal that calls one of the above based on the user's sit/stand state. - these functions no longer modify their 'myAvatar' parameter. Add USER_CAN_TURN_BODY_WHILE_SITTING (false), which retains the old rotation behaviour of lean recentering: a lean recenter doesn't rotate the body if the user is sitting (new: unless the feet are tracked). In other words, the lean recentering assumes the user isn't on a swivel chair and keeps the avatar pointing in the same direction. It might be good to expose that as an option. (Regardless, rotation recentering does kick-in if they turn too far). --- interface/src/avatar/MyAvatar.cpp | 87 +++++++++++++++++++++---------- interface/src/avatar/MyAvatar.h | 17 ++++-- 2 files changed, 73 insertions(+), 31 deletions(-) diff --git a/interface/src/avatar/MyAvatar.cpp b/interface/src/avatar/MyAvatar.cpp index bcf5192bed..fc2394cfc0 100644 --- a/interface/src/avatar/MyAvatar.cpp +++ b/interface/src/avatar/MyAvatar.cpp @@ -4619,7 +4619,7 @@ bool MyAvatar::getFlyingHMDPref() { } // Public interface for targetscale -float MyAvatar::getAvatarScale() { +float MyAvatar::getAvatarScale() const { return getTargetScale(); } @@ -5341,7 +5341,6 @@ void MyAvatar::setIsInSittingState(bool isSitting) { // on reset height we need the count to be more than one in case the user sits and stands up quickly. _isInSittingState.set(isSitting); setResetMode(true); - setCenterOfGravityModelEnabled(!isSitting); setSitStandStateChange(true); } @@ -5679,7 +5678,10 @@ bool MyAvatar::FollowHelper::shouldActivateRotation(const MyAvatar& myAvatar, return glm::dot(-myAvatar.getHeadControllerFacingMovingAverage(), bodyFacing) < FOLLOW_ROTATION_THRESHOLD; } -bool MyAvatar::FollowHelper::shouldActivateHorizontal(const MyAvatar& myAvatar, const glm::mat4& desiredBodyMatrix, const glm::mat4& currentBodyMatrix) const { +// Determine if the horizontal following should activate, for a user who is sitting in the real world. +bool MyAvatar::FollowHelper::shouldActivateHorizontal_userSitting(const MyAvatar& myAvatar, + const glm::mat4& desiredBodyMatrix, + const glm::mat4& currentBodyMatrix) const { if (!myAvatar.isAllowedToLean()) { controller::Pose currentHeadPose = myAvatar.getControllerPoseInAvatarFrame(controller::Action::HEAD); if (!withinBaseOfSupport(currentHeadPose)) { @@ -5711,13 +5713,21 @@ bool MyAvatar::FollowHelper::shouldActivateHorizontal(const MyAvatar& myAvatar, return stepDetected; } -bool MyAvatar::FollowHelper::shouldActivateHorizontalCG(MyAvatar& myAvatar) const { +// Determine if the horizontal following should activate, for a user who is standing in the real world. +// resetModeOut: (out) true if setResetMode(true) should be called if this function returns true. +// currentHeadPoseForWalkingStateOut: (out) the head pose, in the avatar frame, +// that can be tested in order to trigger walking state if this function returns true. +bool MyAvatar::FollowHelper::shouldActivateHorizontal_userStanding( + const MyAvatar& myAvatar, + bool& resetModeOut, + controller::Pose& currentHeadPoseForWalkingStateOut) const { if (myAvatar.getIsInWalkingState()) { return true; } - controller::Pose currentHeadPose = myAvatar.getControllerPoseInAvatarFrame(controller::Action::HEAD); + currentHeadPoseForWalkingStateOut = myAvatar.getControllerPoseInAvatarFrame(controller::Action::HEAD); + controller::Pose& currentHeadPose = currentHeadPoseForWalkingStateOut; bool stepDetected = false; if (!withinBaseOfSupport(currentHeadPose)) { @@ -5750,20 +5760,30 @@ bool MyAvatar::FollowHelper::shouldActivateHorizontalCG(MyAvatar& myAvatar) cons float anatomicalHeadToHipsDistance = glm::length(defaultHeadPosition - defaultHipsPosition); if (!isActive(CharacterController::FollowType::Horizontal) && (!isActive(CharacterController::FollowType::Vertical)) && (glm::length(currentHeadPosition - defaultHipsPosition) > (anatomicalHeadToHipsDistance + (DEFAULT_AVATAR_SPINE_STRETCH_LIMIT * anatomicalHeadToHipsDistance)))) { - myAvatar.setResetMode(true); + resetModeOut = true; stepDetected = true; } } - if (stepDetected) { - if (glm::length(currentHeadPose.velocity) > DEFAULT_AVATAR_WALK_SPEED_THRESHOLD) { - myAvatar.setIsInWalkingState(true); - } - } - return stepDetected; } +// Determine if the horizontal following should activate. +// resetModeOut: (out) true if setResetMode(true) should be called if this function returns true. +// currentHeadPoseForWalkingStateOut: (out) the head pose, in the avatar frame, +// that can be tested in order to trigger walking state if this function returns true. +bool MyAvatar::FollowHelper::shouldActivateHorizontal(const MyAvatar& myAvatar, + const glm::mat4& desiredBodyMatrix, + const glm::mat4& currentBodyMatrix, + bool& resetModeOut, + controller::Pose& currentHeadPoseForWalkingStateOut) const { + if (myAvatar.getIsInSittingState()) { + return shouldActivateHorizontal_userSitting(myAvatar, desiredBodyMatrix, currentBodyMatrix); + } else { + return shouldActivateHorizontal_userStanding(myAvatar, resetModeOut, currentHeadPoseForWalkingStateOut); + } +} + bool MyAvatar::FollowHelper::shouldActivateVertical(const MyAvatar& myAvatar, const glm::mat4& desiredBodyMatrix, const glm::mat4& currentBodyMatrix) const { @@ -5807,7 +5827,7 @@ void MyAvatar::FollowHelper::prePhysicsUpdate(MyAvatar& myAvatar, } } - // Horizontal and rotation recenter + // Lean recenter if ((myAvatar.areFeetTracked() || getForceActivateHorizontal()) && !isActive(CharacterController::FollowType::Horizontal)) { activate(CharacterController::FollowType::Horizontal, myAvatar.areFeetTracked()); @@ -5815,22 +5835,33 @@ void MyAvatar::FollowHelper::prePhysicsUpdate(MyAvatar& myAvatar, } else { if ((myAvatar.getAllowAvatarLeaningPreference() != MyAvatar::AllowAvatarLeaningPreference::AlwaysNoRecenter) && qApp->getCamera().getMode() != CAMERA_MODE_MIRROR) { - if (myAvatar.getCenterOfGravityModelEnabled()) { - if (!isActive(CharacterController::FollowType::Horizontal) && (shouldActivateHorizontalCG(myAvatar) || hasDriveInput)) { - activate(CharacterController::FollowType::Horizontal, false); - if (myAvatar.getEnableStepResetRotation()) { - activate(CharacterController::FollowType::Rotation, false); - myAvatar.setHeadControllerFacingMovingAverage(myAvatar.getHeadControllerFacing()); - } + + bool resetModeOut = false; + controller::Pose currentHeadPoseForWalkingStateOut; + + // True if the user can turn their body while sitting (eg. swivel chair). + // Todo?: We could expose this as an option. + // (Regardless, rotation recentering does kick-in if they turn too far). + constexpr bool USER_CAN_TURN_BODY_WHILE_SITTING = false; + + if (!isActive(CharacterController::FollowType::Horizontal) && + (shouldActivateHorizontal(myAvatar, desiredBodyMatrix, currentBodyMatrix, + resetModeOut, currentHeadPoseForWalkingStateOut) || + hasDriveInput)) { + activate(CharacterController::FollowType::Horizontal, false); + if (myAvatar.getEnableStepResetRotation() && + (USER_CAN_TURN_BODY_WHILE_SITTING || !myAvatar.getIsInSittingState())) { + activate(CharacterController::FollowType::Rotation, false); + myAvatar.setHeadControllerFacingMovingAverage(myAvatar.getHeadControllerFacing()); } - } else { - // center of gravity model is not enabled - if (!isActive(CharacterController::FollowType::Horizontal) && - (shouldActivateHorizontal(myAvatar, desiredBodyMatrix, currentBodyMatrix) || hasDriveInput)) { - activate(CharacterController::FollowType::Horizontal, false); - if (myAvatar.getEnableStepResetRotation() && !myAvatar.getIsInSittingState()) { - activate(CharacterController::FollowType::Rotation, false); - myAvatar.setHeadControllerFacingMovingAverage(myAvatar.getHeadControllerFacing()); + + if (resetModeOut) { + myAvatar.setResetMode(true); + } + + if (currentHeadPoseForWalkingStateOut.isValid()) { + if (glm::length(currentHeadPoseForWalkingStateOut.velocity) > DEFAULT_AVATAR_WALK_SPEED_THRESHOLD) { + myAvatar.setIsInWalkingState(true); } } } diff --git a/interface/src/avatar/MyAvatar.h b/interface/src/avatar/MyAvatar.h index a2a02fa7f8..cde10619ff 100644 --- a/interface/src/avatar/MyAvatar.h +++ b/interface/src/avatar/MyAvatar.h @@ -1634,7 +1634,7 @@ public: * @function MyAvatar.getAvatarScale * @returns {number} The target scale for the avatar, range 0.0051000.0. */ - Q_INVOKABLE float getAvatarScale(); + Q_INVOKABLE float getAvatarScale() const; /**jsdoc * Sets the target scale of the avatar. The target scale is the desired scale of the avatar without any restrictions on @@ -2908,8 +2908,11 @@ private: void decrementTimeRemaining(float dt); bool shouldActivateRotation(const MyAvatar& myAvatar, const glm::mat4& desiredBodyMatrix, const glm::mat4& currentBodyMatrix, bool& shouldSnapOut) const; bool shouldActivateVertical(const MyAvatar& myAvatar, const glm::mat4& desiredBodyMatrix, const glm::mat4& currentBodyMatrix) const; - bool shouldActivateHorizontal(const MyAvatar& myAvatar, const glm::mat4& desiredBodyMatrix, const glm::mat4& currentBodyMatrix) const; - bool shouldActivateHorizontalCG(MyAvatar& myAvatar) const; + bool shouldActivateHorizontal(const MyAvatar& myAvatar, + const glm::mat4& desiredBodyMatrix, + const glm::mat4& currentBodyMatrix, + bool& resetModeOut, + controller::Pose& currentHeadPoseForWalkingStateOut) const; void prePhysicsUpdate(MyAvatar& myAvatar, const glm::mat4& bodySensorMatrix, const glm::mat4& currentBodyMatrix, bool hasDriveInput); glm::mat4 postPhysicsUpdate(MyAvatar& myAvatar, const glm::mat4& currentBodyMatrix); bool getForceActivateRotation() const; @@ -2924,6 +2927,14 @@ private: std::atomic _forceActivateVertical { false }; std::atomic _forceActivateHorizontal { false }; std::atomic _toggleHipsFollowing { true }; + + private: + bool shouldActivateHorizontal_userSitting(const MyAvatar& myAvatar, + const glm::mat4& desiredBodyMatrix, + const glm::mat4& currentBodyMatrix) const; + bool shouldActivateHorizontal_userStanding(const MyAvatar& myAvatar, + bool& resetModeOut, + controller::Pose& currentHeadPoseForWalkingStateOut) const; }; FollowHelper _follow; From c5fe49bc3074b7d2ee02db04af34fdf1a241c357 Mon Sep 17 00:00:00 2001 From: Phil Palmer Date: Wed, 30 Dec 2020 22:38:31 -0500 Subject: [PATCH 061/152] Decouple MyAvatar.centerOfGravityModelEnabled from the user standing state. Engine code no longer controls MyAvatar.centerOfGravityModelEnabled. Maybe we should deprecate it now, since its reason to exist seemed to be only to disable the CG model while the user was sitting, which is now done more explicitly (see below). MyAvatar::FollowHelper: - rename shouldActivateHorizontal to shouldActivateHorizontal_userSitting, now private. - rename shouldActivateHorizontalCG to shouldActivateHorizontal_userStanding, now private. - add new shouldActivateHorizontal that calls one of the above based on the user's sit/stand state. - these functions no longer modify their 'myAvatar' parameter. Add USER_CAN_TURN_BODY_WHILE_SITTING (false), which retains the old rotation behaviour of lean recentering: a lean recenter doesn't rotate the body if the user is sitting (new: unless the feet are tracked). In other words, the lean recentering assumes the user isn't on a swivel chair and keeps the avatar pointing in the same direction. It might be good to expose that as an option. (Regardless, rotation recentering does kick-in if they turn too far). --- interface/src/avatar/MyAvatar.cpp | 92 +++++++++++++++++++++---------- interface/src/avatar/MyAvatar.h | 17 +++++- 2 files changed, 76 insertions(+), 33 deletions(-) diff --git a/interface/src/avatar/MyAvatar.cpp b/interface/src/avatar/MyAvatar.cpp index bcf5192bed..bab57044df 100644 --- a/interface/src/avatar/MyAvatar.cpp +++ b/interface/src/avatar/MyAvatar.cpp @@ -4619,7 +4619,7 @@ bool MyAvatar::getFlyingHMDPref() { } // Public interface for targetscale -float MyAvatar::getAvatarScale() { +float MyAvatar::getAvatarScale() const { return getTargetScale(); } @@ -5341,7 +5341,6 @@ void MyAvatar::setIsInSittingState(bool isSitting) { // on reset height we need the count to be more than one in case the user sits and stands up quickly. _isInSittingState.set(isSitting); setResetMode(true); - setCenterOfGravityModelEnabled(!isSitting); setSitStandStateChange(true); } @@ -5679,7 +5678,10 @@ bool MyAvatar::FollowHelper::shouldActivateRotation(const MyAvatar& myAvatar, return glm::dot(-myAvatar.getHeadControllerFacingMovingAverage(), bodyFacing) < FOLLOW_ROTATION_THRESHOLD; } -bool MyAvatar::FollowHelper::shouldActivateHorizontal(const MyAvatar& myAvatar, const glm::mat4& desiredBodyMatrix, const glm::mat4& currentBodyMatrix) const { +// Determine if the horizontal following should activate, for a user who is sitting in the real world. +bool MyAvatar::FollowHelper::shouldActivateHorizontal_userSitting(const MyAvatar& myAvatar, + const glm::mat4& desiredBodyMatrix, + const glm::mat4& currentBodyMatrix) const { if (!myAvatar.isAllowedToLean()) { controller::Pose currentHeadPose = myAvatar.getControllerPoseInAvatarFrame(controller::Action::HEAD); if (!withinBaseOfSupport(currentHeadPose)) { @@ -5711,13 +5713,19 @@ bool MyAvatar::FollowHelper::shouldActivateHorizontal(const MyAvatar& myAvatar, return stepDetected; } -bool MyAvatar::FollowHelper::shouldActivateHorizontalCG(MyAvatar& myAvatar) const { +// Determine if the horizontal following should activate, for a user who is standing in the real world. +// resetModeOut: (out) true if setResetMode(true) should be called if this function returns true. +// goToWalkingStateOut: (out) true if setIsInWalkingState(true) should be called if this function returns true. +bool MyAvatar::FollowHelper::shouldActivateHorizontal_userStanding( + const MyAvatar& myAvatar, + bool& resetModeOut, + bool& goToWalkingStateOut) const { if (myAvatar.getIsInWalkingState()) { return true; } - controller::Pose currentHeadPose = myAvatar.getControllerPoseInAvatarFrame(controller::Action::HEAD); + controller::Pose currentHeadPose = myAvatar.getControllerPoseInAvatarFrame(controller::Action::HEAD); bool stepDetected = false; if (!withinBaseOfSupport(currentHeadPose)) { @@ -5749,21 +5757,36 @@ bool MyAvatar::FollowHelper::shouldActivateHorizontalCG(MyAvatar& myAvatar) cons glm::vec3 currentHeadPosition = currentHeadPose.getTranslation(); float anatomicalHeadToHipsDistance = glm::length(defaultHeadPosition - defaultHipsPosition); if (!isActive(CharacterController::FollowType::Horizontal) && (!isActive(CharacterController::FollowType::Vertical)) && - (glm::length(currentHeadPosition - defaultHipsPosition) > (anatomicalHeadToHipsDistance + (DEFAULT_AVATAR_SPINE_STRETCH_LIMIT * anatomicalHeadToHipsDistance)))) { - myAvatar.setResetMode(true); + (glm::length(currentHeadPosition - defaultHipsPosition) > + (anatomicalHeadToHipsDistance + (DEFAULT_AVATAR_SPINE_STRETCH_LIMIT * anatomicalHeadToHipsDistance)))) { + resetModeOut = true; stepDetected = true; - } - } - - if (stepDetected) { - if (glm::length(currentHeadPose.velocity) > DEFAULT_AVATAR_WALK_SPEED_THRESHOLD) { - myAvatar.setIsInWalkingState(true); + if (currentHeadPose.isValid()) { + if (glm::length(currentHeadPose.velocity) > DEFAULT_AVATAR_WALK_SPEED_THRESHOLD) { + goToWalkingStateOut = true; + } + } } } return stepDetected; } +// Determine if the horizontal following should activate. +// resetModeOut: (out) true if setResetMode(true) should be called if this function returns true. +// goToWalkingStateOut: (out) true if setIsInWalkingState(true) should be called if this function returns true. +bool MyAvatar::FollowHelper::shouldActivateHorizontal(const MyAvatar& myAvatar, + const glm::mat4& desiredBodyMatrix, + const glm::mat4& currentBodyMatrix, + bool& resetModeOut, + bool& goToWalkingStateOut) const { + if (myAvatar.getIsInSittingState()) { + return shouldActivateHorizontal_userSitting(myAvatar, desiredBodyMatrix, currentBodyMatrix); + } else { + return shouldActivateHorizontal_userStanding(myAvatar, resetModeOut, goToWalkingStateOut); + } +} + bool MyAvatar::FollowHelper::shouldActivateVertical(const MyAvatar& myAvatar, const glm::mat4& desiredBodyMatrix, const glm::mat4& currentBodyMatrix) const { @@ -5807,7 +5830,7 @@ void MyAvatar::FollowHelper::prePhysicsUpdate(MyAvatar& myAvatar, } } - // Horizontal and rotation recenter + // Lean recenter if ((myAvatar.areFeetTracked() || getForceActivateHorizontal()) && !isActive(CharacterController::FollowType::Horizontal)) { activate(CharacterController::FollowType::Horizontal, myAvatar.areFeetTracked()); @@ -5815,23 +5838,32 @@ void MyAvatar::FollowHelper::prePhysicsUpdate(MyAvatar& myAvatar, } else { if ((myAvatar.getAllowAvatarLeaningPreference() != MyAvatar::AllowAvatarLeaningPreference::AlwaysNoRecenter) && qApp->getCamera().getMode() != CAMERA_MODE_MIRROR) { - if (myAvatar.getCenterOfGravityModelEnabled()) { - if (!isActive(CharacterController::FollowType::Horizontal) && (shouldActivateHorizontalCG(myAvatar) || hasDriveInput)) { - activate(CharacterController::FollowType::Horizontal, false); - if (myAvatar.getEnableStepResetRotation()) { - activate(CharacterController::FollowType::Rotation, false); - myAvatar.setHeadControllerFacingMovingAverage(myAvatar.getHeadControllerFacing()); - } + + bool resetModeOut = false; + bool goToWalkingStateOut = false; + + // True if the user can turn their body while sitting (eg. swivel chair). + // Todo?: We could expose this as an option. + // (Regardless, rotation recentering does kick-in if they turn too far). + constexpr bool USER_CAN_TURN_BODY_WHILE_SITTING = false; + + if (!isActive(CharacterController::FollowType::Horizontal) && + (shouldActivateHorizontal(myAvatar, desiredBodyMatrix, currentBodyMatrix, resetModeOut, + goToWalkingStateOut) || + hasDriveInput)) { + activate(CharacterController::FollowType::Horizontal, false); + if (myAvatar.getEnableStepResetRotation() && + (USER_CAN_TURN_BODY_WHILE_SITTING || !myAvatar.getIsInSittingState())) { + activate(CharacterController::FollowType::Rotation, false); + myAvatar.setHeadControllerFacingMovingAverage(myAvatar.getHeadControllerFacing()); } - } else { - // center of gravity model is not enabled - if (!isActive(CharacterController::FollowType::Horizontal) && - (shouldActivateHorizontal(myAvatar, desiredBodyMatrix, currentBodyMatrix) || hasDriveInput)) { - activate(CharacterController::FollowType::Horizontal, false); - if (myAvatar.getEnableStepResetRotation() && !myAvatar.getIsInSittingState()) { - activate(CharacterController::FollowType::Rotation, false); - myAvatar.setHeadControllerFacingMovingAverage(myAvatar.getHeadControllerFacing()); - } + + if (resetModeOut) { + myAvatar.setResetMode(true); + } + + if (goToWalkingStateOut) { + myAvatar.setIsInWalkingState(true); } } } diff --git a/interface/src/avatar/MyAvatar.h b/interface/src/avatar/MyAvatar.h index a2a02fa7f8..a411b1d747 100644 --- a/interface/src/avatar/MyAvatar.h +++ b/interface/src/avatar/MyAvatar.h @@ -1634,7 +1634,7 @@ public: * @function MyAvatar.getAvatarScale * @returns {number} The target scale for the avatar, range 0.0051000.0. */ - Q_INVOKABLE float getAvatarScale(); + Q_INVOKABLE float getAvatarScale() const; /**jsdoc * Sets the target scale of the avatar. The target scale is the desired scale of the avatar without any restrictions on @@ -2908,8 +2908,11 @@ private: void decrementTimeRemaining(float dt); bool shouldActivateRotation(const MyAvatar& myAvatar, const glm::mat4& desiredBodyMatrix, const glm::mat4& currentBodyMatrix, bool& shouldSnapOut) const; bool shouldActivateVertical(const MyAvatar& myAvatar, const glm::mat4& desiredBodyMatrix, const glm::mat4& currentBodyMatrix) const; - bool shouldActivateHorizontal(const MyAvatar& myAvatar, const glm::mat4& desiredBodyMatrix, const glm::mat4& currentBodyMatrix) const; - bool shouldActivateHorizontalCG(MyAvatar& myAvatar) const; + bool shouldActivateHorizontal(const MyAvatar& myAvatar, + const glm::mat4& desiredBodyMatrix, + const glm::mat4& currentBodyMatrix, + bool& resetModeOut, + bool& goToWalkingStateOut) const; void prePhysicsUpdate(MyAvatar& myAvatar, const glm::mat4& bodySensorMatrix, const glm::mat4& currentBodyMatrix, bool hasDriveInput); glm::mat4 postPhysicsUpdate(MyAvatar& myAvatar, const glm::mat4& currentBodyMatrix); bool getForceActivateRotation() const; @@ -2924,6 +2927,14 @@ private: std::atomic _forceActivateVertical { false }; std::atomic _forceActivateHorizontal { false }; std::atomic _toggleHipsFollowing { true }; + + private: + bool shouldActivateHorizontal_userSitting(const MyAvatar& myAvatar, + const glm::mat4& desiredBodyMatrix, + const glm::mat4& currentBodyMatrix) const; + bool shouldActivateHorizontal_userStanding(const MyAvatar& myAvatar, + bool& resetModeOut, + bool& goToWalkingStateOut) const; }; FollowHelper _follow; From 4a0bde415b82cc26adceb56d2078a1c3aca91aae Mon Sep 17 00:00:00 2001 From: Phil Palmer Date: Thu, 31 Dec 2020 00:06:25 -0500 Subject: [PATCH 062/152] Fix an old confusing comment from 952b1122713192f70bb5b1df4fb8ae987da16522 --- interface/src/avatar/MyAvatar.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/interface/src/avatar/MyAvatar.cpp b/interface/src/avatar/MyAvatar.cpp index bab57044df..6f187bdbaf 100644 --- a/interface/src/avatar/MyAvatar.cpp +++ b/interface/src/avatar/MyAvatar.cpp @@ -5337,8 +5337,10 @@ void MyAvatar::setIsInWalkingState(bool isWalking) { // Specify whether the user is sitting or standing in the real world. void MyAvatar::setIsInSittingState(bool isSitting) { + // In updateSitStandState, we only change state if this timer is above a threshold (STANDING_TIMEOUT, SITTING_TIMEOUT). + // This avoids changing state if the user sits and stands up quickly. _sitStandStateTimer = 0.0f; - // on reset height we need the count to be more than one in case the user sits and stands up quickly. + _isInSittingState.set(isSitting); setResetMode(true); setSitStandStateChange(true); From 3cc08022fcb8ed6b4aa7b9b6182df5a0af80e144 Mon Sep 17 00:00:00 2001 From: Phil Palmer Date: Thu, 31 Dec 2020 05:09:06 -0500 Subject: [PATCH 063/152] Leaning and lean recentering now work as intended at any avatar scale. Individually tested each of these scale fixes in third-person view. Simplify withinBaseOfSupport. Change input parameter from float& to float (isWithinThresholdHeightMode). Debug: remove unnecessary Y offset that didn't scale properly with the avatar (drawBaseOfSupport). --- interface/src/avatar/MyAvatar.cpp | 64 +++++++++++++------------------ 1 file changed, 27 insertions(+), 37 deletions(-) diff --git a/interface/src/avatar/MyAvatar.cpp b/interface/src/avatar/MyAvatar.cpp index 6f187bdbaf..2f55d32385 100644 --- a/interface/src/avatar/MyAvatar.cpp +++ b/interface/src/avatar/MyAvatar.cpp @@ -4976,11 +4976,11 @@ glm::vec3 MyAvatar::computeCounterBalance() { glm::vec3 currentCg = (1.0f / totalMass) * sumOfMoments; currentCg.y = 0.0f; // dampening the center of gravity, in effect, limits the value to the perimeter of the base of support - float baseScale = 1.0f; + float baseAndAvatarScale = getAvatarScale(); if (getUserEyeHeight() > 0.0f) { - baseScale = getUserEyeHeight() / DEFAULT_AVATAR_EYE_HEIGHT; + baseAndAvatarScale *= getUserEyeHeight() / DEFAULT_AVATAR_EYE_HEIGHT; } - glm::vec3 desiredCg = dampenCgMovement(currentCg, baseScale); + glm::vec3 desiredCg = dampenCgMovement(currentCg, baseAndAvatarScale); // compute hips position to maintain desiredCg glm::vec3 counterBalancedForHead = (totalMass + DEFAULT_AVATAR_HIPS_MASS) * desiredCg; @@ -4999,9 +4999,10 @@ glm::vec3 MyAvatar::computeCounterBalance() { // this is to be sure that the feet don't lift off the floor. // add 5 centimeters to allow for going up on the toes. - if (counterBalancedCg.y > (tposeHips.y + 0.05f)) { + float maxCounterBalancedCGY = (tposeHips.y + 0.05f) * baseAndAvatarScale; + if (counterBalancedCg.y > maxCounterBalancedCGY) { // if the height is higher than default hips, clamp to default hips - counterBalancedCg.y = tposeHips.y + 0.05f; + counterBalancedCg.y = maxCounterBalancedCGY; } return counterBalancedCg; } @@ -5032,7 +5033,7 @@ static void drawBaseOfSupport(float baseOfSupportScale, float footLocal, glm::ma float clampBack = DEFAULT_AVATAR_SUPPORT_BASE_BACK * baseOfSupportScale; float clampLeft = DEFAULT_AVATAR_SUPPORT_BASE_LEFT * baseOfSupportScale; float clampRight = DEFAULT_AVATAR_SUPPORT_BASE_RIGHT * baseOfSupportScale; - float floor = footLocal + 0.05f; + float floor = footLocal; // transform the base of support corners to world space glm::vec3 frontRight = transformPoint(avatarToWorld, { clampRight, floor, clampFront }); @@ -5063,7 +5064,7 @@ glm::mat4 MyAvatar::deriveBodyUsingCgModel() { glm::mat4 avatarHeadMat = glm::inverse(avatarToWorldMat) * sensorToWorldMat * sensorHeadMat; if (_enableDebugDrawBaseOfSupport) { - float scaleBaseOfSupport = getUserEyeHeight() / DEFAULT_AVATAR_EYE_HEIGHT; + float scaleBaseOfSupport = (getUserEyeHeight() / DEFAULT_AVATAR_EYE_HEIGHT) * getAvatarScale(); glm::vec3 rightFootPositionLocal = getAbsoluteJointTranslationInObjectFrame(_skeletonModel->getRig().indexOfJoint("RightFoot")); drawBaseOfSupport(scaleBaseOfSupport, rightFootPositionLocal.y, avatarToWorldMat); } @@ -5079,26 +5080,16 @@ glm::mat4 MyAvatar::deriveBodyUsingCgModel() { return worldToSensorMat * avatarToWorldMat * avatarHipsMat; } -static bool isInsideLine(const glm::vec3& a, const glm::vec3& b, const glm::vec3& c) { - return (((b.x - a.x) * (c.z - a.z) - (b.z - a.z) * (c.x - a.x)) > 0); -} - -static bool withinBaseOfSupport(const controller::Pose& head) { - float userScale = 1.0f; - - glm::vec3 frontLeft(-DEFAULT_AVATAR_LATERAL_STEPPING_THRESHOLD, 0.0f, -DEFAULT_AVATAR_ANTERIOR_STEPPING_THRESHOLD); - glm::vec3 frontRight(DEFAULT_AVATAR_LATERAL_STEPPING_THRESHOLD, 0.0f, -DEFAULT_AVATAR_ANTERIOR_STEPPING_THRESHOLD); - glm::vec3 backLeft(-DEFAULT_AVATAR_LATERAL_STEPPING_THRESHOLD, 0.0f, DEFAULT_AVATAR_POSTERIOR_STEPPING_THRESHOLD); - glm::vec3 backRight(DEFAULT_AVATAR_LATERAL_STEPPING_THRESHOLD, 0.0f, DEFAULT_AVATAR_POSTERIOR_STEPPING_THRESHOLD); - - bool isWithinSupport = false; - if (head.isValid()) { - bool withinFrontBase = isInsideLine(userScale * frontLeft, userScale * frontRight, head.getTranslation()); - bool withinBackBase = isInsideLine(userScale * backRight, userScale * backLeft, head.getTranslation()); - bool withinLateralBase = (isInsideLine(userScale * frontRight, userScale * backRight, head.getTranslation()) && - isInsideLine(userScale * backLeft, userScale * frontLeft, head.getTranslation())); - isWithinSupport = (withinFrontBase && withinBackBase && withinLateralBase); +static bool withinBaseOfSupport(const controller::Pose& head, const float avatarScale) { + if (!head.isValid()) { + return false; } + + vec3 headPosScaled = head.getTranslation() / avatarScale; + bool isWithinSupport = (headPosScaled.x > -DEFAULT_AVATAR_LATERAL_STEPPING_THRESHOLD) && + (headPosScaled.x < DEFAULT_AVATAR_LATERAL_STEPPING_THRESHOLD) && + (headPosScaled.z > -DEFAULT_AVATAR_ANTERIOR_STEPPING_THRESHOLD) && + (headPosScaled.z < DEFAULT_AVATAR_POSTERIOR_STEPPING_THRESHOLD); return isWithinSupport; } @@ -5114,10 +5105,10 @@ static bool headAngularVelocityBelowThreshold(const controller::Pose& head) { return isBelowThreshold; } -static bool isWithinThresholdHeightMode(const controller::Pose& head, const float& newMode, const float& scale) { +static bool isWithinThresholdHeightMode(const controller::Pose& head, const float newMode, const float avatarScale) { bool isWithinThreshold = true; if (head.isValid()) { - isWithinThreshold = (head.getTranslation().y - newMode) > (DEFAULT_AVATAR_MODE_HEIGHT_STEPPING_THRESHOLD * scale); + isWithinThreshold = head.getTranslation().y > ((DEFAULT_AVATAR_MODE_HEIGHT_STEPPING_THRESHOLD + newMode) * avatarScale); } return isWithinThreshold; } @@ -5198,12 +5189,12 @@ static bool handAngularVelocityBelowThreshold(const controller::Pose& leftHand, (rightHandXZAngularVelocity < DEFAULT_HANDS_ANGULAR_VELOCITY_STEPPING_THRESHOLD)); } -static bool headVelocityGreaterThanThreshold(const controller::Pose& head) { +static bool headVelocityGreaterThanThreshold(const controller::Pose& head, const float avatarScale) { float headVelocityMagnitude = 0.0f; if (head.isValid()) { headVelocityMagnitude = glm::length(head.getVelocity()); } - return headVelocityMagnitude > DEFAULT_HEAD_VELOCITY_STEPPING_THRESHOLD; + return headVelocityMagnitude > (DEFAULT_HEAD_VELOCITY_STEPPING_THRESHOLD * avatarScale); } glm::quat MyAvatar::computeAverageHeadRotation(const controller::Pose& head) { @@ -5686,7 +5677,7 @@ bool MyAvatar::FollowHelper::shouldActivateHorizontal_userSitting(const MyAvatar const glm::mat4& currentBodyMatrix) const { if (!myAvatar.isAllowedToLean()) { controller::Pose currentHeadPose = myAvatar.getControllerPoseInAvatarFrame(controller::Action::HEAD); - if (!withinBaseOfSupport(currentHeadPose)) { + if (!withinBaseOfSupport(currentHeadPose, myAvatar.getAvatarScale())) { return true; } } @@ -5729,23 +5720,22 @@ bool MyAvatar::FollowHelper::shouldActivateHorizontal_userStanding( controller::Pose currentHeadPose = myAvatar.getControllerPoseInAvatarFrame(controller::Action::HEAD); bool stepDetected = false; + float avatarScale = myAvatar.getAvatarScale(); - if (!withinBaseOfSupport(currentHeadPose)) { + if (!withinBaseOfSupport(currentHeadPose, avatarScale)) { if (!myAvatar.isAllowedToLean()) { stepDetected = true; } else { - float myScale = myAvatar.getAvatarScale(); - // get the current readings controller::Pose currentLeftHandPose = myAvatar.getControllerPoseInAvatarFrame(controller::Action::LEFT_HAND); controller::Pose currentRightHandPose = myAvatar.getControllerPoseInAvatarFrame(controller::Action::RIGHT_HAND); controller::Pose currentHeadSensorPose = myAvatar.getControllerPoseInSensorFrame(controller::Action::HEAD); if (headAngularVelocityBelowThreshold(currentHeadPose) && - isWithinThresholdHeightMode(currentHeadSensorPose, myAvatar.getCurrentStandingHeight(), myScale) && + isWithinThresholdHeightMode(currentHeadSensorPose, myAvatar.getCurrentStandingHeight(), avatarScale) && handDirectionMatchesHeadDirection(currentLeftHandPose, currentRightHandPose, currentHeadPose) && handAngularVelocityBelowThreshold(currentLeftHandPose, currentRightHandPose) && - headVelocityGreaterThanThreshold(currentHeadPose) && + headVelocityGreaterThanThreshold(currentHeadPose, avatarScale) && isHeadLevel(currentHeadPose, myAvatar.getAverageHeadRotation())) { // a step is detected stepDetected = true; @@ -5764,7 +5754,7 @@ bool MyAvatar::FollowHelper::shouldActivateHorizontal_userStanding( resetModeOut = true; stepDetected = true; if (currentHeadPose.isValid()) { - if (glm::length(currentHeadPose.velocity) > DEFAULT_AVATAR_WALK_SPEED_THRESHOLD) { + if (glm::length(currentHeadPose.velocity) > (DEFAULT_AVATAR_WALK_SPEED_THRESHOLD * avatarScale)) { goToWalkingStateOut = true; } } From 002271a4cc8d859b79ec65732bc7d64ae9421fe0 Mon Sep 17 00:00:00 2001 From: HifiExperiments Date: Fri, 1 Jan 2021 21:42:51 -0800 Subject: [PATCH 064/152] finishing touches --- .../src/avatars-renderer/SkeletonModel.cpp | 5 +-- .../src/avatars-renderer/SkeletonModel.h | 2 +- .../src/RenderableModelEntityItem.cpp | 5 +-- libraries/render-utils/src/Model.cpp | 33 +++++++++++++------ libraries/render-utils/src/Model.h | 3 +- scripts/system/create/edit.js | 1 + scripts/system/create/qml/NewModelDialog.qml | 8 ++++- 7 files changed, 40 insertions(+), 17 deletions(-) diff --git a/libraries/avatars-renderer/src/avatars-renderer/SkeletonModel.cpp b/libraries/avatars-renderer/src/avatars-renderer/SkeletonModel.cpp index b1c9f7262e..15ff09d13d 100644 --- a/libraries/avatars-renderer/src/avatars-renderer/SkeletonModel.cpp +++ b/libraries/avatars-renderer/src/avatars-renderer/SkeletonModel.cpp @@ -33,6 +33,7 @@ SkeletonModel::SkeletonModel(Avatar* owningAvatar, QObject* parent) : { // SkeletonModels, and by extention Avatars, use Dual Quaternion skinning. _useDualQuaternionSkinning = true; + _forceOffset = true; // Avatars all cast shadow setCanCastShadow(true); @@ -152,11 +153,11 @@ void SkeletonModel::updateAttitude(const glm::quat& orientation) { // Called by Avatar::simulate after it has set the joint states (fullUpdate true if changed), // but just before head has been simulated. -void SkeletonModel::simulate(float deltaTime, bool fullUpdate, bool skeleton) { +void SkeletonModel::simulate(float deltaTime, bool fullUpdate) { updateAttitude(_owningAvatar->getWorldOrientation()); setBlendshapeCoefficients(_owningAvatar->getHead()->getSummedBlendshapeCoefficients()); - Parent::simulate(deltaTime, fullUpdate, true); + Parent::simulate(deltaTime, fullUpdate); if (fullUpdate) { // let rig compute the model offset glm::vec3 registrationPoint; diff --git a/libraries/avatars-renderer/src/avatars-renderer/SkeletonModel.h b/libraries/avatars-renderer/src/avatars-renderer/SkeletonModel.h index b21c414c37..e24d969461 100644 --- a/libraries/avatars-renderer/src/avatars-renderer/SkeletonModel.h +++ b/libraries/avatars-renderer/src/avatars-renderer/SkeletonModel.h @@ -36,7 +36,7 @@ public: void initJointStates() override; - void simulate(float deltaTime, bool fullUpdate = true, bool skeleton = false) override; + void simulate(float deltaTime, bool fullUpdate = true) override; glm::vec3 avoidCrossedEyes(const glm::vec3& lookAt); void updateRig(float deltaTime, glm::mat4 parentTransform) override; void updateAttitude(const glm::quat& orientation); diff --git a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp index f58df45a31..7efc988bb4 100644 --- a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp @@ -152,8 +152,9 @@ void RenderableModelEntityItem::updateModelBounds() { bool needsSimulate = false; if (!overridingModelTransform && (model->getScaleToFitDimensions() != scaledDimensions || - model->getRegistrationPoint() != registrationPoint || - !model->getIsScaledToFit() || _useOriginalPivot == model->getSnapModelToRegistrationPoint())) { + model->getRegistrationPoint() != registrationPoint || + !model->getIsScaledToFit() || _needsToRescaleModel || + _useOriginalPivot == model->getSnapModelToRegistrationPoint())) { // The machinery for updateModelBounds will give existing models the opportunity to fix their // translation/rotation/scale/registration. The first two are straightforward, but the latter two // have guards to make sure they don't happen after they've already been set. Here we reset those guards. diff --git a/libraries/render-utils/src/Model.cpp b/libraries/render-utils/src/Model.cpp index 0194b838cc..a58bfd6f5b 100644 --- a/libraries/render-utils/src/Model.cpp +++ b/libraries/render-utils/src/Model.cpp @@ -344,7 +344,8 @@ bool Model::findRayIntersectionAgainstSubMeshes(const glm::vec3& origin, const g } // extents is the entity relative, scaled, centered extents of the entity - glm::mat4 modelToWorldMatrix = createMatFromQuatAndPos(_rotation, _translation); + glm::mat4 transRot = createMatFromQuatAndPos(_rotation, _translation); + glm::mat4 modelToWorldMatrix = transRot; if (!_snapModelToRegistrationPoint) { modelToWorldMatrix = modelToWorldMatrix * glm::translate(getOriginalOffset()); } @@ -362,9 +363,6 @@ bool Model::findRayIntersectionAgainstSubMeshes(const glm::vec3& origin, const g // we can use the AABox's intersection by mapping our origin and direction into the model frame // and testing intersection there. if (modelFrameBox.findRayIntersection(modelFrameOrigin, modelFrameDirection, 1.0f / modelFrameDirection, distance, face, surfaceNormal)) { - if (getURL().toString().toLower().contains("sink")) { - qDebug() << "boop" << modelFrameBox; - } QMutexLocker locker(&_mutex); float bestDistance = FLT_MAX; @@ -382,7 +380,14 @@ bool Model::findRayIntersectionAgainstSubMeshes(const glm::vec3& origin, const g calculateTriangleSets(hfmModel); } - glm::mat4 meshToWorldMatrix = createMatFromQuatAndPos(_rotation, _translation) * (glm::scale(_scale) * glm::translate(_offset)); + glm::mat4 meshToWorldMatrix = transRot; + if (_snapModelToRegistrationPoint || _forceOffset) { + meshToWorldMatrix = meshToWorldMatrix * (glm::scale(_scale) * glm::translate(_offset)); + } else { + Extents unscaledExtents = getUnscaledMeshExtents(); + glm::vec3 unscaledDimensions = unscaledExtents.maximum - unscaledExtents.minimum; + meshToWorldMatrix = meshToWorldMatrix * (glm::scale(_scale) * glm::translate(unscaledDimensions * (0.5f - _registrationPoint))); + } glm::mat4 worldToMeshMatrix = glm::inverse(meshToWorldMatrix); glm::vec3 meshFrameOrigin = glm::vec3(worldToMeshMatrix * glm::vec4(origin, 1.0f)); @@ -504,7 +509,8 @@ bool Model::findParabolaIntersectionAgainstSubMeshes(const glm::vec3& origin, co } // extents is the entity relative, scaled, centered extents of the entity - glm::mat4 modelToWorldMatrix = createMatFromQuatAndPos(_rotation, _translation); + glm::mat4 transRot = createMatFromQuatAndPos(_rotation, _translation); + glm::mat4 modelToWorldMatrix = transRot; if (!_snapModelToRegistrationPoint) { modelToWorldMatrix = modelToWorldMatrix * glm::translate(getOriginalOffset()); } @@ -540,7 +546,14 @@ bool Model::findParabolaIntersectionAgainstSubMeshes(const glm::vec3& origin, co calculateTriangleSets(hfmModel); } - glm::mat4 meshToWorldMatrix = createMatFromQuatAndPos(_rotation, _translation) * (glm::scale(_scale) * glm::translate(_offset)); + glm::mat4 meshToWorldMatrix = transRot; + if (_snapModelToRegistrationPoint || _forceOffset) { + meshToWorldMatrix = meshToWorldMatrix * (glm::scale(_scale) * glm::translate(_offset)); + } else { + Extents unscaledExtents = getUnscaledMeshExtents(); + glm::vec3 unscaledDimensions = unscaledExtents.maximum - unscaledExtents.minimum; + meshToWorldMatrix = meshToWorldMatrix * (glm::scale(_scale) * glm::translate(unscaledDimensions * (0.5f - _registrationPoint))); + } glm::mat4 worldToMeshMatrix = glm::inverse(meshToWorldMatrix); glm::vec3 meshFrameOrigin = glm::vec3(worldToMeshMatrix * glm::vec4(origin, 1.0f)); @@ -1420,7 +1433,7 @@ void Model::snapToRegistrationPoint() { glm::vec3 Model::getOriginalOffset() const { Extents modelMeshExtents = getUnscaledMeshExtents(); glm::vec3 dimensions = (modelMeshExtents.maximum - modelMeshExtents.minimum); - glm::vec3 offset = modelMeshExtents.minimum + (dimensions * _registrationPoint); + glm::vec3 offset = modelMeshExtents.minimum + (0.5f * dimensions); glm::mat4 transform = glm::scale(_scale) * glm::translate(offset); return transform[3]; } @@ -1430,7 +1443,7 @@ void Model::setUseDualQuaternionSkinning(bool value) { _useDualQuaternionSkinning = value; } -void Model::simulate(float deltaTime, bool fullUpdate, bool skeleton) { +void Model::simulate(float deltaTime, bool fullUpdate) { DETAILED_PROFILE_RANGE(simulation_detail, __FUNCTION__); fullUpdate = updateGeometry() || fullUpdate || (_scaleToFit && !_scaledToFit) || (_snapModelToRegistrationPoint && !_snappedToRegistrationPoint) || _needsTransformUpdate; @@ -1446,7 +1459,7 @@ void Model::simulate(float deltaTime, bool fullUpdate, bool skeleton) { snapToRegistrationPoint(); } // update the world space transforms for all joints - glm::mat4 parentTransform = glm::scale(_scale) * ((_snapModelToRegistrationPoint || skeleton) ? + glm::mat4 parentTransform = glm::scale(_scale) * ((_snapModelToRegistrationPoint || _forceOffset) ? glm::translate(_offset) : glm::translate(getNaturalDimensions() * (0.5f - _registrationPoint))); updateRig(deltaTime, parentTransform); _needsTransformUpdate = false; diff --git a/libraries/render-utils/src/Model.h b/libraries/render-utils/src/Model.h index 800bfc7e15..aa5df1a3dd 100644 --- a/libraries/render-utils/src/Model.h +++ b/libraries/render-utils/src/Model.h @@ -169,7 +169,7 @@ public: bool getSnapModelToRegistrationPoint() { return _snapModelToRegistrationPoint; } bool getSnappedToRegistrationPoint() { return _snappedToRegistrationPoint; } - virtual void simulate(float deltaTime, bool fullUpdate = true, bool skeleton = false); + virtual void simulate(float deltaTime, bool fullUpdate = true); virtual void updateClusterMatrices(); virtual void updateBlendshapes(); @@ -414,6 +414,7 @@ protected: bool _snappedToRegistrationPoint; /// are we currently snapped to a registration point glm::vec3 _registrationPoint { glm::vec3(0.5f) }; /// the point in model space our center is snapped to bool _needsTransformUpdate { false }; + bool _forceOffset { false }; std::vector _meshStates; diff --git a/scripts/system/create/edit.js b/scripts/system/create/edit.js index fc3d4fc10f..96dbf4637d 100644 --- a/scripts/system/create/edit.js +++ b/scripts/system/create/edit.js @@ -737,6 +737,7 @@ var toolBar = (function () { grabbable: result.grabbable }, dynamic: dynamic, + useOriginalPivot: result.useOriginalPivot }); } } diff --git a/scripts/system/create/qml/NewModelDialog.qml b/scripts/system/create/qml/NewModelDialog.qml index 758706a79b..807ab1cd56 100644 --- a/scripts/system/create/qml/NewModelDialog.qml +++ b/scripts/system/create/qml/NewModelDialog.qml @@ -120,6 +120,11 @@ Rectangle { height: 600 spacing: 10 + CheckBox { + id: useOriginalPivot + text: qsTr("Use Original Pivot") + } + CheckBox { id: grabbable text: qsTr("Grabbable") @@ -219,7 +224,8 @@ Rectangle { url: modelURL.text, dynamic: dynamic.checked, collisionShapeIndex: collisionType.currentIndex, - grabbable: grabbable.checked + grabbable: grabbable.checked, + useOriginalPivot: useOriginalPivot.checked } }); } From 20e0c241634832cb159f49edeab0d4a707466d53 Mon Sep 17 00:00:00 2001 From: HifiExperiments Date: Fri, 1 Jan 2021 23:42:06 -0800 Subject: [PATCH 065/152] cleanup + create --- .../src/RenderableModelEntityItem.cpp | 6 +++--- libraries/entities/src/EntityItem.cpp | 8 ++++---- libraries/hfm/src/hfm/HFM.cpp | 2 +- libraries/render-utils/src/Model.cpp | 13 +++---------- libraries/render-utils/src/Model.h | 1 - .../create/assets/data/createAppTooltips.json | 3 +++ .../entityProperties/html/js/entityProperties.js | 5 +++++ 7 files changed, 19 insertions(+), 19 deletions(-) diff --git a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp index 7efc988bb4..f7baa4e894 100644 --- a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp @@ -227,12 +227,12 @@ EntityItemProperties RenderableModelEntityItem::getProperties(const EntityProper glm::vec3 RenderableModelEntityItem::getPivot() const { auto model = getModel(); - auto raycastOffset = EntityItem::getPivot(); + auto pivot = EntityItem::getPivot(); if (!model || !model->isLoaded() || !_useOriginalPivot) { - return raycastOffset; + return pivot; } - return raycastOffset + model->getOriginalOffset(); + return pivot + model->getOriginalOffset(); } bool RenderableModelEntityItem::supportsDetailedIntersection() const { diff --git a/libraries/entities/src/EntityItem.cpp b/libraries/entities/src/EntityItem.cpp index 48490aeb51..3996920572 100644 --- a/libraries/entities/src/EntityItem.cpp +++ b/libraries/entities/src/EntityItem.cpp @@ -1628,16 +1628,16 @@ AACube EntityItem::getMaximumAACube(bool& success) const { _recalcMaxAACube = false; // we want to compute the furthestExtent that an entity can extend out from its "position" // to do this we compute the max of these two vec3s: registration and 1-registration - // and then scale by dimensions - glm::vec3 offset = getScaledDimensions() * getRegistrationPoint() + getPivot(); - glm::vec3 maxExtents = glm::max(offset, glm::vec3(1.0f) - offset); + // and then scale by dimensions and add the absolute value of the pivot + glm::vec3 registrationPoint = getRegistrationPoint(); + glm::vec3 maxExtents = getScaledDimensions() * glm::max(registrationPoint, glm::vec3(1.0f) - registrationPoint); // there exists a sphere that contains maxExtents for all rotations float radius = glm::length(maxExtents); // put a cube around the sphere // TODO? replace _maxAACube with _boundingSphereRadius - glm::vec3 minimumCorner = centerOfRotation - glm::vec3(radius, radius, radius); + glm::vec3 minimumCorner = (centerOfRotation + getPivot()) - glm::vec3(radius, radius, radius); _maxAACube = AACube(minimumCorner, radius * 2.0f); } } else { diff --git a/libraries/hfm/src/hfm/HFM.cpp b/libraries/hfm/src/hfm/HFM.cpp index 8fb0720c0d..dd13d6d4f3 100644 --- a/libraries/hfm/src/hfm/HFM.cpp +++ b/libraries/hfm/src/hfm/HFM.cpp @@ -104,7 +104,7 @@ bool HFMModel::convexHullContains(const glm::vec3& point) const { auto checkEachPrimitive = [=](HFMMesh& mesh, QVector indices, int primitiveSize) -> bool { // Check whether the point is "behind" all the primitives. // But first must transform from model-frame into mesh-frame - glm::vec3 transformedPoint = glm::vec3(glm::inverse(mesh.modelTransform) * glm::vec4(point, 1.0f)); + glm::vec3 transformedPoint = glm::vec3(glm::inverse(offset * mesh.modelTransform) * glm::vec4(point, 1.0f)); int verticesSize = mesh.vertices.size(); for (int j = 0; j < indices.size() - 2; // -2 in case the vertices aren't the right size -- we access j + 2 below diff --git a/libraries/render-utils/src/Model.cpp b/libraries/render-utils/src/Model.cpp index a58bfd6f5b..44dbc00f70 100644 --- a/libraries/render-utils/src/Model.cpp +++ b/libraries/render-utils/src/Model.cpp @@ -151,7 +151,6 @@ void Model::setOffset(const glm::vec3& offset) { // if someone manually sets our offset, then we are no longer snapped to center _snapModelToRegistrationPoint = false; _snappedToRegistrationPoint = false; - _needsTransformUpdate = true; } void Model::calculateTextureInfo() { @@ -384,9 +383,7 @@ bool Model::findRayIntersectionAgainstSubMeshes(const glm::vec3& origin, const g if (_snapModelToRegistrationPoint || _forceOffset) { meshToWorldMatrix = meshToWorldMatrix * (glm::scale(_scale) * glm::translate(_offset)); } else { - Extents unscaledExtents = getUnscaledMeshExtents(); - glm::vec3 unscaledDimensions = unscaledExtents.maximum - unscaledExtents.minimum; - meshToWorldMatrix = meshToWorldMatrix * (glm::scale(_scale) * glm::translate(unscaledDimensions * (0.5f - _registrationPoint))); + meshToWorldMatrix = meshToWorldMatrix * (glm::scale(_scale) * glm::translate(getNaturalDimensions() * (0.5f - _registrationPoint))); } glm::mat4 worldToMeshMatrix = glm::inverse(meshToWorldMatrix); @@ -550,9 +547,7 @@ bool Model::findParabolaIntersectionAgainstSubMeshes(const glm::vec3& origin, co if (_snapModelToRegistrationPoint || _forceOffset) { meshToWorldMatrix = meshToWorldMatrix * (glm::scale(_scale) * glm::translate(_offset)); } else { - Extents unscaledExtents = getUnscaledMeshExtents(); - glm::vec3 unscaledDimensions = unscaledExtents.maximum - unscaledExtents.minimum; - meshToWorldMatrix = meshToWorldMatrix * (glm::scale(_scale) * glm::translate(unscaledDimensions * (0.5f - _registrationPoint))); + meshToWorldMatrix = meshToWorldMatrix * (glm::scale(_scale) * glm::translate(getNaturalDimensions() * (0.5f - _registrationPoint))); } glm::mat4 worldToMeshMatrix = glm::inverse(meshToWorldMatrix); @@ -1418,7 +1413,6 @@ void Model::setSnapModelToRegistrationPoint(bool snapModelToRegistrationPoint, c _snapModelToRegistrationPoint = snapModelToRegistrationPoint; _registrationPoint = clampedRegistrationPoint; _snappedToRegistrationPoint = false; // force re-centering - _needsTransformUpdate = true; } } @@ -1446,7 +1440,7 @@ void Model::setUseDualQuaternionSkinning(bool value) { void Model::simulate(float deltaTime, bool fullUpdate) { DETAILED_PROFILE_RANGE(simulation_detail, __FUNCTION__); fullUpdate = updateGeometry() || fullUpdate || (_scaleToFit && !_scaledToFit) - || (_snapModelToRegistrationPoint && !_snappedToRegistrationPoint) || _needsTransformUpdate; + || (_snapModelToRegistrationPoint && !_snappedToRegistrationPoint); if (isLoaded() && fullUpdate) { onInvalidate(); @@ -1462,7 +1456,6 @@ void Model::simulate(float deltaTime, bool fullUpdate) { glm::mat4 parentTransform = glm::scale(_scale) * ((_snapModelToRegistrationPoint || _forceOffset) ? glm::translate(_offset) : glm::translate(getNaturalDimensions() * (0.5f - _registrationPoint))); updateRig(deltaTime, parentTransform); - _needsTransformUpdate = false; } } diff --git a/libraries/render-utils/src/Model.h b/libraries/render-utils/src/Model.h index aa5df1a3dd..9bf828f9fb 100644 --- a/libraries/render-utils/src/Model.h +++ b/libraries/render-utils/src/Model.h @@ -413,7 +413,6 @@ protected: bool _snapModelToRegistrationPoint; /// is the model's offset automatically adjusted to a registration point in model space bool _snappedToRegistrationPoint; /// are we currently snapped to a registration point glm::vec3 _registrationPoint { glm::vec3(0.5f) }; /// the point in model space our center is snapped to - bool _needsTransformUpdate { false }; bool _forceOffset { false }; std::vector _meshStates; diff --git a/scripts/system/create/assets/data/createAppTooltips.json b/scripts/system/create/assets/data/createAppTooltips.json index 478793ab78..7c70a8dea8 100644 --- a/scripts/system/create/assets/data/createAppTooltips.json +++ b/scripts/system/create/assets/data/createAppTooltips.json @@ -601,6 +601,9 @@ "groupCulled": { "tooltip": "If false, individual pieces of the entity may be culled by the render engine. If true, either the entire entity will be culled, or it won't at all." }, + "useOriginalPivot": { + "tooltip": "If false, the model will be centered based on its content, ignoring any offset in the model itself. If true, the model will respect its original offset." + }, "webColor": { "tooltip": "The tint of the web entity." }, diff --git a/scripts/system/create/entityProperties/html/js/entityProperties.js b/scripts/system/create/entityProperties/html/js/entityProperties.js index f3f92a887e..592808bd15 100644 --- a/scripts/system/create/entityProperties/html/js/entityProperties.js +++ b/scripts/system/create/entityProperties/html/js/entityProperties.js @@ -614,6 +614,11 @@ const GROUPS = [ propertyID: "compoundShapeURL", hideIfCertified: true, }, + { + label: "Use Original Pivot", + type: "bool", + propertyID: "useOriginalPivot", + }, { label: "Animation", type: "string", From 5dc45e895cda958d95525414e5247ecd61561c7d Mon Sep 17 00:00:00 2001 From: HifiExperiments Date: Sat, 2 Jan 2021 19:18:54 -0800 Subject: [PATCH 066/152] more fixes and create checkbox defaults to checked --- libraries/entities-renderer/src/RenderableModelEntityItem.cpp | 2 +- libraries/entities/src/EntityItem.cpp | 2 +- scripts/system/create/qml/NewModelDialog.qml | 1 + 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp index 1ac34a2170..3f72527d72 100644 --- a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp @@ -167,7 +167,6 @@ void RenderableModelEntityItem::updateModelBounds() { model->setSnapModelToRegistrationPoint(!_useOriginalPivot, registrationPoint); updateRenderItems = true; needsSimulate = true; - locationChanged(); _needsToRescaleModel = false; } @@ -183,6 +182,7 @@ void RenderableModelEntityItem::updateModelBounds() { // NOTE: on isAnimatingSomething() we need to call Model::simulate() which calls Rig::updateRig() // TODO: there is opportunity to further optimize the isAnimatingSomething() case. model->simulate(0.0f); + locationChanged(); _needsInitialSimulation = false; _needsJointSimulation = false; updateRenderItems = true; diff --git a/libraries/entities/src/EntityItem.cpp b/libraries/entities/src/EntityItem.cpp index 3996920572..f7bd0266fa 100644 --- a/libraries/entities/src/EntityItem.cpp +++ b/libraries/entities/src/EntityItem.cpp @@ -1637,7 +1637,7 @@ AACube EntityItem::getMaximumAACube(bool& success) const { // put a cube around the sphere // TODO? replace _maxAACube with _boundingSphereRadius - glm::vec3 minimumCorner = (centerOfRotation + getPivot()) - glm::vec3(radius, radius, radius); + glm::vec3 minimumCorner = (centerOfRotation + getWorldOrientation() * getPivot()) - glm::vec3(radius, radius, radius); _maxAACube = AACube(minimumCorner, radius * 2.0f); } } else { diff --git a/scripts/system/create/qml/NewModelDialog.qml b/scripts/system/create/qml/NewModelDialog.qml index 807ab1cd56..c03e7c1c35 100644 --- a/scripts/system/create/qml/NewModelDialog.qml +++ b/scripts/system/create/qml/NewModelDialog.qml @@ -123,6 +123,7 @@ Rectangle { CheckBox { id: useOriginalPivot text: qsTr("Use Original Pivot") + checked: true } CheckBox { From 90799e10da2ff09add13c9cc3f9e4d91713b1750 Mon Sep 17 00:00:00 2001 From: Phil Palmer Date: Sun, 3 Jan 2021 16:31:51 -0500 Subject: [PATCH 067/152] Fix z-write enabled for transparent draws. Fix z-write being enabled for transparencies in GeometryCache::getSimplePipeline and Procedural::Procedural (fixes https://github.com/vircadia/vircadia/issues/224). Z-write is controlled by the 'writeMask' parameter of gpu::State::setDepthTest. --- libraries/procedural/src/procedural/Procedural.cpp | 2 +- libraries/render-utils/src/GeometryCache.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/libraries/procedural/src/procedural/Procedural.cpp b/libraries/procedural/src/procedural/Procedural.cpp index 88c111f8fd..66dde1ca56 100644 --- a/libraries/procedural/src/procedural/Procedural.cpp +++ b/libraries/procedural/src/procedural/Procedural.cpp @@ -125,7 +125,7 @@ Procedural::Procedural() { opaqueStencil(_opaqueState); _transparentState->setCullMode(gpu::State::CULL_NONE); - _transparentState->setDepthTest(true, true, gpu::LESS_EQUAL); + _transparentState->setDepthTest(true, false, gpu::LESS_EQUAL); _transparentState->setBlendFunction(true, gpu::State::SRC_ALPHA, gpu::State::BLEND_OP_ADD, gpu::State::INV_SRC_ALPHA, gpu::State::FACTOR_ALPHA, gpu::State::BLEND_OP_ADD, gpu::State::ONE); diff --git a/libraries/render-utils/src/GeometryCache.cpp b/libraries/render-utils/src/GeometryCache.cpp index ea66ac19ec..68daba92e3 100644 --- a/libraries/render-utils/src/GeometryCache.cpp +++ b/libraries/render-utils/src/GeometryCache.cpp @@ -2207,7 +2207,7 @@ gpu::PipelinePointer GeometryCache::getSimplePipeline(bool textured, bool transp } else { state->setCullMode(gpu::State::CULL_BACK); } - state->setDepthTest(true, true, gpu::LESS_EQUAL); + state->setDepthTest(true, !config.isTransparent(), gpu::LESS_EQUAL); if (config.hasDepthBias()) { state->setDepthBias(1.0f); state->setDepthBiasSlopeScale(1.0f); From 4f71cb594538901eaeb27fc55773c6a979c41ac4 Mon Sep 17 00:00:00 2001 From: Phil Palmer Date: Sun, 3 Jan 2021 22:59:31 -0500 Subject: [PATCH 068/152] Disable z-write when drawing web entities with alpha < 1. --- libraries/render-utils/src/GeometryCache.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/render-utils/src/GeometryCache.cpp b/libraries/render-utils/src/GeometryCache.cpp index 68daba92e3..8a483a0352 100644 --- a/libraries/render-utils/src/GeometryCache.cpp +++ b/libraries/render-utils/src/GeometryCache.cpp @@ -2135,7 +2135,7 @@ gpu::PipelinePointer GeometryCache::getWebBrowserProgram(bool transparent, bool auto pipeline = (transparent || forward) ? web_browser_forward : web_browser; gpu::StatePointer state = gpu::StatePointer(new gpu::State()); - state->setDepthTest(true, true, gpu::LESS_EQUAL); + state->setDepthTest(true, !transparent, gpu::LESS_EQUAL); // FIXME: do we need a testMaskDrawNoAA? PrepareStencil::testMaskDrawShapeNoAA(*state); state->setBlendFunction(transparent, From 6e0bad814e0e513a4b363059d4cf43e609e2627a Mon Sep 17 00:00:00 2001 From: HifiExperiments Date: Sun, 3 Jan 2021 20:33:08 -0800 Subject: [PATCH 069/152] working on billboard mode for all entity types --- .../src/RenderableEntityItem.cpp | 40 +++++++++++-------- .../src/RenderableEntityItem.h | 4 +- .../src/RenderableGizmoEntityItem.cpp | 9 +++-- .../src/RenderableGridEntityItem.cpp | 4 +- .../src/RenderableImageEntityItem.cpp | 12 ------ .../src/RenderableImageEntityItem.h | 2 - .../src/RenderableLineEntityItem.cpp | 1 + .../src/RenderableMaterialEntityItem.cpp | 11 ++--- .../RenderableParticleEffectEntityItem.cpp | 2 + .../src/RenderablePolyLineEntityItem.cpp | 4 +- .../src/RenderableShapeEntityItem.cpp | 15 ++++--- .../src/RenderableTextEntityItem.cpp | 37 +++++------------ .../src/RenderableTextEntityItem.h | 2 - .../src/RenderableWebEntityItem.cpp | 16 +------- .../src/RenderableWebEntityItem.h | 2 - libraries/entities/src/EntityItem.cpp | 30 +++++++++++++- libraries/entities/src/EntityItem.h | 7 +++- .../entities/src/EntityItemProperties.cpp | 32 ++++++--------- libraries/entities/src/EntityItemProperties.h | 2 +- libraries/entities/src/EntityPropertyFlags.h | 2 +- libraries/entities/src/GizmoEntityItem.cpp | 3 ++ libraries/entities/src/ImageEntityItem.cpp | 37 +++-------------- libraries/entities/src/ImageEntityItem.h | 5 --- libraries/entities/src/TextEntityItem.cpp | 37 +++-------------- libraries/entities/src/TextEntityItem.h | 6 --- libraries/entities/src/WebEntityItem.cpp | 35 +++------------- libraries/entities/src/WebEntityItem.h | 5 --- libraries/networking/src/udt/PacketHeaders.h | 1 + 28 files changed, 134 insertions(+), 229 deletions(-) diff --git a/libraries/entities-renderer/src/RenderableEntityItem.cpp b/libraries/entities-renderer/src/RenderableEntityItem.cpp index b116423b75..fdb971e7a3 100644 --- a/libraries/entities-renderer/src/RenderableEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableEntityItem.cpp @@ -138,7 +138,14 @@ EntityRenderer::~EntityRenderer() {} // Item::Bound EntityRenderer::getBound() { - return _bound; + auto bound = _bound; + if (_billboardMode != BillboardMode::NONE) { + glm::vec3 dimensions = bound.getScale(); + float max = glm::max(dimensions.x, glm::max(dimensions.y, dimensions.z)); + const float SQRT_2 = 1.41421356237f; + bound.setScaleStayCentered(glm::vec3(SQRT_2 * max)); + } + return bound; } ShapeKey EntityRenderer::getShapeKey() { @@ -198,12 +205,9 @@ uint32_t EntityRenderer::metaFetchMetaSubItems(ItemIDs& subItems) const { } bool EntityRenderer::passesZoneOcclusionTest(const std::unordered_set& containingZones) const { - auto renderWithZones = resultWithReadLock>([&] { - return _renderWithZones; - }); - if (!renderWithZones.isEmpty()) { + if (!_renderWithZones.isEmpty()) { if (!containingZones.empty()) { - for (auto renderWithZone : renderWithZones) { + for (auto renderWithZone : _renderWithZones) { if (containingZones.find(renderWithZone) != containingZones.end()) { return true; } @@ -429,20 +433,24 @@ void EntityRenderer::doRenderUpdateSynchronous(const ScenePointer& scene, Transa _moving = entity->isMovingRelativeToParent(); _visible = entity->getVisible(); - setIsVisibleInSecondaryCamera(entity->isVisibleInSecondaryCamera()); - setRenderLayer(entity->getRenderLayer()); - _primitiveMode = entity->getPrimitiveMode(); - _canCastShadow = entity->getCanCastShadow(); - setCullWithParent(entity->getCullWithParent()); - _cauterized = entity->getCauterized(); - if (entity->needsZoneOcclusionUpdate()) { - entity->resetNeedsZoneOcclusionUpdate(); - _renderWithZones = entity->getRenderWithZones(); - } entity->setNeedsRenderUpdate(false); }); } +void EntityRenderer::doRenderUpdateAsynchronous(const EntityItemPointer& entity) { + setIsVisibleInSecondaryCamera(entity->isVisibleInSecondaryCamera()); + setRenderLayer(entity->getRenderLayer()); + _billboardMode = entity->getBillboardMode(); + _primitiveMode = entity->getPrimitiveMode(); + _canCastShadow = entity->getCanCastShadow(); + setCullWithParent(entity->getCullWithParent()); + _cauterized = entity->getCauterized(); + if (entity->needsZoneOcclusionUpdate()) { + entity->resetNeedsZoneOcclusionUpdate(); + _renderWithZones = entity->getRenderWithZones(); + } +} + void EntityRenderer::onAddToScene(const EntityItemPointer& entity) { QObject::connect(this, &EntityRenderer::requestRenderUpdate, this, [this] { auto renderer = DependencyManager::get(); diff --git a/libraries/entities-renderer/src/RenderableEntityItem.h b/libraries/entities-renderer/src/RenderableEntityItem.h index ca3e024338..4afcd6e231 100644 --- a/libraries/entities-renderer/src/RenderableEntityItem.h +++ b/libraries/entities-renderer/src/RenderableEntityItem.h @@ -95,8 +95,7 @@ protected: // Will be called by the lambda posted to the scene in updateInScene. // This function will execute on the rendering thread, so you cannot use network caches to fetch // data in this method if using multi-threaded rendering - - virtual void doRenderUpdateAsynchronous(const EntityItemPointer& entity) { } + virtual void doRenderUpdateAsynchronous(const EntityItemPointer& entity); // Called by the `render` method after `needsRenderUpdate` virtual void doRender(RenderArgs* args) = 0; @@ -135,6 +134,7 @@ protected: RenderLayer _renderLayer { RenderLayer::WORLD }; PrimitiveMode _primitiveMode { PrimitiveMode::SOLID }; QVector _renderWithZones; + BillboardMode _billboardMode; bool _cauterized { false }; bool _moving { false }; Transform _renderTransform; diff --git a/libraries/entities-renderer/src/RenderableGizmoEntityItem.cpp b/libraries/entities-renderer/src/RenderableGizmoEntityItem.cpp index 6928454eb0..caf5bde729 100644 --- a/libraries/entities-renderer/src/RenderableGizmoEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableGizmoEntityItem.cpp @@ -242,18 +242,19 @@ void GizmoEntityRenderer::doRender(RenderArgs* args) { bool hasTickMarks = _ringProperties.getHasTickMarks(); glm::vec4 tickProperties = glm::vec4(_ringProperties.getMajorTickMarksAngle(), _ringProperties.getMajorTickMarksLength(), _ringProperties.getMinorTickMarksAngle(), _ringProperties.getMinorTickMarksLength()); - bool forward; - bool wireframe; + bool transparent; withReadLock([&] { transform = _renderTransform; transparent = isTransparent(); - wireframe = render::ShapeKey(args->_globalShapeKey).isWireframe() || _primitiveMode == PrimitiveMode::LINES; - forward = _renderLayer != RenderLayer::WORLD || args->_renderMethod == Args::RenderMethod::FORWARD; }); + bool wireframe = render::ShapeKey(args->_globalShapeKey).isWireframe() || _primitiveMode == PrimitiveMode::LINES; + bool forward = _renderLayer != RenderLayer::WORLD || args->_renderMethod == Args::RenderMethod::FORWARD; + geometryCache->bindSimpleProgram(batch, false, transparent, wireframe, true, true, forward, graphics::MaterialKey::CULL_NONE); + transform.setRotation(EntityItem::getBillboardRotation(transform.getTranslation(), transform.getRotation(), _billboardMode, args->getViewFrustum().getPosition())); batch.setModelTransform(transform); // Background circle diff --git a/libraries/entities-renderer/src/RenderableGridEntityItem.cpp b/libraries/entities-renderer/src/RenderableGridEntityItem.cpp index 35702c63e4..87b916e41b 100644 --- a/libraries/entities-renderer/src/RenderableGridEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableGridEntityItem.cpp @@ -77,17 +77,17 @@ void GridEntityRenderer::doRender(RenderArgs* args) { color = EntityRenderer::calculatePulseColor(color, _pulseProperties, _created); glm::vec3 dimensions; Transform renderTransform; - bool forward; withReadLock([&] { dimensions = _dimensions; renderTransform = _renderTransform; - forward = _renderLayer != RenderLayer::WORLD || args->_renderMethod == Args::RenderMethod::FORWARD; }); if (!_visible || color.a == 0.0f) { return; } + bool forward = _renderLayer != RenderLayer::WORLD || args->_renderMethod == Args::RenderMethod::FORWARD; + auto batch = args->_batch; Transform transform; diff --git a/libraries/entities-renderer/src/RenderableImageEntityItem.cpp b/libraries/entities-renderer/src/RenderableImageEntityItem.cpp index b9b30ea9c7..878fcad6e4 100644 --- a/libraries/entities-renderer/src/RenderableImageEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableImageEntityItem.cpp @@ -58,7 +58,6 @@ void ImageEntityRenderer::doRenderUpdateAsynchronousTyped(const TypedEntityPoint _color = entity->getColor(); _alpha = entity->getAlpha(); _pulseProperties = entity->getPulseProperties(); - _billboardMode = entity->getBillboardMode(); if (!_textureIsLoaded) { emit requestRenderUpdate(); @@ -66,17 +65,6 @@ void ImageEntityRenderer::doRenderUpdateAsynchronousTyped(const TypedEntityPoint _textureIsLoaded = _texture && (_texture->isLoaded() || _texture->isFailed()); } -Item::Bound ImageEntityRenderer::getBound() { - auto bound = Parent::getBound(); - if (_billboardMode != BillboardMode::NONE) { - glm::vec3 dimensions = bound.getScale(); - float max = glm::max(dimensions.x, glm::max(dimensions.y, dimensions.z)); - const float SQRT_2 = 1.41421356237f; - bound.setScaleStayCentered(glm::vec3(SQRT_2 * max)); - } - return bound; -} - ShapeKey ImageEntityRenderer::getShapeKey() { auto builder = render::ShapeKey::Builder().withoutCullFace().withDepthBias(); if (isTransparent()) { diff --git a/libraries/entities-renderer/src/RenderableImageEntityItem.h b/libraries/entities-renderer/src/RenderableImageEntityItem.h index 35d60a230f..2359dcc6d1 100644 --- a/libraries/entities-renderer/src/RenderableImageEntityItem.h +++ b/libraries/entities-renderer/src/RenderableImageEntityItem.h @@ -23,7 +23,6 @@ public: ~ImageEntityRenderer(); protected: - Item::Bound getBound() override; ShapeKey getShapeKey() override; bool isTransparent() const override; @@ -44,7 +43,6 @@ private: glm::u8vec3 _color; float _alpha; PulsePropertyGroup _pulseProperties; - BillboardMode _billboardMode; int _geometryId { 0 }; }; diff --git a/libraries/entities-renderer/src/RenderableLineEntityItem.cpp b/libraries/entities-renderer/src/RenderableLineEntityItem.cpp index 6e2be1b41e..1964f1bdda 100644 --- a/libraries/entities-renderer/src/RenderableLineEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableLineEntityItem.cpp @@ -48,6 +48,7 @@ void LineEntityRenderer::doRender(RenderArgs* args) { Transform transform = Transform(); transform.setTranslation(modelTransform.getTranslation()); transform.setRotation(modelTransform.getRotation()); + transform.setRotation(EntityItem::getBillboardRotation(transform.getTranslation(), transform.getRotation(), _billboardMode, args->getViewFrustum().getPosition())); batch.setModelTransform(transform); if (_linePoints.size() > 1) { DependencyManager::get()->bindSimpleProgram(batch, false, false, false, false, true, diff --git a/libraries/entities-renderer/src/RenderableMaterialEntityItem.cpp b/libraries/entities-renderer/src/RenderableMaterialEntityItem.cpp index 3d2e59518c..f7631f3e35 100644 --- a/libraries/entities-renderer/src/RenderableMaterialEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableMaterialEntityItem.cpp @@ -259,9 +259,9 @@ void MaterialEntityRenderer::doRender(RenderArgs* args) { textureTransform.setRotation(glm::vec3(0, 0, glm::radians(_materialMappingRot))); textureTransform.setScale(glm::vec3(_materialMappingScale, 1)); - Transform renderTransform; + Transform transform; withReadLock([&] { - renderTransform = _renderTransform; + transform = _renderTransform; }); if (!drawMaterial) { @@ -272,7 +272,8 @@ void MaterialEntityRenderer::doRender(RenderArgs* args) { proceduralRender = true; } - batch.setModelTransform(renderTransform); + transform.setRotation(EntityItem::getBillboardRotation(transform.getTranslation(), transform.getRotation(), _billboardMode, args->getViewFrustum().getPosition())); + batch.setModelTransform(transform); if (!proceduralRender) { drawMaterial->setTextureTransforms(textureTransform, MaterialMappingMode::UV, true); @@ -287,8 +288,8 @@ void MaterialEntityRenderer::doRender(RenderArgs* args) { auto proceduralDrawMaterial = std::static_pointer_cast(drawMaterial); glm::vec4 outColor = glm::vec4(drawMaterial->getAlbedo(), drawMaterial->getOpacity()); outColor = proceduralDrawMaterial->getColor(outColor); - proceduralDrawMaterial->prepare(batch, renderTransform.getTranslation(), renderTransform.getScale(), - renderTransform.getRotation(), _created, ProceduralProgramKey(outColor.a < 1.0f)); + proceduralDrawMaterial->prepare(batch, transform.getTranslation(), transform.getScale(), + transform.getRotation(), _created, ProceduralProgramKey(outColor.a < 1.0f)); if (render::ShapeKey(args->_globalShapeKey).isWireframe() || _primitiveMode == PrimitiveMode::LINES) { DependencyManager::get()->renderWireSphere(batch, outColor); } else { diff --git a/libraries/entities-renderer/src/RenderableParticleEffectEntityItem.cpp b/libraries/entities-renderer/src/RenderableParticleEffectEntityItem.cpp index e53e52d105..91f922c7c7 100644 --- a/libraries/entities-renderer/src/RenderableParticleEffectEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableParticleEffectEntityItem.cpp @@ -455,7 +455,9 @@ void ParticleEffectEntityRenderer::doRender(RenderArgs* args) { color.finish = EntityRenderer::calculatePulseColor(_particleProperties.getColorFinish(), _pulseProperties, _created); color.spread = EntityRenderer::calculatePulseColor(_particleProperties.getColorSpread(), _pulseProperties, _created); + transform.setRotation(EntityItem::getBillboardRotation(transform.getTranslation(), transform.getRotation(), _billboardMode, args->getViewFrustum().getPosition())); batch.setModelTransform(transform); + batch.setUniformBuffer(0, _uniformBuffer); batch.setInputFormat(_vertexFormat); batch.setInputBuffer(0, _particleBuffer, 0, sizeof(GpuParticle)); diff --git a/libraries/entities-renderer/src/RenderablePolyLineEntityItem.cpp b/libraries/entities-renderer/src/RenderablePolyLineEntityItem.cpp index f98a54d594..47b1186c59 100644 --- a/libraries/entities-renderer/src/RenderablePolyLineEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderablePolyLineEntityItem.cpp @@ -325,8 +325,10 @@ void PolyLineEntityRenderer::doRender(RenderArgs* args) { buildPipelines(); } - batch.setPipeline(_pipelines[{args->_renderMethod, isTransparent()}]); + transform.setRotation(EntityItem::getBillboardRotation(transform.getTranslation(), transform.getRotation(), _billboardMode, args->getViewFrustum().getPosition())); batch.setModelTransform(transform); + + batch.setPipeline(_pipelines[{args->_renderMethod, isTransparent()}]); batch.setResourceTexture(0, texture); batch.draw(gpu::TRIANGLE_STRIP, (gpu::uint32)(2 * _numVertices), 0); } diff --git a/libraries/entities-renderer/src/RenderableShapeEntityItem.cpp b/libraries/entities-renderer/src/RenderableShapeEntityItem.cpp index 06ccdef753..87dbbd068b 100644 --- a/libraries/entities-renderer/src/RenderableShapeEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableShapeEntityItem.cpp @@ -221,14 +221,11 @@ void ShapeEntityRenderer::doRender(RenderArgs* args) { graphics::MultiMaterial materials; auto geometryCache = DependencyManager::get(); GeometryCache::Shape geometryShape = geometryCache->getShapeForEntityShape(_shape); - PrimitiveMode primitiveMode; - RenderLayer renderLayer; glm::vec4 outColor; Pipeline pipelineType; + Transform transform; withReadLock([&] { - primitiveMode = _primitiveMode; - renderLayer = _renderLayer; - batch.setModelTransform(_renderTransform); // use a transform with scale, rotation, registration point and translation + transform = _renderTransform; materials = _materials["0"]; pipelineType = getPipelineType(materials); auto& schema = materials.getSchemaBuffer().get(); @@ -241,6 +238,8 @@ void ShapeEntityRenderer::doRender(RenderArgs* args) { return; } + transform.setRotation(EntityItem::getBillboardRotation(transform.getTranslation(), transform.getRotation(), _billboardMode, args->getViewFrustum().getPosition())); + if (pipelineType == Pipeline::PROCEDURAL) { auto procedural = std::static_pointer_cast(materials.top().material); outColor = procedural->getColor(outColor); @@ -249,7 +248,7 @@ void ShapeEntityRenderer::doRender(RenderArgs* args) { procedural->prepare(batch, _position, _dimensions, _orientation, _created, ProceduralProgramKey(outColor.a < 1.0f)); }); - if (render::ShapeKey(args->_globalShapeKey).isWireframe() || primitiveMode == PrimitiveMode::LINES) { + if (render::ShapeKey(args->_globalShapeKey).isWireframe() || _primitiveMode == PrimitiveMode::LINES) { geometryCache->renderWireShape(batch, geometryShape, outColor); } else { geometryCache->renderShape(batch, geometryShape, outColor); @@ -258,8 +257,8 @@ void ShapeEntityRenderer::doRender(RenderArgs* args) { // FIXME, support instanced multi-shape rendering using multidraw indirect outColor.a *= _isFading ? Interpolate::calculateFadeRatio(_fadeStartTime) : 1.0f; render::ShapePipelinePointer pipeline = geometryCache->getShapePipelinePointer(outColor.a < 1.0f, false, - renderLayer != RenderLayer::WORLD || args->_renderMethod == Args::RenderMethod::FORWARD, materials.top().material->getCullFaceMode()); - if (render::ShapeKey(args->_globalShapeKey).isWireframe() || primitiveMode == PrimitiveMode::LINES) { + _renderLayer != RenderLayer::WORLD || args->_renderMethod == Args::RenderMethod::FORWARD, materials.top().material->getCullFaceMode()); + if (render::ShapeKey(args->_globalShapeKey).isWireframe() || _primitiveMode == PrimitiveMode::LINES) { geometryCache->renderWireShapeInstance(args, batch, geometryShape, outColor, pipeline); } else { geometryCache->renderSolidShapeInstance(args, batch, geometryShape, outColor, pipeline); diff --git a/libraries/entities-renderer/src/RenderableTextEntityItem.cpp b/libraries/entities-renderer/src/RenderableTextEntityItem.cpp index 04ad86c7e1..acbbb57bd4 100644 --- a/libraries/entities-renderer/src/RenderableTextEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableTextEntityItem.cpp @@ -54,17 +54,6 @@ bool TextEntityRenderer::isTextTransparent() const { }); } -Item::Bound TextEntityRenderer::getBound() { - auto bound = Parent::getBound(); - if (_billboardMode != BillboardMode::NONE) { - glm::vec3 dimensions = bound.getScale(); - float max = glm::max(dimensions.x, glm::max(dimensions.y, dimensions.z)); - const float SQRT_2 = 1.41421356237f; - bound.setScaleStayCentered(glm::vec3(SQRT_2 * max)); - } - return bound; -} - ItemKey TextEntityRenderer::getKey() { return ItemKey::Builder(Parent::getKey()).withMetaCullGroup(); } @@ -111,7 +100,6 @@ void TextEntityRenderer::doRenderUpdateAsynchronousTyped(const TypedEntityPointe _textAlpha = entity->getTextAlpha(); _backgroundColor = toGlm(entity->getBackgroundColor()); _backgroundAlpha = entity->getBackgroundAlpha(); - _billboardMode = entity->getBillboardMode(); _leftMargin = entity->getLeftMargin(); _rightMargin = entity->getRightMargin(); _topMargin = entity->getTopMargin(); @@ -130,13 +118,9 @@ void TextEntityRenderer::doRender(RenderArgs* args) { gpu::Batch& batch = *args->_batch; glm::vec4 backgroundColor; - Transform modelTransform; - PrimitiveMode primitiveMode; - RenderLayer renderLayer; + Transform transform; withReadLock([&] { - modelTransform = _renderTransform; - primitiveMode = _primitiveMode; - renderLayer = _renderLayer; + transform = _renderTransform; float fadeRatio = _isFading ? Interpolate::calculateFadeRatio(_fadeStartTime) : 1.0f; backgroundColor = glm::vec4(_backgroundColor, fadeRatio * _backgroundAlpha); @@ -147,14 +131,14 @@ void TextEntityRenderer::doRender(RenderArgs* args) { return; } - modelTransform.setRotation(EntityItem::getBillboardRotation(modelTransform.getTranslation(), modelTransform.getRotation(), _billboardMode, args->getViewFrustum().getPosition())); - batch.setModelTransform(modelTransform); + transform.setRotation(EntityItem::getBillboardRotation(transform.getTranslation(), transform.getRotation(), _billboardMode, args->getViewFrustum().getPosition())); + batch.setModelTransform(transform); auto geometryCache = DependencyManager::get(); // FIXME: we want to use instanced rendering here, but if textAlpha < 1 and backgroundAlpha < 1, the transparency sorting will be wrong //render::ShapePipelinePointer pipeline = geometryCache->getShapePipelinePointer(backgroundColor.a < 1.0f, _unlit, - // renderLayer != RenderLayer::WORLD || args->_renderMethod == Args::RenderMethod::FORWARD); - //if (render::ShapeKey(args->_globalShapeKey).isWireframe() || primitiveMode == PrimitiveMode::LINES) { + // _renderLayer != RenderLayer::WORLD || args->_renderMethod == Args::RenderMethod::FORWARD); + //if (render::ShapeKey(args->_globalShapeKey).isWireframe() || _primitiveMode == PrimitiveMode::LINES) { // geometryCache->renderWireShapeInstance(args, batch, GeometryCache::Quad, backgroundColor, pipeline); //} else { // geometryCache->renderSolidShapeInstance(args, batch, GeometryCache::Quad, backgroundColor, pipeline); @@ -309,21 +293,18 @@ void entities::TextPayload::render(RenderArgs* args) { Transform modelTransform; glm::vec3 dimensions; - BillboardMode billboardMode; glm::vec4 textColor; - bool forward; textRenderable->withReadLock([&] { modelTransform = textRenderable->_renderTransform; dimensions = textRenderable->_dimensions; - billboardMode = textRenderable->_billboardMode; float fadeRatio = textRenderable->_isFading ? Interpolate::calculateFadeRatio(textRenderable->_fadeStartTime) : 1.0f; textColor = glm::vec4(textRenderable->_textColor, fadeRatio * textRenderable->_textAlpha); - - forward = textRenderable->_renderLayer != RenderLayer::WORLD || args->_renderMethod == render::Args::FORWARD; }); + bool forward = textRenderable->_renderLayer != RenderLayer::WORLD || args->_renderMethod == render::Args::FORWARD; + textColor = EntityRenderer::calculatePulseColor(textColor, textRenderable->_pulseProperties, textRenderable->_created); glm::vec3 effectColor = EntityRenderer::calculatePulseColor(textRenderable->_effectColor, textRenderable->_pulseProperties, textRenderable->_created); @@ -331,7 +312,7 @@ void entities::TextPayload::render(RenderArgs* args) { return; } - modelTransform.setRotation(EntityItem::getBillboardRotation(modelTransform.getTranslation(), modelTransform.getRotation(), billboardMode, args->getViewFrustum().getPosition())); + modelTransform.setRotation(EntityItem::getBillboardRotation(modelTransform.getTranslation(), modelTransform.getRotation(), textRenderable->_billboardMode, args->getViewFrustum().getPosition())); float scale = textRenderable->_lineHeight / textRenderer->getFontSize(); modelTransform.postTranslate(glm::vec3(-0.5, 0.5, 1.0f + EPSILON / dimensions.z)); diff --git a/libraries/entities-renderer/src/RenderableTextEntityItem.h b/libraries/entities-renderer/src/RenderableTextEntityItem.h index 51651d98ba..1564c98644 100644 --- a/libraries/entities-renderer/src/RenderableTextEntityItem.h +++ b/libraries/entities-renderer/src/RenderableTextEntityItem.h @@ -33,7 +33,6 @@ public: protected: bool isTransparent() const override; bool isTextTransparent() const; - Item::Bound getBound() override; ShapeKey getShapeKey() override; ItemKey getKey() override; virtual uint32_t metaFetchMetaSubItems(ItemIDs& subItems) const override; @@ -63,7 +62,6 @@ private: float _topMargin; float _bottomMargin; - BillboardMode _billboardMode; glm::vec3 _dimensions; QString _font { "" }; diff --git a/libraries/entities-renderer/src/RenderableWebEntityItem.cpp b/libraries/entities-renderer/src/RenderableWebEntityItem.cpp index 8b41a85cf8..93d1b9974e 100644 --- a/libraries/entities-renderer/src/RenderableWebEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableWebEntityItem.cpp @@ -167,7 +167,6 @@ void WebEntityRenderer::doRenderUpdateSynchronousTyped(const ScenePointer& scene _color = entity->getColor(); _alpha = entity->getAlpha(); _pulseProperties = entity->getPulseProperties(); - _billboardMode = entity->getBillboardMode(); if (_contentType == ContentType::NoContent) { _tryingToBuildURL = newSourceURL; @@ -257,17 +256,6 @@ void WebEntityRenderer::doRenderUpdateSynchronousTyped(const ScenePointer& scene }); } -Item::Bound WebEntityRenderer::getBound() { - auto bound = Parent::getBound(); - if (_billboardMode != BillboardMode::NONE) { - glm::vec3 dimensions = bound.getScale(); - float max = glm::max(dimensions.x, glm::max(dimensions.y, dimensions.z)); - const float SQRT_2 = 1.41421356237f; - bound.setScaleStayCentered(glm::vec3(SQRT_2 * max)); - } - return bound; -} - void WebEntityRenderer::doRender(RenderArgs* args) { PerformanceTimer perfTimer("WebEntityRenderer::render"); withWriteLock([&] { @@ -297,14 +285,12 @@ void WebEntityRenderer::doRender(RenderArgs* args) { gpu::Batch& batch = *args->_batch; glm::vec4 color; Transform transform; - bool forward; bool transparent; withReadLock([&] { float fadeRatio = _isFading ? Interpolate::calculateFadeRatio(_fadeStartTime) : 1.0f; color = glm::vec4(toGlm(_color), _alpha * fadeRatio); color = EntityRenderer::calculatePulseColor(color, _pulseProperties, _created); transform = _renderTransform; - forward = _renderLayer != RenderLayer::WORLD || args->_renderMethod == render::Args::FORWARD; transparent = isTransparent(); }); @@ -312,6 +298,8 @@ void WebEntityRenderer::doRender(RenderArgs* args) { return; } + bool forward = _renderLayer != RenderLayer::WORLD || args->_renderMethod == render::Args::FORWARD; + batch.setResourceTexture(0, _texture); transform.setRotation(EntityItem::getBillboardRotation(transform.getTranslation(), transform.getRotation(), _billboardMode, args->getViewFrustum().getPosition())); diff --git a/libraries/entities-renderer/src/RenderableWebEntityItem.h b/libraries/entities-renderer/src/RenderableWebEntityItem.h index 63ec722811..ee1fa36c02 100644 --- a/libraries/entities-renderer/src/RenderableWebEntityItem.h +++ b/libraries/entities-renderer/src/RenderableWebEntityItem.h @@ -59,7 +59,6 @@ protected: virtual void doRenderUpdateSynchronousTyped(const ScenePointer& scene, Transaction& transaction, const TypedEntityPointer& entity) override; virtual void doRender(RenderArgs* args) override; virtual bool isTransparent() const override; - Item::Bound getBound() override; virtual bool wantsHandControllerPointerEvents() const override { return true; } virtual bool wantsKeyboardFocus() const override { return true; } @@ -90,7 +89,6 @@ private: glm::u8vec3 _color; float _alpha { 1.0f }; PulsePropertyGroup _pulseProperties; - BillboardMode _billboardMode; QString _sourceURL; uint16_t _dpi; diff --git a/libraries/entities/src/EntityItem.cpp b/libraries/entities/src/EntityItem.cpp index d7a5e992e1..657d778090 100644 --- a/libraries/entities/src/EntityItem.cpp +++ b/libraries/entities/src/EntityItem.cpp @@ -107,6 +107,7 @@ EntityPropertyFlags EntityItem::getEntityProperties(EncodeBitstreamParams& param requestedProperties += PROP_PRIMITIVE_MODE; requestedProperties += PROP_IGNORE_PICK_INTERSECTION; requestedProperties += PROP_RENDER_WITH_ZONES; + requestedProperties += PROP_BILLBOARD_MODE; requestedProperties += _grabProperties.getEntityProperties(params); // Physics @@ -303,6 +304,7 @@ OctreeElement::AppendState EntityItem::appendEntityData(OctreePacketData* packet APPEND_ENTITY_PROPERTY(PROP_PRIMITIVE_MODE, (uint32_t)getPrimitiveMode()); APPEND_ENTITY_PROPERTY(PROP_IGNORE_PICK_INTERSECTION, getIgnorePickIntersection()); APPEND_ENTITY_PROPERTY(PROP_RENDER_WITH_ZONES, getRenderWithZones()); + APPEND_ENTITY_PROPERTY(PROP_BILLBOARD_MODE, (uint32_t)getBillboardMode()); withReadLock([&] { _grabProperties.appendSubclassData(packetData, params, entityTreeElementExtraEncodeData, requestedProperties, propertyFlags, propertiesDidntFit, propertyCount, appendState); @@ -875,6 +877,7 @@ int EntityItem::readEntityDataFromBuffer(const unsigned char* data, int bytesLef READ_ENTITY_PROPERTY(PROP_PRIMITIVE_MODE, PrimitiveMode, setPrimitiveMode); READ_ENTITY_PROPERTY(PROP_IGNORE_PICK_INTERSECTION, bool, setIgnorePickIntersection); READ_ENTITY_PROPERTY(PROP_RENDER_WITH_ZONES, QVector, setRenderWithZones); + READ_ENTITY_PROPERTY(PROP_BILLBOARD_MODE, BillboardMode, setBillboardMode); withWriteLock([&] { int bytesFromGrab = _grabProperties.readEntitySubclassDataFromBuffer(dataAt, (bytesLeftToRead - bytesRead), args, propertyFlags, overwriteLocalData, @@ -1358,6 +1361,7 @@ EntityItemProperties EntityItem::getProperties(const EntityPropertyFlags& desire COPY_ENTITY_PROPERTY_TO_PROPERTIES(primitiveMode, getPrimitiveMode); COPY_ENTITY_PROPERTY_TO_PROPERTIES(ignorePickIntersection, getIgnorePickIntersection); COPY_ENTITY_PROPERTY_TO_PROPERTIES(renderWithZones, getRenderWithZones); + COPY_ENTITY_PROPERTY_TO_PROPERTIES(billboardMode, getBillboardMode); withReadLock([&] { _grabProperties.getProperties(properties); }); @@ -1508,6 +1512,7 @@ bool EntityItem::setProperties(const EntityItemProperties& properties) { SET_ENTITY_PROPERTY_FROM_PROPERTIES(primitiveMode, setPrimitiveMode); SET_ENTITY_PROPERTY_FROM_PROPERTIES(ignorePickIntersection, setIgnorePickIntersection); SET_ENTITY_PROPERTY_FROM_PROPERTIES(renderWithZones, setRenderWithZones); + SET_ENTITY_PROPERTY_FROM_PROPERTIES(billboardMode, setBillboardMode); withWriteLock([&] { bool grabPropertiesChanged = _grabProperties.setProperties(properties); somethingChanged |= grabPropertiesChanged; @@ -1905,6 +1910,16 @@ void EntityItem::setScaledDimensions(const glm::vec3& value) { setUnscaledDimensions(value / parentScale); } +glm::vec3 EntityItem::getRaycastDimensions() const { + glm::vec3 dimensions = getScaledDimensions(); + if (getBillboardMode() != BillboardMode::NONE) { + float max = glm::max(dimensions.x, glm::max(dimensions.y, dimensions.z)); + const float SQRT_2 = 1.41421356237f; + return glm::vec3(SQRT_2 * max); + } + return dimensions; +} + void EntityItem::setUnscaledDimensions(const glm::vec3& value) { glm::vec3 newDimensions = glm::max(value, glm::vec3(ENTITY_ITEM_MIN_DIMENSION)); const float MIN_SCALE_CHANGE_SQUARED = 1.0e-6f; @@ -3591,4 +3606,17 @@ QVector EntityItem::getRenderWithZones() const { return resultWithReadLock>([&] { return _renderWithZones; }); -} \ No newline at end of file +} + +BillboardMode EntityItem::getBillboardMode() const { + return resultWithReadLock([&] { + return _billboardMode; + }); +} + +void EntityItem::setBillboardMode(BillboardMode value) { + withWriteLock([&] { + _needsRenderUpdate |= _billboardMode != value; + _billboardMode = value; + }); +} diff --git a/libraries/entities/src/EntityItem.h b/libraries/entities/src/EntityItem.h index 2a6952fc0d..69b9abe376 100644 --- a/libraries/entities/src/EntityItem.h +++ b/libraries/entities/src/EntityItem.h @@ -203,7 +203,7 @@ public: /// Dimensions in meters (0.0 - TREE_SCALE) virtual glm::vec3 getScaledDimensions() const; virtual void setScaledDimensions(const glm::vec3& value); - virtual glm::vec3 getRaycastDimensions() const { return getScaledDimensions(); } + virtual glm::vec3 getRaycastDimensions() const; glm::vec3 getUnscaledDimensions() const; virtual void setUnscaledDimensions(const glm::vec3& value); @@ -587,6 +587,9 @@ public: bool needsZoneOcclusionUpdate() const { return _needsZoneOcclusionUpdate; } void resetNeedsZoneOcclusionUpdate() { withWriteLock([&] { _needsZoneOcclusionUpdate = false; }); } + void setBillboardMode(BillboardMode value); + BillboardMode getBillboardMode() const; + signals: void spaceUpdate(std::pair data); @@ -778,6 +781,8 @@ protected: QVector _renderWithZones; mutable bool _needsZoneOcclusionUpdate { false }; + BillboardMode _billboardMode { BillboardMode::NONE }; + bool _cullWithParent { false }; mutable bool _needsRenderUpdate { false }; diff --git a/libraries/entities/src/EntityItemProperties.cpp b/libraries/entities/src/EntityItemProperties.cpp index ff55137a03..870ed09515 100644 --- a/libraries/entities/src/EntityItemProperties.cpp +++ b/libraries/entities/src/EntityItemProperties.cpp @@ -433,6 +433,7 @@ EntityPropertyFlags EntityItemProperties::getChangedProperties() const { CHECK_PROPERTY_CHANGE(PROP_PRIMITIVE_MODE, primitiveMode); CHECK_PROPERTY_CHANGE(PROP_IGNORE_PICK_INTERSECTION, ignorePickIntersection); CHECK_PROPERTY_CHANGE(PROP_RENDER_WITH_ZONES, renderWithZones); + CHECK_PROPERTY_CHANGE(PROP_BILLBOARD_MODE, billboardMode); changedProperties += _grab.getChangedProperties(); // Physics @@ -493,7 +494,6 @@ EntityPropertyFlags EntityItemProperties::getChangedProperties() const { CHECK_PROPERTY_CHANGE(PROP_ALPHA, alpha); changedProperties += _pulse.getChangedProperties(); CHECK_PROPERTY_CHANGE(PROP_TEXTURES, textures); - CHECK_PROPERTY_CHANGE(PROP_BILLBOARD_MODE, billboardMode); // Particles CHECK_PROPERTY_CHANGE(PROP_MAX_PARTICLES, maxParticles); @@ -811,6 +811,7 @@ EntityPropertyFlags EntityItemProperties::getChangedProperties() const { * @property {Uuid[]} renderWithZones=[]] - A list of entity IDs representing with which zones this entity should render. * If it is empty, this entity will render normally. Otherwise, this entity will only render if your avatar is within * one of the zones in this list. + * @property {BillboardMode} billboardMode="none" - Whether the entity is billboarded to face the camera. * * @property {Entities.Grab} grab - The entity's grab-related properties. * @@ -1332,7 +1333,6 @@ EntityPropertyFlags EntityItemProperties::getChangedProperties() const { * @property {Entities.TextEffect} textEffect="none" - The effect that is applied to the text. * @property {Color} textEffectColor=255,255,255 - The color of the effect. * @property {number} textEffectThickness=0.2 - The magnitude of the text effect, range 0.00.5. - * @property {BillboardMode} billboardMode="none" - Whether the entity is billboarded to face the camera. * @property {boolean} faceCamera - true if billboardMode is "yaw", false * if it isn't. Setting this property to false sets the billboardMode to "none". *

Deprecated: This property is deprecated and will be removed.

@@ -1368,7 +1368,6 @@ EntityPropertyFlags EntityItemProperties::getChangedProperties() const { * @property {number} alpha=1 - The opacity of the web surface. * @property {Entities.Pulse} pulse - Color and alpha pulse. *

Deprecated: This property is deprecated and will be removed.

- * @property {BillboardMode} billboardMode="none" - Whether the entity is billboarded to face the camera. * @property {boolean} faceCamera - true if billboardMode is "yaw", false * if it isn't. Setting this property to false sets the billboardMode to "none". *

Deprecated: This property is deprecated and will be removed.

@@ -1487,7 +1486,6 @@ EntityPropertyFlags EntityItemProperties::getChangedProperties() const { * @property {number} alpha=1 - The opacity of the image. * @property {Entities.Pulse} pulse - Color and alpha pulse. *

Deprecated: This property is deprecated and will be removed.

- * @property {BillboardMode} billboardMode="none" - Whether the entity is billboarded to face the camera. * @property {boolean} faceCamera - true if billboardMode is "yaw", false * if it isn't. Setting this property to false sets the billboardMode to "none". *

Deprecated: This property is deprecated and will be removed.

@@ -1611,6 +1609,7 @@ QScriptValue EntityItemProperties::copyToScriptValue(QScriptEngine* engine, bool COPY_PROPERTY_TO_QSCRIPTVALUE_GETTER(PROP_PRIMITIVE_MODE, primitiveMode, getPrimitiveModeAsString()); COPY_PROPERTY_TO_QSCRIPTVALUE(PROP_IGNORE_PICK_INTERSECTION, ignorePickIntersection); COPY_PROPERTY_TO_QSCRIPTVALUE(PROP_RENDER_WITH_ZONES, renderWithZones); + COPY_PROPERTY_TO_QSCRIPTVALUE_GETTER(PROP_BILLBOARD_MODE, billboardMode, getBillboardModeAsString()); _grab.copyToScriptValue(_desiredProperties, properties, engine, skipDefaults, defaultEntityProperties); // Physics @@ -1766,7 +1765,6 @@ QScriptValue EntityItemProperties::copyToScriptValue(QScriptEngine* engine, bool // Text only if (_type == EntityTypes::Text) { _pulse.copyToScriptValue(_desiredProperties, properties, engine, skipDefaults, defaultEntityProperties); - COPY_PROPERTY_TO_QSCRIPTVALUE_GETTER(PROP_BILLBOARD_MODE, billboardMode, getBillboardModeAsString()); COPY_PROPERTY_TO_QSCRIPTVALUE(PROP_TEXT, text); COPY_PROPERTY_TO_QSCRIPTVALUE(PROP_LINE_HEIGHT, lineHeight); @@ -1816,7 +1814,6 @@ QScriptValue EntityItemProperties::copyToScriptValue(QScriptEngine* engine, bool COPY_PROPERTY_TO_QSCRIPTVALUE_TYPED(PROP_COLOR, color, u8vec3Color); COPY_PROPERTY_TO_QSCRIPTVALUE(PROP_ALPHA, alpha); _pulse.copyToScriptValue(_desiredProperties, properties, engine, skipDefaults, defaultEntityProperties); - COPY_PROPERTY_TO_QSCRIPTVALUE_GETTER(PROP_BILLBOARD_MODE, billboardMode, getBillboardModeAsString()); COPY_PROPERTY_TO_QSCRIPTVALUE(PROP_SOURCE_URL, sourceUrl); COPY_PROPERTY_TO_QSCRIPTVALUE(PROP_DPI, dpi); @@ -1884,7 +1881,6 @@ QScriptValue EntityItemProperties::copyToScriptValue(QScriptEngine* engine, bool COPY_PROPERTY_TO_QSCRIPTVALUE_TYPED(PROP_COLOR, color, u8vec3Color); COPY_PROPERTY_TO_QSCRIPTVALUE(PROP_ALPHA, alpha); _pulse.copyToScriptValue(_desiredProperties, properties, engine, skipDefaults, defaultEntityProperties); - COPY_PROPERTY_TO_QSCRIPTVALUE_GETTER(PROP_BILLBOARD_MODE, billboardMode, getBillboardModeAsString()); COPY_PROPERTY_TO_QSCRIPTVALUE(PROP_IMAGE_URL, imageURL); COPY_PROPERTY_TO_QSCRIPTVALUE(PROP_EMISSIVE, emissive); @@ -2032,6 +2028,7 @@ void EntityItemProperties::copyFromScriptValue(const QScriptValue& object, bool COPY_PROPERTY_FROM_QSCRIPTVALUE_ENUM(primitiveMode, PrimitiveMode); COPY_PROPERTY_FROM_QSCRIPTVALUE(ignorePickIntersection, bool, setIgnorePickIntersection); COPY_PROPERTY_FROM_QSCRIPTVALUE(renderWithZones, qVectorQUuid, setRenderWithZones); + COPY_PROPERTY_FROM_QSCRIPTVALUE_ENUM(billboardMode, BillboardMode); _grab.copyFromScriptValue(object, _defaultSettings); // Physics @@ -2097,7 +2094,6 @@ void EntityItemProperties::copyFromScriptValue(const QScriptValue& object, bool COPY_PROPERTY_FROM_QSCRIPTVALUE(alpha, float, setAlpha); _pulse.copyFromScriptValue(object, _defaultSettings); COPY_PROPERTY_FROM_QSCRIPTVALUE(textures, QString, setTextures); - COPY_PROPERTY_FROM_QSCRIPTVALUE_ENUM(billboardMode, BillboardMode); // Particles COPY_PROPERTY_FROM_QSCRIPTVALUE(maxParticles, quint32, setMaxParticles); @@ -2329,6 +2325,7 @@ void EntityItemProperties::merge(const EntityItemProperties& other) { COPY_PROPERTY_IF_CHANGED(primitiveMode); COPY_PROPERTY_IF_CHANGED(ignorePickIntersection); COPY_PROPERTY_IF_CHANGED(renderWithZones); + COPY_PROPERTY_IF_CHANGED(billboardMode); _grab.merge(other._grab); // Physics @@ -2389,7 +2386,6 @@ void EntityItemProperties::merge(const EntityItemProperties& other) { COPY_PROPERTY_IF_CHANGED(alpha); _pulse.merge(other._pulse); COPY_PROPERTY_IF_CHANGED(textures); - COPY_PROPERTY_IF_CHANGED(billboardMode); // Particles COPY_PROPERTY_IF_CHANGED(maxParticles); @@ -2625,6 +2621,7 @@ bool EntityItemProperties::getPropertyInfo(const QString& propertyName, EntityPr ADD_PROPERTY_TO_MAP(PROP_PRIMITIVE_MODE, PrimitiveMode, primitiveMode, PrimitiveMode); ADD_PROPERTY_TO_MAP(PROP_IGNORE_PICK_INTERSECTION, IgnorePickIntersection, ignorePickIntersection, bool); ADD_PROPERTY_TO_MAP(PROP_RENDER_WITH_ZONES, RenderWithZones, renderWithZones, QVector); + ADD_PROPERTY_TO_MAP(PROP_BILLBOARD_MODE, BillboardMode, billboardMode, BillboardMode); { // Grab ADD_GROUP_PROPERTY_TO_MAP(PROP_GRAB_GRABBABLE, Grab, grab, Grabbable, grabbable); ADD_GROUP_PROPERTY_TO_MAP(PROP_GRAB_KINEMATIC, Grab, grab, GrabKinematic, grabKinematic); @@ -2721,7 +2718,6 @@ bool EntityItemProperties::getPropertyInfo(const QString& propertyName, EntityPr ADD_GROUP_PROPERTY_TO_MAP(PROP_PULSE_ALPHA_MODE, Pulse, pulse, AlphaMode, alphaMode); } ADD_PROPERTY_TO_MAP(PROP_TEXTURES, Textures, textures, QString); - ADD_PROPERTY_TO_MAP(PROP_BILLBOARD_MODE, BillboardMode, billboardMode, BillboardMode); // Particles ADD_PROPERTY_TO_MAP_WITH_RANGE(PROP_MAX_PARTICLES, MaxParticles, maxParticles, quint32, @@ -3117,6 +3113,7 @@ OctreeElement::AppendState EntityItemProperties::encodeEntityEditPacket(PacketTy APPEND_ENTITY_PROPERTY(PROP_PRIMITIVE_MODE, (uint32_t)properties.getPrimitiveMode()); APPEND_ENTITY_PROPERTY(PROP_IGNORE_PICK_INTERSECTION, properties.getIgnorePickIntersection()); APPEND_ENTITY_PROPERTY(PROP_RENDER_WITH_ZONES, properties.getRenderWithZones()); + APPEND_ENTITY_PROPERTY(PROP_BILLBOARD_MODE, (uint32_t)properties.getBillboardMode()); _staticGrab.setProperties(properties); _staticGrab.appendToEditPacket(packetData, requestedProperties, propertyFlags, propertiesDidntFit, propertyCount, appendState); @@ -3249,7 +3246,6 @@ OctreeElement::AppendState EntityItemProperties::encodeEntityEditPacket(PacketTy _staticPulse.setProperties(properties); _staticPulse.appendToEditPacket(packetData, requestedProperties, propertyFlags, propertiesDidntFit, propertyCount, appendState); - APPEND_ENTITY_PROPERTY(PROP_BILLBOARD_MODE, (uint32_t)properties.getBillboardMode()); APPEND_ENTITY_PROPERTY(PROP_TEXT, properties.getText()); APPEND_ENTITY_PROPERTY(PROP_LINE_HEIGHT, properties.getLineHeight()); @@ -3321,7 +3317,6 @@ OctreeElement::AppendState EntityItemProperties::encodeEntityEditPacket(PacketTy _staticPulse.setProperties(properties); _staticPulse.appendToEditPacket(packetData, requestedProperties, propertyFlags, propertiesDidntFit, propertyCount, appendState); - APPEND_ENTITY_PROPERTY(PROP_BILLBOARD_MODE, (uint32_t)properties.getBillboardMode()); APPEND_ENTITY_PROPERTY(PROP_SOURCE_URL, properties.getSourceUrl()); APPEND_ENTITY_PROPERTY(PROP_DPI, properties.getDPI()); @@ -3384,7 +3379,6 @@ OctreeElement::AppendState EntityItemProperties::encodeEntityEditPacket(PacketTy _staticPulse.setProperties(properties); _staticPulse.appendToEditPacket(packetData, requestedProperties, propertyFlags, propertiesDidntFit, propertyCount, appendState); - APPEND_ENTITY_PROPERTY(PROP_BILLBOARD_MODE, (uint32_t)properties.getBillboardMode()); APPEND_ENTITY_PROPERTY(PROP_IMAGE_URL, properties.getImageURL()); APPEND_ENTITY_PROPERTY(PROP_EMISSIVE, properties.getEmissive()); @@ -3610,6 +3604,7 @@ bool EntityItemProperties::decodeEntityEditPacket(const unsigned char* data, int READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_PRIMITIVE_MODE, PrimitiveMode, setPrimitiveMode); READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_IGNORE_PICK_INTERSECTION, bool, setIgnorePickIntersection); READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_RENDER_WITH_ZONES, QVector, setRenderWithZones); + READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_BILLBOARD_MODE, BillboardMode, setBillboardMode); properties.getGrab().decodeFromEditPacket(propertyFlags, dataAt, processedBytes); // Physics @@ -3736,7 +3731,6 @@ bool EntityItemProperties::decodeEntityEditPacket(const unsigned char* data, int if (properties.getType() == EntityTypes::Text) { properties.getPulse().decodeFromEditPacket(propertyFlags, dataAt, processedBytes); - READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_BILLBOARD_MODE, BillboardMode, setBillboardMode); READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_TEXT, QString, setText); READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_LINE_HEIGHT, float, setLineHeight); @@ -3797,7 +3791,6 @@ bool EntityItemProperties::decodeEntityEditPacket(const unsigned char* data, int READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_COLOR, u8vec3Color, setColor); READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_ALPHA, float, setAlpha); properties.getPulse().decodeFromEditPacket(propertyFlags, dataAt, processedBytes); - READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_BILLBOARD_MODE, BillboardMode, setBillboardMode); READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_SOURCE_URL, QString, setSourceUrl); READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_DPI, uint16_t, setDPI); @@ -3857,7 +3850,6 @@ bool EntityItemProperties::decodeEntityEditPacket(const unsigned char* data, int READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_COLOR, u8vec3Color, setColor); READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_ALPHA, float, setAlpha); properties.getPulse().decodeFromEditPacket(propertyFlags, dataAt, processedBytes); - READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_BILLBOARD_MODE, BillboardMode, setBillboardMode); READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_IMAGE_URL, QString, setImageURL); READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_EMISSIVE, bool, setEmissive); @@ -4031,6 +4023,7 @@ void EntityItemProperties::markAllChanged() { _primitiveModeChanged = true; _ignorePickIntersectionChanged = true; _renderWithZonesChanged = true; + _billboardModeChanged = true; _grab.markAllChanged(); // Physics @@ -4084,7 +4077,6 @@ void EntityItemProperties::markAllChanged() { _alphaChanged = true; _pulse.markAllChanged(); _texturesChanged = true; - _billboardModeChanged = true; // Particles _maxParticlesChanged = true; @@ -4439,6 +4431,9 @@ QList EntityItemProperties::listChangedProperties() { if (renderWithZonesChanged()) { out += "renderWithZones"; } + if (billboardModeChanged()) { + out += "billboardMode"; + } getGrab().listChangedProperties(out); // Physics @@ -4574,9 +4569,6 @@ QList EntityItemProperties::listChangedProperties() { if (texturesChanged()) { out += "textures"; } - if (billboardModeChanged()) { - out += "billboardMode"; - } // Particles if (maxParticlesChanged()) { diff --git a/libraries/entities/src/EntityItemProperties.h b/libraries/entities/src/EntityItemProperties.h index f7fde73430..e431465884 100644 --- a/libraries/entities/src/EntityItemProperties.h +++ b/libraries/entities/src/EntityItemProperties.h @@ -197,6 +197,7 @@ public: DEFINE_PROPERTY_REF_ENUM(PROP_PRIMITIVE_MODE, PrimitiveMode, primitiveMode, PrimitiveMode, PrimitiveMode::SOLID); DEFINE_PROPERTY(PROP_IGNORE_PICK_INTERSECTION, IgnorePickIntersection, ignorePickIntersection, bool, false); DEFINE_PROPERTY_REF(PROP_RENDER_WITH_ZONES, RenderWithZones, renderWithZones, QVector, QVector()); + DEFINE_PROPERTY_REF_ENUM(PROP_BILLBOARD_MODE, BillboardMode, billboardMode, BillboardMode, BillboardMode::NONE); DEFINE_PROPERTY_GROUP(Grab, grab, GrabPropertyGroup); // Physics @@ -257,7 +258,6 @@ public: DEFINE_PROPERTY(PROP_ALPHA, Alpha, alpha, float, ENTITY_ITEM_DEFAULT_ALPHA); DEFINE_PROPERTY_GROUP(Pulse, pulse, PulsePropertyGroup); DEFINE_PROPERTY_REF(PROP_TEXTURES, Textures, textures, QString, ""); - DEFINE_PROPERTY_REF_ENUM(PROP_BILLBOARD_MODE, BillboardMode, billboardMode, BillboardMode, BillboardMode::NONE); // Particles DEFINE_PROPERTY(PROP_MAX_PARTICLES, MaxParticles, maxParticles, quint32, particle::DEFAULT_MAX_PARTICLES); diff --git a/libraries/entities/src/EntityPropertyFlags.h b/libraries/entities/src/EntityPropertyFlags.h index 93bb8a89a7..6029d9f5ec 100644 --- a/libraries/entities/src/EntityPropertyFlags.h +++ b/libraries/entities/src/EntityPropertyFlags.h @@ -45,6 +45,7 @@ enum EntityPropertyList { PROP_PRIMITIVE_MODE, PROP_IGNORE_PICK_INTERSECTION, PROP_RENDER_WITH_ZONES, + PROP_BILLBOARD_MODE, // Grab PROP_GRAB_GRABBABLE, PROP_GRAB_KINEMATIC, @@ -122,7 +123,6 @@ enum EntityPropertyList { PROP_PULSE_COLOR_MODE, PROP_PULSE_ALPHA_MODE, PROP_TEXTURES, - PROP_BILLBOARD_MODE, //////////////////////////////////////////////////////////////////////////////////////////////////// // ATTENTION: add new shared EntityItem properties to the list ABOVE this line diff --git a/libraries/entities/src/GizmoEntityItem.cpp b/libraries/entities/src/GizmoEntityItem.cpp index 47c9afd168..7ca1230fb1 100644 --- a/libraries/entities/src/GizmoEntityItem.cpp +++ b/libraries/entities/src/GizmoEntityItem.cpp @@ -111,6 +111,9 @@ bool GizmoEntityItem::findDetailedRayIntersection(const glm::vec3& origin, const glm::quat rotation = getWorldOrientation(); rotation = glm::angleAxis(-(float)M_PI_2, rotation * Vectors::RIGHT) * rotation; glm::vec3 position = getWorldPosition() + rotation * (dimensions * (ENTITY_ITEM_DEFAULT_REGISTRATION_POINT - getRegistrationPoint())); + withReadLock([&] { + rotation = EntityItem::getBillboardRotation(position, rotation, _billboardMode, EntityItem::getPrimaryViewFrustumPosition()); + }); if (findRayRectangleIntersection(origin, direction, rotation, position, xyDimensions, distance)) { glm::vec3 hitPosition = origin + (distance * direction); diff --git a/libraries/entities/src/ImageEntityItem.cpp b/libraries/entities/src/ImageEntityItem.cpp index 6a8c457b0a..fb59a85647 100644 --- a/libraries/entities/src/ImageEntityItem.cpp +++ b/libraries/entities/src/ImageEntityItem.cpp @@ -35,7 +35,6 @@ EntityItemProperties ImageEntityItem::getProperties(const EntityPropertyFlags& d withReadLock([&] { _pulseProperties.getProperties(properties); }); - COPY_ENTITY_PROPERTY_TO_PROPERTIES(billboardMode, getBillboardMode); COPY_ENTITY_PROPERTY_TO_PROPERTIES(imageURL, getImageURL); COPY_ENTITY_PROPERTY_TO_PROPERTIES(emissive, getEmissive); @@ -55,7 +54,6 @@ bool ImageEntityItem::setSubClassProperties(const EntityItemProperties& properti somethingChanged |= pulsePropertiesChanged; _needsRenderUpdate |= pulsePropertiesChanged; }); - SET_ENTITY_PROPERTY_FROM_PROPERTIES(billboardMode, setBillboardMode); SET_ENTITY_PROPERTY_FROM_PROPERTIES(imageURL, setImageURL); SET_ENTITY_PROPERTY_FROM_PROPERTIES(emissive, setEmissive); @@ -82,7 +80,6 @@ int ImageEntityItem::readEntitySubclassDataFromBuffer(const unsigned char* data, bytesRead += bytesFromPulse; dataAt += bytesFromPulse; }); - READ_ENTITY_PROPERTY(PROP_BILLBOARD_MODE, BillboardMode, setBillboardMode); READ_ENTITY_PROPERTY(PROP_IMAGE_URL, QString, setImageURL); READ_ENTITY_PROPERTY(PROP_EMISSIVE, bool, setEmissive); @@ -98,7 +95,6 @@ EntityPropertyFlags ImageEntityItem::getEntityProperties(EncodeBitstreamParams& requestedProperties += PROP_COLOR; requestedProperties += PROP_ALPHA; requestedProperties += _pulseProperties.getEntityProperties(params); - requestedProperties += PROP_BILLBOARD_MODE; requestedProperties += PROP_IMAGE_URL; requestedProperties += PROP_EMISSIVE; @@ -124,7 +120,6 @@ void ImageEntityItem::appendSubclassData(OctreePacketData* packetData, EncodeBit _pulseProperties.appendSubclassData(packetData, params, entityTreeElementExtraEncodeData, requestedProperties, propertyFlags, propertiesDidntFit, propertyCount, appendState); }); - APPEND_ENTITY_PROPERTY(PROP_BILLBOARD_MODE, (uint32_t)getBillboardMode()); APPEND_ENTITY_PROPERTY(PROP_IMAGE_URL, getImageURL()); APPEND_ENTITY_PROPERTY(PROP_EMISSIVE, getEmissive()); @@ -132,16 +127,6 @@ void ImageEntityItem::appendSubclassData(OctreePacketData* packetData, EncodeBit APPEND_ENTITY_PROPERTY(PROP_SUB_IMAGE, getSubImage()); } -glm::vec3 ImageEntityItem::getRaycastDimensions() const { - glm::vec3 dimensions = getScaledDimensions(); - if (getBillboardMode() != BillboardMode::NONE) { - float max = glm::max(dimensions.x, glm::max(dimensions.y, dimensions.z)); - const float SQRT_2 = 1.41421356237f; - return glm::vec3(SQRT_2 * max); - } - return dimensions; -} - bool ImageEntityItem::findDetailedRayIntersection(const glm::vec3& origin, const glm::vec3& direction, OctreeElementPointer& element, float& distance, BoxFace& face, glm::vec3& surfaceNormal, @@ -150,7 +135,9 @@ bool ImageEntityItem::findDetailedRayIntersection(const glm::vec3& origin, const glm::vec2 xyDimensions(dimensions.x, dimensions.y); glm::quat rotation = getWorldOrientation(); glm::vec3 position = getWorldPosition() + rotation * (dimensions * (ENTITY_ITEM_DEFAULT_REGISTRATION_POINT - getRegistrationPoint())); - rotation = EntityItem::getBillboardRotation(position, rotation, _billboardMode, EntityItem::getPrimaryViewFrustumPosition()); + withReadLock([&] { + rotation = EntityItem::getBillboardRotation(position, rotation, _billboardMode, EntityItem::getPrimaryViewFrustumPosition()); + }); if (findRayRectangleIntersection(origin, direction, rotation, position, xyDimensions, distance)) { glm::vec3 forward = rotation * Vectors::FRONT; @@ -174,6 +161,9 @@ bool ImageEntityItem::findDetailedParabolaIntersection(const glm::vec3& origin, glm::vec2 xyDimensions(dimensions.x, dimensions.y); glm::quat rotation = getWorldOrientation(); glm::vec3 position = getWorldPosition() + rotation * (dimensions * (ENTITY_ITEM_DEFAULT_REGISTRATION_POINT - getRegistrationPoint())); + withReadLock([&] { + rotation = EntityItem::getBillboardRotation(position, rotation, _billboardMode, EntityItem::getPrimaryViewFrustumPosition()); + }); glm::quat inverseRot = glm::inverse(rotation); glm::vec3 localOrigin = inverseRot * (origin - position); @@ -240,21 +230,6 @@ void ImageEntityItem::setKeepAspectRatio(bool keepAspectRatio) { }); } -BillboardMode ImageEntityItem::getBillboardMode() const { - BillboardMode result; - withReadLock([&] { - result = _billboardMode; - }); - return result; -} - -void ImageEntityItem::setBillboardMode(BillboardMode value) { - withWriteLock([&] { - _needsRenderUpdate |= _billboardMode != value; - _billboardMode = value; - }); -} - QRect ImageEntityItem::getSubImage() const { QRect result; withReadLock([&] { diff --git a/libraries/entities/src/ImageEntityItem.h b/libraries/entities/src/ImageEntityItem.h index bca67dc738..0a90f93f9d 100644 --- a/libraries/entities/src/ImageEntityItem.h +++ b/libraries/entities/src/ImageEntityItem.h @@ -43,7 +43,6 @@ public: EntityPropertyFlags& propertyFlags, bool overwriteLocalData, bool& somethingChanged) override; - glm::vec3 getRaycastDimensions() const override; virtual bool supportsDetailedIntersection() const override { return true; } virtual bool findDetailedRayIntersection(const glm::vec3& origin, const glm::vec3& direction, OctreeElementPointer& element, float& distance, @@ -63,9 +62,6 @@ public: void setKeepAspectRatio(bool keepAspectRatio); bool getKeepAspectRatio() const; - void setBillboardMode(BillboardMode value); - BillboardMode getBillboardMode() const; - void setSubImage(const QRect& subImage); QRect getSubImage() const; @@ -81,7 +77,6 @@ protected: glm::u8vec3 _color; float _alpha; PulsePropertyGroup _pulseProperties; - BillboardMode _billboardMode; QString _imageURL; bool _emissive { false }; diff --git a/libraries/entities/src/TextEntityItem.cpp b/libraries/entities/src/TextEntityItem.cpp index a996319463..906e28288b 100644 --- a/libraries/entities/src/TextEntityItem.cpp +++ b/libraries/entities/src/TextEntityItem.cpp @@ -53,7 +53,6 @@ EntityItemProperties TextEntityItem::getProperties(const EntityPropertyFlags& de withReadLock([&] { _pulseProperties.getProperties(properties); }); - COPY_ENTITY_PROPERTY_TO_PROPERTIES(billboardMode, getBillboardMode); COPY_ENTITY_PROPERTY_TO_PROPERTIES(text, getText); COPY_ENTITY_PROPERTY_TO_PROPERTIES(lineHeight, getLineHeight); @@ -81,7 +80,6 @@ bool TextEntityItem::setSubClassProperties(const EntityItemProperties& propertie somethingChanged |= pulsePropertiesChanged; _needsRenderUpdate |= pulsePropertiesChanged; }); - SET_ENTITY_PROPERTY_FROM_PROPERTIES(billboardMode, setBillboardMode); SET_ENTITY_PROPERTY_FROM_PROPERTIES(text, setText); SET_ENTITY_PROPERTY_FROM_PROPERTIES(lineHeight, setLineHeight); @@ -117,7 +115,6 @@ int TextEntityItem::readEntitySubclassDataFromBuffer(const unsigned char* data, bytesRead += bytesFromPulse; dataAt += bytesFromPulse; }); - READ_ENTITY_PROPERTY(PROP_BILLBOARD_MODE, BillboardMode, setBillboardMode); READ_ENTITY_PROPERTY(PROP_TEXT, QString, setText); READ_ENTITY_PROPERTY(PROP_LINE_HEIGHT, float, setLineHeight); @@ -142,7 +139,6 @@ EntityPropertyFlags TextEntityItem::getEntityProperties(EncodeBitstreamParams& p EntityPropertyFlags requestedProperties = EntityItem::getEntityProperties(params); requestedProperties += _pulseProperties.getEntityProperties(params); - requestedProperties += PROP_BILLBOARD_MODE; requestedProperties += PROP_TEXT; requestedProperties += PROP_LINE_HEIGHT; @@ -177,7 +173,6 @@ void TextEntityItem::appendSubclassData(OctreePacketData* packetData, EncodeBits _pulseProperties.appendSubclassData(packetData, params, entityTreeElementExtraEncodeData, requestedProperties, propertyFlags, propertiesDidntFit, propertyCount, appendState); }); - APPEND_ENTITY_PROPERTY(PROP_BILLBOARD_MODE, (uint32_t)getBillboardMode()); APPEND_ENTITY_PROPERTY(PROP_TEXT, getText()); APPEND_ENTITY_PROPERTY(PROP_LINE_HEIGHT, getLineHeight()); @@ -196,16 +191,6 @@ void TextEntityItem::appendSubclassData(OctreePacketData* packetData, EncodeBits APPEND_ENTITY_PROPERTY(PROP_TEXT_EFFECT_THICKNESS, getTextEffectThickness()); } -glm::vec3 TextEntityItem::getRaycastDimensions() const { - glm::vec3 dimensions = getScaledDimensions(); - if (getBillboardMode() != BillboardMode::NONE) { - float max = glm::max(dimensions.x, glm::max(dimensions.y, dimensions.z)); - const float SQRT_2 = 1.41421356237f; - return glm::vec3(SQRT_2 * max); - } - return dimensions; -} - bool TextEntityItem::findDetailedRayIntersection(const glm::vec3& origin, const glm::vec3& direction, OctreeElementPointer& element, float& distance, BoxFace& face, glm::vec3& surfaceNormal, @@ -214,7 +199,9 @@ bool TextEntityItem::findDetailedRayIntersection(const glm::vec3& origin, const glm::vec2 xyDimensions(dimensions.x, dimensions.y); glm::quat rotation = getWorldOrientation(); glm::vec3 position = getWorldPosition() + rotation * (dimensions * (ENTITY_ITEM_DEFAULT_REGISTRATION_POINT - getRegistrationPoint())); - rotation = EntityItem::getBillboardRotation(position, rotation, _billboardMode, EntityItem::getPrimaryViewFrustumPosition()); + withReadLock([&] { + rotation = EntityItem::getBillboardRotation(position, rotation, _billboardMode, EntityItem::getPrimaryViewFrustumPosition()); + }); if (findRayRectangleIntersection(origin, direction, rotation, position, xyDimensions, distance)) { glm::vec3 forward = rotation * Vectors::FRONT; @@ -238,6 +225,9 @@ bool TextEntityItem::findDetailedParabolaIntersection(const glm::vec3& origin, c glm::vec2 xyDimensions(dimensions.x, dimensions.y); glm::quat rotation = getWorldOrientation(); glm::vec3 position = getWorldPosition() + rotation * (dimensions * (ENTITY_ITEM_DEFAULT_REGISTRATION_POINT - getRegistrationPoint())); + withReadLock([&] { + rotation = EntityItem::getBillboardRotation(position, rotation, _billboardMode, EntityItem::getPrimaryViewFrustumPosition()); + }); glm::quat inverseRot = glm::inverse(rotation); glm::vec3 localOrigin = inverseRot * (origin - position); @@ -339,21 +329,6 @@ float TextEntityItem::getBackgroundAlpha() const { }); } -BillboardMode TextEntityItem::getBillboardMode() const { - BillboardMode result; - withReadLock([&] { - result = _billboardMode; - }); - return result; -} - -void TextEntityItem::setBillboardMode(BillboardMode value) { - withWriteLock([&] { - _needsRenderUpdate |= _billboardMode != value; - _billboardMode = value; - }); -} - void TextEntityItem::setLeftMargin(float value) { withWriteLock([&] { _needsRenderUpdate |= _leftMargin != value; diff --git a/libraries/entities/src/TextEntityItem.h b/libraries/entities/src/TextEntityItem.h index 91496708f6..7827ab1b85 100644 --- a/libraries/entities/src/TextEntityItem.h +++ b/libraries/entities/src/TextEntityItem.h @@ -48,7 +48,6 @@ public: EntityPropertyFlags& propertyFlags, bool overwriteLocalData, bool& somethingChanged) override; - glm::vec3 getRaycastDimensions() const override; virtual bool supportsDetailedIntersection() const override { return true; } virtual bool findDetailedRayIntersection(const glm::vec3& origin, const glm::vec3& direction, OctreeElementPointer& element, float& distance, @@ -82,9 +81,6 @@ public: float getBackgroundAlpha() const; void setBackgroundAlpha(float value); - BillboardMode getBillboardMode() const; - void setBillboardMode(BillboardMode value); - static const float DEFAULT_MARGIN; float getLeftMargin() const; void setLeftMargin(float value); @@ -117,8 +113,6 @@ public: PulsePropertyGroup getPulseProperties() const; private: - BillboardMode _billboardMode; - QString _text; float _lineHeight; glm::u8vec3 _textColor; diff --git a/libraries/entities/src/WebEntityItem.cpp b/libraries/entities/src/WebEntityItem.cpp index 61a1ed18c5..f88b40b2ee 100644 --- a/libraries/entities/src/WebEntityItem.cpp +++ b/libraries/entities/src/WebEntityItem.cpp @@ -54,7 +54,6 @@ EntityItemProperties WebEntityItem::getProperties(const EntityPropertyFlags& des withReadLock([&] { _pulseProperties.getProperties(properties); }); - COPY_ENTITY_PROPERTY_TO_PROPERTIES(billboardMode, getBillboardMode); COPY_ENTITY_PROPERTY_TO_PROPERTIES(sourceUrl, getSourceUrl); COPY_ENTITY_PROPERTY_TO_PROPERTIES(dpi, getDPI); @@ -76,7 +75,6 @@ bool WebEntityItem::setSubClassProperties(const EntityItemProperties& properties somethingChanged |= pulsePropertiesChanged; _needsRenderUpdate |= pulsePropertiesChanged; }); - SET_ENTITY_PROPERTY_FROM_PROPERTIES(billboardMode, setBillboardMode); SET_ENTITY_PROPERTY_FROM_PROPERTIES(sourceUrl, setSourceUrl); SET_ENTITY_PROPERTY_FROM_PROPERTIES(dpi, setDPI); @@ -106,7 +104,6 @@ int WebEntityItem::readEntitySubclassDataFromBuffer(const unsigned char* data, i bytesRead += bytesFromPulse; dataAt += bytesFromPulse; }); - READ_ENTITY_PROPERTY(PROP_BILLBOARD_MODE, BillboardMode, setBillboardMode); READ_ENTITY_PROPERTY(PROP_SOURCE_URL, QString, setSourceUrl); READ_ENTITY_PROPERTY(PROP_DPI, uint16_t, setDPI); @@ -124,7 +121,6 @@ EntityPropertyFlags WebEntityItem::getEntityProperties(EncodeBitstreamParams& pa requestedProperties += PROP_COLOR; requestedProperties += PROP_ALPHA; requestedProperties += _pulseProperties.getEntityProperties(params); - requestedProperties += PROP_BILLBOARD_MODE; requestedProperties += PROP_SOURCE_URL; requestedProperties += PROP_DPI; @@ -151,7 +147,6 @@ void WebEntityItem::appendSubclassData(OctreePacketData* packetData, EncodeBitst _pulseProperties.appendSubclassData(packetData, params, entityTreeElementExtraEncodeData, requestedProperties, propertyFlags, propertiesDidntFit, propertyCount, appendState); }); - APPEND_ENTITY_PROPERTY(PROP_BILLBOARD_MODE, (uint32_t)getBillboardMode()); APPEND_ENTITY_PROPERTY(PROP_SOURCE_URL, getSourceUrl()); APPEND_ENTITY_PROPERTY(PROP_DPI, getDPI()); @@ -162,16 +157,6 @@ void WebEntityItem::appendSubclassData(OctreePacketData* packetData, EncodeBitst APPEND_ENTITY_PROPERTY(PROP_WEB_USE_BACKGROUND, getUseBackground()); } -glm::vec3 WebEntityItem::getRaycastDimensions() const { - glm::vec3 dimensions = getScaledDimensions(); - if (getBillboardMode() != BillboardMode::NONE) { - float max = glm::max(dimensions.x, glm::max(dimensions.y, dimensions.z)); - const float SQRT_2 = 1.41421356237f; - return glm::vec3(SQRT_2 * max); - } - return dimensions; -} - bool WebEntityItem::findDetailedRayIntersection(const glm::vec3& origin, const glm::vec3& direction, OctreeElementPointer& element, float& distance, BoxFace& face, glm::vec3& surfaceNormal, @@ -180,7 +165,9 @@ bool WebEntityItem::findDetailedRayIntersection(const glm::vec3& origin, const g glm::vec2 xyDimensions(dimensions.x, dimensions.y); glm::quat rotation = getWorldOrientation(); glm::vec3 position = getWorldPosition() + rotation * (dimensions * (ENTITY_ITEM_DEFAULT_REGISTRATION_POINT - getRegistrationPoint())); - rotation = EntityItem::getBillboardRotation(position, rotation, _billboardMode, EntityItem::getPrimaryViewFrustumPosition()); + withReadLock([&] { + rotation = EntityItem::getBillboardRotation(position, rotation, _billboardMode, EntityItem::getPrimaryViewFrustumPosition()); + }); if (findRayRectangleIntersection(origin, direction, rotation, position, xyDimensions, distance)) { glm::vec3 forward = rotation * Vectors::FRONT; @@ -205,6 +192,9 @@ bool WebEntityItem::findDetailedParabolaIntersection(const glm::vec3& origin, co glm::vec2 xyDimensions(dimensions.x, dimensions.y); glm::quat rotation = getWorldOrientation(); glm::vec3 position = getWorldPosition() + rotation * (dimensions * (ENTITY_ITEM_DEFAULT_REGISTRATION_POINT - getRegistrationPoint())); + withReadLock([&] { + rotation = EntityItem::getBillboardRotation(position, rotation, _billboardMode, EntityItem::getPrimaryViewFrustumPosition()); + }); glm::quat inverseRot = glm::inverse(rotation); glm::vec3 localOrigin = inverseRot * (origin - position); @@ -259,19 +249,6 @@ float WebEntityItem::getAlpha() const { }); } -BillboardMode WebEntityItem::getBillboardMode() const { - return resultWithReadLock([&] { - return _billboardMode; - }); -} - -void WebEntityItem::setBillboardMode(BillboardMode value) { - withWriteLock([&] { - _needsRenderUpdate |= _billboardMode != value; - _billboardMode = value; - }); -} - void WebEntityItem::setSourceUrl(const QString& value) { withWriteLock([&] { _needsRenderUpdate |= _sourceUrl != value; diff --git a/libraries/entities/src/WebEntityItem.h b/libraries/entities/src/WebEntityItem.h index 4b39261bfb..0a3db2ea78 100644 --- a/libraries/entities/src/WebEntityItem.h +++ b/libraries/entities/src/WebEntityItem.h @@ -45,7 +45,6 @@ public: EntityPropertyFlags& propertyFlags, bool overwriteLocalData, bool& somethingChanged) override; - glm::vec3 getRaycastDimensions() const override; virtual bool supportsDetailedIntersection() const override { return true; } virtual bool findDetailedRayIntersection(const glm::vec3& origin, const glm::vec3& direction, OctreeElementPointer& element, float& distance, @@ -62,9 +61,6 @@ public: float getAlpha() const; void setAlpha(float alpha); - void setBillboardMode(BillboardMode value); - BillboardMode getBillboardMode() const; - static const QString DEFAULT_SOURCE_URL; void setSourceUrl(const QString& value); QString getSourceUrl() const; @@ -96,7 +92,6 @@ protected: glm::u8vec3 _color; float _alpha { 1.0f }; PulsePropertyGroup _pulseProperties; - BillboardMode _billboardMode; QString _sourceUrl; uint16_t _dpi; diff --git a/libraries/networking/src/udt/PacketHeaders.h b/libraries/networking/src/udt/PacketHeaders.h index fc74f4459c..94fe2ca71f 100644 --- a/libraries/networking/src/udt/PacketHeaders.h +++ b/libraries/networking/src/udt/PacketHeaders.h @@ -283,6 +283,7 @@ enum class EntityVersion : PacketVersion { ZoneOcclusion, ModelBlendshapes, TransparentWeb, + AllBillboardMode, // Add new versions above here NUM_PACKET_TYPE, From 030524c3ee061fef1d683e08049846ea31af471d Mon Sep 17 00:00:00 2001 From: HifiExperiments Date: Sun, 3 Jan 2021 21:03:11 -0800 Subject: [PATCH 070/152] CR and actually send property over wire --- libraries/entities/src/EntityItemProperties.cpp | 4 ++++ libraries/networking/src/udt/PacketHeaders.h | 1 + libraries/render-utils/src/Model.cpp | 2 +- 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/libraries/entities/src/EntityItemProperties.cpp b/libraries/entities/src/EntityItemProperties.cpp index 06e981238d..7fa1d11d3b 100644 --- a/libraries/entities/src/EntityItemProperties.cpp +++ b/libraries/entities/src/EntityItemProperties.cpp @@ -1003,6 +1003,8 @@ EntityPropertyFlags EntityItemProperties::getChangedProperties() const { * @property {string} blendshapeCoefficients - A JSON string of a map of blendshape names to values. Only stores set values. * When editing this property, only coefficients that you are editing will change; it will not explicitly reset other * coefficients. + * @property {boolean} useOriginalPivot=false - If false, the model will be centered based on its content, ignoring any offset + * in the model itself. If true, the model will respect its original offset. * @property {string} textures="" - A JSON string of texture name, URL pairs used when rendering the model in place of the * model's original textures. Use a texture name from the originalTextures property to override that texture. * Only the texture names and URLs to be overridden need be specified; original textures are used where there are no @@ -3236,6 +3238,7 @@ OctreeElement::AppendState EntityItemProperties::encodeEntityEditPacket(PacketTy APPEND_ENTITY_PROPERTY(PROP_RELAY_PARENT_JOINTS, properties.getRelayParentJoints()); APPEND_ENTITY_PROPERTY(PROP_GROUP_CULLED, properties.getGroupCulled()); APPEND_ENTITY_PROPERTY(PROP_BLENDSHAPE_COEFFICIENTS, properties.getBlendshapeCoefficients()); + APPEND_ENTITY_PROPERTY(PROP_USE_ORIGINAL_PIVOT, properties.getUseOriginalPivot()); _staticAnimation.setProperties(properties); _staticAnimation.appendToEditPacket(packetData, requestedProperties, propertyFlags, propertiesDidntFit, propertyCount, appendState); @@ -3725,6 +3728,7 @@ bool EntityItemProperties::decodeEntityEditPacket(const unsigned char* data, int READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_RELAY_PARENT_JOINTS, bool, setRelayParentJoints); READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_GROUP_CULLED, bool, setGroupCulled); READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_BLENDSHAPE_COEFFICIENTS, QString, setBlendshapeCoefficients); + READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_USE_ORIGINAL_PIVOT, bool, setUseOriginalPivot); properties.getAnimation().decodeFromEditPacket(propertyFlags, dataAt, processedBytes); } diff --git a/libraries/networking/src/udt/PacketHeaders.h b/libraries/networking/src/udt/PacketHeaders.h index fc74f4459c..5c98cf6fdd 100644 --- a/libraries/networking/src/udt/PacketHeaders.h +++ b/libraries/networking/src/udt/PacketHeaders.h @@ -283,6 +283,7 @@ enum class EntityVersion : PacketVersion { ZoneOcclusion, ModelBlendshapes, TransparentWeb, + UseOriginalPivot, // Add new versions above here NUM_PACKET_TYPE, diff --git a/libraries/render-utils/src/Model.cpp b/libraries/render-utils/src/Model.cpp index 44dbc00f70..521214354e 100644 --- a/libraries/render-utils/src/Model.cpp +++ b/libraries/render-utils/src/Model.cpp @@ -1199,7 +1199,7 @@ glm::vec3 Model::getNaturalDimensions() const { Extents Model::getMeshExtents() const { Extents extents = getUnscaledMeshExtents(); - return { extents.minimum * _scale, extents.maximum * _scale}; + return { extents.minimum * _scale, extents.maximum * _scale }; } Extents Model::getUnscaledMeshExtents() const { From 646a5798e601b68a7d450812f12188b5714ba64d Mon Sep 17 00:00:00 2001 From: Phil <35943148+Phil-Palmer@users.noreply.github.com> Date: Mon, 4 Jan 2021 00:12:57 -0500 Subject: [PATCH 071/152] Apply suggestions from code review Tidying (bracing style, spaces, remove final comma from enum, fix JSDoc comments). Co-authored-by: David Rowe --- interface/src/avatar/MyAvatar.h | 18 ++++++------------ libraries/physics/src/CharacterController.h | 3 +-- 2 files changed, 7 insertions(+), 14 deletions(-) diff --git a/interface/src/avatar/MyAvatar.h b/interface/src/avatar/MyAvatar.h index a411b1d747..77f964ee3c 100644 --- a/interface/src/avatar/MyAvatar.h +++ b/interface/src/avatar/MyAvatar.h @@ -283,8 +283,7 @@ class MyAvatar : public Avatar { * the value.

* @property {number} analogPlusSprintSpeed - The sprint (run) speed of your avatar for the "AnalogPlus" control scheme. * @property {MyAvatar.SitStandModelType} userRecenterModel - Controls avatar leaning and recentering behavior. - *

Deprecated: This property is deprecated and will be removed. If you need it, please contact - * the developers.

+ *

Deprecated: This property is deprecated and will be removed.

* @property {boolean} isInSittingState - true if the user wearing the HMD is determined to be sitting; * false if the user wearing the HMD is determined to be standing. This can affect whether the avatar * is allowed to stand, lean or recenter its footing, depending on user preferences. @@ -416,10 +415,7 @@ class MyAvatar : public Avatar { Q_PROPERTY(float sprintSpeed READ getSprintSpeed WRITE setSprintSpeed NOTIFY sprintSpeedChanged); Q_PROPERTY(bool isInSittingState READ getIsInSittingState WRITE setIsInSittingState); - /**jsdoc - * @deprecated This property is deprecated and will be removed. If you need it, please contact the developers. - */ - Q_PROPERTY(MyAvatar::SitStandModelType userRecenterModel READ getUserRecenterModel WRITE setUserRecenterModel); + Q_PROPERTY(MyAvatar::SitStandModelType userRecenterModel READ getUserRecenterModel WRITE setUserRecenterModel); // Deprecated /**jsdoc * @deprecated This property is deprecated and will be removed. If you need it, please contact the developers. @@ -532,8 +528,7 @@ public: /**jsdoc *

Specifies different avatar leaning and recentering behaviors.

- *

Deprecated: This enumeration is deprecated and will be removed. If you need it, please contact - * the developers

+ *

Deprecated: This type is deprecated and will be removed.

*
ValueNameDescription
* * @@ -574,14 +569,13 @@ public: Q_ENUM(AllowAvatarStandingPreference) // Note: The option strings in setupPreferences (PreferencesDialog.cpp) must match this order. - enum class AllowAvatarLeaningPreference : uint - { + enum class AllowAvatarLeaningPreference : uint { WhenUserIsStanding, Always, Never, AlwaysNoRecenter, // experimental Count, - Default = WhenUserIsStanding, + Default = WhenUserIsStanding }; Q_ENUM(AllowAvatarLeaningPreference) @@ -2981,7 +2975,7 @@ private: bool _centerOfGravityModelEnabled { true }; bool _hmdLeanRecenterEnabled { true }; - bool _hmdCrouchRecenterEnabled{ + bool _hmdCrouchRecenterEnabled { true }; // Is MyAvatar allowed to recenter vertically (stand) when the user is sitting in the real world. bool _sprint { false }; diff --git a/libraries/physics/src/CharacterController.h b/libraries/physics/src/CharacterController.h index 899c99890b..8242ae4b97 100755 --- a/libraries/physics/src/CharacterController.h +++ b/libraries/physics/src/CharacterController.h @@ -53,8 +53,7 @@ const btScalar MIN_CHARACTER_MOTOR_TIMESCALE = 0.05f; class CharacterController : public btCharacterControllerInterface { public: - enum class FollowType : uint8_t - { + enum class FollowType : uint8_t { Rotation, Horizontal, Vertical, From 5d1bd5cc19ee3110349a588351d7c9c18df62fd4 Mon Sep 17 00:00:00 2001 From: Phil Palmer Date: Mon, 4 Jan 2021 00:57:17 -0500 Subject: [PATCH 072/152] * Apply suggestions from code review Fix JSDoc comments and debug messages. --- interface/src/avatar/MyAvatar.cpp | 7 +++---- interface/src/avatar/MyAvatar.h | 14 +++----------- 2 files changed, 6 insertions(+), 15 deletions(-) diff --git a/interface/src/avatar/MyAvatar.cpp b/interface/src/avatar/MyAvatar.cpp index 2f55d32385..908f42c41d 100644 --- a/interface/src/avatar/MyAvatar.cpp +++ b/interface/src/avatar/MyAvatar.cpp @@ -5242,7 +5242,7 @@ bool MyAvatar::getIsInSittingState() const { // Deprecated, will be removed. MyAvatar::SitStandModelType MyAvatar::getUserRecenterModel() const { qCDebug(interfaceapp) - << "MyAvatar.getUserRecenterModel is deprecated and will be removed. If you need it, please contact the developers."; + << "MyAvatar.getUserRecenterModel is deprecated and will be removed."; // The legacy SitStandModelType corresponding to each AllowAvatarLeaningPreference. std::array(AllowAvatarLeaningPreference::Count)> legacySitStandModels = { @@ -5340,7 +5340,7 @@ void MyAvatar::setIsInSittingState(bool isSitting) { // Deprecated, will be removed. void MyAvatar::setUserRecenterModel(MyAvatar::SitStandModelType modelName) { qCDebug(interfaceapp) - << "MyAvatar.setUserRecenterModel is deprecated and will be removed. If you need it, please contact the developers."; + << "MyAvatar.setUserRecenterModel is deprecated and will be removed."; switch (modelName) { case SitStandModelType::ForceSit: @@ -5375,8 +5375,7 @@ void MyAvatar::setAllowAvatarStandingPreference(const MyAvatar::AllowAvatarStand // Deprecated, will be removed. void MyAvatar::setIsSitStandStateLocked(bool isLocked) { Q_UNUSED(isLocked); - qCDebug(interfaceapp) << "MyAvatar.setIsSitStandStateLocked is deprecated and will be removed. If you need it, please " - "contact the developers. See also: MyAvatar.setUserRecenterModel."; + qCDebug(interfaceapp) << "MyAvatar.setIsSitStandStateLocked is deprecated and will be removed."; } // Set the user preference of when the avatar may lean. diff --git a/interface/src/avatar/MyAvatar.h b/interface/src/avatar/MyAvatar.h index 77f964ee3c..3d278cf983 100644 --- a/interface/src/avatar/MyAvatar.h +++ b/interface/src/avatar/MyAvatar.h @@ -291,8 +291,8 @@ class MyAvatar : public Avatar { * sitting / standing state, which is updated when the user next sits or stands. * @property {boolean} isSitStandStateLocked - true to lock the avatar sitting/standing state, i.e., use this * to disable automatically changing state. - *

Deprecated: This property is deprecated and will be removed. If you need it, please contact - * the developers. See also: getUserRecenterModel and setUserRecenterModel.

+ *

Deprecated: This property is deprecated and will be removed. + * See also: getUserRecenterModel and setUserRecenterModel.

* @property {boolean} allowTeleporting - true if teleporting is enabled in the Interface settings, * false if it isn't. Read-only. * @@ -414,16 +414,8 @@ class MyAvatar : public Avatar { Q_PROPERTY(float walkBackwardSpeed READ getWalkBackwardSpeed WRITE setWalkBackwardSpeed NOTIFY walkBackwardSpeedChanged); Q_PROPERTY(float sprintSpeed READ getSprintSpeed WRITE setSprintSpeed NOTIFY sprintSpeedChanged); Q_PROPERTY(bool isInSittingState READ getIsInSittingState WRITE setIsInSittingState); - Q_PROPERTY(MyAvatar::SitStandModelType userRecenterModel READ getUserRecenterModel WRITE setUserRecenterModel); // Deprecated - - /**jsdoc - * @deprecated This property is deprecated and will be removed. If you need it, please contact the developers. - * See also: {@link MyAvatar.getUserRecenterModel|getUserRecenterModel} and - * {@link MyAvatar.setUserRecenterModel|setUserRecenterModel}. - */ - Q_PROPERTY(bool isSitStandStateLocked READ getIsSitStandStateLocked WRITE setIsSitStandStateLocked); - + Q_PROPERTY(bool isSitStandStateLocked READ getIsSitStandStateLocked WRITE setIsSitStandStateLocked); // Deprecated Q_PROPERTY(bool allowTeleporting READ getAllowTeleporting) const QString DOMINANT_LEFT_HAND = "left"; From 1ccdfe37a6dbfabee5dc82ba5bb3788480aad8ed Mon Sep 17 00:00:00 2001 From: HifiExperiments <53453710+HifiExperiments@users.noreply.github.com> Date: Mon, 4 Jan 2021 12:14:35 -0800 Subject: [PATCH 073/152] Update libraries/entities/src/EntityItemProperties.cpp Co-authored-by: David Rowe --- libraries/entities/src/EntityItemProperties.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libraries/entities/src/EntityItemProperties.cpp b/libraries/entities/src/EntityItemProperties.cpp index 7fa1d11d3b..b09c2b3938 100644 --- a/libraries/entities/src/EntityItemProperties.cpp +++ b/libraries/entities/src/EntityItemProperties.cpp @@ -1003,8 +1003,8 @@ EntityPropertyFlags EntityItemProperties::getChangedProperties() const { * @property {string} blendshapeCoefficients - A JSON string of a map of blendshape names to values. Only stores set values. * When editing this property, only coefficients that you are editing will change; it will not explicitly reset other * coefficients. - * @property {boolean} useOriginalPivot=false - If false, the model will be centered based on its content, ignoring any offset - * in the model itself. If true, the model will respect its original offset. + * @property {boolean} useOriginalPivot=false - If false, the model will be centered based on its content, + * ignoring any offset in the model itself. If true, the model will respect its original offset. * @property {string} textures="" - A JSON string of texture name, URL pairs used when rendering the model in place of the * model's original textures. Use a texture name from the originalTextures property to override that texture. * Only the texture names and URLs to be overridden need be specified; original textures are used where there are no From 9f84b8384e730d2ed7860b525a116b0a6b565f07 Mon Sep 17 00:00:00 2001 From: Phil Palmer Date: Mon, 4 Jan 2021 15:49:26 -0500 Subject: [PATCH 074/152] Apply suggestion from code review: fix JSDoc comment. --- interface/src/avatar/MyAvatar.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/interface/src/avatar/MyAvatar.cpp b/interface/src/avatar/MyAvatar.cpp index 908f42c41d..0f66f3bb41 100644 --- a/interface/src/avatar/MyAvatar.cpp +++ b/interface/src/avatar/MyAvatar.cpp @@ -5257,8 +5257,7 @@ MyAvatar::SitStandModelType MyAvatar::getUserRecenterModel() const { // Deprecated, will be removed. bool MyAvatar::getIsSitStandStateLocked() const { - qCDebug(interfaceapp) << "MyAvatar.getIsSitStandStateLocked is deprecated and will be removed. If you need it, please " - "contact the developers. See also: MyAvatar.getUserRecenterModel."; + qCDebug(interfaceapp) << "MyAvatar.getIsSitStandStateLocked is deprecated and will be removed."; // In the old code, the record of the user's sit/stand state was locked except when using // SitStandModelType::Auto or SitStandModelType::DisableHMDLean. From a54a40dc2cb1555b4973489d83e57d449bc19c9c Mon Sep 17 00:00:00 2001 From: Phil Palmer Date: Mon, 4 Jan 2021 15:49:26 -0500 Subject: [PATCH 075/152] Apply suggestion from code review: fix debug message. --- interface/src/avatar/MyAvatar.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/interface/src/avatar/MyAvatar.cpp b/interface/src/avatar/MyAvatar.cpp index 908f42c41d..0f66f3bb41 100644 --- a/interface/src/avatar/MyAvatar.cpp +++ b/interface/src/avatar/MyAvatar.cpp @@ -5257,8 +5257,7 @@ MyAvatar::SitStandModelType MyAvatar::getUserRecenterModel() const { // Deprecated, will be removed. bool MyAvatar::getIsSitStandStateLocked() const { - qCDebug(interfaceapp) << "MyAvatar.getIsSitStandStateLocked is deprecated and will be removed. If you need it, please " - "contact the developers. See also: MyAvatar.getUserRecenterModel."; + qCDebug(interfaceapp) << "MyAvatar.getIsSitStandStateLocked is deprecated and will be removed."; // In the old code, the record of the user's sit/stand state was locked except when using // SitStandModelType::Auto or SitStandModelType::DisableHMDLean. From 12095fed96eff31ade799f75863f34e996cd9d8b Mon Sep 17 00:00:00 2001 From: Phil Palmer Date: Tue, 5 Jan 2021 00:05:11 -0500 Subject: [PATCH 076/152] Disable z-write for fonts, grid entities and teleport beams as suggested in the review here: https://github.com/vircadia/vircadia/pull/953#pullrequestreview-560779456 --- interface/src/raypick/ParabolaPointer.cpp | 2 +- libraries/render-utils/src/GeometryCache.cpp | 2 +- libraries/render-utils/src/text/Font.cpp | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/interface/src/raypick/ParabolaPointer.cpp b/interface/src/raypick/ParabolaPointer.cpp index 216248f8b5..f9babcd999 100644 --- a/interface/src/raypick/ParabolaPointer.cpp +++ b/interface/src/raypick/ParabolaPointer.cpp @@ -415,7 +415,7 @@ gpu::PipelinePointer ParabolaPointer::RenderState::ParabolaRenderItem::getParabo for (auto& key : keys) { gpu::StatePointer state = gpu::StatePointer(new gpu::State()); - state->setDepthTest(true, true, gpu::LESS_EQUAL); + state->setDepthTest(true, false, gpu::LESS_EQUAL); if (std::get<0>(key)) { PrepareStencil::testMask(*state); } else { diff --git a/libraries/render-utils/src/GeometryCache.cpp b/libraries/render-utils/src/GeometryCache.cpp index 8a483a0352..e5c6178a83 100644 --- a/libraries/render-utils/src/GeometryCache.cpp +++ b/libraries/render-utils/src/GeometryCache.cpp @@ -2027,7 +2027,7 @@ void GeometryCache::useGridPipeline(gpu::Batch& batch, GridBuffer gridBuffer, bo for (auto& key : keys) { gpu::StatePointer state = gpu::StatePointer(new gpu::State()); - state->setDepthTest(true, true, gpu::LESS_EQUAL); + state->setDepthTest(true, false, gpu::LESS_EQUAL); if (std::get<0>(key)) { PrepareStencil::testMask(*state); } else { diff --git a/libraries/render-utils/src/text/Font.cpp b/libraries/render-utils/src/text/Font.cpp index a30bbad0e5..e0b3a020fe 100644 --- a/libraries/render-utils/src/text/Font.cpp +++ b/libraries/render-utils/src/text/Font.cpp @@ -276,7 +276,7 @@ void Font::setupGPU() { for (auto& key : keys) { auto state = std::make_shared(); state->setCullMode(gpu::State::CULL_BACK); - state->setDepthTest(true, true, gpu::LESS_EQUAL); + state->setDepthTest(true, false, gpu::LESS_EQUAL); state->setBlendFunction(std::get<0>(key), gpu::State::SRC_ALPHA, gpu::State::BLEND_OP_ADD, gpu::State::INV_SRC_ALPHA, gpu::State::FACTOR_ALPHA, gpu::State::BLEND_OP_ADD, gpu::State::ONE); From 1cdc3610c3a41a89681545202a84fa714a8bac8e Mon Sep 17 00:00:00 2001 From: Phil Palmer Date: Tue, 5 Jan 2021 00:05:11 -0500 Subject: [PATCH 077/152] Disable z-write for transparent fonts, grid entities and teleport beams as suggested in the review here: https://github.com/vircadia/vircadia/pull/953#pullrequestreview-560779456 --- interface/src/raypick/ParabolaPointer.cpp | 2 +- libraries/render-utils/src/GeometryCache.cpp | 2 +- libraries/render-utils/src/text/Font.cpp | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/interface/src/raypick/ParabolaPointer.cpp b/interface/src/raypick/ParabolaPointer.cpp index 216248f8b5..2915793c40 100644 --- a/interface/src/raypick/ParabolaPointer.cpp +++ b/interface/src/raypick/ParabolaPointer.cpp @@ -415,7 +415,7 @@ gpu::PipelinePointer ParabolaPointer::RenderState::ParabolaRenderItem::getParabo for (auto& key : keys) { gpu::StatePointer state = gpu::StatePointer(new gpu::State()); - state->setDepthTest(true, true, gpu::LESS_EQUAL); + state->setDepthTest(true, !std::get<0>(key), gpu::LESS_EQUAL); if (std::get<0>(key)) { PrepareStencil::testMask(*state); } else { diff --git a/libraries/render-utils/src/GeometryCache.cpp b/libraries/render-utils/src/GeometryCache.cpp index 8a483a0352..325e228120 100644 --- a/libraries/render-utils/src/GeometryCache.cpp +++ b/libraries/render-utils/src/GeometryCache.cpp @@ -2027,7 +2027,7 @@ void GeometryCache::useGridPipeline(gpu::Batch& batch, GridBuffer gridBuffer, bo for (auto& key : keys) { gpu::StatePointer state = gpu::StatePointer(new gpu::State()); - state->setDepthTest(true, true, gpu::LESS_EQUAL); + state->setDepthTest(true, !std::get<0>(key), gpu::LESS_EQUAL); if (std::get<0>(key)) { PrepareStencil::testMask(*state); } else { diff --git a/libraries/render-utils/src/text/Font.cpp b/libraries/render-utils/src/text/Font.cpp index a30bbad0e5..425e4f2da5 100644 --- a/libraries/render-utils/src/text/Font.cpp +++ b/libraries/render-utils/src/text/Font.cpp @@ -276,7 +276,7 @@ void Font::setupGPU() { for (auto& key : keys) { auto state = std::make_shared(); state->setCullMode(gpu::State::CULL_BACK); - state->setDepthTest(true, true, gpu::LESS_EQUAL); + state->setDepthTest(true, !std::get<0>(key), gpu::LESS_EQUAL); state->setBlendFunction(std::get<0>(key), gpu::State::SRC_ALPHA, gpu::State::BLEND_OP_ADD, gpu::State::INV_SRC_ALPHA, gpu::State::FACTOR_ALPHA, gpu::State::BLEND_OP_ADD, gpu::State::ONE); From aab5b22e25cb186c53e5d33078fcbe8a48bcc304 Mon Sep 17 00:00:00 2001 From: Dale Glass Date: Sun, 27 Dec 2020 22:35:30 +0100 Subject: [PATCH 078/152] Skip duplicated log entries This helps with log flooding. Successive repeated log messages will be skipped and counted, the count will be output when a different message is logged. A new option of 'keep_repeats' has been added to VIRCADIA_LOG_OPTIONS to disable this. --- libraries/shared/src/LogHandler.cpp | 15 ++++++++++++++- libraries/shared/src/LogHandler.h | 5 +++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/libraries/shared/src/LogHandler.cpp b/libraries/shared/src/LogHandler.cpp index 72d53f0bcb..098e5e9a80 100644 --- a/libraries/shared/src/LogHandler.cpp +++ b/libraries/shared/src/LogHandler.cpp @@ -64,6 +64,8 @@ LogHandler::LogHandler() { _shouldOutputThreadID = true; } else if (option == "milliseconds") { _shouldDisplayMilliseconds = true; + } else if (option == "keep_repeats") { + _keepRepeats = true; } else if (option != "") { fprintf(stdout, "Unrecognized option in VIRCADIA_LOG_OPTIONS: '%s'\n", option.toUtf8().constData()); } @@ -202,7 +204,18 @@ QString LogHandler::printMessage(LogMsgType type, const QMessageLogContext& cont resetColor = colorReset(); } - fprintf(stdout, "%s%s%s", color, qPrintable(logMessage), resetColor); + if (_keepRepeats || _previousMessage != message) { + if (_repeatCount > 0) { + fprintf(stdout, "[Previous message was repeated %i times]\n", _repeatCount); + } + + fprintf(stdout, "%s%s%s", color, qPrintable(logMessage), resetColor); + _repeatCount = 0; + } else { + _repeatCount++; + } + + _previousMessage = message; #ifdef Q_OS_WIN // On windows, this will output log lines into the Visual Studio "output" tab OutputDebugStringA(qPrintable(logMessage)); diff --git a/libraries/shared/src/LogHandler.h b/libraries/shared/src/LogHandler.h index 7bd5c69c63..71df2a4189 100644 --- a/libraries/shared/src/LogHandler.h +++ b/libraries/shared/src/LogHandler.h @@ -67,6 +67,11 @@ private: bool _shouldOutputThreadID { false }; bool _shouldDisplayMilliseconds { false }; bool _useColor { false }; + bool _keepRepeats { false }; + + QString _previousMessage; + int _repeatCount { 0 }; + int _currentMessageID { 0 }; struct RepeatedMessageRecord { From bef0c79b677ab4287068465383a7f918873396e1 Mon Sep 17 00:00:00 2001 From: HifiExperiments Date: Sun, 10 Jan 2021 16:03:04 -0800 Subject: [PATCH 079/152] billboard mode working on most entity types --- interface/src/Application.cpp | 15 ++++- .../src/RenderableGizmoEntityItem.cpp | 3 +- .../src/RenderableGridEntityItem.cpp | 2 + .../src/RenderableImageEntityItem.cpp | 3 +- .../src/RenderableLineEntityItem.cpp | 4 +- .../src/RenderableMaterialEntityItem.cpp | 3 +- .../RenderableParticleEffectEntityItem.cpp | 1 - .../src/RenderablePolyLineEntityItem.cpp | 3 +- .../src/RenderablePolyVoxEntityItem.cpp | 64 +++---------------- .../src/RenderablePolyVoxEntityItem.h | 10 +-- .../src/RenderableShapeEntityItem.cpp | 7 +- .../src/RenderableTextEntityItem.cpp | 6 +- .../src/RenderableWebEntityItem.cpp | 3 +- libraries/entities/src/EntityItem.cpp | 2 +- libraries/entities/src/EntityItem.h | 6 +- libraries/entities/src/EntityTreeElement.cpp | 30 ++++++--- libraries/entities/src/GizmoEntityItem.cpp | 9 ++- libraries/entities/src/GridEntityItem.cpp | 54 ++++++++++++++++ libraries/entities/src/GridEntityItem.h | 10 +++ libraries/entities/src/ImageEntityItem.cpp | 8 +-- libraries/entities/src/ImageEntityItem.h | 2 +- libraries/entities/src/PolyVoxEntityItem.cpp | 18 ++++-- libraries/entities/src/PolyVoxEntityItem.h | 4 +- libraries/entities/src/ShapeEntityItem.cpp | 30 +++++++-- libraries/entities/src/TextEntityItem.cpp | 8 +-- libraries/entities/src/TextEntityItem.h | 2 +- libraries/entities/src/WebEntityItem.cpp | 8 +-- libraries/entities/src/WebEntityItem.h | 2 +- 28 files changed, 188 insertions(+), 129 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index cc46d8591b..c1911151d8 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -2455,13 +2455,18 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo DependencyManager::get()->setPrecisionPicking(rayPickID, value); }); - EntityItem::setBillboardRotationOperator([](const glm::vec3& position, const glm::quat& rotation, BillboardMode billboardMode, const glm::vec3& frustumPos) { + EntityItem::setBillboardRotationOperator([](const glm::vec3& position, const glm::quat& rotation, BillboardMode billboardMode, const glm::vec3& frustumPos, bool rotate90x) { + const glm::quat ROTATE_90X = glm::angleAxis(-(float)M_PI_2, Vectors::RIGHT); if (billboardMode == BillboardMode::YAW) { //rotate about vertical to face the camera glm::vec3 dPosition = frustumPos - position; // If x and z are 0, atan(x, z) is undefined, so default to 0 degrees float yawRotation = dPosition.x == 0.0f && dPosition.z == 0.0f ? 0.0f : glm::atan(dPosition.x, dPosition.z); - return glm::quat(glm::vec3(0.0f, yawRotation, 0.0f)); + glm::quat result = glm::quat(glm::vec3(0.0f, yawRotation, 0.0f)); + if (rotate90x) { + result *= ROTATE_90X; + } + return result; } else if (billboardMode == BillboardMode::FULL) { // use the referencial from the avatar, y isn't always up glm::vec3 avatarUP = DependencyManager::get()->getMyAvatar()->getWorldOrientation() * Vectors::UP; @@ -2470,7 +2475,11 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo // make sure s is not NaN for any component if (glm::length2(s) > 0.0f) { - return glm::conjugate(glm::toQuat(glm::lookAt(frustumPos, position, avatarUP))); + glm::quat result = glm::conjugate(glm::toQuat(glm::lookAt(frustumPos, position, avatarUP))); + if (rotate90x) { + result *= ROTATE_90X; + } + return result; } } return rotation; diff --git a/libraries/entities-renderer/src/RenderableGizmoEntityItem.cpp b/libraries/entities-renderer/src/RenderableGizmoEntityItem.cpp index caf5bde729..368aa59b5e 100644 --- a/libraries/entities-renderer/src/RenderableGizmoEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableGizmoEntityItem.cpp @@ -254,7 +254,8 @@ void GizmoEntityRenderer::doRender(RenderArgs* args) { geometryCache->bindSimpleProgram(batch, false, transparent, wireframe, true, true, forward, graphics::MaterialKey::CULL_NONE); - transform.setRotation(EntityItem::getBillboardRotation(transform.getTranslation(), transform.getRotation(), _billboardMode, args->getViewFrustum().getPosition())); + transform.setRotation(EntityItem::getBillboardRotation(transform.getTranslation(), transform.getRotation(), _billboardMode, + args->_renderMode == RenderArgs::RenderMode::SHADOW_RENDER_MODE ? EntityItem::getPrimaryViewFrustumPosition() : args->getViewFrustum().getPosition(), true)); batch.setModelTransform(transform); // Background circle diff --git a/libraries/entities-renderer/src/RenderableGridEntityItem.cpp b/libraries/entities-renderer/src/RenderableGridEntityItem.cpp index 87b916e41b..777ddda934 100644 --- a/libraries/entities-renderer/src/RenderableGridEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableGridEntityItem.cpp @@ -103,6 +103,8 @@ void GridEntityRenderer::doRender(RenderArgs* args) { } else { transform.setTranslation(renderTransform.getTranslation()); } + transform.setRotation(EntityItem::getBillboardRotation(transform.getTranslation(), transform.getRotation(), _billboardMode, + args->_renderMode == RenderArgs::RenderMode::SHADOW_RENDER_MODE ? EntityItem::getPrimaryViewFrustumPosition() : args->getViewFrustum().getPosition())); batch->setModelTransform(transform); auto minCorner = glm::vec2(-0.5f, -0.5f); diff --git a/libraries/entities-renderer/src/RenderableImageEntityItem.cpp b/libraries/entities-renderer/src/RenderableImageEntityItem.cpp index 878fcad6e4..34f48e25f6 100644 --- a/libraries/entities-renderer/src/RenderableImageEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableImageEntityItem.cpp @@ -97,7 +97,8 @@ void ImageEntityRenderer::doRender(RenderArgs* args) { Q_ASSERT(args->_batch); gpu::Batch* batch = args->_batch; - transform.setRotation(EntityItem::getBillboardRotation(transform.getTranslation(), transform.getRotation(), _billboardMode, args->getViewFrustum().getPosition())); + transform.setRotation(EntityItem::getBillboardRotation(transform.getTranslation(), transform.getRotation(), _billboardMode, + args->_renderMode == RenderArgs::RenderMode::SHADOW_RENDER_MODE ? EntityItem::getPrimaryViewFrustumPosition() : args->getViewFrustum().getPosition())); batch->setModelTransform(transform); batch->setResourceTexture(0, _texture->getGPUTexture()); diff --git a/libraries/entities-renderer/src/RenderableLineEntityItem.cpp b/libraries/entities-renderer/src/RenderableLineEntityItem.cpp index 1964f1bdda..f8a3230f86 100644 --- a/libraries/entities-renderer/src/RenderableLineEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableLineEntityItem.cpp @@ -47,8 +47,8 @@ void LineEntityRenderer::doRender(RenderArgs* args) { const auto& modelTransform = getModelTransform(); Transform transform = Transform(); transform.setTranslation(modelTransform.getTranslation()); - transform.setRotation(modelTransform.getRotation()); - transform.setRotation(EntityItem::getBillboardRotation(transform.getTranslation(), transform.getRotation(), _billboardMode, args->getViewFrustum().getPosition())); + transform.setRotation(EntityItem::getBillboardRotation(modelTransform.getTranslation(), modelTransform.getRotation(), _billboardMode, + args->_renderMode == RenderArgs::RenderMode::SHADOW_RENDER_MODE ? EntityItem::getPrimaryViewFrustumPosition() : args->getViewFrustum().getPosition())); batch.setModelTransform(transform); if (_linePoints.size() > 1) { DependencyManager::get()->bindSimpleProgram(batch, false, false, false, false, true, diff --git a/libraries/entities-renderer/src/RenderableMaterialEntityItem.cpp b/libraries/entities-renderer/src/RenderableMaterialEntityItem.cpp index f7631f3e35..ac28dd517c 100644 --- a/libraries/entities-renderer/src/RenderableMaterialEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableMaterialEntityItem.cpp @@ -272,7 +272,8 @@ void MaterialEntityRenderer::doRender(RenderArgs* args) { proceduralRender = true; } - transform.setRotation(EntityItem::getBillboardRotation(transform.getTranslation(), transform.getRotation(), _billboardMode, args->getViewFrustum().getPosition())); + transform.setRotation(EntityItem::getBillboardRotation(transform.getTranslation(), transform.getRotation(), _billboardMode, + args->_renderMode == RenderArgs::RenderMode::SHADOW_RENDER_MODE ? EntityItem::getPrimaryViewFrustumPosition() : args->getViewFrustum().getPosition())); batch.setModelTransform(transform); if (!proceduralRender) { diff --git a/libraries/entities-renderer/src/RenderableParticleEffectEntityItem.cpp b/libraries/entities-renderer/src/RenderableParticleEffectEntityItem.cpp index 91f922c7c7..4fe6bc8f93 100644 --- a/libraries/entities-renderer/src/RenderableParticleEffectEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableParticleEffectEntityItem.cpp @@ -455,7 +455,6 @@ void ParticleEffectEntityRenderer::doRender(RenderArgs* args) { color.finish = EntityRenderer::calculatePulseColor(_particleProperties.getColorFinish(), _pulseProperties, _created); color.spread = EntityRenderer::calculatePulseColor(_particleProperties.getColorSpread(), _pulseProperties, _created); - transform.setRotation(EntityItem::getBillboardRotation(transform.getTranslation(), transform.getRotation(), _billboardMode, args->getViewFrustum().getPosition())); batch.setModelTransform(transform); batch.setUniformBuffer(0, _uniformBuffer); diff --git a/libraries/entities-renderer/src/RenderablePolyLineEntityItem.cpp b/libraries/entities-renderer/src/RenderablePolyLineEntityItem.cpp index 47b1186c59..e10e7a845c 100644 --- a/libraries/entities-renderer/src/RenderablePolyLineEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderablePolyLineEntityItem.cpp @@ -325,7 +325,8 @@ void PolyLineEntityRenderer::doRender(RenderArgs* args) { buildPipelines(); } - transform.setRotation(EntityItem::getBillboardRotation(transform.getTranslation(), transform.getRotation(), _billboardMode, args->getViewFrustum().getPosition())); + transform.setRotation(EntityItem::getBillboardRotation(transform.getTranslation(), transform.getRotation(), _billboardMode, + args->_renderMode == RenderArgs::RenderMode::SHADOW_RENDER_MODE ? EntityItem::getPrimaryViewFrustumPosition() : args->getViewFrustum().getPosition())); batch.setModelTransform(transform); batch.setPipeline(_pipelines[{args->_renderMethod, isTransparent()}]); diff --git a/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.cpp b/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.cpp index f0a6684654..f17f775493 100644 --- a/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.cpp @@ -238,53 +238,6 @@ void RenderablePolyVoxEntityItem::setVoxelSurfaceStyle(PolyVoxSurfaceStyle voxel startUpdates(); } -glm::vec3 RenderablePolyVoxEntityItem::getSurfacePositionAdjustment() const { - glm::vec3 result; - withReadLock([&] { - glm::vec3 scale = getScaledDimensions() / _voxelVolumeSize; // meters / voxel-units - if (isEdged(_voxelSurfaceStyle)) { - result = scale / -2.0f; - } - return scale / 2.0f; - }); - return result; -} - -glm::mat4 RenderablePolyVoxEntityItem::voxelToLocalMatrix() const { - glm::vec3 voxelVolumeSize; - withReadLock([&] { - voxelVolumeSize = _voxelVolumeSize; - }); - - glm::vec3 dimensions = getScaledDimensions(); - glm::vec3 scale = dimensions / voxelVolumeSize; // meters / voxel-units - bool success; // TODO -- Does this actually have to happen in world space? - glm::vec3 center = getCenterPosition(success); // this handles registrationPoint changes - glm::vec3 position = getWorldPosition(success); - glm::vec3 positionToCenter = center - position; - - positionToCenter -= dimensions * Vectors::HALF - getSurfacePositionAdjustment(); - glm::mat4 centerToCorner = glm::translate(glm::mat4(), positionToCenter); - glm::mat4 scaled = glm::scale(centerToCorner, scale); - return scaled; -} - -glm::mat4 RenderablePolyVoxEntityItem::localToVoxelMatrix() const { - glm::mat4 localToModelMatrix = glm::inverse(voxelToLocalMatrix()); - return localToModelMatrix; -} - -glm::mat4 RenderablePolyVoxEntityItem::voxelToWorldMatrix() const { - glm::mat4 rotation = glm::mat4_cast(getWorldOrientation()); - glm::mat4 translation = glm::translate(getWorldPosition()); - return translation * rotation * voxelToLocalMatrix(); -} - -glm::mat4 RenderablePolyVoxEntityItem::worldToVoxelMatrix() const { - glm::mat4 worldToModelMatrix = glm::inverse(voxelToWorldMatrix()); - return worldToModelMatrix; -} - bool RenderablePolyVoxEntityItem::setVoxel(const ivec3& v, uint8_t toValue) { if (_locked) { return false; @@ -582,7 +535,7 @@ bool RenderablePolyVoxEntityItem::findDetailedRayIntersection(const glm::vec3& o return true; } - glm::mat4 wtvMatrix = worldToVoxelMatrix(); + glm::mat4 wtvMatrix = worldToVoxelMatrix(true); glm::vec3 normDirection = glm::normalize(direction); // the PolyVox ray intersection code requires a near and far point. @@ -623,7 +576,7 @@ bool RenderablePolyVoxEntityItem::findDetailedParabolaIntersection(const glm::ve return true; } - glm::mat4 wtvMatrix = worldToVoxelMatrix(); + glm::mat4 wtvMatrix = worldToVoxelMatrix(true); glm::vec4 originInVoxel = wtvMatrix * glm::vec4(origin, 1.0f); glm::vec4 velocityInVoxel = wtvMatrix * glm::vec4(velocity, 0.0f); glm::vec4 accelerationInVoxel = wtvMatrix * glm::vec4(acceleration, 0.0f); @@ -1803,7 +1756,7 @@ ShapeKey PolyVoxEntityRenderer::getShapeKey() { bool PolyVoxEntityRenderer::needsRenderUpdateFromTypedEntity(const TypedEntityPointer& entity) const { if (resultWithReadLock([&] { - if (entity->voxelToWorldMatrix() != _lastVoxelToWorldMatrix) { + if (entity->voxelToLocalMatrix() != _lastVoxelToLocalMatrix) { return true; } @@ -1829,7 +1782,9 @@ void PolyVoxEntityRenderer::doRenderUpdateSynchronousTyped(const ScenePointer& s } void PolyVoxEntityRenderer::doRenderUpdateAsynchronousTyped(const TypedEntityPointer& entity) { - _lastVoxelToWorldMatrix = entity->voxelToWorldMatrix(); + _lastVoxelToLocalMatrix = entity->voxelToLocalMatrix(); + _position = entity->getWorldPosition(); + _orientation = entity->getWorldOrientation(); _lastVoxelVolumeSize = entity->getVoxelVolumeSize(); _params->setSubData(0, vec4(_lastVoxelVolumeSize, 0.0)); graphics::MeshPointer newMesh; @@ -1862,17 +1817,18 @@ void PolyVoxEntityRenderer::doRender(RenderArgs* args) { return; } - PerformanceTimer perfTimer("RenderablePolyVoxEntityItem::render"); gpu::Batch& batch = *args->_batch; - Transform transform(_lastVoxelToWorldMatrix); + glm::mat4 rotation = glm::mat4_cast(EntityItem::getBillboardRotation(_position, _orientation, _billboardMode, + args->_renderMode == RenderArgs::RenderMode::SHADOW_RENDER_MODE ? EntityItem::getPrimaryViewFrustumPosition() : args->getViewFrustum().getPosition())); + Transform transform(glm::translate(_position) * rotation * _lastVoxelToLocalMatrix); batch.setModelTransform(transform); + batch.setInputFormat(_vertexFormat); batch.setInputBuffer(gpu::Stream::POSITION, _mesh->getVertexBuffer()._buffer, 0, sizeof(PolyVox::PositionMaterialNormal)); - // TODO -- should we be setting this? // batch.setInputBuffer(gpu::Stream::NORMAL, mesh->getVertexBuffer()._buffer, // 12, diff --git a/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.h b/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.h index 825b4429cd..d4bcc4d19f 100644 --- a/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.h +++ b/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.h @@ -83,12 +83,6 @@ public: virtual void setVoxelVolumeSize(const glm::vec3& voxelVolumeSize) override; virtual void setVoxelSurfaceStyle(PolyVoxSurfaceStyle voxelSurfaceStyle) override; - glm::vec3 getSurfacePositionAdjustment() const; - glm::mat4 voxelToWorldMatrix() const; - glm::mat4 worldToVoxelMatrix() const; - glm::mat4 voxelToLocalMatrix() const; - glm::mat4 localToVoxelMatrix() const; - virtual ShapeType getShapeType() const override; virtual bool isReadyToComputeShape() const override; virtual void computeShapeInfo(ShapeInfo& info) override; @@ -226,7 +220,9 @@ private: gpu::BufferPointer _params; std::array _xyzTextures; glm::vec3 _lastVoxelVolumeSize; - glm::mat4 _lastVoxelToWorldMatrix; + glm::mat4 _lastVoxelToLocalMatrix; + glm::vec3 _position; + glm::quat _orientation; PolyVoxEntityItem::PolyVoxSurfaceStyle _lastSurfaceStyle { PolyVoxEntityItem::SURFACE_MARCHING_CUBES }; std::array _xyzTextureUrls; }; diff --git a/libraries/entities-renderer/src/RenderableShapeEntityItem.cpp b/libraries/entities-renderer/src/RenderableShapeEntityItem.cpp index 87dbbd068b..f1c73dbeed 100644 --- a/libraries/entities-renderer/src/RenderableShapeEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableShapeEntityItem.cpp @@ -55,6 +55,7 @@ void ShapeEntityRenderer::doRenderUpdateSynchronousTyped(const ScenePointer& sce void* key = (void*)this; AbstractViewStateInterface::instance()->pushPostUpdateLambda(key, [this, entity] { withWriteLock([&] { + _shape = entity->getShape(); _position = entity->getWorldPosition(); _dimensions = entity->getUnscaledDimensions(); // get unscaled to avoid scaling twice _orientation = entity->getWorldOrientation(); @@ -69,7 +70,6 @@ void ShapeEntityRenderer::doRenderUpdateSynchronousTyped(const ScenePointer& sce } void ShapeEntityRenderer::doRenderUpdateAsynchronousTyped(const TypedEntityPointer& entity) { - _shape = entity->getShape(); _pulseProperties = entity->getPulseProperties(); bool materialChanged = false; @@ -238,7 +238,10 @@ void ShapeEntityRenderer::doRender(RenderArgs* args) { return; } - transform.setRotation(EntityItem::getBillboardRotation(transform.getTranslation(), transform.getRotation(), _billboardMode, args->getViewFrustum().getPosition())); + transform.setRotation(EntityItem::getBillboardRotation(transform.getTranslation(), transform.getRotation(), _billboardMode, + args->_renderMode == RenderArgs::RenderMode::SHADOW_RENDER_MODE ? EntityItem::getPrimaryViewFrustumPosition() : args->getViewFrustum().getPosition(), + _shape < entity::Shape::Cube || _shape > entity::Shape::Icosahedron)); + batch.setModelTransform(transform); if (pipelineType == Pipeline::PROCEDURAL) { auto procedural = std::static_pointer_cast(materials.top().material); diff --git a/libraries/entities-renderer/src/RenderableTextEntityItem.cpp b/libraries/entities-renderer/src/RenderableTextEntityItem.cpp index acbbb57bd4..2be84110d6 100644 --- a/libraries/entities-renderer/src/RenderableTextEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableTextEntityItem.cpp @@ -131,7 +131,8 @@ void TextEntityRenderer::doRender(RenderArgs* args) { return; } - transform.setRotation(EntityItem::getBillboardRotation(transform.getTranslation(), transform.getRotation(), _billboardMode, args->getViewFrustum().getPosition())); + transform.setRotation(EntityItem::getBillboardRotation(transform.getTranslation(), transform.getRotation(), _billboardMode, + args->_renderMode == RenderArgs::RenderMode::SHADOW_RENDER_MODE ? EntityItem::getPrimaryViewFrustumPosition() : args->getViewFrustum().getPosition())); batch.setModelTransform(transform); auto geometryCache = DependencyManager::get(); @@ -312,7 +313,8 @@ void entities::TextPayload::render(RenderArgs* args) { return; } - modelTransform.setRotation(EntityItem::getBillboardRotation(modelTransform.getTranslation(), modelTransform.getRotation(), textRenderable->_billboardMode, args->getViewFrustum().getPosition())); + modelTransform.setRotation(EntityItem::getBillboardRotation(modelTransform.getTranslation(), modelTransform.getRotation(), textRenderable->_billboardMode, + args->_renderMode == RenderArgs::RenderMode::SHADOW_RENDER_MODE ? EntityItem::getPrimaryViewFrustumPosition() : args->getViewFrustum().getPosition())); float scale = textRenderable->_lineHeight / textRenderer->getFontSize(); modelTransform.postTranslate(glm::vec3(-0.5, 0.5, 1.0f + EPSILON / dimensions.z)); diff --git a/libraries/entities-renderer/src/RenderableWebEntityItem.cpp b/libraries/entities-renderer/src/RenderableWebEntityItem.cpp index 93d1b9974e..6c6215f69d 100644 --- a/libraries/entities-renderer/src/RenderableWebEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableWebEntityItem.cpp @@ -302,7 +302,8 @@ void WebEntityRenderer::doRender(RenderArgs* args) { batch.setResourceTexture(0, _texture); - transform.setRotation(EntityItem::getBillboardRotation(transform.getTranslation(), transform.getRotation(), _billboardMode, args->getViewFrustum().getPosition())); + transform.setRotation(EntityItem::getBillboardRotation(transform.getTranslation(), transform.getRotation(), _billboardMode, + args->_renderMode == RenderArgs::RenderMode::SHADOW_RENDER_MODE ? EntityItem::getPrimaryViewFrustumPosition() : args->getViewFrustum().getPosition())); batch.setModelTransform(transform); // Turn off jitter for these entities diff --git a/libraries/entities/src/EntityItem.cpp b/libraries/entities/src/EntityItem.cpp index 657d778090..f33838d146 100644 --- a/libraries/entities/src/EntityItem.cpp +++ b/libraries/entities/src/EntityItem.cpp @@ -51,7 +51,7 @@ int EntityItem::_maxActionsDataSize = 800; quint64 EntityItem::_rememberDeletedActionTime = 20 * USECS_PER_SECOND; QString EntityItem::_marketplacePublicKey; -std::function EntityItem::_getBillboardRotationOperator = [](const glm::vec3&, const glm::quat& rotation, BillboardMode, const glm::vec3&) { return rotation; }; +std::function EntityItem::_getBillboardRotationOperator = [](const glm::vec3&, const glm::quat& rotation, BillboardMode, const glm::vec3&, bool) { return rotation; }; std::function EntityItem::_getPrimaryViewFrustumPositionOperator = []() { return glm::vec3(0.0f); }; EntityItem::EntityItem(const EntityItemID& entityItemID) : diff --git a/libraries/entities/src/EntityItem.h b/libraries/entities/src/EntityItem.h index 69b9abe376..ad3429c0b6 100644 --- a/libraries/entities/src/EntityItem.h +++ b/libraries/entities/src/EntityItem.h @@ -572,8 +572,8 @@ public: virtual void removeGrab(GrabPointer grab) override; virtual void disableGrab(GrabPointer grab) override; - static void setBillboardRotationOperator(std::function getBillboardRotationOperator) { _getBillboardRotationOperator = getBillboardRotationOperator; } - static glm::quat getBillboardRotation(const glm::vec3& position, const glm::quat& rotation, BillboardMode billboardMode, const glm::vec3& frustumPos) { return _getBillboardRotationOperator(position, rotation, billboardMode, frustumPos); } + static void setBillboardRotationOperator(std::function getBillboardRotationOperator) { _getBillboardRotationOperator = getBillboardRotationOperator; } + static glm::quat getBillboardRotation(const glm::vec3& position, const glm::quat& rotation, BillboardMode billboardMode, const glm::vec3& frustumPos, bool rotate90x = false) { return _getBillboardRotationOperator(position, rotation, billboardMode, frustumPos, rotate90x); } static void setPrimaryViewFrustumPositionOperator(std::function getPrimaryViewFrustumPositionOperator) { _getPrimaryViewFrustumPositionOperator = getPrimaryViewFrustumPositionOperator; } static glm::vec3 getPrimaryViewFrustumPosition() { return _getPrimaryViewFrustumPositionOperator(); } @@ -788,7 +788,7 @@ protected: mutable bool _needsRenderUpdate { false }; private: - static std::function _getBillboardRotationOperator; + static std::function _getBillboardRotationOperator; static std::function _getPrimaryViewFrustumPositionOperator; }; diff --git a/libraries/entities/src/EntityTreeElement.cpp b/libraries/entities/src/EntityTreeElement.cpp index 9af0bbfdb6..6e446630ee 100644 --- a/libraries/entities/src/EntityTreeElement.cpp +++ b/libraries/entities/src/EntityTreeElement.cpp @@ -219,8 +219,10 @@ EntityItemID EntityTreeElement::evalDetailedRayIntersection(const glm::vec3& ori } // extents is the entity relative, scaled, centered extents of the entity - glm::mat4 rotation = glm::mat4_cast(entity->getWorldOrientation()); - glm::mat4 translation = glm::translate(entity->getWorldPosition()); + glm::vec3 position = entity->getWorldPosition(); + glm::mat4 translation = glm::translate(position); + glm::quat orientation = entity->getWorldOrientation(); + glm::mat4 rotation = glm::mat4_cast(EntityItem::getBillboardRotation(position, orientation, entity->getBillboardMode(), EntityItem::getPrimaryViewFrustumPosition())); glm::mat4 entityToWorldMatrix = translation * rotation; glm::mat4 worldToEntityMatrix = glm::inverse(entityToWorldMatrix); @@ -368,8 +370,10 @@ EntityItemID EntityTreeElement::evalDetailedParabolaIntersection(const glm::vec3 } // extents is the entity relative, scaled, centered extents of the entity - glm::mat4 rotation = glm::mat4_cast(entity->getWorldOrientation()); - glm::mat4 translation = glm::translate(entity->getWorldPosition()); + glm::vec3 position = entity->getWorldPosition(); + glm::mat4 translation = glm::translate(position); + glm::quat orientation = entity->getWorldOrientation(); + glm::mat4 rotation = glm::mat4_cast(EntityItem::getBillboardRotation(position, orientation, entity->getBillboardMode(), EntityItem::getPrimaryViewFrustumPosition())); glm::mat4 entityToWorldMatrix = translation * rotation; glm::mat4 worldToEntityMatrix = glm::inverse(entityToWorldMatrix); @@ -472,8 +476,10 @@ void EntityTreeElement::evalEntitiesInSphere(const glm::vec3& position, float ra } else { // determine the worldToEntityMatrix that doesn't include scale because // we're going to use the registration aware aa box in the entity frame - glm::mat4 rotation = glm::mat4_cast(entity->getWorldOrientation()); - glm::mat4 translation = glm::translate(entity->getWorldPosition()); + glm::vec3 position = entity->getWorldPosition(); + glm::mat4 translation = glm::translate(position); + glm::quat orientation = entity->getWorldOrientation(); + glm::mat4 rotation = glm::mat4_cast(EntityItem::getBillboardRotation(position, orientation, entity->getBillboardMode(), EntityItem::getPrimaryViewFrustumPosition())); glm::mat4 entityToWorldMatrix = translation * rotation; glm::mat4 worldToEntityMatrix = glm::inverse(entityToWorldMatrix); @@ -526,8 +532,10 @@ void EntityTreeElement::evalEntitiesInSphereWithType(const glm::vec3& position, } else { // determine the worldToEntityMatrix that doesn't include scale because // we're going to use the registration aware aa box in the entity frame - glm::mat4 rotation = glm::mat4_cast(entity->getWorldOrientation()); - glm::mat4 translation = glm::translate(entity->getWorldPosition()); + glm::vec3 position = entity->getWorldPosition(); + glm::mat4 translation = glm::translate(position); + glm::quat orientation = entity->getWorldOrientation(); + glm::mat4 rotation = glm::mat4_cast(EntityItem::getBillboardRotation(position, orientation, entity->getBillboardMode(), EntityItem::getPrimaryViewFrustumPosition())); glm::mat4 entityToWorldMatrix = translation * rotation; glm::mat4 worldToEntityMatrix = glm::inverse(entityToWorldMatrix); @@ -585,8 +593,10 @@ void EntityTreeElement::evalEntitiesInSphereWithName(const glm::vec3& position, } else { // determine the worldToEntityMatrix that doesn't include scale because // we're going to use the registration aware aa box in the entity frame - glm::mat4 rotation = glm::mat4_cast(entity->getWorldOrientation()); - glm::mat4 translation = glm::translate(entity->getWorldPosition()); + glm::vec3 position = entity->getWorldPosition(); + glm::mat4 translation = glm::translate(position); + glm::quat orientation = entity->getWorldOrientation(); + glm::mat4 rotation = glm::mat4_cast(EntityItem::getBillboardRotation(position, orientation, entity->getBillboardMode(), EntityItem::getPrimaryViewFrustumPosition())); glm::mat4 entityToWorldMatrix = translation * rotation; glm::mat4 worldToEntityMatrix = glm::inverse(entityToWorldMatrix); diff --git a/libraries/entities/src/GizmoEntityItem.cpp b/libraries/entities/src/GizmoEntityItem.cpp index 7ca1230fb1..60ba39b787 100644 --- a/libraries/entities/src/GizmoEntityItem.cpp +++ b/libraries/entities/src/GizmoEntityItem.cpp @@ -109,11 +109,9 @@ bool GizmoEntityItem::findDetailedRayIntersection(const glm::vec3& origin, const glm::vec3 dimensions = getScaledDimensions(); glm::vec2 xyDimensions(dimensions.x, dimensions.z); glm::quat rotation = getWorldOrientation(); - rotation = glm::angleAxis(-(float)M_PI_2, rotation * Vectors::RIGHT) * rotation; + rotation *= glm::angleAxis(-(float)M_PI_2, Vectors::RIGHT); glm::vec3 position = getWorldPosition() + rotation * (dimensions * (ENTITY_ITEM_DEFAULT_REGISTRATION_POINT - getRegistrationPoint())); - withReadLock([&] { - rotation = EntityItem::getBillboardRotation(position, rotation, _billboardMode, EntityItem::getPrimaryViewFrustumPosition()); - }); + rotation = EntityItem::getBillboardRotation(position, rotation, getBillboardMode(), EntityItem::getPrimaryViewFrustumPosition(), false); if (findRayRectangleIntersection(origin, direction, rotation, position, xyDimensions, distance)) { glm::vec3 hitPosition = origin + (distance * direction); @@ -146,8 +144,9 @@ bool GizmoEntityItem::findDetailedParabolaIntersection(const glm::vec3& origin, glm::vec3 dimensions = getScaledDimensions(); glm::vec2 xyDimensions(dimensions.x, dimensions.z); glm::quat rotation = getWorldOrientation(); - rotation = glm::angleAxis(-(float)M_PI_2, rotation * Vectors::RIGHT) * rotation; + rotation *= glm::angleAxis(-(float)M_PI_2, Vectors::RIGHT); glm::vec3 position = getWorldPosition(); + rotation = EntityItem::getBillboardRotation(position, rotation, getBillboardMode(), EntityItem::getPrimaryViewFrustumPosition(), true); glm::quat inverseRot = glm::inverse(rotation); glm::vec3 localOrigin = inverseRot * (origin - position); diff --git a/libraries/entities/src/GridEntityItem.cpp b/libraries/entities/src/GridEntityItem.cpp index e635511bfc..499d21a59d 100644 --- a/libraries/entities/src/GridEntityItem.cpp +++ b/libraries/entities/src/GridEntityItem.cpp @@ -125,6 +125,60 @@ void GridEntityItem::appendSubclassData(OctreePacketData* packetData, EncodeBits APPEND_ENTITY_PROPERTY(PROP_MINOR_GRID_EVERY, getMinorGridEvery()); } +bool GridEntityItem::findDetailedRayIntersection(const glm::vec3& origin, const glm::vec3& direction, + OctreeElementPointer& element, + float& distance, BoxFace& face, glm::vec3& surfaceNormal, + QVariantMap& extraInfo, bool precisionPicking) const { + glm::vec3 dimensions = getScaledDimensions(); + glm::vec2 xyDimensions(dimensions.x, dimensions.y); + glm::quat rotation = getWorldOrientation(); + glm::vec3 position = getWorldPosition() + rotation * (dimensions * (ENTITY_ITEM_DEFAULT_REGISTRATION_POINT - getRegistrationPoint())); + rotation = EntityItem::getBillboardRotation(position, rotation, getBillboardMode(), EntityItem::getPrimaryViewFrustumPosition()); + + if (findRayRectangleIntersection(origin, direction, rotation, position, xyDimensions, distance)) { + glm::vec3 forward = rotation * Vectors::FRONT; + if (glm::dot(forward, direction) > 0.0f) { + face = MAX_Z_FACE; + surfaceNormal = -forward; + } else { + face = MIN_Z_FACE; + surfaceNormal = forward; + } + return true; + } + return false; +} + +bool GridEntityItem::findDetailedParabolaIntersection(const glm::vec3& origin, const glm::vec3& velocity, const glm::vec3& acceleration, + OctreeElementPointer& element, float& parabolicDistance, + BoxFace& face, glm::vec3& surfaceNormal, + QVariantMap& extraInfo, bool precisionPicking) const { + glm::vec3 dimensions = getScaledDimensions(); + glm::vec2 xyDimensions(dimensions.x, dimensions.y); + glm::quat rotation = getWorldOrientation(); + glm::vec3 position = getWorldPosition() + rotation * (dimensions * (ENTITY_ITEM_DEFAULT_REGISTRATION_POINT - getRegistrationPoint())); + rotation = EntityItem::getBillboardRotation(position, rotation, getBillboardMode(), EntityItem::getPrimaryViewFrustumPosition()); + + glm::quat inverseRot = glm::inverse(rotation); + glm::vec3 localOrigin = inverseRot * (origin - position); + glm::vec3 localVelocity = inverseRot * velocity; + glm::vec3 localAcceleration = inverseRot * acceleration; + + if (findParabolaRectangleIntersection(localOrigin, localVelocity, localAcceleration, xyDimensions, parabolicDistance)) { + float localIntersectionVelocityZ = localVelocity.z + localAcceleration.z * parabolicDistance; + glm::vec3 forward = rotation * Vectors::FRONT; + if (localIntersectionVelocityZ > 0.0f) { + face = MIN_Z_FACE; + surfaceNormal = forward; + } else { + face = MAX_Z_FACE; + surfaceNormal = -forward; + } + return true; + } + return false; +} + void GridEntityItem::setColor(const glm::u8vec3& color) { withWriteLock([&] { _needsRenderUpdate |= _color != color; diff --git a/libraries/entities/src/GridEntityItem.h b/libraries/entities/src/GridEntityItem.h index 7dc7a475b2..fc31c93a5a 100644 --- a/libraries/entities/src/GridEntityItem.h +++ b/libraries/entities/src/GridEntityItem.h @@ -43,6 +43,16 @@ public: EntityPropertyFlags& propertyFlags, bool overwriteLocalData, bool& somethingChanged) override; + virtual bool supportsDetailedIntersection() const override { return getBillboardMode() != BillboardMode::NONE; } + virtual bool findDetailedRayIntersection(const glm::vec3& origin, const glm::vec3& direction, + OctreeElementPointer& element, float& distance, + BoxFace& face, glm::vec3& surfaceNormal, + QVariantMap& extraInfo, bool precisionPicking) const override; + virtual bool findDetailedParabolaIntersection(const glm::vec3& origin, const glm::vec3& velocity, + const glm::vec3& acceleration, OctreeElementPointer& element, float& parabolicDistance, + BoxFace& face, glm::vec3& surfaceNormal, + QVariantMap& extraInfo, bool precisionPicking) const override; + static const uint32_t DEFAULT_MAJOR_GRID_EVERY; static const float DEFAULT_MINOR_GRID_EVERY; diff --git a/libraries/entities/src/ImageEntityItem.cpp b/libraries/entities/src/ImageEntityItem.cpp index fb59a85647..6cc47cc8f8 100644 --- a/libraries/entities/src/ImageEntityItem.cpp +++ b/libraries/entities/src/ImageEntityItem.cpp @@ -135,9 +135,7 @@ bool ImageEntityItem::findDetailedRayIntersection(const glm::vec3& origin, const glm::vec2 xyDimensions(dimensions.x, dimensions.y); glm::quat rotation = getWorldOrientation(); glm::vec3 position = getWorldPosition() + rotation * (dimensions * (ENTITY_ITEM_DEFAULT_REGISTRATION_POINT - getRegistrationPoint())); - withReadLock([&] { - rotation = EntityItem::getBillboardRotation(position, rotation, _billboardMode, EntityItem::getPrimaryViewFrustumPosition()); - }); + rotation = EntityItem::getBillboardRotation(position, rotation, getBillboardMode(), EntityItem::getPrimaryViewFrustumPosition()); if (findRayRectangleIntersection(origin, direction, rotation, position, xyDimensions, distance)) { glm::vec3 forward = rotation * Vectors::FRONT; @@ -161,9 +159,7 @@ bool ImageEntityItem::findDetailedParabolaIntersection(const glm::vec3& origin, glm::vec2 xyDimensions(dimensions.x, dimensions.y); glm::quat rotation = getWorldOrientation(); glm::vec3 position = getWorldPosition() + rotation * (dimensions * (ENTITY_ITEM_DEFAULT_REGISTRATION_POINT - getRegistrationPoint())); - withReadLock([&] { - rotation = EntityItem::getBillboardRotation(position, rotation, _billboardMode, EntityItem::getPrimaryViewFrustumPosition()); - }); + rotation = EntityItem::getBillboardRotation(position, rotation, getBillboardMode(), EntityItem::getPrimaryViewFrustumPosition()); glm::quat inverseRot = glm::inverse(rotation); glm::vec3 localOrigin = inverseRot * (origin - position); diff --git a/libraries/entities/src/ImageEntityItem.h b/libraries/entities/src/ImageEntityItem.h index 0a90f93f9d..a5ed139e6b 100644 --- a/libraries/entities/src/ImageEntityItem.h +++ b/libraries/entities/src/ImageEntityItem.h @@ -43,7 +43,7 @@ public: EntityPropertyFlags& propertyFlags, bool overwriteLocalData, bool& somethingChanged) override; - virtual bool supportsDetailedIntersection() const override { return true; } + virtual bool supportsDetailedIntersection() const override { return getBillboardMode() != BillboardMode::NONE; } virtual bool findDetailedRayIntersection(const glm::vec3& origin, const glm::vec3& direction, OctreeElementPointer& element, float& distance, BoxFace& face, glm::vec3& surfaceNormal, diff --git a/libraries/entities/src/PolyVoxEntityItem.cpp b/libraries/entities/src/PolyVoxEntityItem.cpp index dd55ca898b..9c8951514b 100644 --- a/libraries/entities/src/PolyVoxEntityItem.cpp +++ b/libraries/entities/src/PolyVoxEntityItem.cpp @@ -377,15 +377,21 @@ glm::mat4 PolyVoxEntityItem::localToVoxelMatrix() const { return localToModelMatrix; } -glm::mat4 PolyVoxEntityItem::voxelToWorldMatrix() const { - glm::mat4 rotation = glm::mat4_cast(getWorldOrientation()); - glm::mat4 translation = glm::translate(getWorldPosition()); +glm::mat4 PolyVoxEntityItem::voxelToWorldMatrix(bool includeBillboard) const { + glm::quat orientation = getWorldOrientation(); + glm::vec3 position = getWorldPosition(); + glm::mat4 translation = glm::translate(position); + glm::mat4 rotation; + if (includeBillboard) { + rotation = glm::mat4_cast(EntityItem::getBillboardRotation(position, orientation, getBillboardMode(), EntityItem::getPrimaryViewFrustumPosition())); + } else { + rotation = glm::mat4_cast(orientation); + } return translation * rotation * voxelToLocalMatrix(); } -glm::mat4 PolyVoxEntityItem::worldToVoxelMatrix() const { - glm::mat4 worldToModelMatrix = glm::inverse(voxelToWorldMatrix()); - return worldToModelMatrix; +glm::mat4 PolyVoxEntityItem::worldToVoxelMatrix(bool includeBillboard) const { + return glm::inverse(voxelToWorldMatrix(includeBillboard)); } glm::vec3 PolyVoxEntityItem::voxelCoordsToWorldCoords(const glm::vec3& voxelCoords) const { diff --git a/libraries/entities/src/PolyVoxEntityItem.h b/libraries/entities/src/PolyVoxEntityItem.h index f994fcd37c..c416353ecf 100644 --- a/libraries/entities/src/PolyVoxEntityItem.h +++ b/libraries/entities/src/PolyVoxEntityItem.h @@ -167,8 +167,8 @@ class PolyVoxEntityItem : public EntityItem { bool isEdged() const; - glm::mat4 voxelToWorldMatrix() const; - glm::mat4 worldToVoxelMatrix() const; + glm::mat4 voxelToWorldMatrix(bool includeBillboard = false) const; + glm::mat4 worldToVoxelMatrix(bool includeBillboard = false) const; glm::mat4 voxelToLocalMatrix() const; glm::mat4 localToVoxelMatrix() const; diff --git a/libraries/entities/src/ShapeEntityItem.cpp b/libraries/entities/src/ShapeEntityItem.cpp index 3dbb02775a..932dc6b034 100644 --- a/libraries/entities/src/ShapeEntityItem.cpp +++ b/libraries/entities/src/ShapeEntityItem.cpp @@ -257,7 +257,8 @@ float ShapeEntityItem::getAlpha() const { void ShapeEntityItem::setUnscaledDimensions(const glm::vec3& value) { const float MAX_FLAT_DIMENSION = 0.0001f; - if ((_shape == entity::Shape::Circle || _shape == entity::Shape::Quad) && value.y > MAX_FLAT_DIMENSION) { + const auto shape = getShape(); + if ((shape == entity::Shape::Circle || shape == entity::Shape::Quad) && value.y > MAX_FLAT_DIMENSION) { // enforce flatness in Y glm::vec3 newDimensions = value; newDimensions.y = MAX_FLAT_DIMENSION; @@ -268,15 +269,24 @@ void ShapeEntityItem::setUnscaledDimensions(const glm::vec3& value) { } bool ShapeEntityItem::supportsDetailedIntersection() const { - return _shape == entity::Sphere; + return getShape() == entity::Sphere || getBillboardMode() != BillboardMode::NONE; } bool ShapeEntityItem::findDetailedRayIntersection(const glm::vec3& origin, const glm::vec3& direction, OctreeElementPointer& element, float& distance, BoxFace& face, glm::vec3& surfaceNormal, QVariantMap& extraInfo, bool precisionPicking) const { + if (getShape() != entity::Sphere) { + return true; + } + + glm::vec3 dimensions = getScaledDimensions(); + glm::quat rotation = getWorldOrientation(); + glm::vec3 position = getWorldPosition() + rotation * (dimensions * (ENTITY_ITEM_DEFAULT_REGISTRATION_POINT - getRegistrationPoint())); + rotation = EntityItem::getBillboardRotation(position, rotation, getBillboardMode(), EntityItem::getPrimaryViewFrustumPosition()); + // determine the ray in the frame of the entity transformed from a unit sphere - glm::mat4 entityToWorldMatrix = getEntityToWorldMatrix(); + glm::mat4 entityToWorldMatrix = glm::translate(position) * glm::mat4_cast(rotation) * glm::scale(dimensions); glm::mat4 worldToEntityMatrix = glm::inverse(entityToWorldMatrix); glm::vec3 entityFrameOrigin = glm::vec3(worldToEntityMatrix * glm::vec4(origin, 1.0f)); glm::vec3 entityFrameDirection = glm::vec3(worldToEntityMatrix * glm::vec4(direction, 0.0f)); @@ -302,8 +312,17 @@ bool ShapeEntityItem::findDetailedParabolaIntersection(const glm::vec3& origin, OctreeElementPointer& element, float& parabolicDistance, BoxFace& face, glm::vec3& surfaceNormal, QVariantMap& extraInfo, bool precisionPicking) const { + if (getShape() != entity::Sphere) { + return true; + } + + glm::vec3 dimensions = getScaledDimensions(); + glm::quat rotation = getWorldOrientation(); + glm::vec3 position = getWorldPosition() + rotation * (dimensions * (ENTITY_ITEM_DEFAULT_REGISTRATION_POINT - getRegistrationPoint())); + rotation = EntityItem::getBillboardRotation(position, rotation, getBillboardMode(), EntityItem::getPrimaryViewFrustumPosition()); + // determine the parabola in the frame of the entity transformed from a unit sphere - glm::mat4 entityToWorldMatrix = getEntityToWorldMatrix(); + glm::mat4 entityToWorldMatrix = glm::translate(position) * glm::mat4_cast(rotation) * glm::scale(dimensions); glm::mat4 worldToEntityMatrix = glm::inverse(entityToWorldMatrix); glm::vec3 entityFrameOrigin = glm::vec3(worldToEntityMatrix * glm::vec4(origin, 1.0f)); glm::vec3 entityFrameVelocity = glm::vec3(worldToEntityMatrix * glm::vec4(velocity, 0.0f)); @@ -343,8 +362,9 @@ void ShapeEntityItem::computeShapeInfo(ShapeInfo& info) { // is set. const glm::vec3 entityDimensions = getScaledDimensions(); + const auto shape = getShape(); - switch (_shape){ + switch (shape){ case entity::Shape::Quad: // Quads collide like flat Cubes case entity::Shape::Cube: { diff --git a/libraries/entities/src/TextEntityItem.cpp b/libraries/entities/src/TextEntityItem.cpp index 906e28288b..bfafae69cf 100644 --- a/libraries/entities/src/TextEntityItem.cpp +++ b/libraries/entities/src/TextEntityItem.cpp @@ -199,9 +199,7 @@ bool TextEntityItem::findDetailedRayIntersection(const glm::vec3& origin, const glm::vec2 xyDimensions(dimensions.x, dimensions.y); glm::quat rotation = getWorldOrientation(); glm::vec3 position = getWorldPosition() + rotation * (dimensions * (ENTITY_ITEM_DEFAULT_REGISTRATION_POINT - getRegistrationPoint())); - withReadLock([&] { - rotation = EntityItem::getBillboardRotation(position, rotation, _billboardMode, EntityItem::getPrimaryViewFrustumPosition()); - }); + rotation = EntityItem::getBillboardRotation(position, rotation, getBillboardMode(), EntityItem::getPrimaryViewFrustumPosition()); if (findRayRectangleIntersection(origin, direction, rotation, position, xyDimensions, distance)) { glm::vec3 forward = rotation * Vectors::FRONT; @@ -225,9 +223,7 @@ bool TextEntityItem::findDetailedParabolaIntersection(const glm::vec3& origin, c glm::vec2 xyDimensions(dimensions.x, dimensions.y); glm::quat rotation = getWorldOrientation(); glm::vec3 position = getWorldPosition() + rotation * (dimensions * (ENTITY_ITEM_DEFAULT_REGISTRATION_POINT - getRegistrationPoint())); - withReadLock([&] { - rotation = EntityItem::getBillboardRotation(position, rotation, _billboardMode, EntityItem::getPrimaryViewFrustumPosition()); - }); + rotation = EntityItem::getBillboardRotation(position, rotation, getBillboardMode(), EntityItem::getPrimaryViewFrustumPosition()); glm::quat inverseRot = glm::inverse(rotation); glm::vec3 localOrigin = inverseRot * (origin - position); diff --git a/libraries/entities/src/TextEntityItem.h b/libraries/entities/src/TextEntityItem.h index 7827ab1b85..212f11e768 100644 --- a/libraries/entities/src/TextEntityItem.h +++ b/libraries/entities/src/TextEntityItem.h @@ -48,7 +48,7 @@ public: EntityPropertyFlags& propertyFlags, bool overwriteLocalData, bool& somethingChanged) override; - virtual bool supportsDetailedIntersection() const override { return true; } + virtual bool supportsDetailedIntersection() const override { return getBillboardMode() != BillboardMode::NONE; } virtual bool findDetailedRayIntersection(const glm::vec3& origin, const glm::vec3& direction, OctreeElementPointer& element, float& distance, BoxFace& face, glm::vec3& surfaceNormal, diff --git a/libraries/entities/src/WebEntityItem.cpp b/libraries/entities/src/WebEntityItem.cpp index f88b40b2ee..661c0865ca 100644 --- a/libraries/entities/src/WebEntityItem.cpp +++ b/libraries/entities/src/WebEntityItem.cpp @@ -165,9 +165,7 @@ bool WebEntityItem::findDetailedRayIntersection(const glm::vec3& origin, const g glm::vec2 xyDimensions(dimensions.x, dimensions.y); glm::quat rotation = getWorldOrientation(); glm::vec3 position = getWorldPosition() + rotation * (dimensions * (ENTITY_ITEM_DEFAULT_REGISTRATION_POINT - getRegistrationPoint())); - withReadLock([&] { - rotation = EntityItem::getBillboardRotation(position, rotation, _billboardMode, EntityItem::getPrimaryViewFrustumPosition()); - }); + rotation = EntityItem::getBillboardRotation(position, rotation, getBillboardMode(), EntityItem::getPrimaryViewFrustumPosition()); if (findRayRectangleIntersection(origin, direction, rotation, position, xyDimensions, distance)) { glm::vec3 forward = rotation * Vectors::FRONT; @@ -192,9 +190,7 @@ bool WebEntityItem::findDetailedParabolaIntersection(const glm::vec3& origin, co glm::vec2 xyDimensions(dimensions.x, dimensions.y); glm::quat rotation = getWorldOrientation(); glm::vec3 position = getWorldPosition() + rotation * (dimensions * (ENTITY_ITEM_DEFAULT_REGISTRATION_POINT - getRegistrationPoint())); - withReadLock([&] { - rotation = EntityItem::getBillboardRotation(position, rotation, _billboardMode, EntityItem::getPrimaryViewFrustumPosition()); - }); + rotation = EntityItem::getBillboardRotation(position, rotation, getBillboardMode(), EntityItem::getPrimaryViewFrustumPosition()); glm::quat inverseRot = glm::inverse(rotation); glm::vec3 localOrigin = inverseRot * (origin - position); diff --git a/libraries/entities/src/WebEntityItem.h b/libraries/entities/src/WebEntityItem.h index 0a3db2ea78..e0a66f25b2 100644 --- a/libraries/entities/src/WebEntityItem.h +++ b/libraries/entities/src/WebEntityItem.h @@ -45,7 +45,7 @@ public: EntityPropertyFlags& propertyFlags, bool overwriteLocalData, bool& somethingChanged) override; - virtual bool supportsDetailedIntersection() const override { return true; } + virtual bool supportsDetailedIntersection() const override { return getBillboardMode() != BillboardMode::NONE; } virtual bool findDetailedRayIntersection(const glm::vec3& origin, const glm::vec3& direction, OctreeElementPointer& element, float& distance, BoxFace& face, glm::vec3& surfaceNormal, From 6d1667df5a9b48719a96172069b7fd37704f5793 Mon Sep 17 00:00:00 2001 From: HifiExperiments Date: Sun, 10 Jan 2021 16:48:44 -0800 Subject: [PATCH 080/152] better picking against billboarded shapes other than spheres --- libraries/entities/src/ShapeEntityItem.cpp | 56 +++++++++++----------- 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/libraries/entities/src/ShapeEntityItem.cpp b/libraries/entities/src/ShapeEntityItem.cpp index 932dc6b034..691990eae1 100644 --- a/libraries/entities/src/ShapeEntityItem.cpp +++ b/libraries/entities/src/ShapeEntityItem.cpp @@ -276,10 +276,6 @@ bool ShapeEntityItem::findDetailedRayIntersection(const glm::vec3& origin, const OctreeElementPointer& element, float& distance, BoxFace& face, glm::vec3& surfaceNormal, QVariantMap& extraInfo, bool precisionPicking) const { - if (getShape() != entity::Sphere) { - return true; - } - glm::vec3 dimensions = getScaledDimensions(); glm::quat rotation = getWorldOrientation(); glm::vec3 position = getWorldPosition() + rotation * (dimensions * (ENTITY_ITEM_DEFAULT_REGISTRATION_POINT - getRegistrationPoint())); @@ -291,18 +287,22 @@ bool ShapeEntityItem::findDetailedRayIntersection(const glm::vec3& origin, const glm::vec3 entityFrameOrigin = glm::vec3(worldToEntityMatrix * glm::vec4(origin, 1.0f)); glm::vec3 entityFrameDirection = glm::vec3(worldToEntityMatrix * glm::vec4(direction, 0.0f)); - // NOTE: unit sphere has center of 0,0,0 and radius of 0.5 - if (findRaySphereIntersection(entityFrameOrigin, entityFrameDirection, glm::vec3(0.0f), 0.5f, distance)) { - bool success; - glm::vec3 center = getCenterPosition(success); - if (success) { - // FIXME: this is only correct for uniformly scaled spheres - // determine where on the unit sphere the hit point occured - glm::vec3 hitAt = origin + (direction * distance); - surfaceNormal = glm::normalize(hitAt - center); - } else { - return false; + if (getShape() == entity::Sphere) { + // NOTE: unit sphere has center of 0,0,0 and radius of 0.5 + if (findRaySphereIntersection(entityFrameOrigin, entityFrameDirection, glm::vec3(0.0f), 0.5f, distance)) { + bool success; + glm::vec3 center = getCenterPosition(success); + if (success) { + // FIXME: this is only correct for uniformly scaled spheres + // determine where on the unit sphere the hit point occured + glm::vec3 hitAt = origin + (direction * distance); + surfaceNormal = glm::normalize(hitAt - center); + } else { + return false; + } + return true; } + } else if (findRayAABoxIntersection(entityFrameOrigin, entityFrameDirection, 1.0f / entityFrameDirection, glm::vec3(-0.5f), glm::vec3(1.0f), distance, face, surfaceNormal)) { return true; } return false; @@ -312,10 +312,6 @@ bool ShapeEntityItem::findDetailedParabolaIntersection(const glm::vec3& origin, OctreeElementPointer& element, float& parabolicDistance, BoxFace& face, glm::vec3& surfaceNormal, QVariantMap& extraInfo, bool precisionPicking) const { - if (getShape() != entity::Sphere) { - return true; - } - glm::vec3 dimensions = getScaledDimensions(); glm::quat rotation = getWorldOrientation(); glm::vec3 position = getWorldPosition() + rotation * (dimensions * (ENTITY_ITEM_DEFAULT_REGISTRATION_POINT - getRegistrationPoint())); @@ -328,16 +324,20 @@ bool ShapeEntityItem::findDetailedParabolaIntersection(const glm::vec3& origin, glm::vec3 entityFrameVelocity = glm::vec3(worldToEntityMatrix * glm::vec4(velocity, 0.0f)); glm::vec3 entityFrameAcceleration = glm::vec3(worldToEntityMatrix * glm::vec4(acceleration, 0.0f)); - // NOTE: unit sphere has center of 0,0,0 and radius of 0.5 - if (findParabolaSphereIntersection(entityFrameOrigin, entityFrameVelocity, entityFrameAcceleration, glm::vec3(0.0f), 0.5f, parabolicDistance)) { - bool success; - glm::vec3 center = getCenterPosition(success); - if (success) { - // FIXME: this is only correct for uniformly scaled spheres - surfaceNormal = glm::normalize((origin + velocity * parabolicDistance + 0.5f * acceleration * parabolicDistance * parabolicDistance) - center); - } else { - return false; + if (getShape() == entity::Sphere) { + // NOTE: unit sphere has center of 0,0,0 and radius of 0.5 + if (findParabolaSphereIntersection(entityFrameOrigin, entityFrameVelocity, entityFrameAcceleration, glm::vec3(0.0f), 0.5f, parabolicDistance)) { + bool success; + glm::vec3 center = getCenterPosition(success); + if (success) { + // FIXME: this is only correct for uniformly scaled spheres + surfaceNormal = glm::normalize((origin + velocity * parabolicDistance + 0.5f * acceleration * parabolicDistance * parabolicDistance) - center); + } else { + return false; + } + return true; } + } else if (findParabolaAABoxIntersection(entityFrameOrigin, entityFrameVelocity, entityFrameAcceleration, glm::vec3(-0.5f), glm::vec3(1.0f), parabolicDistance, face, surfaceNormal)) { return true; } return false; From 2a27fc4de2344b877920cbe8dbe3427cfe794073 Mon Sep 17 00:00:00 2001 From: HifiExperiments Date: Wed, 13 Jan 2021 22:31:21 -0800 Subject: [PATCH 081/152] billboarding for model entities --- interface/src/Application.cpp | 4 +- interface/src/Menu.cpp | 2 +- .../src/RenderableGizmoEntityItem.cpp | 4 +- .../src/RenderableGridEntityItem.cpp | 4 +- .../src/RenderableImageEntityItem.cpp | 4 +- .../src/RenderableLineEntityItem.cpp | 4 +- .../src/RenderableMaterialEntityItem.cpp | 4 +- .../src/RenderableModelEntityItem.cpp | 2 + .../src/RenderablePolyLineEntityItem.cpp | 4 +- .../src/RenderablePolyVoxEntityItem.cpp | 4 +- .../src/RenderableShapeEntityItem.cpp | 4 +- .../src/RenderableTextEntityItem.cpp | 8 +- .../src/RenderableWebEntityItem.cpp | 4 +- libraries/entities/src/EntityItem.cpp | 3 - libraries/entities/src/EntityItem.h | 9 - libraries/entities/src/EntityTreeElement.cpp | 10 +- libraries/entities/src/GizmoEntityItem.cpp | 4 +- libraries/entities/src/GridEntityItem.cpp | 4 +- libraries/entities/src/ImageEntityItem.cpp | 4 +- libraries/entities/src/PolyVoxEntityItem.cpp | 2 +- libraries/entities/src/ShapeEntityItem.cpp | 4 +- libraries/entities/src/TextEntityItem.cpp | 4 +- libraries/entities/src/WebEntityItem.cpp | 4 +- .../src/CauterizedMeshPartPayload.cpp | 26 +- .../src/CauterizedMeshPartPayload.h | 6 +- .../render-utils/src/CauterizedModel.cpp | 39 +- .../render-utils/src/MeshPartPayload.cpp | 479 ++++++------------ libraries/render-utils/src/MeshPartPayload.h | 157 ++---- libraries/render-utils/src/Model.cpp | 55 +- libraries/render-utils/src/Model.h | 5 + libraries/shared/src/BillboardMode.cpp | 4 +- libraries/shared/src/BillboardMode.h | 15 +- 32 files changed, 328 insertions(+), 558 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index c1911151d8..e38d156336 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -2455,7 +2455,7 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo DependencyManager::get()->setPrecisionPicking(rayPickID, value); }); - EntityItem::setBillboardRotationOperator([](const glm::vec3& position, const glm::quat& rotation, BillboardMode billboardMode, const glm::vec3& frustumPos, bool rotate90x) { + BillboardModeHelpers::setBillboardRotationOperator([](const glm::vec3& position, const glm::quat& rotation, BillboardMode billboardMode, const glm::vec3& frustumPos, bool rotate90x) { const glm::quat ROTATE_90X = glm::angleAxis(-(float)M_PI_2, Vectors::RIGHT); if (billboardMode == BillboardMode::YAW) { //rotate about vertical to face the camera @@ -2484,7 +2484,7 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo } return rotation; }); - EntityItem::setPrimaryViewFrustumPositionOperator([this]() { + BillboardModeHelpers::setPrimaryViewFrustumPositionOperator([this]() { ViewFrustum viewFrustum; copyViewFrustum(viewFrustum); return viewFrustum.getPosition(); diff --git a/interface/src/Menu.cpp b/interface/src/Menu.cpp index 19cc7eacaa..471645e342 100644 --- a/interface/src/Menu.cpp +++ b/interface/src/Menu.cpp @@ -509,7 +509,7 @@ Menu::Menu() { action = addCheckableActionToQMenuAndActionHash(renderOptionsMenu, MenuOption::MaterialProceduralShaders, 0, false); connect(action, &QAction::triggered, [action] { - MeshPartPayload::enableMaterialProceduralShaders = action->isChecked(); + ModelMeshPartPayload::enableMaterialProceduralShaders = action->isChecked(); }); { diff --git a/libraries/entities-renderer/src/RenderableGizmoEntityItem.cpp b/libraries/entities-renderer/src/RenderableGizmoEntityItem.cpp index 368aa59b5e..3abd120bf9 100644 --- a/libraries/entities-renderer/src/RenderableGizmoEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableGizmoEntityItem.cpp @@ -254,8 +254,8 @@ void GizmoEntityRenderer::doRender(RenderArgs* args) { geometryCache->bindSimpleProgram(batch, false, transparent, wireframe, true, true, forward, graphics::MaterialKey::CULL_NONE); - transform.setRotation(EntityItem::getBillboardRotation(transform.getTranslation(), transform.getRotation(), _billboardMode, - args->_renderMode == RenderArgs::RenderMode::SHADOW_RENDER_MODE ? EntityItem::getPrimaryViewFrustumPosition() : args->getViewFrustum().getPosition(), true)); + transform.setRotation(BillboardModeHelpers::getBillboardRotation(transform.getTranslation(), transform.getRotation(), _billboardMode, + args->_renderMode == RenderArgs::RenderMode::SHADOW_RENDER_MODE ? BillboardModeHelpers::getPrimaryViewFrustumPosition() : args->getViewFrustum().getPosition(), true)); batch.setModelTransform(transform); // Background circle diff --git a/libraries/entities-renderer/src/RenderableGridEntityItem.cpp b/libraries/entities-renderer/src/RenderableGridEntityItem.cpp index 777ddda934..a5ae4acbf5 100644 --- a/libraries/entities-renderer/src/RenderableGridEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableGridEntityItem.cpp @@ -103,8 +103,8 @@ void GridEntityRenderer::doRender(RenderArgs* args) { } else { transform.setTranslation(renderTransform.getTranslation()); } - transform.setRotation(EntityItem::getBillboardRotation(transform.getTranslation(), transform.getRotation(), _billboardMode, - args->_renderMode == RenderArgs::RenderMode::SHADOW_RENDER_MODE ? EntityItem::getPrimaryViewFrustumPosition() : args->getViewFrustum().getPosition())); + transform.setRotation(BillboardModeHelpers::getBillboardRotation(transform.getTranslation(), transform.getRotation(), _billboardMode, + args->_renderMode == RenderArgs::RenderMode::SHADOW_RENDER_MODE ? BillboardModeHelpers::getPrimaryViewFrustumPosition() : args->getViewFrustum().getPosition())); batch->setModelTransform(transform); auto minCorner = glm::vec2(-0.5f, -0.5f); diff --git a/libraries/entities-renderer/src/RenderableImageEntityItem.cpp b/libraries/entities-renderer/src/RenderableImageEntityItem.cpp index 34f48e25f6..e03655f09c 100644 --- a/libraries/entities-renderer/src/RenderableImageEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableImageEntityItem.cpp @@ -97,8 +97,8 @@ void ImageEntityRenderer::doRender(RenderArgs* args) { Q_ASSERT(args->_batch); gpu::Batch* batch = args->_batch; - transform.setRotation(EntityItem::getBillboardRotation(transform.getTranslation(), transform.getRotation(), _billboardMode, - args->_renderMode == RenderArgs::RenderMode::SHADOW_RENDER_MODE ? EntityItem::getPrimaryViewFrustumPosition() : args->getViewFrustum().getPosition())); + transform.setRotation(BillboardModeHelpers::getBillboardRotation(transform.getTranslation(), transform.getRotation(), _billboardMode, + args->_renderMode == RenderArgs::RenderMode::SHADOW_RENDER_MODE ? BillboardModeHelpers::getPrimaryViewFrustumPosition() : args->getViewFrustum().getPosition())); batch->setModelTransform(transform); batch->setResourceTexture(0, _texture->getGPUTexture()); diff --git a/libraries/entities-renderer/src/RenderableLineEntityItem.cpp b/libraries/entities-renderer/src/RenderableLineEntityItem.cpp index f8a3230f86..a36cdde212 100644 --- a/libraries/entities-renderer/src/RenderableLineEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableLineEntityItem.cpp @@ -47,8 +47,8 @@ void LineEntityRenderer::doRender(RenderArgs* args) { const auto& modelTransform = getModelTransform(); Transform transform = Transform(); transform.setTranslation(modelTransform.getTranslation()); - transform.setRotation(EntityItem::getBillboardRotation(modelTransform.getTranslation(), modelTransform.getRotation(), _billboardMode, - args->_renderMode == RenderArgs::RenderMode::SHADOW_RENDER_MODE ? EntityItem::getPrimaryViewFrustumPosition() : args->getViewFrustum().getPosition())); + transform.setRotation(BillboardModeHelpers::getBillboardRotation(modelTransform.getTranslation(), modelTransform.getRotation(), _billboardMode, + args->_renderMode == RenderArgs::RenderMode::SHADOW_RENDER_MODE ? BillboardModeHelpers::getPrimaryViewFrustumPosition() : args->getViewFrustum().getPosition())); batch.setModelTransform(transform); if (_linePoints.size() > 1) { DependencyManager::get()->bindSimpleProgram(batch, false, false, false, false, true, diff --git a/libraries/entities-renderer/src/RenderableMaterialEntityItem.cpp b/libraries/entities-renderer/src/RenderableMaterialEntityItem.cpp index ac28dd517c..74b479affe 100644 --- a/libraries/entities-renderer/src/RenderableMaterialEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableMaterialEntityItem.cpp @@ -272,8 +272,8 @@ void MaterialEntityRenderer::doRender(RenderArgs* args) { proceduralRender = true; } - transform.setRotation(EntityItem::getBillboardRotation(transform.getTranslation(), transform.getRotation(), _billboardMode, - args->_renderMode == RenderArgs::RenderMode::SHADOW_RENDER_MODE ? EntityItem::getPrimaryViewFrustumPosition() : args->getViewFrustum().getPosition())); + transform.setRotation(BillboardModeHelpers::getBillboardRotation(transform.getTranslation(), transform.getRotation(), _billboardMode, + args->_renderMode == RenderArgs::RenderMode::SHADOW_RENDER_MODE ? BillboardModeHelpers::getPrimaryViewFrustumPosition() : args->getViewFrustum().getPosition())); batch.setModelTransform(transform); if (!proceduralRender) { diff --git a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp index c694f496d6..c6765f2321 100644 --- a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp @@ -1254,6 +1254,7 @@ void ModelEntityRenderer::doRenderUpdateAsynchronousTyped(const TypedEntityPoint _model->setTagMask(getTagMask(), scene); _model->setHifiRenderLayer(getHifiRenderLayer(), scene); _model->setPrimitiveMode(_primitiveMode, scene); + _model->setBillboardMode(_billboardMode, scene); _model->setCullWithParent(_cullWithParent, scene); _model->setRenderWithZones(_renderWithZones, scene); }); @@ -1332,6 +1333,7 @@ void ModelEntityRenderer::doRenderUpdateAsynchronousTyped(const TypedEntityPoint model->setTagMask(getTagMask(), scene); model->setHifiRenderLayer(getHifiRenderLayer(), scene); model->setPrimitiveMode(_primitiveMode, scene); + model->setBillboardMode(_billboardMode, scene); model->setCullWithParent(_cullWithParent, scene); model->setRenderWithZones(_renderWithZones, scene); }); diff --git a/libraries/entities-renderer/src/RenderablePolyLineEntityItem.cpp b/libraries/entities-renderer/src/RenderablePolyLineEntityItem.cpp index e10e7a845c..65e9f57b02 100644 --- a/libraries/entities-renderer/src/RenderablePolyLineEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderablePolyLineEntityItem.cpp @@ -325,8 +325,8 @@ void PolyLineEntityRenderer::doRender(RenderArgs* args) { buildPipelines(); } - transform.setRotation(EntityItem::getBillboardRotation(transform.getTranslation(), transform.getRotation(), _billboardMode, - args->_renderMode == RenderArgs::RenderMode::SHADOW_RENDER_MODE ? EntityItem::getPrimaryViewFrustumPosition() : args->getViewFrustum().getPosition())); + transform.setRotation(BillboardModeHelpers::getBillboardRotation(transform.getTranslation(), transform.getRotation(), _billboardMode, + args->_renderMode == RenderArgs::RenderMode::SHADOW_RENDER_MODE ? BillboardModeHelpers::getPrimaryViewFrustumPosition() : args->getViewFrustum().getPosition())); batch.setModelTransform(transform); batch.setPipeline(_pipelines[{args->_renderMethod, isTransparent()}]); diff --git a/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.cpp b/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.cpp index f17f775493..5b6c0c8b70 100644 --- a/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.cpp @@ -1820,8 +1820,8 @@ void PolyVoxEntityRenderer::doRender(RenderArgs* args) { PerformanceTimer perfTimer("RenderablePolyVoxEntityItem::render"); gpu::Batch& batch = *args->_batch; - glm::mat4 rotation = glm::mat4_cast(EntityItem::getBillboardRotation(_position, _orientation, _billboardMode, - args->_renderMode == RenderArgs::RenderMode::SHADOW_RENDER_MODE ? EntityItem::getPrimaryViewFrustumPosition() : args->getViewFrustum().getPosition())); + glm::mat4 rotation = glm::mat4_cast(BillboardModeHelpers::getBillboardRotation(_position, _orientation, _billboardMode, + args->_renderMode == RenderArgs::RenderMode::SHADOW_RENDER_MODE ? BillboardModeHelpers::getPrimaryViewFrustumPosition() : args->getViewFrustum().getPosition())); Transform transform(glm::translate(_position) * rotation * _lastVoxelToLocalMatrix); batch.setModelTransform(transform); diff --git a/libraries/entities-renderer/src/RenderableShapeEntityItem.cpp b/libraries/entities-renderer/src/RenderableShapeEntityItem.cpp index f1c73dbeed..9cc18a8df5 100644 --- a/libraries/entities-renderer/src/RenderableShapeEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableShapeEntityItem.cpp @@ -238,8 +238,8 @@ void ShapeEntityRenderer::doRender(RenderArgs* args) { return; } - transform.setRotation(EntityItem::getBillboardRotation(transform.getTranslation(), transform.getRotation(), _billboardMode, - args->_renderMode == RenderArgs::RenderMode::SHADOW_RENDER_MODE ? EntityItem::getPrimaryViewFrustumPosition() : args->getViewFrustum().getPosition(), + transform.setRotation(BillboardModeHelpers::getBillboardRotation(transform.getTranslation(), transform.getRotation(), _billboardMode, + args->_renderMode == RenderArgs::RenderMode::SHADOW_RENDER_MODE ? BillboardModeHelpers::getPrimaryViewFrustumPosition() : args->getViewFrustum().getPosition(), _shape < entity::Shape::Cube || _shape > entity::Shape::Icosahedron)); batch.setModelTransform(transform); diff --git a/libraries/entities-renderer/src/RenderableTextEntityItem.cpp b/libraries/entities-renderer/src/RenderableTextEntityItem.cpp index 2be84110d6..1724cf69d5 100644 --- a/libraries/entities-renderer/src/RenderableTextEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableTextEntityItem.cpp @@ -131,8 +131,8 @@ void TextEntityRenderer::doRender(RenderArgs* args) { return; } - transform.setRotation(EntityItem::getBillboardRotation(transform.getTranslation(), transform.getRotation(), _billboardMode, - args->_renderMode == RenderArgs::RenderMode::SHADOW_RENDER_MODE ? EntityItem::getPrimaryViewFrustumPosition() : args->getViewFrustum().getPosition())); + transform.setRotation(BillboardModeHelpers::getBillboardRotation(transform.getTranslation(), transform.getRotation(), _billboardMode, + args->_renderMode == RenderArgs::RenderMode::SHADOW_RENDER_MODE ? BillboardModeHelpers::getPrimaryViewFrustumPosition() : args->getViewFrustum().getPosition())); batch.setModelTransform(transform); auto geometryCache = DependencyManager::get(); @@ -313,8 +313,8 @@ void entities::TextPayload::render(RenderArgs* args) { return; } - modelTransform.setRotation(EntityItem::getBillboardRotation(modelTransform.getTranslation(), modelTransform.getRotation(), textRenderable->_billboardMode, - args->_renderMode == RenderArgs::RenderMode::SHADOW_RENDER_MODE ? EntityItem::getPrimaryViewFrustumPosition() : args->getViewFrustum().getPosition())); + modelTransform.setRotation(BillboardModeHelpers::getBillboardRotation(modelTransform.getTranslation(), modelTransform.getRotation(), textRenderable->_billboardMode, + args->_renderMode == RenderArgs::RenderMode::SHADOW_RENDER_MODE ? BillboardModeHelpers::getPrimaryViewFrustumPosition() : args->getViewFrustum().getPosition())); float scale = textRenderable->_lineHeight / textRenderer->getFontSize(); modelTransform.postTranslate(glm::vec3(-0.5, 0.5, 1.0f + EPSILON / dimensions.z)); diff --git a/libraries/entities-renderer/src/RenderableWebEntityItem.cpp b/libraries/entities-renderer/src/RenderableWebEntityItem.cpp index 6c6215f69d..e367b4cc7c 100644 --- a/libraries/entities-renderer/src/RenderableWebEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableWebEntityItem.cpp @@ -302,8 +302,8 @@ void WebEntityRenderer::doRender(RenderArgs* args) { batch.setResourceTexture(0, _texture); - transform.setRotation(EntityItem::getBillboardRotation(transform.getTranslation(), transform.getRotation(), _billboardMode, - args->_renderMode == RenderArgs::RenderMode::SHADOW_RENDER_MODE ? EntityItem::getPrimaryViewFrustumPosition() : args->getViewFrustum().getPosition())); + transform.setRotation(BillboardModeHelpers::getBillboardRotation(transform.getTranslation(), transform.getRotation(), _billboardMode, + args->_renderMode == RenderArgs::RenderMode::SHADOW_RENDER_MODE ? BillboardModeHelpers::getPrimaryViewFrustumPosition() : args->getViewFrustum().getPosition())); batch.setModelTransform(transform); // Turn off jitter for these entities diff --git a/libraries/entities/src/EntityItem.cpp b/libraries/entities/src/EntityItem.cpp index f33838d146..68e824f8cc 100644 --- a/libraries/entities/src/EntityItem.cpp +++ b/libraries/entities/src/EntityItem.cpp @@ -51,9 +51,6 @@ int EntityItem::_maxActionsDataSize = 800; quint64 EntityItem::_rememberDeletedActionTime = 20 * USECS_PER_SECOND; QString EntityItem::_marketplacePublicKey; -std::function EntityItem::_getBillboardRotationOperator = [](const glm::vec3&, const glm::quat& rotation, BillboardMode, const glm::vec3&, bool) { return rotation; }; -std::function EntityItem::_getPrimaryViewFrustumPositionOperator = []() { return glm::vec3(0.0f); }; - EntityItem::EntityItem(const EntityItemID& entityItemID) : SpatiallyNestable(NestableType::Entity, entityItemID) { diff --git a/libraries/entities/src/EntityItem.h b/libraries/entities/src/EntityItem.h index ad3429c0b6..288f1682c7 100644 --- a/libraries/entities/src/EntityItem.h +++ b/libraries/entities/src/EntityItem.h @@ -572,11 +572,6 @@ public: virtual void removeGrab(GrabPointer grab) override; virtual void disableGrab(GrabPointer grab) override; - static void setBillboardRotationOperator(std::function getBillboardRotationOperator) { _getBillboardRotationOperator = getBillboardRotationOperator; } - static glm::quat getBillboardRotation(const glm::vec3& position, const glm::quat& rotation, BillboardMode billboardMode, const glm::vec3& frustumPos, bool rotate90x = false) { return _getBillboardRotationOperator(position, rotation, billboardMode, frustumPos, rotate90x); } - static void setPrimaryViewFrustumPositionOperator(std::function getPrimaryViewFrustumPositionOperator) { _getPrimaryViewFrustumPositionOperator = getPrimaryViewFrustumPositionOperator; } - static glm::vec3 getPrimaryViewFrustumPosition() { return _getPrimaryViewFrustumPositionOperator(); } - bool stillHasMyGrab() const; bool needsRenderUpdate() const { return _needsRenderUpdate; } @@ -786,10 +781,6 @@ protected: bool _cullWithParent { false }; mutable bool _needsRenderUpdate { false }; - -private: - static std::function _getBillboardRotationOperator; - static std::function _getPrimaryViewFrustumPositionOperator; }; #endif // hifi_EntityItem_h diff --git a/libraries/entities/src/EntityTreeElement.cpp b/libraries/entities/src/EntityTreeElement.cpp index 6e446630ee..afbb139d5f 100644 --- a/libraries/entities/src/EntityTreeElement.cpp +++ b/libraries/entities/src/EntityTreeElement.cpp @@ -222,7 +222,7 @@ EntityItemID EntityTreeElement::evalDetailedRayIntersection(const glm::vec3& ori glm::vec3 position = entity->getWorldPosition(); glm::mat4 translation = glm::translate(position); glm::quat orientation = entity->getWorldOrientation(); - glm::mat4 rotation = glm::mat4_cast(EntityItem::getBillboardRotation(position, orientation, entity->getBillboardMode(), EntityItem::getPrimaryViewFrustumPosition())); + glm::mat4 rotation = glm::mat4_cast(BillboardModeHelpers::getBillboardRotation(position, orientation, entity->getBillboardMode(), BillboardModeHelpers::getPrimaryViewFrustumPosition())); glm::mat4 entityToWorldMatrix = translation * rotation; glm::mat4 worldToEntityMatrix = glm::inverse(entityToWorldMatrix); @@ -373,7 +373,7 @@ EntityItemID EntityTreeElement::evalDetailedParabolaIntersection(const glm::vec3 glm::vec3 position = entity->getWorldPosition(); glm::mat4 translation = glm::translate(position); glm::quat orientation = entity->getWorldOrientation(); - glm::mat4 rotation = glm::mat4_cast(EntityItem::getBillboardRotation(position, orientation, entity->getBillboardMode(), EntityItem::getPrimaryViewFrustumPosition())); + glm::mat4 rotation = glm::mat4_cast(BillboardModeHelpers::getBillboardRotation(position, orientation, entity->getBillboardMode(), BillboardModeHelpers::getPrimaryViewFrustumPosition())); glm::mat4 entityToWorldMatrix = translation * rotation; glm::mat4 worldToEntityMatrix = glm::inverse(entityToWorldMatrix); @@ -479,7 +479,7 @@ void EntityTreeElement::evalEntitiesInSphere(const glm::vec3& position, float ra glm::vec3 position = entity->getWorldPosition(); glm::mat4 translation = glm::translate(position); glm::quat orientation = entity->getWorldOrientation(); - glm::mat4 rotation = glm::mat4_cast(EntityItem::getBillboardRotation(position, orientation, entity->getBillboardMode(), EntityItem::getPrimaryViewFrustumPosition())); + glm::mat4 rotation = glm::mat4_cast(BillboardModeHelpers::getBillboardRotation(position, orientation, entity->getBillboardMode(), BillboardModeHelpers::getPrimaryViewFrustumPosition())); glm::mat4 entityToWorldMatrix = translation * rotation; glm::mat4 worldToEntityMatrix = glm::inverse(entityToWorldMatrix); @@ -535,7 +535,7 @@ void EntityTreeElement::evalEntitiesInSphereWithType(const glm::vec3& position, glm::vec3 position = entity->getWorldPosition(); glm::mat4 translation = glm::translate(position); glm::quat orientation = entity->getWorldOrientation(); - glm::mat4 rotation = glm::mat4_cast(EntityItem::getBillboardRotation(position, orientation, entity->getBillboardMode(), EntityItem::getPrimaryViewFrustumPosition())); + glm::mat4 rotation = glm::mat4_cast(BillboardModeHelpers::getBillboardRotation(position, orientation, entity->getBillboardMode(), BillboardModeHelpers::getPrimaryViewFrustumPosition())); glm::mat4 entityToWorldMatrix = translation * rotation; glm::mat4 worldToEntityMatrix = glm::inverse(entityToWorldMatrix); @@ -596,7 +596,7 @@ void EntityTreeElement::evalEntitiesInSphereWithName(const glm::vec3& position, glm::vec3 position = entity->getWorldPosition(); glm::mat4 translation = glm::translate(position); glm::quat orientation = entity->getWorldOrientation(); - glm::mat4 rotation = glm::mat4_cast(EntityItem::getBillboardRotation(position, orientation, entity->getBillboardMode(), EntityItem::getPrimaryViewFrustumPosition())); + glm::mat4 rotation = glm::mat4_cast(BillboardModeHelpers::getBillboardRotation(position, orientation, entity->getBillboardMode(), BillboardModeHelpers::getPrimaryViewFrustumPosition())); glm::mat4 entityToWorldMatrix = translation * rotation; glm::mat4 worldToEntityMatrix = glm::inverse(entityToWorldMatrix); diff --git a/libraries/entities/src/GizmoEntityItem.cpp b/libraries/entities/src/GizmoEntityItem.cpp index 60ba39b787..6586d57fde 100644 --- a/libraries/entities/src/GizmoEntityItem.cpp +++ b/libraries/entities/src/GizmoEntityItem.cpp @@ -111,7 +111,7 @@ bool GizmoEntityItem::findDetailedRayIntersection(const glm::vec3& origin, const glm::quat rotation = getWorldOrientation(); rotation *= glm::angleAxis(-(float)M_PI_2, Vectors::RIGHT); glm::vec3 position = getWorldPosition() + rotation * (dimensions * (ENTITY_ITEM_DEFAULT_REGISTRATION_POINT - getRegistrationPoint())); - rotation = EntityItem::getBillboardRotation(position, rotation, getBillboardMode(), EntityItem::getPrimaryViewFrustumPosition(), false); + rotation = BillboardModeHelpers::getBillboardRotation(position, rotation, getBillboardMode(), BillboardModeHelpers::getPrimaryViewFrustumPosition(), false); if (findRayRectangleIntersection(origin, direction, rotation, position, xyDimensions, distance)) { glm::vec3 hitPosition = origin + (distance * direction); @@ -146,7 +146,7 @@ bool GizmoEntityItem::findDetailedParabolaIntersection(const glm::vec3& origin, glm::quat rotation = getWorldOrientation(); rotation *= glm::angleAxis(-(float)M_PI_2, Vectors::RIGHT); glm::vec3 position = getWorldPosition(); - rotation = EntityItem::getBillboardRotation(position, rotation, getBillboardMode(), EntityItem::getPrimaryViewFrustumPosition(), true); + rotation = BillboardModeHelpers::getBillboardRotation(position, rotation, getBillboardMode(), BillboardModeHelpers::getPrimaryViewFrustumPosition(), true); glm::quat inverseRot = glm::inverse(rotation); glm::vec3 localOrigin = inverseRot * (origin - position); diff --git a/libraries/entities/src/GridEntityItem.cpp b/libraries/entities/src/GridEntityItem.cpp index 499d21a59d..c675a11d27 100644 --- a/libraries/entities/src/GridEntityItem.cpp +++ b/libraries/entities/src/GridEntityItem.cpp @@ -133,7 +133,7 @@ bool GridEntityItem::findDetailedRayIntersection(const glm::vec3& origin, const glm::vec2 xyDimensions(dimensions.x, dimensions.y); glm::quat rotation = getWorldOrientation(); glm::vec3 position = getWorldPosition() + rotation * (dimensions * (ENTITY_ITEM_DEFAULT_REGISTRATION_POINT - getRegistrationPoint())); - rotation = EntityItem::getBillboardRotation(position, rotation, getBillboardMode(), EntityItem::getPrimaryViewFrustumPosition()); + rotation = BillboardModeHelpers::getBillboardRotation(position, rotation, getBillboardMode(), BillboardModeHelpers::getPrimaryViewFrustumPosition()); if (findRayRectangleIntersection(origin, direction, rotation, position, xyDimensions, distance)) { glm::vec3 forward = rotation * Vectors::FRONT; @@ -157,7 +157,7 @@ bool GridEntityItem::findDetailedParabolaIntersection(const glm::vec3& origin, c glm::vec2 xyDimensions(dimensions.x, dimensions.y); glm::quat rotation = getWorldOrientation(); glm::vec3 position = getWorldPosition() + rotation * (dimensions * (ENTITY_ITEM_DEFAULT_REGISTRATION_POINT - getRegistrationPoint())); - rotation = EntityItem::getBillboardRotation(position, rotation, getBillboardMode(), EntityItem::getPrimaryViewFrustumPosition()); + rotation = BillboardModeHelpers::getBillboardRotation(position, rotation, getBillboardMode(), BillboardModeHelpers::getPrimaryViewFrustumPosition()); glm::quat inverseRot = glm::inverse(rotation); glm::vec3 localOrigin = inverseRot * (origin - position); diff --git a/libraries/entities/src/ImageEntityItem.cpp b/libraries/entities/src/ImageEntityItem.cpp index 6cc47cc8f8..80711e4abc 100644 --- a/libraries/entities/src/ImageEntityItem.cpp +++ b/libraries/entities/src/ImageEntityItem.cpp @@ -135,7 +135,7 @@ bool ImageEntityItem::findDetailedRayIntersection(const glm::vec3& origin, const glm::vec2 xyDimensions(dimensions.x, dimensions.y); glm::quat rotation = getWorldOrientation(); glm::vec3 position = getWorldPosition() + rotation * (dimensions * (ENTITY_ITEM_DEFAULT_REGISTRATION_POINT - getRegistrationPoint())); - rotation = EntityItem::getBillboardRotation(position, rotation, getBillboardMode(), EntityItem::getPrimaryViewFrustumPosition()); + rotation = BillboardModeHelpers::getBillboardRotation(position, rotation, getBillboardMode(), BillboardModeHelpers::getPrimaryViewFrustumPosition()); if (findRayRectangleIntersection(origin, direction, rotation, position, xyDimensions, distance)) { glm::vec3 forward = rotation * Vectors::FRONT; @@ -159,7 +159,7 @@ bool ImageEntityItem::findDetailedParabolaIntersection(const glm::vec3& origin, glm::vec2 xyDimensions(dimensions.x, dimensions.y); glm::quat rotation = getWorldOrientation(); glm::vec3 position = getWorldPosition() + rotation * (dimensions * (ENTITY_ITEM_DEFAULT_REGISTRATION_POINT - getRegistrationPoint())); - rotation = EntityItem::getBillboardRotation(position, rotation, getBillboardMode(), EntityItem::getPrimaryViewFrustumPosition()); + rotation = BillboardModeHelpers::getBillboardRotation(position, rotation, getBillboardMode(), BillboardModeHelpers::getPrimaryViewFrustumPosition()); glm::quat inverseRot = glm::inverse(rotation); glm::vec3 localOrigin = inverseRot * (origin - position); diff --git a/libraries/entities/src/PolyVoxEntityItem.cpp b/libraries/entities/src/PolyVoxEntityItem.cpp index 9c8951514b..5ed9f69b5a 100644 --- a/libraries/entities/src/PolyVoxEntityItem.cpp +++ b/libraries/entities/src/PolyVoxEntityItem.cpp @@ -383,7 +383,7 @@ glm::mat4 PolyVoxEntityItem::voxelToWorldMatrix(bool includeBillboard) const { glm::mat4 translation = glm::translate(position); glm::mat4 rotation; if (includeBillboard) { - rotation = glm::mat4_cast(EntityItem::getBillboardRotation(position, orientation, getBillboardMode(), EntityItem::getPrimaryViewFrustumPosition())); + rotation = glm::mat4_cast(BillboardModeHelpers::getBillboardRotation(position, orientation, getBillboardMode(), BillboardModeHelpers::getPrimaryViewFrustumPosition())); } else { rotation = glm::mat4_cast(orientation); } diff --git a/libraries/entities/src/ShapeEntityItem.cpp b/libraries/entities/src/ShapeEntityItem.cpp index 691990eae1..943912b934 100644 --- a/libraries/entities/src/ShapeEntityItem.cpp +++ b/libraries/entities/src/ShapeEntityItem.cpp @@ -279,7 +279,7 @@ bool ShapeEntityItem::findDetailedRayIntersection(const glm::vec3& origin, const glm::vec3 dimensions = getScaledDimensions(); glm::quat rotation = getWorldOrientation(); glm::vec3 position = getWorldPosition() + rotation * (dimensions * (ENTITY_ITEM_DEFAULT_REGISTRATION_POINT - getRegistrationPoint())); - rotation = EntityItem::getBillboardRotation(position, rotation, getBillboardMode(), EntityItem::getPrimaryViewFrustumPosition()); + rotation = BillboardModeHelpers::getBillboardRotation(position, rotation, getBillboardMode(), BillboardModeHelpers::getPrimaryViewFrustumPosition()); // determine the ray in the frame of the entity transformed from a unit sphere glm::mat4 entityToWorldMatrix = glm::translate(position) * glm::mat4_cast(rotation) * glm::scale(dimensions); @@ -315,7 +315,7 @@ bool ShapeEntityItem::findDetailedParabolaIntersection(const glm::vec3& origin, glm::vec3 dimensions = getScaledDimensions(); glm::quat rotation = getWorldOrientation(); glm::vec3 position = getWorldPosition() + rotation * (dimensions * (ENTITY_ITEM_DEFAULT_REGISTRATION_POINT - getRegistrationPoint())); - rotation = EntityItem::getBillboardRotation(position, rotation, getBillboardMode(), EntityItem::getPrimaryViewFrustumPosition()); + rotation = BillboardModeHelpers::getBillboardRotation(position, rotation, getBillboardMode(), BillboardModeHelpers::getPrimaryViewFrustumPosition()); // determine the parabola in the frame of the entity transformed from a unit sphere glm::mat4 entityToWorldMatrix = glm::translate(position) * glm::mat4_cast(rotation) * glm::scale(dimensions); diff --git a/libraries/entities/src/TextEntityItem.cpp b/libraries/entities/src/TextEntityItem.cpp index bfafae69cf..7fab5cee53 100644 --- a/libraries/entities/src/TextEntityItem.cpp +++ b/libraries/entities/src/TextEntityItem.cpp @@ -199,7 +199,7 @@ bool TextEntityItem::findDetailedRayIntersection(const glm::vec3& origin, const glm::vec2 xyDimensions(dimensions.x, dimensions.y); glm::quat rotation = getWorldOrientation(); glm::vec3 position = getWorldPosition() + rotation * (dimensions * (ENTITY_ITEM_DEFAULT_REGISTRATION_POINT - getRegistrationPoint())); - rotation = EntityItem::getBillboardRotation(position, rotation, getBillboardMode(), EntityItem::getPrimaryViewFrustumPosition()); + rotation = BillboardModeHelpers::getBillboardRotation(position, rotation, getBillboardMode(), BillboardModeHelpers::getPrimaryViewFrustumPosition()); if (findRayRectangleIntersection(origin, direction, rotation, position, xyDimensions, distance)) { glm::vec3 forward = rotation * Vectors::FRONT; @@ -223,7 +223,7 @@ bool TextEntityItem::findDetailedParabolaIntersection(const glm::vec3& origin, c glm::vec2 xyDimensions(dimensions.x, dimensions.y); glm::quat rotation = getWorldOrientation(); glm::vec3 position = getWorldPosition() + rotation * (dimensions * (ENTITY_ITEM_DEFAULT_REGISTRATION_POINT - getRegistrationPoint())); - rotation = EntityItem::getBillboardRotation(position, rotation, getBillboardMode(), EntityItem::getPrimaryViewFrustumPosition()); + rotation = BillboardModeHelpers::getBillboardRotation(position, rotation, getBillboardMode(), BillboardModeHelpers::getPrimaryViewFrustumPosition()); glm::quat inverseRot = glm::inverse(rotation); glm::vec3 localOrigin = inverseRot * (origin - position); diff --git a/libraries/entities/src/WebEntityItem.cpp b/libraries/entities/src/WebEntityItem.cpp index 661c0865ca..d9d2425e11 100644 --- a/libraries/entities/src/WebEntityItem.cpp +++ b/libraries/entities/src/WebEntityItem.cpp @@ -165,7 +165,7 @@ bool WebEntityItem::findDetailedRayIntersection(const glm::vec3& origin, const g glm::vec2 xyDimensions(dimensions.x, dimensions.y); glm::quat rotation = getWorldOrientation(); glm::vec3 position = getWorldPosition() + rotation * (dimensions * (ENTITY_ITEM_DEFAULT_REGISTRATION_POINT - getRegistrationPoint())); - rotation = EntityItem::getBillboardRotation(position, rotation, getBillboardMode(), EntityItem::getPrimaryViewFrustumPosition()); + rotation = BillboardModeHelpers::getBillboardRotation(position, rotation, getBillboardMode(), BillboardModeHelpers::getPrimaryViewFrustumPosition()); if (findRayRectangleIntersection(origin, direction, rotation, position, xyDimensions, distance)) { glm::vec3 forward = rotation * Vectors::FRONT; @@ -190,7 +190,7 @@ bool WebEntityItem::findDetailedParabolaIntersection(const glm::vec3& origin, co glm::vec2 xyDimensions(dimensions.x, dimensions.y); glm::quat rotation = getWorldOrientation(); glm::vec3 position = getWorldPosition() + rotation * (dimensions * (ENTITY_ITEM_DEFAULT_REGISTRATION_POINT - getRegistrationPoint())); - rotation = EntityItem::getBillboardRotation(position, rotation, getBillboardMode(), EntityItem::getPrimaryViewFrustumPosition()); + rotation = BillboardModeHelpers::getBillboardRotation(position, rotation, getBillboardMode(), BillboardModeHelpers::getPrimaryViewFrustumPosition()); glm::quat inverseRot = glm::inverse(rotation); glm::vec3 localOrigin = inverseRot * (origin - position); diff --git a/libraries/render-utils/src/CauterizedMeshPartPayload.cpp b/libraries/render-utils/src/CauterizedMeshPartPayload.cpp index 9c7a2ee60b..dc1ffb7b67 100644 --- a/libraries/render-utils/src/CauterizedMeshPartPayload.cpp +++ b/libraries/render-utils/src/CauterizedMeshPartPayload.cpp @@ -19,8 +19,8 @@ using namespace render; CauterizedMeshPartPayload::CauterizedMeshPartPayload(ModelPointer model, int meshIndex, int partIndex, int shapeIndex, - const Transform& transform, const Transform& offsetTransform, const uint64_t& created) - : ModelMeshPartPayload(model, meshIndex, partIndex, shapeIndex, transform, offsetTransform, created) {} + const Transform& transform, const uint64_t& created) + : ModelMeshPartPayload(model, meshIndex, partIndex, shapeIndex, transform, created) {} void CauterizedMeshPartPayload::updateClusterBuffer(const std::vector& clusterMatrices, const std::vector& cauterizedClusterMatrices) { @@ -52,11 +52,26 @@ void CauterizedMeshPartPayload::updateClusterBuffer(const std::vector& clusterMatrices, @@ -23,9 +23,9 @@ public: void updateClusterBuffer(const std::vector& clusterDualQuaternions, const std::vector& cauterizedClusterQuaternions); - void updateTransformForCauterizedMesh(const Transform& renderTransform); + void updateTransformForCauterizedMesh(const Transform& modelTransform, const Model::MeshState& meshState, bool useDualQuaternionSkinning); - void bindTransform(gpu::Batch& batch, RenderArgs::RenderMode renderMode) const override; + void bindTransform(gpu::Batch& batch, const Transform& transform, RenderArgs::RenderMode renderMode) const override; void setEnableCauterization(bool enableCauterization) { _enableCauterization = enableCauterization; } diff --git a/libraries/render-utils/src/CauterizedModel.cpp b/libraries/render-utils/src/CauterizedModel.cpp index 94b7661b2f..a5d27dc7d2 100644 --- a/libraries/render-utils/src/CauterizedModel.cpp +++ b/libraries/render-utils/src/CauterizedModel.cpp @@ -69,10 +69,6 @@ void CauterizedModel::createRenderItemSet() { transform.setTranslation(_translation); transform.setRotation(_rotation); - Transform offset; - offset.setScale(_scale); - offset.postTranslate(_offset); - // Run through all of the meshes, and place them into their segregated, but unsorted buckets int shapeID = 0; uint32_t numMeshes = (uint32_t)meshes.size(); @@ -85,7 +81,7 @@ void CauterizedModel::createRenderItemSet() { // Create the render payloads int numParts = (int)mesh->getNumParts(); for (int partIndex = 0; partIndex < numParts; partIndex++) { - auto ptr = std::make_shared(shared_from_this(), i, partIndex, shapeID, transform, offset, _created); + auto ptr = std::make_shared(shared_from_this(), i, partIndex, shapeID, transform, _created); _modelMeshRenderItems << std::static_pointer_cast(ptr); auto material = getGeometry()->getShapeMaterial(shapeID); _modelMeshMaterialNames.push_back(material ? material->getName() : ""); @@ -235,37 +231,8 @@ void CauterizedModel::updateRenderItems() { data.computeAdjustedLocalBound(meshState.clusterMatrices); } - Transform renderTransform = modelTransform; - if (useDualQuaternionSkinning) { - if (meshState.clusterDualQuaternions.size() == 1 || meshState.clusterDualQuaternions.size() == 2) { - const auto& dq = meshState.clusterDualQuaternions[0]; - Transform transform(dq.getRotation(), - dq.getScale(), - dq.getTranslation()); - renderTransform = modelTransform.worldTransform(transform); - } - } else { - if (meshState.clusterMatrices.size() == 1 || meshState.clusterMatrices.size() == 2) { - renderTransform = modelTransform.worldTransform(Transform(meshState.clusterMatrices[0])); - } - } - data.updateTransformForSkinnedMesh(renderTransform, modelTransform); - - renderTransform = modelTransform; - if (useDualQuaternionSkinning) { - if (cauterizedMeshState.clusterDualQuaternions.size() == 1 || cauterizedMeshState.clusterDualQuaternions.size() == 2) { - const auto& dq = cauterizedMeshState.clusterDualQuaternions[0]; - Transform transform(dq.getRotation(), - dq.getScale(), - dq.getTranslation()); - renderTransform = modelTransform.worldTransform(Transform(transform)); - } - } else { - if (cauterizedMeshState.clusterMatrices.size() == 1 || cauterizedMeshState.clusterMatrices.size() == 2) { - renderTransform = modelTransform.worldTransform(Transform(cauterizedMeshState.clusterMatrices[0])); - } - } - data.updateTransformForCauterizedMesh(renderTransform); + data.updateTransformForSkinnedMesh(modelTransform, meshState, useDualQuaternionSkinning); + data.updateTransformForCauterizedMesh(modelTransform, cauterizedMeshState, useDualQuaternionSkinning); data.setEnableCauterization(enableCauterization); data.updateKey(renderItemKeyGlobalFlags); diff --git a/libraries/render-utils/src/MeshPartPayload.cpp b/libraries/render-utils/src/MeshPartPayload.cpp index 84aed55d72..0e0af6fc71 100644 --- a/libraries/render-utils/src/MeshPartPayload.cpp +++ b/libraries/render-utils/src/MeshPartPayload.cpp @@ -11,8 +11,7 @@ #include "MeshPartPayload.h" -#include - +#include #include #include #include @@ -23,292 +22,33 @@ #include "RenderPipelines.h" -// static const QString ENABLE_MATERIAL_PROCEDURAL_SHADERS_STRING { "HIFI_ENABLE_MATERIAL_PROCEDURAL_SHADERS" }; -// static bool ENABLE_MATERIAL_PROCEDURAL_SHADERS = QProcessEnvironment::systemEnvironment().contains(ENABLE_MATERIAL_PROCEDURAL_SHADERS_STRING); - -bool MeshPartPayload::enableMaterialProceduralShaders = false; - using namespace render; -namespace render { -template <> const ItemKey payloadGetKey(const MeshPartPayload::Pointer& payload) { - if (payload) { - return payload->getKey(); - } - return ItemKey::Builder::opaqueShape(); // for lack of a better idea -} - -template <> const Item::Bound payloadGetBound(const MeshPartPayload::Pointer& payload) { - if (payload) { - return payload->getBound(); - } - return Item::Bound(); -} - -template <> const ShapeKey shapeGetShapeKey(const MeshPartPayload::Pointer& payload) { - if (payload) { - return payload->getShapeKey(); - } - return ShapeKey::Builder::invalid(); -} - -template <> void payloadRender(const MeshPartPayload::Pointer& payload, RenderArgs* args) { - return payload->render(args); -} - -template <> bool payloadPassesZoneOcclusionTest(const MeshPartPayload::Pointer& payload, const std::unordered_set& containingZones) { - if (payload) { - return payload->passesZoneOcclusionTest(containingZones); - } - return false; -} -} - -MeshPartPayload::MeshPartPayload(const std::shared_ptr& mesh, int partIndex, graphics::MaterialPointer material, const uint64_t& created) : - _created(created) -{ - updateMeshPart(mesh, partIndex); - addMaterial(graphics::MaterialLayer(material, 0)); -} - -void MeshPartPayload::updateMeshPart(const std::shared_ptr& drawMesh, int partIndex) { - _drawMesh = drawMesh; - if (_drawMesh) { - auto vertexFormat = _drawMesh->getVertexFormat(); - _hasColorAttrib = vertexFormat->hasAttribute(gpu::Stream::COLOR); - _drawPart = _drawMesh->getPartBuffer().get(partIndex); - _localBound = _drawMesh->evalPartBound(partIndex); - } -} - -void MeshPartPayload::updateTransform(const Transform& transform, const Transform& offsetTransform) { - _transform = transform; - Transform::mult(_drawTransform, _transform, offsetTransform); - _worldBound = _localBound; - _worldBound.transform(_drawTransform); -} - -void MeshPartPayload::addMaterial(graphics::MaterialLayer material) { - _drawMaterials.push(material); -} - -void MeshPartPayload::removeMaterial(graphics::MaterialPointer material) { - _drawMaterials.remove(material); -} - -void MeshPartPayload::updateKey(const render::ItemKey& key) { - ItemKey::Builder builder(key); - builder.withTypeShape(); - - if (_drawMaterials.shouldUpdate()) { - RenderPipelines::updateMultiMaterial(_drawMaterials); - } - - auto matKey = _drawMaterials.getMaterialKey(); - if (matKey.isTranslucent()) { - builder.withTransparent(); - } - - if (_cullWithParent) { - builder.withSubMetaCulled(); - } - - _itemKey = builder.build(); -} - -ItemKey MeshPartPayload::getKey() const { - return _itemKey; -} - -Item::Bound MeshPartPayload::getBound() const { - graphics::MaterialPointer material = _drawMaterials.empty() ? nullptr : _drawMaterials.top().material; - if (material && material->isProcedural() && material->isReady()) { - auto procedural = std::static_pointer_cast(_drawMaterials.top().material); - if (procedural->hasVertexShader() && procedural->hasBoundOperator()) { - return procedural->getBound(); - } - } - return _worldBound; -} - -ShapeKey MeshPartPayload::getShapeKey() const { - ShapeKey::Builder builder; - graphics::MaterialPointer material = _drawMaterials.empty() ? nullptr : _drawMaterials.top().material; - graphics::MaterialKey drawMaterialKey = _drawMaterials.getMaterialKey(); - - if (drawMaterialKey.isTranslucent()) { - builder.withTranslucent(); - } - - if (material && material->isProcedural() && material->isReady()) { - builder.withOwnPipeline(); - } else { - builder.withMaterial(); - - if (drawMaterialKey.isNormalMap()) { - builder.withTangents(); - } - if (drawMaterialKey.isLightMap()) { - builder.withLightMap(); - } - if (drawMaterialKey.isUnlit()) { - builder.withUnlit(); - } - if (material) { - builder.withCullFaceMode(material->getCullFaceMode()); - } - } - - return builder.build(); -} - -void MeshPartPayload::drawCall(gpu::Batch& batch) const { - batch.drawIndexed(gpu::TRIANGLES, _drawPart._numIndices, _drawPart._startIndex); -} - -void MeshPartPayload::bindMesh(gpu::Batch& batch) { - batch.setIndexBuffer(gpu::UINT32, (_drawMesh->getIndexBuffer()._buffer), 0); - - batch.setInputFormat((_drawMesh->getVertexFormat())); - - batch.setInputStream(0, _drawMesh->getVertexStream()); -} - -void MeshPartPayload::bindTransform(gpu::Batch& batch, RenderArgs::RenderMode renderMode) const { - batch.setModelTransform(_drawTransform); -} - -bool MeshPartPayload::passesZoneOcclusionTest(const std::unordered_set& containingZones) const { - if (!_renderWithZones.isEmpty()) { - if (!containingZones.empty()) { - for (auto renderWithZone : _renderWithZones) { - if (containingZones.find(renderWithZone) != containingZones.end()) { - return true; - } - } - } - return false; - } - return true; -} - -void MeshPartPayload::render(RenderArgs* args) { - PerformanceTimer perfTimer("MeshPartPayload::render"); - - if (!args) { - return; - } - - gpu::Batch& batch = *(args->_batch); - - // Bind the model transform and the skinCLusterMatrices if needed - bindTransform(batch, args->_renderMode); - - //Bind the index buffer and vertex buffer and Blend shapes if needed - bindMesh(batch); - - if (!_drawMaterials.empty() && _drawMaterials.top().material && _drawMaterials.top().material->isProcedural() && - _drawMaterials.top().material->isReady()) { - if (!enableMaterialProceduralShaders) { - return; - } - auto procedural = std::static_pointer_cast(_drawMaterials.top().material); - auto& schema = _drawMaterials.getSchemaBuffer().get(); - glm::vec4 outColor = glm::vec4(ColorUtils::tosRGBVec3(schema._albedo), schema._opacity); - outColor = procedural->getColor(outColor); - procedural->prepare(batch, _drawTransform.getTranslation(), _drawTransform.getScale(), _drawTransform.getRotation(), _created, - ProceduralProgramKey(outColor.a < 1.0f)); - batch._glColor4f(outColor.r, outColor.g, outColor.b, outColor.a); - } else { - // apply material properties - if (RenderPipelines::bindMaterials(_drawMaterials, batch, args->_renderMode, args->_enableTexturing)) { - args->_details._materialSwitches++; - } - } - - // Draw! - { - PerformanceTimer perfTimer("batch.drawIndexed()"); - drawCall(batch); - } - - const int INDICES_PER_TRIANGLE = 3; - args->_details._trianglesRendered += _drawPart._numIndices / INDICES_PER_TRIANGLE; -} - -namespace render { -template <> const ItemKey payloadGetKey(const ModelMeshPartPayload::Pointer& payload) { - if (payload) { - return payload->getKey(); - } - return ItemKey::Builder::opaqueShape(); // for lack of a better idea -} - -template <> const Item::Bound payloadGetBound(const ModelMeshPartPayload::Pointer& payload) { - if (payload) { - return payload->getBound(); - } - return Item::Bound(); -} - -template <> const ShapeKey shapeGetShapeKey(const ModelMeshPartPayload::Pointer& payload) { - if (payload) { - return payload->getShapeKey(); - } - return ShapeKey::Builder::invalid(); -} - -template <> void payloadRender(const ModelMeshPartPayload::Pointer& payload, RenderArgs* args) { - return payload->render(args); -} - -template <> bool payloadPassesZoneOcclusionTest(const ModelMeshPartPayload::Pointer& payload, const std::unordered_set& containingZones) { - if (payload) { - return payload->passesZoneOcclusionTest(containingZones); - } - return false; -} -} +bool ModelMeshPartPayload::enableMaterialProceduralShaders = false; ModelMeshPartPayload::ModelMeshPartPayload(ModelPointer model, int meshIndex, int partIndex, int shapeIndex, - const Transform& transform, const Transform& offsetTransform, const uint64_t& created) : + const Transform& transform, const uint64_t& created) : _meshIndex(meshIndex), - _shapeID(shapeIndex) { + _created(created) { assert(model && model->isLoaded()); - bool useDualQuaternionSkinning = model->getUseDualQuaternionSkinning(); - auto& modelMesh = model->getGeometry()->getMeshes().at(_meshIndex); _meshNumVertices = (int)modelMesh->getNumVertices(); const Model::MeshState& state = model->getMeshState(_meshIndex); updateMeshPart(modelMesh, partIndex); + bool useDualQuaternionSkinning = model->getUseDualQuaternionSkinning(); if (useDualQuaternionSkinning) { computeAdjustedLocalBound(state.clusterDualQuaternions); } else { computeAdjustedLocalBound(state.clusterMatrices); } - updateTransform(transform, offsetTransform); - Transform renderTransform = transform; - if (useDualQuaternionSkinning) { - if (state.clusterDualQuaternions.size() == 1) { - const auto& dq = state.clusterDualQuaternions[0]; - Transform transform(dq.getRotation(), - dq.getScale(), - dq.getTranslation()); - renderTransform = transform.worldTransform(Transform(transform)); - } - } else { - if (state.clusterMatrices.size() == 1) { - renderTransform = transform.worldTransform(Transform(state.clusterMatrices[0])); - } - } - updateTransformForSkinnedMesh(renderTransform, transform); + updateTransformForSkinnedMesh(transform, state, useDualQuaternionSkinning); - initCache(model); + initCache(model, shapeIndex); #if defined(Q_OS_MAC) || defined(Q_OS_ANDROID) // On mac AMD, we specifically need to have a _meshBlendshapeBuffer bound when using a deformed mesh pipeline @@ -322,14 +62,11 @@ ModelMeshPartPayload::ModelMeshPartPayload(ModelPointer model, int meshIndex, in _meshBlendshapeBuffer = std::make_shared(sizeof(BlendshapeOffset), reinterpret_cast(&data), sizeof(BlendshapeOffset)); } #endif - - _created = created; } -void ModelMeshPartPayload::initCache(const ModelPointer& model) { +void ModelMeshPartPayload::initCache(const ModelPointer& model, int shapeID) { if (_drawMesh) { auto vertexFormat = _drawMesh->getVertexFormat(); - _hasColorAttrib = vertexFormat->hasAttribute(gpu::Stream::COLOR); _isSkinned = vertexFormat->hasAttribute(gpu::Stream::SKIN_CLUSTER_WEIGHT) && vertexFormat->hasAttribute(gpu::Stream::SKIN_CLUSTER_INDEX); const HFMModel& hfmModel = model->getHFMModel(); @@ -339,18 +76,22 @@ void ModelMeshPartPayload::initCache(const ModelPointer& model) { _hasTangents = !mesh.tangents.isEmpty(); } - auto networkMaterial = model->getGeometry()->getShapeMaterial(_shapeID); + auto networkMaterial = model->getGeometry()->getShapeMaterial(shapeID); if (networkMaterial) { addMaterial(graphics::MaterialLayer(networkMaterial, 0)); } } -void ModelMeshPartPayload::notifyLocationChanged() { - +void ModelMeshPartPayload::updateMeshPart(const std::shared_ptr& drawMesh, int partIndex) { + _drawMesh = drawMesh; + if (_drawMesh) { + auto vertexFormat = _drawMesh->getVertexFormat(); + _drawPart = _drawMesh->getPartBuffer().get(partIndex); + _localBound = _drawMesh->evalPartBound(partIndex); + } } void ModelMeshPartPayload::updateClusterBuffer(const std::vector& clusterMatrices) { - // reset cluster buffer if we change the cluster buffer type if (_clusterBufferType != ClusterBufferType::Matrices) { _clusterBuffer.reset(); @@ -370,7 +111,6 @@ void ModelMeshPartPayload::updateClusterBuffer(const std::vector& clu } void ModelMeshPartPayload::updateClusterBuffer(const std::vector& clusterDualQuaternions) { - // reset cluster buffer if we change the cluster buffer type if (_clusterBufferType != ClusterBufferType::DualQuaternions) { _clusterBuffer.reset(); @@ -389,13 +129,78 @@ void ModelMeshPartPayload::updateClusterBuffer(const std::vector& clusterMatrices) { + _adjustedLocalBound = _localBound; + if (clusterMatrices.size() > 0) { + _adjustedLocalBound.transform(clusterMatrices.back()); + + for (int i = 0; i < (int)clusterMatrices.size() - 1; ++i) { + AABox clusterBound = _localBound; + clusterBound.transform(clusterMatrices[i]); + _adjustedLocalBound += clusterBound; + } + } +} + +void ModelMeshPartPayload::computeAdjustedLocalBound(const std::vector& clusterDualQuaternions) { + _adjustedLocalBound = _localBound; + if (clusterDualQuaternions.size() > 0) { + Transform rootTransform(clusterDualQuaternions.back().getRotation(), + clusterDualQuaternions.back().getScale(), + clusterDualQuaternions.back().getTranslation()); + _adjustedLocalBound.transform(rootTransform); + + for (int i = 0; i < (int)clusterDualQuaternions.size() - 1; ++i) { + AABox clusterBound = _localBound; + Transform transform(clusterDualQuaternions[i].getRotation(), + clusterDualQuaternions[i].getScale(), + clusterDualQuaternions[i].getTranslation()); + clusterBound.transform(transform); + _adjustedLocalBound += clusterBound; + } + } +} + +void ModelMeshPartPayload::updateTransformForSkinnedMesh(const Transform& modelTransform, const Model::MeshState& meshState, bool useDualQuaternionSkinning) { + _localTransform = Transform(); + if (useDualQuaternionSkinning) { + if (meshState.clusterDualQuaternions.size() == 1 || meshState.clusterDualQuaternions.size() == 2) { + const auto& dq = meshState.clusterDualQuaternions[0]; + _localTransform = Transform(dq.getRotation(), + dq.getScale(), + dq.getTranslation()); + } + } else { + if (meshState.clusterMatrices.size() == 1 || meshState.clusterMatrices.size() == 2) { + _localTransform = Transform(meshState.clusterMatrices[0]); + } + } + + _parentTransform = modelTransform; + _worldBound = _adjustedLocalBound; + _worldBound.transform(_parentTransform); +} + +void ModelMeshPartPayload::bindMesh(gpu::Batch& batch) { + batch.setIndexBuffer(gpu::UINT32, (_drawMesh->getIndexBuffer()._buffer), 0); + batch.setInputFormat((_drawMesh->getVertexFormat())); + if (_meshBlendshapeBuffer) { + batch.setResourceBuffer(0, _meshBlendshapeBuffer); + } + batch.setInputStream(0, _drawMesh->getVertexStream()); +} + +void ModelMeshPartPayload::bindTransform(gpu::Batch& batch, const Transform& transform, RenderArgs::RenderMode renderMode) const { + if (_clusterBuffer) { + batch.setUniformBuffer(graphics::slot::buffer::Skinning, _clusterBuffer); + } + batch.setModelTransform(transform); +} + +void ModelMeshPartPayload::drawCall(gpu::Batch& batch) const { + batch.drawIndexed(gpu::TRIANGLES, _drawPart._numIndices, _drawPart._startIndex); } -// Note that this method is called for models but not for shapes void ModelMeshPartPayload::updateKey(const render::ItemKey& key) { ItemKey::Builder builder(key); builder.withTypeShape(); @@ -480,26 +285,25 @@ void ModelMeshPartPayload::setShapeKey(bool invalidateShapeKey, PrimitiveMode pr _shapeKey = builder.build(); } +ItemKey ModelMeshPartPayload::getKey() const { + return _itemKey; +} + +Item::Bound ModelMeshPartPayload::getBound() const { + graphics::MaterialPointer material = _drawMaterials.empty() ? nullptr : _drawMaterials.top().material; + if (material && material->isProcedural() && material->isReady()) { + auto procedural = std::static_pointer_cast(_drawMaterials.top().material); + if (procedural->hasVertexShader() && procedural->hasBoundOperator()) { + return procedural->getBound(); + } + } + return _worldBound; +} + ShapeKey ModelMeshPartPayload::getShapeKey() const { return _shapeKey; } -void ModelMeshPartPayload::bindMesh(gpu::Batch& batch) { - batch.setIndexBuffer(gpu::UINT32, (_drawMesh->getIndexBuffer()._buffer), 0); - batch.setInputFormat((_drawMesh->getVertexFormat())); - if (_meshBlendshapeBuffer) { - batch.setResourceBuffer(0, _meshBlendshapeBuffer); - } - batch.setInputStream(0, _drawMesh->getVertexStream()); -} - -void ModelMeshPartPayload::bindTransform(gpu::Batch& batch, RenderArgs::RenderMode renderMode) const { - if (_clusterBuffer) { - batch.setUniformBuffer(graphics::slot::buffer::Skinning, _clusterBuffer); - } - batch.setModelTransform(_transform); -} - void ModelMeshPartPayload::render(RenderArgs* args) { PerformanceTimer perfTimer("ModelMeshPartPayload::render"); @@ -509,7 +313,12 @@ void ModelMeshPartPayload::render(RenderArgs* args) { gpu::Batch& batch = *(args->_batch); - bindTransform(batch, args->_renderMode); + Transform transform = _parentTransform; + transform.setRotation(BillboardModeHelpers::getBillboardRotation(transform.getTranslation(), transform.getRotation(), _billboardMode, + args->_renderMode == RenderArgs::RenderMode::SHADOW_RENDER_MODE ? BillboardModeHelpers::getPrimaryViewFrustumPosition() : args->getViewFrustum().getPosition())); + + Transform modelTransform = transform.worldTransform(_localTransform); + bindTransform(batch, modelTransform, args->_renderMode); //Bind the index buffer and vertex buffer and Blend shapes if needed bindMesh(batch); @@ -528,7 +337,7 @@ void ModelMeshPartPayload::render(RenderArgs* args) { auto& schema = _drawMaterials.getSchemaBuffer().get(); glm::vec4 outColor = glm::vec4(ColorUtils::tosRGBVec3(schema._albedo), schema._opacity); outColor = procedural->getColor(outColor); - procedural->prepare(batch, _drawTransform.getTranslation(), _drawTransform.getScale(), _drawTransform.getRotation(), _created, + procedural->prepare(batch, transform.getTranslation(), transform.getScale(), transform.getRotation(), _created, ProceduralProgramKey(outColor.a < 1.0f, _shapeKey.isDeformed(), _shapeKey.isDualQuatSkinned())); batch._glColor4f(outColor.r, outColor.g, outColor.b, outColor.a); } else { @@ -548,36 +357,18 @@ void ModelMeshPartPayload::render(RenderArgs* args) { args->_details._trianglesRendered += _drawPart._numIndices / INDICES_PER_TRIANGLE; } -void ModelMeshPartPayload::computeAdjustedLocalBound(const std::vector& clusterMatrices) { - _adjustedLocalBound = _localBound; - if (clusterMatrices.size() > 0) { - _adjustedLocalBound.transform(clusterMatrices.back()); - - for (int i = 0; i < (int)clusterMatrices.size() - 1; ++i) { - AABox clusterBound = _localBound; - clusterBound.transform(clusterMatrices[i]); - _adjustedLocalBound += clusterBound; - } - } -} - -void ModelMeshPartPayload::computeAdjustedLocalBound(const std::vector& clusterDualQuaternions) { - _adjustedLocalBound = _localBound; - if (clusterDualQuaternions.size() > 0) { - Transform rootTransform(clusterDualQuaternions.back().getRotation(), - clusterDualQuaternions.back().getScale(), - clusterDualQuaternions.back().getTranslation()); - _adjustedLocalBound.transform(rootTransform); - - for (int i = 0; i < (int)clusterDualQuaternions.size() - 1; ++i) { - AABox clusterBound = _localBound; - Transform transform(clusterDualQuaternions[i].getRotation(), - clusterDualQuaternions[i].getScale(), - clusterDualQuaternions[i].getTranslation()); - clusterBound.transform(transform); - _adjustedLocalBound += clusterBound; +bool ModelMeshPartPayload::passesZoneOcclusionTest(const std::unordered_set& containingZones) const { + if (!_renderWithZones.isEmpty()) { + if (!containingZones.empty()) { + for (auto renderWithZone : _renderWithZones) { + if (containingZones.find(renderWithZone) != containingZones.end()) { + return true; + } + } } + return false; } + return true; } void ModelMeshPartPayload::setBlendshapeBuffer(const std::unordered_map& blendshapeBuffers, const QVector& blendedMeshSizes) { @@ -596,3 +387,37 @@ void ModelMeshPartPayload::setBlendshapeBuffer(const std::unordered_map const ItemKey payloadGetKey(const ModelMeshPartPayload::Pointer& payload) { + if (payload) { + return payload->getKey(); + } + return ItemKey::Builder::opaqueShape(); // for lack of a better idea +} + +template <> const Item::Bound payloadGetBound(const ModelMeshPartPayload::Pointer& payload) { + if (payload) { + return payload->getBound(); + } + return Item::Bound(); +} + +template <> const ShapeKey shapeGetShapeKey(const ModelMeshPartPayload::Pointer& payload) { + if (payload) { + return payload->getShapeKey(); + } + return ShapeKey::Builder::invalid(); +} + +template <> void payloadRender(const ModelMeshPartPayload::Pointer& payload, RenderArgs* args) { + return payload->render(args); +} + +template <> bool payloadPassesZoneOcclusionTest(const ModelMeshPartPayload::Pointer& payload, const std::unordered_set& containingZones) { + if (payload) { + return payload->passesZoneOcclusionTest(containingZones); + } + return false; +} +} diff --git a/libraries/render-utils/src/MeshPartPayload.h b/libraries/render-utils/src/MeshPartPayload.h index 8ed799bd74..63ccb85470 100644 --- a/libraries/render-utils/src/MeshPartPayload.h +++ b/libraries/render-utils/src/MeshPartPayload.h @@ -12,147 +12,94 @@ #ifndef hifi_MeshPartPayload_h #define hifi_MeshPartPayload_h -#include - -#include - -#include - -#include - #include "Model.h" -class Model; +#include +#include +#include -class MeshPartPayload { +class ModelMeshPartPayload { public: - MeshPartPayload() = default; - MeshPartPayload(const std::shared_ptr& mesh, int partIndex, graphics::MaterialPointer material, const uint64_t& created); - virtual ~MeshPartPayload() = default; - - typedef render::Payload Payload; + typedef render::Payload Payload; typedef Payload::DataPointer Pointer; - virtual void updateKey(const render::ItemKey& key); + ModelMeshPartPayload(ModelPointer model, int meshIndex, int partIndex, int shapeIndex, const Transform& transform, const uint64_t& created); virtual void updateMeshPart(const std::shared_ptr& drawMesh, int partIndex); - virtual void notifyLocationChanged() {} - void updateTransform(const Transform& transform, const Transform& offsetTransform); + void updateClusterBuffer(const std::vector& clusterMatrices); // matrix palette skinning + void updateClusterBuffer(const std::vector& clusterDualQuaternions); // dual quaternion skinning - // Render Item interface - virtual render::ItemKey getKey() const; - virtual render::Item::Bound getBound() const; - virtual render::ShapeKey getShapeKey() const; - virtual void render(RenderArgs* args); + void computeAdjustedLocalBound(const std::vector& clusterMatrices); // matrix palette skinning + void computeAdjustedLocalBound(const std::vector& clusterDualQuaternions); // dual quaternion skinning + + void updateTransformForSkinnedMesh(const Transform& modelTransform, const Model::MeshState& meshState, bool useDualQuaternionSkinning); // ModelMeshPartPayload functions to perform render + void bindMesh(gpu::Batch& batch); + virtual void bindTransform(gpu::Batch& batch, const Transform& transform, RenderArgs::RenderMode renderMode) const; void drawCall(gpu::Batch& batch) const; - virtual void bindMesh(gpu::Batch& batch); - virtual void bindTransform(gpu::Batch& batch, RenderArgs::RenderMode renderMode) const; - // Payload resource cached values - Transform _drawTransform; - Transform _transform; - int _partIndex = 0; - bool _hasColorAttrib { false }; + void updateKey(const render::ItemKey& key); + void setShapeKey(bool invalidateShapeKey, PrimitiveMode primitiveMode, bool useDualQuaternionSkinning); - graphics::Box _localBound; - graphics::Box _adjustedLocalBound; - mutable graphics::Box _worldBound; - std::shared_ptr _drawMesh; - - graphics::MultiMaterial _drawMaterials; - graphics::Mesh::Part _drawPart; + // Render Item interface + render::ItemKey getKey() const; + render::Item::Bound getBound() const; + render::ShapeKey getShapeKey() const; + void render(RenderArgs* args); size_t getVerticesCount() const { return _drawMesh ? _drawMesh->getNumVertices() : 0; } size_t getMaterialTextureSize() { return _drawMaterials.getTextureSize(); } int getMaterialTextureCount() { return _drawMaterials.getTextureCount(); } bool hasTextureInfo() const { return _drawMaterials.hasTextureInfo(); } - void addMaterial(graphics::MaterialLayer material); - void removeMaterial(graphics::MaterialPointer material); - + void setCauterized(bool cauterized) { _cauterized = cauterized; } void setCullWithParent(bool value) { _cullWithParent = value; } - void setRenderWithZones(const QVector& renderWithZones) { _renderWithZones = renderWithZones; } + void setBillboardMode(BillboardMode billboardMode) { _billboardMode = billboardMode; } bool passesZoneOcclusionTest(const std::unordered_set& containingZones) const; - static bool enableMaterialProceduralShaders; - -protected: - render::ItemKey _itemKey{ render::ItemKey::Builder::opaqueShape().build() }; - bool _cullWithParent { false }; - QVector _renderWithZones; - uint64_t _created; -}; - -namespace render { - template <> const ItemKey payloadGetKey(const MeshPartPayload::Pointer& payload); - template <> const Item::Bound payloadGetBound(const MeshPartPayload::Pointer& payload); - template <> const ShapeKey shapeGetShapeKey(const MeshPartPayload::Pointer& payload); - template <> void payloadRender(const MeshPartPayload::Pointer& payload, RenderArgs* args); - template <> bool payloadPassesZoneOcclusionTest(const MeshPartPayload::Pointer& payload, const std::unordered_set& containingZones); -} - -class ModelMeshPartPayload : public MeshPartPayload { -public: - ModelMeshPartPayload(ModelPointer model, int meshIndex, int partIndex, int shapeIndex, const Transform& transform, const Transform& offsetTransform, const uint64_t& created); - - typedef render::Payload Payload; - typedef Payload::DataPointer Pointer; - - void notifyLocationChanged() override; - - void updateKey(const render::ItemKey& key) override; - - // matrix palette skinning - void updateClusterBuffer(const std::vector& clusterMatrices); - - // dual quaternion skinning - void updateClusterBuffer(const std::vector& clusterDualQuaternions); - void updateTransformForSkinnedMesh(const Transform& renderTransform, const Transform& boundTransform); - - // Render Item interface - render::ShapeKey getShapeKey() const override; - void render(RenderArgs* args) override; - - void setShapeKey(bool invalidateShapeKey, PrimitiveMode primitiveMode, bool useDualQuaternionSkinning); - void setCauterized(bool cauterized) { _cauterized = cauterized; } - - // ModelMeshPartPayload functions to perform render - void bindMesh(gpu::Batch& batch) override; - void bindTransform(gpu::Batch& batch, RenderArgs::RenderMode renderMode) const override; - - // matrix palette skinning - void computeAdjustedLocalBound(const std::vector& clusterMatrices); - - // dual quaternion skinning - void computeAdjustedLocalBound(const std::vector& clusterDualQuaternions); - - gpu::BufferPointer _clusterBuffer; - - enum class ClusterBufferType { Matrices, DualQuaternions }; - ClusterBufferType _clusterBufferType { ClusterBufferType::Matrices }; - - int _meshIndex; - int _shapeID; - - bool _isSkinned{ false }; - bool _isBlendShaped { false }; - bool _hasTangents { false }; + void addMaterial(graphics::MaterialLayer material) { _drawMaterials.push(material); } + void removeMaterial(graphics::MaterialPointer material) { _drawMaterials.remove(material); } void setBlendshapeBuffer(const std::unordered_map& blendshapeBuffers, const QVector& blendedMeshSizes); + static bool enableMaterialProceduralShaders; + private: - void initCache(const ModelPointer& model); + void initCache(const ModelPointer& model, int shapeID); + + int _meshIndex; + std::shared_ptr _drawMesh; + graphics::Mesh::Part _drawPart; + graphics::MultiMaterial _drawMaterials; + + gpu::BufferPointer _clusterBuffer; + enum class ClusterBufferType { Matrices, DualQuaternions }; + ClusterBufferType _clusterBufferType { ClusterBufferType::Matrices }; gpu::BufferPointer _meshBlendshapeBuffer; int _meshNumVertices; + + render::ItemKey _itemKey { render::ItemKey::Builder::opaqueShape().build() }; render::ShapeKey _shapeKey { render::ShapeKey::Builder::invalid() }; + + bool _isSkinned { false }; + bool _isBlendShaped { false }; + bool _hasTangents { false }; bool _prevUseDualQuaternionSkinning { false }; bool _cauterized { false }; + bool _cullWithParent { false }; + QVector _renderWithZones; + BillboardMode _billboardMode; + uint64_t _created; + Transform _localTransform; + Transform _parentTransform; + graphics::Box _localBound; + graphics::Box _adjustedLocalBound; + mutable graphics::Box _worldBound; }; namespace render { diff --git a/libraries/render-utils/src/Model.cpp b/libraries/render-utils/src/Model.cpp index 9ad343639d..9bf1596a04 100644 --- a/libraries/render-utils/src/Model.cpp +++ b/libraries/render-utils/src/Model.cpp @@ -226,6 +226,7 @@ void Model::updateRenderItems() { modelTransform.setScale(glm::vec3(1.0f)); PrimitiveMode primitiveMode = self->getPrimitiveMode(); + BillboardMode billboardMode = self->getBillboardMode(); auto renderWithZones = self->getRenderWithZones(); auto renderItemKeyGlobalFlags = self->getRenderItemKeyGlobalFlags(); bool cauterized = self->isCauterized(); @@ -242,7 +243,7 @@ void Model::updateRenderItems() { bool useDualQuaternionSkinning = self->getUseDualQuaternionSkinning(); transaction.updateItem(itemID, [modelTransform, meshState, useDualQuaternionSkinning, - invalidatePayloadShapeKey, primitiveMode, renderItemKeyGlobalFlags, + invalidatePayloadShapeKey, primitiveMode, billboardMode, renderItemKeyGlobalFlags, cauterized, renderWithZones](ModelMeshPartPayload& data) { if (useDualQuaternionSkinning) { data.updateClusterBuffer(meshState.clusterDualQuaternions); @@ -252,25 +253,11 @@ void Model::updateRenderItems() { data.computeAdjustedLocalBound(meshState.clusterMatrices); } - Transform renderTransform = modelTransform; - - if (useDualQuaternionSkinning) { - if (meshState.clusterDualQuaternions.size() == 1 || meshState.clusterDualQuaternions.size() == 2) { - const auto& dq = meshState.clusterDualQuaternions[0]; - Transform transform(dq.getRotation(), - dq.getScale(), - dq.getTranslation()); - renderTransform = modelTransform.worldTransform(Transform(transform)); - } - } else { - if (meshState.clusterMatrices.size() == 1 || meshState.clusterMatrices.size() == 2) { - renderTransform = modelTransform.worldTransform(Transform(meshState.clusterMatrices[0])); - } - } - data.updateTransformForSkinnedMesh(renderTransform, modelTransform); + data.updateTransformForSkinnedMesh(modelTransform, meshState, useDualQuaternionSkinning); data.setCauterized(cauterized); data.setRenderWithZones(renderWithZones); + data.setBillboardMode(billboardMode); data.updateKey(renderItemKeyGlobalFlags); data.setShapeKey(invalidatePayloadShapeKey, primitiveMode, useDualQuaternionSkinning); }); @@ -987,6 +974,31 @@ void Model::setPrimitiveMode(PrimitiveMode primitiveMode, const render::ScenePoi } } +void Model::setBillboardMode(BillboardMode billboardMode, const render::ScenePointer& scene) { + if (_billboardMode != billboardMode) { + _billboardMode = billboardMode; + if (!scene) { + _needsFixupInScene = true; + return; + } + + bool useDualQuaternionSkinning = _useDualQuaternionSkinning; + std::unordered_map shouldInvalidatePayloadShapeKeyMap; + + for (auto& shape : _modelMeshRenderItemShapes) { + shouldInvalidatePayloadShapeKeyMap[shape.meshIndex] = shouldInvalidatePayloadShapeKey(shape.meshIndex); + } + + render::Transaction transaction; + for (auto item : _modelMeshRenderItemIDs) { + transaction.updateItem(item, [billboardMode](ModelMeshPartPayload& data) { + data.setBillboardMode(billboardMode); + }); + } + scene->enqueueTransaction(transaction); + } +} + void Model::setCullWithParent(bool cullWithParent, const render::ScenePointer& scene) { if (_cullWithParent != cullWithParent) { _cullWithParent = cullWithParent; @@ -1017,9 +1029,8 @@ void Model::setRenderWithZones(const QVector& renderWithZones, const rend } render::Transaction transaction; - auto renderItemsKey = _renderItemKeyGlobalFlags; for (auto item : _modelMeshRenderItemIDs) { - transaction.updateItem(item, [renderWithZones, renderItemsKey](ModelMeshPartPayload& data) { + transaction.updateItem(item, [renderWithZones](ModelMeshPartPayload& data) { data.setRenderWithZones(renderWithZones); }); } @@ -1545,10 +1556,6 @@ void Model::createRenderItemSet() { transform.setTranslation(_translation); transform.setRotation(_rotation); - Transform offset; - offset.setScale(_scale); - offset.postTranslate(_offset); - // Run through all of the meshes, and place them into their segregated, but unsorted buckets int shapeID = 0; uint32_t numMeshes = (uint32_t)meshes.size(); @@ -1561,7 +1568,7 @@ void Model::createRenderItemSet() { // Create the render payloads int numParts = (int)mesh->getNumParts(); for (int partIndex = 0; partIndex < numParts; partIndex++) { - _modelMeshRenderItems << std::make_shared(shared_from_this(), i, partIndex, shapeID, transform, offset, _created); + _modelMeshRenderItems << std::make_shared(shared_from_this(), i, partIndex, shapeID, transform, _created); auto material = getGeometry()->getShapeMaterial(shapeID); _modelMeshMaterialNames.push_back(material ? material->getName() : ""); _modelMeshRenderItemShapes.emplace_back(ShapeInfo{ (int)i }); diff --git a/libraries/render-utils/src/Model.h b/libraries/render-utils/src/Model.h index 1e7ab55d5a..3085dcfc6f 100644 --- a/libraries/render-utils/src/Model.h +++ b/libraries/render-utils/src/Model.h @@ -38,6 +38,7 @@ #include "TextureCache.h" #include "Rig.h" #include "PrimitiveMode.h" +#include "BillboardMode.h" // Use dual quaternion skinning! // Must match define in Skinning.slh @@ -121,6 +122,9 @@ public: void setPrimitiveMode(PrimitiveMode primitiveMode, const render::ScenePointer& scene = nullptr); PrimitiveMode getPrimitiveMode() const { return _primitiveMode; } + void setBillboardMode(BillboardMode billboardMode, const render::ScenePointer& scene = nullptr); + BillboardMode getBillboardMode() const { return _billboardMode; } + void setCullWithParent(bool value, const render::ScenePointer& scene = nullptr); void setRenderWithZones(const QVector& renderWithZones, const render::ScenePointer& scene = nullptr); @@ -447,6 +451,7 @@ protected: virtual void createRenderItemSet(); PrimitiveMode _primitiveMode { PrimitiveMode::SOLID }; + BillboardMode _billboardMode { BillboardMode::NONE }; bool _useDualQuaternionSkinning { false }; // debug rendering support diff --git a/libraries/shared/src/BillboardMode.cpp b/libraries/shared/src/BillboardMode.cpp index 4b6af5db33..8243cf772d 100644 --- a/libraries/shared/src/BillboardMode.cpp +++ b/libraries/shared/src/BillboardMode.cpp @@ -15,6 +15,8 @@ const char* billboardModeNames[] = { }; static const size_t BILLBOARD_MODE_NAMES = (sizeof(billboardModeNames) / sizeof(billboardModeNames[0])); +std::function BillboardModeHelpers::_getBillboardRotationOperator = [](const glm::vec3&, const glm::quat& rotation, BillboardMode, const glm::vec3&, bool) { return rotation; }; +std::function BillboardModeHelpers::_getPrimaryViewFrustumPositionOperator = []() { return glm::vec3(0.0f); }; QString BillboardModeHelpers::getNameForBillboardMode(BillboardMode mode) { if (((int)mode <= 0) || ((int)mode >= (int)BILLBOARD_MODE_NAMES)) { @@ -22,4 +24,4 @@ QString BillboardModeHelpers::getNameForBillboardMode(BillboardMode mode) { } return billboardModeNames[(int)mode]; -} \ No newline at end of file +} diff --git a/libraries/shared/src/BillboardMode.h b/libraries/shared/src/BillboardMode.h index aa00ce34aa..31f11766d8 100644 --- a/libraries/shared/src/BillboardMode.h +++ b/libraries/shared/src/BillboardMode.h @@ -9,8 +9,13 @@ #ifndef hifi_BillboardMode_h #define hifi_BillboardMode_h +#include + #include "QString" +#include "glm/glm.hpp" +#include "glm/gtc/quaternion.hpp" + /**jsdoc *

How an entity is billboarded.

*
ValueNameDescription
@@ -37,7 +42,15 @@ enum class BillboardMode { class BillboardModeHelpers { public: static QString getNameForBillboardMode(BillboardMode mode); + + static void setBillboardRotationOperator(std::function getBillboardRotationOperator) { _getBillboardRotationOperator = getBillboardRotationOperator; } + static glm::quat getBillboardRotation(const glm::vec3& position, const glm::quat& rotation, BillboardMode billboardMode, const glm::vec3& frustumPos, bool rotate90x = false) { return _getBillboardRotationOperator(position, rotation, billboardMode, frustumPos, rotate90x); } + static void setPrimaryViewFrustumPositionOperator(std::function getPrimaryViewFrustumPositionOperator) { _getPrimaryViewFrustumPositionOperator = getPrimaryViewFrustumPositionOperator; } + static glm::vec3 getPrimaryViewFrustumPosition() { return _getPrimaryViewFrustumPositionOperator(); } + +private: + static std::function _getBillboardRotationOperator; + static std::function _getPrimaryViewFrustumPositionOperator; }; #endif // hifi_BillboardMode_h - From c484bb60414a340ccd13da0634824d13724a2e40 Mon Sep 17 00:00:00 2001 From: Nick Levesque Date: Sun, 17 Jan 2021 13:32:16 -0500 Subject: [PATCH 082/152] Update BUILD_WIN.md Add MSVC v142 to Visual Studio 2019 install, as it was also required for me. --- BUILD_WIN.md | 1 + 1 file changed, 1 insertion(+) diff --git a/BUILD_WIN.md b/BUILD_WIN.md index 1035b1c366..de51ae307b 100644 --- a/BUILD_WIN.md +++ b/BUILD_WIN.md @@ -22,6 +22,7 @@ When selecting components, check "Desktop development with C++". On the right on #### If you're installing Visual Studio 2019, +* MSVC v142 - VS 2019 C++ X64/x86 build tools * MSVC v141 - VS 2017 C++ x64/x86 build tools * MSVC v140 - VS 2015 C++ build tools (v14.00) From 1f71a23082bbc415a7a12ba9b5a2001a1d5dc4cf Mon Sep 17 00:00:00 2001 From: HifiExperiments Date: Sun, 17 Jan 2021 13:09:09 -0800 Subject: [PATCH 083/152] optimize picking --- interface/src/avatar/AvatarManager.cpp | 6 +- .../src/RenderableModelEntityItem.cpp | 10 +-- .../src/RenderableModelEntityItem.h | 6 +- .../src/RenderablePolyVoxEntityItem.cpp | 4 +- .../src/RenderablePolyVoxEntityItem.h | 6 +- libraries/entities/src/EntityItem.cpp | 10 --- libraries/entities/src/EntityItem.h | 8 +-- libraries/entities/src/EntityTree.cpp | 18 +++-- libraries/entities/src/EntityTreeElement.cpp | 54 +++++++-------- libraries/entities/src/EntityTreeElement.h | 10 +-- libraries/entities/src/GizmoEntityItem.cpp | 8 +-- libraries/entities/src/GizmoEntityItem.h | 7 +- libraries/entities/src/GridEntityItem.cpp | 54 --------------- libraries/entities/src/GridEntityItem.h | 10 --- libraries/entities/src/ImageEntityItem.cpp | 54 --------------- libraries/entities/src/ImageEntityItem.h | 10 --- libraries/entities/src/LightEntityItem.cpp | 6 +- libraries/entities/src/LightEntityItem.h | 6 +- libraries/entities/src/LineEntityItem.h | 6 +- libraries/entities/src/PolyLineEntityItem.h | 6 +- libraries/entities/src/PolyVoxEntityItem.h | 6 +- libraries/entities/src/ShapeEntityItem.cpp | 67 +++++++++---------- libraries/entities/src/ShapeEntityItem.h | 11 +-- libraries/entities/src/TextEntityItem.cpp | 54 --------------- libraries/entities/src/TextEntityItem.h | 10 --- libraries/entities/src/WebEntityItem.cpp | 56 ---------------- libraries/entities/src/WebEntityItem.h | 10 --- libraries/entities/src/ZoneEntityItem.cpp | 6 +- libraries/entities/src/ZoneEntityItem.h | 6 +- libraries/render-utils/src/Model.cpp | 14 ++-- libraries/render-utils/src/Model.h | 6 +- 31 files changed, 140 insertions(+), 405 deletions(-) diff --git a/interface/src/avatar/AvatarManager.cpp b/interface/src/avatar/AvatarManager.cpp index 32e725388c..24d9379ab9 100755 --- a/interface/src/avatar/AvatarManager.cpp +++ b/interface/src/avatar/AvatarManager.cpp @@ -767,6 +767,7 @@ RayToAvatarIntersectionResult AvatarManager::findRayIntersectionVector(const Pic glm::vec3 rayDirectionInv = { rayDirection.x != 0.0f ? 1.0f / rayDirection.x : INFINITY, rayDirection.y != 0.0f ? 1.0f / rayDirection.y : INFINITY, rayDirection.z != 0.0f ? 1.0f / rayDirection.z : INFINITY }; + glm::vec3 viewFrustumPos = BillboardModeHelpers::getPrimaryViewFrustumPosition(); for (auto &hit : physicsResults) { auto avatarID = hit._intersectWithAvatar; @@ -842,7 +843,7 @@ RayToAvatarIntersectionResult AvatarManager::findRayIntersectionVector(const Pic BoxFace subMeshFace = BoxFace::UNKNOWN_FACE; glm::vec3 subMeshSurfaceNormal; QVariantMap subMeshExtraInfo; - if (avatar->getSkeletonModel()->findRayIntersectionAgainstSubMeshes(defaultFrameRayOrigin, defaultFrameRayDirection, subMeshDistance, subMeshFace, subMeshSurfaceNormal, subMeshExtraInfo, true, false)) { + if (avatar->getSkeletonModel()->findRayIntersectionAgainstSubMeshes(defaultFrameRayOrigin, defaultFrameRayDirection, viewFrustumPos, subMeshDistance, subMeshFace, subMeshSurfaceNormal, subMeshExtraInfo, true, false)) { rayAvatarResult._distance = subMeshDistance; rayAvatarResult._intersectionPoint = ray.origin + subMeshDistance * rayDirection; rayAvatarResult._intersectionNormal = subMeshSurfaceNormal; @@ -932,6 +933,7 @@ ParabolaToAvatarIntersectionResult AvatarManager::findParabolaIntersectionVector std::sort(sortedAvatars.begin(), sortedAvatars.end(), comparator); } + glm::vec3 viewFrustumPos = BillboardModeHelpers::getPrimaryViewFrustumPosition(); for (auto it = sortedAvatars.begin(); it != sortedAvatars.end(); ++it) { const SortedAvatar& sortedAvatar = *it; // We can exit once avatarCapsuleDistance > bestDistance @@ -944,7 +946,7 @@ ParabolaToAvatarIntersectionResult AvatarManager::findParabolaIntersectionVector glm::vec3 surfaceNormal; QVariantMap extraInfo; SkeletonModelPointer avatarModel = sortedAvatar.second->getSkeletonModel(); - if (avatarModel->findParabolaIntersectionAgainstSubMeshes(pick.origin, pick.velocity, pick.acceleration, parabolicDistance, face, surfaceNormal, extraInfo, true)) { + if (avatarModel->findParabolaIntersectionAgainstSubMeshes(pick.origin, pick.velocity, pick.acceleration, viewFrustumPos, parabolicDistance, face, surfaceNormal, extraInfo, true)) { if (parabolicDistance < result.parabolicDistance) { result.intersects = true; result.avatarID = sortedAvatar.second->getID(); diff --git a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp index c6765f2321..c8cfb6491a 100644 --- a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp @@ -224,26 +224,26 @@ bool RenderableModelEntityItem::supportsDetailedIntersection() const { } bool RenderableModelEntityItem::findDetailedRayIntersection(const glm::vec3& origin, const glm::vec3& direction, - OctreeElementPointer& element, float& distance, BoxFace& face, + const glm::vec3& viewFrustumPos, OctreeElementPointer& element, float& distance, BoxFace& face, glm::vec3& surfaceNormal, QVariantMap& extraInfo, bool precisionPicking) const { auto model = getModel(); if (!model || !model->isLoaded()) { return false; } - return model->findRayIntersectionAgainstSubMeshes(origin, direction, distance, + return model->findRayIntersectionAgainstSubMeshes(origin, direction, viewFrustumPos, distance, face, surfaceNormal, extraInfo, precisionPicking, false); } bool RenderableModelEntityItem::findDetailedParabolaIntersection(const glm::vec3& origin, const glm::vec3& velocity, - const glm::vec3& acceleration, OctreeElementPointer& element, float& parabolicDistance, BoxFace& face, - glm::vec3& surfaceNormal, QVariantMap& extraInfo, bool precisionPicking) const { + const glm::vec3& acceleration, const glm::vec3& viewFrustumPos, OctreeElementPointer& element, + float& parabolicDistance, BoxFace& face, glm::vec3& surfaceNormal, QVariantMap& extraInfo, bool precisionPicking) const { auto model = getModel(); if (!model || !model->isLoaded()) { return false; } - return model->findParabolaIntersectionAgainstSubMeshes(origin, velocity, acceleration, parabolicDistance, + return model->findParabolaIntersectionAgainstSubMeshes(origin, velocity, acceleration, viewFrustumPos, parabolicDistance, face, surfaceNormal, extraInfo, precisionPicking, false); } diff --git a/libraries/entities-renderer/src/RenderableModelEntityItem.h b/libraries/entities-renderer/src/RenderableModelEntityItem.h index 4501f6d88c..29474742c1 100644 --- a/libraries/entities-renderer/src/RenderableModelEntityItem.h +++ b/libraries/entities-renderer/src/RenderableModelEntityItem.h @@ -65,12 +65,12 @@ public: virtual bool supportsDetailedIntersection() const override; virtual bool findDetailedRayIntersection(const glm::vec3& origin, const glm::vec3& direction, - OctreeElementPointer& element, float& distance, + const glm::vec3& viewFrustumPos, OctreeElementPointer& element, float& distance, BoxFace& face, glm::vec3& surfaceNormal, QVariantMap& extraInfo, bool precisionPicking) const override; virtual bool findDetailedParabolaIntersection(const glm::vec3& origin, const glm::vec3& velocity, - const glm::vec3& acceleration, OctreeElementPointer& element, float& parabolicDistance, - BoxFace& face, glm::vec3& surfaceNormal, + const glm::vec3& acceleration, const glm::vec3& viewFrustumPos, OctreeElementPointer& element, + float& parabolicDistance, BoxFace& face, glm::vec3& surfaceNormal, QVariantMap& extraInfo, bool precisionPicking) const override; virtual void setShapeType(ShapeType type) override; diff --git a/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.cpp b/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.cpp index 5b6c0c8b70..e3a29fc99c 100644 --- a/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.cpp @@ -526,7 +526,7 @@ public: #endif bool RenderablePolyVoxEntityItem::findDetailedRayIntersection(const glm::vec3& origin, const glm::vec3& direction, - OctreeElementPointer& element, + const glm::vec3& viewFrustumPos, OctreeElementPointer& element, float& distance, BoxFace& face, glm::vec3& surfaceNormal, QVariantMap& extraInfo, bool precisionPicking) const { // TODO -- correctly pick against marching-cube generated meshes @@ -567,7 +567,7 @@ bool RenderablePolyVoxEntityItem::findDetailedRayIntersection(const glm::vec3& o } bool RenderablePolyVoxEntityItem::findDetailedParabolaIntersection(const glm::vec3& origin, const glm::vec3& velocity, - const glm::vec3& acceleration, OctreeElementPointer& element, + const glm::vec3& acceleration, const glm::vec3& viewFrustumPos, OctreeElementPointer& element, float& parabolicDistance, BoxFace& face, glm::vec3& surfaceNormal, QVariantMap& extraInfo, bool precisionPicking) const { // TODO -- correctly pick against marching-cube generated meshes diff --git a/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.h b/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.h index d4bcc4d19f..c1c35a21c8 100644 --- a/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.h +++ b/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.h @@ -71,12 +71,12 @@ public: virtual bool supportsDetailedIntersection() const override { return true; } virtual bool findDetailedRayIntersection(const glm::vec3& origin, const glm::vec3& direction, - OctreeElementPointer& element, float& distance, + const glm::vec3& viewFrustumPos, OctreeElementPointer& element, float& distance, BoxFace& face, glm::vec3& surfaceNormal, QVariantMap& extraInfo, bool precisionPicking) const override; virtual bool findDetailedParabolaIntersection(const glm::vec3& origin, const glm::vec3& velocity, const vec3& accleration, - OctreeElementPointer& element, float& parabolicDistance, - BoxFace& face, glm::vec3& surfaceNormal, + const glm::vec3& viewFrustumPos, OctreeElementPointer& element, + float& parabolicDistance, BoxFace& face, glm::vec3& surfaceNormal, QVariantMap& extraInfo, bool precisionPicking) const override; virtual void setVoxelData(const QByteArray& voxelData) override; diff --git a/libraries/entities/src/EntityItem.cpp b/libraries/entities/src/EntityItem.cpp index 68e824f8cc..e5e84abae3 100644 --- a/libraries/entities/src/EntityItem.cpp +++ b/libraries/entities/src/EntityItem.cpp @@ -1907,16 +1907,6 @@ void EntityItem::setScaledDimensions(const glm::vec3& value) { setUnscaledDimensions(value / parentScale); } -glm::vec3 EntityItem::getRaycastDimensions() const { - glm::vec3 dimensions = getScaledDimensions(); - if (getBillboardMode() != BillboardMode::NONE) { - float max = glm::max(dimensions.x, glm::max(dimensions.y, dimensions.z)); - const float SQRT_2 = 1.41421356237f; - return glm::vec3(SQRT_2 * max); - } - return dimensions; -} - void EntityItem::setUnscaledDimensions(const glm::vec3& value) { glm::vec3 newDimensions = glm::max(value, glm::vec3(ENTITY_ITEM_MIN_DIMENSION)); const float MIN_SCALE_CHANGE_SQUARED = 1.0e-6f; diff --git a/libraries/entities/src/EntityItem.h b/libraries/entities/src/EntityItem.h index 288f1682c7..2acb73abbf 100644 --- a/libraries/entities/src/EntityItem.h +++ b/libraries/entities/src/EntityItem.h @@ -175,12 +175,12 @@ public: virtual bool supportsDetailedIntersection() const { return false; } virtual bool findDetailedRayIntersection(const glm::vec3& origin, const glm::vec3& direction, - OctreeElementPointer& element, float& distance, + const glm::vec3& viewFrustumPos, OctreeElementPointer& element, float& distance, BoxFace& face, glm::vec3& surfaceNormal, QVariantMap& extraInfo, bool precisionPicking) const { return true; } virtual bool findDetailedParabolaIntersection(const glm::vec3& origin, const glm::vec3& velocity, - const glm::vec3& acceleration, OctreeElementPointer& element, float& parabolicDistance, - BoxFace& face, glm::vec3& surfaceNormal, + const glm::vec3& acceleration, const glm::vec3& viewFrustumPos, OctreeElementPointer& element, + float& parabolicDistance, BoxFace& face, glm::vec3& surfaceNormal, QVariantMap& extraInfo, bool precisionPicking) const { return true; } // attributes applicable to all entity types @@ -203,7 +203,6 @@ public: /// Dimensions in meters (0.0 - TREE_SCALE) virtual glm::vec3 getScaledDimensions() const; virtual void setScaledDimensions(const glm::vec3& value); - virtual glm::vec3 getRaycastDimensions() const; glm::vec3 getUnscaledDimensions() const; virtual void setUnscaledDimensions(const glm::vec3& value); @@ -584,6 +583,7 @@ public: void setBillboardMode(BillboardMode value); BillboardMode getBillboardMode() const; + virtual bool getRotateForPicking() const { return false; } signals: void spaceUpdate(std::pair data); diff --git a/libraries/entities/src/EntityTree.cpp b/libraries/entities/src/EntityTree.cpp index 24b6f7ccd4..3ed1ad581c 100644 --- a/libraries/entities/src/EntityTree.cpp +++ b/libraries/entities/src/EntityTree.cpp @@ -798,6 +798,7 @@ public: glm::vec3 origin; glm::vec3 direction; glm::vec3 invDirection; + glm::vec3 viewFrustumPos; const QVector& entityIdsToInclude; const QVector& entityIdsToDiscard; PickFilter searchFilter; @@ -815,7 +816,7 @@ bool evalRayIntersectionOp(const OctreeElementPointer& element, void* extraData) RayArgs* args = static_cast(extraData); bool keepSearching = true; EntityTreeElementPointer entityTreeElementPointer = std::static_pointer_cast(element); - EntityItemID entityID = entityTreeElementPointer->evalRayIntersection(args->origin, args->direction, + EntityItemID entityID = entityTreeElementPointer->evalRayIntersection(args->origin, args->direction, args->viewFrustumPos, args->element, args->distance, args->face, args->surfaceNormal, args->entityIdsToInclude, args->entityIdsToDiscard, args->searchFilter, args->extraInfo); if (!entityID.isNull()) { @@ -837,7 +838,8 @@ float evalRayIntersectionSortingOp(const OctreeElementPointer& element, void* ex float boundDistance = FLT_MAX; BoxFace face; glm::vec3 surfaceNormal; - if (entityTreeElementPointer->getAACube().findRayIntersection(args->origin, args->direction, args->invDirection, boundDistance, face, surfaceNormal)) { + if (entityTreeElementPointer->getAACube().findRayIntersection(args->origin, args->direction, args->invDirection, + boundDistance, face, surfaceNormal)) { // Don't add this cell if it's already farther than our best distance so far if (boundDistance < args->distance) { distance = boundDistance; @@ -857,7 +859,7 @@ EntityItemID EntityTree::evalRayIntersection(const glm::vec3& origin, const glm: vec3 dirReciprocal = glm::vec3(direction.x == 0.0f ? 0.0f : 1.0f / direction.x, direction.y == 0.0f ? 0.0f : 1.0f / direction.y, direction.z == 0.0f ? 0.0f : 1.0f / direction.z); - RayArgs args = { origin, direction, dirReciprocal, entityIdsToInclude, entityIdsToDiscard, + RayArgs args = { origin, direction, dirReciprocal, BillboardModeHelpers::getPrimaryViewFrustumPosition(), entityIdsToInclude, entityIdsToDiscard, searchFilter, element, distance, face, surfaceNormal, extraInfo, EntityItemID() }; distance = FLT_MAX; @@ -879,6 +881,7 @@ public: glm::vec3 origin; glm::vec3 velocity; glm::vec3 acceleration; + glm::vec3 viewFrustumPos; const QVector& entityIdsToInclude; const QVector& entityIdsToDiscard; PickFilter searchFilter; @@ -896,7 +899,7 @@ bool evalParabolaIntersectionOp(const OctreeElementPointer& element, void* extra ParabolaArgs* args = static_cast(extraData); bool keepSearching = true; EntityTreeElementPointer entityTreeElementPointer = std::static_pointer_cast(element); - EntityItemID entityID = entityTreeElementPointer->evalParabolaIntersection(args->origin, args->velocity, args->acceleration, + EntityItemID entityID = entityTreeElementPointer->evalParabolaIntersection(args->origin, args->velocity, args->acceleration, args->viewFrustumPos, args->element, args->parabolicDistance, args->face, args->surfaceNormal, args->entityIdsToInclude, args->entityIdsToDiscard, args->searchFilter, args->extraInfo); if (!entityID.isNull()) { @@ -918,7 +921,8 @@ float evalParabolaIntersectionSortingOp(const OctreeElementPointer& element, voi float boundDistance = FLT_MAX; BoxFace face; glm::vec3 surfaceNormal; - if (entityTreeElementPointer->getAACube().findParabolaIntersection(args->origin, args->velocity, args->acceleration, boundDistance, face, surfaceNormal)) { + if (entityTreeElementPointer->getAACube().findParabolaIntersection(args->origin, args->velocity, args->acceleration, + boundDistance, face, surfaceNormal)) { // Don't add this cell if it's already farther than our best distance so far if (boundDistance < args->parabolicDistance) { distance = boundDistance; @@ -934,8 +938,8 @@ EntityItemID EntityTree::evalParabolaIntersection(const PickParabola& parabola, OctreeElementPointer& element, glm::vec3& intersection, float& distance, float& parabolicDistance, BoxFace& face, glm::vec3& surfaceNormal, QVariantMap& extraInfo, Octree::lockType lockType, bool* accurateResult) { - ParabolaArgs args = { parabola.origin, parabola.velocity, parabola.acceleration, entityIdsToInclude, entityIdsToDiscard, - searchFilter, element, parabolicDistance, face, surfaceNormal, extraInfo, EntityItemID() }; + ParabolaArgs args = { parabola.origin, parabola.velocity, parabola.acceleration, BillboardModeHelpers::getPrimaryViewFrustumPosition(), + entityIdsToInclude, entityIdsToDiscard, searchFilter, element, parabolicDistance, face, surfaceNormal, extraInfo, EntityItemID() }; parabolicDistance = FLT_MAX; distance = FLT_MAX; diff --git a/libraries/entities/src/EntityTreeElement.cpp b/libraries/entities/src/EntityTreeElement.cpp index afbb139d5f..4387647383 100644 --- a/libraries/entities/src/EntityTreeElement.cpp +++ b/libraries/entities/src/EntityTreeElement.cpp @@ -162,7 +162,7 @@ bool EntityTreeElement::checkFilterSettings(const EntityItemPointer& entity, Pic return true; } -EntityItemID EntityTreeElement::evalRayIntersection(const glm::vec3& origin, const glm::vec3& direction, +EntityItemID EntityTreeElement::evalRayIntersection(const glm::vec3& origin, const glm::vec3& direction, const glm::vec3& viewFrustumPos, OctreeElementPointer& element, float& distance, BoxFace& face, glm::vec3& surfaceNormal, const QVector& entityIdsToInclude, const QVector& entityIdsToDiscard, PickFilter searchFilter, QVariantMap& extraInfo) { @@ -177,7 +177,7 @@ EntityItemID EntityTreeElement::evalRayIntersection(const glm::vec3& origin, con QVariantMap localExtraInfo; float distanceToElementDetails = distance; - EntityItemID entityID = evalDetailedRayIntersection(origin, direction, element, distanceToElementDetails, + EntityItemID entityID = evalDetailedRayIntersection(origin, direction, viewFrustumPos, element, distanceToElementDetails, localFace, localSurfaceNormal, entityIdsToInclude, entityIdsToDiscard, searchFilter, localExtraInfo); if (!entityID.isNull() && distanceToElementDetails < distance) { distance = distanceToElementDetails; @@ -189,7 +189,7 @@ EntityItemID EntityTreeElement::evalRayIntersection(const glm::vec3& origin, con return result; } -EntityItemID EntityTreeElement::evalDetailedRayIntersection(const glm::vec3& origin, const glm::vec3& direction, +EntityItemID EntityTreeElement::evalDetailedRayIntersection(const glm::vec3& origin, const glm::vec3& direction, const glm::vec3& viewFrustumPos, OctreeElementPointer& element, float& distance, BoxFace& face, glm::vec3& surfaceNormal, const QVector& entityIdsToInclude, const QVector& entityIDsToDiscard, PickFilter searchFilter, QVariantMap& extraInfo) { @@ -222,11 +222,12 @@ EntityItemID EntityTreeElement::evalDetailedRayIntersection(const glm::vec3& ori glm::vec3 position = entity->getWorldPosition(); glm::mat4 translation = glm::translate(position); glm::quat orientation = entity->getWorldOrientation(); - glm::mat4 rotation = glm::mat4_cast(BillboardModeHelpers::getBillboardRotation(position, orientation, entity->getBillboardMode(), BillboardModeHelpers::getPrimaryViewFrustumPosition())); + glm::mat4 rotation = glm::mat4_cast(BillboardModeHelpers::getBillboardRotation(position, orientation, entity->getBillboardMode(), + viewFrustumPos, entity->getRotateForPicking())); glm::mat4 entityToWorldMatrix = translation * rotation; glm::mat4 worldToEntityMatrix = glm::inverse(entityToWorldMatrix); - glm::vec3 dimensions = entity->getRaycastDimensions(); + glm::vec3 dimensions = entity->getScaledDimensions(); glm::vec3 registrationPoint = entity->getRegistrationPoint(); glm::vec3 corner = -(dimensions * registrationPoint); @@ -246,7 +247,7 @@ EntityItemID EntityTreeElement::evalDetailedRayIntersection(const glm::vec3& ori // now ask the entity if we actually intersect if (entity->supportsDetailedIntersection()) { QVariantMap localExtraInfo; - if (entity->findDetailedRayIntersection(origin, direction, element, localDistance, + if (entity->findDetailedRayIntersection(origin, direction, viewFrustumPos, element, localDistance, localFace, localSurfaceNormal, localExtraInfo, searchFilter.isPrecise())) { if (localDistance < distance) { distance = localDistance; @@ -300,7 +301,7 @@ bool EntityTreeElement::findSpherePenetration(const glm::vec3& center, float rad } EntityItemID EntityTreeElement::evalParabolaIntersection(const glm::vec3& origin, const glm::vec3& velocity, - const glm::vec3& acceleration, OctreeElementPointer& element, float& parabolicDistance, + const glm::vec3& acceleration, const glm::vec3& viewFrustumPos, OctreeElementPointer& element, float& parabolicDistance, BoxFace& face, glm::vec3& surfaceNormal, const QVector& entityIdsToInclude, const QVector& entityIdsToDiscard, PickFilter searchFilter, QVariantMap& extraInfo) { @@ -323,7 +324,7 @@ EntityItemID EntityTreeElement::evalParabolaIntersection(const glm::vec3& origin } // Get the normal of the plane, the cross product of two vectors on the plane glm::vec3 normal = glm::normalize(glm::cross(vectorOnPlane, acceleration)); - EntityItemID entityID = evalDetailedParabolaIntersection(origin, velocity, acceleration, normal, element, distanceToElementDetails, + EntityItemID entityID = evalDetailedParabolaIntersection(origin, velocity, acceleration, viewFrustumPos, normal, element, distanceToElementDetails, localFace, localSurfaceNormal, entityIdsToInclude, entityIdsToDiscard, searchFilter, localExtraInfo); if (!entityID.isNull() && distanceToElementDetails < parabolicDistance) { parabolicDistance = distanceToElementDetails; @@ -336,9 +337,9 @@ EntityItemID EntityTreeElement::evalParabolaIntersection(const glm::vec3& origin } EntityItemID EntityTreeElement::evalDetailedParabolaIntersection(const glm::vec3& origin, const glm::vec3& velocity, const glm::vec3& acceleration, - const glm::vec3& normal, OctreeElementPointer& element, float& parabolicDistance, BoxFace& face, glm::vec3& surfaceNormal, - const QVector& entityIdsToInclude, const QVector& entityIDsToDiscard, - PickFilter searchFilter, QVariantMap& extraInfo) { + const glm::vec3& viewFrustumPos,const glm::vec3& normal, OctreeElementPointer& element, float& parabolicDistance, + BoxFace& face, glm::vec3& surfaceNormal, const QVector& entityIdsToInclude, + const QVector& entityIDsToDiscard, PickFilter searchFilter, QVariantMap& extraInfo) { // only called if we do intersect our bounding cube, but find if we actually intersect with entities... EntityItemID entityID; @@ -373,11 +374,12 @@ EntityItemID EntityTreeElement::evalDetailedParabolaIntersection(const glm::vec3 glm::vec3 position = entity->getWorldPosition(); glm::mat4 translation = glm::translate(position); glm::quat orientation = entity->getWorldOrientation(); - glm::mat4 rotation = glm::mat4_cast(BillboardModeHelpers::getBillboardRotation(position, orientation, entity->getBillboardMode(), BillboardModeHelpers::getPrimaryViewFrustumPosition())); + glm::mat4 rotation = glm::mat4_cast(BillboardModeHelpers::getBillboardRotation(position, orientation, entity->getBillboardMode(), + viewFrustumPos, entity->getRotateForPicking())); glm::mat4 entityToWorldMatrix = translation * rotation; glm::mat4 worldToEntityMatrix = glm::inverse(entityToWorldMatrix); - glm::vec3 dimensions = entity->getRaycastDimensions(); + glm::vec3 dimensions = entity->getScaledDimensions(); glm::vec3 registrationPoint = entity->getRegistrationPoint(); glm::vec3 corner = -(dimensions * registrationPoint); @@ -398,7 +400,7 @@ EntityItemID EntityTreeElement::evalDetailedParabolaIntersection(const glm::vec3 // now ask the entity if we actually intersect if (entity->supportsDetailedIntersection()) { QVariantMap localExtraInfo; - if (entity->findDetailedParabolaIntersection(origin, velocity, acceleration, element, localDistance, + if (entity->findDetailedParabolaIntersection(origin, velocity, acceleration, viewFrustumPos, element, localDistance, localFace, localSurfaceNormal, localExtraInfo, searchFilter.isPrecise())) { if (localDistance < parabolicDistance) { parabolicDistance = localDistance; @@ -454,7 +456,7 @@ void EntityTreeElement::evalEntitiesInSphere(const glm::vec3& position, float ra glm::vec3 penetration; if (success && entityBox.findSpherePenetration(position, radius, penetration)) { - glm::vec3 dimensions = entity->getRaycastDimensions(); + glm::vec3 dimensions = entity->getScaledDimensions(); // FIXME - consider allowing the entity to determine penetration so that // entities could presumably do actual hull testing if they wanted to @@ -476,10 +478,8 @@ void EntityTreeElement::evalEntitiesInSphere(const glm::vec3& position, float ra } else { // determine the worldToEntityMatrix that doesn't include scale because // we're going to use the registration aware aa box in the entity frame - glm::vec3 position = entity->getWorldPosition(); - glm::mat4 translation = glm::translate(position); - glm::quat orientation = entity->getWorldOrientation(); - glm::mat4 rotation = glm::mat4_cast(BillboardModeHelpers::getBillboardRotation(position, orientation, entity->getBillboardMode(), BillboardModeHelpers::getPrimaryViewFrustumPosition())); + glm::mat4 translation = glm::translate(entity->getWorldPosition()); + glm::mat4 rotation = glm::mat4_cast(entity->getWorldOrientation()); glm::mat4 entityToWorldMatrix = translation * rotation; glm::mat4 worldToEntityMatrix = glm::inverse(entityToWorldMatrix); @@ -510,7 +510,7 @@ void EntityTreeElement::evalEntitiesInSphereWithType(const glm::vec3& position, glm::vec3 penetration; if (success && entityBox.findSpherePenetration(position, radius, penetration)) { - glm::vec3 dimensions = entity->getRaycastDimensions(); + glm::vec3 dimensions = entity->getScaledDimensions(); // FIXME - consider allowing the entity to determine penetration so that // entities could presumably do actual hull testing if they wanted to @@ -532,10 +532,8 @@ void EntityTreeElement::evalEntitiesInSphereWithType(const glm::vec3& position, } else { // determine the worldToEntityMatrix that doesn't include scale because // we're going to use the registration aware aa box in the entity frame - glm::vec3 position = entity->getWorldPosition(); - glm::mat4 translation = glm::translate(position); - glm::quat orientation = entity->getWorldOrientation(); - glm::mat4 rotation = glm::mat4_cast(BillboardModeHelpers::getBillboardRotation(position, orientation, entity->getBillboardMode(), BillboardModeHelpers::getPrimaryViewFrustumPosition())); + glm::mat4 translation = glm::translate(entity->getWorldPosition()); + glm::mat4 rotation = glm::mat4_cast(entity->getWorldOrientation()); glm::mat4 entityToWorldMatrix = translation * rotation; glm::mat4 worldToEntityMatrix = glm::inverse(entityToWorldMatrix); @@ -571,7 +569,7 @@ void EntityTreeElement::evalEntitiesInSphereWithName(const glm::vec3& position, glm::vec3 penetration; if (success && entityBox.findSpherePenetration(position, radius, penetration)) { - glm::vec3 dimensions = entity->getRaycastDimensions(); + glm::vec3 dimensions = entity->getScaledDimensions(); // FIXME - consider allowing the entity to determine penetration so that // entities could presumably do actual hull testing if they wanted to @@ -593,10 +591,8 @@ void EntityTreeElement::evalEntitiesInSphereWithName(const glm::vec3& position, } else { // determine the worldToEntityMatrix that doesn't include scale because // we're going to use the registration aware aa box in the entity frame - glm::vec3 position = entity->getWorldPosition(); - glm::mat4 translation = glm::translate(position); - glm::quat orientation = entity->getWorldOrientation(); - glm::mat4 rotation = glm::mat4_cast(BillboardModeHelpers::getBillboardRotation(position, orientation, entity->getBillboardMode(), BillboardModeHelpers::getPrimaryViewFrustumPosition())); + glm::mat4 translation = glm::translate(entity->getWorldPosition()); + glm::mat4 rotation = glm::mat4_cast(entity->getWorldOrientation()); glm::mat4 entityToWorldMatrix = translation * rotation; glm::mat4 worldToEntityMatrix = glm::inverse(entityToWorldMatrix); diff --git a/libraries/entities/src/EntityTreeElement.h b/libraries/entities/src/EntityTreeElement.h index f94da44138..dab56132c9 100644 --- a/libraries/entities/src/EntityTreeElement.h +++ b/libraries/entities/src/EntityTreeElement.h @@ -136,24 +136,24 @@ public: static bool checkFilterSettings(const EntityItemPointer& entity, PickFilter searchFilter); virtual bool canPickIntersect() const override { return hasEntities(); } - virtual EntityItemID evalRayIntersection(const glm::vec3& origin, const glm::vec3& direction, + virtual EntityItemID evalRayIntersection(const glm::vec3& origin, const glm::vec3& direction, const glm::vec3& viewFrustumPos, OctreeElementPointer& element, float& distance, BoxFace& face, glm::vec3& surfaceNormal, const QVector& entityIdsToInclude, const QVector& entityIdsToDiscard, PickFilter searchFilter, QVariantMap& extraInfo); virtual EntityItemID evalDetailedRayIntersection(const glm::vec3& origin, const glm::vec3& direction, - OctreeElementPointer& element, float& distance, + const glm::vec3& viewFrustumPos, OctreeElementPointer& element, float& distance, BoxFace& face, glm::vec3& surfaceNormal, const QVector& entityIdsToInclude, const QVector& entityIdsToDiscard, PickFilter searchFilter, QVariantMap& extraInfo); virtual bool findSpherePenetration(const glm::vec3& center, float radius, glm::vec3& penetration, void** penetratedObject) const override; virtual EntityItemID evalParabolaIntersection(const glm::vec3& origin, const glm::vec3& velocity, - const glm::vec3& acceleration, OctreeElementPointer& element, float& parabolicDistance, + const glm::vec3& acceleration, const glm::vec3& viewFrustumPos, OctreeElementPointer& element, float& parabolicDistance, BoxFace& face, glm::vec3& surfaceNormal, const QVector& entityIdsToInclude, const QVector& entityIdsToDiscard, PickFilter searchFilter, QVariantMap& extraInfo); virtual EntityItemID evalDetailedParabolaIntersection(const glm::vec3& origin, const glm::vec3& velocity, - const glm::vec3& normal, const glm::vec3& acceleration, OctreeElementPointer& element, float& parabolicDistance, - BoxFace& face, glm::vec3& surfaceNormal, const QVector& entityIdsToInclude, + const glm::vec3& normal, const glm::vec3& acceleration, const glm::vec3& viewFrustumPos, OctreeElementPointer& element, + float& parabolicDistance, BoxFace& face, glm::vec3& surfaceNormal, const QVector& entityIdsToInclude, const QVector& entityIdsToDiscard, PickFilter searchFilter, QVariantMap& extraInfo); template diff --git a/libraries/entities/src/GizmoEntityItem.cpp b/libraries/entities/src/GizmoEntityItem.cpp index 6586d57fde..694371d739 100644 --- a/libraries/entities/src/GizmoEntityItem.cpp +++ b/libraries/entities/src/GizmoEntityItem.cpp @@ -103,7 +103,7 @@ bool GizmoEntityItem::supportsDetailedIntersection() const { } bool GizmoEntityItem::findDetailedRayIntersection(const glm::vec3& origin, const glm::vec3& direction, - OctreeElementPointer& element, + const glm::vec3& viewFrustumPos, OctreeElementPointer& element, float& distance, BoxFace& face, glm::vec3& surfaceNormal, QVariantMap& extraInfo, bool precisionPicking) const { glm::vec3 dimensions = getScaledDimensions(); @@ -111,7 +111,7 @@ bool GizmoEntityItem::findDetailedRayIntersection(const glm::vec3& origin, const glm::quat rotation = getWorldOrientation(); rotation *= glm::angleAxis(-(float)M_PI_2, Vectors::RIGHT); glm::vec3 position = getWorldPosition() + rotation * (dimensions * (ENTITY_ITEM_DEFAULT_REGISTRATION_POINT - getRegistrationPoint())); - rotation = BillboardModeHelpers::getBillboardRotation(position, rotation, getBillboardMode(), BillboardModeHelpers::getPrimaryViewFrustumPosition(), false); + rotation = BillboardModeHelpers::getBillboardRotation(position, rotation, getBillboardMode(), viewFrustumPos); if (findRayRectangleIntersection(origin, direction, rotation, position, xyDimensions, distance)) { glm::vec3 hitPosition = origin + (distance * direction); @@ -137,7 +137,7 @@ bool GizmoEntityItem::findDetailedRayIntersection(const glm::vec3& origin, const } bool GizmoEntityItem::findDetailedParabolaIntersection(const glm::vec3& origin, const glm::vec3& velocity, const glm::vec3& acceleration, - OctreeElementPointer& element, float& parabolicDistance, + const glm::vec3& viewFrustumPos, OctreeElementPointer& element, float& parabolicDistance, BoxFace& face, glm::vec3& surfaceNormal, QVariantMap& extraInfo, bool precisionPicking) const { //// Scale the dimensions by the diameter @@ -146,7 +146,7 @@ bool GizmoEntityItem::findDetailedParabolaIntersection(const glm::vec3& origin, glm::quat rotation = getWorldOrientation(); rotation *= glm::angleAxis(-(float)M_PI_2, Vectors::RIGHT); glm::vec3 position = getWorldPosition(); - rotation = BillboardModeHelpers::getBillboardRotation(position, rotation, getBillboardMode(), BillboardModeHelpers::getPrimaryViewFrustumPosition(), true); + rotation = BillboardModeHelpers::getBillboardRotation(position, rotation, getBillboardMode(), viewFrustumPos); glm::quat inverseRot = glm::inverse(rotation); glm::vec3 localOrigin = inverseRot * (origin - position); diff --git a/libraries/entities/src/GizmoEntityItem.h b/libraries/entities/src/GizmoEntityItem.h index 37a802387d..a05c294523 100644 --- a/libraries/entities/src/GizmoEntityItem.h +++ b/libraries/entities/src/GizmoEntityItem.h @@ -45,13 +45,14 @@ public: bool supportsDetailedIntersection() const override; bool findDetailedRayIntersection(const glm::vec3& origin, const glm::vec3& direction, - OctreeElementPointer& element, float& distance, + const glm::vec3& viewFrustumPos, OctreeElementPointer& element, float& distance, BoxFace& face, glm::vec3& surfaceNormal, QVariantMap& extraInfo, bool precisionPicking) const override; bool findDetailedParabolaIntersection(const glm::vec3& origin, const glm::vec3& velocity, - const glm::vec3& acceleration, OctreeElementPointer& element, float& parabolicDistance, - BoxFace& face, glm::vec3& surfaceNormal, + const glm::vec3& acceleration, const glm::vec3& viewFrustumPos, OctreeElementPointer& element, + float& parabolicDistance, BoxFace& face, glm::vec3& surfaceNormal, QVariantMap& extraInfo, bool precisionPicking) const override; + bool getRotateForPicking() const override { return getBillboardMode() != BillboardMode::NONE; } GizmoType getGizmoType() const; void setGizmoType(GizmoType value); diff --git a/libraries/entities/src/GridEntityItem.cpp b/libraries/entities/src/GridEntityItem.cpp index c675a11d27..e635511bfc 100644 --- a/libraries/entities/src/GridEntityItem.cpp +++ b/libraries/entities/src/GridEntityItem.cpp @@ -125,60 +125,6 @@ void GridEntityItem::appendSubclassData(OctreePacketData* packetData, EncodeBits APPEND_ENTITY_PROPERTY(PROP_MINOR_GRID_EVERY, getMinorGridEvery()); } -bool GridEntityItem::findDetailedRayIntersection(const glm::vec3& origin, const glm::vec3& direction, - OctreeElementPointer& element, - float& distance, BoxFace& face, glm::vec3& surfaceNormal, - QVariantMap& extraInfo, bool precisionPicking) const { - glm::vec3 dimensions = getScaledDimensions(); - glm::vec2 xyDimensions(dimensions.x, dimensions.y); - glm::quat rotation = getWorldOrientation(); - glm::vec3 position = getWorldPosition() + rotation * (dimensions * (ENTITY_ITEM_DEFAULT_REGISTRATION_POINT - getRegistrationPoint())); - rotation = BillboardModeHelpers::getBillboardRotation(position, rotation, getBillboardMode(), BillboardModeHelpers::getPrimaryViewFrustumPosition()); - - if (findRayRectangleIntersection(origin, direction, rotation, position, xyDimensions, distance)) { - glm::vec3 forward = rotation * Vectors::FRONT; - if (glm::dot(forward, direction) > 0.0f) { - face = MAX_Z_FACE; - surfaceNormal = -forward; - } else { - face = MIN_Z_FACE; - surfaceNormal = forward; - } - return true; - } - return false; -} - -bool GridEntityItem::findDetailedParabolaIntersection(const glm::vec3& origin, const glm::vec3& velocity, const glm::vec3& acceleration, - OctreeElementPointer& element, float& parabolicDistance, - BoxFace& face, glm::vec3& surfaceNormal, - QVariantMap& extraInfo, bool precisionPicking) const { - glm::vec3 dimensions = getScaledDimensions(); - glm::vec2 xyDimensions(dimensions.x, dimensions.y); - glm::quat rotation = getWorldOrientation(); - glm::vec3 position = getWorldPosition() + rotation * (dimensions * (ENTITY_ITEM_DEFAULT_REGISTRATION_POINT - getRegistrationPoint())); - rotation = BillboardModeHelpers::getBillboardRotation(position, rotation, getBillboardMode(), BillboardModeHelpers::getPrimaryViewFrustumPosition()); - - glm::quat inverseRot = glm::inverse(rotation); - glm::vec3 localOrigin = inverseRot * (origin - position); - glm::vec3 localVelocity = inverseRot * velocity; - glm::vec3 localAcceleration = inverseRot * acceleration; - - if (findParabolaRectangleIntersection(localOrigin, localVelocity, localAcceleration, xyDimensions, parabolicDistance)) { - float localIntersectionVelocityZ = localVelocity.z + localAcceleration.z * parabolicDistance; - glm::vec3 forward = rotation * Vectors::FRONT; - if (localIntersectionVelocityZ > 0.0f) { - face = MIN_Z_FACE; - surfaceNormal = forward; - } else { - face = MAX_Z_FACE; - surfaceNormal = -forward; - } - return true; - } - return false; -} - void GridEntityItem::setColor(const glm::u8vec3& color) { withWriteLock([&] { _needsRenderUpdate |= _color != color; diff --git a/libraries/entities/src/GridEntityItem.h b/libraries/entities/src/GridEntityItem.h index fc31c93a5a..7dc7a475b2 100644 --- a/libraries/entities/src/GridEntityItem.h +++ b/libraries/entities/src/GridEntityItem.h @@ -43,16 +43,6 @@ public: EntityPropertyFlags& propertyFlags, bool overwriteLocalData, bool& somethingChanged) override; - virtual bool supportsDetailedIntersection() const override { return getBillboardMode() != BillboardMode::NONE; } - virtual bool findDetailedRayIntersection(const glm::vec3& origin, const glm::vec3& direction, - OctreeElementPointer& element, float& distance, - BoxFace& face, glm::vec3& surfaceNormal, - QVariantMap& extraInfo, bool precisionPicking) const override; - virtual bool findDetailedParabolaIntersection(const glm::vec3& origin, const glm::vec3& velocity, - const glm::vec3& acceleration, OctreeElementPointer& element, float& parabolicDistance, - BoxFace& face, glm::vec3& surfaceNormal, - QVariantMap& extraInfo, bool precisionPicking) const override; - static const uint32_t DEFAULT_MAJOR_GRID_EVERY; static const float DEFAULT_MINOR_GRID_EVERY; diff --git a/libraries/entities/src/ImageEntityItem.cpp b/libraries/entities/src/ImageEntityItem.cpp index 80711e4abc..afa6d9ae69 100644 --- a/libraries/entities/src/ImageEntityItem.cpp +++ b/libraries/entities/src/ImageEntityItem.cpp @@ -127,60 +127,6 @@ void ImageEntityItem::appendSubclassData(OctreePacketData* packetData, EncodeBit APPEND_ENTITY_PROPERTY(PROP_SUB_IMAGE, getSubImage()); } -bool ImageEntityItem::findDetailedRayIntersection(const glm::vec3& origin, const glm::vec3& direction, - OctreeElementPointer& element, - float& distance, BoxFace& face, glm::vec3& surfaceNormal, - QVariantMap& extraInfo, bool precisionPicking) const { - glm::vec3 dimensions = getScaledDimensions(); - glm::vec2 xyDimensions(dimensions.x, dimensions.y); - glm::quat rotation = getWorldOrientation(); - glm::vec3 position = getWorldPosition() + rotation * (dimensions * (ENTITY_ITEM_DEFAULT_REGISTRATION_POINT - getRegistrationPoint())); - rotation = BillboardModeHelpers::getBillboardRotation(position, rotation, getBillboardMode(), BillboardModeHelpers::getPrimaryViewFrustumPosition()); - - if (findRayRectangleIntersection(origin, direction, rotation, position, xyDimensions, distance)) { - glm::vec3 forward = rotation * Vectors::FRONT; - if (glm::dot(forward, direction) > 0.0f) { - face = MAX_Z_FACE; - surfaceNormal = -forward; - } else { - face = MIN_Z_FACE; - surfaceNormal = forward; - } - return true; - } - return false; -} - -bool ImageEntityItem::findDetailedParabolaIntersection(const glm::vec3& origin, const glm::vec3& velocity, const glm::vec3& acceleration, - OctreeElementPointer& element, float& parabolicDistance, - BoxFace& face, glm::vec3& surfaceNormal, - QVariantMap& extraInfo, bool precisionPicking) const { - glm::vec3 dimensions = getScaledDimensions(); - glm::vec2 xyDimensions(dimensions.x, dimensions.y); - glm::quat rotation = getWorldOrientation(); - glm::vec3 position = getWorldPosition() + rotation * (dimensions * (ENTITY_ITEM_DEFAULT_REGISTRATION_POINT - getRegistrationPoint())); - rotation = BillboardModeHelpers::getBillboardRotation(position, rotation, getBillboardMode(), BillboardModeHelpers::getPrimaryViewFrustumPosition()); - - glm::quat inverseRot = glm::inverse(rotation); - glm::vec3 localOrigin = inverseRot * (origin - position); - glm::vec3 localVelocity = inverseRot * velocity; - glm::vec3 localAcceleration = inverseRot * acceleration; - - if (findParabolaRectangleIntersection(localOrigin, localVelocity, localAcceleration, xyDimensions, parabolicDistance)) { - float localIntersectionVelocityZ = localVelocity.z + localAcceleration.z * parabolicDistance; - glm::vec3 forward = rotation * Vectors::FRONT; - if (localIntersectionVelocityZ > 0.0f) { - face = MIN_Z_FACE; - surfaceNormal = forward; - } else { - face = MAX_Z_FACE; - surfaceNormal = -forward; - } - return true; - } - return false; -} - QString ImageEntityItem::getImageURL() const { QString result; withReadLock([&] { diff --git a/libraries/entities/src/ImageEntityItem.h b/libraries/entities/src/ImageEntityItem.h index a5ed139e6b..4f7aac0c13 100644 --- a/libraries/entities/src/ImageEntityItem.h +++ b/libraries/entities/src/ImageEntityItem.h @@ -43,16 +43,6 @@ public: EntityPropertyFlags& propertyFlags, bool overwriteLocalData, bool& somethingChanged) override; - virtual bool supportsDetailedIntersection() const override { return getBillboardMode() != BillboardMode::NONE; } - virtual bool findDetailedRayIntersection(const glm::vec3& origin, const glm::vec3& direction, - OctreeElementPointer& element, float& distance, - BoxFace& face, glm::vec3& surfaceNormal, - QVariantMap& extraInfo, bool precisionPicking) const override; - virtual bool findDetailedParabolaIntersection(const glm::vec3& origin, const glm::vec3& velocity, - const glm::vec3& acceleration, OctreeElementPointer& element, float& parabolicDistance, - BoxFace& face, glm::vec3& surfaceNormal, - QVariantMap& extraInfo, bool precisionPicking) const override; - void setImageURL(const QString& imageUrl); QString getImageURL() const; diff --git a/libraries/entities/src/LightEntityItem.cpp b/libraries/entities/src/LightEntityItem.cpp index 0dcb5d125a..a3e00cddba 100644 --- a/libraries/entities/src/LightEntityItem.cpp +++ b/libraries/entities/src/LightEntityItem.cpp @@ -254,7 +254,7 @@ float LightEntityItem::getCutoff() const { } bool LightEntityItem::findDetailedRayIntersection(const glm::vec3& origin, const glm::vec3& direction, - OctreeElementPointer& element, float& distance, + const glm::vec3& viewFrustumPos, OctreeElementPointer& element, float& distance, BoxFace& face, glm::vec3& surfaceNormal, QVariantMap& extraInfo, bool precisionPicking) const { @@ -267,8 +267,8 @@ bool LightEntityItem::findDetailedRayIntersection(const glm::vec3& origin, const } bool LightEntityItem::findDetailedParabolaIntersection(const glm::vec3& origin, const glm::vec3& velocity, - const glm::vec3& acceleration, OctreeElementPointer& element, float& parabolicDistance, - BoxFace& face, glm::vec3& surfaceNormal, + const glm::vec3& acceleration, const glm::vec3& viewFrustumPos, OctreeElementPointer& element, + float& parabolicDistance, BoxFace& face, glm::vec3& surfaceNormal, QVariantMap& extraInfo, bool precisionPicking) const { // TODO: consider if this is really what we want to do. We've made it so that "lights are pickable" is a global state // this is probably reasonable since there's typically only one tree you'd be picking on at a time. Technically we could diff --git a/libraries/entities/src/LightEntityItem.h b/libraries/entities/src/LightEntityItem.h index 5245770ec8..0f21c6acd9 100644 --- a/libraries/entities/src/LightEntityItem.h +++ b/libraries/entities/src/LightEntityItem.h @@ -74,12 +74,12 @@ public: virtual bool supportsDetailedIntersection() const override { return true; } virtual bool findDetailedRayIntersection(const glm::vec3& origin, const glm::vec3& direction, - OctreeElementPointer& element, float& distance, + const glm::vec3& viewFrustumPos, OctreeElementPointer& element, float& distance, BoxFace& face, glm::vec3& surfaceNormal, QVariantMap& extraInfo, bool precisionPicking) const override; virtual bool findDetailedParabolaIntersection(const glm::vec3& origin, const glm::vec3& velocity, - const glm::vec3& acceleration, OctreeElementPointer& element, float& parabolicDistance, - BoxFace& face, glm::vec3& surfaceNormal, + const glm::vec3& acceleration, const glm::vec3& viewFrustumPos, OctreeElementPointer& element, + float& parabolicDistance, BoxFace& face, glm::vec3& surfaceNormal, QVariantMap& extraInfo, bool precisionPicking) const override; private: diff --git a/libraries/entities/src/LineEntityItem.h b/libraries/entities/src/LineEntityItem.h index 38e526204e..505291cdda 100644 --- a/libraries/entities/src/LineEntityItem.h +++ b/libraries/entities/src/LineEntityItem.h @@ -52,13 +52,13 @@ class LineEntityItem : public EntityItem { // never have a ray intersection pick a LineEntityItem. virtual bool supportsDetailedIntersection() const override { return true; } virtual bool findDetailedRayIntersection(const glm::vec3& origin, const glm::vec3& direction, - OctreeElementPointer& element, float& distance, + const glm::vec3& viewFrustumPos, OctreeElementPointer& element, float& distance, BoxFace& face, glm::vec3& surfaceNormal, QVariantMap& extraInfo, bool precisionPicking) const override { return false; } virtual bool findDetailedParabolaIntersection(const glm::vec3& origin, const glm::vec3& velocity, - const glm::vec3& acceleration, OctreeElementPointer& element, float& parabolicDistance, - BoxFace& face, glm::vec3& surfaceNormal, + const glm::vec3& acceleration, const glm::vec3& viewFrustumPos, OctreeElementPointer& element, + float& parabolicDistance, BoxFace& face, glm::vec3& surfaceNormal, QVariantMap& extraInfo, bool precisionPicking) const override { return false; } diff --git a/libraries/entities/src/PolyLineEntityItem.h b/libraries/entities/src/PolyLineEntityItem.h index 8fb7831c6a..23f6e36e73 100644 --- a/libraries/entities/src/PolyLineEntityItem.h +++ b/libraries/entities/src/PolyLineEntityItem.h @@ -82,12 +82,12 @@ public: // never have a ray intersection pick a PolyLineEntityItem. virtual bool supportsDetailedIntersection() const override { return true; } virtual bool findDetailedRayIntersection(const glm::vec3& origin, const glm::vec3& direction, - OctreeElementPointer& element, float& distance, + const glm::vec3& viewFrustumPos, OctreeElementPointer& element, float& distance, BoxFace& face, glm::vec3& surfaceNormal, QVariantMap& extraInfo, bool precisionPicking) const override { return false; } virtual bool findDetailedParabolaIntersection(const glm::vec3& origin, const glm::vec3& velocity, - const glm::vec3& acceleration, OctreeElementPointer& element, float& parabolicDistance, - BoxFace& face, glm::vec3& surfaceNormal, + const glm::vec3& acceleration, const glm::vec3& viewFrustumPos, OctreeElementPointer& element, + float& parabolicDistance, BoxFace& face, glm::vec3& surfaceNormal, QVariantMap& extraInfo, bool precisionPicking) const override { return false; } void computeTightLocalBoundingBox(AABox& box) const; diff --git a/libraries/entities/src/PolyVoxEntityItem.h b/libraries/entities/src/PolyVoxEntityItem.h index c416353ecf..3e3fe0b18c 100644 --- a/libraries/entities/src/PolyVoxEntityItem.h +++ b/libraries/entities/src/PolyVoxEntityItem.h @@ -44,12 +44,12 @@ class PolyVoxEntityItem : public EntityItem { // never have a ray intersection pick a PolyVoxEntityItem. virtual bool supportsDetailedIntersection() const override { return true; } virtual bool findDetailedRayIntersection(const glm::vec3& origin, const glm::vec3& direction, - OctreeElementPointer& element, float& distance, + const glm::vec3& viewFrustumPos, OctreeElementPointer& element, float& distance, BoxFace& face, glm::vec3& surfaceNormal, QVariantMap& extraInfo, bool precisionPicking) const override { return false; } virtual bool findDetailedParabolaIntersection(const glm::vec3& origin, const glm::vec3& velocity, - const glm::vec3& acceleration, OctreeElementPointer& element, float& parabolicDistance, - BoxFace& face, glm::vec3& surfaceNormal, + const glm::vec3& acceleration, const glm::vec3& viewFrustumPos, OctreeElementPointer& element, + float& parabolicDistance, BoxFace& face, glm::vec3& surfaceNormal, QVariantMap& extraInfo, bool precisionPicking) const override { return false; } virtual void debugDump() const override; diff --git a/libraries/entities/src/ShapeEntityItem.cpp b/libraries/entities/src/ShapeEntityItem.cpp index 943912b934..7858e62f7d 100644 --- a/libraries/entities/src/ShapeEntityItem.cpp +++ b/libraries/entities/src/ShapeEntityItem.cpp @@ -269,17 +269,17 @@ void ShapeEntityItem::setUnscaledDimensions(const glm::vec3& value) { } bool ShapeEntityItem::supportsDetailedIntersection() const { - return getShape() == entity::Sphere || getBillboardMode() != BillboardMode::NONE; + return getShape() == entity::Sphere; } bool ShapeEntityItem::findDetailedRayIntersection(const glm::vec3& origin, const glm::vec3& direction, - OctreeElementPointer& element, - float& distance, BoxFace& face, glm::vec3& surfaceNormal, - QVariantMap& extraInfo, bool precisionPicking) const { + const glm::vec3& viewFrustumPos, OctreeElementPointer& element, + float& distance, BoxFace& face, glm::vec3& surfaceNormal, + QVariantMap& extraInfo, bool precisionPicking) const { glm::vec3 dimensions = getScaledDimensions(); glm::quat rotation = getWorldOrientation(); glm::vec3 position = getWorldPosition() + rotation * (dimensions * (ENTITY_ITEM_DEFAULT_REGISTRATION_POINT - getRegistrationPoint())); - rotation = BillboardModeHelpers::getBillboardRotation(position, rotation, getBillboardMode(), BillboardModeHelpers::getPrimaryViewFrustumPosition()); + rotation = BillboardModeHelpers::getBillboardRotation(position, rotation, getBillboardMode(), viewFrustumPos); // determine the ray in the frame of the entity transformed from a unit sphere glm::mat4 entityToWorldMatrix = glm::translate(position) * glm::mat4_cast(rotation) * glm::scale(dimensions); @@ -287,35 +287,31 @@ bool ShapeEntityItem::findDetailedRayIntersection(const glm::vec3& origin, const glm::vec3 entityFrameOrigin = glm::vec3(worldToEntityMatrix * glm::vec4(origin, 1.0f)); glm::vec3 entityFrameDirection = glm::vec3(worldToEntityMatrix * glm::vec4(direction, 0.0f)); - if (getShape() == entity::Sphere) { - // NOTE: unit sphere has center of 0,0,0 and radius of 0.5 - if (findRaySphereIntersection(entityFrameOrigin, entityFrameDirection, glm::vec3(0.0f), 0.5f, distance)) { - bool success; - glm::vec3 center = getCenterPosition(success); - if (success) { - // FIXME: this is only correct for uniformly scaled spheres - // determine where on the unit sphere the hit point occured - glm::vec3 hitAt = origin + (direction * distance); - surfaceNormal = glm::normalize(hitAt - center); - } else { - return false; - } - return true; + // NOTE: unit sphere has center of 0,0,0 and radius of 0.5 + if (findRaySphereIntersection(entityFrameOrigin, entityFrameDirection, glm::vec3(0.0f), 0.5f, distance)) { + bool success; + glm::vec3 center = getCenterPosition(success); + if (success) { + // FIXME: this is only correct for uniformly scaled spheres + // determine where on the unit sphere the hit point occured + glm::vec3 hitAt = origin + (direction * distance); + surfaceNormal = glm::normalize(hitAt - center); + } else { + return false; } - } else if (findRayAABoxIntersection(entityFrameOrigin, entityFrameDirection, 1.0f / entityFrameDirection, glm::vec3(-0.5f), glm::vec3(1.0f), distance, face, surfaceNormal)) { return true; } return false; } bool ShapeEntityItem::findDetailedParabolaIntersection(const glm::vec3& origin, const glm::vec3& velocity, const glm::vec3& acceleration, - OctreeElementPointer& element, float& parabolicDistance, + const glm::vec3& viewFrustumPos, OctreeElementPointer& element, float& parabolicDistance, BoxFace& face, glm::vec3& surfaceNormal, QVariantMap& extraInfo, bool precisionPicking) const { glm::vec3 dimensions = getScaledDimensions(); glm::quat rotation = getWorldOrientation(); glm::vec3 position = getWorldPosition() + rotation * (dimensions * (ENTITY_ITEM_DEFAULT_REGISTRATION_POINT - getRegistrationPoint())); - rotation = BillboardModeHelpers::getBillboardRotation(position, rotation, getBillboardMode(), BillboardModeHelpers::getPrimaryViewFrustumPosition()); + rotation = BillboardModeHelpers::getBillboardRotation(position, rotation, getBillboardMode(), viewFrustumPos); // determine the parabola in the frame of the entity transformed from a unit sphere glm::mat4 entityToWorldMatrix = glm::translate(position) * glm::mat4_cast(rotation) * glm::scale(dimensions); @@ -324,25 +320,26 @@ bool ShapeEntityItem::findDetailedParabolaIntersection(const glm::vec3& origin, glm::vec3 entityFrameVelocity = glm::vec3(worldToEntityMatrix * glm::vec4(velocity, 0.0f)); glm::vec3 entityFrameAcceleration = glm::vec3(worldToEntityMatrix * glm::vec4(acceleration, 0.0f)); - if (getShape() == entity::Sphere) { - // NOTE: unit sphere has center of 0,0,0 and radius of 0.5 - if (findParabolaSphereIntersection(entityFrameOrigin, entityFrameVelocity, entityFrameAcceleration, glm::vec3(0.0f), 0.5f, parabolicDistance)) { - bool success; - glm::vec3 center = getCenterPosition(success); - if (success) { - // FIXME: this is only correct for uniformly scaled spheres - surfaceNormal = glm::normalize((origin + velocity * parabolicDistance + 0.5f * acceleration * parabolicDistance * parabolicDistance) - center); - } else { - return false; - } - return true; + // NOTE: unit sphere has center of 0,0,0 and radius of 0.5 + if (findParabolaSphereIntersection(entityFrameOrigin, entityFrameVelocity, entityFrameAcceleration, glm::vec3(0.0f), 0.5f, parabolicDistance)) { + bool success; + glm::vec3 center = getCenterPosition(success); + if (success) { + // FIXME: this is only correct for uniformly scaled spheres + surfaceNormal = glm::normalize((origin + velocity * parabolicDistance + 0.5f * acceleration * parabolicDistance * parabolicDistance) - center); + } else { + return false; } - } else if (findParabolaAABoxIntersection(entityFrameOrigin, entityFrameVelocity, entityFrameAcceleration, glm::vec3(-0.5f), glm::vec3(1.0f), parabolicDistance, face, surfaceNormal)) { return true; } return false; } +bool ShapeEntityItem::getRotateForPicking() const { + auto shape = getShape(); + return getBillboardMode() != BillboardMode::NONE && (_shape < entity::Shape::Cube || _shape > entity::Shape::Icosahedron); +} + void ShapeEntityItem::debugDump() const { quint64 now = usecTimestampNow(); qCDebug(entities) << "SHAPE EntityItem id:" << getEntityItemID() << "---------------------------------------------"; diff --git a/libraries/entities/src/ShapeEntityItem.h b/libraries/entities/src/ShapeEntityItem.h index c0dc9642fe..d5b934153a 100644 --- a/libraries/entities/src/ShapeEntityItem.h +++ b/libraries/entities/src/ShapeEntityItem.h @@ -86,13 +86,14 @@ public: bool supportsDetailedIntersection() const override; bool findDetailedRayIntersection(const glm::vec3& origin, const glm::vec3& direction, - OctreeElementPointer& element, float& distance, - BoxFace& face, glm::vec3& surfaceNormal, - QVariantMap& extraInfo, bool precisionPicking) const override; + const glm::vec3& viewFrustumPos, OctreeElementPointer& element, + float& distance, BoxFace& face, glm::vec3& surfaceNormal, + QVariantMap& extraInfo, bool precisionPicking) const override; bool findDetailedParabolaIntersection(const glm::vec3& origin, const glm::vec3& velocity, - const glm::vec3& acceleration, OctreeElementPointer& element, float& parabolicDistance, - BoxFace& face, glm::vec3& surfaceNormal, + const glm::vec3& acceleration, const glm::vec3& viewFrustumPos, OctreeElementPointer& element, + float& parabolicDistance, BoxFace& face, glm::vec3& surfaceNormal, QVariantMap& extraInfo, bool precisionPicking) const override; + bool getRotateForPicking() const override; void debugDump() const override; diff --git a/libraries/entities/src/TextEntityItem.cpp b/libraries/entities/src/TextEntityItem.cpp index 7fab5cee53..ebe536cae8 100644 --- a/libraries/entities/src/TextEntityItem.cpp +++ b/libraries/entities/src/TextEntityItem.cpp @@ -191,60 +191,6 @@ void TextEntityItem::appendSubclassData(OctreePacketData* packetData, EncodeBits APPEND_ENTITY_PROPERTY(PROP_TEXT_EFFECT_THICKNESS, getTextEffectThickness()); } -bool TextEntityItem::findDetailedRayIntersection(const glm::vec3& origin, const glm::vec3& direction, - OctreeElementPointer& element, float& distance, - BoxFace& face, glm::vec3& surfaceNormal, - QVariantMap& extraInfo, bool precisionPicking) const { - glm::vec3 dimensions = getScaledDimensions(); - glm::vec2 xyDimensions(dimensions.x, dimensions.y); - glm::quat rotation = getWorldOrientation(); - glm::vec3 position = getWorldPosition() + rotation * (dimensions * (ENTITY_ITEM_DEFAULT_REGISTRATION_POINT - getRegistrationPoint())); - rotation = BillboardModeHelpers::getBillboardRotation(position, rotation, getBillboardMode(), BillboardModeHelpers::getPrimaryViewFrustumPosition()); - - if (findRayRectangleIntersection(origin, direction, rotation, position, xyDimensions, distance)) { - glm::vec3 forward = rotation * Vectors::FRONT; - if (glm::dot(forward, direction) > 0.0f) { - face = MAX_Z_FACE; - surfaceNormal = -forward; - } else { - face = MIN_Z_FACE; - surfaceNormal = forward; - } - return true; - } - return false; -} - -bool TextEntityItem::findDetailedParabolaIntersection(const glm::vec3& origin, const glm::vec3& velocity, const glm::vec3& acceleration, - OctreeElementPointer& element, float& parabolicDistance, - BoxFace& face, glm::vec3& surfaceNormal, - QVariantMap& extraInfo, bool precisionPicking) const { - glm::vec3 dimensions = getScaledDimensions(); - glm::vec2 xyDimensions(dimensions.x, dimensions.y); - glm::quat rotation = getWorldOrientation(); - glm::vec3 position = getWorldPosition() + rotation * (dimensions * (ENTITY_ITEM_DEFAULT_REGISTRATION_POINT - getRegistrationPoint())); - rotation = BillboardModeHelpers::getBillboardRotation(position, rotation, getBillboardMode(), BillboardModeHelpers::getPrimaryViewFrustumPosition()); - - glm::quat inverseRot = glm::inverse(rotation); - glm::vec3 localOrigin = inverseRot * (origin - position); - glm::vec3 localVelocity = inverseRot * velocity; - glm::vec3 localAcceleration = inverseRot * acceleration; - - if (findParabolaRectangleIntersection(localOrigin, localVelocity, localAcceleration, xyDimensions, parabolicDistance)) { - float localIntersectionVelocityZ = localVelocity.z + localAcceleration.z * parabolicDistance; - glm::vec3 forward = rotation * Vectors::FRONT; - if (localIntersectionVelocityZ > 0.0f) { - face = MIN_Z_FACE; - surfaceNormal = forward; - } else { - face = MAX_Z_FACE; - surfaceNormal = -forward; - } - return true; - } - return false; -} - void TextEntityItem::setText(const QString& value) { withWriteLock([&] { _needsRenderUpdate |= _text != value; diff --git a/libraries/entities/src/TextEntityItem.h b/libraries/entities/src/TextEntityItem.h index 212f11e768..3e58831a72 100644 --- a/libraries/entities/src/TextEntityItem.h +++ b/libraries/entities/src/TextEntityItem.h @@ -48,16 +48,6 @@ public: EntityPropertyFlags& propertyFlags, bool overwriteLocalData, bool& somethingChanged) override; - virtual bool supportsDetailedIntersection() const override { return getBillboardMode() != BillboardMode::NONE; } - virtual bool findDetailedRayIntersection(const glm::vec3& origin, const glm::vec3& direction, - OctreeElementPointer& element, float& distance, - BoxFace& face, glm::vec3& surfaceNormal, - QVariantMap& extraInfo, bool precisionPicking) const override; - virtual bool findDetailedParabolaIntersection(const glm::vec3& origin, const glm::vec3& velocity, - const glm::vec3& acceleration, OctreeElementPointer& element, float& parabolicDistance, - BoxFace& face, glm::vec3& surfaceNormal, - QVariantMap& extraInfo, bool precisionPicking) const override; - static const QString DEFAULT_TEXT; void setText(const QString& value); QString getText() const; diff --git a/libraries/entities/src/WebEntityItem.cpp b/libraries/entities/src/WebEntityItem.cpp index d9d2425e11..c0ad9e7094 100644 --- a/libraries/entities/src/WebEntityItem.cpp +++ b/libraries/entities/src/WebEntityItem.cpp @@ -157,62 +157,6 @@ void WebEntityItem::appendSubclassData(OctreePacketData* packetData, EncodeBitst APPEND_ENTITY_PROPERTY(PROP_WEB_USE_BACKGROUND, getUseBackground()); } -bool WebEntityItem::findDetailedRayIntersection(const glm::vec3& origin, const glm::vec3& direction, - OctreeElementPointer& element, float& distance, - BoxFace& face, glm::vec3& surfaceNormal, - QVariantMap& extraInfo, bool precisionPicking) const { - glm::vec3 dimensions = getScaledDimensions(); - glm::vec2 xyDimensions(dimensions.x, dimensions.y); - glm::quat rotation = getWorldOrientation(); - glm::vec3 position = getWorldPosition() + rotation * (dimensions * (ENTITY_ITEM_DEFAULT_REGISTRATION_POINT - getRegistrationPoint())); - rotation = BillboardModeHelpers::getBillboardRotation(position, rotation, getBillboardMode(), BillboardModeHelpers::getPrimaryViewFrustumPosition()); - - if (findRayRectangleIntersection(origin, direction, rotation, position, xyDimensions, distance)) { - glm::vec3 forward = rotation * Vectors::FRONT; - if (glm::dot(forward, direction) > 0.0f) { - face = MAX_Z_FACE; - surfaceNormal = -forward; - } else { - face = MIN_Z_FACE; - surfaceNormal = forward; - } - return true; - } else { - return false; - } -} - -bool WebEntityItem::findDetailedParabolaIntersection(const glm::vec3& origin, const glm::vec3& velocity, const glm::vec3& acceleration, - OctreeElementPointer& element, float& parabolicDistance, - BoxFace& face, glm::vec3& surfaceNormal, - QVariantMap& extraInfo, bool precisionPicking) const { - glm::vec3 dimensions = getScaledDimensions(); - glm::vec2 xyDimensions(dimensions.x, dimensions.y); - glm::quat rotation = getWorldOrientation(); - glm::vec3 position = getWorldPosition() + rotation * (dimensions * (ENTITY_ITEM_DEFAULT_REGISTRATION_POINT - getRegistrationPoint())); - rotation = BillboardModeHelpers::getBillboardRotation(position, rotation, getBillboardMode(), BillboardModeHelpers::getPrimaryViewFrustumPosition()); - - glm::quat inverseRot = glm::inverse(rotation); - glm::vec3 localOrigin = inverseRot * (origin - position); - glm::vec3 localVelocity = inverseRot * velocity; - glm::vec3 localAcceleration = inverseRot * acceleration; - - if (findParabolaRectangleIntersection(localOrigin, localVelocity, localAcceleration, xyDimensions, parabolicDistance)) { - float localIntersectionVelocityZ = localVelocity.z + localAcceleration.z * parabolicDistance; - glm::vec3 forward = rotation * Vectors::FRONT; - if (localIntersectionVelocityZ > 0.0f) { - face = MIN_Z_FACE; - surfaceNormal = forward; - } else { - face = MAX_Z_FACE; - surfaceNormal = -forward; - } - return true; - } else { - return false; - } -} - void WebEntityItem::setColor(const glm::u8vec3& value) { withWriteLock([&] { _needsRenderUpdate |= _color != value; diff --git a/libraries/entities/src/WebEntityItem.h b/libraries/entities/src/WebEntityItem.h index e0a66f25b2..8edd20245f 100644 --- a/libraries/entities/src/WebEntityItem.h +++ b/libraries/entities/src/WebEntityItem.h @@ -45,16 +45,6 @@ public: EntityPropertyFlags& propertyFlags, bool overwriteLocalData, bool& somethingChanged) override; - virtual bool supportsDetailedIntersection() const override { return getBillboardMode() != BillboardMode::NONE; } - virtual bool findDetailedRayIntersection(const glm::vec3& origin, const glm::vec3& direction, - OctreeElementPointer& element, float& distance, - BoxFace& face, glm::vec3& surfaceNormal, - QVariantMap& extraInfo, bool precisionPicking) const override; - virtual bool findDetailedParabolaIntersection(const glm::vec3& origin, const glm::vec3& velocity, - const glm::vec3& acceleration, OctreeElementPointer& element, float& parabolicDistance, - BoxFace& face, glm::vec3& surfaceNormal, - QVariantMap& extraInfo, bool precisionPicking) const override; - glm::u8vec3 getColor() const; void setColor(const glm::u8vec3& value); diff --git a/libraries/entities/src/ZoneEntityItem.cpp b/libraries/entities/src/ZoneEntityItem.cpp index 8b020e92d5..3eabfb4f1e 100644 --- a/libraries/entities/src/ZoneEntityItem.cpp +++ b/libraries/entities/src/ZoneEntityItem.cpp @@ -318,15 +318,15 @@ void ZoneEntityItem::setCompoundShapeURL(const QString& url) { } bool ZoneEntityItem::findDetailedRayIntersection(const glm::vec3& origin, const glm::vec3& direction, - OctreeElementPointer& element, float& distance, + const glm::vec3& viewFrustumPos, OctreeElementPointer& element, float& distance, BoxFace& face, glm::vec3& surfaceNormal, QVariantMap& extraInfo, bool precisionPicking) const { return _zonesArePickable; } bool ZoneEntityItem::findDetailedParabolaIntersection(const glm::vec3& origin, const glm::vec3& velocity, - const glm::vec3& acceleration, OctreeElementPointer& element, float& parabolicDistance, - BoxFace& face, glm::vec3& surfaceNormal, + const glm::vec3& acceleration, const glm::vec3& viewFrustumPos, OctreeElementPointer& element, + float& parabolicDistance, BoxFace& face, glm::vec3& surfaceNormal, QVariantMap& extraInfo, bool precisionPicking) const { return _zonesArePickable; } diff --git a/libraries/entities/src/ZoneEntityItem.h b/libraries/entities/src/ZoneEntityItem.h index 9c8e3839b7..2b61bbd346 100644 --- a/libraries/entities/src/ZoneEntityItem.h +++ b/libraries/entities/src/ZoneEntityItem.h @@ -116,12 +116,12 @@ public: virtual bool supportsDetailedIntersection() const override { return true; } virtual bool findDetailedRayIntersection(const glm::vec3& origin, const glm::vec3& direction, - OctreeElementPointer& element, float& distance, + const glm::vec3& viewFrustumPos, OctreeElementPointer& element, float& distance, BoxFace& face, glm::vec3& surfaceNormal, QVariantMap& extraInfo, bool precisionPicking) const override; virtual bool findDetailedParabolaIntersection(const glm::vec3& origin, const glm::vec3& velocity, - const glm::vec3& acceleration, OctreeElementPointer& element, float& parabolicDistance, - BoxFace& face, glm::vec3& surfaceNormal, + const glm::vec3& acceleration, const glm::vec3& viewFrustumPos, OctreeElementPointer& element, + float& parabolicDistance, BoxFace& face, glm::vec3& surfaceNormal, QVariantMap& extraInfo, bool precisionPicking) const override; bool contains(const glm::vec3& point) const override; diff --git a/libraries/render-utils/src/Model.cpp b/libraries/render-utils/src/Model.cpp index 9bf1596a04..dad2f95420 100644 --- a/libraries/render-utils/src/Model.cpp +++ b/libraries/render-utils/src/Model.cpp @@ -319,8 +319,8 @@ void Model::initJointStates() { _rig.initJointStates(hfmModel, modelOffset); } -bool Model::findRayIntersectionAgainstSubMeshes(const glm::vec3& origin, const glm::vec3& direction, float& distance, - BoxFace& face, glm::vec3& surfaceNormal, QVariantMap& extraInfo, +bool Model::findRayIntersectionAgainstSubMeshes(const glm::vec3& origin, const glm::vec3& direction, const glm::vec3& viewFrustumPos, + float& distance, BoxFace& face, glm::vec3& surfaceNormal, QVariantMap& extraInfo, bool pickAgainstTriangles, bool allowBackface) { bool intersectedSomething = false; @@ -330,7 +330,8 @@ bool Model::findRayIntersectionAgainstSubMeshes(const glm::vec3& origin, const g } // extents is the entity relative, scaled, centered extents of the entity - glm::mat4 modelToWorldMatrix = createMatFromQuatAndPos(_rotation, _translation); + glm::quat rotation = BillboardModeHelpers::getBillboardRotation(_translation, _rotation, _billboardMode, viewFrustumPos); + glm::mat4 modelToWorldMatrix = createMatFromQuatAndPos(rotation, _translation); glm::mat4 worldToModelMatrix = glm::inverse(modelToWorldMatrix); Extents modelExtents = getMeshExtents(); // NOTE: unrotated @@ -475,8 +476,8 @@ bool Model::findRayIntersectionAgainstSubMeshes(const glm::vec3& origin, const g } bool Model::findParabolaIntersectionAgainstSubMeshes(const glm::vec3& origin, const glm::vec3& velocity, const glm::vec3& acceleration, - float& parabolicDistance, BoxFace& face, glm::vec3& surfaceNormal, QVariantMap& extraInfo, - bool pickAgainstTriangles, bool allowBackface) { + const glm::vec3& viewFrustumPos, float& parabolicDistance, BoxFace& face, glm::vec3& surfaceNormal, + QVariantMap& extraInfo, bool pickAgainstTriangles, bool allowBackface) { bool intersectedSomething = false; // if we aren't active, we can't pick yet... @@ -485,7 +486,8 @@ bool Model::findParabolaIntersectionAgainstSubMeshes(const glm::vec3& origin, co } // extents is the entity relative, scaled, centered extents of the entity - glm::mat4 modelToWorldMatrix = createMatFromQuatAndPos(_rotation, _translation); + glm::quat rotation = BillboardModeHelpers::getBillboardRotation(_translation, _rotation, _billboardMode, viewFrustumPos); + glm::mat4 modelToWorldMatrix = createMatFromQuatAndPos(rotation, _translation); glm::mat4 worldToModelMatrix = glm::inverse(modelToWorldMatrix); Extents modelExtents = getMeshExtents(); // NOTE: unrotated diff --git a/libraries/render-utils/src/Model.h b/libraries/render-utils/src/Model.h index 3085dcfc6f..5a8338993a 100644 --- a/libraries/render-utils/src/Model.h +++ b/libraries/render-utils/src/Model.h @@ -198,11 +198,11 @@ public: void setJointRotation(int index, bool valid, const glm::quat& rotation, float priority); void setJointTranslation(int index, bool valid, const glm::vec3& translation, float priority); - bool findRayIntersectionAgainstSubMeshes(const glm::vec3& origin, const glm::vec3& direction, float& distance, - BoxFace& face, glm::vec3& surfaceNormal, + bool findRayIntersectionAgainstSubMeshes(const glm::vec3& origin, const glm::vec3& direction, const glm::vec3& viewFrustumPos, + float& distance, BoxFace& face, glm::vec3& surfaceNormal, QVariantMap& extraInfo, bool pickAgainstTriangles = false, bool allowBackface = false); bool findParabolaIntersectionAgainstSubMeshes(const glm::vec3& origin, const glm::vec3& velocity, const glm::vec3& acceleration, - float& parabolicDistance, BoxFace& face, glm::vec3& surfaceNormal, + const glm::vec3& viewFrustumPos, float& parabolicDistance, BoxFace& face, glm::vec3& surfaceNormal, QVariantMap& extraInfo, bool pickAgainstTriangles = false, bool allowBackface = false); void setOffset(const glm::vec3& offset); From 92ea14a0591ad70b078eca6e9142deb269e25eb4 Mon Sep 17 00:00:00 2001 From: HifiExperiments Date: Sun, 17 Jan 2021 22:08:06 -0800 Subject: [PATCH 084/152] proper render bounds for models (need to pass RenderArgs to getBound everywhere) --- interface/src/graphics/WorldBox.cpp | 2 +- interface/src/graphics/WorldBox.h | 2 +- interface/src/raypick/ParabolaPointer.cpp | 4 +-- interface/src/raypick/ParabolaPointer.h | 4 +-- interface/src/ui/overlays/Overlay.h | 2 +- interface/src/ui/overlays/OverlaysPayload.cpp | 2 +- .../src/workload/GameWorkloadRenderer.cpp | 4 +-- interface/src/workload/GameWorkloadRenderer.h | 4 +-- .../src/avatars-renderer/Avatar.cpp | 2 +- .../src/avatars-renderer/Avatar.h | 2 +- .../src/RenderableEntityItem.cpp | 2 +- .../src/RenderableEntityItem.h | 2 +- .../src/RenderableGizmoEntityItem.cpp | 4 +-- .../src/RenderableGizmoEntityItem.h | 2 +- .../src/RenderableGridEntityItem.cpp | 4 +-- .../src/RenderableGridEntityItem.h | 2 +- .../src/RenderableLightEntityItem.cpp | 4 +-- .../src/RenderableLightEntityItem.h | 2 +- .../src/RenderableMaterialEntityItem.cpp | 2 +- .../RenderableParticleEffectEntityItem.cpp | 2 +- .../src/RenderableParticleEffectEntityItem.h | 2 +- .../src/RenderableShapeEntityItem.cpp | 6 ++-- .../src/RenderableShapeEntityItem.h | 2 +- .../src/RenderableTextEntityItem.cpp | 8 ++--- .../src/RenderableTextEntityItem.h | 4 +-- libraries/procedural/CMakeLists.txt | 2 +- .../procedural/src/procedural/Procedural.h | 11 +++--- libraries/render-utils/src/AnimDebugDraw.cpp | 2 +- libraries/render-utils/src/FadeEffectJobs.cpp | 8 ++--- libraries/render-utils/src/FadeEffectJobs.h | 2 +- libraries/render-utils/src/LightPayload.cpp | 4 +-- libraries/render-utils/src/LightPayload.h | 4 +-- .../render-utils/src/MeshPartPayload.cpp | 20 +++++++---- libraries/render-utils/src/MeshPartPayload.h | 5 ++- libraries/render-utils/src/Model.cpp | 2 +- libraries/render/src/render/CullTask.cpp | 34 +++++++++---------- .../render/src/render/DrawSceneOctree.cpp | 2 +- libraries/render/src/render/FilterTask.cpp | 2 +- libraries/render/src/render/Item.cpp | 8 ++--- libraries/render/src/render/Item.h | 20 +++++------ libraries/render/src/render/Scene.cpp | 6 ++-- libraries/render/src/render/SortTask.cpp | 2 +- 42 files changed, 108 insertions(+), 102 deletions(-) diff --git a/interface/src/graphics/WorldBox.cpp b/interface/src/graphics/WorldBox.cpp index 0e15d9da86..a627cf75e4 100644 --- a/interface/src/graphics/WorldBox.cpp +++ b/interface/src/graphics/WorldBox.cpp @@ -16,7 +16,7 @@ render::ItemID WorldBoxRenderData::_item{ render::Item::INVALID_ITEM_ID }; namespace render { template <> const ItemKey payloadGetKey(const WorldBoxRenderData::Pointer& stuff) { return ItemKey::Builder::opaqueShape().withTagBits(ItemKey::TAG_BITS_0 | ItemKey::TAG_BITS_1); } - template <> const Item::Bound payloadGetBound(const WorldBoxRenderData::Pointer& stuff) { return Item::Bound(); } + template <> const Item::Bound payloadGetBound(const WorldBoxRenderData::Pointer& stuff, RenderArgs* args) { return Item::Bound(); } template <> void payloadRender(const WorldBoxRenderData::Pointer& stuff, RenderArgs* args) { if (Menu::getInstance()->isOptionChecked(MenuOption::WorldAxes)) { PerformanceTimer perfTimer("worldBox"); diff --git a/interface/src/graphics/WorldBox.h b/interface/src/graphics/WorldBox.h index 4d53652c0e..0d697eb133 100644 --- a/interface/src/graphics/WorldBox.h +++ b/interface/src/graphics/WorldBox.h @@ -32,7 +32,7 @@ public: namespace render { template <> const ItemKey payloadGetKey(const WorldBoxRenderData::Pointer& stuff); - template <> const Item::Bound payloadGetBound(const WorldBoxRenderData::Pointer& stuff); + template <> const Item::Bound payloadGetBound(const WorldBoxRenderData::Pointer& stuff, RenderArgs* args); template <> void payloadRender(const WorldBoxRenderData::Pointer& stuff, RenderArgs* args); } diff --git a/interface/src/raypick/ParabolaPointer.cpp b/interface/src/raypick/ParabolaPointer.cpp index 216248f8b5..67f0772228 100644 --- a/interface/src/raypick/ParabolaPointer.cpp +++ b/interface/src/raypick/ParabolaPointer.cpp @@ -462,9 +462,9 @@ namespace render { template <> const ItemKey payloadGetKey(const ParabolaPointer::RenderState::ParabolaRenderItem::Pointer& payload) { return payload->getKey(); } - template <> const Item::Bound payloadGetBound(const ParabolaPointer::RenderState::ParabolaRenderItem::Pointer& payload) { + template <> const Item::Bound payloadGetBound(const ParabolaPointer::RenderState::ParabolaRenderItem::Pointer& payload, RenderArgs* args) { if (payload) { - return payload->getBound(); + return payload->getBound(args); } return Item::Bound(); } diff --git a/interface/src/raypick/ParabolaPointer.h b/interface/src/raypick/ParabolaPointer.h index 85d09adbdb..1701e4dcfa 100644 --- a/interface/src/raypick/ParabolaPointer.h +++ b/interface/src/raypick/ParabolaPointer.h @@ -31,7 +31,7 @@ public: void render(RenderArgs* args); render::Item::Bound& editBound() { return _bound; } - const render::Item::Bound& getBound() { return _bound; } + const render::Item::Bound& getBound(RenderArgs* args) { return _bound; } render::ItemKey getKey() const { return _key; } void setVisible(bool visible); @@ -128,7 +128,7 @@ private: namespace render { template <> const ItemKey payloadGetKey(const ParabolaPointer::RenderState::ParabolaRenderItem::Pointer& payload); - template <> const Item::Bound payloadGetBound(const ParabolaPointer::RenderState::ParabolaRenderItem::Pointer& payload); + template <> const Item::Bound payloadGetBound(const ParabolaPointer::RenderState::ParabolaRenderItem::Pointer& payload, RenderArgs* args); template <> void payloadRender(const ParabolaPointer::RenderState::ParabolaRenderItem::Pointer& payload, RenderArgs* args); template <> const ShapeKey shapeGetShapeKey(const ParabolaPointer::RenderState::ParabolaRenderItem::Pointer& payload); } diff --git a/interface/src/ui/overlays/Overlay.h b/interface/src/ui/overlays/Overlay.h index 72373d2d20..5c92cfce00 100644 --- a/interface/src/ui/overlays/Overlay.h +++ b/interface/src/ui/overlays/Overlay.h @@ -66,7 +66,7 @@ private: namespace render { template <> const ItemKey payloadGetKey(const Overlay::Pointer& overlay); - template <> const Item::Bound payloadGetBound(const Overlay::Pointer& overlay); + template <> const Item::Bound payloadGetBound(const Overlay::Pointer& overlay, RenderArgs* args); template <> void payloadRender(const Overlay::Pointer& overlay, RenderArgs* args); template <> const ShapeKey shapeGetShapeKey(const Overlay::Pointer& overlay); template <> uint32_t metaFetchMetaSubItems(const Overlay::Pointer& overlay, ItemIDs& subItems); diff --git a/interface/src/ui/overlays/OverlaysPayload.cpp b/interface/src/ui/overlays/OverlaysPayload.cpp index 0d1bcdd071..fdcd4f7205 100644 --- a/interface/src/ui/overlays/OverlaysPayload.cpp +++ b/interface/src/ui/overlays/OverlaysPayload.cpp @@ -14,7 +14,7 @@ namespace render { template <> const ItemKey payloadGetKey(const Overlay::Pointer& overlay) { return overlay->getKey(); } - template <> const Item::Bound payloadGetBound(const Overlay::Pointer& overlay) { + template <> const Item::Bound payloadGetBound(const Overlay::Pointer& overlay, RenderArgs* args) { return overlay->getBounds(); } template <> void payloadRender(const Overlay::Pointer& overlay, RenderArgs* args) { diff --git a/interface/src/workload/GameWorkloadRenderer.cpp b/interface/src/workload/GameWorkloadRenderer.cpp index f65bf88754..1310baf4b3 100644 --- a/interface/src/workload/GameWorkloadRenderer.cpp +++ b/interface/src/workload/GameWorkloadRenderer.cpp @@ -82,9 +82,9 @@ namespace render { template <> const ItemKey payloadGetKey(const GameWorkloadRenderItem::Pointer& payload) { return payload->getKey(); } - template <> const Item::Bound payloadGetBound(const GameWorkloadRenderItem::Pointer& payload) { + template <> const Item::Bound payloadGetBound(const GameWorkloadRenderItem::Pointer& payload, RenderArgs* args) { if (payload) { - return payload->getBound(); + return payload->getBound(args); } return Item::Bound(); } diff --git a/interface/src/workload/GameWorkloadRenderer.h b/interface/src/workload/GameWorkloadRenderer.h index a25598821e..ad33425774 100644 --- a/interface/src/workload/GameWorkloadRenderer.h +++ b/interface/src/workload/GameWorkloadRenderer.h @@ -57,7 +57,7 @@ public: void render(RenderArgs* args); render::Item::Bound& editBound() { return _bound; } - const render::Item::Bound& getBound() { return _bound; } + const render::Item::Bound& getBound(RenderArgs* args) { return _bound; } void setVisible(bool visible); void showProxies(bool show); @@ -96,7 +96,7 @@ protected: namespace render { template <> const ItemKey payloadGetKey(const GameWorkloadRenderItem::Pointer& payload); - template <> const Item::Bound payloadGetBound(const GameWorkloadRenderItem::Pointer& payload); + template <> const Item::Bound payloadGetBound(const GameWorkloadRenderItem::Pointer& payload, RenderArgs* args); template <> void payloadRender(const GameWorkloadRenderItem::Pointer& payload, RenderArgs* args); template <> const ShapeKey shapeGetShapeKey(const GameWorkloadRenderItem::Pointer& payload); } diff --git a/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp b/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp index d859454a99..f361e15999 100644 --- a/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp +++ b/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp @@ -63,7 +63,7 @@ namespace render { } return keyBuilder.build(); } - template <> const Item::Bound payloadGetBound(const AvatarSharedPointer& avatar) { + template <> const Item::Bound payloadGetBound(const AvatarSharedPointer& avatar, RenderArgs* args) { auto avatarPtr = static_pointer_cast(avatar); if (avatarPtr) { return avatarPtr->getRenderBounds(); diff --git a/libraries/avatars-renderer/src/avatars-renderer/Avatar.h b/libraries/avatars-renderer/src/avatars-renderer/Avatar.h index 25dd347484..4fc9c25595 100644 --- a/libraries/avatars-renderer/src/avatars-renderer/Avatar.h +++ b/libraries/avatars-renderer/src/avatars-renderer/Avatar.h @@ -39,7 +39,7 @@ namespace render { template <> const ItemKey payloadGetKey(const AvatarSharedPointer& avatar); - template <> const Item::Bound payloadGetBound(const AvatarSharedPointer& avatar); + template <> const Item::Bound payloadGetBound(const AvatarSharedPointer& avatar, RenderArgs* args); template <> void payloadRender(const AvatarSharedPointer& avatar, RenderArgs* args); template <> uint32_t metaFetchMetaSubItems(const AvatarSharedPointer& avatar, ItemIDs& subItems); } diff --git a/libraries/entities-renderer/src/RenderableEntityItem.cpp b/libraries/entities-renderer/src/RenderableEntityItem.cpp index fdb971e7a3..b2670e3bce 100644 --- a/libraries/entities-renderer/src/RenderableEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableEntityItem.cpp @@ -137,7 +137,7 @@ EntityRenderer::~EntityRenderer() {} // Smart payload proxy members, implementing the payload interface // -Item::Bound EntityRenderer::getBound() { +Item::Bound EntityRenderer::getBound(RenderArgs* args) { auto bound = _bound; if (_billboardMode != BillboardMode::NONE) { glm::vec3 dimensions = bound.getScale(); diff --git a/libraries/entities-renderer/src/RenderableEntityItem.h b/libraries/entities-renderer/src/RenderableEntityItem.h index 4afcd6e231..7f0e1e16ee 100644 --- a/libraries/entities-renderer/src/RenderableEntityItem.h +++ b/libraries/entities-renderer/src/RenderableEntityItem.h @@ -64,7 +64,7 @@ public: static glm::vec3 calculatePulseColor(const glm::vec3& color, const PulsePropertyGroup& pulseProperties, quint64 start); virtual uint32_t metaFetchMetaSubItems(ItemIDs& subItems) const override; - virtual Item::Bound getBound() override; + virtual Item::Bound getBound(RenderArgs* args) override; bool passesZoneOcclusionTest(const std::unordered_set& containingZones) const override; protected: diff --git a/libraries/entities-renderer/src/RenderableGizmoEntityItem.cpp b/libraries/entities-renderer/src/RenderableGizmoEntityItem.cpp index 3abd120bf9..bf005ae2e5 100644 --- a/libraries/entities-renderer/src/RenderableGizmoEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableGizmoEntityItem.cpp @@ -195,8 +195,8 @@ void GizmoEntityRenderer::doRenderUpdateAsynchronousTyped(const TypedEntityPoint } } -Item::Bound GizmoEntityRenderer::getBound() { - auto bound = Parent::getBound(); +Item::Bound GizmoEntityRenderer::getBound(RenderArgs* args) { + auto bound = Parent::getBound(args); if (_ringProperties.getHasTickMarks()) { glm::vec3 scale = bound.getScale(); for (int i = 0; i < 3; i += 2) { diff --git a/libraries/entities-renderer/src/RenderableGizmoEntityItem.h b/libraries/entities-renderer/src/RenderableGizmoEntityItem.h index 8593348bde..6a09d1a047 100644 --- a/libraries/entities-renderer/src/RenderableGizmoEntityItem.h +++ b/libraries/entities-renderer/src/RenderableGizmoEntityItem.h @@ -23,7 +23,7 @@ public: ~GizmoEntityRenderer(); protected: - Item::Bound getBound() override; + Item::Bound getBound(RenderArgs* args) override; ShapeKey getShapeKey() override; bool isTransparent() const override; diff --git a/libraries/entities-renderer/src/RenderableGridEntityItem.cpp b/libraries/entities-renderer/src/RenderableGridEntityItem.cpp index a5ae4acbf5..e374fe29c0 100644 --- a/libraries/entities-renderer/src/RenderableGridEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableGridEntityItem.cpp @@ -49,13 +49,13 @@ void GridEntityRenderer::doRenderUpdateAsynchronousTyped(const TypedEntityPointe _minorGridEvery = entity->getMinorGridEvery(); } -Item::Bound GridEntityRenderer::getBound() { +Item::Bound GridEntityRenderer::getBound(RenderArgs* args) { if (_followCamera) { // This is a UI element that should always be in view, lie to the octree to avoid culling const AABox DOMAIN_BOX = AABox(glm::vec3(-TREE_SCALE / 2), TREE_SCALE); return DOMAIN_BOX; } - return Parent::getBound(); + return Parent::getBound(args); } ShapeKey GridEntityRenderer::getShapeKey() { diff --git a/libraries/entities-renderer/src/RenderableGridEntityItem.h b/libraries/entities-renderer/src/RenderableGridEntityItem.h index 1958d17136..fd5b397424 100644 --- a/libraries/entities-renderer/src/RenderableGridEntityItem.h +++ b/libraries/entities-renderer/src/RenderableGridEntityItem.h @@ -23,7 +23,7 @@ public: ~GridEntityRenderer(); protected: - Item::Bound getBound() override; + Item::Bound getBound(RenderArgs* args) override; ShapeKey getShapeKey() override; bool isTransparent() const override; diff --git a/libraries/entities-renderer/src/RenderableLightEntityItem.cpp b/libraries/entities-renderer/src/RenderableLightEntityItem.cpp index 9eb2e8428d..2ab2051fcf 100644 --- a/libraries/entities-renderer/src/RenderableLightEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableLightEntityItem.cpp @@ -60,8 +60,8 @@ ItemKey LightEntityRenderer::getKey() { return payloadGetKey(_lightPayload); } -Item::Bound LightEntityRenderer::getBound() { - return payloadGetBound(_lightPayload); +Item::Bound LightEntityRenderer::getBound(RenderArgs* args) { + return payloadGetBound(_lightPayload, args); } void LightEntityRenderer::doRender(RenderArgs* args) { diff --git a/libraries/entities-renderer/src/RenderableLightEntityItem.h b/libraries/entities-renderer/src/RenderableLightEntityItem.h index 323f280795..bbb5ec346a 100644 --- a/libraries/entities-renderer/src/RenderableLightEntityItem.h +++ b/libraries/entities-renderer/src/RenderableLightEntityItem.h @@ -29,7 +29,7 @@ protected: virtual void doRenderUpdateAsynchronousTyped(const TypedEntityPointer& entity) override; virtual ItemKey getKey() override; - virtual Item::Bound getBound() override; + virtual Item::Bound getBound(RenderArgs* args) override; virtual void doRender(RenderArgs* args) override; private: diff --git a/libraries/entities-renderer/src/RenderableMaterialEntityItem.cpp b/libraries/entities-renderer/src/RenderableMaterialEntityItem.cpp index 74b479affe..714defe817 100644 --- a/libraries/entities-renderer/src/RenderableMaterialEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableMaterialEntityItem.cpp @@ -376,7 +376,7 @@ void MaterialEntityRenderer::applyMaterial(const TypedEntityPointer& entity) { if (material->isProcedural()) { auto procedural = std::static_pointer_cast(material); - procedural->setBoundOperator([this] { return getBound(); }); + procedural->setBoundOperator([this](RenderArgs* args) { return getBound(args); }); entity->setHasVertexShader(procedural->hasVertexShader()); } diff --git a/libraries/entities-renderer/src/RenderableParticleEffectEntityItem.cpp b/libraries/entities-renderer/src/RenderableParticleEffectEntityItem.cpp index 4fe6bc8f93..e2a57840d9 100644 --- a/libraries/entities-renderer/src/RenderableParticleEffectEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableParticleEffectEntityItem.cpp @@ -161,7 +161,7 @@ ShapeKey ParticleEffectEntityRenderer::getShapeKey() { return builder.build(); } -Item::Bound ParticleEffectEntityRenderer::getBound() { +Item::Bound ParticleEffectEntityRenderer::getBound(RenderArgs* args) { return _bound; } diff --git a/libraries/entities-renderer/src/RenderableParticleEffectEntityItem.h b/libraries/entities-renderer/src/RenderableParticleEffectEntityItem.h index ca6bc859fb..547d654486 100644 --- a/libraries/entities-renderer/src/RenderableParticleEffectEntityItem.h +++ b/libraries/entities-renderer/src/RenderableParticleEffectEntityItem.h @@ -30,7 +30,7 @@ protected: virtual ItemKey getKey() override; virtual ShapeKey getShapeKey() override; - virtual Item::Bound getBound() override; + virtual Item::Bound getBound(RenderArgs* args) override; virtual void doRender(RenderArgs* args) override; private: diff --git a/libraries/entities-renderer/src/RenderableShapeEntityItem.cpp b/libraries/entities-renderer/src/RenderableShapeEntityItem.cpp index 9cc18a8df5..674d7c297d 100644 --- a/libraries/entities-renderer/src/RenderableShapeEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableShapeEntityItem.cpp @@ -200,16 +200,16 @@ ShapeKey ShapeEntityRenderer::getShapeKey() { return builder.build(); } -Item::Bound ShapeEntityRenderer::getBound() { +Item::Bound ShapeEntityRenderer::getBound(RenderArgs* args) { auto mat = _materials.find("0"); if (mat != _materials.end() && mat->second.top().material && mat->second.top().material->isProcedural() && mat->second.top().material->isReady()) { auto procedural = std::static_pointer_cast(mat->second.top().material); if (procedural->hasVertexShader() && procedural->hasBoundOperator()) { - return procedural->getBound(); + return procedural->getBound(args); } } - return Parent::getBound(); + return Parent::getBound(args); } void ShapeEntityRenderer::doRender(RenderArgs* args) { diff --git a/libraries/entities-renderer/src/RenderableShapeEntityItem.h b/libraries/entities-renderer/src/RenderableShapeEntityItem.h index 9fb2fa8f23..fe62ad48b9 100644 --- a/libraries/entities-renderer/src/RenderableShapeEntityItem.h +++ b/libraries/entities-renderer/src/RenderableShapeEntityItem.h @@ -26,7 +26,7 @@ public: protected: ShapeKey getShapeKey() override; - Item::Bound getBound() override; + Item::Bound getBound(RenderArgs* args) override; private: virtual bool needsRenderUpdate() const override; diff --git a/libraries/entities-renderer/src/RenderableTextEntityItem.cpp b/libraries/entities-renderer/src/RenderableTextEntityItem.cpp index 1724cf69d5..16d9afb913 100644 --- a/libraries/entities-renderer/src/RenderableTextEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableTextEntityItem.cpp @@ -227,12 +227,12 @@ ItemKey entities::TextPayload::getKey() const { return ItemKey::Builder::opaqueShape(); } -Item::Bound entities::TextPayload::getBound() const { +Item::Bound entities::TextPayload::getBound(RenderArgs* args) const { auto entityTreeRenderer = DependencyManager::get(); if (entityTreeRenderer) { auto renderable = entityTreeRenderer->renderableForEntityId(_entityID); if (renderable) { - return std::static_pointer_cast(renderable)->getBound(); + return std::static_pointer_cast(renderable)->getBound(args); } } return Item::Bound(); @@ -335,9 +335,9 @@ template <> const ItemKey payloadGetKey(const TextPayload::Pointer& payload) { return ItemKey::Builder::opaqueShape(); } -template <> const Item::Bound payloadGetBound(const TextPayload::Pointer& payload) { +template <> const Item::Bound payloadGetBound(const TextPayload::Pointer& payload, RenderArgs* args) { if (payload) { - return payload->getBound(); + return payload->getBound(args); } return Item::Bound(); } diff --git a/libraries/entities-renderer/src/RenderableTextEntityItem.h b/libraries/entities-renderer/src/RenderableTextEntityItem.h index 1564c98644..0f736d1229 100644 --- a/libraries/entities-renderer/src/RenderableTextEntityItem.h +++ b/libraries/entities-renderer/src/RenderableTextEntityItem.h @@ -88,7 +88,7 @@ public: typedef Payload::DataPointer Pointer; ItemKey getKey() const; - Item::Bound getBound() const; + Item::Bound getBound(RenderArgs* args) const; ShapeKey getShapeKey() const; void render(RenderArgs* args); bool passesZoneOcclusionTest(const std::unordered_set& containingZones) const; @@ -104,7 +104,7 @@ protected: namespace render { template <> const ItemKey payloadGetKey(const entities::TextPayload::Pointer& payload); - template <> const Item::Bound payloadGetBound(const entities::TextPayload::Pointer& payload); + template <> const Item::Bound payloadGetBound(const entities::TextPayload::Pointer& payload, RenderArgs* args); template <> const ShapeKey shapeGetShapeKey(const entities::TextPayload::Pointer& payload); template <> void payloadRender(const entities::TextPayload::Pointer& payload, RenderArgs* args); template <> bool payloadPassesZoneOcclusionTest(const entities::TextPayload::Pointer& payload, const std::unordered_set& containingZones); diff --git a/libraries/procedural/CMakeLists.txt b/libraries/procedural/CMakeLists.txt index d737d34e95..a7394a3670 100644 --- a/libraries/procedural/CMakeLists.txt +++ b/libraries/procedural/CMakeLists.txt @@ -1,4 +1,4 @@ set(TARGET_NAME procedural) setup_hifi_library() -link_hifi_libraries(shared gpu shaders networking graphics material-networking ktx image hfm) +link_hifi_libraries(shared gpu shaders networking render graphics material-networking ktx image hfm) diff --git a/libraries/procedural/src/procedural/Procedural.h b/libraries/procedural/src/procedural/Procedural.h index 9b3d0a9bd4..7d655b5ef4 100644 --- a/libraries/procedural/src/procedural/Procedural.h +++ b/libraries/procedural/src/procedural/Procedural.h @@ -16,6 +16,7 @@ #include #include +#include #include #include #include @@ -113,9 +114,9 @@ public: void setDoesFade(bool doesFade) { _doesFade = doesFade; } bool hasVertexShader() const; - void setBoundOperator(const std::function& boundOperator) { _boundOperator = boundOperator; } + void setBoundOperator(const std::function& boundOperator) { _boundOperator = boundOperator; } bool hasBoundOperator() const { return (bool)_boundOperator; } - AABox getBound() { return _boundOperator(); } + AABox getBound(RenderArgs* args) { return _boundOperator(args); } gpu::Shader::Source _vertexSource; gpu::Shader::Source _vertexSourceSkinned; @@ -199,7 +200,7 @@ private: bool _doesFade { true }; ProceduralProgramKey _prevKey; - std::function _boundOperator { nullptr }; + std::function _boundOperator { nullptr }; mutable std::mutex _mutex; }; @@ -232,9 +233,9 @@ public: void initializeProcedural(); - void setBoundOperator(const std::function& boundOperator) { _procedural.setBoundOperator(boundOperator); } + void setBoundOperator(const std::function& boundOperator) { _procedural.setBoundOperator(boundOperator); } bool hasBoundOperator() const { return _procedural.hasBoundOperator(); } - AABox getBound() { return _procedural.getBound(); } + AABox getBound(RenderArgs* args) { return _procedural.getBound(args); } private: QString _proceduralString; diff --git a/libraries/render-utils/src/AnimDebugDraw.cpp b/libraries/render-utils/src/AnimDebugDraw.cpp index c4020cb4c4..770ac0b7dd 100644 --- a/libraries/render-utils/src/AnimDebugDraw.cpp +++ b/libraries/render-utils/src/AnimDebugDraw.cpp @@ -68,7 +68,7 @@ typedef render::Payload AnimDebugDrawPayload; namespace render { template <> const ItemKey payloadGetKey(const AnimDebugDrawData::Pointer& data) { return (data->_isVisible ? ItemKey::Builder::transparentShape() : ItemKey::Builder::transparentShape().withInvisible()).withTagBits(ItemKey::TAG_BITS_ALL); } - template <> const Item::Bound payloadGetBound(const AnimDebugDrawData::Pointer& data) { return data->_bound; } + template <> const Item::Bound payloadGetBound(const AnimDebugDrawData::Pointer& data, RenderArgs* args) { return data->_bound; } template <> void payloadRender(const AnimDebugDrawData::Pointer& data, RenderArgs* args) { data->render(args); } diff --git a/libraries/render-utils/src/FadeEffectJobs.cpp b/libraries/render-utils/src/FadeEffectJobs.cpp index 43206e77fa..6f6205060a 100644 --- a/libraries/render-utils/src/FadeEffectJobs.cpp +++ b/libraries/render-utils/src/FadeEffectJobs.cpp @@ -575,7 +575,7 @@ void FadeJob::run(const render::RenderContextPointer& renderContext, FadeJob::Ou auto& item = scene->getItem(state.itemId); assert(item.getTransitionId() == transitionId); #endif - if (update(*jobConfig, scene, transaction, state, deltaTime)) { + if (update(renderContext->args, *jobConfig, scene, transaction, state, deltaTime)) { hasTransaction = true; } if (isFirstItem && (state.threshold != jobConfig->threshold)) { @@ -599,7 +599,7 @@ const FadeCategory FadeJob::transitionToCategory[render::Transition::TYPE_COUNT] FADE_AVATAR_CHANGE }; -bool FadeJob::update(const Config& config, const render::ScenePointer& scene, render::Transaction& transaction, render::Transition& transition, const double deltaTime) const { +bool FadeJob::update(RenderArgs* args, const Config& config, const render::ScenePointer& scene, render::Transaction& transaction, render::Transition& transition, const double deltaTime) const { const auto fadeCategory = transitionToCategory[transition.eventType]; auto& eventConfig = config.events[fadeCategory]; auto item = scene->getItemSafe(transition.itemId); @@ -607,11 +607,11 @@ bool FadeJob::update(const Config& config, const render::ScenePointer& scene, re const FadeConfig::Timing timing = (FadeConfig::Timing) eventConfig.timing; if (item.exist()) { - auto aabb = item.getBound(); + auto aabb = item.getBound(args); if (render::Item::isValidID(transition.boundItemId)) { auto boundItem = scene->getItemSafe(transition.boundItemId); if (boundItem.exist()) { - aabb = boundItem.getBound(); + aabb = boundItem.getBound(args); } } auto& dimensions = aabb.getDimensions(); diff --git a/libraries/render-utils/src/FadeEffectJobs.h b/libraries/render-utils/src/FadeEffectJobs.h index 449995dba5..08b49c8d2d 100644 --- a/libraries/render-utils/src/FadeEffectJobs.h +++ b/libraries/render-utils/src/FadeEffectJobs.h @@ -223,7 +223,7 @@ private: float _thresholdScale[FADE_CATEGORY_COUNT]; uint64_t _previousTime{ 0 }; - bool update(const Config& config, const render::ScenePointer& scene, render::Transaction& transaction, render::Transition& transition, const double deltaTime) const; + bool update(RenderArgs* args, const Config& config, const render::ScenePointer& scene, render::Transaction& transaction, render::Transition& transition, const double deltaTime) const; static float computeElementEnterRatio(double time, const double period, FadeConfig::Timing timing); }; diff --git a/libraries/render-utils/src/LightPayload.cpp b/libraries/render-utils/src/LightPayload.cpp index 79e0c1d94d..d1018982d0 100644 --- a/libraries/render-utils/src/LightPayload.cpp +++ b/libraries/render-utils/src/LightPayload.cpp @@ -28,7 +28,7 @@ namespace render { return builder.build(); } - template <> const Item::Bound payloadGetBound(const LightPayload::Pointer& payload) { + template <> const Item::Bound payloadGetBound(const LightPayload::Pointer& payload, RenderArgs* args) { if (payload) { return payload->editBound(); } @@ -98,7 +98,7 @@ namespace render { return builder.build(); } - template <> const Item::Bound payloadGetBound(const KeyLightPayload::Pointer& payload) { + template <> const Item::Bound payloadGetBound(const KeyLightPayload::Pointer& payload, RenderArgs* args) { if (payload) { return payload->editBound(); } diff --git a/libraries/render-utils/src/LightPayload.h b/libraries/render-utils/src/LightPayload.h index 44b79ce10c..4c6695ec58 100644 --- a/libraries/render-utils/src/LightPayload.h +++ b/libraries/render-utils/src/LightPayload.h @@ -43,7 +43,7 @@ protected: namespace render { template <> const ItemKey payloadGetKey(const LightPayload::Pointer& payload); - template <> const Item::Bound payloadGetBound(const LightPayload::Pointer& payload); + template <> const Item::Bound payloadGetBound(const LightPayload::Pointer& payload, RenderArgs* args); template <> void payloadRender(const LightPayload::Pointer& payload, RenderArgs* args); } @@ -79,7 +79,7 @@ protected: namespace render { template <> const ItemKey payloadGetKey(const KeyLightPayload::Pointer& payload); - template <> const Item::Bound payloadGetBound(const KeyLightPayload::Pointer& payload); + template <> const Item::Bound payloadGetBound(const KeyLightPayload::Pointer& payload, RenderArgs* args); template <> void payloadRender(const KeyLightPayload::Pointer& payload, RenderArgs* args); } diff --git a/libraries/render-utils/src/MeshPartPayload.cpp b/libraries/render-utils/src/MeshPartPayload.cpp index 0e0af6fc71..2d07fec8bf 100644 --- a/libraries/render-utils/src/MeshPartPayload.cpp +++ b/libraries/render-utils/src/MeshPartPayload.cpp @@ -177,8 +177,6 @@ void ModelMeshPartPayload::updateTransformForSkinnedMesh(const Transform& modelT } _parentTransform = modelTransform; - _worldBound = _adjustedLocalBound; - _worldBound.transform(_parentTransform); } void ModelMeshPartPayload::bindMesh(gpu::Batch& batch) { @@ -289,15 +287,23 @@ ItemKey ModelMeshPartPayload::getKey() const { return _itemKey; } -Item::Bound ModelMeshPartPayload::getBound() const { +Item::Bound ModelMeshPartPayload::getBound(RenderArgs* args) const { graphics::MaterialPointer material = _drawMaterials.empty() ? nullptr : _drawMaterials.top().material; if (material && material->isProcedural() && material->isReady()) { auto procedural = std::static_pointer_cast(_drawMaterials.top().material); if (procedural->hasVertexShader() && procedural->hasBoundOperator()) { - return procedural->getBound(); + return procedural->getBound(args); } } - return _worldBound; + + auto worldBound = _adjustedLocalBound; + auto parentTransform = _parentTransform; + if (args) { + parentTransform.setRotation(BillboardModeHelpers::getBillboardRotation(parentTransform.getTranslation(), parentTransform.getRotation(), _billboardMode, + args->_renderMode == RenderArgs::RenderMode::SHADOW_RENDER_MODE ? BillboardModeHelpers::getPrimaryViewFrustumPosition() : args->getViewFrustum().getPosition())); + } + worldBound.transform(parentTransform); + return worldBound; } ShapeKey ModelMeshPartPayload::getShapeKey() const { @@ -396,9 +402,9 @@ template <> const ItemKey payloadGetKey(const ModelMeshPartPayload::Pointer& pay return ItemKey::Builder::opaqueShape(); // for lack of a better idea } -template <> const Item::Bound payloadGetBound(const ModelMeshPartPayload::Pointer& payload) { +template <> const Item::Bound payloadGetBound(const ModelMeshPartPayload::Pointer& payload, RenderArgs* args) { if (payload) { - return payload->getBound(); + return payload->getBound(args); } return Item::Bound(); } diff --git a/libraries/render-utils/src/MeshPartPayload.h b/libraries/render-utils/src/MeshPartPayload.h index 63ccb85470..b5cff41bf8 100644 --- a/libraries/render-utils/src/MeshPartPayload.h +++ b/libraries/render-utils/src/MeshPartPayload.h @@ -45,7 +45,7 @@ public: // Render Item interface render::ItemKey getKey() const; - render::Item::Bound getBound() const; + render::Item::Bound getBound(RenderArgs* args) const; render::ShapeKey getShapeKey() const; void render(RenderArgs* args); @@ -99,12 +99,11 @@ private: Transform _parentTransform; graphics::Box _localBound; graphics::Box _adjustedLocalBound; - mutable graphics::Box _worldBound; }; namespace render { template <> const ItemKey payloadGetKey(const ModelMeshPartPayload::Pointer& payload); - template <> const Item::Bound payloadGetBound(const ModelMeshPartPayload::Pointer& payload); + template <> const Item::Bound payloadGetBound(const ModelMeshPartPayload::Pointer& payload, RenderArgs* args); template <> const ShapeKey shapeGetShapeKey(const ModelMeshPartPayload::Pointer& payload); template <> void payloadRender(const ModelMeshPartPayload::Pointer& payload, RenderArgs* args); template <> bool payloadPassesZoneOcclusionTest(const ModelMeshPartPayload::Pointer& payload, const std::unordered_set& containingZones); diff --git a/libraries/render-utils/src/Model.cpp b/libraries/render-utils/src/Model.cpp index dad2f95420..f4267fdf39 100644 --- a/libraries/render-utils/src/Model.cpp +++ b/libraries/render-utils/src/Model.cpp @@ -1527,7 +1527,7 @@ AABox Model::getRenderableMeshBound() const { // Build a bound using the last known bound from all the renderItems. AABox totalBound; for (auto& renderItem : _modelMeshRenderItems) { - totalBound += renderItem->getBound(); + totalBound += renderItem->getBound(nullptr); } return totalBound; } diff --git a/libraries/render/src/render/CullTask.cpp b/libraries/render/src/render/CullTask.cpp index 164d8e9f21..68bb467f66 100644 --- a/libraries/render/src/render/CullTask.cpp +++ b/libraries/render/src/render/CullTask.cpp @@ -83,7 +83,7 @@ void FetchNonspatialItems::run(const RenderContextPointer& renderContext, const for (auto& id : items) { auto& item = scene->getItem(id); if (filter.test(item.getKey()) && item.passesZoneOcclusionTest(CullTest::_containingZones)) { - outItems.emplace_back(ItemBound(id, item.getBound())); + outItems.emplace_back(ItemBound(id, item.getBound(renderContext->args))); } } } @@ -188,10 +188,10 @@ void CullSpatialSelection::run(const RenderContextPointer& renderContext, for (auto id : inSelection.insideItems) { auto& item = scene->getItem(id); if (filter.test(item.getKey()) && test.zoneOcclusionTest(item)) { - ItemBound itemBound(id, item.getBound()); + ItemBound itemBound(id, item.getBound(args)); outItems.emplace_back(itemBound); if (item.getKey().isMetaCullGroup()) { - item.fetchMetaSubItemBounds(outItems, (*scene)); + item.fetchMetaSubItemBounds(outItems, (*scene), args); } } } @@ -203,10 +203,10 @@ void CullSpatialSelection::run(const RenderContextPointer& renderContext, for (auto id : inSelection.insideSubcellItems) { auto& item = scene->getItem(id); if (filter.test(item.getKey()) && test.zoneOcclusionTest(item)) { - ItemBound itemBound(id, item.getBound()); + ItemBound itemBound(id, item.getBound(args)); outItems.emplace_back(itemBound); if (item.getKey().isMetaCullGroup()) { - item.fetchMetaSubItemBounds(outItems, (*scene)); + item.fetchMetaSubItemBounds(outItems, (*scene), args); } } } @@ -218,10 +218,10 @@ void CullSpatialSelection::run(const RenderContextPointer& renderContext, for (auto id : inSelection.partialItems) { auto& item = scene->getItem(id); if (filter.test(item.getKey()) && test.zoneOcclusionTest(item)) { - ItemBound itemBound(id, item.getBound()); + ItemBound itemBound(id, item.getBound(args)); outItems.emplace_back(itemBound); if (item.getKey().isMetaCullGroup()) { - item.fetchMetaSubItemBounds(outItems, (*scene)); + item.fetchMetaSubItemBounds(outItems, (*scene), args); } } } @@ -233,10 +233,10 @@ void CullSpatialSelection::run(const RenderContextPointer& renderContext, for (auto id : inSelection.partialSubcellItems) { auto& item = scene->getItem(id); if (filter.test(item.getKey()) && test.zoneOcclusionTest(item)) { - ItemBound itemBound(id, item.getBound()); + ItemBound itemBound(id, item.getBound(args)); outItems.emplace_back(itemBound); if (item.getKey().isMetaCullGroup()) { - item.fetchMetaSubItemBounds(outItems, (*scene)); + item.fetchMetaSubItemBounds(outItems, (*scene), args); } } } @@ -250,10 +250,10 @@ void CullSpatialSelection::run(const RenderContextPointer& renderContext, for (auto id : inSelection.insideItems) { auto& item = scene->getItem(id); if (filter.test(item.getKey()) && test.zoneOcclusionTest(item)) { - ItemBound itemBound(id, item.getBound()); + ItemBound itemBound(id, item.getBound(args)); outItems.emplace_back(itemBound); if (item.getKey().isMetaCullGroup()) { - item.fetchMetaSubItemBounds(outItems, (*scene)); + item.fetchMetaSubItemBounds(outItems, (*scene), args); } } } @@ -265,11 +265,11 @@ void CullSpatialSelection::run(const RenderContextPointer& renderContext, for (auto id : inSelection.insideSubcellItems) { auto& item = scene->getItem(id); if (filter.test(item.getKey()) && test.zoneOcclusionTest(item)) { - ItemBound itemBound(id, item.getBound()); + ItemBound itemBound(id, item.getBound(args)); if (test.solidAngleTest(itemBound.bound)) { outItems.emplace_back(itemBound); if (item.getKey().isMetaCullGroup()) { - item.fetchMetaSubItemBounds(outItems, (*scene)); + item.fetchMetaSubItemBounds(outItems, (*scene), args); } } } @@ -282,11 +282,11 @@ void CullSpatialSelection::run(const RenderContextPointer& renderContext, for (auto id : inSelection.partialItems) { auto& item = scene->getItem(id); if (filter.test(item.getKey()) && test.zoneOcclusionTest(item)) { - ItemBound itemBound(id, item.getBound()); + ItemBound itemBound(id, item.getBound(args)); if (test.frustumTest(itemBound.bound)) { outItems.emplace_back(itemBound); if (item.getKey().isMetaCullGroup()) { - item.fetchMetaSubItemBounds(outItems, (*scene)); + item.fetchMetaSubItemBounds(outItems, (*scene), args); } } } @@ -299,11 +299,11 @@ void CullSpatialSelection::run(const RenderContextPointer& renderContext, for (auto id : inSelection.partialSubcellItems) { auto& item = scene->getItem(id); if (filter.test(item.getKey()) && test.zoneOcclusionTest(item)) { - ItemBound itemBound(id, item.getBound()); + ItemBound itemBound(id, item.getBound(args)); if (test.frustumTest(itemBound.bound) && test.solidAngleTest(itemBound.bound)) { outItems.emplace_back(itemBound); if (item.getKey().isMetaCullGroup()) { - item.fetchMetaSubItemBounds(outItems, (*scene)); + item.fetchMetaSubItemBounds(outItems, (*scene), args); } } } diff --git a/libraries/render/src/render/DrawSceneOctree.cpp b/libraries/render/src/render/DrawSceneOctree.cpp index 493ed01c3f..44d54c3c28 100644 --- a/libraries/render/src/render/DrawSceneOctree.cpp +++ b/libraries/render/src/render/DrawSceneOctree.cpp @@ -194,7 +194,7 @@ void DrawItemSelection::run(const RenderContextPointer& renderContext, const Ite render::ItemBounds itemBounds; for (const auto& itemID : itemIDs) { auto& item = scene->getItem(itemID); - auto itemBound = item.getBound(); + auto itemBound = item.getBound(args); if (!itemBound.isInvalid()) { itemBounds.emplace_back(itemID, itemBound); } diff --git a/libraries/render/src/render/FilterTask.cpp b/libraries/render/src/render/FilterTask.cpp index 20d29f3e5d..b269f44b41 100644 --- a/libraries/render/src/render/FilterTask.cpp +++ b/libraries/render/src/render/FilterTask.cpp @@ -139,7 +139,7 @@ void IDsToBounds::run(const RenderContextPointer& renderContext, const ItemIDs& for (auto id : inItems) { auto& item = scene->getItem(id); if (item.exist()) { - outItems.emplace_back(ItemBound{ id, item.getBound() }); + outItems.emplace_back(ItemBound{ id, item.getBound(renderContext->args) }); } } } else { diff --git a/libraries/render/src/render/Item.cpp b/libraries/render/src/render/Item.cpp index f21df58368..369f227566 100644 --- a/libraries/render/src/render/Item.cpp +++ b/libraries/render/src/render/Item.cpp @@ -97,7 +97,7 @@ const ShapeKey Item::getShapeKey() const { return shapeKey; } -uint32_t Item::fetchMetaSubItemBounds(ItemBounds& subItemBounds, Scene& scene) const { +uint32_t Item::fetchMetaSubItemBounds(ItemBounds& subItemBounds, Scene& scene, RenderArgs* args) const { ItemIDs subItems; auto numSubs = fetchMetaSubItems(subItems); @@ -107,7 +107,7 @@ uint32_t Item::fetchMetaSubItemBounds(ItemBounds& subItemBounds, Scene& scene) c if (scene.isAllocatedID(id)) { auto& item = scene.getItem(id); if (item.exist()) { - subItemBounds.emplace_back(id, item.getBound()); + subItemBounds.emplace_back(id, item.getBound(args)); } else { numSubs--; } @@ -133,11 +133,11 @@ namespace render { return payload->getShapeKey(); } - template <> const Item::Bound payloadGetBound(const PayloadProxyInterface::Pointer& payload) { + template <> const Item::Bound payloadGetBound(const PayloadProxyInterface::Pointer& payload, RenderArgs* args) { if (!payload) { return render::Item::Bound(); } - return payload->getBound(); + return payload->getBound(args); } template <> void payloadRender(const PayloadProxyInterface::Pointer& payload, RenderArgs* args) { diff --git a/libraries/render/src/render/Item.h b/libraries/render/src/render/Item.h index 8a67108d0e..5952be8a84 100644 --- a/libraries/render/src/render/Item.h +++ b/libraries/render/src/render/Item.h @@ -431,7 +431,7 @@ public: class PayloadInterface { public: virtual const ItemKey getKey() const = 0; - virtual const Bound getBound() const = 0; + virtual const Bound getBound(RenderArgs* args) const = 0; virtual void render(RenderArgs* args) = 0; virtual const ShapeKey getShapeKey() const = 0; @@ -476,7 +476,7 @@ public: // Payload Interface // Get the bound of the item expressed in world space (or eye space depending on the key.isWorldSpace()) - const Bound getBound() const { return _payload->getBound(); } + const Bound getBound(RenderArgs* args) const { return _payload->getBound(args); } // Get the layer where the item belongs, simply reflecting the key. int getLayer() const { return _key.getLayer(); } @@ -489,7 +489,7 @@ public: // Meta Type Interface uint32_t fetchMetaSubItems(ItemIDs& subItems) const { return _payload->fetchMetaSubItems(subItems); } - uint32_t fetchMetaSubItemBounds(ItemBounds& subItemBounds, Scene& scene) const; + uint32_t fetchMetaSubItemBounds(ItemBounds& subItemBounds, Scene& scene, RenderArgs* args) const; bool passesZoneOcclusionTest(const std::unordered_set& containingZones) const { return _payload->passesZoneOcclusionTest(containingZones); } @@ -524,13 +524,13 @@ public: inline QDebug operator<<(QDebug debug, const Item& item) { - debug << "[Item: _key:" << item.getKey() << ", bounds:" << item.getBound() << "]"; + debug << "[Item: _key:" << item.getKey() << "]"; return debug; } // Item shared interface supported by the payload template const ItemKey payloadGetKey(const std::shared_ptr& payloadData) { return ItemKey(); } -template const Item::Bound payloadGetBound(const std::shared_ptr& payloadData) { return Item::Bound(); } +template const Item::Bound payloadGetBound(const std::shared_ptr& payloadData, RenderArgs* args) { return Item::Bound(); } template void payloadRender(const std::shared_ptr& payloadData, RenderArgs* args) { } // Shape type interface @@ -561,7 +561,7 @@ public: // Payload general interface virtual const ItemKey getKey() const override { return payloadGetKey(_data); } - virtual const Item::Bound getBound() const override { return payloadGetBound(_data); } + virtual const Item::Bound getBound(RenderArgs* args) const override { return payloadGetBound(_data, args); } virtual void render(RenderArgs* args) override { payloadRender(_data, args); } @@ -607,9 +607,9 @@ template <> const ItemKey payloadGetKey(const FooPointer& foo) { foo->makeMyKey(); return foo->_myownKey; } -template <> const Item::Bound payloadGetBound(const FooPointer& foo) { +template <> const Item::Bound payloadGetBound(const FooPointer& foo, RenderArgs* args) { // evaluate Foo's own bound - return foo->evaluateMyBound(); + return foo->evaluateMyBound(args); } // In this example, do not specialize the payloadRender call which means the compiler will use the default version which does nothing @@ -624,7 +624,7 @@ public: virtual ItemKey getKey() = 0; virtual ShapeKey getShapeKey() = 0; - virtual Item::Bound getBound() = 0; + virtual Item::Bound getBound(RenderArgs* args) = 0; virtual void render(RenderArgs* args) = 0; virtual uint32_t metaFetchMetaSubItems(ItemIDs& subItems) const = 0; virtual bool passesZoneOcclusionTest(const std::unordered_set& containingZones) const = 0; @@ -635,7 +635,7 @@ public: }; template <> const ItemKey payloadGetKey(const PayloadProxyInterface::Pointer& payload); -template <> const Item::Bound payloadGetBound(const PayloadProxyInterface::Pointer& payload); +template <> const Item::Bound payloadGetBound(const PayloadProxyInterface::Pointer& payload, RenderArgs* args); template <> void payloadRender(const PayloadProxyInterface::Pointer& payload, RenderArgs* args); template <> uint32_t metaFetchMetaSubItems(const PayloadProxyInterface::Pointer& payload, ItemIDs& subItems); template <> const ShapeKey shapeGetShapeKey(const PayloadProxyInterface::Pointer& payload); diff --git a/libraries/render/src/render/Scene.cpp b/libraries/render/src/render/Scene.cpp index bea111edb5..5500183196 100644 --- a/libraries/render/src/render/Scene.cpp +++ b/libraries/render/src/render/Scene.cpp @@ -305,7 +305,7 @@ void Scene::resetItems(const Transaction::Resets& transactions) { // Update the item's container assert((oldKey.isSpatial() == newKey.isSpatial()) || oldKey._flags.none()); if (newKey.isSpatial()) { - auto newCell = _masterSpatialTree.resetItem(oldCell, oldKey, item.getBound(), itemId, newKey); + auto newCell = _masterSpatialTree.resetItem(oldCell, oldKey, item.getBound(nullptr), itemId, newKey); item.resetCell(newCell, newKey.isSmall()); } else { _masterNonspatialSet.insert(itemId); @@ -361,14 +361,14 @@ void Scene::updateItems(const Transaction::Updates& transactions) { // Update the item's container if (oldKey.isSpatial() == newKey.isSpatial()) { if (newKey.isSpatial()) { - auto newCell = _masterSpatialTree.resetItem(oldCell, oldKey, item.getBound(), updateID, newKey); + auto newCell = _masterSpatialTree.resetItem(oldCell, oldKey, item.getBound(nullptr), updateID, newKey); item.resetCell(newCell, newKey.isSmall()); } } else { if (newKey.isSpatial()) { _masterNonspatialSet.erase(updateID); - auto newCell = _masterSpatialTree.resetItem(oldCell, oldKey, item.getBound(), updateID, newKey); + auto newCell = _masterSpatialTree.resetItem(oldCell, oldKey, item.getBound(nullptr), updateID, newKey); item.resetCell(newCell, newKey.isSmall()); } else { _masterSpatialTree.removeItem(oldCell, oldKey, updateID); diff --git a/libraries/render/src/render/SortTask.cpp b/libraries/render/src/render/SortTask.cpp index 5b4061a10f..266c5be41d 100644 --- a/libraries/render/src/render/SortTask.cpp +++ b/libraries/render/src/render/SortTask.cpp @@ -60,7 +60,7 @@ void render::depthSortItems(const RenderContextPointer& renderContext, bool fron for (auto itemDetails : inItems) { auto item = scene->getItem(itemDetails.id); - auto bound = itemDetails.bound; // item.getBound(); + auto bound = itemDetails.bound; // item.getBound(args); float distanceSquared = args->getViewFrustum().distanceToCameraSquared(bound.calcCenter()); itemBoundSorts.emplace_back(ItemBoundSort(distanceSquared, distanceSquared, distanceSquared, itemDetails.id, bound)); From 7030798d41a3afe6af9b0fb0d6ab7ddc20b52c34 Mon Sep 17 00:00:00 2001 From: HifiExperiments Date: Sun, 17 Jan 2021 22:47:26 -0800 Subject: [PATCH 085/152] cleanup --- libraries/render-utils/src/Model.cpp | 7 ------- 1 file changed, 7 deletions(-) diff --git a/libraries/render-utils/src/Model.cpp b/libraries/render-utils/src/Model.cpp index f4267fdf39..234ae203cb 100644 --- a/libraries/render-utils/src/Model.cpp +++ b/libraries/render-utils/src/Model.cpp @@ -984,13 +984,6 @@ void Model::setBillboardMode(BillboardMode billboardMode, const render::ScenePoi return; } - bool useDualQuaternionSkinning = _useDualQuaternionSkinning; - std::unordered_map shouldInvalidatePayloadShapeKeyMap; - - for (auto& shape : _modelMeshRenderItemShapes) { - shouldInvalidatePayloadShapeKeyMap[shape.meshIndex] = shouldInvalidatePayloadShapeKey(shape.meshIndex); - } - render::Transaction transaction; for (auto item : _modelMeshRenderItemIDs) { transaction.updateItem(item, [billboardMode](ModelMeshPartPayload& data) { From 3a821c2b7448175d32d17cfc321fca7f8b9e91f3 Mon Sep 17 00:00:00 2001 From: HifiExperiments Date: Mon, 18 Jan 2021 11:23:44 -0800 Subject: [PATCH 086/152] update create --- .../create/assets/data/createAppTooltips.json | 15 ++------- .../html/js/entityProperties.js | 31 ++++++------------- 2 files changed, 13 insertions(+), 33 deletions(-) diff --git a/scripts/system/create/assets/data/createAppTooltips.json b/scripts/system/create/assets/data/createAppTooltips.json index 478793ab78..edfdad037b 100644 --- a/scripts/system/create/assets/data/createAppTooltips.json +++ b/scripts/system/create/assets/data/createAppTooltips.json @@ -38,10 +38,6 @@ "textEffectThickness": { "tooltip": "The magnitude of the text effect." }, - "textBillboardMode": { - "tooltip": "If enabled, determines how the entity will face the camera.", - "jsPropertyName": "billboardMode" - }, "topMargin": { "tooltip": "The top margin, in meters." }, @@ -223,10 +219,6 @@ "subImage": { "tooltip": "The area of the image that is displayed." }, - "imageBillboardMode": { - "tooltip": "If enabled, determines how the entity will face the camera.", - "jsPropertyName": "billboardMode" - }, "keepAspectRatio": { "tooltip": "If enabled, the image will maintain its original aspect ratio." }, @@ -236,10 +228,6 @@ "dpi": { "tooltip": "The resolution to display the page at, in pixels per inch. Use this to resize your web source in the frame." }, - "webBillboardMode": { - "tooltip": "If enabled, determines how the entity will face the camera.", - "jsPropertyName": "billboardMode" - }, "inputMode": { "tooltip": "The user input mode to use." }, @@ -595,6 +583,9 @@ "primitiveMode": { "tooltip": "The mode in which to draw an entity, either \"Solid\" or \"Wireframe\"." }, + "billboardMode": { + "tooltip": "Determines if and how the entity will face the camera.", + }, "renderWithZones": { "tooltip": "If set, this entity will only render when your avatar is inside of a zone in this list." }, diff --git a/scripts/system/create/entityProperties/html/js/entityProperties.js b/scripts/system/create/entityProperties/html/js/entityProperties.js index f3f92a887e..5f39cdfd45 100644 --- a/scripts/system/create/entityProperties/html/js/entityProperties.js +++ b/scripts/system/create/entityProperties/html/js/entityProperties.js @@ -116,6 +116,16 @@ const GROUPS = [ }, propertyID: "primitiveMode", }, + { + label: "Billboard Mode", + type: "dropdown", + options: { + none: "None", + yaw: "Yaw", + full: "Full" + }, + propertyID: "billboardMode", + }, { label: "Render With Zones", type: "multipleZonesSelection", @@ -229,13 +239,6 @@ const GROUPS = [ decimals: 2, propertyID: "textEffectThickness", }, - { - label: "Billboard Mode", - type: "dropdown", - options: { none: "None", yaw: "Yaw", full: "Full"}, - propertyID: "textBillboardMode", - propertyName: "billboardMode", // actual entity property name - }, { label: "Top Margin", type: "number-draggable", @@ -718,13 +721,6 @@ const GROUPS = [ subLabels: [ "x", "y", "w", "h" ], propertyID: "subImage", }, - { - label: "Billboard Mode", - type: "dropdown", - options: { none: "None", yaw: "Yaw", full: "Full"}, - propertyID: "imageBillboardMode", - propertyName: "billboardMode", // actual entity property name - }, { label: "Keep Aspect Ratio", type: "bool", @@ -774,13 +770,6 @@ const GROUPS = [ decimals: 0, propertyID: "maxFPS", }, - { - label: "Billboard Mode", - type: "dropdown", - options: { none: "None", yaw: "Yaw", full: "Full"}, - propertyID: "webBillboardMode", - propertyName: "billboardMode", // actual entity property name - }, { label: "Input Mode", type: "dropdown", From 4bf952260fab20d23b944e19b9cd31fc23523baa Mon Sep 17 00:00:00 2001 From: HifiExperiments Date: Mon, 18 Jan 2021 12:57:44 -0800 Subject: [PATCH 087/152] fix crashes when running with qml disabled in VR --- libraries/ui/src/OffscreenUi.cpp | 77 ++++++++++--------- .../ui/src/ui/TabletScriptingInterface.cpp | 2 + 2 files changed, 41 insertions(+), 38 deletions(-) diff --git a/libraries/ui/src/OffscreenUi.cpp b/libraries/ui/src/OffscreenUi.cpp index 34184057e0..26e77dcb5f 100644 --- a/libraries/ui/src/OffscreenUi.cpp +++ b/libraries/ui/src/OffscreenUi.cpp @@ -189,10 +189,12 @@ void OffscreenUi::show(const QUrl& url, const QString& name, std::function f) { @@ -208,11 +210,14 @@ void OffscreenUi::toggle(const QUrl& url, const QString& name, std::functionfindChild(name); - if (item) { - return QQmlProperty(item, OFFSCREEN_VISIBILITY_PROPERTY).read().toBool(); - } else { - return false; + auto rootItem = getRootItem(); + if (rootItem) { + QQuickItem* item = rootItem->findChild(name); + if (item) { + return QQmlProperty(item, OFFSCREEN_VISIBILITY_PROPERTY).read().toBool(); + } } + return false; } class MessageBoxListener : public ModalDialogListener { @@ -280,12 +287,11 @@ QQuickItem* OffscreenUi::createMessageBox(Icon icon, const QString& title, const bool invokeResult; auto tabletScriptingInterface = DependencyManager::get(); TabletProxy* tablet = dynamic_cast(tabletScriptingInterface->getTablet("com.highfidelity.interface.tablet.system")); - if (tablet->getToolbarMode()) { + if (tablet->getToolbarMode() && _desktop) { invokeResult = QMetaObject::invokeMethod(_desktop, "messageBox", Q_RETURN_ARG(QVariant, result), Q_ARG(QVariant, QVariant::fromValue(map))); - } else { - QQuickItem* tabletRoot = tablet->getTabletRoot(); + } else if (QQuickItem* tabletRoot = tablet->getTabletRoot()) { invokeResult = QMetaObject::invokeMethod(tabletRoot, "messageBox", Q_RETURN_ARG(QVariant, result), Q_ARG(QVariant, QVariant::fromValue(map))); @@ -533,21 +539,21 @@ ModalDialogListener* OffscreenUi::customInputDialogAsync(const Icon icon, const } void OffscreenUi::togglePinned() { - bool invokeResult = QMetaObject::invokeMethod(_desktop, "togglePinned"); + bool invokeResult = _desktop && QMetaObject::invokeMethod(_desktop, "togglePinned"); if (!invokeResult) { qWarning() << "Failed to toggle window visibility"; } } void OffscreenUi::setPinned(bool pinned) { - bool invokeResult = QMetaObject::invokeMethod(_desktop, "setPinned", Q_ARG(QVariant, pinned)); + bool invokeResult = _desktop && QMetaObject::invokeMethod(_desktop, "setPinned", Q_ARG(QVariant, pinned)); if (!invokeResult) { qWarning() << "Failed to set window visibility"; } } void OffscreenUi::setConstrainToolbarToCenterX(bool constrained) { - bool invokeResult = QMetaObject::invokeMethod(_desktop, "setConstrainToolbarToCenterX", Q_ARG(QVariant, constrained)); + bool invokeResult = _desktop && QMetaObject::invokeMethod(_desktop, "setConstrainToolbarToCenterX", Q_ARG(QVariant, constrained)); if (!invokeResult) { qWarning() << "Failed to set toolbar constraint"; } @@ -575,17 +581,17 @@ QQuickItem* OffscreenUi::createInputDialog(const Icon icon, const QString& title TabletProxy* tablet = dynamic_cast(tabletScriptingInterface->getTablet("com.highfidelity.interface.tablet.system")); bool invokeResult; - if (tablet->getToolbarMode()) { + if (tablet->getToolbarMode() && _desktop) { invokeResult = QMetaObject::invokeMethod(_desktop, "inputDialog", Q_RETURN_ARG(QVariant, result), Q_ARG(QVariant, QVariant::fromValue(map))); - } else { - QQuickItem* tabletRoot = tablet->getTabletRoot(); + } else if (QQuickItem* tabletRoot = tablet->getTabletRoot()) { invokeResult = QMetaObject::invokeMethod(tabletRoot, "inputDialog", Q_RETURN_ARG(QVariant, result), Q_ARG(QVariant, QVariant::fromValue(map))); emit tabletScriptingInterface->tabletNotification(); } + if (!invokeResult) { qWarning() << "Failed to create message box"; return nullptr; @@ -603,12 +609,11 @@ QQuickItem* OffscreenUi::createCustomInputDialog(const Icon icon, const QString& TabletProxy* tablet = dynamic_cast(tabletScriptingInterface->getTablet("com.highfidelity.interface.tablet.system")); bool invokeResult; - if (tablet->getToolbarMode()) { + if (tablet->getToolbarMode() && _desktop) { invokeResult = QMetaObject::invokeMethod(_desktop, "inputDialog", Q_RETURN_ARG(QVariant, result), Q_ARG(QVariant, QVariant::fromValue(map))); - } else { - QQuickItem* tabletRoot = tablet->getTabletRoot(); + } else if (QQuickItem* tabletRoot = tablet->getTabletRoot()) { invokeResult = QMetaObject::invokeMethod(tabletRoot, "inputDialog", Q_RETURN_ARG(QVariant, result), Q_ARG(QVariant, QVariant::fromValue(map))); @@ -718,7 +723,7 @@ QObject* OffscreenUi::getRootMenu() { } void OffscreenUi::unfocusWindows() { - bool invokeResult = QMetaObject::invokeMethod(_desktop, "unfocusWindows"); + bool invokeResult = _desktop && QMetaObject::invokeMethod(_desktop, "unfocusWindows"); Q_ASSERT(invokeResult); } @@ -752,12 +757,11 @@ QString OffscreenUi::fileDialog(const QVariantMap& properties) { bool invokeResult; auto tabletScriptingInterface = DependencyManager::get(); TabletProxy* tablet = dynamic_cast(tabletScriptingInterface->getTablet("com.highfidelity.interface.tablet.system")); - if (tablet->getToolbarMode()) { + if (tablet->getToolbarMode() && _desktop) { invokeResult = QMetaObject::invokeMethod(_desktop, "fileDialog", Q_RETURN_ARG(QVariant, buildDialogResult), Q_ARG(QVariant, QVariant::fromValue(properties))); - } else { - QQuickItem* tabletRoot = tablet->getTabletRoot(); + } else if (QQuickItem* tabletRoot = tablet->getTabletRoot()) { invokeResult = QMetaObject::invokeMethod(tabletRoot, "fileDialog", Q_RETURN_ARG(QVariant, buildDialogResult), Q_ARG(QVariant, QVariant::fromValue(properties))); @@ -782,12 +786,11 @@ ModalDialogListener* OffscreenUi::fileDialogAsync(const QVariantMap& properties) bool invokeResult; auto tabletScriptingInterface = DependencyManager::get(); TabletProxy* tablet = dynamic_cast(tabletScriptingInterface->getTablet("com.highfidelity.interface.tablet.system")); - if (tablet->getToolbarMode()) { + if (tablet->getToolbarMode() && _desktop) { invokeResult = QMetaObject::invokeMethod(_desktop, "fileDialog", Q_RETURN_ARG(QVariant, buildDialogResult), Q_ARG(QVariant, QVariant::fromValue(properties))); - } else { - QQuickItem* tabletRoot = tablet->getTabletRoot(); + } else if (QQuickItem* tabletRoot = tablet->getTabletRoot()) { invokeResult = QMetaObject::invokeMethod(tabletRoot, "fileDialog", Q_RETURN_ARG(QVariant, buildDialogResult), Q_ARG(QVariant, QVariant::fromValue(properties))); @@ -1003,12 +1006,11 @@ QString OffscreenUi::assetDialog(const QVariantMap& properties) { bool invokeResult; auto tabletScriptingInterface = DependencyManager::get(); TabletProxy* tablet = dynamic_cast(tabletScriptingInterface->getTablet("com.highfidelity.interface.tablet.system")); - if (tablet->getToolbarMode()) { + if (tablet->getToolbarMode() && _desktop) { invokeResult = QMetaObject::invokeMethod(_desktop, "assetDialog", Q_RETURN_ARG(QVariant, buildDialogResult), Q_ARG(QVariant, QVariant::fromValue(properties))); - } else { - QQuickItem* tabletRoot = tablet->getTabletRoot(); + } else if (QQuickItem* tabletRoot = tablet->getTabletRoot()) { invokeResult = QMetaObject::invokeMethod(tabletRoot, "assetDialog", Q_RETURN_ARG(QVariant, buildDialogResult), Q_ARG(QVariant, QVariant::fromValue(properties))); @@ -1034,12 +1036,11 @@ ModalDialogListener *OffscreenUi::assetDialogAsync(const QVariantMap& properties bool invokeResult; auto tabletScriptingInterface = DependencyManager::get(); TabletProxy* tablet = dynamic_cast(tabletScriptingInterface->getTablet("com.highfidelity.interface.tablet.system")); - if (tablet->getToolbarMode()) { + if (tablet->getToolbarMode() && _desktop) { invokeResult = QMetaObject::invokeMethod(_desktop, "assetDialog", Q_RETURN_ARG(QVariant, buildDialogResult), Q_ARG(QVariant, QVariant::fromValue(properties))); - } else { - QQuickItem* tabletRoot = tablet->getTabletRoot(); + } else if (QQuickItem* tabletRoot = tablet->getTabletRoot()) { invokeResult = QMetaObject::invokeMethod(tabletRoot, "assetDialog", Q_RETURN_ARG(QVariant, buildDialogResult), Q_ARG(QVariant, QVariant::fromValue(properties))); diff --git a/libraries/ui/src/ui/TabletScriptingInterface.cpp b/libraries/ui/src/ui/TabletScriptingInterface.cpp index 040bb750d0..c09888758c 100644 --- a/libraries/ui/src/ui/TabletScriptingInterface.cpp +++ b/libraries/ui/src/ui/TabletScriptingInterface.cpp @@ -385,9 +385,11 @@ void TabletProxy::setToolbarMode(bool toolbarMode) { connect(tabletRootWindow, &QmlWindowClass::fromQml, this, &TabletProxy::fromQml); #endif } else { +#if !defined(DISABLE_QML) if (_currentPathLoaded != TABLET_HOME_SOURCE_URL) { loadHomeScreen(true); } +#endif //check if running scripts window opened and save it for reopen in Tablet if (offscreenUi->isVisible("RunningScripts")) { offscreenUi->hide("RunningScripts"); From 407d436ed0d2a93e55611636a10f8b66d706db3d Mon Sep 17 00:00:00 2001 From: Kalila L Date: Mon, 18 Jan 2021 19:56:12 -0500 Subject: [PATCH 088/152] Add appreciate app as default app. --- scripts/defaultScripts.js | 3 +- scripts/system/appreciate/README.md | 40 + scripts/system/appreciate/appreciate.jpg | Bin 0 -> 469853 bytes scripts/system/appreciate/appreciate_app.js | 1138 ++++++++++ .../resources/animations/Cheering.fbx | Bin 0 -> 351664 bytes .../resources/animations/Clapping.fbx | Bin 0 -> 293728 bytes .../appreciate/resources/appreciate_ui.html | 84 + .../system/appreciate/resources/css/style.css | 284 +++ .../resources/images/icons/appreciate-a.svg | 89 + .../resources/images/icons/appreciate-i.svg | 89 + .../resources/images/loadingSpinner.svg | 1 + .../appreciate/resources/js/appreciate_ui.js | 188 ++ .../system/appreciate/resources/js/jscolor.js | 1855 +++++++++++++++++ .../appreciate/resources/sounds/claps/01.wav | Bin 0 -> 24022 bytes .../appreciate/resources/sounds/claps/02.wav | Bin 0 -> 20300 bytes .../appreciate/resources/sounds/claps/03.wav | Bin 0 -> 22392 bytes .../appreciate/resources/sounds/claps/04.wav | Bin 0 -> 18632 bytes .../appreciate/resources/sounds/claps/05.wav | Bin 0 -> 20234 bytes .../appreciate/resources/sounds/claps/06.wav | Bin 0 -> 21408 bytes .../appreciate/resources/sounds/claps/07.wav | Bin 0 -> 22560 bytes .../appreciate/resources/sounds/claps/08.wav | Bin 0 -> 23708 bytes .../appreciate/resources/sounds/claps/09.wav | Bin 0 -> 17916 bytes .../appreciate/resources/sounds/claps/10.wav | Bin 0 -> 21432 bytes .../appreciate/resources/sounds/claps/11.wav | Bin 0 -> 20860 bytes .../appreciate/resources/sounds/claps/12.wav | Bin 0 -> 20426 bytes .../appreciate/resources/sounds/claps/13.wav | Bin 0 -> 23126 bytes .../appreciate/resources/sounds/claps/14.wav | Bin 0 -> 23660 bytes .../appreciate/resources/sounds/claps/15.wav | Bin 0 -> 21570 bytes .../appreciate/resources/sounds/claps/16.wav | Bin 0 -> 22936 bytes .../resources/sounds/whistles/01.wav | Bin 0 -> 37336 bytes .../resources/sounds/whistles/02.wav | Bin 0 -> 78470 bytes .../resources/sounds/whistles/03.wav | Bin 0 -> 29228 bytes .../resources/sounds/whistles/04.wav | Bin 0 -> 21548 bytes .../resources/sounds/whistles/05.wav | Bin 0 -> 23084 bytes .../resources/sounds/whistles/06.wav | Bin 0 -> 24622 bytes .../resources/sounds/whistles/07.wav | Bin 0 -> 47248 bytes .../resources/sounds/whistles/08.wav | Bin 0 -> 43168 bytes .../resources/sounds/whistles/09.wav | Bin 0 -> 49196 bytes .../resources/sounds/whistles/10.wav | Bin 0 -> 54802 bytes .../resources/sounds/whistles/11.wav | Bin 0 -> 168526 bytes .../resources/sounds/whistles/12.wav | Bin 0 -> 181312 bytes .../resources/sounds/whistles/13.wav | Bin 0 -> 107052 bytes .../resources/sounds/whistles/14.wav | Bin 0 -> 113754 bytes .../resources/sounds/whistles/15.wav | Bin 0 -> 178220 bytes .../resources/sounds/whistles/16.wav | Bin 0 -> 136242 bytes .../resources/sounds/whistles/17.wav | Bin 0 -> 140066 bytes 46 files changed, 3770 insertions(+), 1 deletion(-) create mode 100644 scripts/system/appreciate/README.md create mode 100644 scripts/system/appreciate/appreciate.jpg create mode 100644 scripts/system/appreciate/appreciate_app.js create mode 100644 scripts/system/appreciate/resources/animations/Cheering.fbx create mode 100644 scripts/system/appreciate/resources/animations/Clapping.fbx create mode 100644 scripts/system/appreciate/resources/appreciate_ui.html create mode 100644 scripts/system/appreciate/resources/css/style.css create mode 100644 scripts/system/appreciate/resources/images/icons/appreciate-a.svg create mode 100644 scripts/system/appreciate/resources/images/icons/appreciate-i.svg create mode 100644 scripts/system/appreciate/resources/images/loadingSpinner.svg create mode 100644 scripts/system/appreciate/resources/js/appreciate_ui.js create mode 100644 scripts/system/appreciate/resources/js/jscolor.js create mode 100644 scripts/system/appreciate/resources/sounds/claps/01.wav create mode 100644 scripts/system/appreciate/resources/sounds/claps/02.wav create mode 100644 scripts/system/appreciate/resources/sounds/claps/03.wav create mode 100644 scripts/system/appreciate/resources/sounds/claps/04.wav create mode 100644 scripts/system/appreciate/resources/sounds/claps/05.wav create mode 100644 scripts/system/appreciate/resources/sounds/claps/06.wav create mode 100644 scripts/system/appreciate/resources/sounds/claps/07.wav create mode 100644 scripts/system/appreciate/resources/sounds/claps/08.wav create mode 100644 scripts/system/appreciate/resources/sounds/claps/09.wav create mode 100644 scripts/system/appreciate/resources/sounds/claps/10.wav create mode 100644 scripts/system/appreciate/resources/sounds/claps/11.wav create mode 100644 scripts/system/appreciate/resources/sounds/claps/12.wav create mode 100644 scripts/system/appreciate/resources/sounds/claps/13.wav create mode 100644 scripts/system/appreciate/resources/sounds/claps/14.wav create mode 100644 scripts/system/appreciate/resources/sounds/claps/15.wav create mode 100644 scripts/system/appreciate/resources/sounds/claps/16.wav create mode 100644 scripts/system/appreciate/resources/sounds/whistles/01.wav create mode 100644 scripts/system/appreciate/resources/sounds/whistles/02.wav create mode 100644 scripts/system/appreciate/resources/sounds/whistles/03.wav create mode 100644 scripts/system/appreciate/resources/sounds/whistles/04.wav create mode 100644 scripts/system/appreciate/resources/sounds/whistles/05.wav create mode 100644 scripts/system/appreciate/resources/sounds/whistles/06.wav create mode 100644 scripts/system/appreciate/resources/sounds/whistles/07.wav create mode 100644 scripts/system/appreciate/resources/sounds/whistles/08.wav create mode 100644 scripts/system/appreciate/resources/sounds/whistles/09.wav create mode 100644 scripts/system/appreciate/resources/sounds/whistles/10.wav create mode 100644 scripts/system/appreciate/resources/sounds/whistles/11.wav create mode 100644 scripts/system/appreciate/resources/sounds/whistles/12.wav create mode 100644 scripts/system/appreciate/resources/sounds/whistles/13.wav create mode 100644 scripts/system/appreciate/resources/sounds/whistles/14.wav create mode 100644 scripts/system/appreciate/resources/sounds/whistles/15.wav create mode 100644 scripts/system/appreciate/resources/sounds/whistles/16.wav create mode 100644 scripts/system/appreciate/resources/sounds/whistles/17.wav diff --git a/scripts/defaultScripts.js b/scripts/defaultScripts.js index 71fb644528..b27008e255 100644 --- a/scripts/defaultScripts.js +++ b/scripts/defaultScripts.js @@ -36,7 +36,8 @@ var DEFAULT_SCRIPTS_COMBINED = [ "system/inspect.js", "system/keyboardShortcuts/keyboardShortcuts.js", "system/checkForUpdates.js", - "system/onFirstRun.js" + "system/onFirstRun.js", + "system/appreciate/appreciate_app.js" ]; var DEFAULT_SCRIPTS_SEPARATE = [ "system/controllers/controllerScripts.js", diff --git a/scripts/system/appreciate/README.md b/scripts/system/appreciate/README.md new file mode 100644 index 0000000000..b3f9a3649b --- /dev/null +++ b/scripts/system/appreciate/README.md @@ -0,0 +1,40 @@ +# Appreciate + +## Description + +Show someone else that you like what they're doing. Open the app to see usage instructions and some options! + +## Releases + +### v1.5 | [48d8247](https://github.com/highfidelity/hifi-content/commit/48d8247) + +- Fixed an issue where Appreciate app users wearing avatars without a specific joint wouldn't hear the Appreciate sound or see the Appreciation Dodecahedron + +### 2019-03-08_11-37-00 | Marketplace v1.4 | [93bf464](https://github.com/highfidelity/hifi-content/commit/93bf464) + +- Fixed an issue where a user could press the "Z" key to appreciate while the Appreciate UI was focused even if the Appreciate switch was turned off +- Fixed an issue where Appreciation Intensity decayed too quickly after switching from HMD mode to Desktop mode + +### 2019-02-22_10-49-00 | Marketplace v1.3 | [51704b5](https://github.com/highfidelity/hifi-content/commit/51704b5) + +- Optimize app +- Add option to not show Appreciation Dodecahedron while Appreciating +- Forward Z keypresses to the Appreciate script that the user makes when the App's HTML UI is focused + +### 2019-02-19_13-09-00 | Marketplace v1.2 | [0e2fa82](https://github.com/highfidelity/hifi-content/commit/0e2fa82) + +- Introduced functionality to stop running versions of Appreciate when those versions are baked into the client installation AND other versions of Appreciate are running + +### 2019-02-15_17-03-00 | Marketplace v1.1 | [83f8927](https://github.com/highfidelity/hifi-content/commit/83f8927) + +- Ensure that old Appreciation Dodecahedrons will be deleted in the event of a client crashing while Appreciating + +### 2019-02-14_10-00-00 | Marketplace v1.0 | [658ed4e](https://github.com/highfidelity/hifi-content/commit/658ed4e) + +- Initial Release + +## Project Links +[Trello Card](https://trello.com/c/2iMbEgdw/36-appreciation-app) + +## Known issues +- N/A diff --git a/scripts/system/appreciate/appreciate.jpg b/scripts/system/appreciate/appreciate.jpg new file mode 100644 index 0000000000000000000000000000000000000000..615991743ba2664a49a508cc3ee8a66610ca1994 GIT binary patch literal 469853 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%0D;Hs{a8}A_n~%?c^p0-^vi@^->axUo8mUwg7-Ip< z;7?b6s{54_)jIRRQ)}>5%IfmDkSFBY`mgm(Tu^2Kp^XUPym4zWaGbN2f+_}=nUXUy zz9b=!i#=Qqyes`4NjIB0AP-_@Rw?@)cs`bDa^fF@*V;!Qi^sVB``r>{``~FO(;eq) zc++&`@WoU8jMeI43}4{nF0Wt7MO&YuvRI7;FKi@zm5fXM?8jx& zXFy${aa5UY)L1~!KQw{w?SE61*+*@mhn2KW((2Thd0j~ZDhBId+m@JAUzsT_w&AeX zywP)FEvX;ghKz=C(`&ZiPb0AR8Qn>yETe++rIvl0k|J6(WPN&I)rl{rY8ed=hJV;^ z6-P0?KzlM+0yY5de*3v7+IBsWZF@eVRe_wh{sdwDIle*X5h^GtRNL5CP_EDe%2$fI z9dj!7`h3eNpdraw<-l@eEYKatvz{KocVRS8a(U~Jji#fZoI9*rn>+*jJ0p5^TG4s( zb+=RC&7w(HN;3uSttNca`P;KLAodt-m=K`}?IGfz%GM)7B~-#8t&ZKdEdM<{DmW zC+Wfdra`;BZg&~}UPBj?Yq4#*(}U1K2C%t~+`G}|8t1p4WTMP_^K+I`G!AV}#BEOL z+=_~^vJTMMJ4;GEW23BA?Tym88lIEWdXn73QqPL){TR^jRNTVzk$cm*+>V&cLCxZx z?q)$)QV&9h)=Gy+BVnYJlT>47l#`6HPctPt6IbJP-k*z_fPtH2U zVD7E*-**GeIf9`I_%=;v@dgk*SnsQ*!*W;h8rRxyHLmsP zQ?uxuU;2pBUvkgAcKrQd)TTz;i(alq>9eecg4l7lm|1DoR20*RHYrj~!31{G`GFg( z$d4uYir%`wCM5R<^%fl|MnMN*bsLiC^7QuBCjQ2ksbtOG%NcdwfFcmfic zP0q^HR~gWA51rCSN0OJA#O5&P@bk=poW~6tn2~(0B^SlIqqXSC`nTy)K5EM9R)39o z{LWMIEscMjANjt2KK}p_E8;tq!pC0WBb)3_pnfhh=PPIyWLhkPS$rCa}ox;mn@#CqU+8U1$nkpLu6`M%6QZ&EwBm z-A2Zxt!BN)H~9|7nI3F&S@?GOd%O!5i9T3+q@U}|G6_haOU-+S^d70rhb~`qa_?WKyTA|>fwub%YsN<-hfgs7_ZP z#~uq$l(_gK)p`BsZ?tT=?5bPc-zqiZz`*LgNBVnhuesp9eqQjI=l3uUkkg65<6RBr zbLmnNQf#JUZc_UR+$$rdS*zCgd(M0D-JYp)Ws=Ls^fC69&eOj8>uuaS7czPozed|s zQn)L)5`G^!Xq`=){-(-Dz8?Uzn8;A|Uz9eac7$&|wyfR$^OqbmW>;A1oQPrfJiEJJ z%k&8TckBNE=&dqgW1R@j=K`9BM)sSvmgk!G9llD)>DF~UPbKd#e;?U%CCrvf+W!DU z9$^J)QkCl|cPdv&J$1J$r)cgIQr}W+Di<*|gs+F*S`9;%I;$-oixGub_ZE~rSLF?( z$`QZIYR}(p`EjDn`c%v79ZQi4FS+I1yM94Y%^hyWfzuLaq=jWAg3cZ>+jmIzi2ErU zO=E1Vb0v;Q=K4O%pE}F!S^T`rYs-2}`BEoLaLAP@YH~yBH&T|Pa!qtD;oUogkkHw( zn(mF(KirDtm-T*dX0nm^uoy*xq$ql_9~)AR&^Mn&Qr+*lajMUOnbkU<^zf?to?kys zA-}411~*6GXJ;}8f;1F;+aqCG_azDKCb|0&cO^rL*llIGo|WeNjA-heL6Oz@$=Tea zg~<}sN*nsEHa(Olu_I-4FqV}?k?8i)f>Dl0um<}!bW*vKDGrw^d3OH2)J?GJRNfaJ zQs!CvTIs&V!RuAM6%GByh}D%h{XuQu=KPmyG9=RwaPSh-XhbY_Ijbc*5{BDse1HL5 z`gjyu^Q9=N8OI6yBZ2DM-h&xHzrF(mKyaP_5e*)wM&>dTz;W zp`~ZV`fx)^hHiF^ho+>~XzLX^Q%PhsZf+J68rf6Q6g$_5^;>LvOIKhNlDkD#GWO+L ziM9B#%T;BOfD_124jo5_ttg8?JZrT)(!p3xa!X{>OD?dnd*K^u?&|yd77*v z4rv?=jvS=Kf4ya(?T*riun$6%Jp!)m?Ee50@;V>K`e*(${{ZD*ACMT9@3!|nCbTu3 zX0l^Zmh#(Wq$$^3AuTqMa-|)B0oO*cRD-{hysc|S<58H(vKOf`CMM3K%4zmWJex-jaGvZNiaMSss(MwHq-|j!WC# zB*Qiou4Im5!^)0VNY?ouew>vvr*Z2Z_V(iP#@_8G=RFk#{nECp#LViQT03ahIXsug zz&s(rjRrF?p|F_oVXPn>MJB`Xtt&CSU`JgoOE@`|3fOB#a zX_As}?xz|UY?QMS)j+>$Mn$qpXhXwI{-taY0amN08(=XJAuQ>epWH0AvcxEvX`|K!~&v4#AGOY3GM4O znY-R<`c_8|*80~o`EY+v9{&K)dK3Z@rL2UdBI;2#01leZPNz2)To5F4YnqN_l>V91 zZxmw?N^&^_n-|F5grBk2dVH0ywzH!bncZ}bmaKhq`@P?&J_Z$jinq)*xq_EY>1>{* z$+3yV#_y!P?Wp?=r=?0g08?G+DzY29nA=WLbVxchCoi#D9~vXYK#`Gr1CYrP>o~5V z)RE9D3v;}8A93g1SFB5L>6BJW;>E+OW-Bg8km6Wnpj7LsHcC=9l1Zo|SAmlR=IF6t zoy@*$NX;rn4^29#_>pwWo|~m|ItWSVN6%XuZMudpGq~wpDOmcYjJ@Blf2d*uI}OFu zdTQ3AYnUmt&XLS&tb=&`RBrWV#rMv}+DA&1dIco!DB{Z7jpS{uQglJ9p}BX6(NKb8 zAW6x(2fk#Kk;bFa6V#r{#@z2U;lSYfr&^Zb(P19Xn7u97Y#viowV4{mQ3U~J)%D%Wv*rr3ADfbt^y$wkRH+8-l`g^(`eJB`M)Tb|oNK04p)Gla{*r9rYfu&HMccq<;%G3K39*%?p)2!JUc$fKAO|9 zWkWn!*Yy6E8#v1udl1fd1xJZVDpA@=+I;n4-8Eg(`GeCrT}Lqxad6ck#Sz{wavM)t zmCz}Yyp|*vcTu*rNznx!kL6Y$PKM>=5}dA3Scep!x@`WUPe|)En|plT5jidQUX<{L z3)(tivugy{4Zu|`Mhltc!rM)$$5xh_Y!bH=Y?Ohtl1(CY2-UhQ#&=b7VirHWg{P97 zgt2g`hxjQypKIo=3p-viIvt-y<8#&X2kf3xDVvgH<} zDv?x0Gf>KulqChn7C=HkxhJqw9K_}h#+crl0V#rJ%|4+EqydU=qHY$T!2uO(iyit?z{3!9lsGnU=;TbHwVb_!6D&?>t#oR6K} z%aKJxScuPS-9LikYrp(LVsB{7kgE~1)>h$Gt?k>-16OU*r*j!#y*LcEdzku%G2S&5 zV-*meRkqLG5!%1eS0QRKIt{kM-L4gVtZ!DA98#QdWyck@N+#r*msxq;D&b;gW8s;)*%uXd9= zfo`)+)H9lT?gb{HIitSmA#Afp_TMVPb1ePrLuwud3^>FqIAq7sJ6ly(3G z$)iv!h5jav)Kf_Jd^^fYw>YE}r_!raC3P&>1ox1RZ7(rb6O`JPMU?qwDo*|-6(5jP zFL@QjqdvK6JZdT`E>JDM|x;<2ygys?5E2@fzFplW;QBdX|JFVWW8inQ`3jpj=N1}~juAWR*&cfPH zm{6{YufEcq%v2|D-b6z0zUc;}Tb8(!M}IiwCR?7;xH$>ocM`(KUv``P)b+iR;!h5* zazDh&431lASqAFGhR<3QQa(dcuAw5_e;~TJrdTENgHOG48ONfY#c>am8j?LjwHB@Z zNhS9rCgt)~#HB_SSS<7<#9QSD=&57WR}$U7$s+Sj32B_C)e%yqw!?D3+#6og<{(tj z-bL{*TkBS({9dskGfU>+1sRx$45dEO%V&n(P%Tp{waC2<(wExPEQ*LaQED}k^G}Fr zO%SHkq!F|bZMKIdFEmm>)w-7)q?U4ytti~vhrCU?tZz}v9MJ{aQJ371xyJKnBGI-_ z9EnLEU9wPo_q{_aF@45$?vrj=RSpg>nEF>BP=}vX2b|g6x{?wP?F)~VtIKaL23_uv zazATKT}E;g)OWC@w<)8!ZKx=EL8|hTj%drer3@sRDhyzD-)$#2kDPe-bA9yfW4Xkc z81|n+n|Y+Z+WoXCAcN*KM*RsbZroi{pxoyQYa#~6?JY^CiEwXrwtLD^R!)Edm% z+x|m1;Vf6QW;F*WwH7Ol=uM2QV0I~>d&_pC^i|t?*vQ`7b*p!H(f5s;&>oJpGW#W$ zP;9o;3RDQ_v8mk6E@}2FvfwP~5SUKHAQRp<1x!OUc`7`@ztv&72$slUo8vyzq!j{UgZRGO$wX&z?awJ2^RwG38N z*n6{z91B0Ft$^RFeP> zKP0cych~aNZB z)I}<|KbjJH51fg7vx(K#Wy55%m;%T>05}HkF7CRkdct_b=X#GtQu?i6`#wPqfQL|r zT2OVT08$)D1tcBB5n0Wgqi!ybGLmjGCPF)~=EX#)ucW2c7M>)Kdhbq!=NwTrjohuh zQFLIR%w9@L#P|7~EZXK{Mb#r3J!e@RXz5Z%q;}T5jq;WcGq~xUemB0E;V)wc)yFp> zNh!ARYP95T^HFuv`OMCh$fG5Pl&H@(M|j@ShZFWzoy1dI(^O+FX}Gk>RWQ@g9LL3L zXu+M3b8Ms;SmhsU^_xFgKPar7#@|LOBZ=yLCD{6-jD6lCk=^uL$yHp8ZDS|Q-cUf* ztv!{*ArLhR1<4+(a&7fj)UKoHtJ`h+SV-ymPhW7PE@K`Kiv0kqBa54gn*0oeRYaK; zMK8x#;ZjJgRWr1W+MsY;Zo3JXGuZX|+-0kVM`h^KQ$tCS30PV-#n13Ft$yc3sf1mm&_ zHWEPks{L{D`D%{t%KM^neRHI&Zrfff;=VsDh^05Y5pZ{k&QduwFi+<{Cy*PHt8}zZ z5{s`bi)}kCytsfqQRl6FruSFVEY9nqbmO{loy zGMOA6MmAFwB~YhCR}(L%<|CvX#8T@*N{uw}PcZxCmoZ@L>{qYD8#xF8lY`s4jU8z} zC1Y;v=yh2f4_WDd)4fsqU$eQ2%~hpwdb@O)QqtiCq$lZ#Z9uLxt zMV8I%Ix1adl`-JuA2Q@ox#M9vagWV zF7C>Ms>t)+xzhgtr-{sG9%O#ypL+SPa8v5dD~;AT zIk-HcIGB>3x^#O@xILApv>MFY?m2F!AJck_w$oEyYqc2B)mmF6q;s>dStj^jh@ueX zy;mDP%G20IZ>x#ok509IGfGj#F+JUR>2;6RI$WvO@-z;kY4=uFg~*h*my9-!8|-in zwBONDU4po%%6t8scQ9~y@O_W<;$$jh9A2lwy%I`OI~A8^%CWju+k;^Ttz z^LtmPwz*Y=qReY^BSOs3dXi2d@K*`KT*b;GW2}?2&Nmw0wRK5V9+kG;tI$)9PuTdO z0mD*iCe$hPcBshc%|Qb@jad#xQ1^x}WV+Gzkgmcgl(i~6hTMd1MZ#G#CRmJyA6x0B zC$f~x#b($c<`uMAV#`8@ST_c+ZfdhEI397hw>_QOR}|`>xtQtZrhtDy>X}&Zl`j=8 z?_wm8u}v%Llh&Qax;q<{IHr0A&w8)HO?me*vnUqbQmdtjNVs9L)AasU4rdtgk2V8| zahCz=J3;ItVX0~+s^IcwO>~Zb70hiPA0gc#*!eb;&Qb!sV223daSHzct95hN;_S~4 z6mVPHGTL4GUwURexu>9{Xf0DS780dnWD@owNgmrOJG`mfYoW1yO(`R|+V2(UDXu=p z>FgT!8}#&5xJ;c)nF3_YPC_P51Eq;|{U4|?Jk`)>ep@JY zITlqLHw)}NYbkHb2U#{B^ZFH7zsU+4+?W}H9*r~@S=|Kjxb#JRNnI@wtT0;Scw_x*EGr7F?7bzUFN1N|&z3uHW%O&C4@n$@=#;l*M^)^R8GT=&COeo~t zEij#kNb_&)t@uSjQE)qJFpapVMsjk6HOyVO?@z?x zFWr{%?i_Gk$j5%a)$;Y$rkk9SN?1|u@$s**rV;FqDc*Z)ZV^yaM|on>wG{~Dy(%OU zi*2FEdXTBoI$t5H^Z5J@HM_kvU^wlrmYN$@wRQnfPU4EI8*=i3a+XNRwigkH(Hd$t zJ%uJFFABxpeO4a8y4IuCP06la?bmvKCj+>@J=NOrZv;3<|qZZ z^;&FuOHt|qqm{}kvMaY#6O^)9nK#oKZyTgAFtC{P2I9bO%W}XKt9q8B)=t{zFW+}1 zQ_nZs*={GP`7eMG^S_vfSm!?p#ym~~47DYq532j)Vw~~~!nSs{xoVtvoxe-i{{T%2 zKe^}f@)+Lls8yXtl9_tJ;U{PEkZ|~>RP@=)2yFm$?CjVOQ7^z z9TBJEVWI%Hk^-m7wTsUy+EMyDD+hJE*87h->fKH5Ctu-NA%*AnG1Af;(D+xr@xTsx zN)NJ=v@?FQy+h%`mXa=|DMr8mDHO?5G6Bj?Ts5KaX?|N_S?ropx$f^Rjp3krhfi6ojppl9qR8Po z_g3diM1IxneZL~Vni~EtgTXD-6uX+73NcX$`rR%leU$vWsk>WR-Cjgp6Q*>5OL@7|^sLTruk~(PA02YsrlgDiq|0lx&ox zBIMR=6L=$vv1(Ujqa0fRu4wZPPP)q$qZKiLfTA(+j?Oc`zh;Ex&=da{)JXl-*4k$ zI;G^heK?r`!(j3F9BfQhE-GTdhLDCD9h=ELB%P$1#k+mU)t+&?-pcfxr12Y$Y4a8~ zi^nPyB_-WMJp@E+e{z$vyioavO0jLwCFW6mlJJtyZ?}zZdX9074r|ma-Cri>XA|06J?wRZdYh@Iaf*erl^I zeJ^K)-MRQ4f7H6Pw+|c_1?j|9$$C5}?@N~IW5$k>r=D4|QjxrqP(v4ipK1X-J0#+lN%ohy!O z9g2<{NC3Ye?QzxgsYj&NHT~0@t2izH08y3sR#|Xef`!iQw5iut8*Q*uwW!ztHx2kzsD zl1VrAj{DW8d7Ezg6k2;rWi=%B;9}z!oHp+q+=kQklzIh6E40jl_TfQllcEd#6U&@V zkYO(+0&ZEsX%o~oje<1e^WFO_Ar(rviKX58F4W^voC{I5F5yat8%Y9}(Q zxFvNiufpkePrbd~%TW86Es$JSm#B7{n$?#-0{+XV&h|Mj&}!8h(>JOdQXY5RG1vRN zb7b)T@%qNJ?b}hv>h`->*i?e+Xc-_th3A)nrD}p?Mk#Qrc5{l`tzI?7X4AY z)HgROIh413N)}ht{DM17^79L((3cosNt^|jJ<-Iz-X4UHC1%~;xnOd8-nlEdEEiz6 zOk#R=b=7`l42O94+yFP&b>5ShH<}@}4!pr>{w7lJ$WBeiyR>g(`p0mq7VNoafvvUa zbGeMLLl>Xdnu9&wG-MbsmHz-WXxnFMx1XA?TY`>9MYh^owf3xgL`QRTayQfYg|29! z!|6QEb-;{t1-OlYPm#ib`^K9qsbZMqnPNm2-yJa(&RpuW< zJvQ^u?uhObGiSiZBfXs|xXAlUP!#y5EQ##cmCv;e)>oPMn7nAl#$5M?#IM+I)4$}a zQL)<1dp#Zh033$jE3fq)NUaUNATYh1(?Z7Iw06~qMkv>_v$t<0>k&^Eq^!9i)x6=} zwJ50iO-sx!bI+~Cam8>n(wtG;l#7}*iOm%_?FFeaAqs08rdwb6j(UU3w{0?el(S`9 z-9`}2i_CW@9x6(*c@TtsX4)4%llm&Wx9MbN-RtpRYN)k=%PlVqS=g$aue9o~@(T*D zE&QHFZQi|cvwSTmk?V0^LAVZe>?0pLlwy zH3dlEK1wx-sQcZMzL!vIBf1o7Vay}C6l!6t`M`m_KzZrfh1Aanx*Oa`^NK1euVEo_ zp*QWzZ9Y{2^wZQ|VJfpX!Ia9&;#2KpnHK*5j8EyM(EA51tp5PI$x6>)l5DK2AoX{n z^wRRB*gb5ne{_MUFjgP$W|| z%4AvRX^bXGJTq~PKiW_)=^JWj?&P?aEpt2lC@)AR{r#Qm;Iqt zrL}wvi`^D$?R6Xo@5PwfU5ff&ZGOtoK?l)QrC8=AXNl=(j=J+yL^gN+{7p-Nc{X|&Q_V+F&{kK%PYbS?b%IY3VKG<>m1itwoTtj=> zzfe&6MP9ePi_Zh0+V%KL3E}P;e5Ma4hj_=y!Ez&ma8h<3A>3-pl4j&CsVb*Z*ns0J zORTL;ID>S!lfs~T2&Yt$TpbNL%`Dy|w;w6~_l7Jkvu9GC#dP`V8O(YTi;{^P$;T#0*YJS3F1`aamn`!2mG;d2$+$MpuC zL!s?>NOS1Dn@?ur^5C*KHr#4VDs3WM-4MEGZQ5T_>JDnLF!U> zgIU*YIOcMjt)#5FNqLu!4$6qFs7PwP4};awOF0oOryTo#`?zx+v%8G;PbeRO9i}!B2r|s zyK$r&EeiW89R{;5LBlhR-EC)K(qGzL)Yw0wn54?eV-d_=O~cP6{Jxz+VPH6(u#ddgi4{1gA+jiqw?ngGHHT=cphA&*iE`XR>$mu@kkpq9~I671E zj*7Xq-e|$(ZuG9U?0quEKJNe=&*`kLn#jM4%f(b_Or3!HD^Eg_dO@v)a;m3yZu**1 zi>hUeB}ge!2}+Z-DjUHRRGU=-qm_K%OX5D8)sk%RvN73pn+5a)I8RSeK6$; zbG=`qDgAcy;=6o1`+{qPECLO|+-owlINH!<`Kiiyn$j||SkxjWql}-scGgUUjmTeb zQRwnj-L~sa4uV6XPl@$f_uPg^MXF9d)Uw?iI@7QZ`(U z>u)lm%dIFWr&4U7p}2!jOp#BBYVwbotm=juz~|jdS@siVA5pNBk<_Kdxzm{gK$%Dt>EspXQ>>#ZUL7%c|>sz$km#1FZ-$DRg{2%{{Sah z-n4=B4^LN;wszaSN{=(pIyYJ8tuud8_Wr$~+1(ABJ8Isebxgcz-0n+DW+LXXFBWA) zRqgdwgY6+hq!C21RAO98X~tNlWIse}3}(2&v6g_K+u#J`Ad_{n??^qJN2ai^+HiE> zdEZmmOKm!4o=?+>BVTAdX1u~XjGUh8N-nH)@GiDpw!`E-BA0EscHeORlht0@Rn9Lp z>BPrQqth8ZEti*t%f~EBimPAhtvw4#=>%=9xZJ9$JsRHOO({jyJegxG)3uN01h*sk zqxe(IX#GPY{o4AtaWht}j4fZ~sGq7%?xR%qc6BPO%x<^SdFxz$_3d9Y84gEj=GNPY z4z%h>S_ryIPVh%jtYtQi3Kv{mRt*48Ik{N98^$Zzc5*s^eS&>gnm*DM*hiy% zHdv}ME7s$3E)vO^CeoUh8LRMc^O&as*pxo;qJ4Ip9?}##2sMX((}SVry+dU!yxbp? z?Lha>-d35+xvg+EJ*Pn@ieqJ+2C=q6ork15xT~WK&}}D`0HSO(EskNyNBZ0&c7LqJM8^NtzM{eapS!{Juse+ha z_6hCq`@8)(7}}Eo*pI&!Q%Yh? zWt2Y3g_M;f*n&GNY29aj1qS z-dj~|+%>E-Mo(MWbKzC@M=tf*@j)}qeqOP!^uzFw5}dpXy@r%}90O`e>R1*&nx(Sc zXmoiqnCP8TkvdE5dG~ji)0YNBIT9kvXt5?T)Q8znvXZo$5J#4`wNUS6B9prvRON7P zvG(LwFu$X<8gW?{xG*`@CAZ3ts>9om=TN@m{gnph-!e4gz|ZP?PwFkvX0cx{KX_Pk ziO7g~m)iZ0gE6A?MYQ7D zaV57~B`zTBAwyvXx@g@yX<#Vt&^^;&mxZgyCk z9?DI`d6B0c1umzy{-WED6^ilf^Z5jiKe==LVWvMB#GLX%=Qis%&1!OSrHNb>+mkk*35zxNT!UC%8) zS4#07|qiR~X=uY$7IeQoD?geDFY%f^3v>Ve-rZglXM-I{w%z{eqR3o03=Ih{{Tg3;B{Kbfu#}v7bkEXGzq9X zIUCC#>3mSsS#~X+%b*roP}>?g+7sBNZ$662-)!Qk+Ukc=ep68GENXRmBBw>^{OM|!+P$x{=40AJkIaztnNF$s z5)`Gp@{bafrEMgd*KF=})bfU{W4eaLQVY&R^0=^ub*6SV-#9-}FsEZ7HB|H2P0iKf*cWq~nTphs+|zhR$iYHgraqJZ04jAS zKBSBeL0~T%k68W)JC?Eb`iDoCbsf&?pGrACx7PI5-M8ZY3*r(5umL948_$xns&Wco zr_H`-FCw?}#+-kK0trq}AcM8yHWVQJp0m^B-=(*+qZgmJ?K($IR#v(F-tX7k4@qZW z0V1p>ZEL8e(;81Fsa3}=2=(4`toC&dipagVb7!CRE~zcVs`6POO)^YOY)7U|eKF$4NmI`(*Z?XR z)=r3{W)itAF<7uW=0`E4>e&j%W0a`a2L*D0+zpX9xpPHk&eL+;AzUncst1S2~(9y!+ zak_sV#xEBbMu@=mQa7mdl6pz3i?^JeS;6l2(!DKGWn{@wF|nVSHRQ&M!b+WaX21bV zjb(x&wQg4$jB#M6%pPV-)T(zCh*F|q5^S{%j!5lSQhPl$rDoEHiP-Eqd~9Q!yM9AP zmani1m9s_6aI{}9a=N}kd!!iH#>n@af`_U)!aB`Ga{7X+Den4&Y%0st7utJDVsyj= zK*h1$r8X}-cCE#Ir5>8ixwvw5XA!;XQoidiBq+O}o#$ZQdM!}vD03<^n&+AkFyZW8 z0ZEyY9;>o_rkOoHRaMJ2ILPR_e@L&@ch&O-iIOGcr8_coh02ogyRR(Vn!cuVs%ckg}VOMcQcjI!NoR z``hpCoVQT?fxo8TujD+!Fctt=KW3=&PHo>j$Z|X;9FZmDu){*`IHD4e2U#?cZMq3< zIl3iQF*>`Nt6zJM(*uD!Qszxb+Il@eesfps*h?04`yP=PeOEDkoCZPVNRsN`lIov* z({~+FDpHBpu5U;S-qN{y^Rq@b4Y=J*tWJNb6?AvfzRp5CuLO>WDPqqOO>yN*an2o&jjwB(O+-Ax6rK=NvJjE&D4moh z5p}@`tj@i_VfdR%{{1043oQE9J*wSSVYhEQ4NbpFobi?jYO@^5&g3|e0SU&iPpYBo zI7ewUY8GP?X2(vqZ@u@8^r;hOxTmGaT!$64OInJL%TuWu3Tq?mY<#(E4aSbS3qMf_ zDnBJIp|0ve?-$DbM?Zm58%{ZuZQ^j)~MJ?1(Libj;4mI!`Y+os`(R;Pz9$fbm zVx-@J2h2A7wOV`r#AV+6f&Tykpx{Bk;<2gWg8``hYDxen%4)Q?5|(Vrz0@aj?q$$5 zZi zJ1bjhn1J4TUQqh2g1z2BQ!TqK!=_w$;3s5rKNOpY&|Y|r#MwVdsTSL{mSfU8WLO{O zoZ?Tr<6CSE+-fBJmZ?9diE2G69jvj)<{qSa;SRSR{RwOvdT&xIQS2;7V{LFPE^6&c z?ZUE-4#e3%FckVO!gXc~_)%k{+)n$?N(aaN?RyCQ;M(N zEDnVLucDgL>>-tyJ_x+V=0>1rhrL5m2Tu}8Z|F4}vlc-M*fQQ+BqkIdW?gb5Mej85`W6h1>yy|duT^XV^x6p?j?nU}&F$~Ka%$ywkx z{p(at#F18gI^y6cn|3UOg);IS2Xd02MMUbeDasO#Xq(**x=mv_hu-gQ`b|Ns_*x!% zRWMf%Dvk*Cg~z6aaB{jQ@>)XylnXNPtu1R7Q=vR7^otsr8>u4op09EoM&~QZ*iM41 zRMp2{OHK|n`bCJV5#M&2)_VH>CF&b2$1SxkC@p^F?`)_1#!nsm+sC4;LvW>&HLP_w zT){C6>^GWHkn3f&C)z@VkD{j5TUTgTK*?osE{AdRT#TgjC0h@bJE?WoF=cg0Qc9zr zgyzKdJGOIC1h&($Qd{+0^Nq%<&ct3=8GDYG31b`|uy-)pzfb1EQxO_mXtHi_HvPXH4dB zFBWoeml)sGaEqZ{MGJ#hBYLMnYjYW@#nl#uyZG)Q_8n6%Hg1OyN>mS&Q_KaT6AoVFH zXsqk7aXFpd%64DWuc=?Je}VV3rGq|w^X0rz^C@6ItB2I>ph0cD&@OoA0u^O&n<2r?CfkAMs@T z$NMVvo#K`Z>pFj4S3aAVKHd-I?gv-lyu+($=F2X&NO7eO6(o(|gSxIMoBYD(fzM`i zyyVZr$t)~ezH0Yv#PumXH0IQm7~6_7T4bt%>qGMs6Ra9cbrAzJ+J5>1kGE~*v(i3M zS=Vgo#bk1QL#4Z4RB?~H#BqyceOiG?$Wt5bam%bevx-aYh?!Q0@|h&3)*V4#X*Fin z<;M;N&rRzRv4h4vpCByN8b>XqvI~KgidtE@WBG5xUnxVfC&xP_iv>NkAqRK_l-PUs&r0 zq*aZ+?Zd#*>AhN8cZMs9^x^`VyG7;nZc)r`QL6)U7Ft2>-bX=6`TDC?H&m5T-tG5s zyB$%;Nhy(VM$V(vQY(d+-3abfb74?d8%^qo1#pd#j>@fDTIdLHpR3e*Je#1uYhEie z7pnBNc{xMw_x`^B01&VULy1bzLXxeiP}&GJl-&+1Q&=&f=65P_`rabuL`q@mD9Qd_ zU96Wt+=n{HQRu6CUFMt~M?=xN?~M> z4&pa!kwV9P71rcNaZJc%K}|f9WhAF)BHM3H<_}jxFO;0wZ&Nnbp41M8v&^Q^q@PtX z(x3ImPhDs3Y*Q3+ooA!cw=JwVuFmz{?(iR%SZVg0W%LJGbQHSMh0>&*gb-?)oepLf zTwPWS2sypVH*~C*bND8d?w*pnyvP^#MX2sSs7~Y2y0&)vt!upW9+TD<;Zgm|KK}Lb z7(&j^C0W*MtAfWvYaE`3%`=pMvbgH9au7-N9&4l?(a>rswIxPHxwRY7aF$Qm-eelH_NYQIwR zIc~ku>szp1E93L^gcfTFkJK2+n2e(dlL~4I9&GmRBdCM48lh_YgQ_`=rt(%MryS9a zeqrbwhJ?>OjgSklUApmet?Ihf_I~i(MQz)@q^gfd+HWI%3USNa`vebkda3-vePg%E zK4L$h^I^GbE7SQh6Ov$U?#|%qM_B3W6&3iYsua48$!=k#=fV1LWYz-Z5R?-<;I?%||l-0HyT?Pf6yXX7NtN_{L zo|l&g+JS4IysrE@LiMf=Fc76G*~rKn8+BWq1F2h&ZE`4uNk(b_ zOL>T(+RNxzA7ys9^j0?R%8RPWo_*H(e# z#AhtaPJdnD<9*Y-D9XsBP%= zuQQYD`z<*(qmF|4ss%5j->+bG&cs?3x1yo>q#wSQxOn5gqcpGWFE z=xKj+eXG*|UMa0O;Af4a#Bg#+( zM&vQbc)2sn^R4wBia*0@uUc|FD!HMh7$fwxjd+UGWwxst2%IWCp8cjsATv41Z!8;`v7x89W{#XlxW z)VJPIB}!V2$tSkAWh1zAspTjgRL3E81Ro(ebTw9dXL3>auy`dUK`I`r(ni#$v?qD< zRUPi_ppxt>zk+0jtBhOm?H z{{YKjpUWLrOugk-6z<=(jfx^20!oYYP|`3o2t&ib&?Vj7Ly44hcQ*{(4bt5+-)Rz7tbGXuFqQM%f0rokCa%=h=D5K@5G|o#W5pIbb+Y|MW2q@&XokjeHv(5;uc`J8@>A5fG@5K_elUgG2N(Nb?2{0 zN^leD%dAO{6uffRG}$*Uqz3rSQ2`~Rq3@BG=NESYL0Nf|J57t^o_34}ZbYvv6i&eR z6{_kvxss!^IY-ufS!>NX@rp5ESnu9+QgI>pn+7I%0@iW$XG-158j zkH~*4`_(5A!QI64KSgwoyCrWW?$Aggv>AQQEL;t%zkvjVzU{Y6!FZXHv){1GeAYu! z=`5GYogJQ5XA#VnLz$FUs+)NK_&j!n{ov>9ozk%7<%_B@KGa=3P~(dIO1jk~b(zFo zUn;rwFphl9y|)f1aoD)w|9ZfA<{$Qj>w~wTh`o{)SIBTE<_nw_42dIA^9#NR*OR15 zku{Ibl%w_ue*EmSeeV1Ms4)6dsl0L{QM_letmB zw2!{Q@y(wb*nP&ln_?_0zA%><2M-nHXa=7N;VQ+LxWrMh*Bgc7okZ?e6Wy<{rGDv$ zEi1MQ@f)dlv{d^`JSCr##B?A}{6}6O?kkZBQD?e-6D@U!4`)zk7AwE zIb*5|2&H;lrQkCA+--=ii~l#mipF+P&9tQS@!k!wKM$p~$GpqPkl;3~rRYQmD9}b0 z2{EmcNnneA-Oan?%-~ueGghNTUlLhwt}8aIpIpCsEwIoL~}JqsB@uBs}2J4kGC`BrRHcvYTCG$3+zZDk<}cpkUFtG;`+ z)hYZe@iVn8b|W{lVb|$|c-2YC+=D}1jFoi6mv-ScRv+#_1<*ZwnUtPb`LVlAEh;&O z2+#0+p$n9U^v7p4%EY}Cpv$Wm#0~1jERdDerQPkfpjZil!T*LKk+_{@*5z}txhp3l zuUrMdXO996V?nJ?2>2-_O1+bvYbvPsvrwqGt|G)533gVhyz_3YcaN*-&3D%-NoS^O zTRz=sjUn|jE_=}`Z73q#VXJGv-X43werLj@B^I44(+ukSTn$53p!-8^JThy2y$ZZC zx-HcPVDJYMJ7R=%I5}A9v)0Bm7D8Ff4G5h+FB%} z+}D$=`8x$Wh0S=x?!(cem^R61XfGSAe8v#j%1@IuijW*#G3ok(5l^KwqCrn}$kjN% zg1P{5ezR{zjZgM7q&s@y1Y+O_@8mV)01AtZs}?V&R6_k!M#`@D?8wYG zohQRW&mHAARPOUMl|inBYjTJ7rBzAmgCG~&A{&iG(Jwc6&7K-eJ|I%{^@|-F+jyO$ z7^?93dUQYE_kKYa?;so};Y}z{EsOPmyr5yHj_lelXT$GRAFr{#mpT@3Ry14EDGpyS zc5Y1Qh+VvGm^$zXTBTgsiSaT0L=(fhiuTlP&u1 zgQG3>7#M{E!Az^V$8sCWijH`?@6K+nI*tfK;E$7|7J}O*>Q(ll`Q6X1BlkVFv&|Nu zcg3srbawBf$Wi>QsjZ|9&9FU3s^Z)Q4O?EredgbK+U&W`e6c^u2%qhX>YMH~uQixl z*mPf?t%h;C(>Mr?Pik>?Bqh@^aq)|w`;V)hUf&&ut{=S3em>rw_ek6Ew zwb7AuX}+8(_|22;@lg?&iC24@m%3omxjNla7^`)&+Z~%a!Nm^9^blt{N?g@f55q*l}uDl4r3Z>TXi91IqAE0 zq!)gX4_Prg+d2n?~ufl z|C4d+!pFu+B3BegVa_1Um>`i?0me7zYZxSPv=bW~CQr&&vLw&J?ns>|&)X3p6h0`! zO3Q4c2u8+Z7HNCiadKS`JIcSPQrv$?R#O+He<8P@MkM6;snNQ(ej-K=6%iXI`JhN6 zb1cvvxviZBX=zJaek{+fZg9nIQk7EIbW(;1bVcYHI${ITJcU#-`MJ3{fIta3)uU3; z3m5c`TT_ne%K=q>3^JdAMQx{athoDOiTmBZ^x6UwQ=d2fGE5`bK}W^DV}ujc2L7RL zP*!Du)9oxV{k-gjKv)9B@sh7X@{yrfls?h)%-{NZ=I2twB4bF$-=sI0KVyoBN1hv1 z4~w4*4T}QdHG$r!C!t{RM?15z^|EXAKrqLgINUMNCpWOvndX7n>>rvg)3y3PG!2fq zKzPkRG@rz!;_KDcZL)u8i(mbT12sA3v>~0V;PwLE&erXr7XE8PaW3Ls#3=OSy*5$M zwBC`Iz!#0chV5SYvOxV$GD}QIHR16ou{z)8uDMekaY5cn=osCS#n7kee`qXpNsm2X zIjR@R!B>Rp>=!PkqAo5nnW_L+hqD;2va>dd{3l*i=a=6n1U?8-7Lj(i{mTMO&KL8c z!I$=BBd&QwlfY~mLLoX83o{~fGiqz56H+)vDFV=;8~aNn!v+Eg?$_v-{i9d~ZG&2m zMd!C&l8z5=rw~65r|CR97lv1P@DgFUV)@fS4Jb`FG+K(1H9qE~EAoc=QQM45Vvg>_ zAB(MhDZa-&es3ZYsSPxsRxWUe+kcalnXoYmVZxinPzQ~30LXN#3%p8|Eq>I;04SS6 zhZ4i*y@=UZO)eqa%9d8hR_6W4#3k**tnwHGG13`LjsnOGLuG8eJQy;8r=euRgQ;g_ zw&tNodf_dhbIGg&uR|&@oKPw3b)_#^`iS-SZwx50!jmBedTxp1HA4Pu zb#xHvo&ox>9gh1NuYlD-(ps&97`G3j9AOod1SpgBXD)$b$q*y$MS@x5_<{6wTMcV^ zQbE@XMJ`nlr{^UOiyXmBFd;swjZ32}uXW_Ais*p*yL;G%2+DQwHY7IAW@(}SpvuHG zT`BC7!uGBy2i;*WEMJ1IifYgYaP3Gji`3LKjr4Z4*xCG2&aF)(?W=Z7tRA31!LVNz zJnDO0#(%ah1wXrCVqE@*Mh=<=lt^ zD0!)gsU?)XzO1lToI)nv!D~k`Nu-ze<(G$&2VX+;t1%ikJ~Rw9U))wt^4#g8!TDvB zjqU`=GS>Y_8d){{c8;FtEpgGU+bnMAJ*im59jn5|FIBqQ71Re~%~=0n?^1rGV}-~2 z=2*wbeNTO*3W5d(T@gY4bGYM)GzxP=7*`s)nic`_t&e#$B09SZ6{Fyaf)ixrMJ8vk zajw>*;-Sd`!FyFJLnA!#>kfMs^D>i7K>h`TQO&;UC4<_bv)$y3+l-y>aL?g*t*wR<9=GL&G8lep+5v9I_8?Gv zFplzurn15w_>UTZNSK_4Dy8)v+DxTYeq+w4=5&fgO! z&D#3mSy|tnUurvqXc0l-%1dnbWQR)A`av~=O@egj}aIO?k5}6EsU7b|oe>|xT{0tIl&ayni^NFV< zd|6E&pZ<3RKxNKsMMZX`uN`a3OJ@(p>NS{J@Ft)b|5VpV01)^Dm zI{1Vz_88a1DL=I_VhZdy+KMbb4?GaNPpGh@ z#r#1v9X4-Ja!^2A%eR1r07C@HnyqbgWzWip3l-&uoUwo!8yUT#efNYnLCy zq{@sA4Lm!3jt(iwIVw1Ixvv>2b-Wqa75;Ht-tv%x-&Qi;QM9Jg+ka)04URR~f8&@t zt~{_umwsi!RseUWa8x@%cOa>)x@KO7!90|jyyU66o9ytuLN2j0Ub0pnW+UVFHpI_a zu*LePZz4o7idroo>w0il<7eoF>i^F}LgF(?DgZVu{dF0QNnn*<04MA$kDc`l)?KU> z1Qx}uTrim0x=ejQF6l8khQqmkH%jWui+JB@H5i$I5NdaE4h~Z1B@n3Wrf1ENijcUK zbIf^?%A)e5*}&NO*GlPwBx6h$Rq7+*Pj&1uVYg0jK61Iotru9zN$jOJ0|poYB`&u&#)^@Eq2Ol$bUGo zd~oy#C3M-N7;)ftPb~VluBV;^)nt>7c&gMbg$!Q!&EYyr@h5fFZJaJj+RLoTf+y3k|9ySY8lcQ*J*jh8kwa?S&jGb3E4@KA5Y=b*Tc~-a!gIcm; zTRXkIOK6glAkr>ieUAa+)#<<5Ng}xW6j$do;V)aN!K6V9l?G4G-G@`+&bF4C55x!`=Goo$h-I?%cuZB^2p)s?a!M5SS&!N$Hs zVNv{^(nFFxA3L#x0u3O*RRJHfVrf#;dk-3nd@vznG27rizYZtn90(|mNtr-Vjc`MB z>7q`AH$0}e#=iD^^_uo~lXcIvt#4O@2bAyC^H z8M!8hls#jmqydba+iWtB#grW8fFjjnG1WfmLv#2MTuvZhZfk465W1@`zxHS3zk<6OlVP&vRhl(YqZx4D*bMPQho z`g@6c$H`P`A-W06s?PZJ9lsEJ|M~OuCSM>R(k;PdQvE1KNC0xcwJhT6=W5lK{KuV^ zMi*31=O8UqlD@JIR#BxlKT+A@TGhsQh5h11x%Ym*cWi$le}%#slTD2)>cCY~9G@q<3T-0nE^iT94K)d|%Gg&Hod?a~7ItT6){t#ae{q}9uw0?uwD=hY z%;WlsHIDzb02Ngb8Ot98aTBkbV^LGTT80s9H!r{nHh{Vu6#5=ps-?p9^DCOt-?N|F z_Jg@T@)Km)1L&Y}Hp0qZH#(~kxnA8HoeOS${>&JDw@YPe`{E^kV*i+at`xgz%F{fO zHo5wAbGgxUv)BaqV`VnapZ!DgX+~^sAep=A8!uE`@?!pLu?6dz5 zE#P8m?9Pie{9w38Np5_uErMoBK~5+w(X(Z4m7?uPTh%JH+QCG%BImutinYOt<>lRD z(A(xq%_l3xNmiHTjCS2Qm$n-cMtelqPF+rkf+k(&`z$4;@XHgaFS8v`F}^y=+^3xJ z@fJjv>@40h@i|FcJJQa7B+nzD;_1up2Q6c9?yQW=ZLx?x!4o@$%c~$+Zmw1D4lR(n zO{Xt3$4I(^e;|il{Xx66?L~3N;|k|w@=<_N3X4-$kq3){0R3WVW1Aa8n8FXa*9we3 zad$HfP3>@1lwBun%9-Ipo}5{ubm!!1Yh)?zp3K+xtm0nn&%~~xUa;e52=~tB`j)6J z*&Nqr^W6sgw|{8!t8X>y&;Zc^WnbJD*@YXxvGy;UpBpl&8*5aI-{~AK$#Re(!!FJU zJ0tXG3Y+trV05#dsdT2~bO#%QpRJKbIqCsl|GGw{M!^>rGABLnX(!(q?wanJq9C)I!h;UXIC;qG3(Ion713D#=vr-N=BhJn59I zeY#^T&nCNPx0Z16VJNT_r8(7|`J{9R6i`7tj_vh%-u``w|8fyh0zKAcuoaePD$ZEx8yw(Uy7pF#5!1 z>PV+fa9_47sd7Kv8Lszp0DSA&`aW5FQtd8W##+C%`0R#4a2c{Q^!R3!SEj{jU4zlU zjmk*>a$Bo5JHw4aL-0c+_2td^o%CaqKT~0Tx4#Tow{(Ttzk9Wyg-k_Atw`qoD#a@6_tz59klxr%B-jiKAFtcKP!&#Q}qH5tSbR?Bc zur9+8$Vtb;Mp zuyi_h**@(a){{@(@)QnV(0$!`SnJ=K(4nn^{@e&qXvL-~UEC~j$+{$`%++Skbni_} zZh!M!`DF$3lF7Leu&qO9MEMknloFu|#(n&c1r`RltDoa>X6>utbUT(~Tsp5`>+e!>1?T=w;L z4#F9*mUOkXUOD5fc5i-Ek~HUYEFAN7Ly+{|C_QbC^FKD5 za>>oLni7m*mb8?SYHd$MY0Wn{DnB+eHaOa7yeHu>9dI$NMzO9aXh1>EAZSM9s6p3^ z(#PtM0adANaf$ZwjlEAL(IwRF<_q%%(BFUeo)Di7~$v;m>$=nvb6jQF*Wsy0BtfV-04Z2G5Ztr;vv%8ss+qWYjn%}(T2 z8kVNh)h`U=i<%T+iLW<}mpmy!NNSFgj_Kei!7Ddhs=9}|W$K5HnvZ4tYZ%g<4k(KU zi#K$S+CSd1aS)}n%jtf4mT|#K6&^NhUEFURlvm#48C{DTeZ2-XRPKR1N2WL~Om;g} z%N%@*&6{|V#DV?&hvqG}w!!P&qa40lL9*AER(ndXs+8>=C^uM@%hC$|Mi_<_tB-R zeRMypXPJXRQlOC#3kRwaGj#dt>RZ zS!oFjV6@NNB6)TP)fDX%mA2 z@1M3J8|i+c(W&ZV0#Ndnre1*4WlU3|{5}YZbOgvl7~Erf2W>rP`{7)7YNFnX+D(CA zLvc}XXKN`dUDn3+nEriH_$sTvw6O z6sj9}Jl=fu;@m=9!;0C;P{&uI84K?cgh}Y@I%82uj{@pI(%b~O!`~)QuC@vW2&o=t z`iC5&QFB6Uw&jOMXiC$XkL3NpKJ0zVy^Ahonc9)#41&_^{LlNnmk%unEeqRsdT9zK zC?ip4?)u=Y2_lX9;grP`cgSLG8~4pb`S?JU>**_hhl$gc*i`j1P9u7qd=Ix|IpM*?OSO}H%)$?aC|F8%3~=cdVYUfbr6O@3mBT)*S~DD z7E0&bX>id1PzLqy0NzuB;WF%<9fn{thpvigYNt1~$Lr-U{+}qW&W`Wsr|tOLW+iJ|s&hRzexv00MOL=$Vw*dxR}S#<;wSUx zTAi!Nu)Pv-qHwjNKRulceUBeZ>rQ>@S276aK8b{cHeAZFsHrVWR*mR%@I+)AP(;^R z*B$$_#vlY+>wR>duJFz*`W|J|W{Y#b1MIY~(>$qUR#LPx&(O{s3b{L2*>*9fQiffR zg9P!xi_hPIGPY8-3gs6!o#h*`ZF}d0L+CmSQCO0+<0`fvDx*qJthcd+gpp%a59sF( z=GPw7F>A1%?dd8lOHQq$Y(x!>7xh21rOj>Pp^wW!b?2?hRuz<<1(Ev)fGh+Kr)bDm zfxPIv9&2n&IXPsY0q)3@w&%ltxl;$H&cb7793Fn-_3aD&KS+xa3Xg_`YN9lKwR&{> zkHH8%%p7P6X4_=)DTfq?Hu+r)KY9O(3sbQ>b)A=9WUviPB={<=V;`?$K!BzBjjPK~ z6&2i@0{^f6Nprfb)op(%#UV!*PJr6xy-Sh|10~8uF(Xa}O1V(J*Z2+4IBhTqCFAyS zq`m{ZT3$t{i2AXA){U3LXBjV4I5yy9Xo}7(21Ol9f6iBn-I1ay^M8f6=i!eE_!8X} z9;9YmSGzOZBqawi;_1+3%E;%vA*zI2ZBZtKtr zL{M9K%>iqHK>FvBGh<$yU-j_Uuz`fu@?IN%>4bTqQC+0%xM6g`CXX)$#eayd46tIW z9~?8Ehx*0|A@hzwNsj7O<7<(DGg3<2cZKF%MLsDw!gNl(5(4d*#jIL3|qkyrF#j2#jb zV3-A_ICM9sbvBnE%%|yUu2HsnJ2$;%r*|ZjD|=Va6BXc(vlm&zhDeRI2!2!+Q-#*` zYF0Dy$lZtVTBU3(HAB4QfyO58{dOPsu`h}YxMz5?ZSlHw2y@XM?LwT-Tj^e#o=yuc?G&l zKuaZpkmzg)!@*JE`D0LHKnZSG!Rk40he$@+95n5dd!XIS!LC^%ME>i9-W3+jRzTG7>9p0LnZ8|OVHz4=o#rb|uu$iHa4;R7mquyIiQ=_8`BL2cB#g_*(M#?s z;O7sGV{SOjR1v->{NmOQR6Tl?ovjs`mfgbw1}j%4)mAiKN9WWk-q!D`nko~&HoVX5 zcM*Lvu;@Z#*m)CE)Ka+Y$b8+ys4BT>of=`m8Cd#8m^hY5Dm0m&nYv?HUHGMXQlrPw zQB*nLQNXUATqy=W0Xn4!@WpASntpN8B9d?5d1u>lvsjL>>>g$^Ty>-U@8ludqwJyh zu(Psl8;;BFXVZo6psF_5hN|(4wcT!kGDq=XIQY@mKc{TFhxt`%)+>GIg!y9@O6Ad& zj%t~({QlpFn&2v>*}M1QzBCb!eACx7+aG=KHkBdA{LSo&K{L=zJpY}8?!(gz2d{1;Q{_cFLE%HL z5vB1@zq_m2z!LYl{+*4j$%FY~`rs2j3fHA&)dp69Qio$y5A_vYzCB7Yi!IeiJpWa( z#~D*;i#~AZQvv2mOXavpId_+k>)#QRb(bX5=`k$3H=(!{POj@T&264W_4l#cc?v?$ z-Edw|8s$a+RUV=KOn2aua0t28hks~zW`c?IEKG}*EXzg9+HIajm8aE#?=D%N#T!Pl zILN$j?$EY178aHkv`gs9T$#`}4@t1&oAEXzFE8%BaGz9@&C7VQByK(7{EftCa;K~t zzU;cfC#ZYy6l&@zFol}z?~TtpA=D)25t8$In*Et_(E(koI8Qfy#5B&t=+{B zhvGRZx*pmX2u_(Vw|H@UgCvSteh^lV?f1$%t(scDe`4P4xKM}Rfyb;i{-H@4PR6*s zm)bH&b8k;hC*AOL_Y}bGd?gy~aP^R+Hm8#EW}FQ<*QMWrHVEDHEsL_UCuD!vBAMDv^=ygX_j1SD ze`r`jj@|Iy-$e(PcX0u}La$UzEiJj7-V}Y21fQsP5CO-8Uu%T$0V!`5tS^*h8O55z zDn{)nk=cVN=g`~_2|*pY){b)b&?(y?Fqk^n6z(7+E5xY~kxW;bT7>LZP0Vf(!dOA9 zjQ&F#9nt*#hg3Xr>mS|TQGJE^l|gCSl%OhmmY;#il_+2yCY%P*)Yb6qiurMzmUxDb;(` z9Hd)OrH69ehgX^n0~ICtV!sCUa^dXq>;zOM~}0riOX z8KnTk8RZCRSbQs$jzei5t8*6Gn@f3EjZV8h5t;zqa)9+k5Qik`~RzP{v zJMN1@$XMmy3(BVs^=EB0A;s=VijH_n0W)^2^TmG4RCZJ*iHkfFmzu~v^8~E7VlWKd z6YvpV5qe>H?1FA%veCkMmjRe+C|&NNXZrHMJQs80 zLoA!tc1I%1V&VP-g=leY2U}a63ZkQvp_1{v1#5fAoY>I|Cb-0jsO?#`unh>^lft3P z9tL{&Qb@t7t`@}_L;?7jA46y6j$o}`kiHM1psI5J z&ofOQvn<$4*b81TOEeI@{`Rt52)@VU(yHa1_-M^0#Hc?OM-{JF%e?XtOKvB=Wo!S4 zvhPIqiv2OqC;BG~IR8v>K|t{E=vBF2bCKnEEGJLtiu<13aVjU0*8l)sYs%TL63XO| zx{|lXX(@BTOHS8m%IiumIKwN(%gZciZwF77b!-lgkBI%u`e_rbl@pnszTAf%*AwsA z_UlBw61aEEHm&LfXYfJnEi+4dU}wloHtoCVbfKHk(a{Sup07|C=pJL1NeYqjKlm7W zo8#*h8CrN?rI7-oacq|9^6$@I+#s%TQ=o8Sl{mYWn5xDzf{HlDg)4aMo}%A)tV-Hm zsVYw&qqiW^rye~@aO(+@v!S78xXzsM&{IL7W7+=-yY!FX+h5Us=B=Gw-e-C{Ed zEB^_eOytFZ$F}jSukMcJC}QNOvF9prD=|UHnfmlk3DWx%-U#7?ghMvQlbo z7lGrdd1X^tbXHA>`UU;rfP(Ca{f72dtb+-Sh+f#w`h`_~si`_AWVIdFhhdWnr&kL^ z_P6%E`J@lN$)Ss|8dq7Z6rPr4czUd{oY=Cy5QYJh*9T^8uRB8aiFQRv=`6-L3&Iw< zZE5ND3e4i`qRSEqGL!?OqK1)g5JGcx%+Tu1aa-%vGv3qdgGVJNSLlRr!j6%{`@Hx%uYS5N;{?LBZp{*x#f{aHa!R}O#zE#m}@N#wNfv=nU4J^5`_c}0rRJ^=A;NQy_3$%>~I!HQ9uAU`_s0YLqgBVtD`bzenkqNRJmqx*!2U&0mJm*%i3h4 z?5Y-Js^k?LFJlw%DeZw@#H)i(xh=bMM>A0}&F7|{#e-w@?%R?vj>=fyriu!=Sacf< zrTRy^Vx)X|dYLo&rT6IfnFUXF-vsMl7jjT~UTKQ%4^;hk7LrG78yi?uPlS_H+qj}&77l;M>iJ@m;c}ee^zb9f(hO#{3iJ_<8 zd8vKQuAn5~Xzg-t{72s0+9@DwpIXh=dDS@ShlXK@>=SIaH5O@r@gu6x1$bgm-TgG)Z=jaDfjz@z1659VA0FJ zuZ7U*b3>tJd(C_+=Bj3VKRda&apG}&96BFZF^)j;Z9$&PDF3rkAmgzSP<0v9QA%f z)BOz$B|@ZOGdj*yJ|pu00SE4!^_2EoZ#*qlqpb!%_O4&w?l!_b8J{HeVVF98IBVVf z;0G5{YxcJImPOJ~>=Fs2US+eiDB|l(Ne_%TNa?p4Zr^*VPub~vw6r;MA4Cp_c4f}Z z%k5K_%6r8oXhcOC6hY_Z1gCY2 z`G6E9A1sk)*5e%f&L&9$u%Fi;?g-R5;Jr^=!_Od8_qTS;rPpsP_NkbUts1Rej@fMY z8(C1bLvpwUg&W*rj&D*8d@Z_%A#Izd8g;6alxGx^xnfyY+2J{9Z+2>6WD&Xc&>&)n z-j8b4g3lc(&FnYmx;GE)Q{PA)28w-b5!Gw4_{6rS_f^$j|46LEcp0sf*%cCJx+R(5 z*+K4Wt*3eH#-T%Ou|;;>F^KDWVsd>u#Te!S>yIT8%fZVsLMovpK)mO~{cNO*Ena@t zvecN;T=U{TG`lnW)Pi;g#lgw->*e*KuTRmmUsXbrqmh$-$qKROaKR*(-OEMy?d`*9 zQ&fe%dt!m+KtQB}EJX4I&-fS04xnHCBZD`JD_#QC`7(Tw#CCdbG)JO+*weK5D zF&}ef$iR$VEI3k~#HuQYYga)5!n5jsm{GXVPBmkmkNuZ8Z9an0Q$e)cg`;vBsvnUA zb{yL-lRKRHDXpan(SL-g@aYKu^5`n1&#S9nvA$ObIxPuZdJhpB-q+eKp(KB$VsTlj zmFzQ_%fg!W%|pAlscrB{^SKs$z1W;Ho+zA~gV02+aIo(3$kePi^CVPEQl0Bu0aTLW zqm96}31ypFXUEY+sHFRDvpKL)OKIo0sI+M-c7r0*Z<7SFzgI<#9CTv|WY?kGm-s}G zq$UCx3wiKdw#=xo!>~ehoozQm6k@sTkFKoue7z^lt0fyV*F@-$qUA#{hx>C0dl#%> zyHkQk#~N7^JKh;H+M?*iNcmF~lyykgTIH@)#ZeY1{M2$RU|K?%SNch!#lfY^k&m&k zzl}IMf8VQ{Q7jp*E}kKi@MDzi9~uGfR8?+n(E{XRwT8Lxgi65piZ+jAZSxBA)7+~n zO%k3Y4U7P%%L1}gV|Yh^IG%32W_(D{KQtD(`!O1OzaG8WwR1t9%ENV|rdDyL-+^et z`t&aJrQ^!|Np=*7Gm!eek^6Mv_z`87eGmINMus?aj45dGxq%ocS?s;Vzf1QY{)oR$ zRp|nq!JF15?;)YlGUxX9q@cnNjg!6OP14MF_(yHAZ1@wN=n_4l2n!89P zzlKi~xrWaJW!SS;b)GZexf_~WSF)nb)LCOk(N$eynz{Q*n)X^7@86-clIGu5Gf$TV zI$ma~a8#sHpT;ZSI+UF-YG6CcU9o7a+R0fNzcIsXq1KyTQp>v>6W68l(t&kmc??lr z7#!WF@ss_zdwen><0kf*E0#_jHZ{~WF1s(9=}J{H?-bb`Pf)hxqHNk+OBmK!=R)C<(0qTjoaOVxRR1gt)(UEoGf^^ z%}+YNU<;f;#6((FCs1Cu@R zrAYbL0EL$C_=ych7`an|9U`+Iu4YojzpJ=unPmJ!^Dx(b{u7&UJmPPxZ@F7_kDuCf z^AMxhbq*BQI2cjt**i1r71t5G1^L7LEn7cB4%d|v<}&{JbU`DN$9^S|-zZL2u1a2B zdyvZmVcf#?F{5pYjOM;7`+x59a4`g;+`1x!UdYqvVj+vm-HCI;8aPH23l6f@8|wuy z1Fbo)Zc{D7HLL69o`221@kqwEu=?t`4stnL)4o}YQHbNIJoMMdqBiK+OM^a%ZlKk# z=T;(eEcY9JMUJZU@0#qn%zU`|+LlJw2JAaJ73HYp|4NK4zv`e3nL0B+bP|tCBX<`_9xS(0OxTdGSBQ6fE1Fue z2g7zDerkEHpFCoWoJ-M6g#;fPe02dHw4jRW#ZoE!o`}D%P*@;urNE={R z8FDx+A4(gMK*cr|+0-^r!OxGtCy#xQT z)*oH{N3Ob+|Y@UnpMUl__!fD z5ASlTa4A|cYi6p839FKokEjr#R;v8@b^n-cSR6afDb`2^&O3WZ39=FW=1|tEq^qZ) z_&y;?iJud9;*5UqOF3wGt0-mM?{u5xwW97BxV^^mH0SQu;8yKM>iPdkC&Jnh+^Eu$ z(F2QjKkp+=J}VC>F_{vHtUcJd5`yJ9Fq|B*kPx~=qA`i%E4Z7zYx?%(!WZ!xJ|#*C zbV>Vg*SNR}Dh#I_*`J!iOT3ILcsriel2gBLGf2mGxyV_S<#La|7#IZO#D10a* z!(5eM@wWTfHlqGqdUH(75Z9~%%=2;12>-46=`09#(%M0O)^oL@=|vHPRl-pO7b1W+ zj`=+XSAq|?R#jgK^9hD+@2oMfN4;!zRCu?l9BR52oK-MV_5)B#+38Q@I_@C}Pb3p09aK;f*nz#8n z4$=sy+$x5(%GEwBD`q%l!xE)ZFd9blAHw?^C;QnJFKa+$a+mUa`=@>Ytx#Fqx;80@jIXE@! z{WvtH9R6cud`!ii3-6t+%Prnka@3+ZE0c8e+FHsA^9aA$h>`6|=91d@gd78*x}x`J znVS;*ebKmA?&{+A`SLi4H9f7u0?M@Jn;*|7fesuE!}Zs@tsHoz<2W~(@l}j05-qD? zBb%hO{6`92nPI3W?5@eCTk_8ipHK`VRJ6n0X=J$X&fxy0L7cepfeYwE0_8()tv8`B)^ zlztjCv3wA5!5S6e$H15ViptF$w^+Leg970sKaO|$pq?1^-u8ng>2sMlb^YpLTGCKnkmA~L)ov_&K<^8N%2Jv_gTKLWr8s2?pl-V2aBnyX^r>310ez^tk%|6)ruVP zFGu&<{EE~x;%QYRugsq_TZ-L*Lt@GEKJ5DGF%cvD-Z=sZALGEK!zdaC`kG>xc5l1Z z_8wcj|B)d}%zV1{vY(wFZUe{Fn&7(ggCh8dvBAla511PW2S)XZs*ZUQ1J|^E&UtG$ z5V7sHI!5~`-cJL)e8MiRo2i`Il1fi=w{@N>Ka-5_ag&`USLMoVKepQfT&$dr(cIDa zu@(^0t&m9huL-p2=fI|xRV<|Li?=WLzMP_Aft)?-hW9}1?@CRJ_)^U|MY-sL8aU6V zDv#q9MVY2_A94`RAezOFmfpR-Uqd&~!En$^#VA^4xsGHnG(c%lmP*YJVxNM^GB-!@ zvfnDnrn=fVV-ft^#K0F1X!mxqgS=K5tM1d;Re*`}TO4l(Lq4-~+Y>4=eb;T-+DwZH zEGrB`<4Iw=_YkqdfF!UHvYbx19L2mGP**J)~h?=G)5#CXX>h zHpA0IJG;7v1z!I2&h<3=W2wx>n@m!h-m2~C-C~bSk1Xi&Q!ZjNHRS;L2H2=+j`Eau zv#crzF^~?yFP{g7>z?pc{1>yWIoa|Tl?q|*r|ZF!LsCd6&|Z%*!4fs-;qS5=_q;<= zdG3S0Rlpjy%;4hRfyDJU9pRwVij8#*bhjMsDviV7KY{4tLG_(QutpSRQF9cKW)=fa%_+u zSl-;@<`;#XlGf`MdKMmYK5{xh0xb%?VO(ZBV%?n9;Q{%`C8 zj*L5ZK*ZW1OrVvokFr<&guLg6#n4UcZ^>6)sWA9~L6nM{Q0zjywlMu~hgW9GF_kXH z7Iei6)qP`II;&?EK65Yks}^;YH9v;S$HdzILt}rzWM!hQTg|Ek2QNB!&NY;Gn<}$a zEBrSETKQFORi5|kOUKC4m&eSH@w}4}8{mk3{ z!2y?d*`W!IAS4P6LxKdP>0-qroSCC5@Gb7+Q864;Ztvm5^=aF8^g{qy`wRE#vol`5 zZl*fTC{OQ3W19s#lq&r5La8}-gC@W)R6hRyBkC@j+Tgmj0jGi&xS&{ZcPSJPP6GsY zcP;J~3KT0=EVw%)xVsd05ANMif8IOzkbTtW6+!}i3*NLq<6fBjh_j_WSl-g5whjLb!N-Nv4YNE1Li27s*r@#(G z%OK1$dKDI@4gG3;8$YG_;8&k+;^;0%^&YBms^5*w@0W6d&Fz=!N&Kx%ELke~lXR>V zo7%(dX~N?7;3{m=l5a+spiLB`tlj3PcW$RnF&rRC;clHztyyp)6H@IzTUA7(lHxE< z+`)%&-6NG#2J4dew#86?AC}abGhD|#*pY_aO_%J?BQ|f=aSq&Qf$8b#a<_V)vU|X? z(l0$$on={Xs`?REV#zjpQyOGt4>T-$tpo|L5?QcJ=Rmmua&ucJrMu_@N1T zP5JH$Gn0|bMC+^>X*DUUL-g-$)}qaDtZTvZ3O|FuT+ih%>^GlAn$!x>WYAG7jF=(LhQ60id6^&gOA%4l_B6eC8Jz;inH?_UAjMBtSKS`2Ka zW;h;>CGZbH`?{TQ9?1bS1GmC|fwq4}hS#DD&HCn#% zJa=S1u_%!8p-Md#qGA4YJ@1Yq=Z>Gw&UX0<5UjPJLM1Ed9D`U1|JRX=HQipJXP$uK z%~t0DP?}__bPCH>575riX?HZD=DmLJZ_jYUXm(V6Vtz5g?WiepA1kWBaKq^MP;(+2 ztt;KJ67iJr?t0o^mEob$`Q&n(;d!k!dlt`Mo#N=ZxATF^%D#q$O!|jknrI33jr)SE z7V7|FC>!X%toTxhWuW7McjhuKM(9YL=&j;dl>Cq&?5=&w6|$yp0R`JgDng{E6!n5- zS~5O~?FAv&&P*^aS$%m6wc@DP^}frQJ?H@`B4bEvd)f+|zayT%B|1=FTEJJn_dBjj zI@j=BP{!nCq;gqspierWiIX+tE4K{qaW#7d6V0qTtZV&>JK&zj>mOoB^^2@<|6qZ| z7tcfk(Tpk3%}-1izFO?oM!^sy?~|42TS;Y_^MSLiUv z%lFXH^c9g~1#x>jTTrqC54`{Fz_Z~ah^Vb++>6K}x%NJ+r$&5dB2!n_&60gntgb;V zSxqx2k?tGZveaI{_!c{5CSi##>W)+mN5{~>`YDFwSCz4dCsU;c-*e_Ht0$Y~H{GM@ znANZ)i)QPTpx!160c2G)A(4`26kqMA>oGlH*^k@eZ>T?B=(EXK$ny&q%|YWY5lfN7 z7CoP`Mm7;2K1J9Qwxo*GV4tOdnWHk)uQW)Xq`zpphLnw}cD({x^jhL}X}n4QO&T)-& zMUX(HOWCTsH!g4PkH*S-VgiaAj$9jmelxovWWQW6aXbtST<$MntMt)Sz-K#GBQ#baW{WI}7PsoPJO-3-4@h7K;A&Qdn>qZD9%lkIg zLGU~KUiGQudN5+4?8=&x0yWOjkotrmn@=gN+7tLmw{LgJb-5!G$ls>*Ef1|@IBzj) zk!j&nWNFE_u4Sn&X(^@IJ?cTpmo7$QQ&I_fdmu2~4+>xqcPRo=GbwK42FA-AI zJ)yHdO!|ttHrjg21IF;eB*IPCs zA91(ELsd*OXwAWOz~o$rQ3wWhAw$0uF-ENJ6RKalcd)vQTR~qNKfF!2{bXLEE?%z^ zen|H1zEpO6U$yvS!(pa@p{~W9&y$EGR*@3EwiafHoBO@vXn2c=g!3X2yJ5DkVXJ3L ze*8_`;v6%uN)5#JG7Svd4o*_q=wT;KSwt;U2);B2L1T*y!7b|XGdj>7WM{(iR{MUP zTwp1;ABVPSR=@dD`SyYo-3xnLf)(gz(+6GWk@hK{osRjHeUmW)Mazj<2I`xNMp z$Hw%IKH8_PdKz~gbmU)-{-2ZNv)4E3_V4vge3U zUja_}eQCh~)hN#;Vh4|gSuIn`XFSGNK*gw8@6xX?yUG4X7)Reo((MlxHE&2B`V2#7 z@7X@4ThU>H1}px{NFaHrsGr#l}^0b1X3z}j56 zTckC1+PNN$YCHGdsBvC#*6jRFCsQf>sv1WXg2BYB*aMj=0lIUghEha4s+tKFQJ9F! zw`E4iLLE@4Gg5AxfcF}s$n^~*O(}KxqETq_w~e0RD`YZ9!opIuo}Y_YXrhkEL=$cX zPW=WJF9{yv70l`t$qfk^Cq1|e7FdpX|93DqNJY1`5RqH64*ZDdtS3626O^XPudVr0 z+lLrxvpW5Ezf@DGQ`lC*T|+u|aYbrJeLEg^b+K4IUR&*wCS_P6eM+G5EOGtMCuU&u z<&Y?|FPVm(tCc28K+rrdY2RqHt;o%TPhbqyukgem7Lr&KE|XD-bl*gb5IQ|f#EXEwqS<8tXg#F&rd_((CCIiIn`0Yt?0;`nNJ^%8MHRM1Ax?}Ay%#e&$XS_#^ z=}nk6?@bD!+DkM|%r)($VB|^v)YOt6Qt!JAg?8nWJ&jMQaT2aR^nd~v7facF!O(8M!qX2?1XNmy9g$t@_FF@(v*E!k1ekH@7o@+vN3ArnzPPUaSYMQ@*FchwZK?&_`q7-n5otr?~u>^-`< zdY%nh8yin;{>sO5#AX!b*N7+9Qnu8wi?2}LJBO(9a)zp>#7xueMh@>GJ5NVPm&&eu zBArp8Q36dr8p?V1FXUTGzQS1>(4&5zq7b^Uob^P*cAsg7p+9BGK6{X(-XYW5FXB2GGU~t7 zl9o!bby{y&u@y>^`d^Zz;{_bTJ9d@6*7yx{rK~t3F{`R);lHz>y~df>i*o}q1W0Xp zkR_Ei?9u1+{F%=k+qbnIb06r@_df>3{0Z7Ec~)|kIn?(Z;G4f|F)c4!^P^ZkV_&1G z&u*0r&!-f&+FN|8kDi=Xf(1Q(H5$`+@NHp}56wBP>s#?|BOKU0em5Ci(hfV|!AEuU zPqq*jh*IT38_dMwZisiJVaxi^k+bRh7^Cyy6_6Ao-h4Snq0*^UT(v8Bd#B!POP3vU zctyO91DR6Y15L$}wf+}jG?I{c7I#Fs3?o6L%R$Vv((j1dv28~h%lA1vk3OJ%yVWgr z>5xe4H zpu7?0Ko(ea$5$`19d@+5=JsdExE zXS#K9>e{!GdDYP64q}QW0~(8x-?33|->7nRUDPJ}?&G@yKcj1iZ|HtRKz@)YaE?lI zS9{aY2^uL%PB)SIVWEpz;=WaH@3RG}=PxOk8MML?8;#2Y5C^4^-}v5-<>Ok6Yw-iZ zeKCD3k<fYr(w2g)CL*=Ed^bvX>DqNiu_H7$_J@rpB8Wr^xx@ViEv?|0hPx_5aQ0OK*fY z*b&`7R%lS&UOVudH$_XPhR~j<-W7K8UM*|!R^?TGEIvpV(dTJfZ@od5Bg>S`D?==) z;t3ilD$VLN@oQs3PwKHQ#(yr8Pfr-*4JokpWgc`1$kCc>y$K8{=KRlTVXqZ78H<}$ zPo79V?U6Rv?5PIdZ(Ut(=i}vCxtO>581s_QFQgVbM1PN>>e0~k(4q0Prkic=7|930 z8h8Z|7#e++lyIzzsHb;Rjq~c>EZTR8t>(XttSKs^s#`YhxFOF$o{_hURt0P9{Q7x_ z$%Y}bVPaxZ^gQfH_o&@+)LuxzRMy&9|1YufJbSuv+T38ck1r>h@**U+7uN~@-T2GQ zd+Sh##Do47021lt5prR@j!G8PNM34h|4si`DI0qYXJECB0+y&v7QkKu7Et*^-{`*<{)#CI-_9Ve9{SBF8DZQ=G z_RK0>Qxxv6?*^L<0gL;5Ji=CJeIIeZvQI<&D({yl)LwING*IG1y1+yL-twz-J6 z)Pb0}fAa+q^b%8CQgX&V^WOE@7Ji`Lv_H_=M30-9r8{m#yo2?$xrb)LZq52-9kS72 zD65Dlcm*V(9tw*@bT-t=>&&_tW*55BWn*U#lDxGyv8i)xV7=Ci$t=A*`5lenOj1*W zds^M_3IHF#is?vYeaaE`pkeX8@ZRq3?QJv86J+W>8M$v1Ov2{ZX`{_-ie(#(dc_`! zs`NWny?v5#B0k+h+C$9l(-0KtB3asa zr6tW~8Y2H3Fg+I;EL)(lto?*39_K>`^=ywlyisdrRFY5?1e9K=4<6;?BNZCQF;GM& z#wGMJvNC^#ql6Se*}@n7wOt7prqON^GKch+c!(!XH|%zzc%C2 z^jHjW8OVL$X5TL11z^o6Dcfm_k4=4`ui7KIr#=Is)=T|xNVdS%7?4)z81~bxcNoJ8 zvaZ&=@T#to)LJSZ$SbhxWWpj(ocwY%?4TZNy!{5HgJ#~zozjnw9MCif1T5RwfV8NS+!j(6juQp02TVGx zZA2-_=rf7<;^;~h9pXMI$c-|k;_e6uZ%P93X{#^)l_K62&7o5#T%DU7|l?Z7qY8Ss+--U03;vfXuq;aOK{Q2&V zp`AY7eXCiI^YwEV2x~*z%9mYm+{X` zTt#rt+t}bgPmMeztBF>#^Y0nAzuCQ4#%{jrbt?xM(S5y>hqIUR#eKKMj51wC5TrNC zh*5yPWDTGD@bx8j1xEs6QKW_)Y6#sPSN*%dWeVoVQIFr|h$qAg-BoQrrbxSaK75-a z9z0VZ?%kvCfg+zK*kYMnH3LtjKMNFhPaWd5^zBgqYbSZ9UYrLPNmxsC|)n)AkJ1iysS2~V9u4#o}=rWiBBwRNl)JH8T7e{98 z9EvwQ>8n8pqJOcm|3)0b&1M0k)Mpk;imAEuYJdNqbrik0a2s73LCTq_xLe^TqLK*v z`kgH9^&w-BG>dQuOD6EKOs{)*n+uE)&WY{pAf}Oc0JI?_h~Q(D{gk)43bk$tbI($r zs%K6qv4RFQ#qa=?PeGM*!Tq~>Y!ktuT?81^!%A^_eIkUqgVk1^jOP87Uxs_!TSMZj z&cg1*PP89D+R@u}3)Qpnk5$B@KS}5!-D*XMw=0jJ!fHD-CZ)tBHr+?i67v+7VlzYe zFfKy;sT-*MAxV_LSD*Z@=%0kC>{!TOe(5`WBqqz&0Xptos~OG;MG!(vy$0Tlg~o-( znTw)bcPt))mxS{3ax#laM@L${_1xkFzD7O5r^3SV##<5!GPeuVOBRJF7Z#5cXu^l_ zhknK(TQA8ZJQ1DURd%uI+6X?o7vex&F)J1>&XD zFQ3Ho??cw-u3IP4rhBhTJ-I0UWD>2K9LJjG$aDrmDOXR(_nd<%!&G|?6W-I3+Nvp4 zJ&)kCg6R}rCDJ@O6Sy^nGY_S6(DEFR*`VP}vvtbV3c+CYVcwYg$bbeq1I19&-7=BB z_YPkQiH>SVscEzy=EFC2PxtM0C|ALSpPRLWE;`G1OrhKFKoe=BdU2HXYb7j0k0r0f zaec}Z3!QjqOwG*i=zPU}0k>ymrH``PAK&>;v)t(2d=IS|(ng}iE47hX!nB$T1?u9i zSg^>()*;b}h0sO@Vv2B4U?jMU9gmW$=`UTZu8BR0nKi*M}x z<*!apQ9_AT!LkA9;A-%K_)#hH>^HVL#g@T?dvPXuO{yD1{kNX({M5V<7AVduEkHI9#F#+_*=d}SF{u1)^SdZ>n2s_1*+7lC>>TV zW%74XlEp-u$@Q)ma1ydZ7O_VIv*M9XNyny&4@WIVnzJ$r+g(px0sVt?%%m*f8mPyA zAbmkhb^Ik7ogHpNr8OeDC$~UksW(7^?7FN%tRNNrKq&R9{We6<;yIu=bY%PL@4>y0 z+16K`w};AW@zaS|fh>Y5(+A@m&W(ww)^Yj`u}65zFf86GiAhiwiWhYV^M_w62Fhet zdPx#tZi@Tgn0jX5zjbD6>;;QpRgXZ_ zT$xlEo_m8)UY=;+%3e9!{>9;2J-yZ)%*-umM!0xWOC0^byEEeMiQpW4*Ux zy@NvRhS#)62u3k^ua2(Hnd{s)Yxz!SdABD`l+lHMFQV=R{IyDIZL_DY!AG!EckEQ= z8Y>;4xyAEBmpy7l5P7W*o06Ou8aK}5NF>rvpYPh41E@w1o|6Sg!Wo=lXFaN49+C#K zi8-1rE-?%Klv9DJWVD-ToKf5@gs^ZngHYJLE;lUlI5bTbIuz0U*X#=Hy%U~&u*3jx1}QJjq3VyGYh{c*LvM7E|fgZRUS1h-p2Z%79>$C zqFeXte4!S!RW`d(Bqp~dKKCZq6=&)!Tk7wly!p>VQ+OFdhApygPZr+Pc`ETP{i#!` zcIMcR#OSCOhL|0bI zx1@>O7l3Gg(VKJFTT9l6>vb=Wp@-z(c3RocU-3y)mtU`hg-J+h60vV(A7Z_!=R4Be zmRfsBmX2MEL3n>D=$OwQ9SDY1_QYQ6un`zV7gFsZSXB#7C?lqUKf?iW4v`c|v0r;i z;~uUavfuq>2c5Bw<1mRci`14m$Ufyem*|!H_qt^In-yM}#ZL^};IB+fvDw;lGNUVt zehl?=R?G|*j5}F}OIm;$S_@}_nB44N0rdX_Us%6W#5kr@ z?d|=Ps+~SB0)E%|rL6Y1@69n|z%k$BZ-~9Z(prB0P(lm+W3n*rqs7VhPca}~)j}$< z5Zc&+tU$qIIh92fC_y>}hXu2V^8BCY3M^aXv!txu{f+4lJRj=^3r=1(7kBE_SM^?K z(w~B?6K6MGKEU_)f{7y)Uqq3jg&F|(6+Lq3qcpdoQuFM{@$%p8vLB^cLahUi~vnxtX1k6`ljIghhdI>VW$ z<7Gqro3g_5E!3y`DT?W|uEUE@8@)$Z4BL8(lEr_+uhZ`_?d=_HqZHGN&IN7}S+*#L zYn;q)2P_ODSsN?_7Yq%)EvHNOSub=*)Wp5e!5$P$WEHQUdvcz&37~K){n_X{~PO|GilW@x@JM?B6|Af2GUu-Vu3Ag3rfi12u;YvtrNG(W- z^K71r`O(F>>X@grk?KZpGAb|ZL?=e~VkZx2@M+bRur4Of@vXqDbw*Ynp1LJdm*zx5 zXK<|o@#B*)_*3>FS<1IzM>0#kWIXAnYsD+Z*O}RZ?%u2~Qb2O&AtfNQ#7JdFUSozz zvuc6^_%dzM?o>ZrgbpY*R_u=X%Z}?w^Z>gjheLapXfrhqEJat3fyX)B$vn8YxLbC* zd%h_xI?spDFWmnlnK?%0FdjCeB(fARvcsR+_vK;7Ugt!HujJ7OlIcYQEI7HZMZC-& zN>V7ohp?Kdc9RW#K@Ls%E`^LM@qTGj2oLsM8A&m{qIhK+EOM~RE8xKj^Y0!g>%+J; zWg#$APCt5T6iVC-c$?>m)xv{X zK-!kNJ2{1uf6BN(rHkRHg=%iCiv8bQ0vL<1uMtK1--%V_*U7iFY zZ|X9*Wq#JdlMz>`0S&DHt;?elf|TNgnqSiUf4yj=Te^HhN=o1zFg|@(ExYE6FX`(4 zS5c|rM(`Ez51RT2g~sqC1qAesjO=86`1&)j7|%1SAi74eOM|U%Xo?7^&{heSphPLX z5jr(Vk55jKRnAjG=lwH6`2eR7I4$P^1p*&=6JaoEx3z z|UWs;Qmmre_u$M$an%kFI0A1A|8R4mLF_&OEV?PJ+1mvpd*kvvM8_8V$BogO% zL;+zVI*v;cDqmd^bikTbjemg=UAd-kh-Th>Jdq+t(_mz2vHJ!q=X|)59qGZY$!h`1 zpyw7leN;;c+OCcvS6PnWdZ>^ERzV5d-SP_$rm<(n$ zOQq1*_8gx(oAFa%$@+@gdlPq&()@#< zfqw@Zh-d)-66B+tXq7=(TTC4k@b+jpfrstyu+ITENfot-xM>?7%^NR54-!7_ySKbX zEO8S%6hr2j93uPDvl0;8xJe{~5^XYdYrMP~p>0kzmn)s1m|t+NY)alGKNkq#kh=xO zyNgKF!|=t-**N6S-1;4#6dQN$a#}4~5}kWBi!py=TqB^EkH}mv5_N2IdJ7S|n)Mh> z>NTvIi*>6rU8pN79ir!^^z^GaZ59=lvzaUNBD~cj^dt;KW=*(XOpTrx>@Wv=oiZ59 z901(jXyL)*rutwdtPySW+1Z(CD<9lkj!SRn8w1e(t$QoTmxD<4(r zYyie*Yf{g)H(7NP+lJR$N~?)T2KNu}`fcGVj(6uz+wAzo=T=+ms!MpVGMKk5v(^=7 zx&2rM6EZX8Ar|%NJW-axmt(N!IZ2V&tL|YNr~32A7V#H=gFX#-6D*;Te$+kuMbB-79o)O94xPS3pJ+zna5% zynG@ejKjg~!@|)PH!=&w@005DOQeR%1(a&hqEb0m{a=x*Ds41Bn(Py}V}DNmmvDmi z_P08g#up2h=6EkpyW9`(1Dc{J2^+Sn8m|)@^gVe=VJalU>dQ9`*?5aQrMOu#Unl0v z8N!JcLS`nfvS6L@zB1*v$>k@67n~nOl`UPQ&v)UNai$}Fd495K+@ME~?GJI^9KKYR zh7^rN0DmA!WvVKeW+6w8$#2s0wNgHNDs(7Z4;jjodioGu;Qwj%=$6nB)XmV6C3!ZlMs8%=CYEH6MxRzGFz6@asoKP;9nb7P|v zAXC=QMvmAEwIX`v-nE9Zm94)`)Qv%nx<{UfUEeF*<$MK9PE-{OR=&@^KM?tvJta3} z_6o>J<#^~p^1oNP{KN8ZeZOMgD?l-I!dAH;P!ek}V@J)Crle=)SE+do=l;wvx{rD&dJ(TF z&`Nb#S4kU{8sBYRfBQ}O6<~SrAbn7L6$e>YQ{tw+B$noU7o{kn8k>EkcQfP2yOi_= z4p}?m8VX-S$>&FxO?4)b2$=?n6g-580Cg-cZozTq_Lv8rbG(=5MY2m4KIvW~+#Jp; z-Tg9~UvCr9tgHwdVq}&t)m4{o@z~wwpIG&!l5uTK7N9s(|JqrVX*mhHqq#trpWm{? zRxhWi!lA>E5MeG5b%Z%lysjEoisWgTb}sn+_qx9dW#MJ(3FIH_T)#K`yjN>V_MIBr z5^T4eh&{*m8{e;6TE0;_$F!7w7u(yUmxMJwyO6l#`wZ>1sO0M&VWov1=KLvSlA%p>2Qafdqk#lK zQ|vQ@<$B8}cKWMp%_JV>ed8|i1!hDg!wPLs+48nv()0hmw@4GVT4bc5$f+1C@36>< zSNOUEIk%pryA0G`0kzo6tNAu0%gOLpK(gs6MNo!u$6I#Kuy)og?!JMESS2NorH_Z~ z>pR8%mAX3g&qiOyS_WPLjz*!Uf0j=@8;$<5Nr*IhkGvfG8uALUl*OA7)Ncu~L-&wT zXdALO66Wz!%O~ntejo?Ubw1|TJCvGC6+DuSbsIMIk5oSAHVnD?s5JLFH~n>1h2SN& zRPP8`Q_zX{XBc_W;UC{;eY$si1-PuIIDFK@%o-j(b!v5y>uRlzsrVqvkWRc>oUpa~ z`BL%VI65|9XLD0)M8oXf?@+LrVJGI};Va;|?q&P5vbB+qmmTy9*qm^*7x!d9LVMWj zC{p zEzMT0@}D}Zjt~!4$4IG7_n+y6k?ky`p+i)239LCFJ;(4V+X_bILpFo>>5o2t<<3n7 zr8~?JzS1a@75NI#*_4sFZFg0p1wuhrRnr?q;g1(F&JMUVnbF*xHM#0%dd^lHEla~A z`6EFbg@8ysUrw2_0#4GAT{Ul~TTi7r;^D{=b4q}Gq+4|1(~EAqnQK=jhy2kipo?$g z#kidM%P+x(EPDl^MJD(9w|G##K*6IM#YpAK$%lEWd@iavaNMu&0fKLUcp}q~1ZI*r z1Z>cg*9;{&cbf z=%ResrK<83GodWBJeU~7TPTZP5btGBcO>M=UmpWU>z>Cr3Q_ zHZPSQn-8BsMg~vHlL?qPh=(YA%79%_u6|(ijNnh{OJ*wm=3~(=23K2#qZ{%V`lGvC zqmK+Fb^`1Ae&_zj=jb8;H79Wt=Mvp$Ipx{^m9i>6cj7ad2_w;V#d@G1UoK6k90((q zYp+;$?KoUVmk&WKZaa;!MuX_zCvT2gsO(Dpt7JtoF)MbXmbOGs6QV8rDtN+@qSqt3 zkKrN?OxIqKmX$d~aV}P;12YS$VUuB(=Gf}f=r9)WFtyUqp}*8BUf)Omu@yOSs|`ES z<1294#z$^8iba;^y2U22KTU zUqnE&zcNrtwgh8TLuJbKJl&b|CwbEk)*=%8tHhYn?G?vM{PIRpbS~9WseR-RNsn*S z1{=stCocX6IkhoYO-mfgXEjLg^cIfv2lxBF`}tKxJ13Ok!JO&DLf+NksGA9rwy~?> zy=&XqO;6LKchzq2U-`rXRgJ3w4lk)K#J53Mbo;ke&xPL=-thSG_`6K(UlF|={P2@a z9WF|10_x|_pM7f^Xr6GEow*0SA5r|%6Kd?{EeIKa=C+gBgoxzV>V>IAjO^}_4YIY( zIMh`gD;6*{B2VUc;w;$G*9pC7MCOmZxfAxbDRV14W)<=gOUnJ*gG$luZnUQdHxTa7 zomoEPVHO%+&UY7abCWwWoPF>K$Y=nsYSxq3m@bRiqNP!&NDWu_HbvHY^XFT64Xy8! z^zmAQRpK1%`magp1{T-Ml}KX4lLz{Swln0z;+2z$+#HycJBw&n{wsiel*wqWsmLDJ1Z|8v?nKaoZk@W3e4Wi`*$@HmBQyGX zM7nU`?{Zr?v+_ZR!Co6)59_ebc#)K|+_2&t-i*UEh7(pfqnO6}pf1V|EjT+ zaa)66!MeM~%#zon(thNnujCr(pr4|cl$BOZA9%mq*_dyg-?TIxzPsFejff!HTU}Uqpd` zEPh+0xk}?>Y17H?c|VVXaCg-I%?DR4>iZRScMo@~nu`t9;l)**C|ApdYV*Ck= z&LAiyj?@it2%LppD;5n{5h2;}R(uG0_cVCCP`%qQwJb*mR|)r6Y9>U9=lUYZ&Y*Kx zY*sOSA#m_g(!Uj|<_7bK+HR<28(K~d=#_9;S~*vmnKR?lJcPF>i9&zx;M`5>Q(+u9 z*Vbc@MG)|`f6~J9`*-7wI8^S3@}Q6gPix zS5V|G&Q-p~OXU27Gnp#XtmVXWnN4Uog3Ml`j~QJ3-h=pHYkb-!z;R1d7k;SXCQqp3 zPV!UAxZqKa=4|qN(42@(?##(ybaC$HR$C)tzSV@U=`nd{m6&7K6m?bK{p*%!iiCW z`@;&XLc~aqq-P{faYE7bn;ZT3=05N8ZqbIah5B62OhSdFOZ$Q=ug*ZC>j&$TNr`y5 z!^4(hV02fP!dk|LY_e@I4J5$_mlxrZ$Z1B$gSR~NiKlC``oRnh1qba-7=J%B)&t{D zjE?Ln{mvZba)m=NO3R9zGaow#Mn> zy`PDa4U4CVDU2MVIQ23wOU{=0>BFnIdku(-Ji)~$X8f#SV3Vgc5EolFdidw*7;~Zh z+^$Yg`sD=|QU1qINOCIj+S<2gl_g2bcHe)z(VlhjJ=ruXIce4NyCPp1m{aBHD2#`0 zF%As0YByldS~K{zAUx6#!Ri`VYkeV>%ow3NdiPY~!?_~5wlh0E;?>|u?XN3#S4?L1%;@s6 z9UAOA&hQHTi{M_2I8$Zqcj0;*&DhvX-hS?u>gHDUFI#=AgaITJo?dnyZrP_Whn4AH zXN8?RQf-DtpBL>Da?xaQ{|g4-1~k2CdZY6Yjpa$=ZhSg!Xq+VgN|kT&-D737>k|4 zHz#>7gU=QYctb1GC2Ff@vnfaZOQe5K?1c3B7yh!MUQkm~B|&)sEXJKH49%8A!ruax^WDm!7a#;O-2*Q@*8C=3C1a^=+3u_6_J6I=lePMn0G( zy_;Hm-g^hLvt}DjMSq+SK6O!<4+HbUnHsqc=!_@4Kn)Ymw*Ey-TAYRg`FfbY zfZj;1fc%lrvglCG`X@}uzrp?~IexH%Swv*21-KD|siEESqw;1HZvwBA#{#7`1i``p^k_BeW=Kj~;Ih;~n4lu6 z1i**(53=2|J;O;coEo;;4%_uy1+BX2VECQ5xgi99jhXqD*SGodPX)XW{}ifrln>EC zIc7P)=P7mXOVeXZ>MYUm>1t7{VHkqw56n`_2lZYJ^D&DqYVnXf957yY#0}bb=Y|cP zZSzXE%hSw?Jt!%|3b`X%qox~5x|5Zx%N#O-Q(|>D=~thEPMa#~i3?r!@)K9jE!?-` z{7_LWq|{w-mP)m{X5l02NQT-eEL z27jezWgSln+|V1vNTDzHMQh|^spO&T_i*_WK!VvrY@@nqM)8Q zobj^l&eYPN-{WfL%tufu?U{Q)QtM{PFe)j2cfo*=bjepg|SY#Is^ zHFrZ?)GyhdKKOr%vTIi3!YcVXFiSP->rS$Ktv-~dA@|;(YDteRO_?)g!_LkBw zn}_y{HmuSi|HH!BrW-lOr{5<@z4sCWZQ3{DCkh&gFFoY10Ckr~CxXLolum_0ln(FQ zCHB=gSKxQ8z|+>Ec;&PSeSkd>#Q-fFrm#~l#X>CmF6)lcAG)?oKGUQgv24-m1C|p) zzN0JSx~fRRKV!`k*o8<@D&$d4-v<_T8yc1%{*ec}bO~BR=iMkIcUc__R*?DBHecB3kkvVOp+4sr4e;CIv0 z(y|Fi?5xnwE<*%Nf~6Ql3*htFTV?bP1H>s?5>0LV#M>SQLvD8JZq*5K9khF-!=ouv zVPR*B%xBv~H=Uwo(`R00Q8u8skVh;CehSL)ds0jI;WvnOA0qHIjW@4}V1Qo9?RjTj z6B04|V7*fU;wv<*qNP%}K7dJ$ZO zCQG_{ijq#Peb_ZuU4skg6vKKaq;5+ed@Dmat&!KNVCl1YQh=b(<9D2@NmjNIN~)Bq zR-Zts2xMo3otfBV{^&E82!_cxf3k=NuT^#mvv5<#e22p+Fv!lT{t0;ACqP7zyLw1g`*oyp;?k3 zDc{wC+_lJ>nVG41IRelpyb-bnxarW=h=@36mWAD*JqNF2FCK@M$BiOva!CL*$B#*F ztJrG?KcLO`X3bnPGl)@IZ!3tNFl(9*4xq_`q&m}Z7HqQw+$VW5*&kXkAjF>wF|xXr zb=H$^1VK8H6NH;x6j7qjov(nVSHSgYRCZ6pmlw-Tme!;!&G;9CMy02rau*#~H&3_m z@Pe*ze2<~Ohy&*YLzsco!5Nc7qrFQM* zYOjgQy(T3G{Vf;E<);B&FU^Nki6jzmb+rls3DfQAku|{s;a9!W+45S5cl<9~*%>w2 zx{?at(mqSGE9Jk9bG3SE5LYA&MJBNrh;Aa!4tXFnXNg@@2f0!>!eAfa%Xj;w=rk<> zaRz2pFO=!H&dH}!x~N}PNlhPP(<-4W9J9!bPjQVnXo}rnC znEjk1g@Gi5>!z0BLNl{w!oog&Vt8C6 zu{jtu70dRU3u_XBV7Z+CEwlipj|U?O>Z%3><+UP~$#|XYvVz~E=U@1!>-CgYbT8~o<q!8S_#U)75;1b*&N^lDhN{!-9aJK-#iaWH$U4sW`u|jY!+JD~f z-?R73o@Ztqt&_D5?|H8Kx-`C|Sh1o8o(vG#<*bxp>>ZUCiOKddg4-{%uhQ%ZYkEAS7WwUg&`7r%SHS zvM1ZKvrbB!{Alb;)7gxf!Sl6vT|Tpu)f2LR|A^x6#G8$nj_FJ* zs;*ICW3IaLCW2k!^^fLRBzmN)NQJFC26wb9(rQC5F$tkr;bEjxx`{e-G^02(s_8$Pxw-Z>t`(VCG%i!ey3D`261<5ic zpmj}HS6O;mF_hz2PM}F$;Vmg7JPsk{u`$$=XFvxQ!s0o1q{+3o$_1tS(pREm>dt#* z-n71xxU<)268Uwf>P#TtCb#>)NF_yl*VhTRZMj`=hIyt^I2UAWW4|u=l**W$HOoSy z4ZpnL{30s2qRqsv)MF*mz@hKeHTu=FB_BR9qQrO2+{_Ui1c!(SEy*@ypQF{N>6eCX4Cy-U;i_B3SMwT!hszDh2E`}>z+=$h- z!)A)Sk4~hzRlB?D8&!bnMzT%;`{nJ?BE3KMvWQ%=Xy-o4rmKvF0$IousVhqqO;jKZ z4)VJYgPIWi!X0d!<=BVGn421aDcHwn@?{ z#C=4CO_Ut@%1~7i1TR$cA&QgeYiW3=yVoK|gQMJ@{1DkTmm28B-^&CLrHmDy!iQC) zWe>3OK%xd+AK!jHG4~>Sa!SL+jYo+71tKYmaG`W?DJ?D6si&(*i=OsLzd0RK_-&cDqM5`NHNWqqn_#}L6)H@34Hg> zx1}|`M|_CACaJHOKux0+vvRb}#Y$7z8Kn#U@189ze=f5yjn6CP3wu0|#BO5hpDZqk zs=N1JJT^O3Ydi0Fo#a*xoARRm<^v%xm|-DUevwHtHcQNX8B!kWL&C4%qJZ-K_WPv; zzk}})p*rh|7Ff2&D4qD_=0UkxyDz+5%c=SR#pY#yc5?s0`gWa1p5;lIF3MWyXB-+Q zgX{5-V)3oj8t{E{RdDPd@v9;yq(|V~$+);|_@G0*goy;E2`nID?p?=UHLneg-3I{{ z4OgjOZhaYSHl~kqEZ~;S{xbC)ZQ3Z|%zI+zdyu2cGOPFJuk%@uB^24#Stzouiw&wa zX!_eh)ypqYRADyNrobdY_-s&3+bc%t@@o7sKi{R&n4Mb{HYJGIspy~;Q88q9sw{D6 zVT$oma_3FqQ^X{}5T=mCg*^_o$A#XcDuQ>CI|angt87HFWM%f(|AtKtYgZQBf}Jw! zubMpzKF|C6sx6JJKQPGZH2jHcpm9Q|?1Cjf?-8#53 zmkFEyFnH}@5;QXFyD!1t+Bq*x$a(uW;ve7z&5(Gdf~n~fj8MHy!!2D|Om4`n(`G0C zv~2H4Fuq&Pz^^Xe=lhbOrmj0s3r4$5dxyTyM0Mw=Xa(1X#71>pfSw2mL{OxlAv>6< zaupi#x~U6;fNm zUF2d1SkyLF8!(vxbv&v|%M4DA>)$e~4s0|`IwxVt4=$&FYZMN#hebtmoabHH8Rb4Y zZ)$Y?*(&|3kBFM2k-0y(l5(C_ujyz(hN#JY+A!|kY0xT5=cA4JzA_SLd2lr3l+=1y zc>75m1-AQ_Z1?wMo32QD5O}??_&w@K21!Ef36F2_)Z}!REGtBd+)z&FZL71T#qZ$Z zvL>mvu4=nkqWw&xw{vG^8u=|L8R+9A$YyP;zcL1?8Ce6Jt9_YTgO&b6OM#lZJEl%V zghY>|czaa{EI#pA&FMC)illiTmIPkj!jCkEQnjqH+rl3n?S7Usc_!xZ>gRIrZ{Pts zXS=wbro)?K*G$G2`!Jg~h@0niUB{5d)qNhx16lFSO5sx8%$!8SmWD@Rf`(f5uJ75^ zPmz^OsfZ4QrVo%OxfkRs8XsN!M)zbaPC^TQw&`0nEqWdH+hqO->-20^GG4~dgg2Dk zh>7r7Y#L%viaL^rO^f&LlV1{yAc|10kn`XGRHqw3j9pO|GIA_-aLC1T*TdsGqdF;DxjQF`;3m0$)K%!i!~Vwx=pJ0Cxbvm^W%b%U!Fo0s4HOPa@WzMFOS<6CAwE zHo+uE`L$r}mo@9#xp`Y^l+Y%lVMRlr#O%)Ug`OviZd412MlaQI{0!074Fk;43~_0R zY4p$82~X`g*;13l@@|@E90clG`$D@SrgVLaUl@`-7|P3K@l;&AyeZl$_vc4%wT1ly zWbV{a*+`plvyb-oA6dA-8utC(ekyLyOpsPQdR~0*2fH8$ZZV>Cb`>>!Ksg-Y&C>>7 znI|$$pB*KY=9;u67j+;EvF=z3Nj)_!^x0R~BPa_ib^X%|9mJ$08jcGFHS|`sU@D-M zJa7I+h^z2!oa~2Xyz{sjHd0H5tCmArR(UtCK;eF~X>VUoX}DG|tnKl+j^j4|{8T(R zA}$)cYfqm7yC6u#@MIwC7oj)E1gVaF)HGcR*R0HKY2>`VyQ+wj0a4R5g{hV5INDpD z8tg+d7Kt$#_}s4vE^Q`Ne{1FdB9Y*Be7{w^Fh_kinxCC>u-pOZm(YYZ&Zx&n%; zY(G9<_Ip}Y*0AmK=8cyIYW(=dV4NVUno?-kC| zCvNo1tjAUOFotx~rA!aF+U~*xRB|gEW-&EHC&6#I#uffZlEkG>3Y@H9Fy(sO?&m_C zO%v15s*(FJ`Xki*Q}_TMCs5Rw;F})xU^?I&5>u8p4%L7W)vvX#s_5LdpqA>lu;hQc zk)2&rn1N42+l}<+LU%Rs~YcM}s^u=?FHwG+;%OaCcTmz^o)0X0vC z49sH!H9JhiSqbdy-EynyHW!F9)gpCYr_QEVI=$qy>QV!OlHCAt^)33x^?hl)`$%5P zr*3tbXj6?Khy zv)-p4yM8wha$y&}fw+B^4ZV7YyMrCKSNyIi1VmEskWh9_O z`@kwXzojC~6HCU2Nh4c$NbBx+s!yJun~Y&d${Dji!M-$CS6F&U)_$cWIR&cB2M==% zp9sUV)}ujpT|Un7;+#Z75WdrpbG_EV3_rHsn!zcPuz)CI^&jqBIVjoLu2^-G~;XlJM^_v~KV0b$YLV{4*5>UAtXM z;Q<^u=?1GudW05AI%-ZzdfXrkxH4}>0~Uo?_y_Qd`WyIO|31-?$q9+Ga6?osh8N|t zJT6hV_2X%a@H7!PZvU{P31o8ItfVxjZl=nJbjG3o!p}7nA3Oe&A$9VvYaZF;V%Rli zBMA3audO5&OSON&1(s4CcwJEUcU7bz??arJ_~*UAnXbxi=gc{=+VnUgKBPI>as=oy z^ogNubZtUipUd-NK&k`7hd9344-0fr_acrU5t-k0i~WCms013>Md7?Noin{|4nZWD zNfwe`1H$q*t{ZXhn(Q5pzXUWLoXv&Jd+6yoHJ8mntH2DTaXHE9NB)$AP_K8G+H2G zbW94u(PCH-^p(R~2Sk6B8 zl(SoUN-1^LN_88&WcrA_;W1}EscNy_5MWwI?Un1ca;8@DJiK08bjVgl)Mxk0Qd1%| zbi?++5RI@<`csANA4QQu5$KxD|(Ufz(5P{R6UHK(Q`K@H~!Ht$xvFVVnUf zKWPd;)q-M9hemW&?Iph`4gq=>6sw-X`}ckPy!Iu>?JeDX-h)JE-Wg-oa`T;z@$h_% z%+5c+PlGQ})m8$hf0J_Bp}~Do3&N6^VrA<$O-3NCP1B8uPnQ}<#Lek->lk_TJOdy>BD zx>C9nDxtiB?qkkOh?s-3FjVBDN)Z@sdj{`p{7M8GJ`FE7^KZyBqt8E(l=^fe5;ACA z`aO0C%&ThufSs8v&P{-xCeHo`_y#b%$*2s=9js64Z!--px{A1|WFbMn0j|C zEo+edGOgY^>&Ia-nVSD~*ZX2YIetyJ?b~Dz>6FaS|0r!rwS@Bg?j; z0?Fwf(|KvU_QT&llFqKQQrDX%k@(2 z8k_ub%W%tg#iKU)e+24k11S|w*ou+8boXEBzlcTgVZ8hlvnz5RwucU40^AX*aR~Y1c zkKRTY3+FL4#{2C$=y_P!kMB#s_>!_iH$8G6X)C+Z>qKL(!;ehs5ZK*?VF^tFk56gZ zW67M^7Dt&a$Lok8`XSlv&uDnCNKx~5l(UTh_aoBl~G{?n&{X%}k9rND>R0L`PYG9VTLBBOOkOgp;edOv%YZ0g!@*7eOu} z*@_6Q82js?ku~gls}1A+&ttYps&9c-_HLY~u^UrHqVwNFbEp)sk{?reb1h}dUbf83 zQF1MS-7F!JeauJ5#^(ndS)rL3d~yM7Y;7Y<3tAhdKs1Jm8vo5NGL?8Ys=&) za2Rf<@fHGC(^k`d2O@IPlC&Tu^lySWuJ>vS`|`l&wOcU0U$;)K{9o)s}PUfHyZJ?Kaf4^KFvOUZ%Lm~>xg<}v$P zxs1%TG@ZRx6sS7Kq%#5R*S{Qcopnei?jz7u12Yh}Bj@1W6^61?4)A5igQL`DPa@IP z`jCAsvtV*~hECmoDo3zQ6(88AGIct~VQ%$Z>WY0RlbsC?@CzrJJLmaV?`D(6D&f&U z;>r&^06gzlE00$|Dt9DNV@^w0nqI`7nT-Ag_~1hHwG>rtobO4o z8~BJQx!q;S;#KF%GVjt7E7#7K0{i>^)Lw3qYfoay(q1S<=!i1@S6|~Eo?Kj@Y8q_7 z_$B2@1F3RBxvwDUu*JL8`kCikSC2;R9-9n{eKbyxHj;{ZG6SE$^v9I~=Puv3Vy#>| z?{w||goQqo&44*@Bj+lmov3ei&k3VG%w5PNeH^&DaTp1d>iB4tfQO>PaRXv+ z66dfoj8&yC&ioZ(6Le}jINfmcl0(dtl>*HwmgeAEg@Q#d0s7w!n8KGXsKi5JZf3paBj7#cWpLQ9StN_9O1twuI!7$K-|=@P^3JEsifEra zA=p04m$WW7y*gHRb2LpZEq2y4II?od5F|oNhG^g-CM3^epLBT*^gb3>FE?{ZUeAdA zV7)7L4l5hBF~@IpcJQ=dS+)t%2?mn5d6>4E>#mq}RV!)Q_i~3;8NS#Sr>&X|2fNU^ zD-EbIs>&Q8=y21XQpwi2Iy=y*eFa6U?b9+ad<6X7HbmH&?O;;*D9uBg*Vb2VU*~%< zhAg*F7>J5BXfxn>TfFukY`?HS{*coztN^8G>W0ZsPMO)CZ%RQ-b5+? zc(kl55#u9hFnmC{8ae$&U_?dZYT#pvPt{g*;%#Bim@#Ojzg5>hPORdnwZ3r3y6b~A zVtmEX&#}V$xmdu-D`IxL7w#$TA3LmyjbQ}Mjx;O^g}av$Z*&7YtV;byou;FGA+1#8 zp(SC{NsV#E12!y=U)*$;Na6J_Xw6nk)xgj~nQE1;N1RH-CM;~EMRv#HsSB>`^kQU# z0CzQ@GiV}#pr@6CW8L$#mFMgmpj1sEE2u2EtlskGYzvrR}JOK@USZc zKL2anvr}T)RZGg8UhPpW9VokWBVW(F+YcC`#!!(3HMxG7O1E29%`Vm`3WrsUZwevi zuVyIqQ->Co?QC_VLL8t5yrgU0++0fb(XZSu@#c1xRW^y`j0TBt3>){Pq7~XbA}fXL zJq)*6&q<^qD;9+X@pD&qEjuP1cd|N(vov9pDL=Kx#&w8#<@iK`sAxfCpO-Xsn~Ai- zg=&}D&vZ?^js<2iMl{jX&et(tZin1xq19 ziSTE}=BACxs=2hO77T+;1&w6`@1#S6?o!LmD!zC7Soj401AOgxP-rf{VCCZo$;r&F zD3Nrd%UWo|b|#Z>mARRrckK6Jad+qduVaC$^bxIz&F!sIV*k27yj3%kuUlDah`uxm zf{-dxys1j%(Z8hddksK@ z5)LaJ9UGl6dO4lqD;6AEge`_WGBvS|yLq7#72~axLsSJ-BTLdRd<+pwf}^-;LR^x~ zzdt1RK5!&DE@H~%d`TO_w9ri;xVA@9nfvQ`9ItzqvOPHSvB}lTKZGQ|$=1c}o`Mt!ReQO_30wqkYe3%y7I+OkSkdwdL#66PhbO?Nu4QgEDSj7R3X`IKv+7qZENOc=YTrlV z^9F+>pQ=KV$-YLTz=gAVLK$i;kEujN)*Ja%)&<59Ap_ifsvuTLQ40DRF%nJ7M)&BB z{TtYjah$Br#HMh*`Le%-HsqI_cX(RA&lohOhhg}QM`TRFol@~Xz>Bzif7q;BAJ*E= z&*C3|%Q+r%|5+aIuzVctO%y9DnWb5^;qqUue<&CH-5CVk3`9a{qb>LyPfG7PYVPxO6b(Z>(=@h>*Q}7Ef1TFPhjsqQ51%?UVMcwXLp& zrEtDjBXm#&>Sluv2%)P`AL4{3{#=MY1fk5nxzT>+$1LOd)&U$dZ`9&Hsjm7^e66 zI{)Wa80H^<)UL*tgb&Qqz~wH6rP~h_2+(k+OX%hNU3-C9Mbg*#&pNNT_Iz(o86Bz7 zR9-ZxUjSSF*7Tv-WIw%0qmCqSZ9NjaVPV9qH5}5zlU}$sJGpQS1Eg!`PFEyR44$^9=XZCG8fK(YbGxh36j{WpLIfc=O9q$ee1y;r##>%_MT=_zYoW>7h zaI)? zygG3rnh@QyPt#}%aQ8|Z7w%l(ul;-rMbF%FNNrZZTm+uvujwcm(oi<6!t*^=xA3P{(`XS^LJ>s=w7OsCFZ|WF6+K;P= zqxN>?higUP(;H_jmQNw**|UsS*9miwTS6PVN>Xh-KIH>%{uhmSj`$>g0_tv{C+Zgn z4{72U*Wc8Rp~*x6i0+tVOTt@iQFm#4H|2v%@@m(Yx5jm$Y5n$Z1=!g7KGw4jp95*4 z441gfmxm?N1f%2mZ=#B6A|2XcGw5(sQgV{=R9$Wct3A8-jSEFGE`$X~>YJmyw82`# z`89SWXGA$}EtvDFpk`!eap91|jv*+1GM~2wq~x*R?1?A=E7h*{2iW&QvrJW6xJ>=e zNi7^Aii&G#=wlXDU6EQ;FC?FJYTrwliR>Fgei2Chox}ZOw<}(KOZ$3j-=pEct^R>! zyV~kB_MXd8=Jl^GnWE#Oe}LwrD|RH0Z0NqzSKrkY-IMXL(qG@RSa02Ao&#NCWS>3F z|NrK>&)=r$Kh)K=nHePqKz+q$!6U1u`HPK#_`W3%raPjDdAE-};i=Frkq<@t-xe*K z@2%7g&2B1H`y-`TME_8(Y7T3yTTH&qEndx?!Y0M485Di*!kp?XaKxow(4fT0YfLR&p%U|g?ou6 zA6KpO;I4C|F044kIg5{?{nFv3Px{Gi?P;FzsKJuVjCD+(EqB8X@Y<|1HA18mpI}tA27pG!vPyDJp1*&IxpbzKhFN@SM4hLqYiRP0fCDLd?kdsoy1n-} zzEK_9#pQ8@(u}h^gV=*rh-zhI0PQwd)82H* z&f=FB-ngiC*}5d80R1i?NsHS>eeg{~N%;U2Vv<)7le zED~&U#oHz4I#boL>>>EeFYT?KJ1d5Z;~nE%kc7m~zNu}ti?GB2m*)x#Lxay?eLBd` zesx<-oG`z*%%qhS-u9X`5ZO0kPFxY=;AcIIIHxtnno+SUw3ZSM_Ql3S{O_ zo|H6{ERKoUm)dES^68gaP$P7hTI`^&@u&GvXgaGKP9HX>(^x{?x^IFSHKFD-T3Sy1 z2Y9y1BY9Evx@A)`YyiP4GoMhM&?89W6~3%KDw7m$rqiaM;>s9Tq}#90W!kcit$!;$ zMsL+xs^t0BX zBM$M6gPB}g5WXmGDx5$Ukzbxv%HbHfT9`XAX$C8w7*vm(qO!Ll}zPZ^iJ9=`!5l}J) z)prP9U9k)adFZznWG$O19LOS_yfb;H9wUYDMG;cr7@DWNamur3`h{`Ge6sr9`yb%A zGGVr*Kfr5I$&7VLxxbj9%Kbmi^}Fq1G0cJ?cswla3cU3Ftru!c_s3RsV~`^BT`Mrf zu6QxKo{qpl(ZX;~>qIkKg!_ei)9^VhLy;hB&%S01I*j(eMI|2RpN%~7eLv~G(u_c3 z&USxx>jwxw%HEm`SAl}r6kNieWpTqOLX(!W=GM});)bUieITe+-}@sOnwHJGp!fZr zaaEmuBI+r0{JJiFJDoZ|6OM?1+>m}v)_u*1@;`@&olenx5pD{xc1vGc@#B+wg;QV7 zzyLDqVR`%R+@*wdF{Fxd^Qa5IpqHPxix|>TO&u@B)uoe-0}Pe;s|rY6vZCb}T-YP{ z{^*9p%~js7k3Pixrjnv*3#M zyZY*>lM&))`cxKyvW$JY5Do8eSfdydq6Ybn^@WSGP)h*0IuLbYqx0=}uj(+vlsl+h zulM0q*%8CGs8sIc85&gKXRt2-U!6DitDO75kdHheER?048N(WDoY;E;GH6-m%ngDR zuC&(Jc9#j$cX@pIR$+NjCy%I<58LKHPcvsIlq2Pv=(8i{^3XTB;;6WjE#E6b{xxW} z?HcUc+uvsfd|PeO7NvaiO-l}==05+e1`&S_TJ!VJq$5vP2>3YVJOMRuaun)|o4MnG zZp`W<_DNQN!4zOWe~qBUv{^Cp3XjHLT}+^{6-(c+xEyB5zk(*Ow`%8BQ(B1TZwvp7 zn1DcVq-76Dk(=Ly-mv&x47_xXTUSa=w^ety^PLJ7s;PaioIY75AtkfZYtyionW|?v z_~-j4t#f773-A$LSJcRw`NPZHy{t-u#`TF@Mv=rm>xG#Y7QeExmfwUpunTG(`~w(A z2fo%haQpb8lh92K^MP<3F9HZF*(e<`G?m0NXYPmFr=PHhT6|EOUgnEMs+rU<@Ck+_ z2`Y@NurMe)N4!d%ex8LdNJ6w1Y)!!+`g_p?n3b95)$3>RM>4>^=I!k|iD`xq%e#fw z!M&DLb$uL5p7FZ)gQ7Rw{i}27^9?II?ONs{9b1R@as`ZjM{C;e=3EVS4n$ZCu(a+p zoGh!U(!WQ{MWOVzHi} zti%26Tvy`jy((GYIER*8P&Du>$Evv20BcV8ZHQCqMS<;HGK`MLd8j$ggX;K|jh?f} ziyiM$B|1A)x?lyHm@;c0O)o@ZlZ;Uq(tw;hLzRWb!MkXxNWu zDhmLLq^Tcj?pl@40>`SfkZA5c1>bCCA~kt{Ohx>m>4Zfy$w3uJ^t`BLw_Qtv^DN+d z!UP+0?qcCUd(sjuly_}IZ*jf%w|)vv8NB*?C)dG~z%mc>>6k85=VlK{>#r^wR1I-H ze!iie69Jz2@3{epV@mj!gX6z`$qVkVw=Iy45YMyOThHmZqq#bLlT57Ho3}0{#xj_fH)JZxr%RWnvT$02+P;slC0lZ9`%_&~P+Asr zt&p#mI~a4QnagV^@U~_ty!>o;32$Xr>&)Qje=k7?3KZVvTD|E~dkc6}<4*DRHzrId z8;;qq{itEP@;gsjY)}%>*ko|=zWlm;Hu}BEq_10!Y{u)?>3m@W$rrQ9?%4e8(`AL% zMvjk*8B0mxneHfEi!Y{oumX)FKX0LN-&5{|z|kJv76{^kjmMz^JWh}i1&e`0M~ z!EW6ek>gUau^VC26ks_#gui0E)-AKtjz0o13-uBf1!+0HX0%Sai=58Q;G4dSB;XF5 z^K;FJ>L+ywAT+*wD#Ygd=u&UVnFAJTF@9ibV51$=+uf(&_?%LKbdgg2 z?b;H2sPY=)mW{k0X~B+U>hRf3%_undGZoI8{%Lt_<5_+GfF8?4?E4`(zEz&<&;8ag zsjXYwy+NiAhy64n>vW*oJV5!;zz56}-w7r0Ie3pH|HM1lpbK60&6~Z(@}&7@EU)|n zyv9v`5bmatH*zC z*;SL<_MCj$*HM82gs}sytf(C49UX z*QYTwr1;J?&D`+TU1g6WA0iQ#gHAC%-@PX#r1;5h{gOR4KM~7#Nm7!ZG6VENo7Y6N z5iJ1HZ(^^Gy0g=9yeZ!M`y@;QDzwT$LTP}5Y}a6+Q|6<@Zyy4zy9 zLP71y_oametsg=O@8!Tx*CpPZ)cg{q3F|gi!BTPz!=df%=A#u^k=lYS?5ptDwgd_K z7R@XDs4x1dd$C|SuRl-RO5w?_xDt}lC2YCj6bfC}8gnx$5jofzA zdYdRl|j@D!sCl`2BNKAl{sOA(@cAuLt;#Yp5g zoitzRoIyu>xr9XlWc!APS1Fl~FEX@S@0HXqu_LNIAX=~!k}`Il=k-C|27trLO7z3E z#L*ymFXQOz3|eOeJc-b%!a)Z;-7nb#mfhMZ7jOqaCO_#TaXxn-p!yO@b(l*#n!eki zh?doaeC>S86va%Ci3~1s#VkgSiPnAD4^h9>D4VL)MAFdMUM0Git{B(INs>-uX(9|G zjOMhMlfboVk68{@O!_vZH5o}c%voTG8sl8yFOX6EkTqRasJ&aTp!ZE@d%nwxB#|+g z+*u(dy&6}to;n4XF+#84QJ5Ox&oBKI>EOM5e?4>CA4OOIqyI=b{131){tpl^rAR~i zL?A_L_b`4HnGbTQ$;`gA5N+7XJyH_T+?o%|w;po_zjYoP}&{ znzEle(~N^;iN|FUcntpEJ$s9cVLN-Xw$!De9RjLzh;G7&2iuS81%FN&d6q3y^&`D4 zRGcvRwYBq0%3{-~&wO*#!E7YLX=GKqIyexNu%sBRH`z>sBeU_kLp|yEmyr5NsPXCn z|MFU6E;9>LVV#$I*cIMRhd7wpWFIy{>KRp^zEt_~!lo9xR=8$>aBSzcDe-$9~Q@$_4qB zie%!X2Cjoxa zw2Mgk;nWCo7tQRpKRs<~d{oy^c*$e3@RfL$^RwA}v)U-#z)#w>Bk*C@{IO+7$6kAf zO>@&`k*Q18joVL|#j$>_<0_4SO>eTg`fdA?*42^h^_<}GM&30i>z!|Woq-rca=p_@ z==J<|*7w1ixQ%j;Kh+QGo7Gwtb%=_>U#Yq#tVzbqQH2unoR9zC0r;NCmAuT|dOwPI zN05Om77{3Y=|`Cylm;Pr``ahxVGMeXy4RwsSgQS2UNL&buwYqp;IY-%pJv0$qlk2q zK*`MImy)+T+EF%`%G9t`iBSL*eIn)8`JZCT{qr3T`Mz3(lDufuCdN#KXYq55(UnEN zX>0&!eudQNu>m|_(!*h6C~mEBp3vRpquoD7mmLhHUgspYM)&vaw;$*1-~k7(Aygax z07RZGX;)S2^HA?Nn)0TyDakHkn3R0RQ$Gk$p_Y|NPP1$J2gERx=<5r2o}dcf0|tGs zXxaSSf`*u1-%Ox7Ntz;2MSa45OMk|71Gor)H!g@=d=3s}UHcOq@8gwF>CenU-NSOL zB*xM>y6$_?KM)?RDb4zXk~50x)2BhbtIB*EcMTQp_XZaXxz+vfTCiT@N=11EnwdqG z8K(r<8>qWkBcBn--p8s78882O89q1FDD}}dt-Ie*^22r2&qxFy502Bi)R8w)+GkR0oz_$24^4V zs{|{!XK*XUJFgfrD5c{NXj=wp#q;By=L7fg>#`ti34&)X zsXH;2=mkSQ>TZMNh{QV)xV-}{)NZgG#?&G6@*)4U3F5ymTUd$8JWjv% z&a$Kp+TVTOJ|DukOvR>rKNBU}!?B+mSERENt0t}BGG>~F=`4`$`3E4 z%^4%>8p7%lKO4$8sTo{qV>44{4_>#-?&c^h`hIjdFC)?(Q0*T@;Mpl<=u#F-EiT9> zxtU7F^_cihXQr_fojrHR=R`do%A&kfAA8xzv4a(^E3UDDk+w99u+xe2qKTBEBU1+? z>0-GUKVKxlAqA6i3obIc(>q?vRqgeByeVZ3cSM>IY2ky-{k_GDJU4?nm->iFIb^es zdf7qh$zpCXAhSqQb9yl{J#goC5PO?eg>75BG|cVhQPL_6a`G%mE<(I~c4Q}ojyU8> z%g`~?VqHKwi{X&YsFfJU^yHD9!uH|_TMWt$I9HqQmIrbx+*!;uh&vl* z>21fHe*e6amZQk-R-9OOvN@ z{|Jh!79ACc%hO^gLmIj1b(b8>%tT`~ z1>c-mZVX$Cn{ji@nSU(%CRVTCY`7aa>UV%-5cnT^WS{$fC$Y?Tej{NCpX(DYlx4}> z=b&`#fJ7SP?DJP?2h=9!d@?d{@rbSPR?TD9^jQvfBFhoAsl~fgjO&-sCk-#$pO&IX z^aMqQt1RvvimkQ$j0XGY`ZcAc_pIS-9lS0ezyH>IfOD{NG`23_TNM6l(o8mSOr?bx zZuP5cyA}ISK%B4f24*tT;2~2Ws4eYt=T!6iWw@o+mFM{}9z|4Jtl{vTsHJ7zh~3#6 zecjizSlV|N$2s|zq%|{>*2jU=+}&G@*cAy9*6AlTb^DJuSiJ~&P2R~Uc)CdHPO*fq zm<9zUo6|Eqp~VbMYwfIZtYW4^9XVH-O=Nd4+oX%$o znjG5zBU$$C+r^#%gWb!fQD2u}jmsMJqSSKpp{3Px<;Y8FtzHu4H9jb3ahd;%FJE*` zm;{rTmU-dM)GRhszyAT0Dg<(UAR|uE3?YlJa)y%%>TmPcMxdy+_7WNPj|MBJRa1_~ z*P;F86aCX|AK9`}!8oEr&Q!H#;kFQ|lDf(sy@KI=7-qNZc;lCy2ZxNK9fuf~h{KRj zwpl#qMcJB@b(P`x9^{v*8qxTK{)I2vE!O+_gWS9LZZBeN%tEQ}` z+H8gWvz~BCPT0@S^j8g?vbt7|jiDC@E^9dp=9R@_0UBM$NzpK_DG zNIN|2$YeUMQut97xk)6=omw7~)g>1e`H{I-&lqLLHK$wD2A~21PXrQ7`A0I>b%p_} z`u@2;btRr2dIeHHotCr}Mf~{D-T%n)Flz|DZ0={KU$iBX1KTd~%uxuQ$Vwxoe+)|E_`J=exlG-IlAV&7;PI=kpAz2I zLfZ6$RF_SzI4WL#T0NrMl@MSWJ+O~u`Roby{2-7-;6b~l27`~&_pZ%o*Sl9E#}ga2 z)%Ck(4}w3bJ9J=I{sRV2`0Oz$bj6wNdetdE!6m-?E1DUR5nuBx<-0DH%|#b3liz=d zY)DaY{~vaSUqV7ig&PwZ^<~YUp82ufT%j0ZNo#4O)w{YBzhkAn&fB5g2>Y&0osffz zGgR6(Liea~K4qr)uv#YSV1}jGRHParT)Iw%D zKDD0T96inv+~JQjN_%{em_tQ@rzP+5IekjU5Igafj$W@VgThF@Gg@miS%(Tbruy1o zn|`plH4-OR&&x}Kj|xh-8dC5K+{ZpQ(-}(PT;m<>(v&h z^n}EcMS1ZVmu#=j&8N7}Glo@W1=GIwrF_u9@75zooDZ1^UE43-f17l8lmkw69Ja)m zI}r8U7tlEs&FHMQYdp6^qJ^tSCn6r$@JGcA*vH)lHL+EiFV#1U_--Y*mP^Rh7h1kg zN@~i?b}HrM&S&0!)?<=!H+8xGKTN&#R}>5ztv!lJcL_sC!%%|K4N^nS&?y}QLw74B z4MTUw(A^SS?HRuJj;qm;x;F{#l);&uUXL1k!Lr{ZCz&~S9(VhNajkBfv&hQP&shTCfH1-!fk@gC;Vr7JxMHbUNw>Cs(dND= zb*2bYFOZDk>J&-tSGzuSkKej#?!w{Nz+QUxeW@zHc5YE^+?D4xI6-eFaU=(eol=Qz+cj7|TB%KzX5(}1NK6_^ z-gle3%KG8b)XSfaXcT>OJwx@z?(FhN z)~@XVY0+@17ahWG0x>~j$B!5~l+^>-QvCMKt6w9jrT@jBUJGRDw6%EpgUV0KPxr^5 zd3JwK<|uxf1SH>0T<{Haz7)WSs7sB3PKghGDa&woyF=C?q&dGp#v(`E!$PRXRUC&M z;U@!q{t0UBjUTJr-d>Qhe~u-`fC;l&V5}qtqRKEsqfS~aH5?;ig55+RlITU?T&V~( z%;em}=1`^Ji#EnvpGPo1#%l;3CDut{LkmwG$$24-4m5anF$PCaI8w}J$TB~ zaJ-M%)UDf_PZ|-lXCj;w9!?aCoZ-zUx6f}$;k(j6$oa5hP`zi!nUX&t5WQ!c%FjPK zWn{lzcy(_RvkyF=>W6;v=Mekt*$wKJAg2za$do zCtvkR)xm{jyN^>*g5jL&-3tKkQ945|?MrcS^p@0bh$=UVFabYhet3N16fnuQ@D6=Z zoykV(0P&-A(6UbFr|9BEahndLO?9sv6JwXX5@{JSFRtB_jN(Fc66j+VO6&$%3ttPLqFrPm7!&z z52|nr>m=JES-?o@%^9yHe)a#J)vSQK8!j6E*SM;;A0Z5%y+#a*c!28WU*`p?)!`?5 zhy=}ok%r|*+w!WM_WD+**~)Pqrx9qR@<3-aNSp|35uL{=VRy^2K{qYNYk;xNBX3?q ztuTl7ZJXdgOj=GJ(ae`(uwsx-am%NFCFv~DvXk@b>^dv1t{P-?>g|Ly0|J^HsZ-9z zO1ZS>Ou+~5fas?DeCWzQq-MeJ;po_IIVFl?fNLpLb8pOgUNMLqp=SF&-ZE2|@bu<4 z`Ml5U~SwcwKR~p6` zPjOPUHe%dKZ^;At;&KJ`x6Zc}?G8#2CA!jMl_?omHj~gTa|3*LU<45mV`}cz-;aX+ zH_4gEGkvz6F$f0>{Djo~jC#DR+y11WdeK31&WMe>ltqmnh`yBM1=6N_w2-LYv21_N z4UXbeUbf7oKgonF(-t0e!@^XH%Z*}*h|1uE_gg6h8?2(jpn7igceqX$FMxA_gSmIf z0wsN_4`YeZRdqR4XiM^UB1yImK0!h%@!e%RBO^N(sHpFQY<;xL%jBfV=WspPcxT!a zIsVz*;%x}>20q<>__IJsC7pZk&6;9{B)M(3@cy(}clXwry`jjO)>;RZ4Je6LI!BS| zTjOe`Jtq1l>q{69ZNpoacS#_^W)I|A@zC+!aXBgH42o5u8?OEodrs}WWZ5fVsP?9Aa%axd9 z$BeP^dVaE<4JNOw{N?#{*k{=vDk>yv1402y3_fBqIEhc4tL*Jl&5vo*Uu-9K&93)O zY7Q&JzAaaj=FR^%4VQs$D_df>it%qWYLriwS_>;AEsiwhoz9`ciVyAqWP*}BUX%uz zckm>N!jB_CHe;i-ZmY^{itr8Fu2`;_-g6X{w)vG2i%b2QC^Mb-U{#=1Eq!y;L@F!X z!KP3Dx5GHD$!RdgpW~{p|@m6|7O`Po2Zw_A}h!SQ^HpNCzGO|k4yPoeyL^qNc)5)VMvSbw*b%&#Yf{+{U9$)oUkC%FNhL>n7;5NXZpEgYUSkUJZXU2pS@&YVHj*LntN37 z5I?==b#rQeG}d$Wh6Z1VVbcZspj7FsXEYn*2hMlI+ZVt($~2BO`~)UvIL+U&?CLeR z+PiarCX_itCek)nwYLgEVRJUAxYZ>coVPIlGS!8El;u$!VjdaL&;+2+^+4(f@Cy@v zh4Z$DIDjW>FY#@;wb(a|%AJpFQulT(<6LA9hW@R+e&6NuXnMckn1Q#-Pg03-pea1o zwPP5OzID3Ek4r18+>`)iQiL3B^VLx}XqFIhteujVvQJmpC5nlMR*Tmwb>l!--Kd&{ zmKAv;{)LJ)PoFpXrw<#izrM&|Vr#mgQkiA(LMKs$`$!A=XLM|jDTb>47~qt`j&dE+ zxrU}wcN+2Hyp^A2 zouSMI%ZK06$9y_PcTW3^qRH*vz*PyVSX=0OIeTFR0x~avHupO&bvw=%00y4q>Rev!TY~*{Qx<(=)%)}A-w_5>52kGq2ad*yavM&JW!LHS?LoBf5o4Kgd0rK!^+K=uT zmf+;`S)b=V^e_qDn9+m!_hX}}t7ZHzbNw&acNiz!;rpkVZ%`icckA4nuEEs|E~0Gk zu`DA+QnNg;eig?cvDQ{0(pGp#SfP?{ybFrlXFa}D*GGN7adw;Ejs8OvxzlKKw;FHH z4k2N-x}D|PZZtnV4Zs+`9$VA;9r@4OBYqQ0yPPD%4BYDxYH2@`DY=yTOSs!lYE1%0 zRVe=5L#p;aEzNuTVEe1PvSrJMc-NrUDzfG}1i;fGB_|v?I|t~z9omR;>D6e`9-IRx zZK67H=qBW~^ zMqfyHcz>^~x7-UpwUU|UTWQh!%jHq>gPJgCSNK4iUWU78XFSeB7v?GOGvP#;`j%<$ zzT$mkEGVW2qT;P7UwuMS+S)~ZNvHH-RN(l-FyW}@FAR8XEvpo2AhiS=<8Z|vW~Z^a z-5=T+_oD}6N{8Hrn|*&;(t=-IYvua6-TkULA}N4TXyR^}HE#FF#W)OJQ3PV_Awhbj zFMtc?&y>4x?+70eog-T6BZR0n!zs-Q(6_0qJ#q<>G3U`yYLe08>12}ra4ci8&sFiM z&o!y-4<80tW{5W>8x3fWtIU|eeK*RXORo#l)uogFHpF2@&TOhDx!_y2W(y{OXb7)% zCc!YV!a8K$WPb%OGD>yF-BZ?#q<6pX&yK_LbY+1n`Xv87wWrF~D{5)~(R0|o%9h;n z_e_#V%-q*pP<>Z`JQ4@f=~iVUF*3cJMEkRg7Kbnb5@YwOF}ozG{PN;r0+FoY`Cje? zU^%SthuSD%SsRg`x2D@rDI+V$1r85Pa72ATr8hmm9#^ss`0?Qd5Nl4}r2QdIPl39g z`?kmhZDvf6N6^J1%4oMzIqWIQ@5jE$ama@N`!y5@NGCUTZl8wGPL#Tm@@ z9nF?Xl}r1tg+(D@vcksKcR7D}@XAC=ypAj1l$N^BSCl(JVic!~zBYjVyeFah;g&tD zA*LE=?OgEr1)yZow_oYF%ahCT5M9aN$#Sm>hpentq3;Nd-|A0MrgXS&%UjapDa379 zgc25Y97H1$3k?vkGEHvyvWpG-0-^1(@pIi++dZ**M5vq-BIVSLu6p}E~Uc4W$$0Gx3KS=^NMRh=>l93 zQa%=~Xk82ByMm?wF=Di=xlx<0sSRWQQj-k~sy!3p{iZ*rj>%IqYE>fmI>$eIPyhFV zh9M@sblj^pXV<>zkt4*o)_$3uReY=~p)q-GQe5}T`*L@azNP(k@vW4UQOciw%r;1U zJ|I=LzO}>PPE?gl_3dX~@96m2TcW84`jRQNmDVEi_NP-;lMGB^1_nUlSs|VV&d<^& z=ei_Ce=9CDl$ZcUQD2--qMx5EN>9LY3ZGmpnCHM4hL=s!q_%#ZtVWZL=zjro6Qr zf+M0x%41G&DA0xQk0@Y0uwrXl6|SnLl_K(MDxO6`Dt-$sm`$J1;O|^uktVS+|9gLh zH-A@VEf>k_t}nisf_T?OSkRZR(U^ghvthWJo#Va6y$PE%dRVon$B8G#H|-VQ^{)$C zJfPx5U7qE+ZGSex;=Wc?086O}K))Kt*8o6eR-&xGKQ2W8C7pia2V)_vi~$fxYV&8F zrEa}4FAwtXj`{d)=3pRJr-^v^Zj|^N51nA&?g)mtPCJ49jV$XZ&+9W2m)hrP;Dl+}R1cAzb$?Wh3VW0Cx z%XJ9wc^oXn@+*|ExTjRY#XH_Jj%LNXwsKqxRhJ?BH16IWB#|XRG-Q^^i=1_-NpAg* zDPI7Yohej7#o-3>p}YIi+&u&Pl;*f(R1RzFG=@GBqT#C$;l__Ar^_R+pcEUVU@0j7 zD+o*}|F8P#tH$FxM5(e|?qabfM#V)<=uBT@@T<9Ii4KUh3kVr8g< zC2rtcgV4E-Ga~4 zS{5h^%N=E)g#L9;kc(--LLQF-%Ef@_0&2ClN^wCq_*@qm>Qvj>+4pR8{|1u!8-Hp{ z=cqk=UY_Jo^3XNX|NEn(J~o`@AGg|So0LScE!&9WnqAqSW*H<%ru4yVPDZNa2M!5l zJPcLL!0jYIPkNFpKcCOHX_^&ALO1C5o`zLMZ1RoT8?`sD6d)j((o&5`H+U|T-2nz- zR1KjobSP5Nqzide5tDh?gIAP$x5zxvB`GJ!xiI$C%1`|plw?Ob&3Z@wxCGA3&8t#f zZbo8v5^;3anlt{nQ7!XN_jMrUIL*H#a;|9=Fu$E5CCoZR2^Wj^j#uDW;bM;G&%#RnA>S@VenDY=8|7n$RbVWm#$p3v}DDVopf z*~mM0b*d)K?0LnG&Tk|Qz?cZjP%T(6@wGz)KwTO zLKpa;Kde)%MrU5ydy+{@@2#+?AM-QWa`ii_@rduf;lH+opVf#4zNUt4SD>(v^Q!=S zavHC>IPQIZ2Py)P+JVzGOU@NEeW#nPQ@>0!axFk`{i*NS;mKnsLnVVu=h(d#?yhpQ z!y2#>T_e2v<1Dn{X2-x2Y3aNQJNWEpcNfyDnk9K26=tGRcIuLgN>m3drj?W(DYwn{nezWE`b;-TOC z+m85v21k`RCCW)F&an<7&C?B|S1*7c;x@OP{$R(LNRonf#;ZT+5k2DutdvAf^MA;Y zrUA57bca#TE`o8=o(4_M=Hap|%&V~-9Eup=@kyEELkD4RJN|0vdIrQbh{nNa9}jMi z-&Bq+h5u!(kS;%Ch;J6QuVjQ(-&-j#JYt`lXXdS}ZSihMBtrY`aKvX1wOeNgC3;;K zptKER<2rZtute~sxq*i>wKSNy2GwAW+14P@M|Z&=*d) zzHd1}ZpD4yOF4N^=i~TFtj3HYZ9OvzMxQfw+SPk@nKb)Ciuzdc2F9jy-MYxy01JRlB7BE3+QrNP<=hg4bcBv#pYLEP@$q)>iPoM3@dfh;MdZVrLZ7g;O5~r z3gHd@74h$nTM^bb*2CAf9tKou9EW}cY>LBNJS6l4?_U5M%wCe>5Wh~j;*zKYA?2!l z15MrUo`@Z@?Rq|}gJ@2kmNYk}K7uRi^d!0+7_lC+p6r}si@_f=E@C{t$N<}dXqqyA zaJlm;&xhuAG5xY%`lY^&6s%1AdJocrbB>Br)5$K}gnm;`s~ax>%Ys>Np=f2S#GZ5? zoLjE_WTTDGX$1dbI|E6XGOYhP6+@(*>zi+gv_(m)&f=!Jo4Gn)~@s4q#PTxRU@F({~Dv|z|A zZ-@5R;DiYe9aurJlEnbuKOQQp(U;!;7Y+H!zI6)G5DJ0JVzululv8o8P5Tc$napSx zfXWK0mQP6LkO9UqA)H!5`b2pmW+UHoo2XUJ@>Jv-a;z<_m92<$Ox3P?b>#z@8Htcz zY{bjT%AMyE($_n#Hcv-$k{5M{@*v!_;Lyq;Ge%6X{UMvEN?C69!;-$=OEZA$L^e ztPpvf_ALd>8cfok*2W4}D2j6am1-%n*)4TEetK_yI)1tUvFW6>&YgepR zVIQ{1z5r4i6nRs;pI(J4pn0fVs;e#8`FpWdccZ6gu_gI0tbFTUonSe#xb`#ZtNwd2 z>rr_i>!G=LX{LG01;dJT*QAdx<#L&j#Cz&+vU6kpG%c6L`Ghv6?S9Ml_4k$GbIZk= zEf?M->1@1z{co-4-NAr_rM-QFjs6MGC?*R9>1MHVE~@Y^#=@~T8XhJ{Vvh$gUzV<& zl#!Y5_V}2RZ#PbOGvoW1&@*o*{r`M`J=*ex3j|wa$S;J&>>TZBt2!h%u&b1X*-Uw? zEbMy?uHK`VCe$pX*V!FVQ!5?D?i)&FYW$6GT>P0R>~hd>w-9oNy9HToMiSpAPvl^- z&$De)W}tU|1($Oa1ixByx0Wn+S&x!13&YER=wMKnL-~=Sfv42oQ;nkXC-;^QIhY;u zcpC$bD%ZS^Q=U7;(6Qn!T7~ZenwlSM*J@|$DO23UueRRMv;nmi<=^DLhn(l%K zQW(cZ)=g6s#i32xw7BJ=@0A1tN)3g#`GKU|pG)1hMgcMtJ|}CNKDZhlY==!EU6Yry zWLrq>n!&>idvo53t&^wM;+p%Z-qo)VJ<7_9y#P{UC0Z^Z zjqP$$)FGWSoccpMTlaxd8T@>FPrQEe`zsNyXyi_~e09sw_{Fn0-`}rYGu007aPxc| z9y7|aDa;*rGtp%U(KE#|L4f=wf?a{;mAM)}~hlFZxGA-SCXBV61S5+qc_;|BOk4Jv|Ie{%3 zoJMk&RJoSlORHPdIH2?r{4{OxZ^v3%>e%P)#7gR?YHUBSQ84dQ|1LbH6BW)&PO{yE zP)VKoAiVpJc_%RG(}~(CT4}uo5sZj-T!Ku^1t;}0XalMc7Q3BRI&nR{h&Y-Jcj+fk`Cv+R7lER@{2W)uLbq5qF}5q4H_J{PbV)-G9F?-=B3 zo3%eU)=V00`J>Jy0KpKq2)2{Bf>+9yf#_T7;Zh(r1}3$1*+Cfk3johs!2A;7CerjT z-$d?>aCAgmZHND`zmvwThwEV9_#v>%u#J5uECs)6UN1bFwYbi!c~+o+@3ZCjIKO5s z2DQ4bmI*R*U1j;wG6h%cEq~E3e_te#g@9o^N58;Bm<=>pfqAD=Q2v;_D=_M6u zr`3}SugF^5>`iweXfU&qfZLb}#{CCRC*FI~W#QN!Ux}MJ>phv!u<2=D z_kyoscKAQ%21Tc?->EkEK7_$}T=J1PhX*SLIViMeCfu*tJs}j>0};VZz0$^DLUvSh z6*o7L=cij|73f${vuL9iyy;USnO#YX;RtaKvJ+j*@HwKnIhsTzCGXgEF!j>Q6NLt& zQ&HW%0682@;igppU*vGwbQ0klYq{2_E{zqWj)>S90~Jx-{3q}c-sW9&N zM|T$yog>q)F-drug9B5$DlY&It#0SgFVHpTtx$*QJQG`;SGw1Nn9=;ayg3`5FMu9n zVY?~?=4fdj_N?F=5_=NS?@oL|TJzPZ|ID$h6`)O#*R#hNG18sGPgMV&70(67oJ?!W z(1N35+B=vVaCQqauL{Hi+IQrz*CY)R1LFWSz%UDl-L`q(c+G6>RTtHMWZjP7ft2y7 zewat9121E$X7Y`&kzMVOB|5aQTS)z4N5CkaQN}^QBZ=zTxkM47T==OY3zBRPl*nh( z(%9!)2z>!4?3I>)=$ba~o2isO)Sl68(GGsa$sM&GLbs`%1w|F9$9H;->!m>-L+Rw) zl~PcYcn~F&T0aQ+5|oSN^U#<-W2KL1bRsYKC0Pdg8KlfSlFZ%G|7$g6IGE@~<7Wn8 z%1Y_uZ+4X+j!G*SKl|n?WwZt6Ob* zbtFB)tf4MuepQX$AL3(#UjMACQ*V@hOr)vs@$TehY&o}#8MG}wNS1hL>_^%YHkPi! zn6?w9VX*XTDpAz@7XXo4N0&l|Svr5r&X7V;biEGL&$8{>C(Zza+h}+(n=3Up=8N`-$(S z9saIk;OTp$-@u{`>YxEFM^jeO=PQlyntFdh}0Aa6aiT=(nrP!E{N zDgRPe>bAhEuB9MI^0uE|h7G1u|J%tx@Vs*1>vUeGGilMXM%V?&0NZrLQFhP>h}E4Z zE~<(uZ3b`N*}Nox@_@@csLxwmNR>Pj=?V15I#)Z|D@qwex(`dei+FK zziF%W!eMW9uEQ%+8jKvTE<8ag#r>+qCJljrXypQ@p>@Nb!^vXN0?4WBUI6BPyp$)C z)dB8#o5D3t@!X?D-=p8g@yGEc%&RJtAzBurJskh0IpRdf*R`kZy~lJ(jgj);F3sEQ zfrDU>xjRS0&tRxVXOyC z!Fs9N+`k@v+JG3r3hH@3B@I##k?>k!)i`KbosORKFL{-@0}=Vav9|0ldq{fgb_dI3 zQ?Sy0f~FT9a`{C02JihUv`A{jG+D-6gjCi64+XVpu0fz%!#~}&C2nyIG8U2QEgBqL zX4XH4b6jE?pv=7rQuSM4E!cYBM;c4cakKPyrmMikLifaieNnd;p3%+P*xC zc{gV?A@ViuYM?OUZ*rP@rD}J5-le4tj2znxhPD{gdT0a7Uc}|Ur0fi#YT};Iee;OE zoYx^kBC+2``s<5Mv3N`6PzdIf!#`#Fn2oz2ah*rcKgr8ATR}_!E0Cb>` zcwrs`%)-jX$UI4js|Xulq;B>ROX)N_OR2`)PodIMjTnMC8L2|YAQ>6tSst@zw*`l! zLjLcMXi*uBdq}nivpI1_K?Cbr2M?BT)^vLB++VE^SWk3C+7F6x2N=5ymVZj5S`x_R z<)r_sjzf_tv~D7?AL?2~Y+i*kDwjMadH=ei$xmvF6hK;XaNiHGt#C|O4?tc3ykd12 zcm1+k3((evBa$OgYA{Oes$!|QE(3*qu|}eS3)5KyZ}hAJ6!jEJ$Vv=NwYULO*$IR= zD3BrH22P%&6^2f3(z+Ql6@`_*3c>rH#U@V(;W6~r-Z`8-6zH6(A6>u86 zC^+n*=lPb`-{K*D&cgJ|P`xv05hwokQV6o&eP|_kpPI9B8l-G0tO<+isvTFF*j+y@ zR^$V}9aw~mjlfIbi1>TuA*ReE5`yTO1^uO^=nQaNM7~j4)44+=yVLfsFxoUH8UtNO zV$vXDDS{Gi!w*Ij#z~@C(-j7<7((2MoGz8cSc^+%RNtnzVEAer6i_Alr2#dZ_tZ{v)FkNW`0VuL+A@A~J>7p=&Po4C5b9dq z_*2o=)=5eJN+G@&Cw50T)NqsI6dp}>GpFh+pG8EO<55Q=XQimwsr zugeL_EF`5&mE|_yof`uo4+CM3dgG@|2j-QtqpPmJRw@dDb11yM=V-7qNY8&0(f#f; z%ehT{9p*i?a42onl%q0Lhct-BwQ|EXBrePHZ7= zL-cDhrJ~j7W%NuNyi;4-P4`;-f&J0pN%7(-16EsCWf*YLGr;w{l5dw2Y8%dq2`G#t zn1W5M%RdbtXtOZ88GYARu4ap{jm~pn`mmN=Ck$evQvEW;KK$U19KE;5>9C$(#Cl_Z zZ;!r)UY3!jmadKVTk;SRr|4YnrlHT;oA@oL@?+hqmI7xR?Gjk^d-`twuicIbAP6Bec zS?SkIzX|>sCyzFzIW>;N@Y60fg++-(88j>^QbN8oj;P>SNEJ1UGCn0=CV|d2QSPEd zRybv~czk4#5Mt=2Hy(t_I6A+ozn~&&MpKtW$W~lf(UN}01eiR5oy=u?Xtkv90x0(r zES#*5NS|R(wKu7&xm;*zmB$UESCoLNf>q^3bB}ms9SZ~v$5LQ=y0@&6;VFY70~6Nb zgr=C(cGuMLv$E%kXmSwuhcJ7vJnD5-LRz5<*VY$Q$Sin6K{(SoD{PpbqAT4qt0;2V zM!}qcekdg>gNznqx-YdHyy(W%4^n6;>8BfI2&$GoXj$q-1=3AnBrl-<8r+x8g^i;T7-hI0FF9!ai{b!>uILvtf1JDVrf%7OigIDpBluss zp*DyONin@_`Y+v>@0x~w^3P9+(o=}2Uo*?5U$&65%CzS#A=6Z!Y+4R+2PwuDz2W)V zH5RO13QmPznCZR%p!-u%>H9|d=!DBfa`R3(rCqD@yy{N&F(ur;-P0{bbwwTnAd{n} zrn~0}PU`8WrsHtswxC&WIqP*u&%PT^Q+o;wX8ScJTC;?4-|j{Zi<>!yZo+w|Nnmj) z1dpZi(?OXxNqcQNRG0h1U;OuxAt zfq(C|bKa`(*md|0jPU#sXe#{VQ6$gDTO{4Vy6iMyAYI9lH}GBE_H7?Q1A)vdA#&`U z;tJWC=^87fN6tGBK?c__HPneyoW?BwRq}qf=p4|FmMX~w(c|9K`W%JkqLbd%u<^;G zsc2CX+8X^h>SKORa}pI66_!V_H#PM3><(Z9^srw8t>RV{xpUF75yXci2LFL+py3~4 z(bzCusmZLzBa}IEB9UkBR<<=?hgXIO#QB9pM<`rSCFM9TN9Ofh<5V;KhXkQ;eXpb> zPr=gZg^i6g_%@?2P|80v=CF`nVs}6CsPF}{gU-_RI(k(Y@7LKJytYRPy zr}aum(j-MkRNg2{+>dgZ4i>=KG&O+E)Bl@q7aOTiiI_QNMzS zvLEW^o-|@YDbLxpsKJ|4dM|1Yypzi>gLB#>sn{0Vw`vo4iI7LxC<&AN-4gq@JT+S= z6jW2Bz<}?&*-R*`RjQwKIXi^eOV%4&LB##>Dzii~fTHSwIthpv37ZGFF@6!%T3vpo zN4dahgtoL8KckX`i!w2qIo&t0y%z=Cl9MpNIk;dLN0^I$%Yo!`He`ABpseOzlJnPd zB?X=bl>!-!Jbo3|#D26z&aFiYK9LME4tXl&b8s;?0^JNB@15{oJ9d{UhDY6Kavq}$ z(B~meGIOwAreANTqHe2Lf<8`G;1 z>qP7w7e1}T+iRzSf~MhrwW~?AsZ-0G-Ly8+9ABM_SQhY?A1LZPI_p&GXyOlgp4LMQgC0MQ|V?0KiCBn}O^dR#Bu|Sjvq;hU{1HV8;MwRB&4gjwzd{4 zh={S&^SSg0t+I)UF+~QS;feM}zvzan@A4OzQxW-j>pz!*HOvr1KkOHqB0_VQwu>Vu zd{m?Q=3AUwe68xa$OSDcj3e^p}7c80`YF3Uz8 z#jdfeXXFOYZa7HV+k(vkL0Y9cVhQ!CxBu|74j=%7^oeda{m6uk7&)YaSyR36%rJq& zc87kx;n9p7*Ik~VT>6mG@c5YzawUnkpJV39>Fv*lz!!kCJ&JLa&kG<~@uBn*_2J16 z#D;%exBdd?7Pzo_0o43ee*ygMpm|h~djYVg+-g^-z5u$LUjP?ohbECDr=#mb#~j79 zG7dfN1(q6#VSmqUtz~|04l2BZwCK2Ns6S>ypGgis-sW_sRDW7c{qq7Kx+7_;zBF-m zQ8Me?nRqJ{eaD0GSzt^5Cn|WK;ThWw4UzT&7|OZTt|;vGv=7*>eo);;yX^iX$HJq| zsG7EMsv*i`I=gj3<@9z3%>M#dWK?_sj95I)+KR8YzX0wCu4~r*dHPy=LC(?6Nn+3D zO72*bwx4S!HtWc#=n=y(fkpSaI;X7V>Ywmrrzzr;H_)qWy8PD^Mq_h%(=PzJzbjJ= z@pI244{i6!`|wjq$xnMT4#efEP=8n1Ss`0h=@|iQ&+j(Z^b8&`OT$jR$1FDqdbgYh zR`AX>;ptg*TO0)-*tlqi`hBN8x)M?2VA4@6v%*nfGnJBI%yI_EQ8(~0jqtx`lFz-B z8j*vU!o!IUd*#D&+N>#AqJe3p&T;1-po(=GuU8s-t*NJDjfuhL{G6r5Yx06;sXCt6 z1|k{^9(FPk@_b80uBA5#4fA#&i|ljs8|27lJJFD>f``hpq~{%t^JKuQ&h8-YgBgfs++79N**Fl#w2caF4!>i+N; zcoKX`VVxZH+y}YM*#p!G%V`_oV^gm=Yi8?sRdk&b!L%P;C1Y2Fc)pwMCq#)1UAndD#gRA1iXEN z@=I4*wVX4KPx%a2P-OyDR+HBuvjuA2yG%8LHf%q)3|{~qpEV2H5^DbvO$F2??DN7_ zT(fXT;3Jw|wKdXUhF6Vp#wcFAyo&ac%p=F7ADjY+vL^*~!zo$lZE3;3;q)wBh;ib|5sD2{u#8^Rc*Fc#=aldLg4W@SAaKAKy*Jc< zVnSU;ZDHxS!SwPLXT>_^mlt;3l-qA~oIGI#=3MnMeU~2rpF*Q;v4h9b19ugA+C8nQ zzb?+k2t<>adhc zECZb)B{Ma5=0jooBzJes?`1$f_Hx?}m91LmI%gsZAmeY%?xRAtgh>`>#;hgN!DSU2 zYfmPrVd5Zjgt58}rAMZqKbfMl+G4o4dC6$#YwUO`sf=h{fEGL)|D?Y4?s(AEJ50wp6BwB z*{ws>0L{Vjo)@F^J`sSy^uu*p5Pe&}#KOdE#tRQn6*@3S!z(CTcyn_i#pGX}@*asF ze{yWUC9Dx31FpPDIX*U{JSY0vnvk_X#=7IMR-jrY6Rm)0EhMHtZ!q}Am8O)he5Nfw zX|rxqk=dVi=zoMu_iDZ0hcWny-jkX%C9qc? z3?KqhqDs*8zN_w+uq4yhA6w)dLlC+T4Ycvwt#>xFpU;>2Ne6ja<;EA;TJMpIm(YY# z8N$!LQ3bWlMxxE)q8u`_@z5w--LWb3i#V}#WqGr1lD={WMGI})BJ_*07XUAPx-|6( zTewCRt;lltHgmPfCl~y|u5exA4E4kz(gV>VtW@?4j}G3WeW1<3AG&tx>5L%ScSoFc za>tnNWwE1WR{Y6ki^3cj{>KlgSb2Aw=eu<(>oC#M`BUPUX7yDDb-*-{m z$XnQD*B;^_;+JTX2WwMW?lSG-gpt;*_k|1hI3E?+M&JwvKM|D!SHU=Hw=H&bt8bV0 z3lzSsvI1sgX*`MM6iStqE{ZdB>ZXZ>B#WS={1m@bwm((z7(+80Rt@>Dr)p^U4iNn5 zoO6 z1`ipr_z|WX4t_LX8$q{U-+Vq@kk(rEW-d6h?Rzno9#cc)59(PB8d-MzoT&3U6-b2$ z`xLep(PEq3Y~hx!K(-*0j0lnexHCV+VVmDp%YMq9EpT(}*iP_p6x+VRLTy}}Sx^UE z!m*C~B3pk{XlnVv#niXBp3!Jr zIU+3U9n166mIJ&)p?TVu7P5Ve-!Ajm!r%zxW}ofUIyb z%Fj5BOfzP}>-GlvL*DM7u0EJQ$%9wd;q525$yIS;2|F$33&2~$bGlkdqj=iebkEc! z>zTGuRlo{F=y^uL393d>Zu%p-uh8NS4QcPc#tZbecp&c|oynafERarDRyj9ocLh3bSu?|6%I}$2NC^Vac zH9uHde;7lhtxIst8YW5U%4S}nlHCE4ou@zKqQ9XE5ltF5%w}fv-lZ3pl#qg)}r&zA5U9gXY>vlDsLjKBQSits+VU zf4K8_?aUD=8&^gj zThBCo?BaUF$}6+>KUGB~JE?1!IDH-aIqNy#{6V{KIfKgXLAk;K9HvuNACr)^vfy4M zYcQJtpY8iK`*kK=4{de!rl`06mQ6%g2l?OJ6@wdfj&C)sKiRF!+}qSPLil8;2=q z(@GLDx1-f4W-0|K^g(J6T2wRo8q|AXFEK)@l;^x zF&13~sPcC)aI1Qyl7=;h8JnyXd6F9!kfo@j!lXI8{XxR7@RT}&VzyMyd$^s9Y-go6 z;#28N0XGkQ-oNR%q?!xmpNKq1Sn!r~d@H=CrDHN^S1j6AXM;K__-jI#hf^$d7+?wE zozzymyfQr|mejcej%D6g!%3oAnCPUImMK|)#$AF*p&ALMc-ajxohipu$Q>K(N0Gh& z-9r5E3Ri*Q*ovG&_Zfz=Qa<;&Uo9id`)bdF+jJJWpNAw}MF~v_w>WX*^1LUUiqS~C zN1B<*(t+8w)~<&*Vw;WQPedi)hG7-!r#P#PVr$1#&R zm*DP@pap_MX(_G+f=h9i;tqH9ziXc6WzL*6PiN1TTsrvY?f0#g4L|w5KA8jO3NPXp z=qupdM~yBV1RHx=G)_#igWWNS;j2DuJq&#mb~oI`6(SO;fw)8mknK^Vm>yb zubLm}@n$qD580Vd&Pt9-vMLHmwud@N(fd~{h|>*V!`ym$?&*`M^}7O?N?|{#G{IE= zQBbU|FPYd7c1YSJc%<~z2aRTCc8?jekQ1zu$V6O)|Jtr>_e}*0uS9ij%gBt0pZtD* z2=vL;raV@)quw*tK(0==J;?(s(3dy-Vx&wjxk~?+-yjBGG#KZTy8_~__ z>7y&z3ceb`T0`;1f955QoK9la-nC!ua-Y$m@*q`xpcmGytV{r(_93^=*kUHOvfzD} zdWPn{u>>J#^-NC@-p;cKlCE|M^Vi1tZEss$*=DR}Zr<);Rk|lbmRTiQMFk3Aw6i2A z5NujjoIlLn_!d{xNECmn)KV1#N)*VBxtK}`Q{lTsuaY328iUNor>g(Z<5pZ~8M+E= z^Y8&;k9g(Gnk=r@a0p6JqpEhAV$}*K%Q=a^i>BqbBbqKh21bhhFdbEHY>j(!LAgbL z)bTHk?hO%?zZ#g!Up#E*Au{@XIIKAn1fB{pQ-V3XJp+{qa~HzIP4?3+!(qKvf+x%c ze2Mb&{?#!TCzRn0wKB?rD~P5oBZ$SRWY{{oT#RLJhoPybvQaZdsZMD zr(A(~zlMHp)&CcTU?1#nYsyi4)Uvz9x%(3vzdYRVA?1|1BIcZ{O^&t8od`qd15WpP z4Y}eOR=${2LwLq4vU|6Q_m?i|G1_L?qe#UstCSi{N|DfHxU1e0o0MlgP9ZYC9%JEO z%6QaJ&~}6Odx`FKv%N!6HhV)pT#6xb1rh!aj$-9yt&6k9gWxsCW6Hhe-Ue!;(P<9b zBg@nQbddqB8NI$B4^MW27t}}xI|Hssn1~3TPEkRN?@go|lUeH=1ZEleEqIe8;lWOe zQ-r04Sr9<9+&hWD>cYL29R)8NPf-(!AdYW6mU+B5Bh73(4#*7EEnQ&>YoU`VlNeVy zB6#^iA9Q3R?NV{9&CPT9s3`p2IjUvSF$wEP8|EG&YS?F~xPZx6H^8dC;eFy3EH zk<+P&c$1e%lq1_*>J8QgcB=MII@uD|5(EX#XH3qvd4-N!+p1C-KAwnv)y>5J=q=7&$RI&+}p{o;T8t9{mV-inlK!$vEdfLgp;Wd&(aXn7b5 zfPv0E%+gj+z_~-eLVg=|>cLAL7RS1lt+pwnAMdwg=qN-%pC?L{p+&fzxUR6Ok=BA8 zb8n+nTrfkrnVm~A-I!As@b=ts1*h_nV{Bz!qT*nh^KU=>gT>S{Amz94We@7MzBp#s zU*u-YLJhXO`o+u0xUaYUl5o3mlo&JAEh0qGU`az74`!k%LXh-5Yi|Cd`t;pbpO}vi z--?f8AD2k(UP1Pn4VtIqFnj<)et>gFfi=&bW`+mQdbanTXesKW%iDhLZxKuzzrPjDU1QWy?gKxpo!W|DgiRax($AQy?K3;q z|0g<(g_Qs#YMMOfUOJv zvfEj&sBA6BU%T>vb4+e*sO#;XJfv~)thhXZT5at+v;Z)VoJ3^~aNcSbO_iV0u?kgM z)(>K8Xw*TH8=0G>M8>bQ?XK;Dg=%U$P#0`z0dzI?FFMnyB1qS}+RmI{U7;CU0KE%z0RhEKVrqdJnqD z4pZPr?kpQa74M0CS1R|}auOOt{Hv1Q;U;a5HX8QnOB0UK*z^t)m)<+yt^sM?^BN}C zn)n3TfItSlP@DJ!^QNu7T7KREx#etiNrbJT3#OWZ4QlmtgN3i_x<=~5TwFD;N9e8E zIrwCG)%8)!Ter}nfl?A!&t*t8gy%B)*V$p)J{5C?Xvn+n}5mQ(Gf!GQqnAIr) zeQ+G0CdkXnO3j)~ymDET_3W*dNwz!w?HCtd*pYCKJFy3^St^s$)mYiR(=q>xC)-w0 zs^&g|+-Y$Bh)0>vqPsRXOy?UT0%I{FONLg7#0ULM9aJ4t52WGpb7=DiKZ2PG>Aq=a z{oXBBsGw0Sz9?=BhNgR*o*r6u&7xASvg}KAmyWd?H8P^mBAw@B-WLqN3rfpY`vItc zrK){7x@OYR3BOYfI-3GYZu8vz(MeA^CMP+{Qm+&SsUv+flBZ|2x_SAoeElV~M(pRz z`gKD2gPSR6m?ak!MF2$mq(F%_35DixOCH7#LdjmxJ#6|%&BYm8jDg;j6Fz@d8Xp2^ zyTA0N6~9*!O@`)DGQ*E4cC40$woFwOh2Fu5ck!htm}`Qk>T-^&{IUL?=DpI`1uyp+b|w0kR#rVl zmy4u+ye2PqUN;r=FvygyRs>O7(Xj@|d@VB|H5mKB0tT|tZtjLBYwSbbt1(ZsWCRNf zu#9tBTk3_ik4 z%YQ|VMe*B~m4@zs)0?R(t7ehw#5Coc^+wBgAvzItZ|1w`X#5h~JUY-5H1DEZC~zgO zc=)O;rx;}CVN{Qo$*#pHrR5aSULVkUHE_qW&zM?WAOFQY5>}7vgj^_TYdByHEJ4M) zu_?KY=x-o>BylV#T6fJP6yc?A#h(6;6V_y}6>L`HyA9P9Ue3aEvUzs=hxxUgo&moU zLBdI9iW&$C+H4(S`i=*$T~>b-GN~ik)=2N>=P->JCs@)tifau1c}wsVJO<81PYXFbE9`9x!F--!$ey4 zWSjLc9h#)Cx&4&l_b`^Sy%E5H%O)QTDya#Dxww2U8#wrefW2$4s8H(!7fMV}K1Q_w zWLNJHLxTD6e=W+&Xi|tF!9e+cg17%|&%^I`;kKfPl1eiLx1516scl8bgS>PsO;rDFLNl^6!wT)sYM z<90g+u@4oWmiSvxaf&I_g6pt*OjOFOtmH5U9AsjXIvWWcrAnY&lZxA>Mf-!JfJ|&g zX}L>WZJk?0JOkwDORuP^a$NG~X0iD|OJB5yc0?R86Vi_MDU9X^$wF{ELQ4!;{Lfx_dC<;dQj2GdeY-W5xuEqG5?j68eC`N(l+sxKI2XD zH_yF4JH!$fS#?qGnr!v@-#wNHBTj)+O0iU5!jJL9qLWo5xeu(0ZD7u(q1PrQVMAsi#tEEimkH+N9@FjLwoF1D zq>xJ%71>6DpDpdhqsNI-*~iA@E5iyzx;x|-BzW|0H3$g$XZ%dyC@w6)Qv8nU_TmB|ABEk7}E zTx5St;zQQR`C?X9n)CRlxsbOUvc@4Ms;Mt)@&-y%{?|uWy<3h4y_{A)EV94Ar|KW8 zd;#4Umb6ua;3I+!Jcat0DmP4d%v`nGz!#c{-Stps!y&$V^TkNaO{L7{MVOj4!rb!;b6o}Tl?M%6MkkUVxmQ8DUMM!((B z8$7DfwaiPjX<;(CyhkB zsQ6mz_U*n7uefZSfiRX#XJah_b2xiC$i4)@WcDVlbSRuEWO`(ON!nODdr+pH`&~d| zXMu2P*Ji~volNeZBX5UFMs_evs!LUFNHK&|5Gf`zI#phQ~=9qpKVr7l!?EAv>4DjcB2AC>cYaD$#sG56v@HbN&%Cj-! z&NvMo+F2`Sh?hSbt1;B|{@U(HHO=IF2zOWscbAjbT%J#!ec#_jd_Xw`cY7Sazr&}# zUNpVDBwLbid_U~(ct1RYy|mlCn#(fnmD9mcIW1?FGGyl{ZFKd}KdMu8LYHi_Cv0up zSgx}D?PL|#NL4g(1E+9%Y{yW;K(#Gek=TKhC{?q|+!ZSZOlH?YE5ur@tVYQI^E_T= z(6fZ!16Rr(?)&pHefVU>%bR8?mHCbzU+PQuyKAZJXra}3*{H3pRn}Ee9i0(oLg~I} ze`6RI-!LHeZ3GLCC4HZz#N|7Fe1Wj}a6}=nTS?4^3KmGp8eU#8Ny@ukR%p*ih2OKT zH2tekX`-#oeb=;@N%?P}mn;F<7Fn}pke&C-1Yo6+B~XpO;rUp*4MVR$B_nTNUf((z zkT_^l)+(*In#pI4|3ZEyLRYB7$by8Cez>e9qnemU_qXcK?O~DMKQS~P?C{>F>=DeQ zbhN7x?adnh!I&0WjR}QdO8>-CBz;X44bL2rQxz^i+pdWfme(49hDST=Q!&+5G*=`R zAJAQ^58D2Y-LLRmWS_LuCRe#|y19dL@m^_au z^OUvydjyN~5891tYSI5vzuP8b48)hf75cWRe}rg8Yc{f{LsAx1cKaBsh?VWlXJxIL zhiI&p?2U}cV{?%Nyb7bxxth8Ji@aSla2I>Y15&KYlTD#F!v7YZJ5yA&ZzI+!Q5jw} zSw*Xrb+Vojj{B&7Wda|yzy%Hx^Jqd#iOX-X1adT}# zHCd?Y(T{M`P`52iJm8dnncDs^<36|NCg@Puv^m-zfeV11 z5*EvF(;U22nQ!GcXEnS0@sGJQzgy{RmkJiT<>w9Y`6ahm z&=k+|x4*+2SKVh$M8eAmY$(!ZsWwGee0=L#Jh*no_3d1?5z+XP1STD!Nq*qKc90V- zj}L7|n9~eNO$@N>xwa|)jZ!-un;OD4%0{TL+F6fqRCKfg6v3idj~ zWrwJqbjQrIoCDBo1Z&VXCl%R}tdvx_ir#-L`unFOcBDyOThaD#gK$Zb$=Uno0sf}i zxR~b3(iE9TW~ZrZ(X!z1l7!LrwCUs>hm+;lyKp^UB)KD+`HXI+!1;{B*tD_lyZ9(` z@TF*a*VhEptES6>v5ZOx&>)zAqZE%IZ%VTTHd7|oYFH|lJaIF}A@GY|gMgdT|Db@} zJ1orHk*NZFC`47)IxEbUM$MIRN?H+}+YkA#hMW%~^Z{3KZb5y>pO|BEnb=p=B+mR3 z#fsz7JN95`gQd!-nfvha$L*?Vy($AkVB88iQ)MBWK%+_SG|`r91Z_YizxtdjsB&7Wby(YXgz9oMN`wF*o2MyAy zAz%^X>O3%!*Xb!aQCx7&1f7}K+O3_jw%>)ZLn zTeWqJNzo+7&qU3`!1ZIvhP}E!#RtZ@SAiE^E|a}5=Sg4Gl5vOsO`CQgy*h)j~N4s5eM)XSktWl-uF zeq{~U+?9ocm(^p4U48jKJ=zCxN@K}Wu4k2WT}r+!?D;ikSM=V^c|+mTohs#19v$-& zn|0P7yW;bsJVj-0o&nn&RBt55CObkQoy3vasKkymv3{zNmZs@%!Z|S~{XnWoGO7Jn z<9FK!**@yQKfMFWhyJuadOpg)m$L4^TyVbK+1%1;&y0{;G#sNTgXwHkU_f6%fSTW4 z*5gWGsj`H~<#fvi6NqgFZC-v2VAAfIXbZy6`Hhl@*dUCE{r+BG`M$Tg^lR7sVkhrR zk3AL3n{-ie_J=VgMq$CrO*k57AqzRUc#{aAD-}UaNx;iIxb}tYC7F71$?rGMfM)>O zpZ7Ak)Ywpr!tJfsdFE$SM!7Gt6x}KBoCU8IlA?UuRa3&J5>iIMghwo?i5_?&fBH^b z*(Y`=#N|;E4T~rH9;oELsd9fRu7LNYtJF5=fn{yNR6pj9T$&XEHLa4l4UP1wG?o6e zTpBq+l|+0-<%J;H%qO0r@Yw`F*Q?Kzube8_HVw(fAp2cEPN~B`xy-Y{Szc3CH?%69 z9~0f{++;0tLUpVEUI%x-5ZBUSwjWHu1tOzHHoHhO{*Z_e6&Sv@cYa*;ChWMa5P=mj zJ6;>LtYu@S!~g&l^2~F8T*5bWJ0i^lD(K&N#~SF3?Rl_c>m_wxi`@c&y; zSMwAPYGN5B(Phh~bFeN}f zIs;(z4fJXsRK(zjH+>$!ui55F|cE$(!lMM(ovP!XU^nf>7DA z>4|BRdsiO+plit1C(E6hlCb2{o5djugD3Z&UWfP(^m)m5{hJln9RJ-f@BHm?>GlCO zH85$OUhBsW{qg@FP*QIXAnMhj*GevWPpJxD9#dfFRrcCeU*>C%O{l6Zs$PswvDdG! zt~r~J_@y*5{7DbqrCgJ5iE+TYrxv`_R#ee{jvF2o7M(GXeBkK4al~$Hg;3j45xI}x zHvw^~%32LUlIhHgTY*}+i>h&t^p`jbE=v2|zKNSTai4RB@(TVZb$|QXUSXfoDrqd(_(9~)v47F+I zn{xDG6G%SI{(>^7cdRY(!+b_nwxox1(M7OI=A(YnI^!ykFx&0ZU1U|WHu7*fdVMk| z6=6dQTGnW?YNht_g#d{~*=_!*{K9|dLoDVrfZF)psyc){V}j0=&WWDh5vmG>3pV=m zrLm#<+~ou7n&3xfmUmq*-ckwTK zKFSj0*XfR1Rk|4P^KNayt4VEN5ftFhEz2p= zZ*FoSaCQIGUz1TCIUthSX(HbMIZh|LF%ne@-Sr$p~kgIL_*Pkr>)O$41!(D`KiX+-r17>W z2s98vph0u9=kZ7nEmcV)Ev3lFO)dE>(j+|n-q_^#Eo9#k?wF6y#iL?TbjpH3U`WY) z)k$)?6#t`Cf4mzajBx%Gva1 zBzR|u)>wUhEXK?tM528e8`5#39mSb0Eh5<5p+s~MO=*Q%I~e;#MW}{Nr{DDoEQtfG zcQtX*R6cpjI|S3YQ$dSc$edjU2YIS%@_=!uxaO20xiQKD3T>{-kIXQ;#hX#)Aeo-b z3)!l^S5(!^y4uXMT(u-m%R2_iIONw}s!~r0wiRtv^7hfXvH;kazdAXZ8=hP^`r>U^_a!rw(Odq48P+y&Ed? zh2Ix~X4@rsyDy|5^F=-E84y0pi_2+oo~#aO? z(SXEO@^4>p+l{-_I7iUPPFws`<|W(X#`I^&4@;~rmHCCE;J+GgKg5J|fa=^|oqR;9 zuZ;<1_BK3(l$~vq1fp3Vytq;y)Patb%hWF)fW6~n2&lvFxryskK_w;_ zo#YjBsNd-CmGuRGU?iP%T}}!o3~CsKy@ReS%2W*K;fY>SVnQNSor~wD|C?q22qZ^i z7D~(n{1lTb3*EJ~7wBk~PkxO^TnWFQDCN~pqLjtuE&P&-eO<})DPzZFR{sf~Lzt$nXY)3&>bHENFn>tPvVECpjyr(D&0Q7TQM^ zUFom8AC3_0qvfEnS*N36(93GY@@>dcNvs8mieGiXbH8Q&3M_(cT&-5W+{>VyEVd^m z%cN{oyqUqEV#H|g^v`HlKE;s|34*&1u=Fdxd+^(BRnR=c%f*#V3u@94mb$Y=7OUWx z9F?P&X4KrQNhZK8d_@DVL-(ex$-jta0>zrUG#7yoK4 zYVC^cN=aleYp%~{r4p`IHe4R*J!KMg^N*-~ew}apgpzm$^ckL}KdKBHdHxBbiE_?m zSBOPcr^|Jx(l6l~D(1zP%266HY1LJ_J&0xz5z^xv`_k=;=G%>U#t)Txkm(PfTrDBY zk_WmrPwQL~EzQfCsA9MP+C%)yeEprYdc^H6-nmo2cy8dlUPVtM{Phgl-@ZG=kqU4hCB|*a(fIH)%^3 zZBgHr+j&51{XhDxtnpc~VY#tc!Alt&EX^Rfv*ZpBe56jOg(s#mUy^$Cz;O3w;TDb1 z@?h|~5k%%v?SuwltB|#kl!VQd7lrud^?>3FjcrLvj<@|`_5Lzeey$$zQkwXaqVoOq)zy=>2CIz(f_7$K&4|)Vqv#dolFT? zqgJ(>?7hPNdtqIT4Oi!=C(WNH*pE%Ab&&HA8EpcHs^BoAg(o$?xY}!#Sb3Q`tEPzm zoZL#ktT$M|cb!NN+g+T!3+zwPi`!>tZEv7HhfZ}V-&TVCW%Fs~cPq31@jV>EI;KgX z+jS-s0iO$h&FcUiSmM)}8?7(Os-sO^L*Az$y*FIs@h?dNE#)VCEC=?%td91qznwRJ z^@w{(C$|v6eWa=ua!4uw=t8^+7d5rX$A^E->#vjFV*h~O?VYo3R*UHJ0dt>*J;$0# z`x7E36Dv}=y+3CCJ*s@CKXsAPY>zq^=nM8h2Z^~QFq58x$s@IOzYQFa2UvFg4;RXr z_IkUJ{UW(rNr5?M5*CIZKzyPUkr-rKot(U6?XwlF zsA}=JtK=0mX-yXrfmmEENW5{cQQo`0dOPo2R-ge?t-2{&oiIKz zh2D|D5K#6`spUQ2*7poK*yMk)@&J|4CW^cQvGSaS_QPGq>93vb6(;C()6Js8@tJIR z46YkGff}}#>l-cFuhf}Zl^osD$7XS}Kc8za>Riau73^IJ=}fMl2EIs>mTDeVvz$vH zWpvA!CL4P1Uvo|!iOeiG7DY!Xo>i>aRt6lWg1#R(4~3*tQL%};@T{+MO>u)zWHB!q z1^36LH883adIx`R*z0>*6}4n6pjr`R2_ng(N&=oA_R|Qv!bD(6b7*0<9o!<(48emW zp)aQP_Th7@6MvrpC2~A(o=Q@dORW;#f#fDA(F6bGh>x!}TUitD;G47`eN%!I4kXMJc-cxi?S^sIwkdvP+jS>KsD0<` zqgi1GBSEisx)PV4ztF2P;g5G_Ti1K+LYPqMIWe~teKSNoi@VwWT%Obvr2SJp#2RRk zl>}B>^2#X-@^_UwvbfE?alH$l?vHgbF7faCH{lLTlNCBE4&EBB8^8K5aK-V02>4&e z1=sI8O(SBuBGaSU)FYl0T=R2Wmmr4{^iG6lc!h21&LV;(;U7NfE0Pc}wvBxD!Q5Rr zmMCvvIW2GgYJG--cuJl+Hhp3j^y;8Ha`*2C8ugj8z+G;Qo?Jg18w%vW9!C0fq=#z< zQyFZXXN?SMz>U?ipK>>6Q>k%rs9BNM>+c14K$>0|#a1tt%2E7*ZqN&j4^Jv7JqqK) ziK~!EgjPb;1q1B`fY$ci@a-XTBzZIbQOB&|l1#0q+Y*|_?B3fguF z?PNV&IKy>m_6ar8!C(XoSdAKf%$O>3?rN@rHoQIVzLBSj-Ty%6(kk<+1RPc z@3RF@1fPn9d70C_@aQX>90;U&hxj!A_WG4j-DGLn)U@Fw+iPx&LKjw!>zM z2Jt=xDpx)uGc`r^kM2^VZ}=kBkbI(c*;oy4u%bnR-aCq_D>X)LGKY&)z1qUJ|C1h7 zfZvNmvoyo7{TN9Yu}BHuW4~bQl|(ZJ>YNoXs4bL=q*~LoF15p;shJpcbxxb(Y2S}U z!Ne`KOp-^u0~M>Xwu{-5LH8QlCHrh0RXNEH7xUq@bxr;CNzVYCyLN-m?s!TVvKEm) zR!euzH0zQGuM;X~UA?5yk;QXpd;^xlL%=GozjIz0qV`4>^iB=$KbV%vm&zk^8SiLe)G&j81H%HRs4R;`?s z6TUXKuq;h86-3S^JzqeX<15_O_=2jGL>Y`fKg8!LbBT7lOGon-4J!ve6O~&CHs|WQ z_hV?qQr?4~&eI}yMu?{ZnNZB;JbplzJe735MrR@rMN0iN62Enatrrmv|mUuS7(yj6@F zo}Q5sS*M9Sa{tHHuu2`Iaah*WHop)5CENY$lion<%K6M?T1|sChf*2wEd455L#RS$QRpK0G|4!12B2jn>24)jK$~;!!1# zg=}WE03MT;H>JKcL+Nt(Q|i9oM|UoNN^=Z?cPs#;qU*;Y#LJMu&%)-Ns|Nww-MMO( zUED2gK~P^1H#)5fLUXkqL6C#p6rVil6UHA>h|Y#LW6ejDQ;{;PoAB1b;a+#4c0x;T zK`u8NNW~ydhsFck!D3#uWICZ1iP+<{Q{Y(9?2X@M#U>;g_~hm+Sa_X~4>6tBwieE~ zzUBx(o1;%wLFhNkzs5#|*y?k8!!uT8qEAfkVwoW4m*Au@WgU-W8TX`N)xp}6G|<4+ ze`-AmQy_Q=#IUJ2$v9?8iyMtY_?=DvLDB*K97_WPe`N`d!y!S4OBR%IIB%*y)hIu% zT?)+9^~CW`XQir;CQCA(mIU9Zzx`+JYJ(P;mk(e2v@Rn6+uc>K7cDE%8BV*3+oogO z;UrwBAWw=mAAQ8H-EUt{3mOErIG54LVS)^h`qC1*!LEFbf zlh;EzO1e`qS+~A~ZXo}tbPL8_<%_Akbyo8X7$cFeFx)1pcpW{W`|3v^+wqT$p~FSx z5|5O~Yx}nArqi>P=r>6J2NAZ~+xGIOTJ{e)16N5mI=WBWu2YZ5!qEiC`QL~7zyUYI z;X4SBV&E#@H@4l^i%PWviG|=9@7&6I1_*6lkx!IR5HisTq}n~41wuYd+WdDY`xmH* zaKX3=rl4+c%$T(K@2ZXi+qR+MdnB&D;v;Qxnk+kPbvW4|oub`2j92ZxY-6*Ni9K=H z;)YbtMT5H8li_t0nh z8bP#EYj0*JD3l{eY21}*cV20!MOjEZEXsIkUUu@%RLHtIlyGp}E(J&rLdW(tI#Uk? z4iC=34s7G?jVa30yj6Z5$bdkLMtX0=UVLn5pSgPuHx2!F%g7;}6IuwU9uJI9B(~T#5W2Z3$Aqn`|8v)3?Fn|y6kU_glpF3eIKjx_Is_$BD zrC&RH!WnitSTiU)sp&_iGDDd2P=tC&ot>{ntN4#rPRw|lla|n`T-qsbTgLEF`zz94 z`(-kc>}Mx*G4=h!alrA@jKebkci+>;;nbW|Z#Z=Ipv?K$j_+qVX|%b#FFECgS6P{N zv~}fVJc1}VHvi+Cvi?l268j0)B52wXq6kzkc^y3)qK02?CC(R!N!2jPDeY@$;Hrr5 zI!Jy7l=cq=6C}3zb-vJARtqLJ5(Upq;Pa?3z;&>ZGGWk{x{P`PYJFAk}G8_&Aa2_`Xz(foNUbm-x|g2 zfW1RrL8rA}{rwKSZ&jN{1mj9*nzA4?%+etK*ChZzwb=5bAaz@Fj=hv&@YH`LFg^M- z43149!CiVotNm?H-;nebhbW%}`Nqs>;{+=gY}|I8)pj?s@}~V7T;%~o<9-%ZrseT} z`gQc5yyqs#*~KSYjHJUNX{$|JwTzeG+cy4R4359GdUmQtg|N$ef{1+D;w+5gj5U)x z7j5r~GybL=!GRWxitgbn(7s$r=kga=(qTW*&0cHSN&Rh^VSax(6XW`VMT@3MHwxx2 z)77eZSKd%jBfX`T0BzGH^@{AXC|fJ%N($a_yMJ?aS3$|5vG=CLvV*J`Gfpfo3SL(= z9_^*$ug`UIz`weJJE6T$7}E0XsLhEJNSO_(isH)KHi>+%H)hRM^$h5sEx&C7@pmlv z1VSX3&$VN8y~zDVydMb8-jo)^$KY$B=G4C84vX2i*cZP@@i^aLx+O(JagC9aRCgzCGryS%# zKu3?IfoZF+OdB>5_d0nWRl9EbV;7$R!#Pm1OY4VBZ{LY+iCl?C?D5;ceR)o7@3KIO ze%~dqDMJFLmZYO|=e~S;iN~#7w74g_FhFB3_WsTl*t31ygj>lKLYAH+;QcLbSZ*+r6sJ;|AW}UKWK^ z@l~$!T~`BU^j>t5CpK&@?^b4e{}qmp>6oT69JO5Ai)2nQc+B3PR_*COND}T@uRn%F zjsN{ILd7hw6ea2K_?La_FoXg=o&f)IO%#-^^ia=GJ>lV^t4FyFp`t^53>vk@y;(y>3ywcJ+`&6vc*(#2IAiKUM zN0YEo{yhNjSaWsTbC7$CKn&AD2QH646uQxm0Lq2gP_-zc zQd=m*`E?k-lyqBUC7w)j8Kc6ja|K})uLB*h6m4kr*ad?USD;S!?4;^ww3GW(NUgMa zYsqbJJr+VwRk2Gh9Nu4^bf>p3W`}>BwGkGo-ZAjnh?waM`gPpHw87&jmwkCh*HB10 zMS6zI0mZ$Kq4L(b^2@)Ox=z9V<+v4J_h`ReU0n`Euuok*EJleoSn;g*&%2ny?xI%` z8`-CGOAvCK4~=!Mgmn&8S4js1etiX>L&g(*O#g~~;7&l|i-_0Uz}O0gJov?3cdBw9 zN5E>HHKtW5B4US4Ucu865ua)ITE?A*Myh}yxl_sp|L@uc$<~fH5f{eaJ*k6lzK-fy zt(H!DF*R}&_L`X|7}z0{#bN*td|Qiqr+fMiRjtfW+1JC=9M zsF+jZsO+&~%SVO@o=1GfP-v~1lhG<1(W^gJl(iah+pjvfOV_YC=S=pFht~%?{+OE! zy$z}c!#$NSS!6A~u|Z3c9g^EJ8HsU@H6T)DZY7?kjuCVj$S8{#W;9$)af^qN8INsu zw?m=AQ7lNsd*923Ye_l>q!W2ZX z#g~>0?0D51mxe|*TyS79s$Nx^v(()lS}Ny`k~TGdd!EyY6CFLj%w2`w*hL=CTuE@f zZ&hh4Ay0uL&!i~dtanN|fLBXeijO!i;m7=cTX8p{12F#H-n;>V95wjOn{bx?Oe-ZZ zkXaF?TM1yEDWNa8`e<&i*!H$eP@=0Y?#7pAU%&GKLECan?SVq7CC>ni-X|XRO0~hS zOTqkwxvK$J&j49jAHR20m2FRG+oJr7^_AdXa0ypKtxRssa^ZCyg zb=c*i%bo%1bw$E?j!Qg|N^wD?OrKxo&AYdS>9SvBxjnI|rcKvp;t}o9*+EZ~#FHOW z4Gs^!j$Mk)l$Tm`ZX`FYf*CdXT}8CgbDwfUca|G1EoSnos`uoxy%9&B7U!TB)$07b zEQ;Uek*LvhLySCQi0MzRZoj4@*Z@88tInqDQgM^y$5ge8gRkS4?Eg-UV0F}%w1}Je zK8=ox^>d3(#onbB+ssu-m=m02z705 zGTrJ7Jds@8+PjNPJvm4 zPw>ibVc7mnf8;p1SmOEz2bF9obZ(a2j>Ir1>8~(#2FvN|%%1_FzvTX*7#mSmz1IW( zV2t@`?H%C^-ILa~^dG`Nf=U){{r~1#Dw7#Jlssr&Er8kpM@4w>1D%|?VN33MSAuCq zsWr82{jQ48OPrOqreYZrJWa6dwHlr-8?*kmjdw|1Td-S>Zo|Q zvSi-zlS5w)DiFW2;yo7nGE@L414ozlvM{45(XgmpQl=FUz{5vuzaI4UC8})=Jp-yA z`Pe={{&}!qygl8rpm#!sDfs_#r`#D*RhqYTEuv6S%SgZt+xx7L$RE0hQctcaNL~5G ze|6eH3xp+od+`}aGQ^(DCX8r&5Bg_Y`)$+pcY!g6*!?r$aMIITT~?XgzS+)pD(Zmm#k7N95=MRL0rfBL#D z;tPi=B*)HI39Ad~c*jz6Pm}f}>+9v`8qfoNDXippKIxiCzC3seoFWeOWoHoo6z#~B z)P8iz_$E<+9+!`?Fn)usoyZp3dgV|P&X=?t&G)8Wq)x72#_zaaqgcaEG)=>^gv|KM z`Fj?pVm5ty8WUR+JE~>^BPH22t{PuW&Fy)$9d6lP2~7-+)et+;blcJ9+zGBCo0~OtYNR zr+S79d-4*c;45hQj15elR>>Np@?(b+{~F5Td($wKiG{|h08;xayNd$0O7SI5CT=-% z2wv;PALH*QF97vcjyM+nG-ib5hULd;FWaa6yfjrqJp(LNN-_hMFWI6WJc@EL2fQ*> z9#ef~1|amwbnRB$q%99sY|#$G9UT5v+I2Fc8biE1HS^9K9xclXnb_(SZ%W`tvhP|{ z2cfEMK}c3F+V#>#|DV$&RSrg!8uQ!8;yC9{3uV`FRqsd zSW+5vp(RI@e3OPPnbUJiU%O(d-wmE(7Zt=3Y)EdCq&lnZjl>2U+RESrQAO@grV^EU zU@F$t2Q6X7@pv|GSMkV?<{xK2ey<%Db_*!l12s4GK#lw{8H%GW^ z1JUvrkn1_%74TSEifP!PZ{3;HXSdK^?`h}};7aGqf{_vK;BouYL?Fl9^mzFa?5JtY z<-0~oex3MQ0*az`TRd6Hr2KbguJBjiRtZu@GJ6qYC~Y>YOFX1_;O^w8S$9vVeL44D z`5Ca;C>S_RMC)66spXzymGo`fNIq87==ks&f62MrxamhTj3`k(sZ{%@bG9sp@cJ2G z_J4GJRa6^X({(7N6k4FTLn-dX-HW@s1`80}ix!6xTnfeAogf8@26xxu?rzDyp7*={ z*WAvmxtQ4(=d8W=9GFI#{H`3wc;!e0d5r;2evn{NEodAIibx{>*u^~W`~q9QHgJ(T zeABCzt2?^IDOZ+(j1+FHA^=H_nh3y0!+Wax=}xRaipMm(XIP0O34`Z`Z7IxTdjcsT z(`mHfII_09MZ5AlzYawR??|sGa+4ZryJVA+$#Ac;Q%)&gMJ`$|LD>ra*HYp$Xl`bn z0gfas5{F-yrz3An3bN;I3f&QaJMg3E_Icfhz^!&H1OS!JTC&$H>4+R^*9o0NVT zQKH#~FG3o6RA7F#MCRai-pm+&jGa}(7`8tIizqgSWwL6K^Mdk~s~&PcZz3t~g(jTO29bQ|R<<16m7u*s=}W^?R2vJhx@7;XSb4+0;V1% zd&1CfVEX4S!sk(D>yzutCy)NFUnow!Y??> z`iW+mmWu#@fgUY^Osc)>aRRR+%ZE!w8AFG+N3wj*-ZC@o`7N4zYJqzczhBs?AAajR znC-|jBfB{{Q4dz#0M^uySBBSQw9?#npu91yvFakEvvGw!2gt?HT?C-@LG!_->vf^( z90BNT7dwRyRRrKc>NhMf6&hg1c4}e5CCtCj@&uJi-NKV z4{&vqoxWHgcJH8gOmYZ2Icw(~%lz!hSay6KP+fXzcB0OIB{6Y~=whzT=anOC$h?r= zK^M!p{X3YvRP8Fn0NbPQjEaY*u-?K^XuRM57stFofM8;?F)6xMlCy05Z0N8SCw3l> zkRVhUcr`@5j+cGr20Z!`8%^QAT|38IJ3TH{2KLeHrH^J1NGn{KTQ+dVYsMGkX9uQ$ z^JbCFpL?wYM-PVDM92}{i57nFb>R9r9evZd>*(5j1u%vstYx3;>$S>01vyDtJ3}WApY8RhUSO}r1)O*CR zDRw?m=Asaun+}}z?V`djj{dAnCnLOKgB+Te@JzSWWGWSs|U` zO|+bbax!m`@#kn)Y(ZkIUC&~fimAoc5if{?W#l8$G`TH6{wjuKVoe6pQNlh~Y1^uu z1lvC)a>5bR;-M!l-{w0K6o1v+_c`ZlZ4mnUNjH?{^&vayFx*FLEg?sDapCv>Qn~P|H*z{whK0&lj z)}aBp>ZnBJpnQ)BDi-nZ=y5+6VOy_iM{yH@>3amA3F0FsS>;HB>z=UtR#yT|7q?YY z6+fv@t|jZ)u1`;kPMG&dlafApdZOcAbLRY$q1dT>%=pRMho$YH0Y+#>dg8_Lbx%iNX`{D<@Ikp(8?vNy z!JM!^D#?(&IRt=570o7PN~hSqPw(Ib`6*Mw z;%hAO%kdBv%ZH0*-YOHz5ba%>Itw>E&7>g<%W3M5f5T@z6G`H*Ys05`-xj^;9jk9$ z8qqB4RdL+O+**orw6=3AzYW*?9G22+Zag4X$~`|4$JkmG*{hJZywWfd{bTcdi;6{6 zn)llr`Z=b7QJD{`E^U`K@|w%4REfoJwMP`|b4PW}#-U@rn{H|A*Nv64_h9?djOk^2 z#$Wp6JJy3gLvFKl`mp57g}(d#ikWF%T`Ig9dmuXUxThKPl^S98xMg%K%}gvJO)_v5 z91?8H&Hy>_udq_bE@8R}O zm67FWu3pm}CU#?Nh}G{ zT(|20>%}4uI#9TtxYA;zvTg!<8mE6lpam60zuZ3l0-bpN=_)&GU9b|x@9hn~vO#~f20gkitcjRY=f@*`;7AJONK8wNcibsTdHb4trr_5T|3QC4ZlE?|cO3PiQg(|ye}*$v z8*snCoA=L)^f8}mK*wxufMW)e_(3=!Ur6U>Jit82yx4JSJ)1ANUR zEIVgCKNzkK5xMF0Q{J8VFfU&}K+)#fKcKN+Q+vIKH8mskwX za9c&LiU%CrsY0WVpD?$z$i9n;{=5%d5iJ{C86FwO!a@U{m(|Kt&3-)mO*Wc1$R6B{ z)^NM7TQ9saVdZ2PUhJDX;xw8RP#yzUX zFbR#Uc4vb_&1h1Lw(x7!P$q+=#XUu`cotU2K^NGDbIbFvMwas_lSb@N1>JT0{?)!b z*`J+VYwFiEB=P1%UcrN9)C8e1SywGCXnUtYFE92#LmOG~a+bX#{p+RlMKb&AoeDeY zbo(M0=1#P`xdyl++p_c{?w-Q%Xn;FZ2)2V$L=hwiI3X?fbpP=2Q`aPkwtiHPdocpA zHYrDgT?czNne%xal$e4o<Zt1hh?+2PD{9xKJbJjNsPlKf0Y zO&p>7S$sX&-tbX|Q|X_Jpi~^3<#+#3G+I^!MxY*o^|c?+qeEF^s~cyFYX1nMigFn(3#ayku%l1yGvQLeP*A>^xR3vGW7_{SB=3l9GiW3t)lmJ*b@#m&X$s1^u#&74 zgOoBaDY*8{Ctd)GRuTujYfF6|Ln|Sv;34i8SJq!Y`;3Hy?a5pTUkH$v3!WHtXi`~P zA29G9r(Ip~zbHf}*O-fGQKp`$k`OmR@~&=f|e zp%68V){K`0y_DIh?x|K3Nor-Ocj6^Knt(J4*!rtzL!Z-Y!i=h0E)$!dfO zHF4Ip_>#AO`>QX~ZR9DBu(_1N{L;7l;E2owU0mCLw$G{+UYXS?!=Y*H40~)Y5AW5y zbu`bhVmr3lu*?ohtz3&e)>cyW2saz7WVF8ozt6?`;DS+D)*njaM6;+-q&^kngZ7w_ zh)bwQnAllYCz_F9aLT%}#FzdnrIZuLF`2zZve}tFu((KFt{vl#g=XE)A!T8SB2ok( zy}>Cvr42J{j%?%x%-pI`=%W^VlM%Zn4La9-^Gt~bfuMeLZo;ar(R*oxxun>%C9y?G zYOo{+z1viu4IXNkL;gQk%=iD_K(n_hK~jtjD?EQ|k|O74JujUvlLM1mCOOld4{?Y-$}LbG)eO3)6xwIIbk+0!|yW)zZ4$9O>p(@zr^E*VLe85VHG-*lxPemCb&nG z)74oH$|XXQPRcX>{d#*>XHia(3sc-AKX=|-TC1_%U^|LhW?WsCw>0Vb5jO3Jr7SC1 zp(Q#=g@?2&uQ07q7)EROUPOzI$sMPam6<>lH-4h6&GX__YVV*7=+)R^@1xYmUCLDl z3A(}?4!$LqU-S#r8cN&bVTrlp)8X${B&NBqI#UV~G2bQU76Qc^Ei+n#?SPaNLF}^b zg3C|_lGt)<8a%3J4ZebxuqI+Vsk4GV@VRxnIis>Ajs@=?QQ9Ev?pwt%B3vBgdrrS8X>_^D@%g z!G}A1%tHRPXjQqAm5rHqdeGTbXW;j;NBO*4Z}B-_O5AddsV%2VG6$bO^p##?)pJ6t zJ%O%De~%G>X!p)K)#JNnCrvi17FBp@UGdn1@Wp;@HaAgGGWZ1S9o}!3~iAHWC`C5JO{iEj!^C$oERb~XhF6Ax`mm|~sJt#GChBfHZ zv@E)$tT?h+8BcZyiL|;|7#=^XoVcbL(+W(zoDb?K@GCQRCZw-Rx*sFEB+1I!Wc?T4 z{qCIiI~!RR!5IIr6s`&1zg_IXSv!r)iDn|OeIK=MC}!)=6EzEF?xYL2>S=3-wL(dK8il7rVq1{F-Ho4o zD}E)~BWETXxLY!SOIXy(V#C{}wrQ5H7Uv_n>e;E{Sxm$c06o7Z+KQ&`j7*V@i@FGf z)R8EcCW1APgq$9)n%eUF3dW3K3A6$pO`nH=Q-;vpFTor1Ufx-&z{ApNne<;6o!@>t~ioISJ57gw0?g(Bzmm6cY@JS z6k+}l!qC?cAiDZ@N=8r8G@RETWxp9IH! zlzaGN==&vx#Lr5$LL>?b#u7(7G**)Rnbnx3SWS+eXYnlcL$FfJVjh*Jdf>I;{2D1mB#*(^*v$j&UgN~aY6Q+CCA{NtoIScs7EhHtE zoJqrICI8LoGm-7&ZygMAZgH>)U0U*zTS#g}WKdfq=2YE7hBu#gh%}zQ0^a-CB;=MWbwdlflPYNkFu#}?Jc;T4#@*3^1BuOT9sJ**BpWu zX1Jm{r*=XOHr5d0Usc6VqB~TUpjWgp+oMh_tj(q66dScNB*>9DTh@gjm;CpXizp%KzM))ym)bhA%xszQeG1w?_fBOP2ghz@KV1c3m1H z`IwMl3^VP|?syy>;2dVCXvkI&JTRmfDfFIkQKI5V)*uU|hRs9r22vEoq0lU<|IspG zYOV6wL@TQ?N&BzWvC(2nmkfC+qf2Ak@{jmhbUfZ4nA`fd{D)=--PbuJ!m0zZa~vdF zNk8l9L*qbU0eTPV-4mV+e0=6*R&sabKQ^`*NKQn z-m!VoN&4rUV`N8%AC)tCFbl7ETi2O>8qyGCb+$`PfRzC@gt&cX+VXses+@rhP@nb> zZ~urz=E!$tH=eAP3;9FNv%sRv?>PHRN|ajFIxi4_^1c(JDpuBM%dN8$fXW?#XYezV z7^~JQEGlAwMVmRM`vrAHAR;!a&yoXYrk~=wBKSMIBULSA(sRzP*}6Qj##o;M+cT?dX7gv?r4BRwPAz zL4^e@)4a?xjh|4EVlQ^Z&&A}k*k3PyeBWYto_s;W#35KQdaPdcqps{9YA;-c#kvD- zL1CgJ#uCD$zeC(!%bEC5>ht8*8aU0rNt07zLiXR)8x-XAtc8UBHnDx5s$IvA{hNvxLd`gzMXsIPQOQ4Zs@T6e1?5 zJ;ZJ?BV+LQ-xU8-Z5L&CHI!?&6Kii6(}Knq)PTl3R=5*$oc>t9C>~mjp6FCS;@Z=5 zJbsI>HX6&Ri{x*Q>3Z@plX#LCle$!|XLH<(&Eo1{&MX+HaUYp*SG&A&m0l7L$iG7# z)Qm!1cF1J$nO4@57e0Hy>{1!7h66NvkfMv)wdRR#W2AkHIuJ)ikFmQN#R%RrVu}4%w zKXWBn>y%S)U|Wg%GGO=cgd!V!q*?5)Bfpo{&G$uQ8JqMWtA)k~*G;QAzOrJ`#@&#l z+RjIoG9j+c)#=ZCj9_%iRDK7W6gIHgC_r*L+)(bnuLFEsi+-&k$DcE&hp~K-J&jql z%Sg8#Z8iEf)5>ONj&?~ll(SxBOVHkkAYt#&Ig~^1Q)co&FCsKzfaua4fzrj?!;Ak&5(9P+!7T*~tR^j;+ z#T@?H?HusMvsOB>^d0^}bGut+mjp*j+F|F!AMtxEaO&X3`(=K4{jNfL)e!;#J= zAPEzBM}@+w79mz3Hmj=sFP(5D>HIiDlQl^>>8wIkD9 zQ?D5I(A?vl`+UyO9yxV1m(AK_KtuUr@IGB`9fnfg%-!lzQE$|bjYw!zgdgjJ@Fntu zb-hAFWu3RzmMt;pY!(5y74-lG|Mb9U6L;pIQ=s9`DruJ-i!B#zYTq?T+PW|aNMQ=t z_BcP_C1j(Qmj}iDtnKaAek7YB0m0V5sqsc0yKftVI~3GwDKf6Ew}RSd^gJ(!^z`~p zT?$-&%qI+w6-ugy zE;(5kFF}ZEUP%zgVVC~ZWl!b%B})tJYbQf`dy$S1-sN3frdM(ByY(P)M}0H@J;TyZ`dJtxXBR^^917rlq$E!Y;Cq&VM) z@5dEmExLJA=aZ4jM5mlbMDixV9t<9Xo37H&<4Z3zX*>w-Y zt`loxs#?<8d&=H7Dy^4%xcH1;dQk*OVa`QTBetsnC@&bq8YJ;w$5#G!|6&jX`H^tS zejj;bP}Q%lc6g${D^0}*34$va*(fk<9Nm&DNe$ z4oWAVaSp!3`aQ|%^e0c}%+uPjwObymL;Ell_G-AHlevrGZ$q#yx@XhMszrfbfNfkj zq+}=xDcgqU4gY2Y*};P@;9MO6@L%4`i`)5X+A};a=HYp_E$wJB@yh}Rx9SRa7)r39 zh1lRcP3P#!O49Y6^1e7Y;;|1Fyw1xb0Qc4~xKT&W*TMm~4SP7jmyh1q9KT1Uu!9t2 zZ<3jlrd6N!eKyn;Yosr%jS+y=Og?fWtCPnt(~xtB*AGh4mz$Y&3ITRfL)pD|B~eMg zV!Z@Pwt<&x<8)k!8{7VWl2d5z!ORh}%bpG;r%%5fhotGF?27_`_FkU6dBoZag3j8f zSYx2lv{FthmP$C~`{Zw`l5q+zujDDM_);^Tcdd3|HE7{U>4P#bY2`J)r{U(lLMQc; zHyOJUj>hWBwVy9Rmpu<|4tEQHm#Gmb zzrjNySIY2{<++%aquMy1J!9at5W&vn>@y*jaBSe?(j)Y7C_ca;5OW=;aR3rN6Dm1o zZ!~%;cRY&n-9GB)3kFM>{8PSUkE%kLwQA+a4_V@tm%HP@Z#b6~k3`e+8yN*#A*J*q z_7vxAb^IO-&cN+MLV_tqfP>c0kTbkhQ@e>#l)ziXtYZ6@2`_^(&2B1=A1{-ExO&9z z)>0t5%|&2fFn_DBjFd9tw-^crA32DrRYyDcN`LBTK^MnfEX(Qh(XJ_8Cmv_k=FBzd zno?;1X7TdPTllXXT@EXpqtso-*93dOQN$zvojP&A!-koB>f)>2FOMj(R>IBaU{BM% zezA|D*1Z9r;38reU4+*hZT6_+Jg&OwOVU&=e(ig>tcR_tf3^~rN#lgN5@P*f1i8t) ztMx~n{U*>^D$#S?{G|YOXjhnf*F){y?kVS3`7McyOQ@|Q%6MvKbFSm3klQY4Qz!+? zF>f<-%%JrTBaiVkGUrEmx)PZr;7XzUw2K3sQ6X}?pV7ukV|MV$g7(?!KT9V*o+lm2 z%`bE4T!yrR{-u>dw720)w#N3{C;dM?1gX-;_Dn~I*l-MgPJQ7bTos%El}+bWIWGUm z=b+to+NS?^ytzN#!7+#cVDrD)&}$!od9ZZ4y;S~f@0bVR3wp{@OzT|FY?ZO4)j`&% z-o9Pj0EdZ;!+EpFRRSvml-ZTxOzY+uv$vl?dg1`F zM<=Zu&5+ZZYk@Mjv4u*N;%wJzRKc~$%h&LUzdqT%u$xBq7bj(Z8FF|wkaAZ?i1x@7 z-d{rh*aRokyD%i8uxVw8Q?Dz^(-)C8Jr9nPdN@p}~<;(EO7X zgkEh;tBD5Z75j?S8`v#;Qk^*NroQg&rupeOVgIT(?X)2$4M)mK-q4Mn@!{cN1Plxt zSWTo**=Xl&l5%q)+Iy8TIj>x52uU%ufUTr8cMLR}d`18S*oCtbI0?gR-aqNeP(jhn zcAJV#Jd0fBC7W3Xy=Ou(SpS32UlAsJ4MTYU@r?}r`S8YtgirJ9vXZ+^7f(*VjZi{> zPtM4wp-RH)HZ_P)$x|GlPY##f=Us-^4|Q2_y-NBq9x;mz-&6KX8%MFn>ibS102#oo z9MsSAigXLCO?YpyUI@kH<)zq2Ljrd>>x>SdP zXCAB6oZR$|zwjw((jxo-%FLb;7}CS<7pG`jhV3MzVBvVtYD_sb&EIyNn$*ZBJ6#pS zAK2*@x^(|8Ms#=W;XGJ93}*hEA%eKnB>Wy6F2m^AUHH1_q%!2ckC!^R>hpU2u(0N0 zhbE;w%vN!t9clWrKA^z{JXg8itq@nQ_ua*0`JT81Jg^34=iV{`SsZxK;3dqzU(#%} zZD~BX#(7khTM<_3M%tI@7xqtn6g<3yE*mv9ZBtPsD-R7W;?v%qi%1>dv!N`P<^f}8 zlsI}$rYYUQ82%DZb^@xkMP6Rr=<&&gZwucBx1dKBuBkSveKhowg|l@M1Q2QpNTK$H z^J(o+>>KLC+=FMli#g>b-Jf#lRR0hbOaG(UG2CoAhk7*kyPlY5DHwJZIXNkN!0PDF zZ3jLe0GWZCU?SsHRIX`X+*kJZNqa9Q1@LNec+G4P0x(z^*#932vQ_uaA58I*`)7nF z6*`x18mX^7_J8nl>Y5q#3#4ATTsSg?_t?qqO+5g|j5m7Sq^JFp0~LCp=^y*$U;Tt$ zg-2XoppNw#x9kXjS>c7%W3V5J_vR(}i0Vh-;=bbtvi`k_R)WUf)>si70)A%VxU{72 zoj!jukHpW+Sw4JT(;;Q|_2a8e%C9N;WdYkIa2%3k()KUYTptU`-!l6K$8*+hSkSHX z^s$ruvU<;%;If$D|JR9o`IEJI2y6mYuz7fa0OX`i32yviyLQXsPb}VZHI!fb*G?gnyW^==Fzw6c6voWHyyV%w+O|8#j>VKritBpkB~WB96?LWBTBawW|PcuL%f zCtGh*XPSbyz`SdXBv%`vXhaKvjG50s{9~u(!xN6v@<2}Lz<14Ims#&lK|7Mvl&0wZ zgASHn<>bN=AjI6*FT_<&v(R*qN$i+@CcQ8e)uKh@S5qSlMr{s#&s!3 za6z%}P50*!827lmB!{?Ew|6fY zcvkrX+Iamk%cXhsq3!k@^g>EX(FEH}IK<+ue4A>>l_ZIrWuEJYikNgve)=zVaEf&l zdMoY?em{92z1s&&ohZNj8IYTn-Mhj(VUu$@?zev;*%-hS58L9a;AJLe=r-AsRH=u5 z$8UO;?*!~SIWaO_f39Elef>*{w}rVMzGlTk8Ux##Qd?$O#a*DhfwnB#Z-?yN`JTkS3PKTBARDQ~d* zDj_DWc#W&1_hvXEnGU7dcSZ~yLZi<)No#?2(HGhXKv`W90Y1ELz$p!xi_7frJ_Wfs5s7kqg`_Fw6F#Q;OJ&WNMBip zmFzWV)M13xr07~WXN>Wp|DgMt9Rc9k4BYl@ZYC5`2L+hh!`U?+v$Y=!;Y9WllC^## zj6$%RMrs6L*H3pojo04#Rp8fGy&|u1Hl@4_$sg;rejf>gGRcDPj@S7#yls+FjueHLn6{aQ@Av^wHVuE|cgCiCQ{oqR$(Dk$}AKZDk z;vtRzWc0}QjJmQUxM!vsQw+~67$mM9Y0JFuq1% zqYL*-gg**Fx4}AK+Ku4gKLWMKB}xBfrOFP zIE7{PMY8CXA))^M8p(Z)=n>qEwE!!NjTL>-UFp+Dt~c3V5CEQi{$iyhu>?^J?&jz? zD*N|2%kz=Tk!`p5&`Yi6i@K>f@6SX|xTV=ix)S0#Bp!1E z7zF53=#|EH5db#Yw}l+^ScQs5wqYsw^q2ZeUlkI)->XqaIHTW|qum~u?3Bn1q-oH&Bg}Iq8v(!QT2ZqIFt398?Ow$|@fUc9c zL3iE9f*1G3bT^L;>PO>IBJWuQK+s~lfnTX$u>Rf9`_UmYBrAqEPa%~az$P!%ydzt$ zsnc^rTXW+p`_M}dG$|)zrgzQ?gz*y=oaRVczpAR*7J&*jjZlZW(Yfn%F)p92nKQ}HpoX(IKnI7Tr+`rN3Okuf zOKP6tRG^lHQM9tfa%_-lzpDS(wN2XN^qJ=y7sHoFBgK+4R=*6NKz`#b6pAzdDs(Jlwg%<9qF192IE=W_Qi_3pvQ6KDhLJ z3S+p44Z>~FHmR6pU2WVZgizdA1-L!xEV$LR+O75N+)R1Pb4iY&mO^lu(ys^|0=|Wc zxz&Ams(8Y(No?8P&y8IIPV%h>kwSonQ;D#Tqt;#7F#5-!cXM@r5CG5nE0Z81bijes zqhG-10IXK>i-VmK27#Ha0&&+~?d{^DeM^wCL<4$N9kH86NsCI3c}wtEn`*PK=` z1bMcSb15-2&sR)$#9*u&6p#CV<=Hoh=U2KIleUkb%%oMUU5rAu zi#T_>nGdVTNLX|~UEn3!s|`d-P~#Qi)B4#(!0#J3a2{TRLDmr~*0&-2m8{Scm&t?@ zKRFYYIo#{yR?ERL4VSdgJV~Mu{CoJNp6~hCGn<{FcLD)mdC3ITXW6*eZKbj|(3q$7 z(eF85%>7VNRdq$~T`$}>R}T4lf+}Bwi1jTPHCx z6fZGXQvYu*4%)is*-CwdXq68FfXiv~c(0yR(Z#N(YfBjy(XXlTFaD*5z%?x)y!yz8 zL{qUOO3Kza{1cMPEUOX%pwa%ir-K0O8E(8ReejpPJblRPnThsd96Q0{)azx1A^_-P z2g<@Y%^8xDxyCSH-Fa5@HvOM1+An*3AuNLZ2fK8JEAW3FA56iA-$f-$Qo4SXWb$9l z26%gGPPa`#J`=`I>sLaO6LI~^H8?3}m05zDhZK;6*fM4s9<>i%XKk!z5P#`KaeJ$&V9#h!J=J{xcagczDxs{)Yoveuz+h)@qztlh{Ie?XQkK=42H1q=kfMZb* zoAy~}edQ|C>uW|y%T0E|^Freqo5>#Anuhk6_T`zP7_u!`B&XYMO(b-#O_%S37D!o{ zxHZE~3ux68Kd|#f_)YwazWV&ODsQeMUf3sJ4BM4<;`07Ea*BoTjxQdDiHWC5M1Lef z5)_sg`uMe^zic0wv9590!YCOCu6454J+y>OVp|t5*!iEkpz9bsX7iNm5=U{pJh%^N zm>2zH#h246f1fS3r!%9&UznoFHJwJApMh~{p9Yf1%Um|1pOAkJO2!{yPHN;?FpF{) zlnolR{F_a+9T=#enE-+1Q+hgFzX;ZN=@T%64ApA*d1?qXTYkvc@OA6-|}=u9-|YbK7A zTfbhPLan3TE#;dj1T9$_R z#Kt7!Wk)CX7aT9iCL63Ea<=?U;;=tkBw!SkHc7SM#uQvLCgR8}{lqn-67`~+R6s)m`h4%mJ5Jt{$Xy%BwQceEnD9k&*Jx&ptixXhi_mfAEI=KP7ni#zW{H|ebI;($D zY%N*cdd>=>v?8pRO$RVrBnxTd)#`tl3_UI8;6aU`y=k3U7UYh|{Fjv}di6Rm8Rp;+ z=;f5%z~@$xH{p>rPzKUx55$3HF8>6rk+ZT2bn~&kG#ZjJpu`!QSgvO_#TtKq|0G?d zIeTRS2XOUxf-6!4MIZ!wZO6XF zQE-?H0!`#3{QP zye+L+bja&2r8)K-%iP6<8o5jOh_uO$!66SW6su`^F>h)rvzB2;&!%dXd!JoYc*EGF z=Rp7SCC8&&;X}A+mn!JG>)gq3&ji{O)5ENJ>7(1tgaC}%;|{+N4O!16`t!v`B7s^K zO^kc|NmcV(fxVIxM&TA;U((Y4&bp`k$p@Pye4inDgXzU|X3xq;b0{`inVJ|-0kn`! zS3}7U63lyfCrn?`W7Esk3&&!NQ4un6gM4WX8le0h1kZu8?e zvNqH@R__<-@2)69DNPUjc^*tv;b~Tm!ltt?R+kD<4>$NL5ym3-cdpi5O1 zLYB1-1aVzF^tjzuE{?~m#J0o|$ny8cf1S-l?5$__+ZcpLNWu5+Btiwgkj$f@EKcCp z?`urUO8c73{3lwmgU_5|2G6BFgB_pXG?|w}HS}79MitWtK&Ob<3z67rumL4Kw1Sx&~J&s=53h5ZX zPZ0n$ zNcR5dfQ8<3xq%bgs@1(0HBU_6#J?wqOggJwkOBE?AOPdrF(p1kdCRQ*Z$Z#}k6Va; zT4*}I2r3xl9(P@^e`aI;fCYzdylmVIZWR3X+u99`$kwxGb9c+p|29e1xckDRGDlKu zHwa1%Mw9#$8peM-UL_AM&Q$pA(og$dAvqVz*!Stj97|koTbeqwsrk&vU2e*Li~Mr! z5@VY{rEC{URZonCl}$*`^o{rOYa!8cfu1-`u1H445V}=FJlZ|OF~*WKJDUWWh7ZQM zM#?Iu?8HU_-0FM4s_u-_48(HQ7O= zf&k~6R3hHsl*BlFsYh={2Br)i!5lzMaSd3`#@9sytox4qVv}XT$t(|sn*)Op)jxS zNscA+l5saQ%~p5fyr@m{|ex%{-NA+WTG0OX%&AOJ*pw{bSwswh%A{Z$|S6#o6UF*>X$-$uHX#fc~^=jE98F zmGs${q8$oN+Rcp~Cm%X$-+;GCq?&dQmZ`l#Y9t=z)GN5woUPXC zQHLJ+`+8Ln`E%TLQKp)3msL5Ma;A5yZaSk_D~Ha|4R{ zH=TOFSUB)CcR$WOF(4^uz3YozX)8tU7Q2{4A#1IalEp1=i>qB+w?*a@!#I!IkKKqE zeG&cXrP(zxfuY3MT;fWtq2kf^H!=w49TrXP^}|+Bj&>~}DTp?kdVpnVjo+)lzSv_W z(?Rs$PAtNvy@{)!q<03^6&@Gm#7Mfg5y5JIUIi3ct2T4J|BOwl35uG=DWYSOAu)0b zst7j1Y%b#5M~|`Bj&0iXm)E97Hc8pF z3}vKRKgCl-E7aqEryDl=^9oa1azkT}gizk=mG9WfK29~{t!ZA|#J!Iv4IX;~t?G(8 zWo@6*@)}MSh#Lljrc4lk-~yZKqbDPSKRa{CNo;kOnB~Lq)w}dZvE}e#Kt}_Ku(`Dw zf18eHjxxY{|7yQ9=jZ;9?+C!!@(2R(jR!@w`8lCvs%tzhr!~twwRlBx)kUIt1x1BF zA0S66PjmLBY3cxt*B0w?k8f@su3inRd2S2>Sih%v*>5NIim?B7E>m!s zOJTH3X(@1(Uzg_*-$h4t z-m?m+{ie(`{{{l2ZHwO0j^$g+bCgd_&2+%ox_?^;rb(0zqyHNBH2g22%%hD;Y%%`HGNTqbm8T7uC4NOUY&KWzwoRG|};Cv@paY0^4(y4fTf z_bP*HRlV|-?yhwEy{^+m2GIS{dPu!Yt6tlajXLw(_vtEk+}|7?l0yrQl`6z?}=KAGRv6aa#sNuOiSf^I@{`N*YZu#2mP* zKk^1fSc_D2iXeGLw8ugLX^+-5#R$M_O@_(s(UxOF$*qzfoDi$5aoi(IqJ--*{a5gW zlt1q0u?SkE0aNq4;mK`BDhYWF`M2PAja)()9BDwj$|FVwUZ2J`A(8(FH9*S0Q%!Lq zmeo9qvl;kKSUJSXx^6B$N^XL@wy%MBY4#r%Y2>VS8`E9|c|okvJBPNLQJRS1?V_Qm z3H)_@K|C;gI{85_oE{~0+Hf%6OYP{*4G1D$qtw&cPY{QTf>wg+$ten2l$M*gQ?4OC zwKjJYRap+>bqg`oH%0A!3(=; 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®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�_ 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 * var METERS_TO_INCHES = 39.3701; * var entity = Entities.addEntity({ @@ -1825,6 +1827,7 @@ QScriptValue EntityItemProperties::copyToScriptValue(QScriptEngine* engine, bool COPY_PROPERTY_TO_QSCRIPTVALUE_GETTER(PROP_INPUT_MODE, inputMode, getInputModeAsString()); COPY_PROPERTY_TO_QSCRIPTVALUE(PROP_SHOW_KEYBOARD_FOCUS_HIGHLIGHT, showKeyboardFocusHighlight); COPY_PROPERTY_TO_QSCRIPTVALUE(PROP_WEB_USE_BACKGROUND, useBackground); + COPY_PROPERTY_TO_QSCRIPTVALUE(PROP_USER_AGENT, userAgent); } // PolyVoxel only @@ -2207,6 +2210,7 @@ void EntityItemProperties::copyFromScriptValue(const QScriptValue& object, bool COPY_PROPERTY_FROM_QSCRIPTVALUE_ENUM(inputMode, InputMode); COPY_PROPERTY_FROM_QSCRIPTVALUE(showKeyboardFocusHighlight, bool, setShowKeyboardFocusHighlight); COPY_PROPERTY_FROM_QSCRIPTVALUE(useBackground, bool, setUseBackground); + COPY_PROPERTY_FROM_QSCRIPTVALUE(userAgent, QString, setUserAgent); // Polyline COPY_PROPERTY_FROM_QSCRIPTVALUE(linePoints, qVectorVec3, setLinePoints); @@ -2499,6 +2503,7 @@ void EntityItemProperties::merge(const EntityItemProperties& other) { COPY_PROPERTY_IF_CHANGED(inputMode); COPY_PROPERTY_IF_CHANGED(showKeyboardFocusHighlight); COPY_PROPERTY_IF_CHANGED(useBackground); + COPY_PROPERTY_IF_CHANGED(userAgent); // Polyline COPY_PROPERTY_IF_CHANGED(linePoints); @@ -2899,6 +2904,7 @@ bool EntityItemProperties::getPropertyInfo(const QString& propertyName, EntityPr ADD_PROPERTY_TO_MAP(PROP_INPUT_MODE, InputMode, inputMode, WebInputMode); ADD_PROPERTY_TO_MAP(PROP_SHOW_KEYBOARD_FOCUS_HIGHLIGHT, ShowKeyboardFocusHighlight, showKeyboardFocusHighlight, bool); ADD_PROPERTY_TO_MAP(PROP_WEB_USE_BACKGROUND, useBackground, useBackground, bool); + ADD_PROPERTY_TO_MAP(PROP_USER_AGENT, UserAgent, userAgent, QString); // Polyline ADD_PROPERTY_TO_MAP(PROP_LINE_POINTS, LinePoints, linePoints, QVector); @@ -3330,6 +3336,7 @@ OctreeElement::AppendState EntityItemProperties::encodeEntityEditPacket(PacketTy APPEND_ENTITY_PROPERTY(PROP_INPUT_MODE, (uint32_t)properties.getInputMode()); APPEND_ENTITY_PROPERTY(PROP_SHOW_KEYBOARD_FOCUS_HIGHLIGHT, properties.getShowKeyboardFocusHighlight()); APPEND_ENTITY_PROPERTY(PROP_WEB_USE_BACKGROUND, properties.getUseBackground()); + APPEND_ENTITY_PROPERTY(PROP_USER_AGENT, properties.getUserAgent()); } if (properties.getType() == EntityTypes::Line) { @@ -3806,6 +3813,7 @@ bool EntityItemProperties::decodeEntityEditPacket(const unsigned char* data, int READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_INPUT_MODE, WebInputMode, setInputMode); READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_SHOW_KEYBOARD_FOCUS_HIGHLIGHT, bool, setShowKeyboardFocusHighlight); READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_WEB_USE_BACKGROUND, bool, setUseBackground); + READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_USER_AGENT, QString, setUserAgent); } if (properties.getType() == EntityTypes::Line) { @@ -4194,6 +4202,7 @@ void EntityItemProperties::markAllChanged() { _inputModeChanged = true; _showKeyboardFocusHighlightChanged = true; _useBackgroundChanged = true; + _userAgentChanged = true; // Polyline _linePointsChanged = true; @@ -4887,6 +4896,9 @@ QList EntityItemProperties::listChangedProperties() { if (useBackgroundChanged()) { out += "useBackground"; } + if (userAgentChanged()) { + out += "userAgent"; + } // Shape if (shapeChanged()) { diff --git a/libraries/entities/src/EntityItemProperties.h b/libraries/entities/src/EntityItemProperties.h index f7fde73430..df163e2cd6 100644 --- a/libraries/entities/src/EntityItemProperties.h +++ b/libraries/entities/src/EntityItemProperties.h @@ -367,6 +367,7 @@ public: DEFINE_PROPERTY_REF_ENUM(PROP_INPUT_MODE, InputMode, inputMode, WebInputMode, WebInputMode::TOUCH); DEFINE_PROPERTY_REF(PROP_SHOW_KEYBOARD_FOCUS_HIGHLIGHT, ShowKeyboardFocusHighlight, showKeyboardFocusHighlight, bool, true); DEFINE_PROPERTY_REF(PROP_WEB_USE_BACKGROUND, UseBackground, useBackground, bool, true); + DEFINE_PROPERTY_REF(PROP_USER_AGENT, UserAgent, userAgent, QString, WebEntityItem::DEFAULT_USER_AGENT); // Polyline DEFINE_PROPERTY_REF(PROP_LINE_POINTS, LinePoints, linePoints, QVector, ENTITY_ITEM_DEFAULT_EMPTY_VEC3_QVEC); diff --git a/libraries/entities/src/EntityPropertyFlags.h b/libraries/entities/src/EntityPropertyFlags.h index 93bb8a89a7..76585450b8 100644 --- a/libraries/entities/src/EntityPropertyFlags.h +++ b/libraries/entities/src/EntityPropertyFlags.h @@ -319,6 +319,7 @@ enum EntityPropertyList { PROP_INPUT_MODE = PROP_DERIVED_4, PROP_SHOW_KEYBOARD_FOCUS_HIGHLIGHT = PROP_DERIVED_5, PROP_WEB_USE_BACKGROUND = PROP_DERIVED_6, + PROP_USER_AGENT = PROP_DERIVED_7, // Polyline PROP_LINE_POINTS = PROP_DERIVED_0, diff --git a/libraries/entities/src/WebEntityItem.cpp b/libraries/entities/src/WebEntityItem.cpp index 61a1ed18c5..1e3b932b6a 100644 --- a/libraries/entities/src/WebEntityItem.cpp +++ b/libraries/entities/src/WebEntityItem.cpp @@ -25,6 +25,7 @@ #include "EntityTreeElement.h" const QString WebEntityItem::DEFAULT_SOURCE_URL = NetworkingConstants::WEB_ENTITY_DEFAULT_SOURCE_URL; +const QString WebEntityItem::DEFAULT_USER_AGENT = NetworkingConstants::WEB_ENTITY_DEFAULT_USER_AGENT; const uint8_t WebEntityItem::DEFAULT_MAX_FPS = 10; EntityItemPointer WebEntityItem::factory(const EntityItemID& entityID, const EntityItemProperties& properties) { @@ -63,6 +64,7 @@ EntityItemProperties WebEntityItem::getProperties(const EntityPropertyFlags& des COPY_ENTITY_PROPERTY_TO_PROPERTIES(inputMode, getInputMode); COPY_ENTITY_PROPERTY_TO_PROPERTIES(showKeyboardFocusHighlight, getShowKeyboardFocusHighlight); COPY_ENTITY_PROPERTY_TO_PROPERTIES(useBackground, getUseBackground); + COPY_ENTITY_PROPERTY_TO_PROPERTIES(userAgent, getUserAgent); return properties; } @@ -85,6 +87,7 @@ bool WebEntityItem::setSubClassProperties(const EntityItemProperties& properties SET_ENTITY_PROPERTY_FROM_PROPERTIES(inputMode, setInputMode); SET_ENTITY_PROPERTY_FROM_PROPERTIES(showKeyboardFocusHighlight, setShowKeyboardFocusHighlight); SET_ENTITY_PROPERTY_FROM_PROPERTIES(useBackground, setUseBackground); + SET_ENTITY_PROPERTY_FROM_PROPERTIES(userAgent, setUserAgent); return somethingChanged; } @@ -115,6 +118,7 @@ int WebEntityItem::readEntitySubclassDataFromBuffer(const unsigned char* data, i READ_ENTITY_PROPERTY(PROP_INPUT_MODE, WebInputMode, setInputMode); READ_ENTITY_PROPERTY(PROP_SHOW_KEYBOARD_FOCUS_HIGHLIGHT, bool, setShowKeyboardFocusHighlight); READ_ENTITY_PROPERTY(PROP_WEB_USE_BACKGROUND, bool, setUseBackground); + READ_ENTITY_PROPERTY(PROP_USER_AGENT, QString, setUserAgent); return bytesRead; } @@ -133,6 +137,7 @@ EntityPropertyFlags WebEntityItem::getEntityProperties(EncodeBitstreamParams& pa requestedProperties += PROP_INPUT_MODE; requestedProperties += PROP_SHOW_KEYBOARD_FOCUS_HIGHLIGHT; requestedProperties += PROP_WEB_USE_BACKGROUND; + requestedProperties += PROP_USER_AGENT; return requestedProperties; } @@ -160,6 +165,7 @@ void WebEntityItem::appendSubclassData(OctreePacketData* packetData, EncodeBitst APPEND_ENTITY_PROPERTY(PROP_INPUT_MODE, (uint32_t)getInputMode()); APPEND_ENTITY_PROPERTY(PROP_SHOW_KEYBOARD_FOCUS_HIGHLIGHT, getShowKeyboardFocusHighlight()); APPEND_ENTITY_PROPERTY(PROP_WEB_USE_BACKGROUND, getUseBackground()); + APPEND_ENTITY_PROPERTY(PROP_USER_AGENT, getUserAgent()); } glm::vec3 WebEntityItem::getRaycastDimensions() const { @@ -365,6 +371,17 @@ bool WebEntityItem::getUseBackground() const { return resultWithReadLock([&] { return _useBackground; }); } +void WebEntityItem::setUserAgent(const QString& value) { + withWriteLock([&] { + _needsRenderUpdate |= _userAgent != value; + _userAgent = value; + }); +} + +QString WebEntityItem::getUserAgent() const { + return resultWithReadLock([&] { return _userAgent; }); +} + PulsePropertyGroup WebEntityItem::getPulseProperties() const { return resultWithReadLock([&] { return _pulseProperties; diff --git a/libraries/entities/src/WebEntityItem.h b/libraries/entities/src/WebEntityItem.h index 4b39261bfb..f5cbac43cc 100644 --- a/libraries/entities/src/WebEntityItem.h +++ b/libraries/entities/src/WebEntityItem.h @@ -89,6 +89,10 @@ public: bool getUseBackground() const; void setUseBackground(bool value); + + static const QString DEFAULT_USER_AGENT; + QString getUserAgent() const; + void setUserAgent(const QString& value); PulsePropertyGroup getPulseProperties() const; @@ -105,6 +109,7 @@ protected: WebInputMode _inputMode; bool _showKeyboardFocusHighlight; bool _useBackground; + QString _userAgent; bool _localSafeContext { false }; }; diff --git a/libraries/networking/src/NetworkingConstants.h b/libraries/networking/src/NetworkingConstants.h index b64a0845ac..a3818930dd 100644 --- a/libraries/networking/src/NetworkingConstants.h +++ b/libraries/networking/src/NetworkingConstants.h @@ -46,6 +46,7 @@ namespace NetworkingConstants { // WebEntity Defaults const QString WEB_ENTITY_DEFAULT_SOURCE_URL = "https://vircadia.com/"; + const QString WEB_ENTITY_DEFAULT_USER_AGENT = "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Mobile Safari/537.36"; const QString DEFAULT_AVATAR_COLLISION_SOUND_URL = "https://hifi-public.s3.amazonaws.com/sounds/Collisions-otherorganic/Body_Hits_Impact.wav"; diff --git a/libraries/networking/src/udt/PacketHeaders.h b/libraries/networking/src/udt/PacketHeaders.h index fc74f4459c..ced3d8756b 100644 --- a/libraries/networking/src/udt/PacketHeaders.h +++ b/libraries/networking/src/udt/PacketHeaders.h @@ -283,6 +283,7 @@ enum class EntityVersion : PacketVersion { ZoneOcclusion, ModelBlendshapes, TransparentWeb, + UserAgent, // Add new versions above here NUM_PACKET_TYPE, diff --git a/scripts/system/create/assets/data/createAppTooltips.json b/scripts/system/create/assets/data/createAppTooltips.json index 478793ab78..f898d594c6 100644 --- a/scripts/system/create/assets/data/createAppTooltips.json +++ b/scripts/system/create/assets/data/createAppTooltips.json @@ -616,6 +616,9 @@ "scriptURL": { "tooltip": "The URL of a script to inject into the web page." }, + "userAgent": { + "tooltip": "The user agent that the web entity will use when visiting web pages." + }, "alignToGrid": { "tooltip": "Used to align entities to the grid, or floor of the environment.", "skipJSProperty": true diff --git a/scripts/system/create/entityProperties/html/js/entityProperties.js b/scripts/system/create/entityProperties/html/js/entityProperties.js index f3f92a887e..6898bb1b5c 100644 --- a/scripts/system/create/entityProperties/html/js/entityProperties.js +++ b/scripts/system/create/entityProperties/html/js/entityProperties.js @@ -800,6 +800,12 @@ const GROUPS = [ type: "string", propertyID: "scriptURL", placeholder: "URL", + }, + { + label: "User Agent", + type: "string", + propertyID: "userAgent", + placeholder: "User Agent", } ] }, From c3d7e02964de729e7844467d714b979c6938b8fb Mon Sep 17 00:00:00 2001 From: Nick Levesque Date: Thu, 21 Jan 2021 18:45:10 -0500 Subject: [PATCH 096/152] Fix small typo in getPlatformTierNames() --- interface/src/scripting/PlatformInfoScriptingInterface.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/src/scripting/PlatformInfoScriptingInterface.cpp b/interface/src/scripting/PlatformInfoScriptingInterface.cpp index 9adf514718..c1f325237e 100644 --- a/interface/src/scripting/PlatformInfoScriptingInterface.cpp +++ b/interface/src/scripting/PlatformInfoScriptingInterface.cpp @@ -217,7 +217,7 @@ PlatformInfoScriptingInterface::PlatformTier PlatformInfoScriptingInterface::get } QStringList PlatformInfoScriptingInterface::getPlatformTierNames() { - static const QStringList platformTierNames = { "UNKNWON", "LOW", "MID", "HIGH" }; + static const QStringList platformTierNames = { "UNKNOWN", "LOW", "MID", "HIGH" }; return platformTierNames; } From ff6f7233e499d8a021501586fe4c5580000a730b Mon Sep 17 00:00:00 2001 From: HifiExperiments Date: Thu, 21 Jan 2021 17:38:55 -0800 Subject: [PATCH 097/152] I'm a big dumb idiot --- .../scripting/WindowScriptingInterface.cpp | 26 ++++++++++++------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/interface/src/scripting/WindowScriptingInterface.cpp b/interface/src/scripting/WindowScriptingInterface.cpp index 14a0d04023..98335e5d3a 100644 --- a/interface/src/scripting/WindowScriptingInterface.cpp +++ b/interface/src/scripting/WindowScriptingInterface.cpp @@ -199,9 +199,9 @@ void WindowScriptingInterface::setInterstitialModeEnabled(bool enableInterstitia DependencyManager::get()->getDomainHandler().setInterstitialModeEnabled(enableInterstitialMode); } -bool WindowScriptingInterface::isPointOnDesktopWindow(QVariant point) { - auto offscreenUi = DependencyManager::get(); - return offscreenUi->isPointOnDesktopWindow(point); +bool WindowScriptingInterface::isPointOnDesktopWindow(QVariant point) { + auto offscreenUI = DependencyManager::get(); + return offscreenUI ? offscreenUI->isPointOnDesktopWindow(point) : false; } /// Makes sure that the reticle is visible, use this in blocking forms that require a reticle and @@ -553,12 +553,14 @@ int WindowScriptingInterface::openMessageBox(QString title, QString text, int bu * @typedef {number} Window.MessageBoxButton */ int WindowScriptingInterface::createMessageBox(QString title, QString text, int buttons, int defaultButton) { - auto messageBox = DependencyManager::get()->createMessageBox(OffscreenUi::ICON_INFORMATION, title, text, - static_cast>(buttons), static_cast(defaultButton)); - connect(messageBox, SIGNAL(selected(int)), this, SLOT(onMessageBoxSelected(int))); + if (auto offscreenUI = DependencyManager::get()) { + auto messageBox = offscreenUI->createMessageBox(OffscreenUi::ICON_INFORMATION, title, text, + static_cast>(buttons), static_cast(defaultButton)); + connect(messageBox, SIGNAL(selected(int)), this, SLOT(onMessageBoxSelected(int))); - _lastMessageBoxID += 1; - _messageBoxes.insert(_lastMessageBoxID, messageBox); + _lastMessageBoxID += 1; + _messageBoxes.insert(_lastMessageBoxID, messageBox); + } return _lastMessageBoxID; } @@ -646,13 +648,17 @@ void WindowScriptingInterface::setActiveDisplayPlugin(int index) { } void WindowScriptingInterface::openWebBrowser(const QString& url) { + auto offscreenUI = DependencyManager::get(); + if (!offscreenUI) { + return; + } + if (QThread::currentThread() != thread()) { QMetaObject::invokeMethod(this, "openWebBrowser", Q_ARG(const QString&, url)); return; } - auto offscreenUi = DependencyManager::get(); - offscreenUi->load("Browser.qml", [=](QQmlContext* context, QObject* newObject) { + offscreenUI->load("Browser.qml", [=](QQmlContext* context, QObject* newObject) { if (!url.isEmpty()) { newObject->setProperty("url", url); } From 54d57afdae8f952152c8ca6a667521318a284125 Mon Sep 17 00:00:00 2001 From: HifiExperiments Date: Thu, 21 Jan 2021 19:21:38 -0800 Subject: [PATCH 098/152] use rotation property to determine which axis is facing you --- interface/src/Application.cpp | 4 ++-- libraries/entities/src/EntityItemProperties.cpp | 3 ++- libraries/entities/src/EntityTree.cpp | 7 +++++++ 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index e38d156336..bad0b6a3aa 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -2462,7 +2462,7 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo glm::vec3 dPosition = frustumPos - position; // If x and z are 0, atan(x, z) is undefined, so default to 0 degrees float yawRotation = dPosition.x == 0.0f && dPosition.z == 0.0f ? 0.0f : glm::atan(dPosition.x, dPosition.z); - glm::quat result = glm::quat(glm::vec3(0.0f, yawRotation, 0.0f)); + glm::quat result = glm::quat(glm::vec3(0.0f, yawRotation, 0.0f)) * rotation; if (rotate90x) { result *= ROTATE_90X; } @@ -2475,7 +2475,7 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo // make sure s is not NaN for any component if (glm::length2(s) > 0.0f) { - glm::quat result = glm::conjugate(glm::toQuat(glm::lookAt(frustumPos, position, avatarUP))); + glm::quat result = glm::conjugate(glm::toQuat(glm::lookAt(frustumPos, position, avatarUP))) * rotation; if (rotate90x) { result *= ROTATE_90X; } diff --git a/libraries/entities/src/EntityItemProperties.cpp b/libraries/entities/src/EntityItemProperties.cpp index 870ed09515..1e771d8e43 100644 --- a/libraries/entities/src/EntityItemProperties.cpp +++ b/libraries/entities/src/EntityItemProperties.cpp @@ -811,7 +811,8 @@ EntityPropertyFlags EntityItemProperties::getChangedProperties() const { * @property {Uuid[]} renderWithZones=[]] - A list of entity IDs representing with which zones this entity should render. * If it is empty, this entity will render normally. Otherwise, this entity will only render if your avatar is within * one of the zones in this list. - * @property {BillboardMode} billboardMode="none" - Whether the entity is billboarded to face the camera. + * @property {BillboardMode} billboardMode="none" - Whether the entity is billboarded to face the camera. Use the rotation + * property to control which axis is facing you. * * @property {Entities.Grab} grab - The entity's grab-related properties. * diff --git a/libraries/entities/src/EntityTree.cpp b/libraries/entities/src/EntityTree.cpp index 3ed1ad581c..eeb42626c2 100644 --- a/libraries/entities/src/EntityTree.cpp +++ b/libraries/entities/src/EntityTree.cpp @@ -3141,6 +3141,13 @@ bool EntityTree::readFromMap(QVariantMap& map, const bool isImport) { } } + // Before, billboarded entities ignored rotation. Now, they use it to determine which axis is facing you. + if (contentVersion < (int)EntityVersion::AllBillboardMode) { + if (properties.getBillboardMode() != BillboardMode::NONE) { + properties.setRotation(glm::quat()); + } + } + EntityItemPointer entity = addEntity(entityItemID, properties, isImport); if (!entity) { qCDebug(entities) << "adding Entity failed:" << entityItemID << properties.getType(); From bb898aac332853c790add6e75d768050feeae073 Mon Sep 17 00:00:00 2001 From: HifiExperiments Date: Thu, 21 Jan 2021 21:05:00 -0800 Subject: [PATCH 099/152] non-exact collisions should work on models with pivots and useOriginalPivot=true --- .../src/RenderableModelEntityItem.cpp | 4 ++-- libraries/entities/src/EntityItem.cpp | 17 ++++++++++++++--- libraries/entities/src/EntityItem.h | 2 +- 3 files changed, 17 insertions(+), 6 deletions(-) diff --git a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp index 3f72527d72..3c807848f8 100644 --- a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp @@ -463,7 +463,7 @@ void RenderableModelEntityItem::computeShapeInfo(ShapeInfo& shapeInfo) { } } shapeInfo.setParams(type, 0.5f * extents, getCompoundShapeURL() + model->getSnapModelToRegistrationPoint()); - adjustShapeInfoByRegistration(shapeInfo); + adjustShapeInfoByRegistration(shapeInfo, model->getSnapModelToRegistrationPoint()); } else if (type >= SHAPE_TYPE_SIMPLE_HULL && type <= SHAPE_TYPE_STATIC_MESH) { updateModelBounds(); model->updateGeometry(); @@ -696,7 +696,7 @@ void RenderableModelEntityItem::computeShapeInfo(ShapeInfo& shapeInfo) { } shapeInfo.setParams(type, 0.5f * extents.size(), getModelURL() + model->getSnapModelToRegistrationPoint()); - adjustShapeInfoByRegistration(shapeInfo); + adjustShapeInfoByRegistration(shapeInfo, model->getSnapModelToRegistrationPoint()); } else { EntityItem::computeShapeInfo(shapeInfo); } diff --git a/libraries/entities/src/EntityItem.cpp b/libraries/entities/src/EntityItem.cpp index f7bd0266fa..4f80b8b5d1 100644 --- a/libraries/entities/src/EntityItem.cpp +++ b/libraries/entities/src/EntityItem.cpp @@ -1734,11 +1734,22 @@ float EntityItem::getRadius() const { return 0.5f * glm::length(getScaledDimensions()); } -void EntityItem::adjustShapeInfoByRegistration(ShapeInfo& info) const { +void EntityItem::adjustShapeInfoByRegistration(ShapeInfo& info, bool includePivot) const { + glm::vec3 offset; glm::vec3 registrationPoint = getRegistrationPoint(); if (registrationPoint != ENTITY_ITEM_DEFAULT_REGISTRATION_POINT) { - glm::vec3 registration = (ENTITY_ITEM_DEFAULT_REGISTRATION_POINT - registrationPoint) * getScaledDimensions(); - info.setOffset(registration); + offset += (ENTITY_ITEM_DEFAULT_REGISTRATION_POINT - registrationPoint) * getScaledDimensions(); + } + + if (includePivot) { + glm::vec3 pivot = getPivot(); + if (pivot != ENTITY_ITEM_ZERO_VEC3) { + offset += pivot; + } + } + + if (offset != ENTITY_ITEM_ZERO_VEC3) { + info.setOffset(offset); } } diff --git a/libraries/entities/src/EntityItem.h b/libraries/entities/src/EntityItem.h index e12c2d864b..bc3fd8b61e 100644 --- a/libraries/entities/src/EntityItem.h +++ b/libraries/entities/src/EntityItem.h @@ -404,7 +404,7 @@ public: // TODO: get rid of users of getRadius()... float getRadius() const; - virtual void adjustShapeInfoByRegistration(ShapeInfo& info) const; + virtual void adjustShapeInfoByRegistration(ShapeInfo& info, bool includePivot = true) const; virtual bool contains(const glm::vec3& point) const; virtual bool isReadyToComputeShape() const { return !isDead(); } From 367e8c1f8786ef96b373fcc83e1aeb21d53733a1 Mon Sep 17 00:00:00 2001 From: David Rowe Date: Sat, 23 Jan 2021 09:10:58 +1300 Subject: [PATCH 100/152] Updated Windows VCPKG that includes an alternative JOM download URL --- hifi_vcpkg.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hifi_vcpkg.py b/hifi_vcpkg.py index 1b9976da6e..ebdfb6c972 100644 --- a/hifi_vcpkg.py +++ b/hifi_vcpkg.py @@ -90,8 +90,8 @@ endif() if 'Windows' == system: self.exe = os.path.join(self.path, 'vcpkg.exe') self.bootstrapCmds = [ os.path.join(self.path, 'bootstrap-vcpkg.bat'), '-disableMetrics' ] - self.vcpkgUrl = self.assets_url + '/dependencies/vcpkg/builds/vcpkg-win32-client.zip%3FversionId=tSFzbw01VkkVFeRQ6YuAY4dro2HxJR9U' - self.vcpkgHash = 'a650db47a63ccdc9904b68ddd16af74772e7e78170b513ea8de5a3b47d032751a3b73dcc7526d88bcb500753ea3dd9880639ca842bb176e2bddb1710f9a58cd3' + self.vcpkgUrl = self.assets_url + '/dependencies/vcpkg/vcpkg-win32-client-20210122.zip' + self.vcpkgHash = '3df86b7d58c827bf08b3b7744f456f414b86a6d9bd58a507924103bc5a88f01ee495ce1f0fbf2f5b27f1ef6bfb1526e580ec13d3b9f87a89a462b3c50589fd6a' self.hostTriplet = 'x64-windows' if usePrebuilt: self.prebuiltArchive = self.assets_url + "/dependencies/vcpkg/builds/vcpkg-win32.zip%3FversionId=3SF3mDC8dkQH1JP041m88xnYmWNzZflx" From 08652769c1e3bc3d0fb718c3f10e1c880244da44 Mon Sep 17 00:00:00 2001 From: Kalila L Date: Sat, 23 Jan 2021 05:13:51 -0500 Subject: [PATCH 101/152] Add resource.json for later... --- scripts/system/appreciate/resource.json | 41 +++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 scripts/system/appreciate/resource.json diff --git a/scripts/system/appreciate/resource.json b/scripts/system/appreciate/resource.json new file mode 100644 index 0000000000..a83500fe12 --- /dev/null +++ b/scripts/system/appreciate/resource.json @@ -0,0 +1,41 @@ +{ + "name": "Appreciate App", + "version": "1.5.0", + "description": "Show someone else that you like what they're doing. Open the app to see usage instructions and some options!", + "homepage": "http://www.vircadia.com", + "bugs": "", + "keywords": [ + "Clapping", + "Clap", + "Applause" + ], + "icon": "/appreciate.jpg", + "images": [ + "/appreciate.jpg" + ], + "author": { + "name": "High Fidelity", + "email": "", + "url": "", + "license": "Apache 2.0" + }, + "sublicense": [ + ], + "contributors": [ + ], + "repository": { + "type": "git", + "url": "https://github.com/vircadia/vircadia-content.git" + }, + "main": "/appreciate_app.js", + "type": "app", + "meta": { + }, + "dependencies": { + }, + "engines": { + }, + "resource": { + "version": 1.0.0 + } +} \ No newline at end of file From f8119daa47c2e46f6f9779fee5c055bf828e0f36 Mon Sep 17 00:00:00 2001 From: Kalila L Date: Sat, 23 Jan 2021 18:49:21 -0500 Subject: [PATCH 102/152] Remove user agent overwriting in RequestFilters. --- libraries/ui/src/ui/types/RequestFilters.cpp | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/libraries/ui/src/ui/types/RequestFilters.cpp b/libraries/ui/src/ui/types/RequestFilters.cpp index 0eea5230ca..ceac3d00e8 100644 --- a/libraries/ui/src/ui/types/RequestFilters.cpp +++ b/libraries/ui/src/ui/types/RequestFilters.cpp @@ -4,6 +4,7 @@ // // Created by Kunal Gosar on 2017-03-10. // Copyright 2017 High Fidelity, Inc. +// Copyright 2021 Vircadia contributors. // // Distributed under the Apache License, Version 2.0. // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html @@ -25,7 +26,7 @@ namespace { - bool isAuthableHighFidelityURL(const QUrl& url) { + bool isAuthableMetaverseURL(const QUrl& url) { auto metaverseServerURL = MetaverseAPI::getCurrentMetaverseServerURL(); static QStringList HF_HOSTS = { metaverseServerURL.toString() @@ -70,7 +71,7 @@ void RequestFilters::interceptHFWebEngineRequest(QWebEngineUrlRequestInfo& info, } // check if this is a request to a highfidelity URL - bool isAuthable = isAuthableHighFidelityURL(info.requestUrl()); + bool isAuthable = isAuthableMetaverseURL(info.requestUrl()); auto accountManager = DependencyManager::get(); if (isAuthable) { // if we have an access token, add it to the right HTTP header for authorization @@ -82,13 +83,6 @@ void RequestFilters::interceptHFWebEngineRequest(QWebEngineUrlRequestInfo& info, info.setHttpHeader(OAUTH_AUTHORIZATION_HEADER.toLocal8Bit(), bearerTokenString.toLocal8Bit()); } } - static const QString USER_AGENT = "User-Agent"; - const QString tokenStringMobile{ NetworkingConstants::MOBILE_USER_AGENT }; - const QString tokenStringMetaverse{ NetworkingConstants::METAVERSE_USER_AGENT }; - const QString tokenStringLimitedCommerce{ "Chrome/48.0 (VircadiaInterface limitedCommerce)" }; - - const QString tokenString = !isAuthable ? tokenStringMobile : (accountManager->getLimitedCommerce() ? tokenStringLimitedCommerce : tokenStringMetaverse); - info.setHttpHeader(USER_AGENT.toLocal8Bit(), tokenString.toLocal8Bit()); } void RequestFilters::interceptFileType(QWebEngineUrlRequestInfo& info) { From c443a2dd008410bab5b24556ca415301207a349c Mon Sep 17 00:00:00 2001 From: Kalila <69767640+digisomni@users.noreply.github.com> Date: Sat, 23 Jan 2021 19:20:19 -0500 Subject: [PATCH 103/152] Update BuildInfo.h.in --- cmake/templates/BuildInfo.h.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/templates/BuildInfo.h.in b/cmake/templates/BuildInfo.h.in index fa29c40a61..7f3a63d4b4 100644 --- a/cmake/templates/BuildInfo.h.in +++ b/cmake/templates/BuildInfo.h.in @@ -4,7 +4,7 @@ // // Created by Stephen Birarda on 1/14/16. // Copyright 2015 High Fidelity, Inc. -// Copyright 2020 Vircadia contributors. +// Copyright 2021 Vircadia contributors. // // Distributed under the Apache License, Version 2.0. // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html From 62e4ca8ada09113f53a4df6c10887efdd829841f Mon Sep 17 00:00:00 2001 From: Kalila L Date: Thu, 28 Jan 2021 16:55:46 -0500 Subject: [PATCH 104/152] Update build docs slightly. --- BUILD.md | 4 ++-- BUILD_WIN.md | 40 +++++++++++++++++++++++----------------- INSTALLER.md | 4 ++-- 3 files changed, 27 insertions(+), 21 deletions(-) diff --git a/BUILD.md b/BUILD.md index 2d94d1b5b1..b09700c2e7 100644 --- a/BUILD.md +++ b/BUILD.md @@ -59,9 +59,9 @@ You do not need to install vcpkg. Building the dependencies can be lengthy and the resulting files will be stored in your OS temp directory. However, those files can potentially get cleaned up by the OS, so in order to avoid this and having to redo the lengthy build step, you can set the following environment variable: -export HIFI_VCPKG_BASE=/path/to/directory + export HIFI_VCPKG_BASE=/path/to/directory -Where /path/to/directory is the path to a directory where you wish the build files to get stored. +Where `/path/to/directory` is the path to a directory where you wish the build files to get stored. #### Generating Build Files diff --git a/BUILD_WIN.md b/BUILD_WIN.md index de51ae307b..96f570981a 100644 --- a/BUILD_WIN.md +++ b/BUILD_WIN.md @@ -7,39 +7,41 @@ This is a stand-alone guide for creating your first Vircadia build for Windows 6 Note: We are now using Visual Studio 2017 or 2019 and Qt 5.12.3. If you are upgrading from previous versions, do a clean uninstall of those versions before going through this guide. -Note: The prerequisites will require about 10 GB of space on your drive. You will also need a system with at least 8GB of main memory. +**Note: The prerequisites will require about 10 GB of space on your drive. You will also need a system with at least 8GB of main memory.** ### Step 1. Visual Studio & Python 3.x If you don’t have Community or Professional edition of Visual Studio, download [Visual Studio Community 2019](https://visualstudio.microsoft.com/vs/). If you have Visual Studio 2017, you are not required to download Visual Studio 2019. -When selecting components, check "Desktop development with C++". On the right on the Summary toolbar, select the following components. +When selecting components, check "Desktop development with C++". -#### If you're installing Visual Studio 2017, +If you do not already have a Python 3.x development environment installed and want to install it with Visual Studio, check "Python Development". If you already have Visual Studio installed and need to add Python, open the "Add or remove programs" control panel and find the "Microsoft Visual Studio Installer". Select it and click "Modify". In the installer, select "Modify" again, then check "Python Development" and allow the installer to apply the changes. + +On the right on the Summary toolbar, select the following components based on your Visual Studio version. + +#### If you're installing Visual Studio 2017 * Windows 8.1 SDK and UCRT SDK * VC++ 2015.3 v14.00 (v140) toolset for desktop -#### If you're installing Visual Studio 2019, +#### If you're installing Visual Studio 2019 * MSVC v142 - VS 2019 C++ X64/x86 build tools * MSVC v141 - VS 2017 C++ x64/x86 build tools * MSVC v140 - VS 2015 C++ build tools (v14.00) -If you do not already have a Python 3.x development environment installed, also check "Python Development" in this screen. +### Step 1a. Alternate Python -If you already have Visual Studio installed and need to add Python, open the "Add or remove programs" control panel and find the "Microsoft Visual Studio Installer". Select it and click "Modify". In the installer, select "Modify" again, then check "Python Development" and allow the installer to apply the changes. - -### Step 1a. Alternate Python - -If you do not wish to use the Python installation bundled with Visual Studio, you can download the installer from [here](https://www.python.org/downloads/). Ensure you get version 3.6.6 or higher. +If you do not wish to use the Python installation bundled with Visual Studio, you can download the installer from [here](https://www.python.org/downloads/). Ensure that you get version 3.6.6 or higher. ### Step 2. Python Dependencies -In a command-line that can access Python's pip you will need to run the following command: +In an administrator command-line that can access Python's pip you will need to run the following command: `pip install distro` +If you do not use an administrator command-line, you will get errors. + ### Step 3. Installing CMake Download and install the latest version of CMake 3.15. @@ -47,7 +49,11 @@ Download and install the latest version of CMake 3.15. Download the file named win64-x64 Installer from the [CMake Website](https://cmake.org/download/). You can access the installer on this [3.15 Version page](https://cmake.org/files/v3.15/). During installation, make sure to check "Add CMake to system PATH for all users" when prompted. -### Step 4. Create VCPKG environment variable +### Step 4. Node.JS and NPM + +Install version 10.15.0 LTS (or greater) of [Node.JS and NPM](). + +### Step 5. Create VCPKG environment variable In the next step, you will use CMake to build Vircadia. By default, the CMake process builds dependency files in Windows' `%TEMP%` directory, which is periodically cleared by the operating system. To prevent you from having to re-build the dependencies in the event that Windows clears that directory, we recommend that you create a `HIFI_VCPKG_BASE` environment variable linked to a directory somewhere on your machine. That directory will contain all dependency files until you manually remove them. To create this variable: @@ -66,7 +72,7 @@ To create this variable: * Set "Variable name" to `HIFI_VCPKG_BOOTSTRAP` * Set "Variable value" to `1` -### Step 5. Running CMake to Generate Build Files +### Step 6. Running CMake to Generate Build Files Run Command Prompt from Start and run the following commands: `cd "%VIRCADIA_DIR%"` @@ -81,7 +87,7 @@ Run `cmake .. -G "Visual Studio 16 2019" -A x64`. Where `%VIRCADIA_DIR%` is the directory for the Vircadia repository. -### Step 6. Making a Build +### Step 7. Making a Build Open `%VIRCADIA_DIR%\build\vircadia.sln` using Visual Studio. @@ -89,7 +95,7 @@ Change the Solution Configuration (menu ribbon under the menu bar, next to the g Run from the menu bar `Build > Build Solution`. -### Step 7. Testing Interface +### Step 8. Testing Interface Create another environment variable (see Step #3) * Set "Variable name": `_NO_DEBUG_HEAP` @@ -105,11 +111,11 @@ Note: You can also run Interface by launching it from command line or File Explo ## Troubleshooting -For any problems after Step #6, first try this: +For any problems after Step #7, first try this: * Delete your locally cloned copy of the Vircadia repository * Restart your computer * Redownload the [repository](https://github.com/vircadia/vircadia) -* Restart directions from Step #6 +* Restart directions from Step #7 #### CMake gives you the same error message repeatedly after the build fails diff --git a/INSTALLER.md b/INSTALLER.md index 994725ac28..84ee14eaaa 100644 --- a/INSTALLER.md +++ b/INSTALLER.md @@ -60,8 +60,8 @@ To produce an executable installer on Windows, the following are required: 1. Copy `Release\ApplicationID.dll` to `C:\Program Files (x86)\NSIS\Plugins\x86-ansi\` 1. Copy `ReleaseUnicode\ApplicationID.dll` to `C:\Program Files (x86)\NSIS\Plugins\x86-unicode\` -1. [Node.JS and NPM]() - 1. Install version 10.15.0 LTS +1. [Node.JS and NPM]() + 1. Install version 10.15.0 LTS (or greater) ##### Code Signing (optional) From 22b935ee656733a11c0bec262a019dabf3d0d544 Mon Sep 17 00:00:00 2001 From: Alezia Kurdis <60075796+AleziaKurdis@users.noreply.github.com> Date: Thu, 28 Jan 2021 23:55:09 -0500 Subject: [PATCH 105/152] Add Icon for Radius Search of the Create App Add Icon for Radius Search of the Create App --- interface/resources/fonts/vircadia_glyphs.ttf | Bin 4000 -> 4432 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/interface/resources/fonts/vircadia_glyphs.ttf b/interface/resources/fonts/vircadia_glyphs.ttf index 7d3fe9d913a85bcbfc00162d1ebf1617c40c1b48..ed89c2719a81b17a18c252a9ec306d35f2741678 100644 GIT binary patch delta 1777 zcmcgtU2GIp6#mYgnR{nu2U?Pb^KtU598iMgb)I`xtDJk&aBXcsj z-#OpC=X~enX6C*0H`x*hKo|!hVW6*XbN`VuZ~g;BN&u2iKK?`>R^WXgVgX2Pc($W3 zvU%XA=~A{H2?0yO91&9@}pzp z`;{2!0DTJ3qr3NP8=84)`ZGWt0H|whX#ZaPf>D4v0c2ho8XMkqq`nIXP6E<%d-uFL z{_?<~KhcWtRX}=pK|TSE%g_GxqOs<8Xbk>y+57F#o%IOSXn3ZFw$aU*<20tF7j^&+ zx@MZ#4>MOuIrT3)O7(rXK%m*%#@g7#gSGmDEypGRFjxS6!j3`0%)3f^-9|H3U?n_s z175ipb91p`yi$nUF-!1V)^*CI=6l^5#fAU!O2M`S&$^C(Zt~a6++361qU*X5wRHW~ zB2y4O$;2TavmT&fAyf=g-ZJ>vg>$YUzfdTTxSA!uF1ak?jpTB2qHh;INm2aAR+x_iUm!F?;^}$+u5z+&FQU>|5{Lal)}^!yT+!(O|#TzuxM%02!0$q}S=I z+fCH5?0?ly-bl~Qjid{U^n+UvP#r@^poMMhsg4(kW)e?V{~f z$*YtruH&1icooNWxX{UMC$CENxE&V`7d%B3?|yQD)5(t86|dqhoD{jm0DT-bwO~lo zm`a>vP5~Bdvcrm^3RBKcRclTzH&xR`rfp{?Z9cy<6O~B|s0Q(_e6E!%U3p7uie&1+ zXe5$Rhz@cRhE9E__nCdYA5b&dAwvriCzXj{AQ142d|@|=s4OdL)y?OoYE?I{@^sp4 zYuiX}Uu7YlveV zwgXWvxIeMD?a#rt#gP@`w&1PgIvrGUOHRpcrw%GPWuIOECD(bRl=GubhpY%LxWTw( z5Ene>xK7!tQjLm*Ya1$+$I9#1*R)16lv0#LIGxJWdk$yHWnvE{1rsDOViJ)|0f|eD z5s}0=V`M5aCtG2X%p^amt1C$rh9ntkDwC$~g0LlokQP`FHtSf=46Q%^G?a?xJ@a>?jI zD}6~{Lqj9l-~m+hKM<`{E*8q(680)(={Avd)>6rWyMF}#0ocMeHUIzs delta 1342 zcmchX&u<$=6vw}B_LsZf^(M~R-iTe>al-DFw7A%7ZwRFM(GmnDB&Ah~M4&ZkYNIqX zf&fLJngc>PM53vsN+5(PepDP|MIa6wI8=f|5J;_n77Fx&gjJ;%NRf~N@}>#!4|Ja9 zy*F>(%=^q}G~Z;-r92P-6|aHA*zoYdk;TuyeG|}L2Vg$9_km$-$9sTw6hLzHKsHxC zICf>x%T%=q0HN~nmyh{ITRR{u0Nf*$snSv7)l<6x{0N{}sZ5o)pK%2s9Y9xQX6_`v zMiGEM1!(B_iOEvwxg+NQehi@AnbOHw{EEW>^#DjeTbh}gK2x0rLf-@2q1hA9&pk8t z#-HehvJ2qu3h)Ww{`y@ztlj?y!VJy!!zb^KZrU@{PZPBPnxxg*2Q(875&+oft#z=U zYQK=M{5N}tsz>kHO`L>g_E@=K(P20Da8f2Z!2Q!rj#tw8KINwqqyImXCG% zv3wz#i|b-%#`d~49X}yC%`P?r8Qb&ovCjD$Hzbx( zcE#g#p|Mi0um5JbmgS}b{Yp!@b@Eti`BBrgs+K!jX}&Bx1f7;?6&xglp~FNMT9nwcGwqs|ZIK-q*BCV39yA7N>g%P`r)Tyr zSV8^u4+API&_nu&zHdYy0grj~(2Mlt7SPu1{10S)bv0Qpr&6~HQl_!8w6u7t9_$8y zgN+njrE5rFFP;F}L`jV4iFhLJ7yV+jsT{j0QX(#i-Q?I=@*L0h9NY2iLUSfdp6vxW zS+cWyJ|RU&iZG2tN$j*8yWsUxK6h=jSlm;5cwc|Gy;V)|f}vT-^gy{#Aa;i-F^M=v zBJmXBd4VxT9FfSXjG_WBrq=`tF~$**tn4IlTXSuSzLWcRk4+2|CCL?ymgugY-g{E1 zWW=0%;U!`%LWFS~#~6hf;~B5Xk}MG81(FykBF`K-q>#c#1Wx1_GmNJr(G;USg8+E+ zqMN>;uc`>69XsFy6w{mMFXVH5l-Tn9Vjnphqm120o?pC=a*4R)NMe?xL_Fuyf)a@~ z8rtKk(sup2AP7%}B=xcq-6n@Gt5T>CdrTD5v9yv@= Date: Thu, 28 Jan 2021 23:57:37 -0500 Subject: [PATCH 106/152] CSS for Create App new menu bar This add the css for the new menu bar of the create app. --- scripts/system/html/css/edit-style.css | 78 ++++++++++++++++++-------- 1 file changed, 54 insertions(+), 24 deletions(-) diff --git a/scripts/system/html/css/edit-style.css b/scripts/system/html/css/edit-style.css index db535327d9..43b1154fd2 100644 --- a/scripts/system/html/css/edit-style.css +++ b/scripts/system/html/css/edit-style.css @@ -1208,7 +1208,7 @@ div.refresh input[type="button"] { } .fieldset .checkbox-sub-props .property:first-child { - margin-top: 0; + margin-top: 0px; } .column { @@ -1252,18 +1252,18 @@ textarea:enabled[scrolling="true"]::-webkit-resizer { } div#grid-section, body#entity-list-body { - padding-bottom: 0; - margin: 16px; + padding-bottom: 0px; + margin: 0px 8px 8px 8px; } #entity-list-header { - margin-bottom: 36px; + margin-bottom: 6px; } #entity-list-header div { display: inline-block; width: 65px; - margin-right: 6px; + margin-right: 4px; } #entity-list-header div input:first-child { @@ -1281,13 +1281,19 @@ div#grid-section, body#entity-list-body { border-bottom-left-radius: 0; } +#delete { + float: right; + margin-right: 0; + background-color: #ff0000; +} + #entity-list { position: relative; /* New positioning context. */ } #filter-area { padding-right: 168px; - padding-bottom: 24px; + padding-bottom: 8px; } #filter-type-multiselect-box select { @@ -1340,35 +1346,59 @@ div#grid-section, body#entity-list-body { #filter-type-options input[type=button]:enabled:hover { background: linear-gradient(#afafaf 20%, #575757 100%); } - #filter-search-and-icon { position: relative; left: 118px; width: calc(100% - 126px); } - #filter-in-view { position: absolute; - top: 0; + top: 0px; right: 126px; } - #filter-radius-and-unit { position: relative; float: right; margin-right: -168px; - top: -45px; + top: -28px; } -#filter-radius-and-unit label { - margin-left: 2px; +#entity-list-menubar { + margin: 0px -8px 6px -8px; + padding: 0px 8px 0px 8px;; + border: none; + background-color: #000; + background: linear-gradient(#343434 20%, #000 100%); } -#filter-radius-and-unit span { +.icon-input-radius input { position: relative; - top: 25px; + padding-left: 36px; +} +.icon-input-radius span { + position: absolute; + left: 4px; + top: -4px; + font-family: Vircadia-Glyphs; + font-size: 23px; + color: #afafaf; +} +.icon-input-radius input:focus + span + label { + color: #ffffff; +} +.icon-input-radius label { + position: absolute; + margin-left: 3px; + bottom: 6px; right: 9px; - z-index: 2; font-style: italic; } +#filter-radius:focus { + outline: none; + box-sizing: border-box; + height: 26px; + margin-top: 1px; + margin-bottom: 1px; + box-shadow: 0 0 0 1px #00b4ef; +} #filter-radius-and-unit input { width: 120px; border-radius: 14.5px; @@ -1384,12 +1414,12 @@ div#grid-section, body#entity-list-body { #footer-text { float: right; - padding-top: 12px; + padding-top: 6px; padding-right: 22px; } input[type=button]#export { - height: 38px; + height: 26px; width: 180px; } @@ -1441,7 +1471,7 @@ input[type=button]#export { overflow-x: hidden; overflow-y: auto; box-sizing: border-box; - padding-top: 28px; /* Space for header and footer outside of scroll region. */ + padding-top: 37px; /* Space for header and footer outside of scroll region. */ margin-top: 28px; border-left: 2px solid #575757; border-right: 2px solid #575757; @@ -1462,7 +1492,7 @@ input[type=button]#export { } #entity-table { - margin-top: -28px; + margin-top: -20px; margin-bottom: -18px; table-layout: fixed; border: none; @@ -1539,7 +1569,7 @@ input[type=button]#export { } #entity-table td .glyph .vglyph { text-align: center; - padding: 0; + padding: 0px; } #properties-base { @@ -1888,10 +1918,10 @@ div.multiZoneSelToolbar { div.entity-list-menu { position: fixed; display: none; - width: 70%; + width: 370px; height: 30px; - top: 42px; - left: 150px; + top: 27px; + left: 8px; right: 0; bottom: 0; border-style: solid; From c8679375b179f3afc0e58d4783f08ef7fe515d13 Mon Sep 17 00:00:00 2001 From: Alezia Kurdis <60075796+AleziaKurdis@users.noreply.github.com> Date: Thu, 28 Jan 2021 23:59:44 -0500 Subject: [PATCH 107/152] Height adjustment for new Menu bar Height adjustment for new Menu bar --- scripts/system/create/entityList/html/js/entityList.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/system/create/entityList/html/js/entityList.js b/scripts/system/create/entityList/html/js/entityList.js index c610795bc9..96366d7183 100644 --- a/scripts/system/create/entityList/html/js/entityList.js +++ b/scripts/system/create/entityList/html/js/entityList.js @@ -15,7 +15,7 @@ const BYTES_PER_MEGABYTE = 1024 * 1024; const COLLAPSE_EXTRA_INFO = "E"; const EXPAND_EXTRA_INFO = "D"; const FILTER_IN_VIEW_ATTRIBUTE = "pressed"; -const WINDOW_NONVARIABLE_HEIGHT = 227; +const WINDOW_NONVARIABLE_HEIGHT = 180; const EMPTY_ENTITY_ID = "0"; const MAX_LENGTH_RADIUS = 9; const MINIMUM_COLUMN_WIDTH = 24; From 70781fea3b42b2ffa8fc9a034e85c4b49b358188 Mon Sep 17 00:00:00 2001 From: Alezia Kurdis <60075796+AleziaKurdis@users.noreply.github.com> Date: Fri, 29 Jan 2021 00:04:48 -0500 Subject: [PATCH 108/152] New Menubar Add a New Menubar in the create app, just over the toolbar. The Delete Red button is now back in the toolbar. The radius search label has been replaced by a radar icon, the space has been recuperated for the menubar. So we have now space for more menu & menu items, and for more button too. which will help for future addition to this application. --- .../create/entityList/html/entityList.html | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/scripts/system/create/entityList/html/entityList.html b/scripts/system/create/entityList/html/entityList.html index cc30c6d6df..93585c7338 100644 --- a/scripts/system/create/entityList/html/entityList.html +++ b/scripts/system/create/entityList/html/entityList.html @@ -24,6 +24,11 @@ +
+ + + +
@@ -32,9 +37,7 @@
- - - +
@@ -58,8 +61,7 @@
- - + D
@@ -130,12 +132,6 @@
-
* var METERS_TO_INCHES = 39.3701; * var entity = Entities.addEntity({ diff --git a/libraries/networking/src/NetworkingConstants.h b/libraries/networking/src/NetworkingConstants.h index a3818930dd..ccdb9ea75c 100644 --- a/libraries/networking/src/NetworkingConstants.h +++ b/libraries/networking/src/NetworkingConstants.h @@ -25,6 +25,8 @@ namespace NetworkingConstants { // You can avoid changing that and still effectively use a connected domain on staging // if you manually generate a personal access token for the domains scope // at https://staging.highfidelity.com/user/tokens/new?for_domain_server=true + + const QString WEB_ENGINE_VERSION = "Chrome/69.0.3497.113"; // For now we only have one Metaverse server. const QUrl METAVERSE_SERVER_URL_STABLE { "https://metaverse.vircadia.com/live" }; @@ -37,16 +39,16 @@ namespace NetworkingConstants { // Use a custom User-Agent to avoid ModSecurity filtering, e.g. by hosting providers. const QByteArray VIRCADIA_USER_AGENT = "Mozilla/5.0 (VircadiaInterface)"; - const QString WEB_ENGINE_USER_AGENT = "Chrome/48.0 (VircadiaInterface)"; - const QString METAVERSE_USER_AGENT = "Chrome/48.0 (VircadiaInterface)"; - const QString MOBILE_USER_AGENT = "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Mobile Safari/537.36"; - - const QUrl BUILDS_XML_URL("https://highfidelity.com/builds.xml"); - const QUrl MASTER_BUILDS_XML_URL("https://highfidelity.com/dev-builds.xml"); + const QString WEB_ENGINE_USER_AGENT = "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) " + WEB_ENGINE_VERSION + " Mobile Safari/537.36"; + const QString MOBILE_USER_AGENT = "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) " + WEB_ENGINE_VERSION + " Mobile Safari/537.36"; // WebEntity Defaults const QString WEB_ENTITY_DEFAULT_SOURCE_URL = "https://vircadia.com/"; - const QString WEB_ENTITY_DEFAULT_USER_AGENT = "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Mobile Safari/537.36"; + const QString WEB_ENTITY_DEFAULT_USER_AGENT = WEB_ENGINE_USER_AGENT; + + // Builds URLs + const QUrl BUILDS_XML_URL("https://highfidelity.com/builds.xml"); + const QUrl MASTER_BUILDS_XML_URL("https://highfidelity.com/dev-builds.xml"); const QString DEFAULT_AVATAR_COLLISION_SOUND_URL = "https://hifi-public.s3.amazonaws.com/sounds/Collisions-otherorganic/Body_Hits_Impact.wav"; From 4554aa338b1a3157711df499cf5c11fcf5eb86d7 Mon Sep 17 00:00:00 2001 From: HifiExperiments <53453710+HifiExperiments@users.noreply.github.com> Date: Sat, 30 Jan 2021 00:28:25 -0800 Subject: [PATCH 122/152] Update BillboardMode.cpp --- libraries/shared/src/BillboardMode.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/shared/src/BillboardMode.cpp b/libraries/shared/src/BillboardMode.cpp index d8d1b64f65..6cc6dca976 100644 --- a/libraries/shared/src/BillboardMode.cpp +++ b/libraries/shared/src/BillboardMode.cpp @@ -25,7 +25,7 @@ void BillboardModeHelpers::setBillboardRotationOperator(std::function Date: Sat, 30 Jan 2021 20:05:52 -0500 Subject: [PATCH 123/152] Remove requirement of admin / logged in to teleport to people in nearby users. --- interface/resources/qml/hifi/NameCard.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/resources/qml/hifi/NameCard.qml b/interface/resources/qml/hifi/NameCard.qml index 2cf07e32bf..0dd29b9e0f 100644 --- a/interface/resources/qml/hifi/NameCard.qml +++ b/interface/resources/qml/hifi/NameCard.qml @@ -244,7 +244,7 @@ Item { color: hifi.colors.darkGray; MouseArea { anchors.fill: parent - enabled: selected && pal.activeTab == "nearbyTab" && thisNameCard.userName !== "" && isPresent; + enabled: selected && pal.activeTab == "nearbyTab" && isPresent; hoverEnabled: enabled onClicked: { goToUserInDomain(thisNameCard.uuid); From 6a956c88f3264815edcad732fba9aa2975dc8c70 Mon Sep 17 00:00:00 2001 From: Kalila <69767640+digisomni@users.noreply.github.com> Date: Mon, 1 Feb 2021 02:25:47 -0500 Subject: [PATCH 124/152] Update README.md --- README.md | 54 +++++++++++++++++++++++++----------------------------- 1 file changed, 25 insertions(+), 29 deletions(-) diff --git a/README.md b/README.md index c7a9ee8d52..acfc5df259 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,8 @@ -# Vircadia +# Vircadia (Codename Athena) ### What is this? -Vircadia is a 3D social software project seeking to incrementally bring about a truly free and open metaverse, in desktop and XR. +Vircadia™ is a 3D social software project seeking to incrementally bring about a truly free and open metaverse, in desktop and XR. ### [Download](https://vircadia.com/download-vircadia/) @@ -12,50 +12,46 @@ Vircadia is a 3D social software project seeking to incrementally bring about a ### How to build the Interface -[For Windows](https://github.com/vircadia/vircadia/blob/master/BUILD_WIN.md) - -[For Mac](https://github.com/vircadia/vircadia/blob/master/BUILD_OSX.md) - -[For Linux](https://github.com/vircadia/vircadia/blob/master/BUILD_LINUX.md) - -[For Linux - Vircadia Builder](https://github.com/vircadia/vircadia-builder) +- [For Windows](https://github.com/vircadia/vircadia/blob/master/BUILD_WIN.md) +- [For Mac](https://github.com/vircadia/vircadia/blob/master/BUILD_OSX.md) +- [For Linux](https://github.com/vircadia/vircadia/blob/master/BUILD_LINUX.md) +- [For Linux - Vircadia Builder](https://github.com/vircadia/vircadia-builder) ### How to deploy a Server -[For Windows and Linux](https://vircadia.com/deploy-a-server/) +- [For Windows and Linux](https://vircadia.com/deploy-a-server/) ### How to build a Server -[For Linux - Vircadia Builder](https://github.com/vircadia/vircadia-builder) +- [For Windows](https://github.com/vircadia/vircadia/blob/master/BUILD_WIN.md) +- [For Linux](https://github.com/vircadia/vircadia/blob/master/BUILD_LINUX.md) +- [For Linux - Vircadia Builder](https://github.com/vircadia/vircadia-builder) ### How to generate an Installer -[For Windows](https://github.com/vircadia/vircadia/blob/master/INSTALLER.md) +- [For Windows](https://github.com/vircadia/vircadia/blob/master/INSTALLER.md) +- [For Mac](https://github.com/vircadia/vircadia/blob/master/INSTALLER.md#os-x) +- [For Linux - AppImage - Vircadia Builder](https://github.com/vircadia/vircadia-builder/blob/master/README.md#building-appimages) -[For Linux - AppImage - Vircadia Builder](https://github.com/vircadia/vircadia-builder/blob/master/README.md#building-appimages) - -### Boot to Metaverse: The Goal +### Boot to Metaverse: [The Goal](https://vircadia.com/vision/) Having a place to experience adventure, a place to relax with calm breath, that's a world to live in. An engine to support infinite combinations and possibilities of worlds without censorship and interruption, that's a metaverse. Finding a way to make infinite realities our reality is the dream. ### Boot to Metaverse: The Technicals -Many developers have had personal combinations of High Fidelity from C++ modifications to different default scripts, all of which are lost to time as their fullest potential is never truly shared and propagated through the system. +Vircadia consists of many projects and codebases with its unifying structure's goal being a decentralized metaverse. -The goal of this project is to achieve the metaverse dream through shared contribution and building. Setting goals that are achievable yet meaningful is key to making proper forward progress on the technical front whilst maintaining morale. +- The Interface (Codename Athena) - You are here! +- The Server (Codename Athena) - You are also here! +- [The Metaverse (Codename Iamus)](https://github.com/vircadia/Iamus/) +- [The Metaverse Dashboard (Codename Iamus)](https://github.com/vircadia/pantheon-launcher/) +- [The Launcher (Codename Pantheon)](https://github.com/vircadia/pantheon-launcher/) +- The UI Framework (Codename Nyx) - Codebase coming soon. -### Why High Fidelity's Virtual Reality Platform? - -Because of all the options, it is the only starting point that is open-source, cross-platform, fully VR integrated + fully desktop integrated with an aim for quality visuals and performance. It also provides a foundation to build from including components like entity management, full body IK, etc. - -WebXR offers the open-source and decentralized aspect but does not have any of the full featured starting points such as avatars, IK, etc. which means that a lot of ground work will have to be laid to make something functional. Far more work will need to be done to create a truly seamless and extensive experience as well. - -Platforms like NeosVR or VRChat are not viable from go due to their fundamental closed-source and centralized nature. A metaverse to live in cannot have the keys handed over to any singular entity, if any at all. - -We need to do the best we can with what we've got and our best bet as open source developers is to not redesign the wheel if we can help it! +#### Child Projects +- [Vircadia Builder for Linux](https://github.com/vircadia/vircadia-builder/) +- [General Documentation](https://github.com/vircadia/vircadia-docs-sphinx/) ### Contribution -A special thanks to the contributors of Vircadia. - -[Contribution](CONTRIBUTING.md) +There are many contributors to Vircadia. Code writers, reviewers, testers, documentation writers, modelers, and general supporters of the project are all integral to its development and success towards its goals. Find out how you can [contribute](CONTRIBUTING.md)! From 8abfe2ead01f69a9d78925e4f968216dbc03bf31 Mon Sep 17 00:00:00 2001 From: Kalila L Date: Mon, 1 Feb 2021 03:42:24 -0500 Subject: [PATCH 125/152] Add releaseName property to About namespace. --- interface/src/AboutUtil.cpp | 5 +++++ interface/src/AboutUtil.h | 4 ++++ 2 files changed, 9 insertions(+) diff --git a/interface/src/AboutUtil.cpp b/interface/src/AboutUtil.cpp index b9bea2d85c..d1424d4642 100644 --- a/interface/src/AboutUtil.cpp +++ b/interface/src/AboutUtil.cpp @@ -4,6 +4,7 @@ // // Created by Vlad Stelmahovsky on 15/5/2018. // Copyright 2018 High Fidelity, Inc. +// Copyright 2021 Vircadia contributors. // // Distributed under the Apache License, Version 2.0. // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html @@ -40,6 +41,10 @@ QString AboutUtil::getBuildVersion() const { return BuildInfo::VERSION; } +QString AboutUtil::getReleaseName() const { + return BuildInfo::RELEASE_NAME; +} + QString AboutUtil::getQtVersion() const { return qVersion(); } diff --git a/interface/src/AboutUtil.h b/interface/src/AboutUtil.h index 8cc76dad1e..f072ae8b4a 100644 --- a/interface/src/AboutUtil.h +++ b/interface/src/AboutUtil.h @@ -30,12 +30,14 @@ * Read-only. * @property {string} buildDate - The build date of Interface that is currently running. Read-only. * @property {string} buildVersion - The build version of Interface that is currently running. Read-only. + * @property {string} releaseName - The release codename of the version that Interface is currently running. Read-only. * @property {string} qtVersion - The Qt version used in Interface that is currently running. Read-only. * * @example * print("Interface platform: " + About.platform); * print("Interface build date: " + About.buildDate); * print("Interface version: " + About.buildVersion); + * print("Interface release name: " + About.releaseName); * print("Qt version: " + About.qtVersion); */ @@ -66,6 +68,7 @@ class AboutUtil : public QObject { Q_PROPERTY(QString platform READ getPlatformName CONSTANT) Q_PROPERTY(QString buildDate READ getBuildDate CONSTANT) Q_PROPERTY(QString buildVersion READ getBuildVersion CONSTANT) + Q_PROPERTY(QString releaseName READ getReleaseName CONSTANT) Q_PROPERTY(QString qtVersion READ getQtVersion CONSTANT) public: static AboutUtil* getInstance(); @@ -74,6 +77,7 @@ public: QString getPlatformName() const { return "Vircadia"; } QString getBuildDate() const; QString getBuildVersion() const; + QString getReleaseName() const; QString getQtVersion() const; public slots: From 2287aba7fa18e18a49d6263463f98ce571f55daf Mon Sep 17 00:00:00 2001 From: Kalila L Date: Mon, 1 Feb 2021 05:10:45 -0500 Subject: [PATCH 126/152] Update installer names and images "Alpha" -> "" --- .github/workflows/master_build.yml | 6 +++--- .github/workflows/pr_build.yml | 4 ++-- android/build_android.sh | 2 +- cmake/installer/installer-header.bmp | Bin 102654 -> 102654 bytes cmake/installer/uninstaller-header.bmp | Bin 102654 -> 102654 bytes cmake/macros/GenerateInstallers.cmake | 2 +- 6 files changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/workflows/master_build.yml b/.github/workflows/master_build.yml index 2caddef182..ee6ef88d0e 100644 --- a/.github/workflows/master_build.yml +++ b/.github/workflows/master_build.yml @@ -83,15 +83,15 @@ jobs: shell: bash run: | echo "${{ steps.buildenv1.outputs.symbols_archive }}" - echo "ARTIFACT_PATTERN=Vircadia-Alpha-*.$INSTALLER_EXT" >> $GITHUB_ENV + echo "ARTIFACT_PATTERN=Vircadia-*.$INSTALLER_EXT" >> $GITHUB_ENV # Build type variables echo "GIT_COMMIT_SHORT=${{ steps.buildenv1.outputs.github_sha_short }}" >> $GITHUB_ENV if [ "${{ matrix.build_type }}" = "full" ]; then echo "CLIENT_ONLY=FALSE" >> $GITHUB_ENV - echo "INSTALLER=Vircadia-Alpha-$BUILD_NUMBER-$GIT_COMMIT_SHORT.$INSTALLER_EXT" >> $GITHUB_ENV + echo "INSTALLER=Vircadia-$BUILD_NUMBER-$GIT_COMMIT_SHORT.$INSTALLER_EXT" >> $GITHUB_ENV else echo "CLIENT_ONLY=TRUE" >> $GITHUB_ENV - echo "INSTALLER=Vircadia-Alpha-Interface-$BUILD_NUMBER-$GIT_COMMIT_SHORT.$INSTALLER_EXT" >> $GITHUB_ENV + echo "INSTALLER=Vircadia-Interface-$BUILD_NUMBER-$GIT_COMMIT_SHORT.$INSTALLER_EXT" >> $GITHUB_ENV fi - name: Clear working directory if: startsWith(matrix.os, 'windows') diff --git a/.github/workflows/pr_build.yml b/.github/workflows/pr_build.yml index 8a3dce98ec..9d6984b5b2 100644 --- a/.github/workflows/pr_build.yml +++ b/.github/workflows/pr_build.yml @@ -86,9 +86,9 @@ jobs: echo "${{ steps.buildenv1.outputs.symbols_archive }}" echo "GIT_COMMIT_SHORT=${{ steps.buildenv1.outputs.github_sha_short }}" >> $GITHUB_ENV if [[ "${{ matrix.build_type }}" != "android" ]]; then - echo "ARTIFACT_PATTERN=Vircadia-Alpha-PR${{ github.event.number }}-*.$INSTALLER_EXT" >> $GITHUB_ENV + echo "ARTIFACT_PATTERN=Vircadia-PR${{ github.event.number }}-*.$INSTALLER_EXT" >> $GITHUB_ENV # Build type variables - echo "INSTALLER=Vircadia-Alpha-$RELEASE_NUMBER-$GIT_COMMIT_SHORT.$INSTALLER_EXT" >> $GITHUB_ENV + echo "INSTALLER=Vircadia-$RELEASE_NUMBER-$GIT_COMMIT_SHORT.$INSTALLER_EXT" >> $GITHUB_ENV else echo "ARTIFACT_PATTERN=*.$INSTALLER_EXT" >> $GITHUB_ENV fi diff --git a/android/build_android.sh b/android/build_android.sh index 9cf1b9e2ab..d3c79afdbe 100755 --- a/android/build_android.sh +++ b/android/build_android.sh @@ -17,7 +17,7 @@ fi ANDROID_APP=interface ANDROID_OUTPUT_DIR=./apps/${ANDROID_APP}/build/outputs/apk/${ANDROID_BUILD_TYPE} ANDROID_OUTPUT_FILE=${ANDROID_APP}-${ANDROID_BUILD_TYPE}.apk -ANDROID_APK_NAME=Vircadia-Alpha-${ANDROID_APK_SUFFIX} +ANDROID_APK_NAME=Vircadia-${ANDROID_APK_SUFFIX} ./gradlew -PHIFI_ANDROID_PRECOMPILED=${HIFI_ANDROID_PRECOMPILED} -PVERSION_CODE=${VERSION_CODE} -PRELEASE_NUMBER=${RELEASE_NUMBER} -PRELEASE_TYPE=${RELEASE_TYPE} ${ANDROID_APP}:${ANDROID_BUILD_TARGET} cp ${ANDROID_OUTPUT_DIR}/${ANDROID_OUTPUT_FILE} ./${ANDROID_APK_NAME} diff --git a/cmake/installer/installer-header.bmp b/cmake/installer/installer-header.bmp index de8448ed44c17f3b918e47d1715a83058d1b9a53..a9519f02551c964b0b6229f8f24d45e59672bf67 100644 GIT binary patch literal 102654 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 Date: Mon, 1 Feb 2021 05:10:54 -0500 Subject: [PATCH 127/152] Update about dialog. --- .../qml/hifi/dialogs/TabletAboutDialog.qml | 48 ++++++++++++++++--- 1 file changed, 41 insertions(+), 7 deletions(-) diff --git a/interface/resources/qml/hifi/dialogs/TabletAboutDialog.qml b/interface/resources/qml/hifi/dialogs/TabletAboutDialog.qml index f7a4061f45..92fd86e2b5 100644 --- a/interface/resources/qml/hifi/dialogs/TabletAboutDialog.qml +++ b/interface/resources/qml/hifi/dialogs/TabletAboutDialog.qml @@ -14,7 +14,7 @@ import stylesUit 1.0 Rectangle { width: 480 - height: 706 + height: 950 color: "#404040" @@ -30,11 +30,16 @@ Rectangle { } Item { height: 30; width: 1 } Column { - id: buildColumm + id: buildColumn anchors.left: parent.left - anchors.leftMargin: 70 + anchors.leftMargin: 0 RalewayRegular { - text: "Build " + About.buildVersion + text: "Interface (Codename Athena)" + size: 16 + color: "white" + } + RalewayRegular { + text: "Build " + About.buildVersion + " " + About.releaseName size: 16 color: "white" } @@ -54,10 +59,21 @@ Rectangle { textFormat: Text.StyledText linkColor: "#00B4EF" color: "white" - text: "Vircadia Github." + text: "Website" size: 20 onLinkActivated: { - About.openUrl("https:/github.com/vircadia/vircadia"); + About.openUrl("https://vircadia.com"); + } + + } + RalewayRegular { + textFormat: Text.StyledText + linkColor: "#00B4EF" + color: "white" + text: "Source" + size: 20 + onLinkActivated: { + About.openUrl("https://github.com/vircadia/vircadia"); } } @@ -117,7 +133,7 @@ Rectangle { Item { height: 20; width: 1 } RalewayRegular { color: "white" - text: "© 2019-2020 Vircadia contributors." + text: "© 2019-2021 Vircadia contributors." size: 14 } RalewayRegular { @@ -135,5 +151,23 @@ Rectangle { About.openUrl("http://www.apache.org/licenses/LICENSE-2.0.html"); } } + Item { height: 40; width: 1 } + RalewayRegular { + color: "white" + text: "In memoriam," + size: 14 + } + RalewayRegular { + color: "white" + text: "2012 - 2019 the High Fidelity virtual reality project." + size: 14 + } + Item { height: 5; width: 1 } + Image { + id: hifiLogo + width: 200; height: 50 + fillMode: Image.PreserveAspectFit + source: "../../../images/about-highfidelity.png" + } } } From 9ea1e7e464c1ddbdadc5eed6cccf92d8174ccd2d Mon Sep 17 00:00:00 2001 From: Kalila L Date: Mon, 1 Feb 2021 06:00:55 -0500 Subject: [PATCH 128/152] Update about dialog. --- LICENSE | 2 +- .../qml/hifi/dialogs/TabletAboutDialog.qml | 48 ++++++++++++++++--- 2 files changed, 42 insertions(+), 8 deletions(-) diff --git a/LICENSE b/LICENSE index 8dfe384174..d5ca6ae075 100644 --- a/LICENSE +++ b/LICENSE @@ -1,5 +1,5 @@ Copyright (c) 2013-2019, High Fidelity, Inc. -Copyright (c) 2019-2020, Vircadia contributors. +Copyright (c) 2019-2021, Vircadia contributors. All rights reserved. https://vircadia.com diff --git a/interface/resources/qml/hifi/dialogs/TabletAboutDialog.qml b/interface/resources/qml/hifi/dialogs/TabletAboutDialog.qml index f7a4061f45..92fd86e2b5 100644 --- a/interface/resources/qml/hifi/dialogs/TabletAboutDialog.qml +++ b/interface/resources/qml/hifi/dialogs/TabletAboutDialog.qml @@ -14,7 +14,7 @@ import stylesUit 1.0 Rectangle { width: 480 - height: 706 + height: 950 color: "#404040" @@ -30,11 +30,16 @@ Rectangle { } Item { height: 30; width: 1 } Column { - id: buildColumm + id: buildColumn anchors.left: parent.left - anchors.leftMargin: 70 + anchors.leftMargin: 0 RalewayRegular { - text: "Build " + About.buildVersion + text: "Interface (Codename Athena)" + size: 16 + color: "white" + } + RalewayRegular { + text: "Build " + About.buildVersion + " " + About.releaseName size: 16 color: "white" } @@ -54,10 +59,21 @@ Rectangle { textFormat: Text.StyledText linkColor: "#00B4EF" color: "white" - text: "Vircadia Github." + text: "Website" size: 20 onLinkActivated: { - About.openUrl("https:/github.com/vircadia/vircadia"); + About.openUrl("https://vircadia.com"); + } + + } + RalewayRegular { + textFormat: Text.StyledText + linkColor: "#00B4EF" + color: "white" + text: "Source" + size: 20 + onLinkActivated: { + About.openUrl("https://github.com/vircadia/vircadia"); } } @@ -117,7 +133,7 @@ Rectangle { Item { height: 20; width: 1 } RalewayRegular { color: "white" - text: "© 2019-2020 Vircadia contributors." + text: "© 2019-2021 Vircadia contributors." size: 14 } RalewayRegular { @@ -135,5 +151,23 @@ Rectangle { About.openUrl("http://www.apache.org/licenses/LICENSE-2.0.html"); } } + Item { height: 40; width: 1 } + RalewayRegular { + color: "white" + text: "In memoriam," + size: 14 + } + RalewayRegular { + color: "white" + text: "2012 - 2019 the High Fidelity virtual reality project." + size: 14 + } + Item { height: 5; width: 1 } + Image { + id: hifiLogo + width: 200; height: 50 + fillMode: Image.PreserveAspectFit + source: "../../../images/about-highfidelity.png" + } } } From ea88d29145c26257e2d5a788eb2baddf8ad16644 Mon Sep 17 00:00:00 2001 From: Kalila L Date: Mon, 1 Feb 2021 17:34:09 -0500 Subject: [PATCH 129/152] CR --- interface/resources/qml/hifi/dialogs/TabletAboutDialog.qml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/interface/resources/qml/hifi/dialogs/TabletAboutDialog.qml b/interface/resources/qml/hifi/dialogs/TabletAboutDialog.qml index 92fd86e2b5..bb38fd4360 100644 --- a/interface/resources/qml/hifi/dialogs/TabletAboutDialog.qml +++ b/interface/resources/qml/hifi/dialogs/TabletAboutDialog.qml @@ -34,7 +34,7 @@ Rectangle { anchors.left: parent.left anchors.leftMargin: 0 RalewayRegular { - text: "Interface (Codename Athena)" + text: "Interface" size: 16 color: "white" } @@ -133,7 +133,7 @@ Rectangle { Item { height: 20; width: 1 } RalewayRegular { color: "white" - text: "© 2019-2021 Vircadia contributors." + text: "© 2019 - 2021 Vircadia contributors." size: 14 } RalewayRegular { From 897c28075d2c365b71a60d4107b2ac8d082bdd64 Mon Sep 17 00:00:00 2001 From: Kalila L Date: Mon, 1 Feb 2021 18:07:55 -0500 Subject: [PATCH 130/152] Update installer images. --- cmake/installer/installer-header.bmp | Bin 102654 -> 102654 bytes cmake/installer/uninstaller-header.bmp | Bin 102654 -> 102654 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/cmake/installer/installer-header.bmp b/cmake/installer/installer-header.bmp index a9519f02551c964b0b6229f8f24d45e59672bf67..99862ffdb4cc44abf26edc44ebb743cdd0950ffe 100644 GIT binary patch literal 102654 zcmeI533wDm+Q-ALpWnK!d#~%ay6(EGE*|SG8byML2cqJEy5NB)-rBhcNk~ErH-sQJ z36~sl7$6Xi06942CV_AVLLd<&fdG*J;mG?vJ@3prHC5F$Ju^u*nEE}P=c%rK>#gdl z`cG9?ce>j=TRWs#kV%W6prGbKK|!}S3knJg3JPi#bd4k4WYw?n&jn~S8jVJy(P%Up zjYgx2QB%NDFO`x;!fY#BMkv}I*w0|ySo$bka~Vx%4iHBAkafMIxOFfT8UlLoS7 z%NC5MsUvA{?AWpDs>{vI#k89@Zzjv4q9Tk;PEN*1twBvw10}#|aQgJ=7{7AmO0Gf@ z5)$yx>C>kH+!`D|emrN%ap=$?OqiIMn4h1IYceGzB^Wtm$Pl#G8q_p3Py(C=X(GB~ z#}2MSX!dyEzyVf+6DLmOEJZeM+!!4lO*yg*8#WB>wFWg!4H5!-JxD^^w{IU;Azyv< z6(-redpE1W$&)8@mQt##t8;U6M~)ncYcj;hkt5MwYf#hFAQiA0oG@Vm#;;qqj;oNQ zq$E64Sy{dGh3#F=H@t!GZ-C z$!ah@K7QiFiR;&|U%Ys+v>NmC^W)>=7cE+J_Uu_S_~x5$&>=1UXbozb4ht79ijMCClvLWd9qG1^Q`t|G4qX#Bo z9cm3~nhpa73}975paub8`}Xbq`t_rDBt1R7rly8!i8Q!%>sD5_Yu2nG8=|_pn(lfK zefsn%Dk>rytwBxGp~wNvIdPYj15#F2wr<_J?Ck8FJ9o0{Hb_N9MPXs#_U+qox1^+G z$&w}6+1ZB<9dcR-96x@1^XAPmbM5EC(7_(>34h;>J{&oJ?-ii(Qr>T0R0=gty?QlSE?>SpHZ~SL^z7L)H#fJk zvNAk8+%SxJ^X8G+)TvV`mtMVktzEnJ%$YOz9!~ne%BWGJ&}P-DRg{n=IXM{(*tb}7 zEL*m$PoF+)UW*njVtaBzv z$%Xz0AHnarAcF@FE+{C#cxRNs*J^%#KKs&)`1tslGiR2Umt(3ECr)H!WY9Ng48!~% z{QUfUXJ!J$#l@IWe0;oc(EQ)z;lqbVMMa@aOiWB#S{nCjX{T0M%FD}BQ&Z_3s?pKW zBSwtiK3SEPmWDYlTegf%8xawK@kfpvVdIx9S<NAq}$ccAytWP@oPqIC}JGwj{)t zUw(;K6Pq`0rpTC>7;M?NxHycY^RlnOb?erVLxj$n;@Qe%tAYc?ORrTl471o|WA(eF z&|pqZ4kc%ah=^d{!r_w!SFc{pzA%R+FE5YI)JlW&Yd{)2b?OwoY?))gfC2b(F@F4b zJd~1>LRmCs*c0jBzdu)0g$5%cA~<6tJ3AYFjvhUF%a$#(X3e5G9*ux==FBN6DJdu@ zpqF;C;~@R2(|-i8-J`BFn30izYF>BVWIdteyX=!P0Zf;UiQba^V zNl6KS`J#;Y`1su1TpR_C9Xm#YCXEX$RvJ8f_%Ib<`SRsuWo7&K@24TVM~@!#+Bf?e zJaOU#y%l8f;>8CK9z1a1z~aS=F{AMCaGLH~X)q=x28~IBG-RZtq-@=~^}vAx#l^+5 zX3Yu@4<9^uFrF#>-x;-9V}{;7M3r#x;6b*)3JrGa){V6!zWw%FthZ^?rcoq-d5MAX z>>I-XV91am7*92Z8tmD#C!3sp-0DPw^i7AjxH$Ys1abcS`QyirO)v$1USO(g*L zs7EgvwLcCH8#W9bvLg$E@ub1?=g-spZU6rLP9qm(Wo51)PkMSfxn(3qK- z$tIaLZ5n!;J$p9B+t=WvNs}<`j2SanpCoPi38L=D%|&U-ff~fCJe+T{4gt(7dUo+) z^XAPPHf-Q*8YeUl+`oT6Ru?B6g$AReqopTBt+saUTGn9a&YhSA4IhX&*36ta6D_~_ z<{SKi1AzPLuTC_$cI{fsf?f(Lg~~i&z<|QSLR=BrxN#$})mmz4%- zMuZxqDHbQyOBY&=88vDYfcr&8>=`LE7#kbQS`swf;xtIFkLEN;V-1ai03K^H2+eBz z(4e?RLBh|>%-rQkQBhHGaWO5xu2``mG&Iy%2v6u|+`a~>1AEmVDLpMM&9i{J_UzeH zTwF{OIRNuAle@OXHWiU-@YJbOcxK}DMP+3r9!f|^KyP#kVy$vey|HUt0OqnVmmO(v z`SRtg6Iysd4bn&&Xku3cp~B9;pZH;is+_8Qc@C~fnprw zuGa{f4sqikeJgYH=+R^h;GTJM8swngz+Jm`;UW7P%+Ai{yk%x);_3JA-+zLGi4N$p zC@U+AOG40(34QY}l{?y>Xu>qYFUAk379Pn>r!s#q0e+np}C+ zAblQ`KJSbC@WT&Sa=enw%F4psrAwExwQ7Zx2IJEI&cOhHR;6$@OP>zs-gHN;DZY)lF+*3o^g3t&`0l&!utBN9)f&Vb3L7_W z%*)Fo*^&mixjku+K5dCeHJF;3nv#;TbLUR9p%;s>7cBNQXc%Uu-#N(1$w8mg>-Ox~ zgE1E_T)C=bS#&_)4LDO$4FlkU)t1N|ug?Lg42??Z*ef##& zO5oP5ThX307#$r=k+e`iGvu0@8Z1v}Xeh1vR##UK8Z^i-Of&AnvoS+oxZ~!NH8nMK z9gXEzXprU!NM2svh7B8N<%9)qm68UzJEx)s*&EsM@$q!S%P>5CQSEDx7Re36y|zGW zM22C0b$aaBv2;f4?PK;t=xPqTA2qQZ4bGoGpPu?)p%0u8 z8G~L9=rn0n8NjVUBq}P3v~L*Zy+v|ML!Mz6Lx&DcO--d)wD?`f#tbc+%$+-zE9d0N zld&FFtXQF5lfnD!q}lP~$1hp31k-YG8l)==MARSv6ciLtebjs`{ zPjPWE{)7^dk&*0>2Vh<%(fRL3o?~TYC5;gTH)-FrX%mes z#F8aTSU&)8_Uu_Y%0ZSnIXTpzNcZmDxr;0u2Nku-v2x`~`Xxca!os-46FSE|d-e<- zJlJXHfV)@#Fds#uwHhQgHkO;jHh$KwUAx7B_$Wn9O-+7&{_54MaYg0Gkt6vIXj%wh z&M^uL3vos3#EBEjmMzQ5%EHM;RaMoTIdiaPrca-~!v%o(4EA~#Y!&U=wF{%gOQe#L zl2xl#&7VJi<;s;bnIXJtaMPwug@uLWcH_p4nVFg5uO<5d7kZ?JqoSe$zaf~NolQ4K z2&o3K-q;2F%F0T5fFV0O8|#K9exf~5US6J`pTB6)qODuE(j=K<*REYFR;Wmz~ko2VOPU zU`RD6h3@*%MQ8&k&uuuWy%z;c$&rrJx{{jrSi(jlPA5}1PJ{;aEk^Fk2n`Sefl&` z2DoKCd{RrSoIQK?kUe|pT_2o1dzNmm7>38~9!(>pqM~BlxN&2~jG@~@jfYXAM&Uo<`88%X~xeEVCN`8#u)@q3v52blH; znD$3=oBAi1dNoYB8YW*2lm85pt}(ZXe=)ZS*TVQ~Vf=M4?m8IzS4g`aQgQnmjQKl^ zz5zzv0Hgi^BmU{!hTjOoZi1mVo7<3onOjP8a~pgMB;N{yZiRujo7;ffq5r?3{~gfp z4(NL)^tlUq-vzzzhNOGU?aO=3E%83+dB3^Ew}AKuAnrlv@gVdFhS*?;eF&l-Hn;9A zA?gw6)(Rq9K}0Kv2!Zg{<`(uSgth^r4H%EX=WWgHv&YTt(g%8 zaPybuc2g4Em<0dq1^?)6Zh!A}HG%aVWeDXf!m3LUuI#CCsJK5H)y}ITX@p=o|`ZG^C;M zPv%f)j)tVc|6@i&8Vdg^8wziL5w6jY9SU(Y0Hg{B5=4uz}+1 z0RQqB3eVk`SaoB3eGP?|uIR*)<51|FluBjz3v*JMiIY;72IpQG65K*>x(4jmfMYt^ z7q0IY;QZ5x*pn~m7@Coq*M@Xq=(;wvxG=O|`Px#~KuEAdgLqXKIG42CtO`#u6xV0O z3q!|@RQD@g13uLNuFTYK{~>S*O1kl?>nz<`^?5t-3Z%)ckQ#H5bYZBba;;;T)SQv} zRR1BtEjqpQ0(~*l4=6izS~3eHpvdB>HX-C$VP=!JUhhQSYz7pbSq}=c<$1ZRrQcyi z7NSq{s_+KK0%_oIT^Dy1NbPM#Dv)}xLTW5VX8+8}ft&g63q!GOK?xJWc`;hbD zU!^Egk(u8Ch4XXgJp8LIed4o^KCoF}g zd)2n~_%4H=i2e2_qd_%`f8p`)jN?{?qM6if9fPSdk3TesNNHrI#&Aawl{H+SB2CAy6QnZoZ zaM>L@c1+=lGq$;_a3~!()b@dJ`gFBbnH6ruBno5c8Hpam7+-yA4VtiW6T@C{-!XJN zO6s~*A+}CPaEr$tc}U$xej{e5a3vbsiBULQxqO-EL17;_Vs;p#@GMQ@tG(0-8|jln z_p_scBX(V%#wk+>Ka)F=dd5fv(o|MRjWO~V|1m)x=@Z?KXV}O^5*C-|DFul9Znh3fMX3*df)J8-1kSOI5`aFJej6-d)sAvMNGHSQbt zl4sajKXgA==jsMJckbM4ue`)132;}DqpzM7u1=pmE%l~IBDLotW4f7Nj8(%W2?_Qm zQ$-e{e|3z)Rohk%b7|fGMiDsDKCFPVC%Aa8y9%Uft&ke4$8iA2{e??|`2S7x44ZRC z+P39=T%9W#$d8{~&bf5Au5yfz>8@}k&DuXXh^`d*N-IraFFMBTIoXkEqF z&s1Tlpr)qAs;G)oR!OAs3O{Ghp5>A#j5$ko*M2I6rGl3`Jj-Sm65QhCEz!>ZC=8rz z+5hJ%SbL{OpXZRu!75ULG>H|Wu~*n6ZW(&aNS_M1m#ub11F>dx9#-W0eOVcsox)N9 z>wydVmx^)z zD?=xoy;FnyjP&W&wlw%|mp8-)s@oX*eM4bsg`%idNu(1qg`be%7MXMBSb5_TTA8Uc zZT-*#_7f^BrA$am@t3+(V&zM*7U7_fX9rJa|CbI_i!=$pZ{nWqt14xtE@Onsu(Ql)|PJ!_p*(XzVq{ z${RNwwKDTs)%FuAETxF2=KQbTTN3Q_H7{^o5qA}E_EvCaR=WzMNvz({L%n|cjc6+rBn3QG}nnMHd-olts|(u%P5;!%P%6T@voT9Ty* zYyW)vr$hrQR;}Pyb)xTU?|jKjz+Bwch3|(s&EWhAm1DNw9-3rn$(kv`3Z$v5;Ee6V zCKP6*&$soiLAGVypPvJuaeO{MlPrd8y^A?D(K(No~C zJ&?i*$OZ!nE}r9!xwKwA_+-x+`vjZTJrtTV(ib1Ui|U_i7lI5LAV8UlaJh>HQn*y& zt~3=Q8rzAna>%B&vJrK}rowP!=odDVmmfKzuq1x0s^W5K{a_38bx*g&)z+N%siTS1 zo-Oz2e%KXDly7EZyDNqjh{j@!0?}A;zmGHa2`;T$hL?4G@>10xbsOqSB4ncoh^Yug zD#am6&cP<(4zaLiR$<;#<>eiX1~6t;p4FyJd}a%M*Q z%2Rhzt8uMKkU_%)C|?n20Yo!GYR^TIu?S~rb650(u*t1#?2LmU!7b*`&9L&2HhL7B z5rwVnr8%MoYmc4swU=?!O6Q6j9_GwEU^^-sR=}D`!wP(|=Zt-YOYRy9-+keBugydT z4HNLGxAyr)X2 zm|I%?D})t_;<1Mmux73|&vbk9X0Odk1`QKv(=ynq&+IMQ!8bWVJk~%c8<4j$JWNpQgkJ|uw4$rxtFWbiuP=b0@h3nD-ewpnw1)h zkqS6t$51%n(;KMCtXe8_ZU)&jOu(unT%Rc~FSoL^Urs9zTwXRE+Vp1AOr5DsCpOJ6 zFV~y!V-@|#E?j@ZT?ILp$&-*D1vx)=n~^;Q6p#%Yu!6NwhpiA(W&bR#`*qaNJ~bAl zs*gas$68wz=JAl0l%ti6Px7e~C%zV`PBN{jsj>1y1*NqOe-6oif847 zGP3WjxOktHw_b?}tRE{gUo-XU$EyKbD(6RG?u@qTK|UaMHnjk^ydY1)`BA`Gvbzdc zGYVTl23`YJ$P&){@*1`kd}=Z_VV#E)<6^A}gLzpU^|c$uD;lXG-NseDx!>S7^#=0&Inqe=c4D zXX)7eZsc#cR<>$Wgfp(!-OZaestY5fUW;VqTv`%h$M$VpLOLYES$f?SJ=j5X>(F2n z+}&N#gX|*fX{xkRd#gw_(o_n3vX>fjk!x;IIZofi#r@U+n`S|0!v9 zCo(S+Tf}Bl`hl32I_A*#Wj^Ji_9i{*lYc+hwPS~vufmUL>@`N=O^WF7zo|i~3e=Hm z#Iy=TWA)rM5TtqK$Tj$8r&pzI7dT?;dyTQ5X>7L$uiiuh`~Lky%u%ua?Ds{t{j!PW zId^}!Q-gsc?PhAENxViX5Ys9UjT>Bpkkd?Tl#pQ6y{ABs=B19bpPkx|)lvKY{lJe* zt&*tY?UzmTz1UcZ; z*R5Tnc4BqZj&uL8%CSDiLA6gpEYh3@Iyp5MFtw|1qE6)wsBv{de*y|Pw+c8*+^us~ zTqDoOmAlw36jSGKyeH2-1*i)t@W~--tne8KY!+fz;aN1c8Kdw?h_2v)@Ve3<^(c>k z0#^_8GoawYDG#3tq-CgEmi<!-fnFJX4z$XFjIpMgtMJ4C@2Vb zuf6u#f`S47cMKhpAoMFUMnT?{@+49}R*?$!#=27}ka`ZBLto21OS7|BlM&ksW8$Kt z)D5l1%B`JvE6Gqj1hy`nqf7x%12X7YY^xcXn#f6B1fbP|(7K z3sHm3n>T00$WdEWVAZ>Hyqy~GwUxE~PooAPIMk~KGcz-Tf`S$=UW~#ddGc8Nyz6+I zHSp8uQTi-=ssVT?)YM>bD6b~ZnP)~u2CF`;L7STL)y${1)5e#24P0#bIkfx&9yXjZ z6d<7m1qG$2r?a~h=F#I|ebj*Kg)_{@Lml7nb$vV(=3fDsSHQeq!rUv(E#p@(=PH7LdIUpkFvLCt(GQzj_m&X#2y|-&k*y#i1j1XJTiBxz+6Ig^U_1t&w}sCi zhtD2|PoIEKo^);>Jp~`NgAdxl2koJ2dwBmDc<)(rd-pkbrvtp*0p5BZy1W2yzG!Z* zzXY#$gx5Mk=a-?=E70jxc=bQ#_DUysxifU^3>{yC7hi`L-+&k1fal+U4qf26F7Rv@ zc;+p5=52F(`WBFReFl$w z4v&1{)}SX>U3HZyGf&6_qiNTJ`sjh$C%$k-_&$aCMSJt(p@Ih8GW@kmhDr^3$nY-? z8HyUb9>)C5)F8@mBqu|c28Vdnpp^{ocgWC=23tY6Lxy4AWQZF4&<_oI%J5~W4BvFg z(51ol@4(akXs~wGHV+X6j+RV))PUEaFjG1diW>Af6mlAL429-6s2&PYgEzZ0*c_5? zF~>n4hC)t*54y&|0ER-92A^|`gN~u_P5*{M|1|h9wEo034t`eqbY1*+l18J^Xfzs) LMx)Vanl}FrOFS}V delta 8403 zcmb7JdrX^Ib{9)a>lT$Js%NaQYYi2ntfsTt$woU>v|Y`3)KnuyjXbMJE3Gt|l`6H0 z)GC)p%o{_1NdRN`xR_Ulhe-g30KtUek%aIHUq zq!<-7eu4G%^)OIZSI0U0CnhH7%bUlI%A|uI{}#pL;|s!m>-Vol<$vwxD)p1BtgJkF z@?>#wkshiImZ3~^bTsqQ;^N}^`nsTyOLlg4W@cudJ$oi7PD@_Acri0Gv$nP-DC7Za zYio0JbAlp7IyX1xcDq56F}C9++LdrTz~yo+FE4ZM+1c5Zl@&oD^Qv=DBm{VA{mQ#B0~CEi5b`L&S#>5%6tpZVpE`H#ezLEmwDU zcV}j1`u0RfR8&-3TN`o#c|0D2!H}4k2yBs&ky@>GVq#(++wr2su+zQv>gWkmTg# zo}M1YSW;3FA!J}+03`K#J@B9*H#av?3V5D9dzPA-N(iBp3W{(1U%q@vk5$X)m%0F{ zR;zvb^r?6k{IVa@1s`s1ZWa$;yLOEp)5$_C77GlcX~aO=*w~;-b?_(GuV2SaBqSst zO!Rs^PHMB+l9H0>F`e|pjT<*`m@y{CC{lEEG(3y3MN74^0LIwlQ52tcEoq|FZ;B-1Q8Vx_Jw4$P7XJ<#ehx+<@uXK2LxY=yR zFCLFar_=FG2d1T^!O`~+VK$p#2|xs0DwIeMf}y#&nTrR<#KfR38QW)k`JZmwxPkix zs1rgiUAhE=Kgs@GU0pbp*B72rdpw?uj0_xAsZ?66wz|5SQW_T*hvU)F(GG_L50Bo8 z5FQ(5XJ;1|7u(z0k>BNV0rTMCAPh!FNB8#jx?C=Y!_m>vk(!zs9v(jZ(eyO%y$3{c zwML`4diCn^@-pz&*4DzDqoboRqS0tz#9%N?PfxpCF7cH?pVi;r4{Wiqu{Unqa5|km zJw4)MiV+2zd*14gj4`cN3xh>PMU#`0OG`@@izPENQ>9WlolXEBFc3m+-@ff|I9x7Q ze}6x0576UuI)Nu4Az@=&dKx!nFc@4em)&m1i!NUIO-CmGV|sczNP-JvjP>;N;9Nfm%XYgR1e24K zsgNKSl%EA$y?T{9x6Vr0$?ooMoL8gKpe_)(IXO8v$QUykjlh59$`!`g?(S|}TpazM zU(4usnSmi_o_#J3M8de_IB}frKP1Xjv;D4;J{B}atTyjT@7MC32=;Y%yo5jc{9>e0XCbBgYB3`D*U_T z>&eO2SHH8f6Bc?G*ib_kE?i)YXPU4duLk7*2ihVdBL#*0zjt?cEfx!!3^Y?#Rt7U& zzkc0!*ge9G5(ZFpEiEm3ES$o_!(oQ~z>}c$DY+x__jo*Xxj-%`kJ63{5~|noESf)l zL5SCBdI@FrAqHb`RaKSP3ADAf35sC<1JEceEc8LcKO-X}mrCis9SNepQ%j_!rKPac zKFiaeYb3|Z%ggO{JA5xMFaQ4-ohsEKg7Rb_vTHONK@lvks;UC<)YMd%P;6Y9oG&}Q zy}fO*Sb(dzxOn1Cve|5QyM1M41*G5aQKF)v1cmIIiHV8o>S|1n3E{~sB>5P$@qkDv zDJifC;JkeKGQ5tBjpb4)uYQ0vKHlq5{ELf=={L#pP>f8uxw&udePVKQa(a4tetw?& zxrARz{A+4zxK_UZ{(G1kt0u9i zy1E2KFwIGo94Ex*{n7A(Ac(iVv$KQit*x!yx^;_Mb-(y0qSNVs?fo{7jg2i>`_AtJ zTAO<4tD>SJo_Tl)Plrhr5~hKWoD~)p!Vbp9#^|vl`)r+%Df6e4(uG#Jzu9c&oBIpy zfdoYe{e?P^ewP_c?_3Bxu2!pI0kJJ{Nyc6)07891K>?rZA4zL#D`VWR!zLmlBgInO zvf00sbF;pYP&gb8;1?$jKnn{C@F_Vt8AebSj~+b|6rrC_PEOX<)oHa_EDC@yQ-6<{ zzw&px-SlbeQT4`#FOm~NplW!RjoofHED#kH#TXkI8G+Zt#Kh9l(z3F$@;!p_;^Jc1 z`1@@CDdEYW@5~~4_39PYOX=z99UUEWb8}Q(C#7e8I2??5>(ZqFq^Mh6iyyG0H3X`E#L_Y3lqyS_Bzbw=jX#GgwNpMprAN@ z6!(V(*!%Djgr0{Gvbwq|DCEHj2??-#Utgd2Y6yZr5B(_h=XGUJM(`)AtE<4**w_er zK}3kVHnX#{bS6}K7+BCF=jG+`_?PqtiGO8fWp1)OFgG_B=JT0bDt7Deg>RuOL`Kt& z$U@OK9n=!EBFf6jxF4twk@%;iqzDQ*UHL)sAA}I-#-O4w(*mlitAoX$aL2eVP8%8H z-6~*v`0%0F-ceCelpK-z*Votk;(M^z<1@yv{baRT>ECOlQp{}7mRhZr+Y&PxEL7iT z%YfzOWsdAptxQk`s!>0L_^^N;fDoQd!6jQ?Uq|R-pQWOr0uF~kP+U)77Xt0A)oRDb z$3cI-)R_i-{2?9Am7FdwFNY6|vB!@e1E?5d^Yint1|hGL`lY3%yu3UZ$IKXWWgjrk z9s~v<2LPh$KSDy?ggy?njRv#m2^hBv$Ltsv?9;?==ZL9uFu?rBXrL7lREUj42c>8*+Ac{VN5MHR|2j zgT#}8lv2*`y*E6^y`CyjLslb>W8K}|_wL;TMj(|+h4=?@yWQfw0W~x-Dc*y~1-@tyV+?lF?|~-Q8u3(Ld+Q>F|N~JPWBL4^4SudggtPA=A!NnMB zZEY3v5^t7?^$!q$3$jmM2P)Na*~5nq@q!^$RaH@Ar8E$u9{fq-wK6^TgCv0Lxsv1S z>+1;mnwlC|XM1~l)JyQ{cDs9fdm9@Y&1N(7pH3_;E?O*>mX;Q))w)kZjPcHy*=&Zt zKHJ;dR;%^aty?COX=Y|dP=o|Me*Ab~V4$_Nb$EE#+t`+>old98WV(Cz?&Rbogat7T z?h(3EpuJ&Vk;oVi5u>A{m{XWcCZo}aFn?CZ*On6*=!tlAK{lhT3uZo85wD9 zZGG_Ifwz+WRSnUa5PEAc=-@c@zWNMH0#5rwk zZP{$Lj*gDLzCMS;A->i?4<0-a>u6wLps}%WXlO`K1P3`Bj^5thrlzK@t}gy_=A%5> zTR`;nXIRRnq@>_+kroyf#O`usWyPpS@uQz!3JfhQEW|$pNMmDT@PCXDe&qy34lT=& z&_f@G2+Fhc*Ljk+?SYs1p@8_Rs;Zuzo|&1Mfq{YA+FFbNgpl6eUZW!2kH#PIGOJXo zy1Kf-!NDg_o^*G2qe+1r4u_z~34*9k2#Je}d-dv-ph$hk9!~j>jEvBRD^mKUE|4Bc z3#4B(oiQqZ#gdl z`cG9?ce>j=TRWs#kV%W6prGbKK|!}S3knJg3JPi#bd4k4WYw?n&jn~S8jVJy(P%Up zjYgx2QB%NDFO`x;!fY#BMkv}I*w0|ySo$bka~Vx%4iHBAkafMIxOFfT8UlLoS7 z%NC5MsUvA{?AWpDs>{vI#k89@Zzjv4q9Tk;PEN*1twBvw10}#|aQgJ=7{7AmO0Gf@ z5)$yx>C>kH+!`D|emrN%ap=$?OqiIMn4h1IYceGzB^Wtm$Pl#G8q_p3Py(C=X(GB~ z#}2MSX!dyEzyVf+6DLmOEJZeM+!!4lO*yg*8#WB>wFWg!4H5!-JxD^^w{IU;Azyv< z6(-redpE1W$&)8@mQt##t8;U6M~)ncYcj;hkt5MwYf#hFAQiA0oG@Vm#;;qqj;oNQ zq$E64Sy{dGh3#F=H@t!GZ-C z$!ah@K7QiFiR;&|U%Ys+v>NmC^W)>=7cE+J_Uu_S_~x5$&>=1UXbozb4ht79ijMCClvLWd9qG1^Q`t|G4qX#Bo z9cm3~nhpa73}975paub8`}Xbq`t_rDBt1R7rly8!i8Q!%>sD5_Yu2nG8=|_pn(lfK zefsn%Dk>rytwBxGp~wNvIdPYj15#F2wr<_J?Ck8FJ9o0{Hb_N9MPXs#_U+qox1^+G z$&w}6+1ZB<9dcR-96x@1^XAPmbM5EC(7_(>34h;>J{&oJ?-ii(Qr>T0R0=gty?QlSE?>SpHZ~SL^z7L)H#fJk zvNAk8+%SxJ^X8G+)TvV`mtMVktzEnJ%$YOz9!~ne%BWGJ&}P-DRg{n=IXM{(*tb}7 zEL*m$PoF+)UW*njVtaBzv z$%Xz0AHnarAcF@FE+{C#cxRNs*J^%#KKs&)`1tslGiR2Umt(3ECr)H!WY9Ng48!~% z{QUfUXJ!J$#l@IWe0;oc(EQ)z;lqbVMMa@aOiWB#S{nCjX{T0M%FD}BQ&Z_3s?pKW zBSwtiK3SEPmWDYlTegf%8xawK@kfpvVdIx9S<NAq}$ccAytWP@oPqIC}JGwj{)t zUw(;K6Pq`0rpTC>7;M?NxHycY^RlnOb?erVLxj$n;@Qe%tAYc?ORrTl471o|WA(eF z&|pqZ4kc%ah=^d{!r_w!SFc{pzA%R+FE5YI)JlW&Yd{)2b?OwoY?))gfC2b(F@F4b zJd~1>LRmCs*c0jBzdu)0g$5%cA~<6tJ3AYFjvhUF%a$#(X3e5G9*ux==FBN6DJdu@ zpqF;C;~@R2(|-i8-J`BFn30izYF>BVWIdteyX=!P0Zf;UiQba^V zNl6KS`J#;Y`1su1TpR_C9Xm#YCXEX$RvJ8f_%Ib<`SRsuWo7&K@24TVM~@!#+Bf?e zJaOU#y%l8f;>8CK9z1a1z~aS=F{AMCaGLH~X)q=x28~IBG-RZtq-@=~^}vAx#l^+5 zX3Yu@4<9^uFrF#>-x;-9V}{;7M3r#x;6b*)3JrGa){V6!zWw%FthZ^?rcoq-d5MAX z>>I-XV91am7*92Z8tmD#C!3sp-0DPw^i7AjxH$Ys1abcS`QyirO)v$1USO(g*L zs7EgvwLcCH8#W9bvLg$E@ub1?=g-spZU6rLP9qm(Wo51)PkMSfxn(3qK- z$tIaLZ5n!;J$p9B+t=WvNs}<`j2SanpCoPi38L=D%|&U-ff~fCJe+T{4gt(7dUo+) z^XAPPHf-Q*8YeUl+`oT6Ru?B6g$AReqopTBt+saUTGn9a&YhSA4IhX&*36ta6D_~_ z<{SKi1AzPLuTC_$cI{fsf?f(Lg~~i&z<|QSLR=BrxN#$})mmz4%- zMuZxqDHbQyOBY&=88vDYfcr&8>=`LE7#kbQS`swf;xtIFkLEN;V-1ai03K^H2+eBz z(4e?RLBh|>%-rQkQBhHGaWO5xu2``mG&Iy%2v6u|+`a~>1AEmVDLpMM&9i{J_UzeH zTwF{OIRNuAle@OXHWiU-@YJbOcxK}DMP+3r9!f|^KyP#kVy$vey|HUt0OqnVmmO(v z`SRtg6Iysd4bn&&Xku3cp~B9;pZH;is+_8Qc@C~fnprw zuGa{f4sqikeJgYH=+R^h;GTJM8swngz+Jm`;UW7P%+Ai{yk%x);_3JA-+zLGi4N$p zC@U+AOG40(34QY}l{?y>Xu>qYFUAk379Pn>r!s#q0e+np}C+ zAblQ`KJSbC@WT&Sa=enw%F4psrAwExwQ7Zx2IJEI&cOhHR;6$@OP>zs-gHN;DZY)lF+*3o^g3t&`0l&!utBN9)f&Vb3L7_W z%*)Fo*^&mixjku+K5dCeHJF;3nv#;TbLUR9p%;s>7cBNQXc%Uu-#N(1$w8mg>-Ox~ zgE1E_T)C=bS#&_)4LDO$4FlkU)t1N|ug?Lg42??Z*ef##& zO5oP5ThX307#$r=k+e`iGvu0@8Z1v}Xeh1vR##UK8Z^i-Of&AnvoS+oxZ~!NH8nMK z9gXEzXprU!NM2svh7B8N<%9)qm68UzJEx)s*&EsM@$q!S%P>5CQSEDx7Re36y|zGW zM22C0b$aaBv2;f4?PK;t=xPqTA2qQZ4bGoGpPu?)p%0u8 z8G~L9=rn0n8NjVUBq}P3v~L*Zy+v|ML!Mz6Lx&DcO--d)wD?`f#tbc+%$+-zE9d0N zld&FFtXQF5lfnD!q}lP~$1hp31k-YG8l)==MARSv6ciLtebjs`{ zPjPWE{)7^dk&*0>2Vh<%(fRL3o?~TYC5;gTH)-FrX%mes z#F8aTSU&)8_Uu_Y%0ZSnIXTpzNcZmDxr;0u2Nku-v2x`~`Xxca!os-46FSE|d-e<- zJlJXHfV)@#Fds#uwHhQgHkO;jHh$KwUAx7B_$Wn9O-+7&{_54MaYg0Gkt6vIXj%wh z&M^uL3vos3#EBEjmMzQ5%EHM;RaMoTIdiaPrca-~!v%o(4EA~#Y!&U=wF{%gOQe#L zl2xl#&7VJi<;s;bnIXJtaMPwug@uLWcH_p4nVFg5uO<5d7kZ?JqoSe$zaf~NolQ4K z2&o3K-q;2F%F0T5fFV0O8|#K9exf~5US6J`pTB6)qODuE(j=K<*REYFR;Wmz~ko2VOPU zU`RD6h3@*%MQ8&k&uuuWy%z;c$&rrJx{{jrSi(jlPA5}1PJ{;aEk^Fk2n`Sefl&` z2DoKCd{RrSoIQK?kUe|pT_2o1dzNmm7>38~9!(>pqM~BlxN&2~jG@~@jfYXAM&Uo<`88%X~xeEVCN`8#u)@q3v52blH; znD$3=oBAi1dNoYB8YW*2lm85pt}(ZXe=)ZS*TVQ~Vf=M4?m8IzS4g`aQgQnmjQKl^ zz5zzv0Hgi^BmU{!hTjOoZi1mVo7<3onOjP8a~pgMB;N{yZiRujo7;ffq5r?3{~gfp z4(NL)^tlUq-vzzzhNOGU?aO=3E%83+dB3^Ew}AKuAnrlv@gVdFhS*?;eF&l-Hn;9A zA?gw6)(Rq9K}0Kv2!Zg{<`(uSgth^r4H%EX=WWgHv&YTt(g%8 zaPybuc2g4Em<0dq1^?)6Zh!A}HG%aVWeDXf!m3LUuI#CCsJK5H)y}ITX@p=o|`ZG^C;M zPv%f)j)tVc|6@i&8Vdg^8wziL5w6jY9SU(Y0Hg{B5=4uz}+1 z0RQqB3eVk`SaoB3eGP?|uIR*)<51|FluBjz3v*JMiIY;72IpQG65K*>x(4jmfMYt^ z7q0IY;QZ5x*pn~m7@Coq*M@Xq=(;wvxG=O|`Px#~KuEAdgLqXKIG42CtO`#u6xV0O z3q!|@RQD@g13uLNuFTYK{~>S*O1kl?>nz<`^?5t-3Z%)ckQ#H5bYZBba;;;T)SQv} zRR1BtEjqpQ0(~*l4=6izS~3eHpvdB>HX-C$VP=!JUhhQSYz7pbSq}=c<$1ZRrQcyi z7NSq{s_+KK0%_oIT^Dy1NbPM#Dv)}xLTW5VX8+8}ft&g63q!GOK?xJWc`;hbD zU!^Egk(u8Ch4XXgJp8LIed4o^KCoF}g zd)2n~_%4H=i2e2_qd_%`f8p`)jN?{?qM6if9fPSdk3TesNNHrI#&Aawl{H+SB2CAy6QnZoZ zaM>L@c1+=lGq$;_a3~!()b@dJ`gFBbnH6ruBno5c8Hpam7+-yA4VtiW6T@C{-!XJN zO6s~*A+}CPaEr$tc}U$xej{e5a3vbsiBULQxqO-EL17;_Vs;p#@GMQ@tG(0-8|jln z_p_scBX(V%#wk+>Ka)F=dd5fv(o|MRjWO~V|1m)x=@Z?KXV}O^5*C-|DFul9Znh3fMX3*df)J8-1kSOI5`aFJej6-d)sAvMNGHSQbt zl4sajKXgA==jsMJckbM4ue`)132;}DqpzM7u1=pmE%l~IBDLotW4f7Nj8(%W2?_Qm zQ$-e{e|3z)Rohk%b7|fGMiDsDKCFPVC%Aa8y9%Uft&ke4$8iA2{e??|`2S7x44ZRC z+P39=T%9W#$d8{~&bf5Au5yfz>8@}k&DuXXh^`d*N-IraFFMBTIoXkEqF z&s1Tlpr)qAs;G)oR!OAs3O{Ghp5>A#j5$ko*M2I6rGl3`Jj-Sm65QhCEz!>ZC=8rz z+5hJ%SbL{OpXZRu!75ULG>H|Wu~*n6ZW(&aNS_M1m#ub11F>dx9#-W0eOVcsox)N9 z>wydVmx^)z zD?=xoy;FnyjP&W&wlw%|mp8-)s@oX*eM4bsg`%idNu(1qg`be%7MXMBSb5_TTA8Uc zZT-*#_7f^BrA$am@t3+(V&zM*7U7_fX9rJa|CbI_i!=$pZ{nWqt14xtE@Onsu(Ql)|PJ!_p*(XzVq{ z${RNwwKDTs)%FuAETxF2=KQbTTN3Q_H7{^o5qA}E_EvCaR=WzMNvz({L%n|cjc6+rBn3QG}nnMHd-olts|(u%P5;!%P%6T@voT9Ty* zYyW)vr$hrQR;}Pyb)xTU?|jKjz+Bwch3|(s&EWhAm1DNw9-3rn$(kv`3Z$v5;Ee6V zCKP6*&$soiLAGVypPvJuaeO{MlPrd8y^A?D(K(No~C zJ&?i*$OZ!nE}r9!xwKwA_+-x+`vjZTJrtTV(ib1Ui|U_i7lI5LAV8UlaJh>HQn*y& zt~3=Q8rzAna>%B&vJrK}rowP!=odDVmmfKzuq1x0s^W5K{a_38bx*g&)z+N%siTS1 zo-Oz2e%KXDly7EZyDNqjh{j@!0?}A;zmGHa2`;T$hL?4G@>10xbsOqSB4ncoh^Yug zD#am6&cP<(4zaLiR$<;#<>eiX1~6t;p4FyJd}a%M*Q z%2Rhzt8uMKkU_%)C|?n20Yo!GYR^TIu?S~rb650(u*t1#?2LmU!7b*`&9L&2HhL7B z5rwVnr8%MoYmc4swU=?!O6Q6j9_GwEU^^-sR=}D`!wP(|=Zt-YOYRy9-+keBugydT z4HNLGxAyr)X2 zm|I%?D})t_;<1Mmux73|&vbk9X0Odk1`QKv(=ynq&+IMQ!8bWVJk~%c8<4j$JWNpQgkJ|uw4$rxtFWbiuP=b0@h3nD-ewpnw1)h zkqS6t$51%n(;KMCtXe8_ZU)&jOu(unT%Rc~FSoL^Urs9zTwXRE+Vp1AOr5DsCpOJ6 zFV~y!V-@|#E?j@ZT?ILp$&-*D1vx)=n~^;Q6p#%Yu!6NwhpiA(W&bR#`*qaNJ~bAl zs*gas$68wz=JAl0l%ti6Px7e~C%zV`PBN{jsj>1y1*NqOe-6oif847 zGP3WjxOktHw_b?}tRE{gUo-XU$EyKbD(6RG?u@qTK|UaMHnjk^ydY1)`BA`Gvbzdc zGYVTl23`YJ$P&){@*1`kd}=Z_VV#E)<6^A}gLzpU^|c$uD;lXG-NseDx!>S7^#=0&Inqe=c4D zXX)7eZsc#cR<>$Wgfp(!-OZaestY5fUW;VqTv`%h$M$VpLOLYES$f?SJ=j5X>(F2n z+}&N#gX|*fX{xkRd#gw_(o_n3vX>fjk!x;IIZofi#r@U+n`S|0!v9 zCo(S+Tf}Bl`hl32I_A*#Wj^Ji_9i{*lYc+hwPS~vufmUL>@`N=O^WF7zo|i~3e=Hm z#Iy=TWA)rM5TtqK$Tj$8r&pzI7dT?;dyTQ5X>7L$uiiuh`~Lky%u%ua?Ds{t{j!PW zId^}!Q-gsc?PhAENxViX5Ys9UjT>Bpkkd?Tl#pQ6y{ABs=B19bpPkx|)lvKY{lJe* zt&*tY?UzmTz1UcZ; z*R5Tnc4BqZj&uL8%CSDiLA6gpEYh3@Iyp5MFtw|1qE6)wsBv{de*y|Pw+c8*+^us~ zTqDoOmAlw36jSGKyeH2-1*i)t@W~--tne8KY!+fz;aN1c8Kdw?h_2v)@Ve3<^(c>k z0#^_8GoawYDG#3tq-CgEmi<!-fnFJX4z$XFjIpMgtMJ4C@2Vb zuf6u#f`S47cMKhpAoMFUMnT?{@+49}R*?$!#=27}ka`ZBLto21OS7|BlM&ksW8$Kt z)D5l1%B`JvE6Gqj1hy`nqf7x%12X7YY^xcXn#f6B1fbP|(7K z3sHm3n>T00$WdEWVAZ>Hyqy~GwUxE~PooAPIMk~KGcz-Tf`S$=UW~#ddGc8Nyz6+I zHSp8uQTi-=ssVT?)YM>bD6b~ZnP)~u2CF`;L7STL)y${1)5e#24P0#bIkfx&9yXjZ z6d<7m1qG$2r?a~h=F#I|ebj*Kg)_{@Lml7nb$vV(=3fDsSHQeq!rUv(E#p@(=PH7LdIUpkFvLCt(GQzj_m&X#2y|-&k*y#i1j1XJTiBxz+6Ig^U_1t&w}sCi zhtD2|PoIEKo^);>Jp~`NgAdxl2koJ2dwBmDc<)(rd-pkbrvtp*0p5BZy1W2yzG!Z* zzXY#$gx5Mk=a-?=E70jxc=bQ#_DUysxifU^3>{yC7hi`L-+&k1fal+U4qf26F7Rv@ zc;+p5=52F(`WBFReFl$w z4v&1{)}SX>U3HZyGf&6_qiNTJ`sjh$C%$k-_&$aCMSJt(p@Ih8GW@kmhDr^3$nY-? z8HyUb9>)C5)F8@mBqu|c28Vdnpp^{ocgWC=23tY6Lxy4AWQZF4&<_oI%J5~W4BvFg z(51ol@4(akXs~wGHV+X6j+RV))PUEaFjG1diW>Af6mlAL429-6s2&PYgEzZ0*c_5? zF~>n4hC)t*54y&|0ER-92A^|`gN~u_P5*{M|1|h9wEo034t`eqbY1*+l18J^Xfzs) LMx)Vanl}FrOFS}V delta 8403 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 Date: Mon, 1 Feb 2021 21:51:18 -0500 Subject: [PATCH 131/152] Adjust spacing on about tablet dialog. --- .../resources/qml/hifi/dialogs/TabletAboutDialog.qml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/interface/resources/qml/hifi/dialogs/TabletAboutDialog.qml b/interface/resources/qml/hifi/dialogs/TabletAboutDialog.qml index bb38fd4360..d8f157c813 100644 --- a/interface/resources/qml/hifi/dialogs/TabletAboutDialog.qml +++ b/interface/resources/qml/hifi/dialogs/TabletAboutDialog.qml @@ -14,7 +14,7 @@ import stylesUit 1.0 Rectangle { width: 480 - height: 950 + height: 706 color: "#404040" @@ -28,7 +28,7 @@ Rectangle { fillMode: Image.PreserveAspectFit source: "../../../images/vircadia-banner.svg" } - Item { height: 30; width: 1 } + Item { height: 25; width: 1 } Column { id: buildColumn anchors.left: parent.left @@ -77,7 +77,7 @@ Rectangle { } } - Item { height: 40; width: 1 } + Item { height: 25; width: 1 } Row { spacing: 5 Image { @@ -151,7 +151,7 @@ Rectangle { About.openUrl("http://www.apache.org/licenses/LICENSE-2.0.html"); } } - Item { height: 40; width: 1 } + Item { height: 35; width: 1 } RalewayRegular { color: "white" text: "In memoriam," From 2c500ce3ff82da704e801e5cdee8289b515b9f81 Mon Sep 17 00:00:00 2001 From: Kalila <69767640+digisomni@users.noreply.github.com> Date: Tue, 2 Feb 2021 00:46:40 -0500 Subject: [PATCH 132/152] Update README.md --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index acfc5df259..db8a0c63f6 100644 --- a/README.md +++ b/README.md @@ -43,10 +43,10 @@ Vircadia consists of many projects and codebases with its unifying structure's g - The Interface (Codename Athena) - You are here! - The Server (Codename Athena) - You are also here! -- [The Metaverse (Codename Iamus)](https://github.com/vircadia/Iamus/) -- [The Metaverse Dashboard (Codename Iamus)](https://github.com/vircadia/pantheon-launcher/) -- [The Launcher (Codename Pantheon)](https://github.com/vircadia/pantheon-launcher/) - The UI Framework (Codename Nyx) - Codebase coming soon. +- [The Metaverse (Codename Iamus)](https://github.com/vircadia/Iamus/) +- [The Metaverse Dashboard (Codename Iamus)](https://github.com/vircadia/project-iamus-dashboard/) +- [The Launcher (Codename Pantheon)](https://github.com/vircadia/pantheon-launcher/) #### Child Projects - [Vircadia Builder for Linux](https://github.com/vircadia/vircadia-builder/) From ace6bf6c5b2cd6ea926f4d0943af95ea189d7956 Mon Sep 17 00:00:00 2001 From: HifiExperiments Date: Wed, 3 Feb 2021 17:35:17 -0800 Subject: [PATCH 133/152] dirty physics on useOriginalPivot change, other small fix for compound shapes --- .../src/RenderableModelEntityItem.cpp | 3 ++- libraries/entities/src/ModelEntityItem.cpp | 13 +++++++++++-- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp index 3c807848f8..6213853de7 100644 --- a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp @@ -456,10 +456,11 @@ void RenderableModelEntityItem::computeShapeInfo(ShapeInfo& shapeInfo) { // multiply each point by scale before handing the point-set off to the physics engine. // also determine the extents of the collision model. glm::vec3 registrationOffset = dimensions * (ENTITY_ITEM_DEFAULT_REGISTRATION_POINT - getRegistrationPoint()); + glm::vec3 offset = model->getSnapModelToRegistrationPoint() ? model->getOffset() : glm::vec3(0.0f); for (int32_t i = 0; i < pointCollection.size(); i++) { for (int32_t j = 0; j < pointCollection[i].size(); j++) { // back compensate for registration so we can apply that offset to the shapeInfo later - pointCollection[i][j] = scaleToFit * (pointCollection[i][j] + model->getOffset()) - registrationOffset; + pointCollection[i][j] = scaleToFit * (pointCollection[i][j] + offset) - registrationOffset; } } shapeInfo.setParams(type, 0.5f * extents, getCompoundShapeURL() + model->getSnapModelToRegistrationPoint()); diff --git a/libraries/entities/src/ModelEntityItem.cpp b/libraries/entities/src/ModelEntityItem.cpp index 50fd1f267a..61362896ee 100644 --- a/libraries/entities/src/ModelEntityItem.cpp +++ b/libraries/entities/src/ModelEntityItem.cpp @@ -721,10 +721,19 @@ QVector ModelEntityItem::getBlendshapeCoefficientVector() { } void ModelEntityItem::setUseOriginalPivot(bool value) { + bool changed = false; withWriteLock([&] { - _needsRenderUpdate |= _useOriginalPivot != value; - _useOriginalPivot = value; + if (_useOriginalPivot != value) { + _needsRenderUpdate = true; + _useOriginalPivot = value; + changed = true; + } }); + + if (changed) { + markDirtyFlags(Simulation::DIRTY_SHAPE | Simulation::DIRTY_MASS); + locationChanged(); + } } bool ModelEntityItem::getUseOriginalPivot() const { From 766b91f1a3b64938b44a99e358ef2d6685a68586 Mon Sep 17 00:00:00 2001 From: HifiExperiments Date: Fri, 5 Feb 2021 20:46:14 -0800 Subject: [PATCH 134/152] add note about only supporting 0,0,0 pivot --- libraries/entities/src/EntityItemProperties.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/libraries/entities/src/EntityItemProperties.cpp b/libraries/entities/src/EntityItemProperties.cpp index b09c2b3938..5b4b60e599 100644 --- a/libraries/entities/src/EntityItemProperties.cpp +++ b/libraries/entities/src/EntityItemProperties.cpp @@ -1004,7 +1004,8 @@ EntityPropertyFlags EntityItemProperties::getChangedProperties() const { * When editing this property, only coefficients that you are editing will change; it will not explicitly reset other * coefficients. * @property {boolean} useOriginalPivot=false - If false, the model will be centered based on its content, - * ignoring any offset in the model itself. If true, the model will respect its original offset. + * ignoring any offset in the model itself. If true, the model will respect its original offset. Currently, + * only pivots relative to {x: 0, y: 0, z: 0} are supported. * @property {string} textures="" - A JSON string of texture name, URL pairs used when rendering the model in place of the * model's original textures. Use a texture name from the originalTextures property to override that texture. * Only the texture names and URLs to be overridden need be specified; original textures are used where there are no From 8aa6bf727a2a893294ff2591571466c7444fcd7d Mon Sep 17 00:00:00 2001 From: Alezia Kurdis <60075796+AleziaKurdis@users.noreply.github.com> Date: Sun, 7 Feb 2021 22:33:14 -0500 Subject: [PATCH 135/152] Menu Bar reorganization Menu Bar reorganization -Add a new "Transform" menu -Reorder the 4 menus: Edit - Select - Transform - Tools -Redistribute the menu items --- .../create/entityList/html/entityList.html | 87 ++++++++++--------- 1 file changed, 45 insertions(+), 42 deletions(-) diff --git a/scripts/system/create/entityList/html/entityList.html b/scripts/system/create/entityList/html/entityList.html index 93585c7338..1ea41ad8ef 100644 --- a/scripts/system/create/entityList/html/entityList.html +++ b/scripts/system/create/entityList/html/entityList.html @@ -25,9 +25,10 @@
- - + + +
@@ -146,35 +147,22 @@
- - - - - - @@ -242,6 +230,40 @@ +
+ + + + + + + +
- - - -
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

)wA< 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 bJx;8r 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 literal 0 HcmV?d00001 diff --git a/scripts/system/appreciate/appreciate_app.js b/scripts/system/appreciate/appreciate_app.js new file mode 100644 index 0000000000..dce2a93502 --- /dev/null +++ b/scripts/system/appreciate/appreciate_app.js @@ -0,0 +1,1138 @@ +/* + Appreciate + Created by Zach Fox on 2019-01-30 + Copyright 2019 High Fidelity, Inc. + + Distributed under the Apache License, Version 2.0. + See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +*/ + +(function () { + // ************************************* + // START UTILITY FUNCTIONS + // ************************************* + // #region Utilities + var MS_PER_S = 1000; + var CM_PER_M = 100; + var HALF = 0.5; + + + // Returns the first valid joint position from the list of supplied test joint positions. + // If none are valid, returns MyAvatar.position. + function getValidJointPosition(jointsToTest) { + var currentJointIndex; + + for (var i = 0; i < jointsToTest.length; i++) { + currentJointIndex = MyAvatar.getJointIndex(jointsToTest[i]); + + if (currentJointIndex > -1) { + return MyAvatar.getJointPosition(jointsToTest[i]); + } + } + + return MyAvatar.position; + } + + + // Returns the world position halfway between the user's hands + function getAppreciationPosition() { + var validLeftJoints = ["LeftHandMiddle2", "LeftHand", "LeftArm"]; + var leftPosition = getValidJointPosition(validLeftJoints); + + var validRightJoints = ["RightHandMiddle2", "RightHand", "RightArm"];; + var rightPosition = getValidJointPosition(validRightJoints); + + var centerPosition = Vec3.sum(leftPosition, rightPosition); + centerPosition = Vec3.multiply(centerPosition, HALF); + + return centerPosition; + } + + + // Returns a linearly scaled value based on `factor` and the other inputs + function linearScale(factor, minInput, maxInput, minOutput, maxOutput) { + return minOutput + (maxOutput - minOutput) * + (factor - minInput) / (maxInput - minInput); + } + + + // Linearly scales an RGB color between 0 and 1 based on RGB color values + // between 0 and 255. + function linearScaleColor(intensity, min, max) { + var output = { + "red": 0, + "green": 0, + "blue": 0 + }; + + output.red = linearScale(intensity, 0, 1, min.red, max.red); + output.green = linearScale(intensity, 0, 1, min.green, max.green); + output.blue = linearScale(intensity, 0, 1, min.blue, max.blue); + + return output; + } + + + function randomFloat(min, max) { + return Math.random() * (max - min) + min; + } + + + // Updates the Current Intensity Meter UI element. Called when intensity changes. + function updateCurrentIntensityUI() { + ui.sendMessage({method: "updateCurrentIntensityUI", currentIntensity: currentIntensity}); + } + // #endregion + // ************************************* + // END UTILITY FUNCTIONS + // ************************************* + + // If the interval that updates the intensity interval exists, + // clear it. + var updateIntensityEntityInterval = false; + var UPDATE_INTENSITY_ENTITY_INTERVAL_MS = 75; + function maybeClearUpdateIntensityEntityInterval() { + if (updateIntensityEntityInterval) { + Script.clearInterval(updateIntensityEntityInterval); + updateIntensityEntityInterval = false; + } + + if (intensityEntity) { + Entities.deleteEntity(intensityEntity); + intensityEntity = false; + } + } + + + // Determines if any XYZ JSON object has changed "enough" based on + // last xyz values and current xyz values. + // Used for determining if angular velocity and dimensions have changed enough. + var lastAngularVelocity = { + "x": 0, + "y": 0, + "z": 0 + }; + var ANGVEL_DISTANCE_THRESHOLD_PERCENT_CHANGE = 0.35; + var lastDimensions= { + "x": 0, + "y": 0, + "z": 0 + }; + var DIMENSIONS_DISTANCE_THRESHOLD_PERCENT_CHANGE = 0.2; + function xyzVecChangedEnough(current, last, thresh) { + var currentLength = Math.sqrt( + Math.pow(current.x, TWO) + Math.pow(current.y, TWO) + Math.pow(current.z, TWO)); + var lastLength = Math.sqrt( + Math.pow(last.x, TWO) + Math.pow(last.y, TWO) + Math.pow(last.z, TWO)); + + var change = Math.abs(currentLength - lastLength); + if (change/lastLength > thresh) { + return true; + } + + return false; + } + + + // Determines if color values have changed "enough" based on + // last color and current color + var lastColor = { + "red": 0, + "blue": 0, + "green": 0 + }; + var COLOR_DISTANCE_THRESHOLD_PERCENT_CHANGE = 0.35; + var TWO = 2; + function colorChangedEnough(current, last, thresh) { + var currentLength = Math.sqrt( + Math.pow(current.red, TWO) + Math.pow(current.green, TWO) + Math.pow(current.blue, TWO)); + var lastLength = Math.sqrt( + Math.pow(last.red, TWO) + Math.pow(last.green, TWO) + Math.pow(last.blue, TWO)); + + var change = Math.abs(currentLength - lastLength); + if (change/lastLength > thresh) { + return true; + } + + return false; + } + + + // Updates the intensity entity based on the user's avatar's hand position and the + // current intensity of their appreciation. + // Many of these property values are empirically determined. + var intensityEntity = false; + var INTENSITY_ENTITY_MAX_DIMENSIONS = { + "x": 0.24, + "y": 0.24, + "z": 0.24 + }; + var INTENSITY_ENTITY_MIN_ANGULAR_VELOCITY = { + "x": -0.21, + "y": -0.21, + "z": -0.21 + }; + var INTENSITY_ENTITY_MAX_ANGULAR_VELOCITY = { + "x": 0.21, + "y": 0.21, + "z": 0.21 + }; + var intensityEntityColorMin = { + "red": 82, + "green": 196, + "blue": 145 + }; + var INTENSITY_ENTITY_COLOR_MAX_DEFAULT = { + "red": 5, + "green": 255, + "blue": 5 + }; + var MIN_COLOR_MULTIPLIER = 0.4; + var intensityEntityColorMax = JSON.parse(Settings.getValue("appreciate/entityColor", + JSON.stringify(INTENSITY_ENTITY_COLOR_MAX_DEFAULT))); + var ANGVEL_ENTITY_MULTIPLY_FACTOR = 62; + var INTENSITY_ENTITY_NAME = "Appreciation Dodecahedron"; + var INTENSITY_ENTITY_PROPERTIES = { + "name": INTENSITY_ENTITY_NAME, + "type": "Shape", + "shape": "Dodecahedron", + "dimensions": { + "x": 0, + "y": 0, + "z": 0 + }, + "angularVelocity": { + "x": 0, + "y": 0, + "z": 0 + }, + "angularDamping": 0, + "grab": { + "grabbable": false, + "equippableLeftRotation": { + "x": -0.0000152587890625, + "y": -0.0000152587890625, + "z": -0.0000152587890625, + "w": 1 + }, + "equippableRightRotation": { + "x": -0.0000152587890625, + "y": -0.0000152587890625, + "z": -0.0000152587890625, + "w": 1 + } + }, + "collisionless": true, + "ignoreForCollisions": true, + "queryAACube": { + "x": -0.17320507764816284, + "y": -0.17320507764816284, + "z": -0.17320507764816284, + "scale": 0.3464101552963257 + }, + "damping": 0, + "color": intensityEntityColorMin, + "clientOnly": false, + "avatarEntity": true, + "localEntity": false, + "faceCamera": false, + "isFacingAvatar": false + }; + var currentInitialAngularVelocity = { + "x": 0, + "y": 0, + "z": 0 + }; + function updateIntensityEntity() { + if (!showAppreciationEntity) { + return; + } + + if (currentIntensity > 0) { + if (intensityEntity) { + intensityEntityColorMin.red = intensityEntityColorMax.red * MIN_COLOR_MULTIPLIER; + intensityEntityColorMin.green = intensityEntityColorMax.green * MIN_COLOR_MULTIPLIER; + intensityEntityColorMin.blue = intensityEntityColorMax.blue * MIN_COLOR_MULTIPLIER; + + var color = linearScaleColor(currentIntensity, intensityEntityColorMin, intensityEntityColorMax); + + var propsToUpdate = { + position: getAppreciationPosition() + }; + + var currentDimensions = Vec3.multiply(INTENSITY_ENTITY_MAX_DIMENSIONS, currentIntensity); + if (xyzVecChangedEnough(currentDimensions, lastDimensions, DIMENSIONS_DISTANCE_THRESHOLD_PERCENT_CHANGE)) { + propsToUpdate.dimensions = currentDimensions; + lastDimensions = currentDimensions; + } + + var currentAngularVelocity = Vec3.multiply(currentInitialAngularVelocity, + currentIntensity * ANGVEL_ENTITY_MULTIPLY_FACTOR); + if (xyzVecChangedEnough(currentAngularVelocity, lastAngularVelocity, ANGVEL_DISTANCE_THRESHOLD_PERCENT_CHANGE)) { + propsToUpdate.angularVelocity = currentAngularVelocity; + lastAngularVelocity = currentAngularVelocity; + } + + var currentColor = color; + if (colorChangedEnough(currentColor, lastColor, COLOR_DISTANCE_THRESHOLD_PERCENT_CHANGE)) { + propsToUpdate.color = currentColor; + lastColor = currentColor; + } + + Entities.editEntity(intensityEntity, propsToUpdate); + } else { + var props = INTENSITY_ENTITY_PROPERTIES; + props.position = getAppreciationPosition(); + + currentInitialAngularVelocity.x = + randomFloat(INTENSITY_ENTITY_MIN_ANGULAR_VELOCITY.x, INTENSITY_ENTITY_MAX_ANGULAR_VELOCITY.x); + currentInitialAngularVelocity.y = + randomFloat(INTENSITY_ENTITY_MIN_ANGULAR_VELOCITY.y, INTENSITY_ENTITY_MAX_ANGULAR_VELOCITY.y); + currentInitialAngularVelocity.z = + randomFloat(INTENSITY_ENTITY_MIN_ANGULAR_VELOCITY.z, INTENSITY_ENTITY_MAX_ANGULAR_VELOCITY.z); + props.angularVelocity = currentInitialAngularVelocity; + + intensityEntity = Entities.addEntity(props, "avatar"); + } + } else { + if (intensityEntity) { + Entities.deleteEntity(intensityEntity); + intensityEntity = false; + } + + maybeClearUpdateIntensityEntityInterval(); + } + } + + + // Function that AppUI calls when the App's UI opens + function onOpened() { + updateCurrentIntensityUI(); + } + + + // Locally pre-caches all of the sounds in the sounds/claps and sounds/whistles + // directories. + var NUM_CLAP_SOUNDS = 16; + var NUM_WHISTLE_SOUNDS = 17; + var clapSounds = []; + var whistleSounds = []; + function getSounds() { + for (var i = 1; i < NUM_CLAP_SOUNDS + 1; i++) { + clapSounds.push(SoundCache.getSound(Script.resolvePath( + "resources/sounds/claps/" + ("0" + i).slice(-2) + ".wav"))); + } + for (i = 1; i < NUM_WHISTLE_SOUNDS + 1; i++) { + whistleSounds.push(SoundCache.getSound(Script.resolvePath( + "resources/sounds/whistles/" + ("0" + i).slice(-2) + ".wav"))); + } + } + + + // Locally pre-caches the Cheering and Clapping animations + var whistlingAnimation = false; + var clappingAnimation = false; + function getAnimations() { + var animationURL = Script.resolvePath("resources/animations/Cheering.fbx"); + var resource = AnimationCache.prefetch(animationURL); + var animation = AnimationCache.getAnimation(animationURL); + whistlingAnimation = {url: animationURL, animation: animation, resource: resource}; + + animationURL = Script.resolvePath("resources/animations/Clapping.fbx"); + resource = AnimationCache.prefetch(animationURL); + animation = AnimationCache.getAnimation(animationURL); + clappingAnimation = {url: animationURL, animation: animation, resource: resource}; + } + + + // If we're currently fading out the appreciation sounds on an interval, + // clear that interval. + function maybeClearSoundFadeInterval() { + if (soundFadeInterval) { + Script.clearInterval(soundFadeInterval); + soundFadeInterval = false; + } + } + + + // Fade out the appreciation sounds by quickly + // lowering the global current intensity. + var soundFadeInterval = false; + var FADE_INTERVAL_MS = 20; + var FADE_OUT_STEP_SIZE = 0.05; // Unitless + function fadeOutAndStopSound() { + maybeClearSoundFadeInterval(); + + soundFadeInterval = Script.setInterval(function() { + currentIntensity -= FADE_OUT_STEP_SIZE; + + if (currentIntensity <= 0) { + if (soundInjector) { + soundInjector.stop(); + soundInjector = false; + } + + updateCurrentIntensityUI(); + + maybeClearSoundFadeInterval(); + } + + fadeIntensity(currentIntensity, INTENSITY_MAX_STEP_SIZE_DESKTOP); + }, FADE_INTERVAL_MS); + } + + + // Calculates the audio injector volume based on + // the current global appreciation intensity and some min/max values. + var MIN_VOLUME_CLAP = 0.05; + var MAX_VOLUME_CLAP = 1.0; + var MIN_VOLUME_WHISTLE = 0.07; + var MAX_VOLUME_WHISTLE = 0.16; + function calculateInjectorVolume() { + var minInputVolume = 0; + var maxInputVolume = MAX_CLAP_INTENSITY; + var minOutputVolume = MIN_VOLUME_CLAP; + var maxOutputVolume = MAX_VOLUME_CLAP; + + if (currentSound === "whistle") { + minInputVolume = MAX_CLAP_INTENSITY; + maxInputVolume = MAX_WHISTLE_INTENSITY; + minOutputVolume = MIN_VOLUME_WHISTLE; + maxOutputVolume = MAX_VOLUME_WHISTLE; + } + + var vol = linearScale(currentIntensity, minInputVolume, + maxInputVolume, minOutputVolume, maxOutputVolume); + return vol; + } + + + // Modifies the global currentIntensity. Moves towards the targetIntensity, + // but never moves faster than a given max step size per function call. + // Also clamps the intensity to a min of 0 and a max of 1.0. + var currentIntensity = 0; + var INTENSITY_MAX_STEP_SIZE = 0.003; // Unitless, determined empirically + var INTENSITY_MAX_STEP_SIZE_DESKTOP = 1; // Unitless, determined empirically + var MAX_CLAP_INTENSITY = 0.55; // Unitless, determined empirically + var MAX_WHISTLE_INTENSITY = 1.0; // Unitless, determined empirically + function fadeIntensity(targetIntensity, maxStepSize) { + if (!maxStepSize) { + maxStepSize = INTENSITY_MAX_STEP_SIZE; + } + + var volumeDelta = targetIntensity - currentIntensity; + volumeDelta = Math.min(Math.abs(volumeDelta), maxStepSize); + + if (targetIntensity < currentIntensity) { + volumeDelta *= -1; + } + + currentIntensity += volumeDelta; + + currentIntensity = Math.max(0.0, Math.min( + neverWhistleEnabled ? MAX_CLAP_INTENSITY : MAX_WHISTLE_INTENSITY, currentIntensity)); + + updateCurrentIntensityUI(); + + // Don't adjust volume or position while a sound is playing. + if (!soundInjector || soundInjector.isPlaying()) { + return; + } + + var injectorOptions = { + position: getAppreciationPosition(), + volume: calculateInjectorVolume() + }; + + soundInjector.setOptions(injectorOptions); + } + + + // Call this function to actually play a sound. + // Doesn't play a new sound if a sound is playing AND (you're whistling OR you're in HMD) + // Injectors are placed between the user's hands (at the same location as the apprecation + // entity) and are randomly pitched between a MIN and MAX value. + // Only uses one injector, ever. + var soundInjector = false; + var MINIMUM_PITCH = 0.85; + var MAXIMUM_PITCH = 1.15; + function playSound(sound) { + if (soundInjector && soundInjector.isPlaying() && (currentSound === "whistle" || HMD.active)) { + return; + } + + if (soundInjector) { + soundInjector.stop(); + soundInjector = false; + } + + soundInjector = Audio.playSound(sound, { + position: getAppreciationPosition(), + volume: calculateInjectorVolume(), + pitch: randomFloat(MINIMUM_PITCH, MAXIMUM_PITCH) + }); + } + + + // Returns true if the global intensity and user settings dictate that clapping is the + // right thing to do. + function shouldClap() { + return (currentIntensity > 0.0 && neverWhistleEnabled) || + (currentIntensity > 0.0 && currentIntensity <= MAX_CLAP_INTENSITY); + } + + + // Returns true if the global intensity and user settings dictate that whistling is the + // right thing to do. + function shouldWhistle() { + return currentIntensity > MAX_CLAP_INTENSITY && + currentIntensity <= MAX_WHISTLE_INTENSITY; + } + + + // Selects the correct sound, then plays it. + var currentSound; + function selectAndPlaySound() { + if (shouldClap()) { + currentSound = "clap"; + playSound(clapSounds[Math.floor(Math.random() * clapSounds.length)]); + } else if (shouldWhistle()) { + currentSound = "whistle"; + playSound(whistleSounds[Math.floor(Math.random() * whistleSounds.length)]); + } + } + + + // If there exists a VR debounce timer (used for not playing sounds too often), + // clear it. + function maybeClearVRDebounceTimer() { + if (vrDebounceTimer) { + Script.clearTimeout(vrDebounceTimer); + vrDebounceTimer = false; + } + } + + + // Calculates the current intensity of appreciation based on the user's + // hand velocity (rotational and linear). + // Each type of velocity is weighted differently when determining the final intensity. + // The VR debounce timer length changes based on current intensity. This forces + // sounds to play further apart when the user isn't appreciating hard. + var MAX_VELOCITY_CM_PER_SEC = 110; // determined empirically + var MAX_ANGULAR_VELOCITY_LENGTH = 1.5; // determined empirically + var LINEAR_VELOCITY_WEIGHT = 0.7; // This and the line below must add up to 1.0 + var ANGULAR_VELOCITY_LENGTH_WEIGHT = 0.3; // This and the line below must add up to 1.0 + var vrDebounceTimer = false; + var VR_DEBOUNCE_TIMER_TIMEOUT_MIN_MS = 20; // determined empirically + var VR_DEBOUNCE_TIMER_TIMEOUT_MAX_MS = 200; // determined empirically + function calculateHandEffect(linearVelocity, angularVelocity){ + var leftHandLinearVelocityCMPerSec = linearVelocity.left; + var rightHandLinearVelocityCMPerSec = linearVelocity.right; + var averageLinearVelocity = (leftHandLinearVelocityCMPerSec + rightHandLinearVelocityCMPerSec) / 2; + averageLinearVelocity = Math.min(averageLinearVelocity, MAX_VELOCITY_CM_PER_SEC); + + var leftHandAngularVelocityLength = Vec3.length(angularVelocity.left); + var rightHandAngularVelocityLength = Vec3.length(angularVelocity.right); + var averageAngularVelocityIntensity = (leftHandAngularVelocityLength + rightHandAngularVelocityLength) / 2; + averageAngularVelocityIntensity = Math.min(averageAngularVelocityIntensity, MAX_ANGULAR_VELOCITY_LENGTH); + + var appreciationIntensity = + averageLinearVelocity / MAX_VELOCITY_CM_PER_SEC * LINEAR_VELOCITY_WEIGHT + + averageAngularVelocityIntensity / MAX_ANGULAR_VELOCITY_LENGTH * ANGULAR_VELOCITY_LENGTH_WEIGHT; + + fadeIntensity(appreciationIntensity); + + var vrDebounceTimeout = VR_DEBOUNCE_TIMER_TIMEOUT_MIN_MS + + (VR_DEBOUNCE_TIMER_TIMEOUT_MAX_MS - VR_DEBOUNCE_TIMER_TIMEOUT_MIN_MS) * (1.0 - appreciationIntensity); + // This timer forces a minimum tail duration for all sound clips + if (!vrDebounceTimer) { + selectAndPlaySound(); + vrDebounceTimer = Script.setTimeout(function() { + vrDebounceTimer = false; + }, vrDebounceTimeout); + } + } + + + // Gets both hands' linear velocity. + var lastLeftHandPosition = false; + var lastRightHandPosition = false; + function getHandsLinearVelocity() { + var linearVelocity = { + left: 0, + right: 0 + }; + + var leftHandPosition = MyAvatar.getJointPosition("LeftHand"); + var rightHandPosition = MyAvatar.getJointPosition("RightHand"); + + if (!lastLeftHandPosition || !lastRightHandPosition) { + lastLeftHandPosition = leftHandPosition; + lastRightHandPosition = rightHandPosition; + return linearVelocity; + } + + var leftHandDistanceCM = Vec3.distance(leftHandPosition, lastLeftHandPosition) * CM_PER_M; + var rightHandDistanceCM = Vec3.distance(rightHandPosition, lastRightHandPosition) * CM_PER_M; + + linearVelocity.left = leftHandDistanceCM / HAND_VELOCITY_CHECK_INTERVAL_MS * MS_PER_S; + linearVelocity.right = rightHandDistanceCM / HAND_VELOCITY_CHECK_INTERVAL_MS * MS_PER_S; + + lastLeftHandPosition = leftHandPosition; + lastRightHandPosition = rightHandPosition; + + return linearVelocity; + } + + + // Gets both hands' angular velocity. + var lastLeftHandRotation = false; + var lastRightHandRotation = false; + function getHandsAngularVelocity() { + var angularVelocity = { + left: {x: 0, y: 0, z: 0}, + right: {x: 0, y: 0, z: 0} + }; + + var leftHandRotation = MyAvatar.getJointRotation(MyAvatar.getJointIndex("LeftHand")); + var rightHandRotation = MyAvatar.getJointRotation(MyAvatar.getJointIndex("RightHand")); + + if (!lastLeftHandRotation || !lastRightHandRotation) { + lastLeftHandRotation = leftHandRotation; + lastRightHandRotation = rightHandRotation; + return angularVelocity; + } + + var leftHandAngleDelta = Quat.multiply(leftHandRotation, Quat.inverse(lastLeftHandRotation)); + var rightHandAngleDelta = Quat.multiply(rightHandRotation, Quat.inverse(lastRightHandRotation)); + + leftHandAngleDelta = Quat.safeEulerAngles(leftHandAngleDelta); + rightHandAngleDelta = Quat.safeEulerAngles(rightHandAngleDelta); + + angularVelocity.left = Vec3.multiply(leftHandAngleDelta, 1 / HAND_VELOCITY_CHECK_INTERVAL_MS); + angularVelocity.right = Vec3.multiply(rightHandAngleDelta, 1 / HAND_VELOCITY_CHECK_INTERVAL_MS); + + lastLeftHandRotation = leftHandRotation; + lastRightHandRotation = rightHandRotation; + + return angularVelocity; + } + + + // Calculates the hand effect (see above). Gets called on an interval, + // but only if the user's hands are above their head. This saves processing power. + // Also sets up the `updateIntensityEntity` interval. + function handVelocityCheck() { + if (!handsAreAboveHead) { + return; + } + + var handsLinearVelocity = getHandsLinearVelocity(); + var handsAngularVelocity = getHandsAngularVelocity(); + + calculateHandEffect(handsLinearVelocity, handsAngularVelocity); + + if (!updateIntensityEntityInterval && showAppreciationEntity) { + updateIntensityEntityInterval = Script.setInterval(updateIntensityEntity, UPDATE_INTENSITY_ENTITY_INTERVAL_MS); + } + } + + + // If handVelocityCheckInterval is set up, clear it. + function maybeClearHandVelocityCheck() { + if (handVelocityCheckInterval) { + Script.clearInterval(handVelocityCheckInterval); + handVelocityCheckInterval = false; + } + } + + + // If handVelocityCheckInterval is set up, clear it. + // Also stop the sound injector and set currentIntensity to 0. + function maybeClearHandVelocityCheckIntervalAndStopSound() { + maybeClearHandVelocityCheck(); + + if (soundInjector) { + soundInjector.stop(); + soundInjector = false; + } + + currentIntensity = 0.0; + } + + + // Sets up an interval that'll check the avatar's hand's velocities. + // This is used for calculating the effect. + // If the user isn't in HMD, we'll never set up this interval. + var handVelocityCheckInterval = false; + var HAND_VELOCITY_CHECK_INTERVAL_MS = 10; + function maybeSetupHandVelocityCheckInterval() { + // `!HMD.active` clause isn't really necessary, just extra protection + if (handVelocityCheckInterval || !HMD.active) { + return; + } + + handVelocityCheckInterval = Script.setInterval(handVelocityCheck, HAND_VELOCITY_CHECK_INTERVAL_MS); + } + + + // Checks the position of the user's hands to determine if they're above their head. + // If they are, sets up the hand velocity check interval (see above). + // If they aren't, clears that interval and stops the apprecation sound. + var handsAreAboveHead = false; + function handPositionCheck() { + var leftHandPosition = MyAvatar.getJointPosition("LeftHand"); + var rightHandPosition = MyAvatar.getJointPosition("RightHand"); + var headJointPosition = MyAvatar.getJointPosition("Head"); + + var headY = headJointPosition.y; + + handsAreAboveHead = (rightHandPosition.y > headY && leftHandPosition.y > headY); + + if (handsAreAboveHead) { + maybeSetupHandVelocityCheckInterval(); + } else { + maybeClearHandVelocityCheck(); + fadeOutAndStopSound(); + } + } + + + // If handPositionCheckInterval is set up, clear it. + function maybeClearHandPositionCheckInterval() { + if (handPositionCheckInterval) { + Script.clearInterval(handPositionCheckInterval); + handPositionCheckInterval = false; + } + } + + + // If the app is enabled, sets up an interval that'll check if the avatar's hands are above their head. + var handPositionCheckInterval = false; + var HAND_POSITION_CHECK_INTERVAL_MS = 200; + function maybeSetupHandPositionCheckInterval() { + if (!appreciateEnabled || !HMD.active) { + return; + } + + maybeClearHandPositionCheckInterval(); + + handPositionCheckInterval = Script.setInterval(handPositionCheck, HAND_POSITION_CHECK_INTERVAL_MS); + } + + + // If the interval that periodically lowers the apprecation volume is set up, clear it. + function maybeClearSlowAppreciationInterval() { + if (slowAppreciationInterval) { + Script.clearInterval(slowAppreciationInterval); + slowAppreciationInterval = false; + } + } + + + // Stop appreciating. Called when Appreciating from Desktop mode. + function stopAppreciating() { + maybeClearStopAppreciatingTimeout(); + maybeClearSlowAppreciationInterval(); + maybeClearUpdateIntensityEntityInterval(); + MyAvatar.restoreAnimation(); + currentAnimationFPS = INITIAL_ANIMATION_FPS; + currentlyPlayingFrame = 0; + currentAnimationTimestamp = 0; + } + + + // If the timeout that stops the user's apprecation is set up, clear it. + function maybeClearStopAppreciatingTimeout() { + if (stopAppreciatingTimeout) { + Script.clearTimeout(stopAppreciatingTimeout); + stopAppreciatingTimeout = false; + } + } + + + function calculateCurrentAnimationFPS(frameCount) { + var animationTimestampDeltaMS = Date.now() - currentAnimationTimestamp; + var frameDelta = animationTimestampDeltaMS / MS_PER_S * currentAnimationFPS; + + currentlyPlayingFrame = (currentlyPlayingFrame + frameDelta) % frameCount; + + currentAnimationFPS = currentIntensity * CHEERING_FPS_MAX + INITIAL_ANIMATION_FPS; + + currentAnimationFPS = Math.min(currentAnimationFPS, CHEERING_FPS_MAX); + + if (currentAnimation === clappingAnimation) { + currentAnimationFPS += CLAP_ANIMATION_FPS_BOOST; + } + } + + + // Called on an interval. Slows down the user's appreciation! + var VOLUME_STEP_DOWN_DESKTOP = 0.01; // Unitless, determined empirically + function slowAppreciation() { + currentIntensity -= VOLUME_STEP_DOWN_DESKTOP; + fadeIntensity(currentIntensity, INTENSITY_MAX_STEP_SIZE_DESKTOP); + + currentAnimation = selectAnimation(); + + if (!currentAnimation) { + stopAppreciating(); + return; + } + + var frameCount = currentAnimation.animation.frames.length; + + calculateCurrentAnimationFPS(frameCount); + + MyAvatar.overrideAnimation(currentAnimation.url, currentAnimationFPS, true, currentlyPlayingFrame, frameCount); + + currentAnimationTimestamp = Date.now(); + } + + + // Selects the proper animation to use when Appreciating in Desktop mode. + function selectAnimation() { + if (shouldClap()) { + if (currentAnimation === whistlingAnimation) { + currentAnimationTimestamp = 0; + } + return clappingAnimation; + } else if (shouldWhistle()) { + if (currentAnimation === clappingAnimation) { + currentAnimationTimestamp = 0; + } + return whistlingAnimation; + } else { + return false; + } + } + + + // Called when the Z key is pressed (and some other conditions are met). + // 1. (Maybe) clears old intervals + // 2. Steps up the global currentIntensity, then forces the effect/sound to fade/play immediately + // 3. Selects an animation to play based on various factors, then plays it + // - Stops appreciating if the selected animation is falsey + // 4. Sets up the "Slow Appreciation" interval which slows appreciation over time + // 5. Modifies the avatar's animation based on the current appreciation intensity + // - Since there's no way to modify animation FPS on-the-fly, we have to calculate + // where the animation should start based on where it was before changing FPS + // 6. Sets up the `updateIntensityEntity` interval if one isn't already setup + var INITIAL_ANIMATION_FPS = 7; + var SLOW_APPRECIATION_INTERVAL_MS = 100; + var CHEERING_FPS_MAX = 80; + var VOLUME_STEP_UP_DESKTOP = 0.035; // Unitless, determined empirically + var CLAP_ANIMATION_FPS_BOOST = 15; + var currentAnimation = false; + var currentAnimationFPS = INITIAL_ANIMATION_FPS; + var slowAppreciationInterval = false; + var currentlyPlayingFrame = 0; + var currentAnimationTimestamp; + function keyPressed() { + // Don't do anything if the animations aren't cached. + if (!whistlingAnimation || !clappingAnimation) { + return; + } + + maybeClearSoundFadeInterval(); + maybeClearStopAppreciatingTimeout(); + + currentIntensity += VOLUME_STEP_UP_DESKTOP; + fadeIntensity(currentIntensity, INTENSITY_MAX_STEP_SIZE_DESKTOP); + selectAndPlaySound(); + + currentAnimation = selectAnimation(); + + if (!currentAnimation) { + stopAppreciating(); + return; + } + + if (!slowAppreciationInterval) { + slowAppreciationInterval = Script.setInterval(slowAppreciation, SLOW_APPRECIATION_INTERVAL_MS); + } + + var frameCount = currentAnimation.animation.frames.length; + + if (currentAnimationTimestamp > 0) { + calculateCurrentAnimationFPS(frameCount); + } else { + currentlyPlayingFrame = 0; + } + + MyAvatar.overrideAnimation(currentAnimation.url, currentAnimationFPS, true, currentlyPlayingFrame, frameCount); + currentAnimationTimestamp = Date.now(); + + if (!updateIntensityEntityInterval && showAppreciationEntity) { + updateIntensityEntityInterval = Script.setInterval(updateIntensityEntity, UPDATE_INTENSITY_ENTITY_INTERVAL_MS); + } + } + + + // The listener for all in-app keypresses. Listens for an unshifted, un-alted, un-ctrl'd + // "Z" keypress. Only listens when in Desktop mode. If the user is holding the key down, + // we make sure not to call the `keyPressed()` handler too often using the `desktopDebounceTimer`. + var desktopDebounceTimer = false; + var DESKTOP_DEBOUNCE_TIMEOUT_MS = 160; + function keyPressEvent(event) { + if (!appreciateEnabled) { + return; + } + + if ((event.text.toUpperCase() === "Z") && + !event.isShifted && + !event.isMeta && + !event.isControl && + !event.isAlt && + !HMD.active) { + + if (event.isAutoRepeat) { + if (!desktopDebounceTimer) { + keyPressed(); + + desktopDebounceTimer = Script.setTimeout(function() { + desktopDebounceTimer = false; + }, DESKTOP_DEBOUNCE_TIMEOUT_MS); + } + } else { + keyPressed(); + } + } + } + + + // Sets up a timeout that will fade out the appreciation sound, then stop it. + var stopAppreciatingTimeout = false; + var STOP_APPRECIATING_TIMEOUT_MS = 1000; + function stopAppreciatingSoon() { + maybeClearStopAppreciatingTimeout(); + + if (currentIntensity > 0) { + stopAppreciatingTimeout = Script.setTimeout(fadeOutAndStopSound, STOP_APPRECIATING_TIMEOUT_MS); + } + } + + + // When the "Z" key is released, we want to stop appreciating a short time later. + function keyReleaseEvent(event) { + if (!appreciateEnabled) { + return; + } + + if ((event.text.toUpperCase() === "Z") && + !event.isAutoRepeat) { + stopAppreciatingSoon(); + } + } + + + // Enables or disables the app's main functionality + var appreciateEnabled = Settings.getValue("appreciate/enabled", false); + var neverWhistleEnabled = Settings.getValue("appreciate/neverWhistle", false); + var showAppreciationEntity = Settings.getValue("appreciate/showAppreciationEntity", true); + var keyEventsWired = false; + function enableOrDisableAppreciate() { + maybeClearHandPositionCheckInterval(); + maybeClearHandVelocityCheckIntervalAndStopSound(); + + if (appreciateEnabled) { + maybeSetupHandPositionCheckInterval(); + + if (!keyEventsWired && !HMD.active) { + Controller.keyPressEvent.connect(keyPressEvent); + Controller.keyReleaseEvent.connect(keyReleaseEvent); + keyEventsWired = true; + } + } else { + stopAppreciating(); + + if (keyEventsWired) { + Controller.keyPressEvent.disconnect(keyPressEvent); + Controller.keyReleaseEvent.disconnect(keyReleaseEvent); + keyEventsWired = false; + } + } + } + + + // Handles incoming messages from the UI + // - "eventBridgeReady" - The App's UI will send this when it's ready to + // receive events over the Event Bridge + // - "appreciateSwitchClicked" - The App's UI will send this when the user + // clicks the main toggle switch in the top right of the app + // - "neverWhistleCheckboxClicked" - Sent when the user clicks the + // "Never Whistle" checkbox + // - "setEntityColor" - Sent when the user chooses a new Entity Color. + function onMessage(message) { + if (message.app !== "appreciate") { + return; + } + + switch (message.method) { + case "eventBridgeReady": + ui.sendMessage({ + method: "updateUI", + appreciateEnabled: appreciateEnabled, + neverWhistleEnabled: neverWhistleEnabled, + showAppreciationEntity: showAppreciationEntity, + isFirstRun: Settings.getValue("appreciate/firstRun", true), + entityColor: intensityEntityColorMax + }); + break; + + case "appreciateSwitchClicked": + Settings.setValue("appreciate/firstRun", false); + appreciateEnabled = message.appreciateEnabled; + Settings.setValue("appreciate/enabled", appreciateEnabled); + enableOrDisableAppreciate(); + break; + + case "neverWhistleCheckboxClicked": + neverWhistleEnabled = message.neverWhistle; + Settings.setValue("appreciate/neverWhistle", neverWhistleEnabled); + break; + + case "showAppreciationEntityCheckboxClicked": + showAppreciationEntity = message.showAppreciationEntity; + Settings.setValue("appreciate/showAppreciationEntity", showAppreciationEntity); + break; + + case "setEntityColor": + intensityEntityColorMax = message.entityColor; + Settings.setValue("appreciate/entityColor", JSON.stringify(intensityEntityColorMax)); + break; + + case "zKeyDown": + var pressEvent = { + "text": "Z", + "isShifted": false, + "isMeta": false, + "isControl": false, + "isAlt": false, + "isAutoRepeat": message.repeat + }; + keyPressEvent(pressEvent); + break; + + case "zKeyUp": + var releaseEvent = { + "text": "Z", + "isShifted": false, + "isMeta": false, + "isControl": false, + "isAlt": false, + "isAutoRepeat": false + }; + keyReleaseEvent(releaseEvent); + break; + + default: + console.log("Unhandled message from appreciate_ui.js: " + JSON.stringify(message)); + break; + } + } + + + // Searches through all of your avatar entities and deletes any with the name + // that equals the one set when rezzing the Intensity Entity + function cleanupOldIntensityEntities() { + MyAvatar.getAvatarEntitiesVariant().forEach(function(avatarEntity) { + var name = Entities.getEntityProperties(avatarEntity.id, 'name').name; + if (name === INTENSITY_ENTITY_NAME && avatarEntity.id !== intensityEntity) { + Entities.deleteEntity(avatarEntity.id); + } + }); + } + + + // Called when the script is stopped. STOP ALL THE THINGS! + function onScriptEnding() { + maybeClearHandPositionCheckInterval(); + maybeClearHandVelocityCheckIntervalAndStopSound(); + maybeClearSoundFadeInterval(); + maybeClearVRDebounceTimer(); + maybeClearUpdateIntensityEntityInterval(); + cleanupOldIntensityEntities(); + + maybeClearStopAppreciatingTimeout(); + stopAppreciating(); + + if (desktopDebounceTimer) { + Script.clearTimeout(desktopDebounceTimer); + desktopDebounceTimer = false; + } + + if (keyEventsWired) { + Controller.keyPressEvent.disconnect(keyPressEvent); + Controller.keyReleaseEvent.disconnect(keyReleaseEvent); + keyEventsWired = false; + } + + if (intensityEntity) { + Entities.deleteEntity(intensityEntity); + intensityEntity = false; + } + + HMD.displayModeChanged.disconnect(enableOrDisableAppreciate); + } + + + // When called, this function will stop the versions of this script that are + // baked into the client installation IF there's another version of the script + // running that ISN'T the baked version. + function maybeStopBakedScriptVersions() { + var THIS_SCRIPT_FILENAME = "appreciate_app.js"; + var RELATIVE_PATH_TO_BAKED_SCRIPT = "system/experiences/appreciate/appResources/appData/" + THIS_SCRIPT_FILENAME; + var bakedLocalScriptPaths = []; + var alsoRunningNonBakedVersion = false; + + var runningScripts = ScriptDiscoveryService.getRunning(); + runningScripts.forEach(function(scriptObject) { + if (scriptObject.local && scriptObject.url.indexOf(RELATIVE_PATH_TO_BAKED_SCRIPT) > -1) { + bakedLocalScriptPaths.push(scriptObject.path); + } + + if (scriptObject.name === THIS_SCRIPT_FILENAME && scriptObject.url.indexOf(RELATIVE_PATH_TO_BAKED_SCRIPT) === -1) { + alsoRunningNonBakedVersion = true; + } + }); + + if (alsoRunningNonBakedVersion && bakedLocalScriptPaths.length > 0) { + for (var i = 0; i < bakedLocalScriptPaths.length; i++) { + ScriptDiscoveryService.stopScript(bakedLocalScriptPaths[i]); + } + } + } + + + // Called when the script starts up + var BUTTON_NAME = "APPRECIATE"; + var APP_UI_URL = Script.resolvePath('resources/appreciate_ui.html'); + var CLEANUP_INTENSITY_ENTITIES_STARTUP_DELAY_MS = 5000; + var AppUI = Script.require('appUi'); + var ui; + function startup() { + ui = new AppUI({ + buttonName: BUTTON_NAME, + home: APP_UI_URL, + // clap by Rena from the Noun Project + graphicsDirectory: Script.resolvePath("./resources/images/icons/"), + onOpened: onOpened, + onMessage: onMessage + }); + + cleanupOldIntensityEntities(); + // We need this because sometimes avatar entities load after this script does. + Script.setTimeout(cleanupOldIntensityEntities, CLEANUP_INTENSITY_ENTITIES_STARTUP_DELAY_MS); + enableOrDisableAppreciate(); + getSounds(); + getAnimations(); + HMD.displayModeChanged.connect(enableOrDisableAppreciate); + maybeStopBakedScriptVersions(); + } + + + Script.scriptEnding.connect(onScriptEnding); + startup(); +})(); + diff --git a/scripts/system/appreciate/resources/animations/Cheering.fbx b/scripts/system/appreciate/resources/animations/Cheering.fbx new file mode 100644 index 0000000000000000000000000000000000000000..8787bf4bd878fb311ad5543a5c85a16f91a64ef6 GIT binary patch literal 351664 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 G()}O8&p!VE literal 0 HcmV?d00001 diff --git a/scripts/system/appreciate/resources/animations/Clapping.fbx b/scripts/system/appreciate/resources/animations/Clapping.fbx new file mode 100644 index 0000000000000000000000000000000000000000..d05b41866d4ada8772a2d71e42fcc55391141e65 GIT binary patch literal 293728 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 literal 0 HcmV?d00001 diff --git a/scripts/system/appreciate/resources/appreciate_ui.html b/scripts/system/appreciate/resources/appreciate_ui.html new file mode 100644 index 0000000000..24ffb6fb64 --- /dev/null +++ b/scripts/system/appreciate/resources/appreciate_ui.html @@ -0,0 +1,84 @@ + + + + + + Appreciate + + + + + + + + +

+ +
+
+
+ Appreciate v1.5 +
+ +
+ + + +
+ Intensity Meter +
+ +
+
+
+ +
+ Options + + + + + +
+ + +
+
+ +
+
+ Desktop Mode:
Tap or hold the Z key on your keyboard! +
+
+ VR Mode:
Raise your hands above your head and shake them! +
+
+
+ + + + + diff --git a/scripts/system/appreciate/resources/css/style.css b/scripts/system/appreciate/resources/css/style.css new file mode 100644 index 0000000000..abd58b1b22 --- /dev/null +++ b/scripts/system/appreciate/resources/css/style.css @@ -0,0 +1,284 @@ +*, *:before, *:after { + -webkit-box-sizing: inherit; + -moz-box-sizing: inherit; + box-sizing: inherit; +} + +html { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +body { + font-family: 'Raleway', sans-serif; + background-color: #393939; + color: #afafaf; + overflow: hidden; + margin: 0; + padding: 0; +} + +#mainContainer { + width: 100vw; + height: 100vh; +} + +#loadingContainer { + background-color: rgba(0, 0, 0, 0.8); + background-image: url('../images/loadingSpinner.svg'); + background-repeat: no-repeat; + background-position: center center; + width: 100vw; + height: 100vh; + position: fixed; + z-index: 999; +} + +#firstRun { + background-color: rgba(0, 0, 0, 0.9); + width: 100vw; + height: calc(100vh - 60px); + position: fixed; + z-index: 998; + padding: 8px 12px 0 50%; + font-size: 24px; + text-align: right; +} + +#tutorialArrow { + border: solid #00b4ef; + border-width: 0 5px 5px 0; + margin-right: 28px; + display: inline-block; + padding: 5px; + transform: rotate(-135deg); + -webkit-transform: rotate(-135deg); +} + +/* START SWITCH CSS +Mostly from: https://www.w3schools.com/howto/howto_css_switch.asp +*/ +#titleBarContainer { + display: flex; + align-items: center; + height: 60px; + padding: 0 16px; + font-size: 24px; + background-color: #121212; + color: #ffffff; + justify-content: space-between; +} + +/* The switch - the box around the slider */ +.switch { + position: relative; + display: block; + width: 70px; + height: 34px; +} + +/* Hide default HTML checkbox */ +.switch input { + opacity: 0; + width: 0; + height: 0; +} + +/* The slider */ +.slider { + position: absolute; + cursor: pointer; + top: 0; + left: 0; + right: 0; + bottom: 0; + background-color: #ccc; + -webkit-transition: .4s; + transition: .4s; +} + +.slider:before { + position: absolute; + content: ""; + height: 26px; + width: 26px; + left: 4px; + bottom: 4px; + background-color: white; + -webkit-transition: .4s; + transition: .4s; +} + +input:checked + .slider { + background-color: #00b4ef; +} + +input:focus + .slider { + box-shadow: 0 0 1px #00b4ef; +} + +input:checked + .slider:before { + -webkit-transform: translateX(35px); + -ms-transform: translateX(35px); + transform: translateX(35px); +} + +/* Rounded sliders */ +.slider.round { + border-radius: 34px; +} + +.slider.round:before { + border-radius: 50%; +} +/* END SWITCH CSS */ + +/* START PROGRESS BAR CSS */ +#progressBarContainer { + width: calc(100vw - 24px); + margin: 24px auto 0 auto; +} + +#progressBarContainer > span { + font-size: 18px; +} + +#currentIntensityDisplay { + width: 100%; + height: 175px; + margin-top: 8px; + background: #FFFFFF; + background-image: linear-gradient(to right, #EEE 0, #EEE 55%, #FFF 55%, #FFF 100%); +} + +#crosshatch { + display: none; + float: right; + position: relative; + top: -175px; + height: 175px; + width: 45%; + background: repeating-linear-gradient(45deg, transparent 0px, transparent 4px, rgba(0, 0, 0, 0.1) 4px, rgba(0, 0, 0, 0.1) 8px); +} + +#currentIntensity { + display: block; + height: 100%; + background-color: #1ac567; + background-image: linear-gradient(to right,#1ac567 0, #C62147 100%); + position: relative; + overflow: hidden; +} +/* END PROGRESS BAR CSS */ + +#optionsContainer { + display: flex; + flex-direction: column; + height: 150px; + width: calc(100vw - 24px); + margin: 12px 12px 0 12px; + position: absolute; +} + +#colorPickerContainer { + margin: 8px 0 0 0; + visibility: hidden; +} + +#colorPickerContainer > input { + font-family: 'Raleway', sans-serif; + height: 34px; + font-size: 18px; + min-width: 185px; +} + +.checkmark { + position: absolute; + top: 0; + left: 0; + height: 25px; + width: 25px; + background-color: #eee; +} + +/* Create the checkmark/indicator (hidden when not checked) */ +.checkmark:after { + content: ""; + position: absolute; + display: none; +} + +#neverWhistleContainer, +#showAppreciationEntityContainer { + display: block; + margin: 8px 0 0 0; + height: 25px; + position: relative; + padding-left: 35px; + cursor: pointer; + font-size: 18px; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +#showAppreciationEntityContainer { + margin-top: 16px; +} + +/* Hide the browser's default checkbox */ +#neverWhistleContainer input, +#showAppreciationEntityContainer input { + position: absolute; + opacity: 0; + cursor: pointer; + height: 0; + width: 0; +} + +/* On mouse-over, add a grey background color */ +#neverWhistleContainer:hover input ~ .checkmark, +#showAppreciationEntityContainer:hover input ~ .checkmark { + background-color: #ccc; +} + +/* When the checkbox is checked, add a blue background */ +#neverWhistleContainer input:checked ~ .checkmark, +#showAppreciationEntityContainer input:checked ~ .checkmark { + background-color: #0093C5; +} + +/* Show the checkmark when checked */ +#neverWhistleContainer input:checked ~ .checkmark:after, +#showAppreciationEntityContainer input:checked ~ .checkmark:after { + display: block; +} + +/* Style the checkmark/indicator */ +#neverWhistleContainer .checkmark:after, +#showAppreciationEntityContainer .checkmark:after { + left: 9px; + top: 3px; + width: 8px; + height: 15px; + border: solid white; + border-width: 0 3px 3px 0; + transform: rotate(45deg); + -webkit-transform: rotate(45deg); +} + +#instructions { + position: fixed; + height: 150px; + bottom: 0; + left: 0; + right: 0; + margin: 0 12px; + font-size: 18px; +} + +#instructions > div { + margin-top: 16px; +} \ No newline at end of file diff --git a/scripts/system/appreciate/resources/images/icons/appreciate-a.svg b/scripts/system/appreciate/resources/images/icons/appreciate-a.svg new file mode 100644 index 0000000000..44cd326ea1 --- /dev/null +++ b/scripts/system/appreciate/resources/images/icons/appreciate-a.svg @@ -0,0 +1,89 @@ + + + + + + image/svg+xml + + SCHOOL_ICONS_100 + + + + + + SCHOOL_ICONS_100 + + + + + Created by Rena + from the Noun Project + diff --git a/scripts/system/appreciate/resources/images/icons/appreciate-i.svg b/scripts/system/appreciate/resources/images/icons/appreciate-i.svg new file mode 100644 index 0000000000..74ae65b19f --- /dev/null +++ b/scripts/system/appreciate/resources/images/icons/appreciate-i.svg @@ -0,0 +1,89 @@ + + + + + + image/svg+xml + + SCHOOL_ICONS_100 + + + + + + SCHOOL_ICONS_100 + + + + + Created by Rena + from the Noun Project + diff --git a/scripts/system/appreciate/resources/images/loadingSpinner.svg b/scripts/system/appreciate/resources/images/loadingSpinner.svg new file mode 100644 index 0000000000..a290bb8c60 --- /dev/null +++ b/scripts/system/appreciate/resources/images/loadingSpinner.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/scripts/system/appreciate/resources/js/appreciate_ui.js b/scripts/system/appreciate/resources/js/appreciate_ui.js new file mode 100644 index 0000000000..b955193b45 --- /dev/null +++ b/scripts/system/appreciate/resources/js/appreciate_ui.js @@ -0,0 +1,188 @@ +/* + Appreciate + Created by Zach Fox on 2019-01-30 + Copyright 2019 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 +*/ + +/* globals document EventBridge setTimeout */ + +// Called when the user clicks the switch in the top right of the app. +// Sends an event to the App JS and clears the `firstRun` `div`. +function appreciateSwitchClicked(checkbox) { + EventBridge.emitWebEvent(JSON.stringify({ + app: "appreciate", + method: "appreciateSwitchClicked", + appreciateEnabled: checkbox.checked + })); + document.getElementById("firstRun").style.display = "none"; +} + +// Called when the user checks/unchecks the Never Whistle checkbox. +// Adds the crosshatch div to the UI and sends an event to the App JS. +function neverWhistleCheckboxClicked(checkbox) { + var crosshatch = document.getElementById("crosshatch"); + if (checkbox.checked) { + crosshatch.style.display = "inline-block"; + } else { + crosshatch.style.display = "none"; + } + + EventBridge.emitWebEvent(JSON.stringify({ + app: "appreciate", + method: "neverWhistleCheckboxClicked", + neverWhistle: checkbox.checked + })); +} + +// Called when the user checks/unchecks the Show Appreciation Entity checkbox. +// Sends an event to the App JS. +function showAppreciationEntityCheckboxClicked(checkbox) { + EventBridge.emitWebEvent(JSON.stringify({ + app: "appreciate", + method: "showAppreciationEntityCheckboxClicked", + showAppreciationEntity: checkbox.checked + })); + + if (checkbox.checked) { + document.getElementById("colorPickerContainer").style.visibility = "visible"; + } else { + document.getElementById("colorPickerContainer").style.visibility = "hidden"; + } +} + +// Called when the user changes the entity's color using the jscolor picker. +// Modifies the color of the Intensity Meter gradient and sends a message to the App JS. +var START_COLOR_MULTIPLIER = 0.2; +function setEntityColor(jscolor) { + var newEntityColor = { + "red": jscolor.rgb[0], + "green": jscolor.rgb[1], + "blue": jscolor.rgb[2] + }; + + var startColor = { + "red": Math.floor(newEntityColor.red * START_COLOR_MULTIPLIER), + "green": Math.floor(newEntityColor.green * START_COLOR_MULTIPLIER), + "blue": Math.floor(newEntityColor.blue * START_COLOR_MULTIPLIER) + }; + + var currentIntensityDisplayWidth = document.getElementById("currentIntensityDisplay").offsetWidth; + var bgString = "linear-gradient(to right, rgb(" + startColor.red + ", " + + startColor.green + ", " + startColor.blue + ") 0, " + + jscolor.toHEXString() + " " + currentIntensityDisplayWidth + "px)"; + document.getElementById("currentIntensity").style.backgroundImage = bgString; + + EventBridge.emitWebEvent(JSON.stringify({ + app: "appreciate", + method: "setEntityColor", + entityColor: newEntityColor + })); +} + +// Handle EventBridge messages from *_app.js. +function onScriptEventReceived(message) { + try { + message = JSON.parse(message); + } catch (error) { + console.log("Couldn't parse script event message: " + error); + return; + } + + // This message gets sent by `entityList.js` when it shouldn't! + if (message.type === "removeEntities") { + return; + } + + switch (message.method) { + case "updateUI": + if (message.isFirstRun) { + document.getElementById("firstRun").style.display = "block"; + } + document.getElementById("appreciateSwitch").checked = message.appreciateEnabled; + document.getElementById("neverWhistleCheckbox").checked = message.neverWhistleEnabled; + + var showAppreciationEntityCheckbox = document.getElementById("showAppreciationEntityCheckbox"); + showAppreciationEntityCheckbox.checked = message.showAppreciationEntity; + if (showAppreciationEntityCheckbox.checked) { + document.getElementById("colorPickerContainer").style.visibility = "visible"; + } else { + document.getElementById("colorPickerContainer").style.visibility = "hidden"; + } + + if (message.neverWhistleEnabled) { + var crosshatch = document.getElementById("crosshatch"); + crosshatch.style.display = "inline-block"; + } + + document.getElementById("loadingContainer").style.display = "none"; + + var color = document.getElementById("colorPicker").jscolor; + color.fromRGB(message.entityColor.red, message.entityColor.green, message.entityColor.blue); + + var startColor = { + "red": Math.floor(color.rgb[0] * START_COLOR_MULTIPLIER), + "green": Math.floor(color.rgb[1] * START_COLOR_MULTIPLIER), + "blue": Math.floor(color.rgb[2] * START_COLOR_MULTIPLIER) + }; + var currentIntensityDisplayWidth = document.getElementById("currentIntensityDisplay").offsetWidth; + document.getElementById("currentIntensity").style.backgroundImage = + "linear-gradient(to right, rgb(" + startColor.red + ", " + + startColor.green + ", " + startColor.blue + ") 0, " + + color.toHEXString() + " " + currentIntensityDisplayWidth + "px)"; + break; + + case "updateCurrentIntensityUI": + document.getElementById("currentIntensity").style.width = message.currentIntensity * 100 + "%"; + break; + + default: + console.log("Unknown message received from appreciate_app.js! " + JSON.stringify(message)); + break; + } +} + +// This function detects a keydown on the document, which enables the app +// to forward these keypress events to the app JS. +function onKeyDown(e) { + var key = e.key.toUpperCase(); + if (key === "Z") { + EventBridge.emitWebEvent(JSON.stringify({ + app: "appreciate", + method: "zKeyDown", + repeat: e.repeat + })); + } +} + +// This function detects a keyup on the document, which enables the app +// to forward these keypress events to the app JS. +function onKeyUp(e) { + var key = e.key.toUpperCase(); + if (key === "Z") { + EventBridge.emitWebEvent(JSON.stringify({ + app: "appreciate", + method: "zKeyUp" + })); + } +} + +// This delay is necessary to allow for the JS EventBridge to become active. +// The delay is still necessary for HTML apps in RC78+. +var EVENTBRIDGE_SETUP_DELAY = 500; +function onLoad() { + setTimeout(function() { + EventBridge.scriptEventReceived.connect(onScriptEventReceived); + EventBridge.emitWebEvent(JSON.stringify({ + app: "appreciate", + method: "eventBridgeReady" + })); + }, EVENTBRIDGE_SETUP_DELAY); + + document.addEventListener("keydown", onKeyDown); + document.addEventListener("keyup", onKeyUp); +} + +onLoad(); \ No newline at end of file diff --git a/scripts/system/appreciate/resources/js/jscolor.js b/scripts/system/appreciate/resources/js/jscolor.js new file mode 100644 index 0000000000..9b5e8e6cbc --- /dev/null +++ b/scripts/system/appreciate/resources/js/jscolor.js @@ -0,0 +1,1855 @@ +/** + * jscolor - JavaScript Color Picker + * + * @link http://jscolor.com + * @license For open source use: GPLv3 + * For commercial use: JSColor Commercial License + * @author Jan Odvarko + * @version 2.0.5 + * + * See usage examples at http://jscolor.com/examples/ + */ + + +"use strict"; + + +if (!window.jscolor) { window.jscolor = (function () { + + +var jsc = { + + + register : function () { + jsc.attachDOMReadyEvent(jsc.init); + jsc.attachEvent(document, 'mousedown', jsc.onDocumentMouseDown); + jsc.attachEvent(document, 'touchstart', jsc.onDocumentTouchStart); + jsc.attachEvent(window, 'resize', jsc.onWindowResize); + }, + + + init : function () { + if (jsc.jscolor.lookupClass) { + jsc.jscolor.installByClassName(jsc.jscolor.lookupClass); + } + }, + + + tryInstallOnElements : function (elms, className) { + var matchClass = new RegExp('(^|\\s)(' + className + ')(\\s*(\\{[^}]*\\})|\\s|$)', 'i'); + + for (var i = 0; i < elms.length; i += 1) { + if (elms[i].type !== undefined && elms[i].type.toLowerCase() == 'color') { + if (jsc.isColorAttrSupported) { + // skip inputs of type 'color' if supported by the browser + continue; + } + } + var m; + if (!elms[i].jscolor && elms[i].className && (m = elms[i].className.match(matchClass))) { + var targetElm = elms[i]; + var optsStr = null; + + var dataOptions = jsc.getDataAttr(targetElm, 'jscolor'); + if (dataOptions !== null) { + optsStr = dataOptions; + } else if (m[4]) { + optsStr = m[4]; + } + + var opts = {}; + if (optsStr) { + try { + opts = (new Function ('return (' + optsStr + ')'))(); + } catch(eParseError) { + jsc.warn('Error parsing jscolor options: ' + eParseError + ':\n' + optsStr); + } + } + targetElm.jscolor = new jsc.jscolor(targetElm, opts); + } + } + }, + + + isColorAttrSupported : (function () { + var elm = document.createElement('input'); + if (elm.setAttribute) { + elm.setAttribute('type', 'color'); + if (elm.type.toLowerCase() == 'color') { + return true; + } + } + return false; + })(), + + + isCanvasSupported : (function () { + var elm = document.createElement('canvas'); + return !!(elm.getContext && elm.getContext('2d')); + })(), + + + fetchElement : function (mixed) { + return typeof mixed === 'string' ? document.getElementById(mixed) : mixed; + }, + + + isElementType : function (elm, type) { + return elm.nodeName.toLowerCase() === type.toLowerCase(); + }, + + + getDataAttr : function (el, name) { + var attrName = 'data-' + name; + var attrValue = el.getAttribute(attrName); + if (attrValue !== null) { + return attrValue; + } + return null; + }, + + + attachEvent : function (el, evnt, func) { + if (el.addEventListener) { + el.addEventListener(evnt, func, false); + } else if (el.attachEvent) { + el.attachEvent('on' + evnt, func); + } + }, + + + detachEvent : function (el, evnt, func) { + if (el.removeEventListener) { + el.removeEventListener(evnt, func, false); + } else if (el.detachEvent) { + el.detachEvent('on' + evnt, func); + } + }, + + + _attachedGroupEvents : {}, + + + attachGroupEvent : function (groupName, el, evnt, func) { + if (!jsc._attachedGroupEvents.hasOwnProperty(groupName)) { + jsc._attachedGroupEvents[groupName] = []; + } + jsc._attachedGroupEvents[groupName].push([el, evnt, func]); + jsc.attachEvent(el, evnt, func); + }, + + + detachGroupEvents : function (groupName) { + if (jsc._attachedGroupEvents.hasOwnProperty(groupName)) { + for (var i = 0; i < jsc._attachedGroupEvents[groupName].length; i += 1) { + var evt = jsc._attachedGroupEvents[groupName][i]; + jsc.detachEvent(evt[0], evt[1], evt[2]); + } + delete jsc._attachedGroupEvents[groupName]; + } + }, + + + attachDOMReadyEvent : function (func) { + var fired = false; + var fireOnce = function () { + if (!fired) { + fired = true; + func(); + } + }; + + if (document.readyState === 'complete') { + setTimeout(fireOnce, 1); // async + return; + } + + if (document.addEventListener) { + document.addEventListener('DOMContentLoaded', fireOnce, false); + + // Fallback + window.addEventListener('load', fireOnce, false); + + } else if (document.attachEvent) { + // IE + document.attachEvent('onreadystatechange', function () { + if (document.readyState === 'complete') { + document.detachEvent('onreadystatechange', arguments.callee); + fireOnce(); + } + }) + + // Fallback + window.attachEvent('onload', fireOnce); + + // IE7/8 + if (document.documentElement.doScroll && window == window.top) { + var tryScroll = function () { + if (!document.body) { return; } + try { + document.documentElement.doScroll('left'); + fireOnce(); + } catch (e) { + setTimeout(tryScroll, 1); + } + }; + tryScroll(); + } + } + }, + + + warn : function (msg) { + if (window.console && window.console.warn) { + window.console.warn(msg); + } + }, + + + preventDefault : function (e) { + if (e.preventDefault) { e.preventDefault(); } + e.returnValue = false; + }, + + + captureTarget : function (target) { + // IE + if (target.setCapture) { + jsc._capturedTarget = target; + jsc._capturedTarget.setCapture(); + } + }, + + + releaseTarget : function () { + // IE + if (jsc._capturedTarget) { + jsc._capturedTarget.releaseCapture(); + jsc._capturedTarget = null; + } + }, + + + fireEvent : function (el, evnt) { + if (!el) { + return; + } + if (document.createEvent) { + var ev = document.createEvent('HTMLEvents'); + ev.initEvent(evnt, true, true); + el.dispatchEvent(ev); + } else if (document.createEventObject) { + var ev = document.createEventObject(); + el.fireEvent('on' + evnt, ev); + } else if (el['on' + evnt]) { // alternatively use the traditional event model + el['on' + evnt](); + } + }, + + + classNameToList : function (className) { + return className.replace(/^\s+|\s+$/g, '').split(/\s+/); + }, + + + // The className parameter (str) can only contain a single class name + hasClass : function (elm, className) { + if (!className) { + return false; + } + return -1 != (' ' + elm.className.replace(/\s+/g, ' ') + ' ').indexOf(' ' + className + ' '); + }, + + + // The className parameter (str) can contain multiple class names separated by whitespace + setClass : function (elm, className) { + var classList = jsc.classNameToList(className); + for (var i = 0; i < classList.length; i += 1) { + if (!jsc.hasClass(elm, classList[i])) { + elm.className += (elm.className ? ' ' : '') + classList[i]; + } + } + }, + + + // The className parameter (str) can contain multiple class names separated by whitespace + unsetClass : function (elm, className) { + var classList = jsc.classNameToList(className); + for (var i = 0; i < classList.length; i += 1) { + var repl = new RegExp( + '^\\s*' + classList[i] + '\\s*|' + + '\\s*' + classList[i] + '\\s*$|' + + '\\s+' + classList[i] + '(\\s+)', + 'g' + ); + elm.className = elm.className.replace(repl, '$1'); + } + }, + + + getStyle : function (elm) { + return window.getComputedStyle ? window.getComputedStyle(elm) : elm.currentStyle; + }, + + + setStyle : (function () { + var helper = document.createElement('div'); + var getSupportedProp = function (names) { + for (var i = 0; i < names.length; i += 1) { + if (names[i] in helper.style) { + return names[i]; + } + } + }; + var props = { + borderRadius: getSupportedProp(['borderRadius', 'MozBorderRadius', 'webkitBorderRadius']), + boxShadow: getSupportedProp(['boxShadow', 'MozBoxShadow', 'webkitBoxShadow']) + }; + return function (elm, prop, value) { + switch (prop.toLowerCase()) { + case 'opacity': + var alphaOpacity = Math.round(parseFloat(value) * 100); + elm.style.opacity = value; + elm.style.filter = 'alpha(opacity=' + alphaOpacity + ')'; + break; + default: + elm.style[props[prop]] = value; + break; + } + }; + })(), + + + setBorderRadius : function (elm, value) { + jsc.setStyle(elm, 'borderRadius', value || '0'); + }, + + + setBoxShadow : function (elm, value) { + jsc.setStyle(elm, 'boxShadow', value || 'none'); + }, + + + getElementPos : function (e, relativeToViewport) { + var x=0, y=0; + var rect = e.getBoundingClientRect(); + x = rect.left; + y = rect.top; + if (!relativeToViewport) { + var viewPos = jsc.getViewPos(); + x += viewPos[0]; + y += viewPos[1]; + } + return [x, y]; + }, + + + getElementSize : function (e) { + return [e.offsetWidth, e.offsetHeight]; + }, + + + // get pointer's X/Y coordinates relative to viewport + getAbsPointerPos : function (e) { + if (!e) { e = window.event; } + var x = 0, y = 0; + if (typeof e.changedTouches !== 'undefined' && e.changedTouches.length) { + // touch devices + x = e.changedTouches[0].clientX; + y = e.changedTouches[0].clientY; + } else if (typeof e.clientX === 'number') { + x = e.clientX; + y = e.clientY; + } + return { x: x, y: y }; + }, + + + // get pointer's X/Y coordinates relative to target element + getRelPointerPos : function (e) { + if (!e) { e = window.event; } + var target = e.target || e.srcElement; + var targetRect = target.getBoundingClientRect(); + + var x = 0, y = 0; + + var clientX = 0, clientY = 0; + if (typeof e.changedTouches !== 'undefined' && e.changedTouches.length) { + // touch devices + clientX = e.changedTouches[0].clientX; + clientY = e.changedTouches[0].clientY; + } else if (typeof e.clientX === 'number') { + clientX = e.clientX; + clientY = e.clientY; + } + + x = clientX - targetRect.left; + y = clientY - targetRect.top; + return { x: x, y: y }; + }, + + + getViewPos : function () { + var doc = document.documentElement; + return [ + (window.pageXOffset || doc.scrollLeft) - (doc.clientLeft || 0), + (window.pageYOffset || doc.scrollTop) - (doc.clientTop || 0) + ]; + }, + + + getViewSize : function () { + var doc = document.documentElement; + return [ + (window.innerWidth || doc.clientWidth), + (window.innerHeight || doc.clientHeight), + ]; + }, + + + redrawPosition : function () { + + if (jsc.picker && jsc.picker.owner) { + var thisObj = jsc.picker.owner; + + var tp, vp; + + if (thisObj.fixed) { + // Fixed elements are positioned relative to viewport, + // therefore we can ignore the scroll offset + tp = jsc.getElementPos(thisObj.targetElement, true); // target pos + vp = [0, 0]; // view pos + } else { + tp = jsc.getElementPos(thisObj.targetElement); // target pos + vp = jsc.getViewPos(); // view pos + } + + var ts = jsc.getElementSize(thisObj.targetElement); // target size + var vs = jsc.getViewSize(); // view size + var ps = jsc.getPickerOuterDims(thisObj); // picker size + var a, b, c; + switch (thisObj.position.toLowerCase()) { + case 'left': a=1; b=0; c=-1; break; + case 'right':a=1; b=0; c=1; break; + case 'top': a=0; b=1; c=-1; break; + default: a=0; b=1; c=1; break; + } + var l = (ts[b]+ps[b])/2; + + // compute picker position + if (!thisObj.smartPosition) { + var pp = [ + tp[a], + tp[b]+ts[b]-l+l*c + ]; + } else { + var pp = [ + -vp[a]+tp[a]+ps[a] > vs[a] ? + (-vp[a]+tp[a]+ts[a]/2 > vs[a]/2 && tp[a]+ts[a]-ps[a] >= 0 ? tp[a]+ts[a]-ps[a] : tp[a]) : + tp[a], + -vp[b]+tp[b]+ts[b]+ps[b]-l+l*c > vs[b] ? + (-vp[b]+tp[b]+ts[b]/2 > vs[b]/2 && tp[b]+ts[b]-l-l*c >= 0 ? tp[b]+ts[b]-l-l*c : tp[b]+ts[b]-l+l*c) : + (tp[b]+ts[b]-l+l*c >= 0 ? tp[b]+ts[b]-l+l*c : tp[b]+ts[b]-l-l*c) + ]; + } + + var x = pp[a]; + var y = pp[b]; + var positionValue = thisObj.fixed ? 'fixed' : 'absolute'; + var contractShadow = + (pp[0] + ps[0] > tp[0] || pp[0] < tp[0] + ts[0]) && + (pp[1] + ps[1] < tp[1] + ts[1]); + + jsc._drawPosition(thisObj, x, y, positionValue, contractShadow); + } + }, + + + _drawPosition : function (thisObj, x, y, positionValue, contractShadow) { + var vShadow = contractShadow ? 0 : thisObj.shadowBlur; // px + + jsc.picker.wrap.style.position = positionValue; + jsc.picker.wrap.style.left = x + 'px'; + jsc.picker.wrap.style.top = y + 'px'; + + jsc.setBoxShadow( + jsc.picker.boxS, + thisObj.shadow ? + new jsc.BoxShadow(0, vShadow, thisObj.shadowBlur, 0, thisObj.shadowColor) : + null); + }, + + + getPickerDims : function (thisObj) { + var displaySlider = !!jsc.getSliderComponent(thisObj); + var dims = [ + 2 * thisObj.insetWidth + 2 * thisObj.padding + thisObj.width + + (displaySlider ? 2 * thisObj.insetWidth + jsc.getPadToSliderPadding(thisObj) + thisObj.sliderSize : 0), + 2 * thisObj.insetWidth + 2 * thisObj.padding + thisObj.height + + (thisObj.closable ? 2 * thisObj.insetWidth + thisObj.padding + thisObj.buttonHeight : 0) + ]; + return dims; + }, + + + getPickerOuterDims : function (thisObj) { + var dims = jsc.getPickerDims(thisObj); + return [ + dims[0] + 2 * thisObj.borderWidth, + dims[1] + 2 * thisObj.borderWidth + ]; + }, + + + getPadToSliderPadding : function (thisObj) { + return Math.max(thisObj.padding, 1.5 * (2 * thisObj.pointerBorderWidth + thisObj.pointerThickness)); + }, + + + getPadYComponent : function (thisObj) { + switch (thisObj.mode.charAt(1).toLowerCase()) { + case 'v': return 'v'; break; + } + return 's'; + }, + + + getSliderComponent : function (thisObj) { + if (thisObj.mode.length > 2) { + switch (thisObj.mode.charAt(2).toLowerCase()) { + case 's': return 's'; break; + case 'v': return 'v'; break; + } + } + return null; + }, + + + onDocumentMouseDown : function (e) { + if (!e) { e = window.event; } + var target = e.target || e.srcElement; + + if (target._jscLinkedInstance) { + if (target._jscLinkedInstance.showOnClick) { + target._jscLinkedInstance.show(); + } + } else if (target._jscControlName) { + jsc.onControlPointerStart(e, target, target._jscControlName, 'mouse'); + } else { + // Mouse is outside the picker controls -> hide the color picker! + if (jsc.picker && jsc.picker.owner) { + jsc.picker.owner.hide(); + } + } + }, + + + onDocumentTouchStart : function (e) { + if (!e) { e = window.event; } + var target = e.target || e.srcElement; + + if (target._jscLinkedInstance) { + if (target._jscLinkedInstance.showOnClick) { + target._jscLinkedInstance.show(); + } + } else if (target._jscControlName) { + jsc.onControlPointerStart(e, target, target._jscControlName, 'touch'); + } else { + if (jsc.picker && jsc.picker.owner) { + jsc.picker.owner.hide(); + } + } + }, + + + onWindowResize : function (e) { + jsc.redrawPosition(); + }, + + + onParentScroll : function (e) { + // hide the picker when one of the parent elements is scrolled + if (jsc.picker && jsc.picker.owner) { + jsc.picker.owner.hide(); + } + }, + + + _pointerMoveEvent : { + mouse: 'mousemove', + touch: 'touchmove' + }, + _pointerEndEvent : { + mouse: 'mouseup', + touch: 'touchend' + }, + + + _pointerOrigin : null, + _capturedTarget : null, + + + onControlPointerStart : function (e, target, controlName, pointerType) { + var thisObj = target._jscInstance; + + jsc.preventDefault(e); + jsc.captureTarget(target); + + var registerDragEvents = function (doc, offset) { + jsc.attachGroupEvent('drag', doc, jsc._pointerMoveEvent[pointerType], + jsc.onDocumentPointerMove(e, target, controlName, pointerType, offset)); + jsc.attachGroupEvent('drag', doc, jsc._pointerEndEvent[pointerType], + jsc.onDocumentPointerEnd(e, target, controlName, pointerType)); + }; + + registerDragEvents(document, [0, 0]); + + if (window.parent && window.frameElement) { + var rect = window.frameElement.getBoundingClientRect(); + var ofs = [-rect.left, -rect.top]; + registerDragEvents(window.parent.window.document, ofs); + } + + var abs = jsc.getAbsPointerPos(e); + var rel = jsc.getRelPointerPos(e); + jsc._pointerOrigin = { + x: abs.x - rel.x, + y: abs.y - rel.y + }; + + switch (controlName) { + case 'pad': + // if the slider is at the bottom, move it up + switch (jsc.getSliderComponent(thisObj)) { + case 's': if (thisObj.hsv[1] === 0) { thisObj.fromHSV(null, 100, null); }; break; + case 'v': if (thisObj.hsv[2] === 0) { thisObj.fromHSV(null, null, 100); }; break; + } + jsc.setPad(thisObj, e, 0, 0); + break; + + case 'sld': + jsc.setSld(thisObj, e, 0); + break; + } + + jsc.dispatchFineChange(thisObj); + }, + + + onDocumentPointerMove : function (e, target, controlName, pointerType, offset) { + return function (e) { + var thisObj = target._jscInstance; + switch (controlName) { + case 'pad': + if (!e) { e = window.event; } + jsc.setPad(thisObj, e, offset[0], offset[1]); + jsc.dispatchFineChange(thisObj); + break; + + case 'sld': + if (!e) { e = window.event; } + jsc.setSld(thisObj, e, offset[1]); + jsc.dispatchFineChange(thisObj); + break; + } + } + }, + + + onDocumentPointerEnd : function (e, target, controlName, pointerType) { + return function (e) { + var thisObj = target._jscInstance; + jsc.detachGroupEvents('drag'); + jsc.releaseTarget(); + // Always dispatch changes after detaching outstanding mouse handlers, + // in case some user interaction will occur in user's onchange callback + // that would intrude with current mouse events + jsc.dispatchChange(thisObj); + }; + }, + + + dispatchChange : function (thisObj) { + if (thisObj.valueElement) { + if (jsc.isElementType(thisObj.valueElement, 'input')) { + jsc.fireEvent(thisObj.valueElement, 'change'); + } + } + }, + + + dispatchFineChange : function (thisObj) { + if (thisObj.onFineChange) { + var callback; + if (typeof thisObj.onFineChange === 'string') { + callback = new Function (thisObj.onFineChange); + } else { + callback = thisObj.onFineChange; + } + callback.call(thisObj); + } + }, + + + setPad : function (thisObj, e, ofsX, ofsY) { + var pointerAbs = jsc.getAbsPointerPos(e); + var x = ofsX + pointerAbs.x - jsc._pointerOrigin.x - thisObj.padding - thisObj.insetWidth; + var y = ofsY + pointerAbs.y - jsc._pointerOrigin.y - thisObj.padding - thisObj.insetWidth; + + var xVal = x * (360 / (thisObj.width - 1)); + var yVal = 100 - (y * (100 / (thisObj.height - 1))); + + switch (jsc.getPadYComponent(thisObj)) { + case 's': thisObj.fromHSV(xVal, yVal, null, jsc.leaveSld); break; + case 'v': thisObj.fromHSV(xVal, null, yVal, jsc.leaveSld); break; + } + }, + + + setSld : function (thisObj, e, ofsY) { + var pointerAbs = jsc.getAbsPointerPos(e); + var y = ofsY + pointerAbs.y - jsc._pointerOrigin.y - thisObj.padding - thisObj.insetWidth; + + var yVal = 100 - (y * (100 / (thisObj.height - 1))); + + switch (jsc.getSliderComponent(thisObj)) { + case 's': thisObj.fromHSV(null, yVal, null, jsc.leavePad); break; + case 'v': thisObj.fromHSV(null, null, yVal, jsc.leavePad); break; + } + }, + + + _vmlNS : 'jsc_vml_', + _vmlCSS : 'jsc_vml_css_', + _vmlReady : false, + + + initVML : function () { + if (!jsc._vmlReady) { + // init VML namespace + var doc = document; + if (!doc.namespaces[jsc._vmlNS]) { + doc.namespaces.add(jsc._vmlNS, 'urn:schemas-microsoft-com:vml'); + } + if (!doc.styleSheets[jsc._vmlCSS]) { + var tags = ['shape', 'shapetype', 'group', 'background', 'path', 'formulas', 'handles', 'fill', 'stroke', 'shadow', 'textbox', 'textpath', 'imagedata', 'line', 'polyline', 'curve', 'rect', 'roundrect', 'oval', 'arc', 'image']; + var ss = doc.createStyleSheet(); + ss.owningElement.id = jsc._vmlCSS; + for (var i = 0; i < tags.length; i += 1) { + ss.addRule(jsc._vmlNS + '\\:' + tags[i], 'behavior:url(#default#VML);'); + } + } + jsc._vmlReady = true; + } + }, + + + createPalette : function () { + + var paletteObj = { + elm: null, + draw: null + }; + + if (jsc.isCanvasSupported) { + // Canvas implementation for modern browsers + + var canvas = document.createElement('canvas'); + var ctx = canvas.getContext('2d'); + + var drawFunc = function (width, height, type) { + canvas.width = width; + canvas.height = height; + + ctx.clearRect(0, 0, canvas.width, canvas.height); + + var hGrad = ctx.createLinearGradient(0, 0, canvas.width, 0); + hGrad.addColorStop(0 / 6, '#F00'); + hGrad.addColorStop(1 / 6, '#FF0'); + hGrad.addColorStop(2 / 6, '#0F0'); + hGrad.addColorStop(3 / 6, '#0FF'); + hGrad.addColorStop(4 / 6, '#00F'); + hGrad.addColorStop(5 / 6, '#F0F'); + hGrad.addColorStop(6 / 6, '#F00'); + + ctx.fillStyle = hGrad; + ctx.fillRect(0, 0, canvas.width, canvas.height); + + var vGrad = ctx.createLinearGradient(0, 0, 0, canvas.height); + switch (type.toLowerCase()) { + case 's': + vGrad.addColorStop(0, 'rgba(255,255,255,0)'); + vGrad.addColorStop(1, 'rgba(255,255,255,1)'); + break; + case 'v': + vGrad.addColorStop(0, 'rgba(0,0,0,0)'); + vGrad.addColorStop(1, 'rgba(0,0,0,1)'); + break; + } + ctx.fillStyle = vGrad; + ctx.fillRect(0, 0, canvas.width, canvas.height); + }; + + paletteObj.elm = canvas; + paletteObj.draw = drawFunc; + + } else { + // VML fallback for IE 7 and 8 + + jsc.initVML(); + + var vmlContainer = document.createElement('div'); + vmlContainer.style.position = 'relative'; + vmlContainer.style.overflow = 'hidden'; + + var hGrad = document.createElement(jsc._vmlNS + ':fill'); + hGrad.type = 'gradient'; + hGrad.method = 'linear'; + hGrad.angle = '90'; + hGrad.colors = '16.67% #F0F, 33.33% #00F, 50% #0FF, 66.67% #0F0, 83.33% #FF0' + + var hRect = document.createElement(jsc._vmlNS + ':rect'); + hRect.style.position = 'absolute'; + hRect.style.left = -1 + 'px'; + hRect.style.top = -1 + 'px'; + hRect.stroked = false; + hRect.appendChild(hGrad); + vmlContainer.appendChild(hRect); + + var vGrad = document.createElement(jsc._vmlNS + ':fill'); + vGrad.type = 'gradient'; + vGrad.method = 'linear'; + vGrad.angle = '180'; + vGrad.opacity = '0'; + + var vRect = document.createElement(jsc._vmlNS + ':rect'); + vRect.style.position = 'absolute'; + vRect.style.left = -1 + 'px'; + vRect.style.top = -1 + 'px'; + vRect.stroked = false; + vRect.appendChild(vGrad); + vmlContainer.appendChild(vRect); + + var drawFunc = function (width, height, type) { + vmlContainer.style.width = width + 'px'; + vmlContainer.style.height = height + 'px'; + + hRect.style.width = + vRect.style.width = + (width + 1) + 'px'; + hRect.style.height = + vRect.style.height = + (height + 1) + 'px'; + + // Colors must be specified during every redraw, otherwise IE won't display + // a full gradient during a subsequential redraw + hGrad.color = '#F00'; + hGrad.color2 = '#F00'; + + switch (type.toLowerCase()) { + case 's': + vGrad.color = vGrad.color2 = '#FFF'; + break; + case 'v': + vGrad.color = vGrad.color2 = '#000'; + break; + } + }; + + paletteObj.elm = vmlContainer; + paletteObj.draw = drawFunc; + } + + return paletteObj; + }, + + + createSliderGradient : function () { + + var sliderObj = { + elm: null, + draw: null + }; + + if (jsc.isCanvasSupported) { + // Canvas implementation for modern browsers + + var canvas = document.createElement('canvas'); + var ctx = canvas.getContext('2d'); + + var drawFunc = function (width, height, color1, color2) { + canvas.width = width; + canvas.height = height; + + ctx.clearRect(0, 0, canvas.width, canvas.height); + + var grad = ctx.createLinearGradient(0, 0, 0, canvas.height); + grad.addColorStop(0, color1); + grad.addColorStop(1, color2); + + ctx.fillStyle = grad; + ctx.fillRect(0, 0, canvas.width, canvas.height); + }; + + sliderObj.elm = canvas; + sliderObj.draw = drawFunc; + + } else { + // VML fallback for IE 7 and 8 + + jsc.initVML(); + + var vmlContainer = document.createElement('div'); + vmlContainer.style.position = 'relative'; + vmlContainer.style.overflow = 'hidden'; + + var grad = document.createElement(jsc._vmlNS + ':fill'); + grad.type = 'gradient'; + grad.method = 'linear'; + grad.angle = '180'; + + var rect = document.createElement(jsc._vmlNS + ':rect'); + rect.style.position = 'absolute'; + rect.style.left = -1 + 'px'; + rect.style.top = -1 + 'px'; + rect.stroked = false; + rect.appendChild(grad); + vmlContainer.appendChild(rect); + + var drawFunc = function (width, height, color1, color2) { + vmlContainer.style.width = width + 'px'; + vmlContainer.style.height = height + 'px'; + + rect.style.width = (width + 1) + 'px'; + rect.style.height = (height + 1) + 'px'; + + grad.color = color1; + grad.color2 = color2; + }; + + sliderObj.elm = vmlContainer; + sliderObj.draw = drawFunc; + } + + return sliderObj; + }, + + + leaveValue : 1<<0, + leaveStyle : 1<<1, + leavePad : 1<<2, + leaveSld : 1<<3, + + + BoxShadow : (function () { + var BoxShadow = function (hShadow, vShadow, blur, spread, color, inset) { + this.hShadow = hShadow; + this.vShadow = vShadow; + this.blur = blur; + this.spread = spread; + this.color = color; + this.inset = !!inset; + }; + + BoxShadow.prototype.toString = function () { + var vals = [ + Math.round(this.hShadow) + 'px', + Math.round(this.vShadow) + 'px', + Math.round(this.blur) + 'px', + Math.round(this.spread) + 'px', + this.color + ]; + if (this.inset) { + vals.push('inset'); + } + return vals.join(' '); + }; + + return BoxShadow; + })(), + + + // + // Usage: + // var myColor = new jscolor( [, ]) + // + + jscolor : function (targetElement, options) { + + // General options + // + this.value = null; // initial HEX color. To change it later, use methods fromString(), fromHSV() and fromRGB() + this.valueElement = targetElement; // element that will be used to display and input the color code + this.styleElement = targetElement; // element that will preview the picked color using CSS backgroundColor + this.required = true; // whether the associated text can be left empty + this.refine = true; // whether to refine the entered color code (e.g. uppercase it and remove whitespace) + this.hash = false; // whether to prefix the HEX color code with # symbol + this.uppercase = true; // whether to show the color code in upper case + this.onFineChange = null; // called instantly every time the color changes (value can be either a function or a string with javascript code) + this.activeClass = 'jscolor-active'; // class to be set to the target element when a picker window is open on it + this.overwriteImportant = false; // whether to overwrite colors of styleElement using !important + this.minS = 0; // min allowed saturation (0 - 100) + this.maxS = 100; // max allowed saturation (0 - 100) + this.minV = 0; // min allowed value (brightness) (0 - 100) + this.maxV = 100; // max allowed value (brightness) (0 - 100) + + // Accessing the picked color + // + this.hsv = [0, 0, 100]; // read-only [0-360, 0-100, 0-100] + this.rgb = [255, 255, 255]; // read-only [0-255, 0-255, 0-255] + + // Color Picker options + // + this.width = 181; // width of color palette (in px) + this.height = 101; // height of color palette (in px) + this.showOnClick = true; // whether to display the color picker when user clicks on its target element + this.mode = 'HSV'; // HSV | HVS | HS | HV - layout of the color picker controls + this.position = 'bottom'; // left | right | top | bottom - position relative to the target element + this.smartPosition = true; // automatically change picker position when there is not enough space for it + this.sliderSize = 16; // px + this.crossSize = 8; // px + this.closable = false; // whether to display the Close button + this.closeText = 'Close'; + this.buttonColor = '#000000'; // CSS color + this.buttonHeight = 18; // px + this.padding = 12; // px + this.backgroundColor = '#FFFFFF'; // CSS color + this.borderWidth = 1; // px + this.borderColor = '#BBBBBB'; // CSS color + this.borderRadius = 8; // px + this.insetWidth = 1; // px + this.insetColor = '#BBBBBB'; // CSS color + this.shadow = true; // whether to display shadow + this.shadowBlur = 15; // px + this.shadowColor = 'rgba(0,0,0,0.2)'; // CSS color + this.pointerColor = '#4C4C4C'; // px + this.pointerBorderColor = '#FFFFFF'; // px + this.pointerBorderWidth = 1; // px + this.pointerThickness = 2; // px + this.zIndex = 1000; + this.container = null; // where to append the color picker (BODY element by default) + + + for (var opt in options) { + if (options.hasOwnProperty(opt)) { + this[opt] = options[opt]; + } + } + + + this.hide = function () { + if (isPickerOwner()) { + detachPicker(); + } + }; + + + this.show = function () { + drawPicker(); + }; + + + this.redraw = function () { + if (isPickerOwner()) { + drawPicker(); + } + }; + + + this.importColor = function () { + if (!this.valueElement) { + this.exportColor(); + } else { + if (jsc.isElementType(this.valueElement, 'input')) { + if (!this.refine) { + if (!this.fromString(this.valueElement.value, jsc.leaveValue)) { + if (this.styleElement) { + this.styleElement.style.backgroundImage = this.styleElement._jscOrigStyle.backgroundImage; + this.styleElement.style.backgroundColor = this.styleElement._jscOrigStyle.backgroundColor; + this.styleElement.style.color = this.styleElement._jscOrigStyle.color; + } + this.exportColor(jsc.leaveValue | jsc.leaveStyle); + } + } else if (!this.required && /^\s*$/.test(this.valueElement.value)) { + this.valueElement.value = ''; + if (this.styleElement) { + this.styleElement.style.backgroundImage = this.styleElement._jscOrigStyle.backgroundImage; + this.styleElement.style.backgroundColor = this.styleElement._jscOrigStyle.backgroundColor; + this.styleElement.style.color = this.styleElement._jscOrigStyle.color; + } + this.exportColor(jsc.leaveValue | jsc.leaveStyle); + + } else if (this.fromString(this.valueElement.value)) { + // managed to import color successfully from the value -> OK, don't do anything + } else { + this.exportColor(); + } + } else { + // not an input element -> doesn't have any value + this.exportColor(); + } + } + }; + + + this.exportColor = function (flags) { + if (!(flags & jsc.leaveValue) && this.valueElement) { + var value = this.toString(); + if (this.uppercase) { value = value.toUpperCase(); } + if (this.hash) { value = '#' + value; } + + // if (jsc.isElementType(this.valueElement, 'input')) { + // this.valueElement.value = value; + // } else { + // this.valueElement.innerHTML = value; + // } + } + if (!(flags & jsc.leaveStyle)) { + if (this.styleElement) { + var bgColor = '#' + this.toString(); + var fgColor = this.isLight() ? '#000' : '#FFF'; + + this.styleElement.style.backgroundImage = 'none'; + this.styleElement.style.backgroundColor = bgColor; + this.styleElement.style.color = fgColor; + + if (this.overwriteImportant) { + this.styleElement.setAttribute('style', + 'background: ' + bgColor + ' !important; ' + + 'color: ' + fgColor + ' !important;' + ); + } + } + } + if (!(flags & jsc.leavePad) && isPickerOwner()) { + redrawPad(); + } + if (!(flags & jsc.leaveSld) && isPickerOwner()) { + redrawSld(); + } + }; + + + // h: 0-360 + // s: 0-100 + // v: 0-100 + // + this.fromHSV = function (h, s, v, flags) { // null = don't change + if (h !== null) { + if (isNaN(h)) { return false; } + h = Math.max(0, Math.min(360, h)); + } + if (s !== null) { + if (isNaN(s)) { return false; } + s = Math.max(0, Math.min(100, this.maxS, s), this.minS); + } + if (v !== null) { + if (isNaN(v)) { return false; } + v = Math.max(0, Math.min(100, this.maxV, v), this.minV); + } + + this.rgb = HSV_RGB( + h===null ? this.hsv[0] : (this.hsv[0]=h), + s===null ? this.hsv[1] : (this.hsv[1]=s), + v===null ? this.hsv[2] : (this.hsv[2]=v) + ); + + this.exportColor(flags); + }; + + + // r: 0-255 + // g: 0-255 + // b: 0-255 + // + this.fromRGB = function (r, g, b, flags) { // null = don't change + if (r !== null) { + if (isNaN(r)) { return false; } + r = Math.max(0, Math.min(255, r)); + } + if (g !== null) { + if (isNaN(g)) { return false; } + g = Math.max(0, Math.min(255, g)); + } + if (b !== null) { + if (isNaN(b)) { return false; } + b = Math.max(0, Math.min(255, b)); + } + + var hsv = RGB_HSV( + r===null ? this.rgb[0] : r, + g===null ? this.rgb[1] : g, + b===null ? this.rgb[2] : b + ); + if (hsv[0] !== null) { + this.hsv[0] = Math.max(0, Math.min(360, hsv[0])); + } + if (hsv[2] !== 0) { + this.hsv[1] = hsv[1]===null ? null : Math.max(0, this.minS, Math.min(100, this.maxS, hsv[1])); + } + this.hsv[2] = hsv[2]===null ? null : Math.max(0, this.minV, Math.min(100, this.maxV, hsv[2])); + + // update RGB according to final HSV, as some values might be trimmed + var rgb = HSV_RGB(this.hsv[0], this.hsv[1], this.hsv[2]); + this.rgb[0] = rgb[0]; + this.rgb[1] = rgb[1]; + this.rgb[2] = rgb[2]; + + this.exportColor(flags); + }; + + + this.fromString = function (str, flags) { + var m; + if (m = str.match(/^\W*([0-9A-F]{3}([0-9A-F]{3})?)\W*$/i)) { + // HEX notation + // + + if (m[1].length === 6) { + // 6-char notation + this.fromRGB( + parseInt(m[1].substr(0,2),16), + parseInt(m[1].substr(2,2),16), + parseInt(m[1].substr(4,2),16), + flags + ); + } else { + // 3-char notation + this.fromRGB( + parseInt(m[1].charAt(0) + m[1].charAt(0),16), + parseInt(m[1].charAt(1) + m[1].charAt(1),16), + parseInt(m[1].charAt(2) + m[1].charAt(2),16), + flags + ); + } + return true; + + } else if (m = str.match(/^\W*rgba?\(([^)]*)\)\W*$/i)) { + var params = m[1].split(','); + var re = /^\s*(\d*)(\.\d+)?\s*$/; + var mR, mG, mB; + if ( + params.length >= 3 && + (mR = params[0].match(re)) && + (mG = params[1].match(re)) && + (mB = params[2].match(re)) + ) { + var r = parseFloat((mR[1] || '0') + (mR[2] || '')); + var g = parseFloat((mG[1] || '0') + (mG[2] || '')); + var b = parseFloat((mB[1] || '0') + (mB[2] || '')); + this.fromRGB(r, g, b, flags); + return true; + } + } + return false; + }; + + + this.toString = function () { + return ( + (0x100 | Math.round(this.rgb[0])).toString(16).substr(1) + + (0x100 | Math.round(this.rgb[1])).toString(16).substr(1) + + (0x100 | Math.round(this.rgb[2])).toString(16).substr(1) + ); + }; + + + this.toHEXString = function () { + return '#' + this.toString().toUpperCase(); + }; + + + this.toRGBString = function () { + return ('rgb(' + + Math.round(this.rgb[0]) + ',' + + Math.round(this.rgb[1]) + ',' + + Math.round(this.rgb[2]) + ')' + ); + }; + + + this.isLight = function () { + return ( + 0.213 * this.rgb[0] + + 0.715 * this.rgb[1] + + 0.072 * this.rgb[2] > + 255 / 2 + ); + }; + + + this._processParentElementsInDOM = function () { + if (this._linkedElementsProcessed) { return; } + this._linkedElementsProcessed = true; + + var elm = this.targetElement; + do { + // If the target element or one of its parent nodes has fixed position, + // then use fixed positioning instead + // + // Note: In Firefox, getComputedStyle returns null in a hidden iframe, + // that's why we need to check if the returned style object is non-empty + var currStyle = jsc.getStyle(elm); + if (currStyle && currStyle.position.toLowerCase() === 'fixed') { + this.fixed = true; + } + + if (elm !== this.targetElement) { + // Ensure to attach onParentScroll only once to each parent element + // (multiple targetElements can share the same parent nodes) + // + // Note: It's not just offsetParents that can be scrollable, + // that's why we loop through all parent nodes + if (!elm._jscEventsAttached) { + jsc.attachEvent(elm, 'scroll', jsc.onParentScroll); + elm._jscEventsAttached = true; + } + } + } while ((elm = elm.parentNode) && !jsc.isElementType(elm, 'body')); + }; + + + // r: 0-255 + // g: 0-255 + // b: 0-255 + // + // returns: [ 0-360, 0-100, 0-100 ] + // + function RGB_HSV (r, g, b) { + r /= 255; + g /= 255; + b /= 255; + var n = Math.min(Math.min(r,g),b); + var v = Math.max(Math.max(r,g),b); + var m = v - n; + if (m === 0) { return [ null, 0, 100 * v ]; } + var h = r===n ? 3+(b-g)/m : (g===n ? 5+(r-b)/m : 1+(g-r)/m); + return [ + 60 * (h===6?0:h), + 100 * (m/v), + 100 * v + ]; + } + + + // h: 0-360 + // s: 0-100 + // v: 0-100 + // + // returns: [ 0-255, 0-255, 0-255 ] + // + function HSV_RGB (h, s, v) { + var u = 255 * (v / 100); + + if (h === null) { + return [ u, u, u ]; + } + + h /= 60; + s /= 100; + + var i = Math.floor(h); + var f = i%2 ? h-i : 1-(h-i); + var m = u * (1 - s); + var n = u * (1 - s * f); + switch (i) { + case 6: + case 0: return [u,n,m]; + case 1: return [n,u,m]; + case 2: return [m,u,n]; + case 3: return [m,n,u]; + case 4: return [n,m,u]; + case 5: return [u,m,n]; + } + } + + + function detachPicker () { + jsc.unsetClass(THIS.targetElement, THIS.activeClass); + jsc.picker.wrap.parentNode.removeChild(jsc.picker.wrap); + delete jsc.picker.owner; + } + + + function drawPicker () { + + // At this point, when drawing the picker, we know what the parent elements are + // and we can do all related DOM operations, such as registering events on them + // or checking their positioning + THIS._processParentElementsInDOM(); + + if (!jsc.picker) { + jsc.picker = { + owner: null, + wrap : document.createElement('div'), + box : document.createElement('div'), + boxS : document.createElement('div'), // shadow area + boxB : document.createElement('div'), // border + pad : document.createElement('div'), + padB : document.createElement('div'), // border + padM : document.createElement('div'), // mouse/touch area + padPal : jsc.createPalette(), + cross : document.createElement('div'), + crossBY : document.createElement('div'), // border Y + crossBX : document.createElement('div'), // border X + crossLY : document.createElement('div'), // line Y + crossLX : document.createElement('div'), // line X + sld : document.createElement('div'), + sldB : document.createElement('div'), // border + sldM : document.createElement('div'), // mouse/touch area + sldGrad : jsc.createSliderGradient(), + sldPtrS : document.createElement('div'), // slider pointer spacer + sldPtrIB : document.createElement('div'), // slider pointer inner border + sldPtrMB : document.createElement('div'), // slider pointer middle border + sldPtrOB : document.createElement('div'), // slider pointer outer border + btn : document.createElement('div'), + btnT : document.createElement('span') // text + }; + + jsc.picker.pad.appendChild(jsc.picker.padPal.elm); + jsc.picker.padB.appendChild(jsc.picker.pad); + jsc.picker.cross.appendChild(jsc.picker.crossBY); + jsc.picker.cross.appendChild(jsc.picker.crossBX); + jsc.picker.cross.appendChild(jsc.picker.crossLY); + jsc.picker.cross.appendChild(jsc.picker.crossLX); + jsc.picker.padB.appendChild(jsc.picker.cross); + jsc.picker.box.appendChild(jsc.picker.padB); + jsc.picker.box.appendChild(jsc.picker.padM); + + jsc.picker.sld.appendChild(jsc.picker.sldGrad.elm); + jsc.picker.sldB.appendChild(jsc.picker.sld); + jsc.picker.sldB.appendChild(jsc.picker.sldPtrOB); + jsc.picker.sldPtrOB.appendChild(jsc.picker.sldPtrMB); + jsc.picker.sldPtrMB.appendChild(jsc.picker.sldPtrIB); + jsc.picker.sldPtrIB.appendChild(jsc.picker.sldPtrS); + jsc.picker.box.appendChild(jsc.picker.sldB); + jsc.picker.box.appendChild(jsc.picker.sldM); + + jsc.picker.btn.appendChild(jsc.picker.btnT); + jsc.picker.box.appendChild(jsc.picker.btn); + + jsc.picker.boxB.appendChild(jsc.picker.box); + jsc.picker.wrap.appendChild(jsc.picker.boxS); + jsc.picker.wrap.appendChild(jsc.picker.boxB); + } + + var p = jsc.picker; + + var displaySlider = !!jsc.getSliderComponent(THIS); + var dims = jsc.getPickerDims(THIS); + var crossOuterSize = (2 * THIS.pointerBorderWidth + THIS.pointerThickness + 2 * THIS.crossSize); + var padToSliderPadding = jsc.getPadToSliderPadding(THIS); + var borderRadius = Math.min( + THIS.borderRadius, + Math.round(THIS.padding * Math.PI)); // px + var padCursor = 'crosshair'; + + // wrap + p.wrap.style.clear = 'both'; + p.wrap.style.width = (dims[0] + 2 * THIS.borderWidth) + 'px'; + p.wrap.style.height = (dims[1] + 2 * THIS.borderWidth) + 'px'; + p.wrap.style.zIndex = THIS.zIndex; + + // picker + p.box.style.width = dims[0] + 'px'; + p.box.style.height = dims[1] + 'px'; + + p.boxS.style.position = 'absolute'; + p.boxS.style.left = '0'; + p.boxS.style.top = '0'; + p.boxS.style.width = '100%'; + p.boxS.style.height = '100%'; + jsc.setBorderRadius(p.boxS, borderRadius + 'px'); + + // picker border + p.boxB.style.position = 'relative'; + p.boxB.style.border = THIS.borderWidth + 'px solid'; + p.boxB.style.borderColor = THIS.borderColor; + p.boxB.style.background = THIS.backgroundColor; + jsc.setBorderRadius(p.boxB, borderRadius + 'px'); + + // IE hack: + // If the element is transparent, IE will trigger the event on the elements under it, + // e.g. on Canvas or on elements with border + p.padM.style.background = + p.sldM.style.background = + '#FFF'; + jsc.setStyle(p.padM, 'opacity', '0'); + jsc.setStyle(p.sldM, 'opacity', '0'); + + // pad + p.pad.style.position = 'relative'; + p.pad.style.width = THIS.width + 'px'; + p.pad.style.height = THIS.height + 'px'; + + // pad palettes (HSV and HVS) + p.padPal.draw(THIS.width, THIS.height, jsc.getPadYComponent(THIS)); + + // pad border + p.padB.style.position = 'absolute'; + p.padB.style.left = THIS.padding + 'px'; + p.padB.style.top = THIS.padding + 'px'; + p.padB.style.border = THIS.insetWidth + 'px solid'; + p.padB.style.borderColor = THIS.insetColor; + + // pad mouse area + p.padM._jscInstance = THIS; + p.padM._jscControlName = 'pad'; + p.padM.style.position = 'absolute'; + p.padM.style.left = '0'; + p.padM.style.top = '0'; + p.padM.style.width = (THIS.padding + 2 * THIS.insetWidth + THIS.width + padToSliderPadding / 2) + 'px'; + p.padM.style.height = dims[1] + 'px'; + p.padM.style.cursor = padCursor; + + // pad cross + p.cross.style.position = 'absolute'; + p.cross.style.left = + p.cross.style.top = + '0'; + p.cross.style.width = + p.cross.style.height = + crossOuterSize + 'px'; + + // pad cross border Y and X + p.crossBY.style.position = + p.crossBX.style.position = + 'absolute'; + p.crossBY.style.background = + p.crossBX.style.background = + THIS.pointerBorderColor; + p.crossBY.style.width = + p.crossBX.style.height = + (2 * THIS.pointerBorderWidth + THIS.pointerThickness) + 'px'; + p.crossBY.style.height = + p.crossBX.style.width = + crossOuterSize + 'px'; + p.crossBY.style.left = + p.crossBX.style.top = + (Math.floor(crossOuterSize / 2) - Math.floor(THIS.pointerThickness / 2) - THIS.pointerBorderWidth) + 'px'; + p.crossBY.style.top = + p.crossBX.style.left = + '0'; + + // pad cross line Y and X + p.crossLY.style.position = + p.crossLX.style.position = + 'absolute'; + p.crossLY.style.background = + p.crossLX.style.background = + THIS.pointerColor; + p.crossLY.style.height = + p.crossLX.style.width = + (crossOuterSize - 2 * THIS.pointerBorderWidth) + 'px'; + p.crossLY.style.width = + p.crossLX.style.height = + THIS.pointerThickness + 'px'; + p.crossLY.style.left = + p.crossLX.style.top = + (Math.floor(crossOuterSize / 2) - Math.floor(THIS.pointerThickness / 2)) + 'px'; + p.crossLY.style.top = + p.crossLX.style.left = + THIS.pointerBorderWidth + 'px'; + + // slider + p.sld.style.overflow = 'hidden'; + p.sld.style.width = THIS.sliderSize + 'px'; + p.sld.style.height = THIS.height + 'px'; + + // slider gradient + p.sldGrad.draw(THIS.sliderSize, THIS.height, '#000', '#000'); + + // slider border + p.sldB.style.display = displaySlider ? 'block' : 'none'; + p.sldB.style.position = 'absolute'; + p.sldB.style.right = THIS.padding + 'px'; + p.sldB.style.top = THIS.padding + 'px'; + p.sldB.style.border = THIS.insetWidth + 'px solid'; + p.sldB.style.borderColor = THIS.insetColor; + + // slider mouse area + p.sldM._jscInstance = THIS; + p.sldM._jscControlName = 'sld'; + p.sldM.style.display = displaySlider ? 'block' : 'none'; + p.sldM.style.position = 'absolute'; + p.sldM.style.right = '0'; + p.sldM.style.top = '0'; + p.sldM.style.width = (THIS.sliderSize + padToSliderPadding / 2 + THIS.padding + 2 * THIS.insetWidth) + 'px'; + p.sldM.style.height = dims[1] + 'px'; + p.sldM.style.cursor = 'default'; + + // slider pointer inner and outer border + p.sldPtrIB.style.border = + p.sldPtrOB.style.border = + THIS.pointerBorderWidth + 'px solid ' + THIS.pointerBorderColor; + + // slider pointer outer border + p.sldPtrOB.style.position = 'absolute'; + p.sldPtrOB.style.left = -(2 * THIS.pointerBorderWidth + THIS.pointerThickness) + 'px'; + p.sldPtrOB.style.top = '0'; + + // slider pointer middle border + p.sldPtrMB.style.border = THIS.pointerThickness + 'px solid ' + THIS.pointerColor; + + // slider pointer spacer + p.sldPtrS.style.width = THIS.sliderSize + 'px'; + p.sldPtrS.style.height = sliderPtrSpace + 'px'; + + // the Close button + function setBtnBorder () { + var insetColors = THIS.insetColor.split(/\s+/); + var outsetColor = insetColors.length < 2 ? insetColors[0] : insetColors[1] + ' ' + insetColors[0] + ' ' + insetColors[0] + ' ' + insetColors[1]; + p.btn.style.borderColor = outsetColor; + } + p.btn.style.display = THIS.closable ? 'block' : 'none'; + p.btn.style.position = 'absolute'; + p.btn.style.left = THIS.padding + 'px'; + p.btn.style.bottom = THIS.padding + 'px'; + p.btn.style.padding = '0 15px'; + p.btn.style.height = THIS.buttonHeight + 'px'; + p.btn.style.border = THIS.insetWidth + 'px solid'; + setBtnBorder(); + p.btn.style.color = THIS.buttonColor; + p.btn.style.font = '12px sans-serif'; + p.btn.style.textAlign = 'center'; + try { + p.btn.style.cursor = 'pointer'; + } catch(eOldIE) { + p.btn.style.cursor = 'hand'; + } + p.btn.onmousedown = function () { + THIS.hide(); + }; + p.btnT.style.lineHeight = THIS.buttonHeight + 'px'; + p.btnT.innerHTML = ''; + p.btnT.appendChild(document.createTextNode(THIS.closeText)); + + // place pointers + redrawPad(); + redrawSld(); + + // If we are changing the owner without first closing the picker, + // make sure to first deal with the old owner + if (jsc.picker.owner && jsc.picker.owner !== THIS) { + jsc.unsetClass(jsc.picker.owner.targetElement, THIS.activeClass); + } + + // Set the new picker owner + jsc.picker.owner = THIS; + + // The redrawPosition() method needs picker.owner to be set, that's why we call it here, + // after setting the owner + if (jsc.isElementType(container, 'body')) { + jsc.redrawPosition(); + } else { + jsc._drawPosition(THIS, 0, 0, 'relative', false); + } + + if (p.wrap.parentNode != container) { + container.appendChild(p.wrap); + } + + jsc.setClass(THIS.targetElement, THIS.activeClass); + } + + + function redrawPad () { + // redraw the pad pointer + switch (jsc.getPadYComponent(THIS)) { + case 's': var yComponent = 1; break; + case 'v': var yComponent = 2; break; + } + var x = Math.round((THIS.hsv[0] / 360) * (THIS.width - 1)); + var y = Math.round((1 - THIS.hsv[yComponent] / 100) * (THIS.height - 1)); + var crossOuterSize = (2 * THIS.pointerBorderWidth + THIS.pointerThickness + 2 * THIS.crossSize); + var ofs = -Math.floor(crossOuterSize / 2); + jsc.picker.cross.style.left = (x + ofs) + 'px'; + jsc.picker.cross.style.top = (y + ofs) + 'px'; + + // redraw the slider + switch (jsc.getSliderComponent(THIS)) { + case 's': + var rgb1 = HSV_RGB(THIS.hsv[0], 100, THIS.hsv[2]); + var rgb2 = HSV_RGB(THIS.hsv[0], 0, THIS.hsv[2]); + var color1 = 'rgb(' + + Math.round(rgb1[0]) + ',' + + Math.round(rgb1[1]) + ',' + + Math.round(rgb1[2]) + ')'; + var color2 = 'rgb(' + + Math.round(rgb2[0]) + ',' + + Math.round(rgb2[1]) + ',' + + Math.round(rgb2[2]) + ')'; + jsc.picker.sldGrad.draw(THIS.sliderSize, THIS.height, color1, color2); + break; + case 'v': + var rgb = HSV_RGB(THIS.hsv[0], THIS.hsv[1], 100); + var color1 = 'rgb(' + + Math.round(rgb[0]) + ',' + + Math.round(rgb[1]) + ',' + + Math.round(rgb[2]) + ')'; + var color2 = '#000'; + jsc.picker.sldGrad.draw(THIS.sliderSize, THIS.height, color1, color2); + break; + } + } + + + function redrawSld () { + var sldComponent = jsc.getSliderComponent(THIS); + if (sldComponent) { + // redraw the slider pointer + switch (sldComponent) { + case 's': var yComponent = 1; break; + case 'v': var yComponent = 2; break; + } + var y = Math.round((1 - THIS.hsv[yComponent] / 100) * (THIS.height - 1)); + jsc.picker.sldPtrOB.style.top = (y - (2 * THIS.pointerBorderWidth + THIS.pointerThickness) - Math.floor(sliderPtrSpace / 2)) + 'px'; + } + } + + + function isPickerOwner () { + return jsc.picker && jsc.picker.owner === THIS; + } + + + function blurValue () { + THIS.importColor(); + } + + + // Find the target element + if (typeof targetElement === 'string') { + var id = targetElement; + var elm = document.getElementById(id); + if (elm) { + this.targetElement = elm; + } else { + jsc.warn('Could not find target element with ID \'' + id + '\''); + } + } else if (targetElement) { + this.targetElement = targetElement; + } else { + jsc.warn('Invalid target element: \'' + targetElement + '\''); + } + + if (this.targetElement._jscLinkedInstance) { + jsc.warn('Cannot link jscolor twice to the same element. Skipping.'); + return; + } + this.targetElement._jscLinkedInstance = this; + + // Find the value element + this.valueElement = jsc.fetchElement(this.valueElement); + // Find the style element + this.styleElement = jsc.fetchElement(this.styleElement); + + var THIS = this; + var container = + this.container ? + jsc.fetchElement(this.container) : + document.getElementsByTagName('body')[0]; + var sliderPtrSpace = 3; // px + + // For BUTTON elements it's important to stop them from sending the form when clicked + // (e.g. in Safari) + if (jsc.isElementType(this.targetElement, 'button')) { + if (this.targetElement.onclick) { + var origCallback = this.targetElement.onclick; + this.targetElement.onclick = function (evt) { + origCallback.call(this, evt); + return false; + }; + } else { + this.targetElement.onclick = function () { return false; }; + } + } + + /* + var elm = this.targetElement; + do { + // If the target element or one of its offsetParents has fixed position, + // then use fixed positioning instead + // + // Note: In Firefox, getComputedStyle returns null in a hidden iframe, + // that's why we need to check if the returned style object is non-empty + var currStyle = jsc.getStyle(elm); + if (currStyle && currStyle.position.toLowerCase() === 'fixed') { + this.fixed = true; + } + + if (elm !== this.targetElement) { + // attach onParentScroll so that we can recompute the picker position + // when one of the offsetParents is scrolled + if (!elm._jscEventsAttached) { + jsc.attachEvent(elm, 'scroll', jsc.onParentScroll); + elm._jscEventsAttached = true; + } + } + } while ((elm = elm.offsetParent) && !jsc.isElementType(elm, 'body')); + */ + + // valueElement + if (this.valueElement) { + if (jsc.isElementType(this.valueElement, 'input')) { + var updateField = function () { + THIS.fromString(THIS.valueElement.value, jsc.leaveValue); + jsc.dispatchFineChange(THIS); + }; + jsc.attachEvent(this.valueElement, 'keyup', updateField); + jsc.attachEvent(this.valueElement, 'input', updateField); + jsc.attachEvent(this.valueElement, 'blur', blurValue); + this.valueElement.setAttribute('autocomplete', 'off'); + } + } + + // styleElement + if (this.styleElement) { + this.styleElement._jscOrigStyle = { + backgroundImage : this.styleElement.style.backgroundImage, + backgroundColor : this.styleElement.style.backgroundColor, + color : this.styleElement.style.color + }; + } + + if (this.value) { + // Try to set the color from the .value option and if unsuccessful, + // export the current color + this.fromString(this.value) || this.exportColor(); + } else { + this.importColor(); + } + } + +}; + + +//================================ +// Public properties and methods +//================================ + + +// By default, search for all elements with class="jscolor" and install a color picker on them. +// +// You can change what class name will be looked for by setting the property jscolor.lookupClass +// anywhere in your HTML document. To completely disable the automatic lookup, set it to null. +// +jsc.jscolor.lookupClass = 'jscolor'; + + +jsc.jscolor.installByClassName = function (className) { + var inputElms = document.getElementsByTagName('input'); + var buttonElms = document.getElementsByTagName('button'); + + jsc.tryInstallOnElements(inputElms, className); + jsc.tryInstallOnElements(buttonElms, className); +}; + + +jsc.register(); + + +return jsc.jscolor; + + +})(); } diff --git a/scripts/system/appreciate/resources/sounds/claps/01.wav b/scripts/system/appreciate/resources/sounds/claps/01.wav new file mode 100644 index 0000000000000000000000000000000000000000..b4baa2888a832e862dd28ee257d357639e15599e GIT binary patch literal 24022 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 pt=sNgoNRX|JDpB-c{l@f@^W}R|zO&4G`RqOA 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 z
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 HugCubkPLSF literal 0 HcmV?d00001 diff --git a/scripts/system/appreciate/resources/sounds/claps/03.wav b/scripts/system/appreciate/resources/sounds/claps/03.wav new file mode 100644 index 0000000000000000000000000000000000000000..bc5d35760d3d2fa0f088a135a52650a2fc208357 GIT binary patch literal 22392 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 D2EVQv literal 0 HcmV?d00001 diff --git a/scripts/system/appreciate/resources/sounds/claps/04.wav b/scripts/system/appreciate/resources/sounds/claps/04.wav new file mode 100644 index 0000000000000000000000000000000000000000..cacaf44b6ebe12f2657e1f7bfde63c5597134fff GIT binary patch literal 18632 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 z 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 TEC27Wr!cDV|NXB2zh3_jF^>iU literal 0 HcmV?d00001 diff --git a/scripts/system/appreciate/resources/sounds/claps/06.wav b/scripts/system/appreciate/resources/sounds/claps/06.wav new file mode 100644 index 0000000000000000000000000000000000000000..81716f26be33a208f99cf1c660c915cc3cd76cbf GIT binary patch literal 21408 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 literal 0 HcmV?d00001 diff --git a/scripts/system/appreciate/resources/sounds/claps/11.wav b/scripts/system/appreciate/resources/sounds/claps/11.wav new file mode 100644 index 0000000000000000000000000000000000000000..40b8415725a9b6e4b3a0349a4ba2b213090a24d9 GIT binary patch literal 20860 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 literal 0 HcmV?d00001 diff --git a/scripts/system/appreciate/resources/sounds/claps/12.wav b/scripts/system/appreciate/resources/sounds/claps/12.wav new file mode 100644 index 0000000000000000000000000000000000000000..68656f7c21a04bfc6ac5ac30ec77d2707e510f7b GIT binary patch literal 20426 zcmd6PXLuD=)b6`y&Pf9jLP+Q>Ktd4+y>~>As(^qrK@mliD#bz*Q7nK8h$0A9nsg9E zk&Y00Z=nPN1QJL>NIPftd!Mx@(eK~A&-d$|d6JWJGPBFtYrX4TYxbJwJ9q53w+GO- z?F&yo+oyY%vH;|>ypDEt-(QV!-{tk{n-eM)1)!iXeJ6lP3Kojum7x=cy60O6KnOxn z6h#q=A}EYP2u2`0kTY#~5r9AhBEWnjFB={NAQ(XiMhFU_Nd9$&5sX48j3Nj_5z~sa z&c9@9o3f)IkjruPU$A_^r?97RzCAqX_rIm}}YvzbdjResOXPH_HJ zMNMBJ2+AL!2VQt!!OHJJMkph4XC|%6|K%*1Q&9ehY}ol%xc>{tpR=4H^ORA_Ohe5P zX8J6Q5HlN*hFonMIZCTuBQy6~cN_)1$!H3W;QX-_LLr2hUJ6ET8OckF@|PSQ1m?@O zusP%k8CAim$T{+o-}1Ng>O~L=BMjjvh6qHUIEtJ1Vkm~9X02pJr4N8~sOhIexn6pf z>t(HErCoW4m~|~`)=63lM|l1^2bnci(Ddc6Rt|mCB&~nP9cs=lkeq0k=#9)KIDZ_j z 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 ZD<3}II?d?AR35!uj+Zx%KI;E!e*i6(kxKvo literal 0 HcmV?d00001 diff --git a/scripts/system/appreciate/resources/sounds/claps/14.wav b/scripts/system/appreciate/resources/sounds/claps/14.wav new file mode 100644 index 0000000000000000000000000000000000000000..a5e8b5ad4950cf035cf22a91fabae830f59db0d9 GIT binary patch literal 23660 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 literal 0 HcmV?d00001 diff --git a/scripts/system/appreciate/resources/sounds/claps/15.wav b/scripts/system/appreciate/resources/sounds/claps/15.wav new file mode 100644 index 0000000000000000000000000000000000000000..7f3072e3e05eb644e9e2122d119482840a0c1b7a GIT binary patch literal 21570 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 X3z+|%pZ~K*ZG6@A|Ln^D|2+OLhfE>x literal 0 HcmV?d00001 diff --git a/scripts/system/appreciate/resources/sounds/claps/16.wav b/scripts/system/appreciate/resources/sounds/claps/16.wav new file mode 100644 index 0000000000000000000000000000000000000000..f76bee04294652d60b75852541c53f13f5d96015 GIT binary patch literal 22936 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 literal 0 HcmV?d00001 diff --git a/scripts/system/appreciate/resources/sounds/whistles/01.wav b/scripts/system/appreciate/resources/sounds/whistles/01.wav new file mode 100644 index 0000000000000000000000000000000000000000..d8b27da990d2d1ba9c40e931f21bf01ab7a97a3f GIT binary patch literal 37336 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 z%0D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 literal 0 HcmV?d00001 diff --git a/scripts/system/appreciate/resources/sounds/whistles/02.wav b/scripts/system/appreciate/resources/sounds/whistles/02.wav new file mode 100644 index 0000000000000000000000000000000000000000..0c0874087ecfeb516fd322cc87d38cc81de6d77f GIT binary patch literal 78470 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

)aTg7;$YlLVAp>JD-|J_C-5 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 X&;EZNB)S3;Tmsic2)Y6iU55Vy=M`T? literal 0 HcmV?d00001 diff --git a/scripts/system/appreciate/resources/sounds/whistles/03.wav b/scripts/system/appreciate/resources/sounds/whistles/03.wav new file mode 100644 index 0000000000000000000000000000000000000000..5a784066010725e2b2816b5b2de4f901c69ef3c5 GIT binary patch literal 29228 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%0DTN+u@tS>DO&4=kL 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�G4&s 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%0AbgQhnDrn-0;}hOvhEL54wk~dBfsFX*elvQ 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 literal 0 HcmV?d00001 diff --git a/scripts/system/appreciate/resources/sounds/whistles/05.wav b/scripts/system/appreciate/resources/sounds/whistles/05.wav new file mode 100644 index 0000000000000000000000000000000000000000..f261e29aac062bb5b47b21fdbcbf48c1b9212828 GIT binary patch literal 23084 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 OlA7v~)Ko}n>i+>tcH%t% literal 0 HcmV?d00001 diff --git a/scripts/system/appreciate/resources/sounds/whistles/06.wav b/scripts/system/appreciate/resources/sounds/whistles/06.wav new file mode 100644 index 0000000000000000000000000000000000000000..7194c02d9b91a7d8e12813e5290c8cf8c84a5330 GIT binary patch literal 24622 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 literal 0 HcmV?d00001 diff --git a/scripts/system/appreciate/resources/sounds/whistles/07.wav b/scripts/system/appreciate/resources/sounds/whistles/07.wav new file mode 100644 index 0000000000000000000000000000000000000000..43d65f3af776dd0363d4a9332f0bf11e1f666501 GIT binary patch literal 47248 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 Rf+5ppj7ba_W5m?*{{erl_{0DJ literal 0 HcmV?d00001 diff --git a/scripts/system/appreciate/resources/sounds/whistles/08.wav b/scripts/system/appreciate/resources/sounds/whistles/08.wav new file mode 100644 index 0000000000000000000000000000000000000000..612bc5b5fa835dc1cab807a8eefa368e5b0d282b GIT binary patch literal 43168 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 Li11BJOhW$$^>e=m literal 0 HcmV?d00001 diff --git a/scripts/system/appreciate/resources/sounds/whistles/09.wav b/scripts/system/appreciate/resources/sounds/whistles/09.wav new file mode 100644 index 0000000000000000000000000000000000000000..d900d59f03bcbc20665beb0fc1ddd29077a3d3b3 GIT binary patch literal 49196 zcmXVW1(24x?{M3+edM)uUtn=r+&SD2J!H|t9S%9%ox`2uki|LN<#2a*w{`c|<$3ze zkMBR3wwX+lrkNy_Y1dy{w=R7Xp`Oipv>HBkatS|#5JniaJciJ+UKkPNhlUQCJP6%H z2q7U5(uF1fx&IH-g)Te-A+OMcM`*$)Ji;ejLKhAp{;zq3LwJQtc!g7Vgj;xo=O<w3-3y%KhtN-sU8OaEc z5P$-aiVVmf1tS%OqLRoTl|m&@SyUEPN2O6^R1H-@bx;jd8kI(|s5mN)%A#l#ii)8? z6pl)uFcgf!Q3Q%WrBMVbiOQmI6oV?E%BU==i0Y$is4l9HenBl!8`K(gKyj!&>VkTs zz9%M~l%a^beYg7N8|)9-4t>pb2Op8i~fD zX=nx-j;5h8Xfm3J#-J%^HkyfMqq%4Xnu+G3W#})o7A;3x&}Os~?MCO&L39zFMla9< z^ccNIpU`Xc0ewWT&@=Q7Jw(^hEp!WAL}$=RbQT>)N6;~J6dgrJ&^~k=9Y>eYO>`06 zKsV6^^Z>m>-%&EkMKankY{2DkEUt=c;AXfP?uG~8sdzk|gcstaco|-e z*W$JKZ@dD}!c*}SJPl94zvHgB6K;cB;WoGlu8!;C#<(G_ja%bZxGnC2yW?&@d3xeW zcphGZ*WtbRGCqkfa_BMqZKQmpSV=m`A@9jEa*f;~C&^B- znk*yp$z(EzOd@}hKgf)ql=Wma*-DO*v*apyL~fBEq=*y}4l)#jSZDxEpguH#PVgJF zfv(UJVj&h{AQEIqCqKw@a+RDX@#OEHu#IdWf05l}7dc0+ko)90`9^+_9HKxZl!1!S z8hXQEmE1LIr3HZDAq|hH)?-7QkM(3(p`KbYRp% zV`w#6mv*GB>94c{twC$i>eNCtD1s-j54OV;=mqVeDO3i3h=M?fg5ppS8bKTQ6$Zhd zFacJ>dAJPszzHTAL2J?`v^yP2N789@HeE(%(`ociI-GW+HE9qv(PX#?2Vosdfl<%~ zT0lLh0=1zg#6la0gZ?lJR=`fU2JhiJC^UxFrJd+dI-Rbjd+2$3j^3r$=mUC*?x68> z4IN55(F)WKFW@+=g^AD^nnH`8aq=s)hc3_y#=>-10K4HnoQIE~LpZHTyV03+E4@#j z(-caWn=-~3W<@lEKBUL#20DQ@r=e7bXRs62!Xy|5Lm>{DL38K`qhTB@ghOx%UO_4p zf{8Ywo#+I*i{7AbX#rJOY1W3dWF1&X)`(SLDs$2VdYaCnU1(YAgk*RQyMIR7R2T(+ zz#LczD_{j|giCNA-a;xAr&Vbix{&@$A5$kS&VFTaYysQEcC$@v37f+vv(7ArVfKyg zqr+$$T7tfXD{u@p!W0+>17Hvgf%&imcEBmP4e4N_6=+*Jnr@``Xf6$84On+Jjjdw; zvWM&id&X|E(`+T1!s1vA%cQ4ie_EST`T~x@CYS;fU zN7J435fwC$HD@E(3U-J+V=q}E%VclZGj@t?VN+Q>7RWx(<+L*`OPO$f3pfYI-~ghWP=>aoadZQHMJcPv`m)vR6iZ;3NAb!( z!N7einVn=~SxXkcp3!-=t(-1mZ45~3zy*-?1H~wDy)Q+um;Y< zGspo>tI{5H61_@&v;rH!wz69+kp=K-yan&g`|y6e2`|Pap2fDZVXOpuN#kj68cws} zCEWU%MMvRZh=&7k1roslMp}_}rQ_)ydW%|V9X5!qVIP^71@p2zj{m_2@-e&xFU#%h z5?jRDGBbNjSJ1w+0xg6bcn1H$8MpyQARbP`bvOqvzzOAPJvxZ)pl@j;8_9OC?<|m4 z=iT`bK7+64<9KUcnmgECwwBdnUV4o#pzUb@O@aGAtKeo>2J2um9EN-F1`+{NnO37i z=xTbCX3`)wn5}0ISP?7EoAJSX6d%dk@j#x0H{F2GIm~0(W35tb%xm zhh4A%j=*(z2&v$O5;Ts^qT6XQEzkO})$9p#vv6LKx8+@VD_))(`8&3W^gK4e@XtzQPa4hX~r0PN!SwZR(??Su-}9on%+p1NNGIV;L-k zxmgyw&33XOKcnyk{f7>vC22mqhs&@FcEL{A30q(l?1gi16+S{1gwa-XJUvW5QJFPo zGuXfED*Mh{%*lX9agDuZ&saPg$&BnJJw=z(*0c4`ob&hWDqF;wuu|+1{fl;`#i<(-e(pe*;2`XV zJ+Kc>{>Tt&kQ$WF6) ztOtu>@99Q5l{TV9@Dz^1GFSw2f7Zb{FbfXAId}~3zyStYi}s;&={@SDWms>vmYrnZ znP6dD;tqD7?PUE~D0@eD&|Wl}I^Y$YgjKK}7QiUz2){#57!7k_16+YZ2%+uhP`ZIW zrZVfu{$%^uIrfBoWiE!fk7clnY&mPoH2NPMM~l%!I09p!A9RBTPy^aQeP{*!U<6Ep zWpE5qAewfdbLkE0p^e#c_J}1hKVF45;;ncE?q;{x7*>^e>1o=R2G9?16qZ9AG=f@C z20|bNn!qqv0DIsLq=1Rmr9L*hM;p z7N^f(E%b+)P#g>p0;Qn>l!Z3X6UM*>NQE-A7o9?PQN%j41?)M~SuF3sNAM|p0`J0W za1;N?CbDpLjgF=z>1S91t-&7($w!h&Y{W?nPz{E_JXi!LAQvpO9X(3jv<2J6Ft5VL z@^$@E|m1^<)J<{SA6K97&%U3nD0#6~lft)aE49S%SoR0KcpkV5jEJRm>FcOpm? z7!P|O83=7iXVX`-Bpc6evT)v>PvwjFX8teV!YA|JxRY&U4OlW=Kr7QbFc~UAGPy|B zl0{@G*+h<$yCj`(s0MxDAXuR?-9lA1lO?cvd;|Z?y2bUuRTuz@UK9kU>Y03Z}Ke8rC`a$pYgu@E{kP1Xgm5H#zGLJk`<&G zi6&0`6{r5ZZ^@)7Sx$Bnos5K!Fqo#%k?aD?V|Dp>zK37tr}@}T01#E|I zP(c16JqRa1@E!afKf@>Sdu$+0$O>X7qu>YhrA4$4JH~+j$|vxxd?TODyK=%;F@JWD zHl+!$3F<*ExlCq~o}?T>#D|k`4wgwx(u1rfcS&hj4;oCPZrYn&W`x(`)A&VxnQ!Kk zc`ED2KG5;B2$n!`xJNn=PIB=JdiVZ2S%DIDn|62iZfOkg~83 z!srTWU}M-_2D}Wf#EWsvpRw`G#J152^frtJL9UWzqz`FKB8Wl?aW>AzdDuW|kv3#1 z`9_+^7^#*YXG4EKwshKW; zOfrT9lH<57u7F+WDcXy!qXHCy|G@WgFj-D4upb7|;_L})$>aGQewVN3Q+Y>ToS$Qa zjiq-X5Y~~JBm+OhyKp0%k8Yz|C=sc+2R@DyaWI)rC|rh>v<>^rn)APTIxi=6mTF6~ zbe%`=IJSh|2OnudcH;^-6&*wa(IC_Vbwd--17ya7@C*Daxk}>TJItkxnSr0=kq-~GJz^lMaCw}DZlY^w22#)?@lF&&(@_x`i0$|a zSq3BNAXbxq;3K7HQjwG`?UhPMzw^J?P0DE;ib0_$6qQAd(FT-< zmg3Q57{t*(SPZ|*J4&ymV7a3FRvIat;P04DW9d*hL;T1d+#DyOg{TIKLPES3DZ(lY zXe?532L43e!7KWT?c~2oS0$I^l|D&RB`fdBk1{V6pp(Aj3m$}{@k_J;bwmLuOE6Rc zO+hb_5l_Kpa+9owiL@K5$P@WQ>9+J-dMGWCa`;&Ol?AfOv^k6*r*SEK6pcX*Q3>P~ z$s$WsKyy$Ms)`TdUWCF+*g;3I*8BvIkk(2krSsA>$;lh>{%j;22@gpvvKG70VpIY> z6>G(EaaU-f92$Zaqx)zBUP{)$b$XD^;KilgQj!!ZOY&8zg7gO;&3e!l@GF^$^Uy^! z2h~FovWbu4v+ze%PzSURMdMfa2>BZZP{JOw|9Ed{uXIN`B2AJUyfSae`q3SbKuVJ( zI1P111>%gDBYKJ{;(~CC7}OViK*#VQ@&XJ@-_Nl&rKyo9t?x*{EwMoWSZ<}=x9dI4S% zD{g}iqb^8AFU11!yZBRV7eaJIGf)niheOE?avCnuGi)kvEbWw5NkgPxr2;;Q-(aul zSGZ4p;1c)`lpxlM#zN>>`VZZscNY6a6xxCs;L;=(YSOB#Hn;MPl2s}v*OT8!AyQfH zp>NiBCZI8f>12lg4*L|q$^CNE7&65R*IMINH?W}Qg7)Z zzs+{j0Z@z7$HUP}u}HKMM7VW}kVRcFMVu1V(FN2Hb5b1o(A6xSPm=1&+vFW`CwYZ* zly7FkX$8=+6IDdhg;Rg5$LpK*4|)wTS8Nuigdf_A;_v_x59u_P|03l}1LVKt>hd<} z9e==1(bMn`>47JqcVe(;BPxg-Jx#aixq70Wst1cR;t;apL2#HpVM+X&G(b+1!;~z! zv)ozou^Cj53-~iCj^+uI*s536{qIp?vddfAV53CMdKq$T~{?mVGEj63(vhTdl|VLi1?tbt=4~1I{IP=oJ1) z%9L*@W7Q|>O7*#NMy?|L#>T*DToEPcCG}HURc*E})EDTRb0S6?dalg2(E+?r(&QB7tcna@)BlVGPK1)x~qeYZZL|G9px}#~>N}kct z{Gqf;J|Yj2pG!_&hAS){>XT0>UR>78>mIF~zELM)mUt%uP%LVW=AkOM6WIVRI*Tuo zu&l`cNRN3I`$GSPiKH*?j;4!m`WgM3-dx-ifyjb5$`%hqfmnj};T$rCzF;6dm8#1^ zS|r`)$JhY+mGr?W;+`I=AJzWSc4|~VqIVUV7>~}PP<#N-AyZ%*RrmmDhMXY3mFvo? zw1E-YkgP@l!lgCU9{aBOe7+6ZD*d5&g;wD^7?Js;2{fR6*?hiIsw;1n56Iu79lShS z2|8|$ChH!bN>yc?JXMl-e|m@5 zP?+egz4Ko2)bR}Q#CSXSK5D(iTZD)p32=+PVUf~raz7ufCa({96@C@{Vc32NZ{c&6JnGAwo=pHsf>aP$37^92>4DXcNQgybHgrj}hNpCF= za!+vWcFl8-^B&haij$}unF77(M>>lo@Zs`IrIvbH9j|UwBpLBnuo2f1?|sRhE$$yK zpX-SGrl*rHU5gXv5hg|;v^Z z;y1jJtcS65C|k~dNaK`b^{v5Y=w!I3oR$LFWJ1s?t*`f%`@Uz=_m=atcVBm%b4_uB_m%I0J`a^5 zf58vhkhhb@%Xbu;dc*L>5M{WbER(L$PuL(X`)Yefc^Y~8dcJvHcWIsd z@-Un}V&PH+*&)wT<|uy3uX3!kpY4Vg*dWSjcf2moDUa2&-@DzXX;;PXcs}U^_n;n) zV$--;o~<-ela#IU9e$baAe+z`{TD6P7w1j$^zwf8ozXj>0k{MC1**`yG?txb19^<} zL<0Gubc+{b^Pw)uKx;)MJxui04Yb$z$be z@&GBBMbVyQ4qBr>_ucUh_C|O!J%4+-c3U5eFj)*IX)E@a&F3?vUGhTZiPA^uDPQNu zXlLRQH?(5DQ13KPeNSsoF>gt2r^v%2p&f0;mhpws2Pspca&LLBJX=ne&hitq7ReU5 zT0LK&ceJOxXRzm@=a6@m_Cm;{J1xayrG3&@sl0qmo~k@n`Y1i*An7zqhIhEX@c6!X z#<)MbO1Q1=uHHu4X7L%Xf}1pnsgf?8mCGoblxNB@MaUbaW9%t>#|h%D_R2fhv&P-R zeZsxdWA|RsN}}DwOK`DZ z;A^1Aph|?$No+A+ES-~G%5^nKU9GNHs2so-feoG05Bc&v>)nT3E$?gN*)%sH0 zj4t5~Z18SJ|4y5QdGjn^~qYZ@+n zl{=`_3`-2F4BZX))k6;xIdBxEgxu`5x$taCd6sxpET~ z8&tzXb(`8reXD5l3F#JV0X@-Xt-SZR>xrYG!|dGc8sw?ytEB&nTES^{O)9By^^`iu zkY)%lo-=G#Q{)MJI8;Pav|#U7SE?h~-o&xp+0E_sxO{cQM@-p6X@N3BWrp>JP-7|M zdc!I;PB|ng>^!ck*YT#fWT$42aMW;8cUSK+?WG7I`)En&fxJtptlHG?hVI5^hSBOe zxg9?USI}n7=gDzZan^B+aoluXbtifo>Oat2xX(UHXO%F+8-vqu+fdcuuP%@m^I$p_ z=j!u(H9Z#BDMuSej5EijdYRTu_>pJS&3nl;lu~LfgWJ&1c*k%?b;y^v9kNlbR?552 zwZbvcZnYP89(5h{sHs%q+2oZt=-cCNt) zYWr?Ww6Abxy1)8bprbI3_mVFt>1vkYobh*4Thl<}EA_qHl{bO!VzY0t`=uk#R@t`K zcEtYHG2RvF{ixq1sq7cInL5lk()`>~&##YVw8^91l}>rclX`+9qS$7!d@ zJ>S#Bw?glPQ^3UzNE4Kf24>1IT{Z16UQyS|MxI6@1oh5x{%(I}yJ^4S{NB~3wZ zHq;M(;eX5Fs?l)9@X)Z+P}fjQttj_mHAtbp(L3A~ooK9e0N~*Vvodt2rvUR(i(zE^EWZ0(=g>usrF#vcWLR zIMH~?&|GaJKV@&pL-E|##8|`miBab(b>(|J zgc)HB>ZiT(Slmlp4c&)4eSI$Np2)^OpdahS3;6HSXQ`n)PA(x6>2LNOcHs)*xNoT^ z#=XS#(Y3{s<*O!Y;NGM;%%=W)o-|fAD9e>0%09Wjl*w9Cl>`dex6WP7rMQHvnr|V^(cN=MOGh@~l0ltr+-yoWC7F7dqK!m-#D_w4)J`kqx#oCp-Bq;3TG27X zec5+PbRdZ|O#;JTCf(f1^2w~58XM;+?^!)ks2}l$xbE4G7i}w|wg|@uS63fJDTwrG5QowT_?BaTEAGQ+p_IvTvvS8QCmy&{O!8q_|LxBKFHDARo}Z?_u-bTt(>A}7^|6An~#_d8+@{b zH-;%_hql*~<|K|$_L+{Yt`P5P?V(sgUbDk;2eqvs$cRn-O{0vGdX}$*DmYRc_04ck zb>!QE>@6LVYlx@4b_ornTcm2LpK+k+iFv=}thto&f?Sg^BJ==XJ@-h*0$YGB%Kn%0 zny0P)23KI`r2R^ap@s2>(Q0gH9HZWnGHFGUAg*eYz2WX+PP3!3V}rA^g0qZ+maM>nL)M)sCRqkjeVU-_=LP1Ew{m zSkqYJdbOvt6rxajE!%U#wbxPJ{>*mEp6=Z3nXk=6Ye4XcYJJl~a|=td`L5}(VXSy85)<(%1Wm#>?M z#9v5NW|exYnTB1)2gWtV(S~d}j{Sp8dR1?t>#Jj?J>B-u?(edAOX@XnHCn`5C_N16 z#+RlPlWdx5D3rUh*7%q<*K^sq)IQkeuthp6c$#T|F!>G!ep#Mv=xe%R+G#|F99iO5 z$rCYD>*4L=9`7vgSmtQwdhXe)%|h46L3)nYR8|O)K4~s%9%wwEgz->PPygh3;2dfnYkO>aZjW#h z_ZjbOaTvNw6V*1R6_zo6+bl;+Z`2i13d}*@wB6nr?ibE0j=vnmo!QPvcVq8X{S;}( zgOp;1L&nFZ-^_1KFAW3aL3AA&rTy^Sb5(U7bDVMXa(Z0nyfGq$^yPJwGKN^=O5;T1 z9Ybw(m(+nSL(Q}#PZf8X^G|0r*BAG6?+IUyRtn9BJl;p~s*{Y5Ot(zAhA73s7Ln3I z^GJjrLFWTFx)7j^37HKa`Q0C^OZuhE>LB z(*j-No1SY%g_Rcg(aW+jE>dJUg`;=rmN}vRqAZD5q7~5UyrRwb%+W1?A}b zwJ6_F&n9%B$Ej85qZQ6(Lvl0Ur;{Aqzy*+4Q>JcRHX-?Bpf15i4&X1 zAQC_po_LPnD-Bo?N?cz8%2<1lQ*O>rTrgZxnf z%E7CN393K{WReSHJ*h*sU=6)N8j8WC@fN&}T!Dr3SGox1lc{(I`VFl`MaYf%q0gcX zT8Y<_8gK^k;TbG}^>7Eq!7|bhmq+!)S=}gFqs@2)@scPAhFB;KugMVd9)Cjqs2w_r z*OOi(2Nx$ck`EH?0EbCcvJ!7VL&Xr?p{>yYeaBni8Xd~Mu#!B4H)R*$1D4P+Jzl%y z8}BRdwb!?!mQb7ZJa4>1^p*H`x|H{nPbyv1 zJIWlX9_4s|-qJVU^Sir}JH*q_r;5g82b(BQP#+s2jGNS6(r{QQ!hCV=c&Ekr$mw&h z)BeHtS*~I;rkMgv?G10_qwGK2Kud7VvIp7nZ8Mx}JhI-FRF@JB{+4jRy_PQKd4?2j zLq9xTyJ9sLtuOju?dAaQHyon$GjH>s6Zk%GQb34hloCg7dGf6Jd8KnI=V*C{tVQm2 zI9E=z{0NE;^@XGbIs7u!a3N zm;6Vl)$md0{QUEo(dnHtrswP~Qa#1smT^XqU)Y1tX~FFR-kYXK2gFe4*!;_xH8PfE z)ydDb_3jSmC<3@I5l zBXo0Mvhg;}_13Z`W;aOBPOX>mI;Wl0;5*1``gads6#Y+hQFvHjCv_3J>R6LIC9Oj; zOU=lvSMb{T2kvKd1fPqX5WO<8UdTRkHFnmsxxkdsH~CTW?DV7AnFYh$b6D4a3y}%M z-xV(%6&AeTkbvIV?_^g=u_gp0HA!ofQ^EE^|I@HEq$sL&abxick?jLJ$vNKt3jR&+ znOObD$HcIV{|e@KDzHv|bt49rm>%Pdt{U3ITm?oru4Q#kj!bBsAg3J3V%9ajJyKL) zTvXYZS~2^h?gXt<@98ItPzFgPKUmV|^y7KQ91?DCIv4gw@wFvhN4r8L%L3T%9G`nW z^>v~>@ombZ%*evM-lg)3z&a6iqIO2DjI0$>+_*t3vewAzm6Dg(E?Ldko43Z{61SDV z17gEZMLm!53m@n|T)OY;Qq(i^NpgD9>eOagvkI2E-VoC9-erOr;Wq!iE0&C9m-_mrU~OHRn`2q`KrA|d#zp-8_| z6qh+Z*^^i^wNW-I9PH?$_ffooRU?Cn)r@`>R^T_D{cujsew_5-$DE|M85{B|+7rEr z%gx^(1*pr+~<-{Sm{sZ$cZB`ioCmEEgwfh(BQG0g}W9(gq?HL@^txn(O1 zbv(?9PPQi8N*l9o?@$%6_@fVxn;)Tyf~}dq3UU}B`_^)Q$(2vHMEK4Ed1k$ z%^H_D^t&gqdsY+cAD#$YQaR)QHq;ogBElCQ96V8Z;~tsaA}RjIprj5Nhx2CI;=PTS zYWX#|YFJ_TmWaNgV@*wTHGfFTqJ(QnO*5oC)f(i!gFhHTf+mNRiwKG+5qi`z3Le@v zW*koJpWsXGm{q%Qt4qS~m6`tMLxzMu3LhLg(7(16;i;D^rN{|IiCZ!P3r0IeX>0f; zONo#M;S0lihwcj)psMH7n(?h=ob~UcRA8p4n z6Oz}bjLZzn-)8OYnk^!fGyZ>t{1>`8#{Q&=V_R11Tw4 ze3{@(yO@8)xmjP#JjU{Y*}>m}zXy#8a2Q-@h)v4smNGB7fBLPw5soIl*SNJj!8|VD zTwvqC>;9iiL)jyDQQqzJ8L2@Tb@NWxpZj(bjUP1}_S+Y@H?XY#592G=$9pN?n}$=i zq=}rDwxPZlXsJv!ck{0kkmi5NZ})t2@s=b|mhw-?vtQEH5-zU8>z zzy7x^SCmKSgu^c{D05{7%Q;_|<{YIx!hyV`A=0lxVE4dTeuvdzq?vnU!RE|C>2I=F z(VyiTwGFV!q;}rt;7d9n>)Rzre|U z+3GZM#_7$WX_r!VXI#i{=3J!9JlFWm|6*WJ;2VFiw2`~&ezul5{WGd$)XP3x_|DxO z_mYkqXZv3Y)chZs7AXtqN8c^$h@9^kBr7ZLmHnHq6RcMTS*8ZG@gHxJ)HPCb*ykN$ z)pOhB49_Kn=N?JUCck81hV2h`f_5DLU=P(8%P;=#EkD!~ zp!(wNT?>2X*C@DaJ?q+~4Z$9`$UCYf%>@=>?k;aeVea$R&jsrXx)pu4U-H}%t*A@- zrY0EMn_d~xBFAL<%~@_c8(>%0bX~v+me=|oFc$_En z4YalzXPFvUBV=Akt$_P-M_;vqtLc|hs-+*v-EIHkyGqu`CoI2(Si=%Sw);O+&Wa*i zVfOd55oyh``V=O*2N9-hHeL1e2DA6i&!Hk$>HK z&XuXHBe(ckL%wCRep3d8yf2rt)BgeY{XG+;7ga0AFSo2`@06pV- zV%w5GEAMN;9a}^9ay^{JC}mC8E$jU*m~Sfok$avk)(d$_IqUNpScBbz1@Jn?Fn@1g z@1Su1&T4)9$XTx7Vb+w4-B~RPHadr)DD`^4t4FOwCAj74=%i%*K{tS*YViM(gn#VFyQ#WVW@`^bhi2(VDrA)}Q@L^#m0){9S(aFwp z_okOlub0!)*4`&bHN|YH9oQ_WN?_-`QZh!^{Vr{b{Y1|!m!A+*L24itTtdtdR13u(Zhmah5fA;9i@B) z~M_nT%s#52WBSKFeX zy!4#cc@?Y+-E;7J#o>25I5spcsK9uWTyyyf(z5Sm-p=ZlzsWH~U(b#imjqS{+ZZ-C zsL*I5tDMzxU1@)$mCGu~f980kkCn15ddP){CE;rW3zQ>Tm%{XnUTIx23UUqH>X|fiM9%2KJ6phHu$d+<< z=ijqxZZEc|?fs?%MTI;LOfj~DVea;YGjbYdzsboj7~|OCOM)|o=zx~N7lQo#x2P@g zC&#zEZrLBRpXa%YI=WiwR(jjGH!wM5cCcnCkecelZD(?JXXIu?=Q^y4FNz*8R0!A` z(lYdUz;RWeFlSC)_bgjx?c9k)f4NGFU-$ykw!pC=n}Z5W0I%OP#-`iW}j>xQ@RV{Cz)!+S}I47C>W`ukUD-%-1 z{En)3}==hFQ$cjrBD91)+T7)zhvjIhYio0gL-$@`0SXb#U*vLf>Y((cO|H1xaWT{q+3{-;9S!JTHDjBV0T8()TH#^^KRIG)sC@HOM_4mF*GdG(wvp` zDn%8u&!%_EXq~&)Hp$nV{%M>QbUpl^@U?;cLqyy=j@~^uh$v(r%ps|t1qFaZTuw>&gwzHXK zQa&VyWfbI{b(9y~Ul8wF&DKwI{M= z@NV_6KGu3CYftLL6npx-{CBQQd|jFDcP;o{Xs_Up=Hl#`+n3)iYfwg+%-K1%qHy0J ze$=uw_>a(2!C`*>lInY2*fV=mrZdZs=PjD+iKW<_5>!8QLhvZdMJ9RQ6&}p~oKZfr zRPHNVef>3$F%{-g>HtlBiB5Sg*IX`1=9eglsPH12MbScf} zE?k{iH7zgwbIw8QS#MqX-PkGUL0FIQ--0I?Bam#}kTE_vCwWaq?Sl92=b)MrgL*|= zirf=Q%=gd;Yq`w6$t#jRriJDAaPNV~#;D*ekr`2chZY*G;<&Y9R{0cTQooeu+1T-t zJT|*Se~+#ZEkceO8=zEcpDcSycuKkS;<>5zo9MP7E_h31iKx>ds;MNZQnV|5a&m0y zpscqAiYpAK8ESuSNS?1`IlaZQ}yfe*`x7sxtJjR(p_OSio zI{g$#eBf4O|=MYP`JPn-`Sv|a*|9@|*8n3Tc zVgd(*AB%V&vfpeYpB+_mSEM~m-kCZgr_gbXR5vvW{yqG9*xrCb34HFth-^dpg-vmN$3B8w4LJu7R zp@d#TFQJ9rdq+AVAc9@6prY{GumN^NL1~H&v7m_3d+3mI|20Qf77BUEy>n;I*?XUT z-kT{|tmwOWC-cjVniqaJ{rKq?=cZm>a;vO+Hdlw3rN!G7Pl%qGBWGrv>+ZtT)0a-g zoc|+jd&V2tBJ#Z)bGYc-!nN~0qARzLT&{dB?ev#t_g>y{dj+L(mya%4^pzsd6zrd4 zM&`k^dgn)+9&~2@#e+8nWPX%wY`(dLa~3-ny&%_>aOJI;mmfd-+v#KHPoyN4+!0H^+ z!^5|9rS$ni=XPC8xp5_9SLBbmM-+TNW>fTMc~%C`-W!qj<%Rdo+&lB#r4Md9eU^KF zbkCyK3y;k|I$Ot#>o=}l`uObQXZBvmdE@KMAV+e+-->)xQcKKd($H#|H!+kaDigkV!Gv87!JNQ=t|^;2hNT?cj3yyd#^=|&D%9bMe7&-KHtNU zIqna?cK&?fGlx$WyIuGy?UVc82jApw6P>eYRN>^j z8NrM9Dx@{J*z#QJ`Kwoo-#Hvsj#`}W!{}2nCkhnHQ90|;n_L-oVcdoAO5@wlWp<5t zJLmHJ1*0PiEy~?c^X?43I`3kROYzr6-s*Ed(Ou7;mUl|Q{008bRXTER=GI$VulBjT z;Od5(Iqp9nmdjQ@_tAX+%lC4wI}y)ke0$^S<+m>HPRnu`T)%TG z^X}J~B_kK)zMSv5yl>{b5n0cDdvEuR0#~2BygcoTdok*e{cetzaz*D}n)67u4``He z{dUe9ZPEr`Z+yEcAT9KvQYw4fdDRHaD&BR-^?!KN8qubfm|ZAf5^RScN6Y6%xprd zh<1^qA~Pc@2XBO(GGfv*(#vEfWj>zSF8rN)!HkI5pantrLPqKI@9+PdemXP8#pwAU zcf{$Sd{CZ`vvy=0zrXul?fb(r28I!;6j3qq8#!N@7=wB_vXF9>7Qq2y7m!sv-QpXOST%3^))r?%KhngKfiPQ zZlUx`nKeldjzw9?Gbh{?q*f>9JW^?zXlDjf0YEN&yN}-VM*noB4glhnZPf*+1*=Nm9rwVW@OC_hq~9@LU$#c6h0c>3wyfLE-&ZZM{c_7>}tCY!~Wrj z@Y!&8n8PKwt!@;f$>$!-YL%55E_PqJkKHEscbGej4D-6z8Kj^1!2K^gll5oT(eO+6 zwR<;=&$^WPP}rCw3}%;m)#c(fw>j(>mUM;4&ekwCt9w>fxPT{l&y{t9Tp3b%!VL{C zXPwI0p0zfsM!3WsptBxjM!P(2bJ#LGp7mnZPg!YM&BOezD=FG1r>EVIVITLt zI}k=@ZOm*DUT_U5LKVi-j_>S~7vtS$;Wt_5GLtjcWgg8s<7NfrBEOAzN)c{nR#b=^ z;+BU^vNmNVWPKgBpo{iuv(EC3dpi6*YhPAExFh^6d_UYAz8ogHt+-%kFf52rD>pSO zF*7yugUnAen`V6#o?%4LK6pzn>k)0{Xqc3BKXYH!%CJ?qEh`ASyYoD#dA#Im(nine zYx1}*S^YCV%xoEMbEjPgSI@O$j+Uw+cf&hje^5jS+ZnL``ZVKmzJ;T)Sldz@RT;G!X;6T_O4#|WY+1dk>TC&9rr&TQSacjpl^_0Ro%6$jI1u<^zfJPVOO7* z*~J&^XDTI$qzbV-;Ue4wSD9<>RyZh>E6u}<=3Un4S7p$tlS zHgg48z*`((G>Pu(aEE)J)vR@~?su2T8s*SsH`;yfs$=K9Hz&Ln zw&x@R`NS=954cS(j<0x<5+rh)qUyqjZod0DJd(9AtAM+p=OSuEyrZ?u;aM)b55tJC zNw_b(8TN5qDX&o)thFi{Gzh-qNO&!)X!vCKSJ=VLp`Ok&fqlH9E2^dLY;%*{d^gk8 zbE#qWu$23dwOXKN`d$ZuuY)UW3lC%^hQEZBTzB`lyY1GpRBeMFwSqNnlS^ek^XbJd z%4j@k;mNE$Sx3VGY|!lBui$X-lS=S(cr~j*SloT$0_G8`S*oHqCcE$4NnX(?_2EnR zmdkKGsLYFQs9WatxU#&3Bo$CUJ*+g|ao>f)Mon1Ymb$OqgYHuJSy;#AB0+J%*x;x>rvWLfVu6Tsv3FCA*Dok(=VabVI1GJ8BtRR5cCYihIp1c5k?5yu(;t zb@SYCI%<$UWe&elO?C7ORaxLBxUXGJy3v*K9ASXwD7Tg{iidcBMiikR?~%qay77%$ z;a+kbxlMib)8qP9>$H&UwlWQ_aL zRaD{NgmUOK#dMXj^m2XNDc71fLYI%t)X;cs&v$F z9S-1k_qoGd2JsA!kdyD+T{oU6^;Q>s#vYdzmUFqOp+B`lwRN0n9CUqMe>cyaa6Q;h zlBTJ;t`MPLX~IG`%gwz(7TB@(nq{Z&@!q!Fc~bl^Ex&*gEA+(viBrI1}O>Zlg0lSXKxR_Y%%xRGJY zu#f9TZ_-^4>ga}2gONd+>ZlXTTtipc?F-k3$?g^xHAnl&CxS&me6UCx+3dax8-@wt z#W04}Y8`A3ItTMqNcnYuB;IyST}yY|J;!Z+<9YTIt(vN$7V4@Zn#5DCmh0tya$|X& z^Q=_qU{Nq2ct%Tj+7)+a!}Z~-;bM1+AJr{5610yf7|}Awr&I1!SUqeRmT_6`A<`J6 zzce6N7Yq*WD_PBma`9oUu#js=LABF(T~XbjK~OdLRJF97L_T&k-JbA3_=wxigNhG6 z4b}w&Q&m(i(}=@vh->aXbjzuwRr*MW^}R;vOGeV0wH#wNbD7RlEM*Q4@FDfIQ;|X5 z;4vK|F9Tg#Sjau&W-wQ?f`j%nx%3>xnC^PIXm%5!PFkZ$%BQ(hpewKPK0C>)wfar# zbesVsl1y!;Q9^rkP{Wi{TWQQ$x6K`N&4^a%;KAU&s%a$)_>CxSC!S&~6m>BI* zp5SBURVsCPo+8Svy*$TU7I1(TTB`2Ksb<=sElN>w{lzAlbIrvug;FF@LB~}uC=uM# z5lz&0Ok_UWNa3bC;^Mf?lloj6wMb{wCiqM*bJ5*&6Dg-B)K_nki&Jg_lT;%Z8{`V+ ztDwGQ2k%mkT`niPh*d3B($i`mBnK~QKW!;VU$%0I+mzEp%~Ug;WDnmEr2_hnlQdI` z%IXLoaFN2Qu2FhTGxa5d`HbTFlBPVxX2l18sH)y(KY3M0RdtA2jAl1^R9Qt-L-Vy; z?`xI%SRM|c90?5MLuzZM|14|phbAh}a`FN7*~)PJs!udeofM}i9cL%6@CK-nq%U}i z69jj_#~(lkt-rOXsj9} zxkKT#aE$xKt)iFWf`dU;us7%&{Gm>ImyV>nt@b%nv73gPt6Q28JRiIebPe8622EM$ zYPtpPPuGF-bkwt|9c&9;333G8^*;S+MF)B@h_>`&8x^!l4{NG6>w+$5r>f~W>H}q& z!Sih3719~5&3aYSHCs<;obu@zYSVy6xJYG1=@^Geqlg-5nzrc`Rn+s0U?{J0opNfg zcFL>wc#v)Ee{q*I+l%f3xl~*sdF2_Tl++ z^LkVxRbQw0jE7mvc0T4y(y6Jzny%?eP*W9C4rP(Sb$(<&Z}BFVX`>W-U)ospRRYPYoIpkxb7-< zuvZIIOJB2?@eE=EXQ-%Y+M>vyS1=-I6QpUNj?A?ot4pvv*c2=cqJxKZ zmq}Ei5XEWBW+L>AB7=d!oS<)z7+lw6-DC@Ws6Y&H%;X*~sa~)#crTa|E5gBXrR_ zI;q=Avz-9PD@LD@L?UxJK(vPFN&TfNLA4-Xa8~bYux_w~>J%e^Hz}c~l`ZHQJQX}0 z#0J}xpfBi!-$AlD+bE_b${BPI<^*el(Ltt`2(6_SSKWPAp2bwvF*OdJ3f>Hs2Q7oc zDyS*s=d!EJ2i&Ksrt6q)DI&-p+|_YyP@I0{6`tf#_8_&?N?la$pjl8S_(n~2lXqCa z9A4ojNqRvyl%=b>p!YOXRpfM-H+YvniBvU>&|CUZg@QEg(^@sr-@M6-?Bfqgs)xpC zwzlbzF6gFSQAb=`9`9J36ROHCNr$P}lgAANZa#p3k}86D;&p5uRL0qGsq_ozPc$NlR2m8GOMO zz91yGYA8tqHCm%JLY-7qg%zbh`ISc{)l>;e)=Ujj9p%vp-r)%8lu{R^Xo{w3isq?@ zO6elIc!jrlkE`_31A1I9SgsFKeMRUmK4BZ%_}b86oHlE}4r+x4sI)HfJ0G!&9qi;f zwKYns^n{+*DkUkma_SgIILeRQr>4efomOeJrmLRrbA1kuS@qX4t<+N6nu<}B@++GPC`RQh z;$~@_2H7sCiE60Ys-Y^Xs``poBiqd-yP{P@Jv2ejXsJ@vT(wk3jTNV=s-^m>ry43_ z@!3~Pv`&v`twySuqIAY$|9Ac*BvF&JTCeF%y{vUgRaF&KCV%h&pL3Z&wY5TT=ylt% zbAfuPtp4FPQOYEz%BrxE^|9U26K&HA8mnrG(p_$F zpS+4zEltpBZPBw@ty$`+@+zRK{KK!@B3|7!UoYx)ZPhEAb&XMTl~fL8l3OK} zpjmoIZ)lIUYJnb52j!D=i!`#Sl@=Nve5tK^$T+-{vMWOOI8SkPR4>i3-B6#>DlITQ z5ht&KODUwd`fIp`Yr2+bo<`Z;uA|gP4HcsjDywE1tdSa|u^Otj>a5mER1?)vZM9by zC2OcgX_$s8S#{J*9W+2m>ZIQ4XfrWU<1|ve)lx-NSqbW@PU@t7O4U>i(ZzgXs~&2jB8pN$`Pq+G9aU6w4bwEGs<*nU zzKSV>qa3HW?V;O7!!<&E)lSt^PSQEj@OudtQCZcrXC9;}YNHsHR4&~jP_$xIKz{9t zDO%-KL6ucq5z4Pvl~Yyq&~SBE3sqJwUE@6IL@Gk%Rm(eIw#K8>LY`E-|W_?+MQi=U9<)Ls*`LQ~XV zP1RVXbd_WL&d(g?ESXeMe@)bIwNVM(<6A!DectCQZcgorQ7t7aK`qro%@v_@?BO8aa)|HvgDVtMb=6R! zD#}U9rZXJj1R(_tfvT#SqLs}u`%iZ85l1=4Z7!2r_0&jl%B`zhW-mMVfnWH8K)IDq z@oKJkZYcuCyzoW_?Dmf zj#Fe;Zk13al~)5*R33}Pe>lZi{wB+N*(z_>`*#oL-1Zcga4Mkc>ZxvOqeR=|>IA>C zk3H<=6zLRJ19i}FjaCoUR#~O-k+IlE?BO^$HAtx%qjl=5JaYP*y?n|$93+p*tA$1= zRSPszNh+kP95$Ev4B1shjV!YIsFPZ$hDs?Nk6qWfOh}x%tE0whtU9Z@3hElyIms{F zCYK7Up?YYt)@h}>sfvp08YlRfzsRA+>ZI06)Nmg(TbN-q^_}_ zW89;lJm2Z>F*R%K;zoizR-N+Ho|qy$w}EA>)0 z6;XB-QaZnL9H(NcsWxh=_G+OL%BBeU9m_8pZe&vxbyQm=skQp3fy(GU*Engf-=vIc ztF^i-MXl9XMRb|-T;^MT<1oj_t759HR;E~!6r&3q=X(yZmm?HV6*W``wN3tZKt_>ic=kRH12Ap>dK|-_3d%>Z+(BidH)RaDppH`BhH!R9n@IF`^9{&+-?S48sblo{E{SDqsrYPdt+On9i#l zrhf`6k8xWjC;6HK{BG4-In&g!DyRbHuV!$Q6CCFsZkRJwM;%l{g;dGb_*eGuIXl?S z1rW-w+A66SN!R(oX7x)x;Vb;z)3`-8UE=~LIl&S3bC^AR$giB{CXtF#ZWUI9{C#2=jH3YWOg6>gJ3 z2Iu&TZ#d5t(zwSZE^r<{lArmN3tZ-VzGfc>_?T}w!7(o3@%a*e+gJ{BniHJiE~oj4 zOPu652RY1-yvN)2^(hB9Vfzza=XcI?mYwY49d`0Le{hrwcG7^ax-N2tJ-oqN=3jiw zFSgtNZH{w^+{)lC8SG{chxmkj?Bi#S^E;Qg!zGK)qa0*EKXQaUe8TtqVy6aN<2G5G z<~Ucl&k2j2iyXBl`FHHcxX4}3aUYNN>D=WC$M}xlImSO+;varD56SPbc$s^A$3cGL zIDc5Q-Qo)AT;v*A1oD{vEl0V|VZP@wH*tzk7A2L*Sx#DY>aXl)@g})V0sETsqTOdV z`|YfQvxGz`n@~30vq~n& zvbf8i?B^icIK*KN^Cy=`BT_k(OIcjy1i$fzVeZd{WM?_W8A3ecALS2@Sw{WDe*Uod z@(7YcSNVf)Im|zHbze1p$pL=gG`Bg%U!1Y{_CMp--0O`~+_h)F#98y1{x*#Joa1=B zJ8cnqiJwis{dEk0O8dpZSr0Y+Zdd@fU~rfkPbPa}M$wd-<9p zc7>yS%XfUsxAyuc#sNR`7039SU-*qv9OYAX@P#qYHyq&y4sgsg+qZniJC;$O^ESKq zfOpx;_w42y%js|IKA-SDJJ?~*`XRg7%iHW^H}CQhNBD@te93pFJKp6GU+|UbmP35T zEO*}(sJ zf~VQW8|>muw(tVa@f@3ZoE5BME-Q@5{cE4|CJ*xpudMMDQO>E$4*6}RQ+HY-QF>85@ZRVD3WF?E3#XMHA%6@7gQ&_=+Ji#+O z#uKby9?O`=OjfdxrL5yA*0PZoS;agSv4WY*;31Z>h=*Ch1|DZEOL&Y`%w!rP7{C~2 z@i-e;Y$Kb=0_HQFam;2K^I6DR9^oaPWE;=0o+Z{%7|KW{+KDThdDmw0DONF=g)Czf z!P>*6h%Xyf|%wsL{8OB0V>Bk_3 zGu2LhS;A@-v66>b&H~0Wj0sF5V*~^=D&&PPd zaOq7x;0r$B9p2fm>dNzhN3R|Hk5@U!SEfpQ=g_0% zm+avkHuF4h@g=?kIzO9>|sTX*Lcleh5>|`6e*w067vdG-Y7B=t*b1Yw9WE0P@nk{T+C(pBzN7=|U7O>iI)??v|hF>ok zu0O|G9^x^cV>ORhmifGRlIK{?8dfmX&Tv}Ia#r#p&+`atEo0X65D&ASXLy`-EaC~) z@+6P5)R1!)Yj}_iJi)^(V4mTvN9k3p=P_3BFpsjFIV@!flbFszyZa0lvXaF%9*@fY zXC_;ok7lW5;KQtA4(r*-8Xjc>%XyS#mR&wim$8(|%wPqt*|BSHxGni4NFp`1vrVnjMVK_tR%NT|-p3(HCH>nI@ASw1+sf=MR(@17AbD7IL zrZJC+^k+2F7{qAiFqxUmvN-VUJ>KSRI{g^J92PU56eci_;dEpmBN)v>hBMII{Lu_! zCSw?HSN8t?0;Vw9SZ@}C7{@eH=)rK~p^1!VhB4hF9$+fNm}2}rgIRQ8D6@Hx2k`HJ zUC3OfGLz}dW;qiW$0Qaqhv7_O21A+2gUn?P3z)EEQA{&SAlzFD|`eG!Ljb%qM#ZFaQ$!ebBA-lp1rZSs{Ob2*P;F)#_qZ11xUF zF^W-)wKy2VD26hT;q;*w6Isea1~JVPiO=onOkft%n8HF+Wy?%0c}=*$=4LF@Y{r%_ zhiNQhCSzH_N+#LsQyIZ5({bZjzzkD80~yCyd+IrM%G_$ETMSHOE)Out6oXecejX<= z-sW{S6PUmhrZLv$)}Ktbjt7{=N|rE_5saljgP6(`hBJ;ithH4cO)7(#K!2Lkk*SQe zjGW9m7BZRHra>l?N?&@@ffN=nlG)6+KVEB%rayfcKtG1jpON$-m2nJUG*cMBNcu5~ zK@4FO6K##AG2Uj^=j{km=+7v|F^gF|$Q-6Jixg6sz({&p26d$yqfE0-wppIc3Z~f| zhSHCT%&>Jzu}qpsPX;oEN%SFwag3%L6Pe0*MjF}-q!(iuz##h2pTUf_wfE1noDu(h zuNCd+Nl%jKL2rAu9`>CS+R}@@bfz;&3?_xKh6`QjYyrt~D0j#Q-? z&55HLb?HhoD$QRS!b~a)>t?5A zo#{$~t(m`bce;>FcjF}=KPe>AiQb0FgXqj)deg}wtcOKWAA8L+mXAk|YD4hvPE2JM z!|BNcrdiw%V-#cPMk)j8!*Kh*XG?$XrH^W#Q~s5qBr}*PbfcNEYbV;!nvM)-D8uPy zG0~JZ^r8s~3^MLcp%-IV%vgHTodl8@%OFyCz*xrfi$|J%3^qI&##pQT<}i=>q%w># zhMK92perK{Av~iEXA}#VX<0v)kv6Ki#!^17=dg?g3@4c}45P2rMiUsqG#+3!BN)jj zrZa-cj4`a9&1ky+r<$hOX`rL%${4yZn5nd94C|S0Nbi|y4)d8zR|YYbJ|vN9<6KG~ zdNQ3k3^heH-f+>^u^yHD&kkiYDOQ{M>ds@+cqY=1WF|3-vG(i}Z7qGJe^CmH$8HRAa4jlR)_e`|an9dX?8;VY0g57mEWBy~vf4Oro{g_67 z1~80%q}aQ_{7)=kl%bl}6vG+J2!=3>!8X1ThO#3_HKg>)Y7~9w!$4cN$)+%gbAdY)*8zw z`qRzym1oO=45d3AO}qIMUOUm3k#wgyZRuk9>oeG+Nm~Zciw<_xWcrdy5?vWcd)hIK zPIRK5;kxIhWCqcL4kXdhGPpPG>1Iech}LwV6OHL)-|0zf`p}owc9$kJrGc@4$Bqtk zw7>VGm0^ZQc+UYXX^(%GVsm@77s+&^6Nxk+f!6f1vub| z8&7TOQH$EfLG?+dxv@r)VSfX<{D-6-yKB>!Ms}U{wEXY+Jp0t51xYldGo9=mk(~^w zThfNkw4gq%=tz6|(U)HIp|PFH+m_a}pdO8ki|W#Z=EkW_NhHB$$6uuZ?deP%TAI4| zoaOPh9_?vQ6RMIxQ*(FXsX}8~P=h2|(}pgzqOGlDH|o)rp$w%PJ?Kww8q$)^_NS-) zZa?}nkW`zcBnC2=WLvQghO+)Q2GW-lLwBzWTQSh0s~tV8qVQPV#a``2f0C_+8N>*N z(cN(0&w4AXHM&v9st6yeJ~}(nfu6LZz5TXVQ&X&d@QP(5-AJG}DK@^TRwoQF)jF6V zR;_fWFGDO(CR;vDWfH?IgZ=ltUh;KQe`c6U_chE+#?zO+3?P+0#ui@nj%NhRSYlq8 z_XT}UjAsnfnQn^Q=cCulsVp@m=Uu8{q%zged^8hTZg}H)$m`4Lrtqhm|LC>gR2DMM z?))!;cntTo@6)8^{ic^3rmzVNXp#(9+5KSS9 zkc)yi9J$F(nu8d!aoaf}C{9r_T|uIOe3T{2~_qV&{Zo6CVl)LP%+TTvP zyY99-sWVdk^;kLW$0&X}cNM6$2U3bfsAeujMhIOLj!Y*q+#Q#lfIIGr3tg7G=R%j0yf#b4C_@a_ z96)aJQiQVPp)^$}O;L&=TMr>BP?p>jp%^77Lw>Ro0c5x$r6Sd+PYbG2lZM1n$9StYO-!G+GR5D3)-M_lGF8@~a-sc!$eGBhucwfjP@Kolqj`^mD))^XkZ*ZpdAl9$gA+t^kI-GwG^fp7EfV@am-BS zGM~jZo>i>0yZPRO_f34?YCR9Kz?{-YdBpk_o-4dpG?67d#4PJoEwKLAEatP$x?#(# zE9Lt~zQ?nWjjU!iQ<%TGTikYD(@!tWf;8;(TAER>AAtXp*`r%kpFbLuQ$4zhuPBSkSDl_a zyz9`5jQkAbrbBC)FOt*HE852B zk+HtvY;j6cifHmuk!Z4$hoY3G423C6eHsxdkuqebnDImz$`MUYa*-cVk_x1|be9LuF2Y|qg2H%S{1@Ac5lt~7 zfm{@&488AIvy%_MKZ92rmF$yj zSW6r<^faRq`RqQkTlMx)mr*2~#&kC{F`wQkf>yp&Zp| zL9EqBO|3F$L>zInwTP=rZHp`)|Gw6$Z@ypq|J);A8+wP#XRgnj3N)p*WltGXXWkj~ zl~}UnMhEIqikieyn@+T#7ID<2De+XNKJ6(_Idke7(3p7h<9zg2p*gkf^S=J?|1z|X zLeJ;%RHYcPRH8bKjZf>)#>U_))aF((Hli5`w4;^Pwl%40^^3o&uYbMc*P43NH^SrTTF}6rw-HsSMHwnkp5m0X(Nv?lIg7=pL>Xc!Np>nwl|n>O z$Np7{s+J#7ME|$8KF)mp)Uf=jNJYvLO-WN29$BI(ODzgh+}yqz6tSo%PBg_SMop?v zgaT9`JNYR=Eak~zxlo2UL!mh8P}efNf#safSFdsWY9bOn%T??u-V-fPDQZxT3KqplcJ^$nslXEdWy`<+FJ>rPi&&~sz~;$kOIZq0 zlo$#l3Q&oflp;4(s76^zQJ0#AcO|GvB}!7(>IR>E#VJ88su5utu^4fND1K#gQG|Hv zQ^r=LBC!_9rKo5*+&(UfO(no*yMRHY5|sX=+u!QMso+~Dh#Y8E3t zo=Or;4#T;;WTUL*ekrO`frd7EKQh1K{wh`Mt0B==(ZrI?BC9-A%`x$DR*FJYqCVv* zX&hCayyP;Di=!6h$WJAj7>auo@UBK#s?ZF-i+xSvZB*Xl_s?0*Jo)$Ns$K2FBCP4FelfnFe&H9@S_@XX=^j_pdMH$DTxI z+LJ&tT9QCRdYGzDwpzfuF}|BS#Cm|f-{oC2U*UUSt2Lbry}f_a*7{u?XlEM9_j>!& zkDk`2^4_&~CR&<<@4MQ*FPy?CdefQ#<|}tJ73p2e3DzeYW*&&|n029_Ie7i7qwVVw z?+E&yb3eM650z|{iSJr>x86c8Q+bKz2zUkQ@79yCre}SB*n6km6Z}`rc~{W8Z|%&% zYH5C=??Mfvwe_Al8qT-1?u+jM`Oh)?J9~B9#gwVnfSu?{Tl4sm4F$Y&>bo#qsYz1? zn2XlgK4tDZLmkZN>Of=bOn5KVt4QC|@ZFRCw6yVfr>~jyZM+}h{Zp?-JD7%RODppj zYtY=fCGm8oi)rS@G`CgiXjPo=OtrHe1lpPEO{5krt$W|to-&zMv@pN6Ii0KyY-{}G z`yVZ7OB)jD`=1-z-rS9b7M<}lr@QID_NJp-(8GFqzH`>V`bmu~q8pH8nA?KtG_VZx z$XbyYWQ9Z9d${k*iM6%Fa| zU$iIEf`-NdUK!M;8F5sn4QyO39_=a`|JR}c z@l-Ml@p{IifOl1VS1*oO^Mk#@ElxIS(!ly;-VySASJBi^9ja1v0s(!^1P+Qu(lb$Hh$uRVcZ zL(ihMsc7@!@xO|x8DCRXq&UUx-<~17|K>GA6LVN%4Hf-*`i_8)rn)3h$FSOWBz!;B zYY5NH|7tk@DOArgUT1bQ6mCQft3E5!kk+PLd_Crso6qrhtHQjJ^{U15Ml$-;+q7 z8U=`^4ef2de9ylwWhqWA;~B4BJf8i(r}F@>y1v)=_fxf^UM*^`*1B+9+uKSlxY5c* zSuzA<$lk~bdxVjM00{&_AcQ1r0)YfF2qT0MR+utm7!^S*R$E7(wm$9cy1lpRecm^D z`s6vuIXUP2&+q^H|9;>3zVFcp9^)47rzh-1*d9 ze4l4|$=632yK;c0wDDi%3d#wyrX?;0<44Rp^@0j#j*C z-=^N2P`g51sjH{x;T5mAR`$~E9Z4t`Y3J3_(v`m#c-l5jUg{b5+dI&XUc5ppI=Y{v z^)A2Ig&wrCA9&Gmv$|*P+%tR5H~_^FLS1y?N!K5QGI-rrr;UHB;-X#CmF|wE6(6V` zukpwx_q7M=&k%QyRN>Ki2yvv(7P_K4U1&jnI=B<0I*Y1FiiA4Sf^Kv$?xCZ1g<_@F zt_rD_sc|Y=Xh~Q4x|^x|N__$0nWRLb-e@P<@{)U=ecYGSr^+w&r5By)<KE?mxapPkTn4k?_&&Xzre#ypV9#>PRXQ(0r-CCscsE zpD-Nl=nmJ=`;G=crE|$X97gds^^g8u7e+^s}__P4T04*nikY z$ltd&@}zEVh1BS5@7ae|H0EiZrL)(Lup>I6o);canX_WIH+YfP=x5}Hx@79&Xl=Y? z+>S6mbu}g-5S!D{xS;k7u1AomKd5+6(WVeR|K%EmnK3Sc0k=;r>E zs+>X}3}={+phrUX4K?m;glpKzq!=$X-xx<#F;)LmCriCE_4ZTU*%xAP1_?%i2``~q z^!WO&qY#~0OlA}*jAtY>jn`05Es1fiv5JGBUcXR?LIg}^7Nd-Q9BItKV1~P*Dm1-n z!a|J-L8n)aWs1=hlbOSO#xlX<8p~|+8q~=XT0zmfddsR@PjCgdJ0p#;9PVm&8nZou z1Y<}>(UCz$O17py14*c#g+vAzQ>kkBFymW)M7>m@{)DPj{eA?)>UkE*43e2ZZ+8KN?-*@VOC26Fk#wJv5HYH8t8+NT)!r!{ zf$GW$Od!Ey6S7tuiSbNe5(5~>3|E_n8w)s;cJ68l(>dDLqX$D>Z5DfCkl&#dsXF%< zq^vdA^E;Oj^;ybbV-)K!CxaMm45)e-3C8>mGO9zEMj5r%hd#zlYhBLv83}VbmGQ3G3u!clKJL{HpgCRLBNk#-U2XN6hmhfZ?0nCA zqQ|Bg80D2FG>$T&Y3@J|A<-NJVPo{ulRoZ%OmqKQ3Sr`5q!}SSiCLsE#@BQ*(~RpC zmqcjKIYwZPGvg%7>s1I-;T45q9O<#EbD%LyaQ|2AkN%ADbHb=<2dnp>?t(hyBizFm zB2`@iVXcNR((6RXszKhrs`I~2FNV^K4h*sd81AzhLO*+)p(N6i4(^EzFrKE3Yx2VR zsGHS;F2?Ez7ov>wb$2tmxL-YpuEs<5F-mwCTC9>p_?cG~d^qXgw0gkz|S7Zj&-cWkM9O+0_XTq?$X(V3xQJ5^g-7+WGd zlkhG=_y{widW14y_3~e#v11SQW|Xt4x~KO(M|;O#b=~@=t`{mYS4O64o+^n#WHvE& zQOM)6j6 zBS(hRMuHJ8+WW#wjy119m=~ej z}zPIrUzr(T#zOCzSz=XPNn5V)&_> zE9<2mXexu2#Tavp@zYo*G1{0Kb%fg{>CwwVazo4JedriTdH|^N#+2pW*&=K zz+`(Y;px+i>le>PHh!M{k$T~ozLJR~F^6=LnPPu1pES~$NjAAmV*#sKz%)jiKa}QK zPhy!n@mc0o2$i48SQ43QHjR!fjQ=cm+l9)KCsZ_%z?)1lLqonv=uLH*#rzZ-bfM32 zj&ZcJ7*8*2Ri?X}Eq;aA9QrIVO(rsxIi6q5fL7-`A3w$M)F}EJ=af!@d4`i1#~d>l zHZzz_wr6&(IYl#BXx8C;ug3)}wqF%$RKEF5rjutxtuVe*jouepwI5TB zBh@+@>KRd7HOZcJoUsiW*-*b$UQYZLvBoq@nziZm>p&dN0>@qXzBa2_#C(=9ogDK9 zvzSGy*J-j<3FneUrkNeulXZNZIpjOe6gO9EagpDdNd_s*H}XM<2(6oZ=9;Uq$lR_4 ztYW3Pz0%bcqia5yB$7#{xpB$HaA=)sPYW$Eo=jHx7-GSRU%8s)q>)Q58D@~_IAYu` zXAQY5r+{r{g05fz3(PlO!BVDqkEMII#bTRoR%g0Zby7$smn0UmgcQ%iY|_j<6Tfr@ z3&|tZdn(BsuoPyRcdONuW!sYMY(t+SE|~U!*3eAjUlPbM`a~SoB;%}wN)Z!TI1;hv zgbY;vFxHG)MdVsbS{;j6WUiYm!z^ZyXbYj3S!|;WdNIPd7v&E^SWh=sZHlob^T=Q- z37+3Nn$4KQqA`hYid3j&fcbYHiZPzUdu2?T+DP?3R$vwjG`a&NMV!_ zNz;s45;jvdCy74HvR#y=6CW&7XTzD?Ff{%r;$Y^@bJ$%4p3C)>yB zw_*;RXR^;(V-T-Z%zfFYx@v*!h*nGv*(BL2&a{nBFZSGwqI-Bx}MKwEx9aVt?fsS*Uvh$o5g6~#Ws77GVf#^Etj=kg<19i*%Yzf zt23KCipZsq#l{Ebc>PLCVx<|?D_CnLx7gK7%rln0L=x#tXP&ROR+r{US-P@zS#RHrnvupvx3zq+sMXZZ^WO)`kLe;Db z=UAt8q0C*ZXvLM%J#c*jhf+3C_Al)QDI;uPGexXplaF8Eh+qwsRM|6cV-xulvW2ZwvDwV{a`st=S?}3q z{kV-*Qdq+(iYa6rYbda0NvXa45q7i23IgS3*Y9MDV}o@Rn<2l?$1kMF`rhl<%|SN% z$h)lqy2aWMo7u`nRYr2vHd}pR4ci^3R8mbbJFFN|xz{W5>d0rHA=Cg4jM^$|>`D*IL_e)u0+HgzaD# z2RO(nPFnl!B(=P4m5lc}&D*|7;prF$d7G15u*%Uv4sd`&Rw3F-HT$TcoVTpzRl@-* zb7<97vy*+C;3x;F=3T2UN*`D%V#lmeRl@}?aGc{-C_2Ga_E{lA|EuLZr`f}C-sU3j zS?}wr$8v)A`H;(2{;H*x_c_Hrs;#K?7H@H!lN{kFCpc(5kb@lNEa!dh=XjrsR$Z6|+)Nq8WR;{|i1uI%=cJ*0Ou+raad`vCx@-c5)QR;m@_Gh2rjFqZS za*}sA?zy%$%3iswQqXTP?3l+?1$vd!u)nuB9L|HJI3#;Pv*9){Ii;0(L1 zOr zowR~8>|-yxsN}HieGSEwc_havwI!-%9c$TXb@UxnvX^u0q{#2tMh%C&t}Cfz4W;a3 zAA2aKz_EmmE&Ec%CMvwnrBPLBtsH4pDVmViIAHY~Sw$(47TT&8vD}&=S*)elHfa@A z)_z&eCQ2!>4U=}yE{a)i&!f+;pokJGDPq61{41=cRn1AxP{Ik$Qo%`1Q)XqG6&zwe z1#G0;-ENsg@6vW`4fQDN&Tb@7$n6upymDY^8_Bn9V7+ai)Qk#|mW$3t zb%c53`z$uFoE28OT55fy92QbUmCs=>RqSJv*GUy+lvo9HHzn4r*~(g9am5Ex|Ji3x zFD)Y7C75RR{3HJFv`#EX7OR4O=YrV%$c#m2>;fj67Ij-7v zen73it>TI`Fg0#z6JGN-O52ajnxCCn0cCO{D}*E$QS&QPpq!~gW>nU}2xdCBULm$}Sm{ECZQ;4`a8f5=5X-~;=u6THP|9-}lSrBbNb z{>b+8OD=HKio;T=s^JuuspTB!tqoXB1&27#F{^G}pvvpM+Urgp`VdDcqtLonQVEj{ zR0OD)T32l=rBpjg*iEIQPGwT1wlA`M>nLpGHv6t13v2v~GrP`kI!912b|JV0n=)S)F zKry3o9>v(I;}u#nFpompka;XHgG#j}al96g;fz@M(;RDBsRF0!mTJE#W=x3-tDdAP zOyYg1GNVrHWLFZ>&D>XiSPC=h{Y!-)#a(9A>D7%84`1xzH>{K}!Kygp7-+4Wq2}fH zAi;e_^%%P|)?FH@>ZlW=OkPL@skx{dBJOGz_ZEe@71~1zGU6bMZ=}cSo2s)Y6stH; z;&7{nrp{9*_kM)O5R0e<&1h;4K@+1;UofgiX!|DSR!C1p-K?jLrWXqP7d&Z(yZ8Z5 znhzzGgV1BbR|{1v-l6ypj~j<2jQGPw>p#GwH1VS+X>5$-&-ft^@sJrkcW@8lvk1*C z_J{Z@`Ynw7V@BsaV05)Gcy*}uM)k}Cq1+#&k(rhc8Wk=cq%e`<#tN~mSKMeUibc-*N?e19Wj?R5rX7>Px3yYY+naX0tV zkcMXIh-<1N-oRZn;3lKrZs%q*IrJ?wV)@*}O~7sDTZl^}-fA5?r~zWsHsmI*C(M8S zHuPOj-^MNcU;HDk=eu0bb=>4$rvBn-DAY2EK{E#Xrr8y^h=X z-}nyK@lEL2@9@|7b9^0Q4}TrvSbZITi9g5xn8Ewk_=`Eg|1`t*AMxk-M|>Gy#aHo} zxxIgi-^PENJ^Xci9-qhWxEvqGmAD!o#MQVGSK?RkXkvJX4 z<3t>b6LB(*#gRA|N8)JI#4+DH5l7;99F9YABu>SlI2F~gFZRcgsEz}1D5|15_QbBJ ziptm>d!iyrqbznrWo(VzaWKkbS8VgGB(_IUltyW6jm=RO6|p6@$L81)#j(kM*GG92 zM`>(|62D?gY>blF5*uPu6vie$E{=^+5Jj;*Rz-2-M?tKLm9acF#L`$5d663{V{xpG z+*lTwkrN9eD;7moERLm-8QGB$*|8+@A}jJDEfz*bWX6)nj=7N;^L?8i^J8wL$Gk|6 zv`CJ5ks7mOcFd0%kr-()E7D_bBt>$}j;WCvGh=#8jii_o$^JVzrp2_F5z}K*Oo(Zb z7}I02?@fw{F*e3VVvLK)F*+v3xELQ3V|0v*gcutMF($^ws2CQbV`xl{p)o2($FO)a zhQ+8D6mQ0$7#72#e+-YIz72`KF)#+lu;>&0eZOxEihse_Bp#2S#((;^?mrfd5YPAU?!}_z({gLkJ{+_>c&aKoUpi1bNDZleVksd7q=aOU98y9ONCC+p zGvxSL@1>G zR|tn5&=vYZUl~X48Ox6*aW*^BW#5guoRa3 zKVDt1PORDypifP*qD+S9Mf* zRY8?iMO99fR;5shR2&7$!Z(P9FYpb%f&mL!p-QTfsuU`hDy&MYYO1#Cpn9mmYNVR3 zrmID2jasEvswHZ+nxuxQVXBMjr0S~bs)8!13aTZ%5+gKDdKszGXm znx&ShZECOjQ(aN_)HC%~{i{Bycj~kHpkAuS>YO^OcB}PjwVI>Gs|jkH>Z69J5o&}Q zqb92vYQ5T^_NsI0FLg(~SD#d@O01LW3_7bWuS@GHx`wW+!*ms0PG{2@baEY|{!?$% z9d%hns#EH?I-yRebLyOmRFBmM^-=jMp3bNX=ull>x6_^Va6MJe*DLe}y-BartMytv zS&!4hbtm0OSJB0FPMumO)Sk9VH0Tf=qT}nNI;SqI%j+h(gYK(`>-Bnz-l=ctZ`#*! zF(szP#26o=^jrNz-_(coYCT@}(w%gDT~(LS6?8FOMOW1Ibpzd5_t&HKR6S4c)|d3( z+UYcy7RzE)tce}5FSfxR*bb{>QA~}5KXjx%q<82Ada@p(C+NPqx9+RQ>S=neUZ%I| zi~5>=tz&gMEQO`9GmgcPxC#&9DLjFZcmnt0T%3jjunktl{Fnrz^#grHAJF^s9(_RX z)ra+NeM7(3h;cAG=EgAWiDPjk?#0`vDH&y_id2FsQdP=Eap?`-#7#I0dtg<}g-I|< z|E*u@NBX6HqQB^9odnZkajb_8aT0FFi}(Z+Qc3DS(`hShqWyG;*3vZUPcT(F!#(&GlTvnSLX&6{ou_B?HznZs9Kvy!_y!%P zCDfks6VoHyiwm$fcEOg|9Q)#MoQKPBKmLhN(O^8vL7izbt)T<-mQr&eF3Y935?AC> zoP&Yy(KebujVTMoqX&2#x8YKpfJ<=}F2>*S5T3?+7=uhDs4Y#Vm2{R~lgAl3Cs*Lo zT$W34W{%JQ(KXskW2rZlAx%v0@f_~M!?+9o#8Y?~|HkL|4Kw|m&!IG%*3%ifPG6}I z7vPFqk6UvcuE04tF5jaIw1zrRDN0H2@gd&8L%0d|;2}JYXYeV$$2gRULa7mrqJ?yU zUX!Ij7pNlS9l7y;qSN}*W*4sgHP}g{=j5Z zmMTym8cplz9Q{j{vU3G4$BnraH|B;M%8B_KMbbPPK$YnidWN@fH!i{jxD2=8M%;># z_!)_EQ%4#=GiWkH)5nO|Fa1JiT z9e4x3AW{yhOwFk~Ev7ScjbbPrr{fCTjl1$dp3DQe3)ked{4c$xRn(OlQf_*Ix9}jY z!wB4nXYd%_LnMzfQ#I;IGiftjruUSTi*RG^$uoH?&*zyujeBw#F2Estg=SKHN=;FC z3Af;UoQpGX0j|Zf_y9j(1}Z~!s0*#7Lv)LL%FUIyD-YuFJdA(i(cGCUaAvl2mo`yf zDo5Gr3!cMGI2mW+Oq`5Ma3k)+rx=5&sSfp^S+tvOlH%gr;Abyec@OX4ojjL^au_G# zSG0y2Q6_qVYj7lX!3Nj>TmRhE3-JiPM~CUCHLau5^bh6W%G{2Z^9erBS2&VS@*g~d z+j3U^OzWs6rK1KGw31$u z$TvR86S*Y6qlMI%zTh9&4@0pqX2)MJ4d%iU*cqqdKKzO~s2WYAzvw?I$Nl*L|IH}L zB()?F%WwH8kLGgxil$N+1!xP7#s-)g853X%^sqSg$4Phsg^JPyIzo=}b4Oms|MCwG zkt~v1GRY6V#uGV=6Y^o|NO|Z!F2&AR9`j&9%#G!+I`+azxEnuVI;v0W={cq620WVg z@!Ow$6q9Vi@{BifJI=<>Y28mvF5_ryh*dEYX2t9nigmCB&c(~9s5A|x(-cKnIGh*q zDgMGqC7a}uRPrxJ@;t7^$@n%+ql)w&?#5174l`g9Oo$0FFV@A*xB{PJ5^6vz=oAIG z3U}wle1$)89El@_Kky;mzyr7#dwhgCQ4-pX1F$s~#8j9RlVUn7fc0=RF2OSxpNi8= zIzz}6coJ{r^ZbJUX3KHp2S4DG+=a979U4XTNYNJTi;XZT{->YlxB9D2_R|Z`!;APC zi_~FX4y$i9;ltB$WhW`8coQU-=ilL4zm`ox*`w5Hq0DZ}nsSLWf{FEQF15 z37*CP)ubi#gfequp2)}eAAZB}C9ODq$0vCn*W>rJl^W0|+<*fyJN~Dy>D~HweNI2s z-*pbGh0}2p{)?q(JgugeRFy~aVUFgUQc?;^Ny#Pu@B*&M_h>v7q*K@mljA8pO?TA| zb=#lO`m_cN#o-u7 zRsX7M>lS*fUa2qZc-S6)$Jf|`j#Eya$WJ)AG?jreT_#Bz$t~}=KgZ`iRGl8+I81{V z^=#c#H_&BtB|Tg(*Qa#=+u|C$hB;{@ouQmOhEK4TVp3n~N|V&8=l0> zo2eiz!<2YL*VIA%N!?cW)C=WQc3oFT==ZuQ&c%1wi=I(=Ue1p=o3xVd@|%p3){;?f za2LK#&FM4tM8x^Jtd3H5)DE>*ZB&sesKfLEoft=8B<7rHPb;Heo}&ulwng`i(lH_N(*ihf1I;>UBCEw#9k)6l>5<%FT259v7BQ(oH5w zPbn_3ypiki1FB8?urMCet#uN8Q~jlGsSE0bN~!DWmHNA`i@#%P>P;soFOTPooIuC6EP%Q`*w!wZ;_M$khl%QN`{ zmy+hvRjNo(9`G8j!Z)Z7y~6>>I9FHDDYe$G)pPYmCDaQ#9T$G-R{CZjnNOD%Z| zzu;t&Qanj2-#L=kb12`YR`d}Eq2Nh9MwilY^c(e7eN{PhxL&M}=~P%77h)7Pr9~7) z9r+q-DJ&hOrR0_$yn)N}J?c&$un$_jK$p{6zgMT#A1YFPQKj@meO9Nyrnm;v({FTz zO7J>%Tv{4QLun?NU^78(o5`v3TJ85yVNMvOZ8Iy)hhK~71E3JBb^gx;ZyvT z{-%ojC+Cz2vR>B9WGN?ac_UZhNGd_QFd3%hv;u=m1?0fs)Q<~%B%*eNR>@b(F(ib z9c)ZjD2z98N~tHqWSLBsy5cy3)9?WbqYGFPcj=t^xSFjRszfS{s-pU<&MXy!$R8sW}&cY@54Cz#5HA}ry zwe?lq5^rNYx=f*bg$qhonJKfSk;L$PPR8SjX%ODmwe${EO8tQIupZXJC5VA?YN~pu zYUoIv45wmhilA5;%l8>2s}z>RqU29*#qX#;J-`9@SeMh6)OeLceT0*+752m5kX(hU z8!A+9)`$_9lt$1iYQ)DluY}8BsVyIP5~t-&RFu|YTpX<5s4glRZo^gh1CBs6WKliT zL6uz3(jnLuFJKtGrPlm_L#2jPl)_?o16Sgml#ABlTis2+P-WFeI0s{(BTRuU@CKTw z{mQE5`kd~BacL!`2#aAQJOfm< z)e%)#pVW;o8pl!$_2TbbL%PXK=_aY=3fJKcL==w4bqYN~Sy%?mAP;1M0?-yVLk#?; zzN>*c87{^U`t4`TI>*_hzOOP9g@ScfiCd;XWZ$x2x-bEL7n;*tC>Rif$mLg&`u>J?0aeDK*la8F%4s0kY( zk(#6u=^6SzJr6_aADY71WRfhGJ+eTWN-|l@ifhm^ysV4s8R|RqhD315?Qu7qad}|_ zgs3j+n;N8}^$M&)=cobS<|eXL4#;e&CXcuyzoqgt43Fu!daQZ?h2f*S?3TFA?wS** z2iKsEdZ>o#^tc=|(=IB;yE%b0lL(nE9VDa7;VK3 zJK$2oWJsK$|f=Qg-; zKed?aUbymb116}V`mr8@$!H%{=W|?6mdiDHEk~ri#BhH;Ltn8bPS%UmeP{zu+zdC= zb#UQsy?g7L!#!xL0(yhajF)gYrR9BGUdG9CSt~=NoV?~9e1X1T9vrW)sN`xEE zs9WZCxvwraw1$JwME#?>X~yMPj-FE|e!#6|mCTcYQcq&|H@-`8sTm&CaddOF1G2;4 z?x@?~cDe^H8;pS`&`$kO8+A*3hT|wH&*vx(l~yuI>PbKzaC<&V38@$E*U9xX6-OiLrcQ@ju_zs(vb>*TIjgjl29iM@^EiG^?dSp~!CpF2)bnD$K*AhO$FeQ4UF89-dbi9(IxsFVer7}UfNirGC*C;Wy!mZk=x@tcZ zh6ApztLw_RDsG;OaoylG{HB!Nr0ZiGdP1W(wJed3lGY1&XQijS<|5pm*5ef&rLw9P zaMV?FG4_M?Z3g}<=ee{WAL-P( zsA>qCU8wtLPuneahkatRx$!O;T!AsFfc~y;-~k%T<>jiB@)~-Ly_DWu`H%B+Ny>v+ zbUxJu&bcz~vE5}S+VOUmP3)$-EN~rWs=WGz{vEqgVSd0(WQFXN6EaKk$rTRezBC_C z>F3IaO7Oc2b1&^qyUy;k-)%E@(Y1!SYO|`WZNuF< zQlTmdJ>63~&Q`VMYz5oJ-naj6{H7|kexa9PM+)KTY`Kt(kd-n`%E)0BE=IrN2)$Q1 zCLZ_)KD`_e-<+x0cd~%Reaz|Q<2lZ10 zDjRfk$89s4%jU2Z?O=Ptrf~CJDTsoVsaVys9l_0dw3-3S+-951-Z8t(bhFufHTCR2cDkztN!4k!S+B+kRErD918L$-^d@@Q zybap5QzES$&2?kk^g0$?QcFVUGM<`y)2Yy>o|QsT!`EVnIsG7dTw5OB%17 zm&;otT557nT8R7fQFR!eyOM61O>2Lcm*$lzVrSY!ZkKBVNz|Wep6-t|sR)1O&T>ZL zdLiC*nImze4ELh}*iBDW<6wpJ+-#fMJ~oHUpC+~4Ve`24t~n%Ef2mXY5YDEWjIvOo zB$1cMJ0T5aCmYI6<*=46r1C>kx5_5ByUkp4*gQ3*>`7a~y>!cVW#}zS~f{!8A2trnVVkUYM~qvD@joL2;Eur^FyRdcwWs zhm`i3cx}AmUW6Rv>$Ddm^eVLxB3-mCV=tKLrkj~*E}DFHmo4eeyU9>q#nI_73&rIq z-YrGER$eEsk@r*z$Yh>R{c(`~Rn>&ik<%fjoo!Y9~ zV>ybVU0h3+%X4`p2c?I65o+G0c9Qni6D?suEk&ND4dC-a+mV1Bi4>}Zz*KEP(x zQioxF`b6V7wagbQRlFqLb}1k&xCzz7;<}=$32og}`@sw{rA-M_+RQac?0Q?(#kyUv zK#kA?uq#z&!#gCdm&42N{UfvF1BbAW&-Fd^2A(-_)$I{8z_c-4%zpFP^s!HDZ&wha zVU6md>tJ1K%EjcmB=VAY%DW=H~7oL<%YB>zW%CTBJg8gDQUcJUVpEI_lJDq1RR$LZ>X6t-c7PcObv6-U*jL}fB22f zQ#0R|aUPt3xvGaAfSsu*Kjj{BMq(wA_m@&*Ka)iH=M=9`wx&!y!V;gEu znF*$snQl%Ruzl@&yWACkD0ra8>GGJIj!<)c&DCXujFOTP$t8FMEyGPZQvC~=q3_T0 z#$GeeEHLLxdb`YKawDAYw!j<}p?|}I^qAW4SFSESrH?d|7;enJQd=Vi2@bm!SL9DC}`@DU!Of;SRD@cFR1;E)#ei?ZJ(Dwb}&d+<&&J zePX7X_NJ?eFwf06`^~m;#w~%)s;bU`xhORs=JK*YewTBySBlG2UQRQyfzGP3KxH@D zzA}SNIa9_|G7;vhX==aNnXWi|fqiO`9*r$22fyRtaz$RscBw9Z@EiIYAL}D(0W5R( zYgmE-du>W+Q&5H%ha zyF0doeQBneHYVIGF?UQYd%-qy1Q%hQ>a7c4BDzl9`4PvF9Fj{u^DO>Kg{T>}&{b6f zXzMoEtahInVw#)oW|6sW^4VjywtMFe!8Fxhx5Ps94=v#P93pAuKVHw}c`lv6*ZN-t zsu;9$M{Of(%ziW9Y&Q>05xdnEcDr0H@YE62TwA>iE72ti<$WB>LAl0V`2-PF$8bGC zt$-u$hplT*o0g`o>1tM)@20zbU^_SkQ=yDXq3`O=IDpdgF3uozrJKZ+U0j@dQaCoy z8B_q0x#sr18ER^os;05oX0q8$Hjmrt3c(xLq{irWn1SBV7{17fq^x}5)m)4>&<7;^ zTb+fEE~o2bKbQ@sovCF8nma)77H(*t|Lt(s-EfYEYfoJnW5*>Gpva_Fua=}?SE$EY!%<_ywJ#!IMt2BXebfRF}(~ zhVxS~%%Y#cSC`%Ou%FEsQ_a*ioy`K1z|OHH-9xt!N-NPH^)4Jhh51jeEOX_EOp}5# zi?7f>Xmmg)RGFcsTWXWry=JaiZvHesOe=fK)^wL$Pspfz^;zG*4b+!^a9QaiqotiB zkr8}}zTh#vM6HGMF2uFAQRarZZN%2I3+-*2&rNp!x`_~~(&)5Ebe1~s9WE-PWvdL5 zSgypwX&Uy?9aIbG;Lh2;HiP|Po|})Rkey<`+Q#m>n*>!=tlF#FU^aR{t2vdFk(yFS zZg4aHgZ{%p*hsfiU0|JacBU<4qfL~_Xbaog_77XfJ##amk;N7ZpGV>IE!Ud$V ze{DvnkxhEVV$a>|I+=jFx{Xge2U{p zVaYG&xf<`GN9gMeI*%F*yIhEyZR6WN%u2Jzd@*(HAGV&0aZ6#SYOZr5P$YHZS6oec z|MZ)8xFj#6B{*77RFh$)3%H54to>@PnDgefNpHv77(3V1fmg6j4b)XJF@@}K2Aj$4cC8_;dan-YDcF#b@=fj{ zt0Y3&OB8qG!}J5c>nmz6oOW+)1^chLXwI6G=Bf$W`u3Ww?5??~P(u~h6|fAY;cMJM zPRTi0Bn4$72RIQq{g1i}?_6fr-3IM7bJ<)mPk+Xo(e{z;x7wz&$IVdF+>|uc%`|h+WVG9DE0+r{clg3g) z?s9%^OsjCO-lcBCcNgmR+4?rQeQfrbW5ze->{R>Rj&}I~)Jt_q@4(TNnJ;s0DI~wh zb#BVL=rw-Po=&ft!wQ$&owUuYGyBZ~v)5cR8SF_r(0Onj&Z;eX26m?+e3;`(RVgcR zWi=z$rIy%C_gB+ln+v+NwxoSx{xECJLbKhZv`g)0JIQs14yvJUhV7^^zvYIqNM=e$ zi6@hJ6K%sadb%0{Q`|#a&x+k*`kKjRo;hk#*?#t|o$G2qPL)P`s7doFt}ln>y_}F= zWedNcPxwe*Qa9nTb2i+HJz(aVL1vJNFsDpBJIrQs8lFKST?Nb2Tbj?MWrbXmgHm6X z@)lZ+$Mj3}4N^i|_m^#L$zCuE%~Z48+%?7QBAd%O_Z8ylJlLF?u;F^rOZrM(0qMf6Tc8slLW6XB5+8i_2O;&r*Hg=U@km{>zV;PF3)tp+wB)fd$Q5-{c zs3&&T6V!RA1ovHk_tnm_#jG=5%vV#!uCyQRC|3!RsH{3S{=h@jn(uKTDJY5MBxm8y zG#=OMi|PXug6%G;TVg}4HSf$n25fmd(SER_T}m);Q|;2H@E8r}MAAZLON11cVZ4`~ z<9q#0B~h86ojYtx*-K`TnP?W6gXX5mW0%=d?z6iO*Og!)3gx&mPX3ZOo|Vb+l@qeV zfAvu{3%0p?wvPQ_mY8ZLhbeFRo8{($DP}*~3+_D>&;xKWt>t!dSE_p9UU6^VPw8(s zU5Bc)5au@7V)m%%WXhWSCe$=Hz05X~(H^&p+(8J@b?`Tu!M{mSZ;rRj8{(z#sz`4B ziu-j(RSwF#LH30iWr~?pCe~Lbqv>pRnD1t^ZSSVRM^zbT(sAA-#k?)vKi(^Ep!cUN z=3;bN4^1#%Kf~YRNBHyobADlS*&MQ$T~H0tFEJk{kmFL#+u|MadU%KB z316iy_+D*?W$wOhXFr*7CYSl_zw@K~)TWx5W(wLgt||;tJN13MPn)=d+z=!0WQ(Md z8k~=uj#6<{PH5(i+S2xt8D*N9a;B6CGm}ivuCX;-PAIGz=?NG?z4<+Nm;G{4PRg$` zkb6)E%%#()S`gu`+JbhwDQ>>{k^UoJnc`-R39~s|9ayHKbtx*xj%N#a*}Rh8E6FI? z`755&OH~A%ba7lud(%`mul?QrVgHq%)yy$z>?`}pl~)t=3>;5wIe`q3BeFpTOClN0 zn`t4A(X-W7aBhgZZ>w8t4w_D;x@l&HnvZ6LE#T5Ym@1|VVQI?57r2--lrd6Io^x&P zOW`?l_YnyFp-#ZRA@N#@Bq87w7bJwK!u z_*mai*WjD0;WpV)_MI7JN||h?s2OZtnVvR>OAT4o6ny~aQ4fycj`F+AmaOs{ucCu^ zTYpd?ssS8u$=p0!)5fz;&F^N3*0NZPOR<42|Yk&M#FYn;c+EIjKD^(R)<_ zH3B}m&hE9HW2@T4Hrl*4@oayaz#Vl9VZK_XH{wp}&7U}zWRP=Qi;oghD_p5>D^Wcm zAzX6J-8(zicCm$RB3r-?vvJ+O?iD;%2laRyO2zmJ$Ct0XiBoV3I*ou?b$|63dVzI| zT}7wd6}!uhwG-@3Tg<(62Vt!0uFK&U97+FBZSKt#_~p+mU_P9!U#ZUOKbQ;QkQlDI zO|F(p=0aQ?m)6a2>ESNSRn2u4JdI&=nm&-nY55t|rsa57r`B!MWf%d);Xn6>8|$XK zDXyK%E>VR;}&2ScaZ}t1 z_so@pTd+XY)hY1(Q(;xUjC(@Z!132l%xCSnROXgCz#ICX1?moCwP!ASBe05#@ zsi$By`b-VEFBj)0)PWviN(|LCRe!kV!dx;ZPF$$#>&CdL?oao|#fJuP2}Y^bx;bX0 zvs8!&@eFRyk0~Qn!=}2EngADE5%aw|wwuUWf>)8eNq0Qqax&!W^OAk{ZsrpCV*SoPZ5f9^CJd~4h zA6kd2^jtL<;s*@rgh^0*SNzU%ojBYP2gtF-!xo`qRyC#B~0+?^9}XPSxw zbuTpxmN{{YZ8zJ)PPb=l64%BZb4j2xoPdhzsp_JW<5TSV^UrD$Hq?(IF^GwEE>#Jp zx;SpF?O=P@DfXOA<+`|iE+Mpr!%#~F^<}*r8_*-F#gn)LC*}q88h_}Q>H^$xPwg-E zq}gn?nOCN{y>6?x!bP8wa{;C!H>W14tO+%Bx zlr{5=Z+^3h+(wrlc0vnPTDQWQRDfS_b6GA^CA-Yx$Y>g;VVpxEBs@$^K<>WoQi*8AQ4Eq*R@$dt3| zZ35TdeROBwh`OpXQEP50Azml1tyj!DBDeT7^};hMAMCUP%{;%LpWOe|-{Xgxv!;;U zZ^yfE=%=RZ$rwSic&Oy}26{C-@#;uZu1=AX~?rp7A94A(gx^?}^lwCY*&1>6~i0t7Chazx^%#Mc?<^nh&P7jj-&FyS?yM)y4(1 zgsaO1N#p(Ey^_3Ag$vUw-AP5eEp~~C@vr!?em>LAoG=;fEE{Y4yHIGMHtWPxgUiSZ z$>?SDKFV*ho%c~syreR~I=jNe_!s(i)bQNK&y04K+aUQuKrM-q; zT5pNm<}Fklm#YMD$38G*cKGxCjeZI<&cv8yHn+R-)3+bjZ!rhgl2qPAZ?@OiyCVPb zIqHgg6u@X(*^Kl{`MLce{#U=h`EC~3a_+s`1cy{2Y(*ovkNo1z_11YUz3p;@|Db2HqJdAQjl+B>fOV z+;mgfkBIFXJ3p5EWqw(+)8w<)?LF68X&g&$IKSrwCI;pNvIV+%S{h&EZl)W>r@o#9};MB0T54^X7TlYasdgE{@bW)D%bdli$q` z_3Qg<{fy>_DPkvBxBQKR@9t6&NZM;{KO#-|JYv^Y%$)&e(%x``{zls0A zuVrSLSTo*MaAl#CDy1i3EajI%-a&7*m(`mf`*{U5z^iHyGxY=%O*K2w zp0VlON;ee7sZIJShHwgbBTc*#-g60+P|iY(3sg$@Xk$z&v&f(7KlI0%l6H$t;99#k z?j!_sI9?@B9!VQ-me<(ZESq^GmBmMD1GIE;Y&QHi!KKej>BPRI$eX=6<;G5Ky00YOGA{IE{>#wbEA}a}0gK z5Bjxw0f*cUd(y=CGyJ*!Q-8A=WlOsc?kG%FfZZ>&+^=#&v@SP(W>0Ep!IVMcMcf|0?C=CNqD>JNl%Ggy$}fD`n@Jul_Fo zxj)qOxBXmExDPW_cD+}3!`xJzhf4-8o>xZxqsbViv#Qe2)h)MAO?w08kiXk6Ytq@y zZZWh{?^Jsog8zHP>C4R|y*I#1;$@Px^j-H-3E-K1YS8ra6Z-$e+SqP>Z8OJSc2D4< z+NHPQ7TU>+q@Xv<8|#(w>dRNEfzwoWIAbT7C4O@MTI{XZ@39m75+=K?>$*Z`6|Spc zdFsHW5nThdQu^4Y?!7!+2?bwZ3!9{7om)ABk_x#2FO#i9B%N(-%+!mOqYU==Qz?$@y`tdc+AU^lu9kdlk=*lWB zC>PgOH|P9?{&0VZ-^vWN3*BkBp%&<&*orE0PT3=gy^P*lsUU`$V}G^YRkTG-UH?+- z^w?psw_^|cktVsD3Aa=N%tXT9c$-xBPJ8dXvEDA3#yO~~-U>f#3G+A>V;97XjJX;! zDt4@Y-E?%{AXHDoBlLi;%S8UD*hw)7V$#G+kEtD7 z&hKvC*_BX0N8naE$uH%-w>I!1@Foxuxa@6^xSSOetAI;y+Qw#y85;dt^!ez)F;ipz z@$cJH&{yEJ4KJr_{HjVia{UrLAn7uJaW5Y}~ zmr&i*&FCCIkVRhBz?{JHz=%N7KsN6HzraiCsC#M3`)Ohq#w?6^5|cM}ckC9wpuON4 ztABNOy2$CgU|?S0Mc`tfNT7{ZQ+Ch`omf?IJssWGpk??#u3c@T3gHee!bI5g1) z+woqx=|u)Q2A2nG2FC`-D+k@?beFC55J^iU?K_#2p9~o0W`h8TU=xx#AF|}eh`%CN|SglLYUasIx z4onDU2`LluE|@5I+e<1>afxc=@|o~h6P+j8MOBWz8+|e+xBt)#cDYpuM$$m>z0|=E z!7L$PgG+)}1FgJ{oD4TZZ`;}bGiF%y?Wj9ZxuefU-;ZhUH?YHCwH``Iq_a0T&^<^Y zsY12}ZwDHAO}RW~P}*fTGh?U3xahy4ZS?Gzh}buNZ<`3tsYTdc~jpKU70;z(Vf|G(6j2}25KWLw>3AtB9uIPi*L6&(70#$=sgPVg{gCD#G(wd6s2X2{J6I(rI zP;}Ag@zFJ6lEeo6siw2bs4nSn`bD02HG)yW*kIFOlR!c5C8wpg>UTH7jEhYk(>l6% z^up*2F`r{{`@2oJE3H~$8U9P+1%3qP1|J7E2EPY3dG~lDrd1PdNxxN0-<}G35?T2sH`0Fz6Vsuk&q)HAA?H+?8W6vx;`8;Jz|GPOVs!uD}JPi`W)3Vrnmpu zwpKgwGcWZf1TqCr2K$7}4@nX7Ch$o{Q>+^A!c2|WE78ZI@x))ge2?-x<>`dT-Q(sH0J(qhq2=#a{RKTcvvA z8t&}v58Msj49OkmR>+26wD+8c;8iGYZ^cGMAC1Zul__deR3Q3g^q|;T=ACP(50NkD z1D}GML*m8ZI2}V02Mc%?DMUAN8~lzjr=ni{nEK=CkEKy2`c-T)+XSZTrnH-rdW`}t zf|)`ZhujSQ8OY-0XT+t@#YXrEV;@B)iry9VK5BdPo0#c-eH#KsAqgU9O`^15Xu&s}1zY?!IY9%m18M&VoLF|Y?JkIX?AU~}<4#Cu{l@eH4Wg^)h*G;p?f zU+Bb7;so{?`-;uxd|VabU}gl+5&8*BQ8^aIPT*yTYJ?ky@WbdQ_zE~iTr1Sz7jPB0 z8eCWII=7tPEBuow6uW>@_&+3whOig-Bw{0xO;pAIMK{1J!I|PT;RpAS?a$s}_i-Ee zu7WZnX8HqG=sCth!wutJaFh5v;bo>N z@DOYOKS63@?>x# z6?h+P4*CZ&7@7?n$uPW&vvK!W14nXRUKGlRV}L6l3DrSHp_{OscrMY5VDN^x2d$0_ zgH{38GG^f&SHuosJF&;v-P~=yT}BHOgU8?&=s(ze+>h5LdJ}DktN42C0e10;lO zzKAWu<};;P2dm*v3j@R-Knv&#To3JyjmO&&_lTdw|A=MyL@bO%q16DMdC65|n==`D z9dm+J@^^&Uq8xk)twv~6iGRau6O)NN!cL6Fn_`!d`_Op6kSWdQu_Kt5becA>H0Kju zh`qpDkOXOn_QPi5i-yOtWJ`ovW95D#@p-y-*7|LAW ztsKwHV#+hs7(4rbvt|weAE8r-6*J&|d>?^GIAS6(1lMAdkw2lk;xu6g*OHyVgyTK4dLaFS9>h-I|IUmB z`ayZfZmbFsByuF}B<&?oF(UJpO(r8$1Z7(E|K0 ziA_3D+D3Xsa-67$w?|oM0`OQE$8Bf2)BC9n)C}6lmgehZWI!=U!Uz_@*GT@6mX;-@ z7U^PQ8#W3#0TyKX@txS$^nI!+HJw^Y&t}i@-!c`zaquPdZ(J?uA&pC;(%I57lAd@+ zv;;B&^Mv+X9y6czP-mzQR36=!l?u%P8Qc!l;**Fal77-l(v8xfX{sNmHUJ_6sfzcFkPj&Mk|O9)~=x*yslDus6}$YiK{l#Es}kJtd;Nqh;K5i6F!`$}p^8%b|SQpA7w zWwZ@k11KkKWpB{msY}#I`WZ8uD=U1?>;zsxUC_PwO-T(IDZ3==EOp|4paY>@;%5Fd zvyXb6E=P5yqs&Y0olqox1h2slP>kp-eId)2{U<$2Y{A+f+rfV`Zf*wiH|0tnr-m?F zxqCtru^o^H4u&)6IpV7{ExRr&Bi)C;KqOF}m@AxQ$J1S@4b&leHJjomi}OJi>Vx>u zyZCBJQd&dyTG9ybfxHGch?9j{9L`*&mQmB`y=)iZrFb6nKyG*d+6b>BNlTZ?rbvDG zP2>}}LOd=U=Eg8Hsom+3)OUvEn*w*C9>{vM1k)0~iHVYalA%NcY#-bc>?Zyrl;wA@ zCz%zDhCRuh7EX#&!9qxnv_QvV8}U^{9m#K^5e}opkQZ2+dC65^x>EPkw5l80Cw7z5e~8`wDYGxaq&Jk^`3 z#ZD8}1HEAkJ5Icl+T=^+K3Nax349FF0Nj*m$7i#}6qCA|nnB%Qt(iqYIVb@K(Ls1W z!c8=lbdoe9VrVve7}%G|=PPp`ncB=Q2I2GqotX(d2ZzEr=qjua9>seRVSFt%4e0|7 z0j6YD^S9ZlOb2E$yMw=*sR|ST^TBJ-MFhuR5XU8FB>M;l_6lhPZ4>Q6A?u=#P`jxw z^al1c-&bq~y+xj4dLmn5kzSY9k`5$pqB?jr5EHs^3_X_mnch#8W0rHHG8V85>_Kj0 z3yGM-BTY+tOL^ih_7v_01oujWYl6wSY-*b4(+tC0i+Ppct!IB>yUTjCKdR30+u$VpD6A zP%@A_K`r67h|}S7*l@|;vbcP*A}MbnYe!T?WWZ|vJhPH|lyW9_r7lt*SYCJz%z~$4 zyCtRM?G*JCbL9u6{csh0K69QOMWvJfOH@r9NT#U2_`$$c_&ByhGC)3ADJuU|_K@2p z+YzTYfcr_EP30w@CiW!mBz@F7o&+zU8lp&YMK(uqS$RMimamaKMn;N7>^iDfsz!1} zqI;ruvN7f7%7Xu*VPdXqv|_f>t6Zu)A_pX8k>X4P_CI0*sA)Z9E9?{(zIEQXAq8$%W+6 zIGManZx)t9J+OunNM2jHU-e3rRLql>#d?8Xd6r(3^29Uboj8>0LD%QY0qfxN*fU8F zIivVfDadz8*Wf%n3V;QaZA*<#El7Szj!O4pCJVd3Sx9T_Bi=@`R*K7JN`Dahuut$| zV53mL8W}tNkb-ED&S%#P-+{Mq3EBa#MZ6~fNd;msW zl9@P<$e_+*DPcNSmPMIsbQz{T>*soA>Vgm9bEt?R1Vzl16cAl;9cq9)8JOS4Or(3# z=jfx%OzytW0C)^(P%Zw9cq{2G)ksGX1JU8&AHpYQ8#OT9JdILIXq@APy5I>!M&!uK zD%8q=qOAN9Q5PvAVyr(^H-X28#DV0MbPx7!W;;BJcq4DFR%;`g@2V%Vp;#@TCOaxM zF&>Fck5wf9PAsNu!X9|1q@uEe#-*LC{Z|!{>d~&^Ja%AOh_8uFiH?jNO}wRNXRgC9 zh(n6Sn({iGR;Thx0c<2Njcu43Lt@bt5moG5;yS%LGam6t3Y6EiXZ1Py(i)R|D|$6E zk=7@a(TAbgAytGVN7H42tN3-r56u;Qu5p$AU)3XGC-{<$CkMnPhtGu`hcmJE=|X-o z{7~{vHBDdDI74q%*O4BC9sJjHg8UIV8Lk?c8GD~3*~?%q@l+Ag{L=lSQ)?E;dtfU? zE%Pz~#I}Sxh5JTFCI&JXV8S@rNDXSJX4s&~$mCdkpnyG^YE90Kpy6TRU$G8Ub#V)Z zC~9j*8}1mMYyVaB#d`v$nYzhjG#t7Z{1WOHo1Na4L2#b})D1RjOsn*6Wdhrj=|cs` z36UqE^C32zM;fU@VJ!MsK2i7Glxu#cudQlNz`#06OSTNhgKI*nNIZ5mRh~D)l;o_s zkFkSgg;}RxBj=!2%yjZ_C>mH5EFbP3?G<;Yl^Hc2P*KM6wllVJ=772z?&b><&BDCz zk++IJ9#qF(r*84{5R>Az!EL*i_0C#V-(J=S{6HOy&hhW{Al_>J)uF!R6nY$}ll`Z= zY#D4%+1iUEvUyQU0kHOmeeDUtO^sDa9*O!=uh1 z9;_b9MCQe}rZ@3*k&m(;8s6~QRLXcq-Hh0uS(LsIdmLf{dxO;?_eghY5cdX3Nh!?& zBWx~je5f8tR1ldoO3n;V3N;Fkk35fx@#D-d=$x!Tqc%1+zc!ZF)FCcqx={?-Co(fs zI}{4NiS$n}>?3%tY`mtxfSJD-muVgo`I!mnNijJ5D>x@)j+~4=O6GF8a77uXi5WLp zaPvgXIJ}}jCRazdhXx1V2RDW9#2Th%aXIik>2GzeajPX^9;1^n>R8tLZ^AYoA-7#rvpc{2RmKWL^C<=@X z(Gf*rE#m^8NJ^`p>i;#V%^US=1@ z?wDq3TH(*Qta#JV!ocw0rw|jC#d;)D>_B*gyrX`ZrO=vVzOPQ9f3wHQ|3bE4>tJqZ zYj{g6ooXoLqW9%Dbw%b4)|aM{>Radm_A{9Zbq}@<3c-fqQqkjy3EU^-v4YbtwrsVI zGQC#yL3gmz;xodXf-QsBLa!q0$^EGWR|DxTAFBf`pRD6dJ5@7K4YxU7KYTw>KHv{b z3Xze^iKpEE&}B-eVViZEjWRK+R_HobAe)BT`ltF^1?Pqr#u}t<@eQ!Ds%wTKOTdbn zo+?IwWzy1UCb&5m4Ly%ki|vlzrS^$aiK^;%hBxNk=03WI5~r{}Q88Q;PzD!-Hb)HP z+~j4(4Q!EA)b2DlwplGfjT?KZe;i+16WLX;^eKvnVztINATx9|*3CTp&xQkMmQI2ePPUqOq~Lv9Y6SE^>l- zOBRQVL({?=BS>sp9H*uVwb3q$(>mPr%D7PbQ92atMvo!;hr5K{h2DnyL|4Wq(CdLD zF+u&sP~Kc%9IrV}G|yO4!=hs7UTAChMeo$SgTg*(YF>fV^nnr7-A$^Kf8S&P8oxBr%Jb2i}o9RHqF6&Gn65We=n?b25g8dIb-Luf+Dp7bFYmUcegSx$=j0 zoMD<_zhtqI|99joxMWpuHqh!WFo8$rsTsp$fsxq0Z5LaTQ$)$deq_>^1H* zJ=Kp;PRBN7R#V@|PvKp`OTlX4iP6`I!(2D?pkkY@yJ@odtzoe882pj$ADbO)7chi6 zL>2L0$?FUYJSPsSj_GORN5ek#X?&P)G1)s>J6tw=G(0Lo#5N@^vDcAT%B0~h%PsR6 zU6HgI0H>AF!=dis$C08aNd7Oel@0?=X@8x;>@d$ZyjA4E7wMj{Hlh6BlJJped$M(+ zIc3XauokLmhOqg)>6NBEu}m0}TpQ^YY8$Q^of%V+7vnnmIJikZ%uvBv-@3@qP<{|- znpQ{e1qX!Uk$R*p-Y?ONx{~Qa_%vJ0L#@}0)0BtdyEGoV7F36_qYm;{{6}H|RVQ-~ zJEA&Z#4U@BCsZI>g&7bH`||>Qqt6mpYJKuS`n@m(=Txr^M)N4+FI7IWnr0%+0%Zct z!eG2v`Z#@_Z6Zo>muiVoW?5tWsi*)xP1X(#_7(e#;kt>j^cpTBG>6(s5Y21jPIFN2 zkUbQ=iM>JI3;5OsCzEuVW=o5G(Fbx=SJMQW+vri*WuYjh^pEte_16loC0C{s+;;FU z{E}jue!1nch1YE-%Cf1D!oAcv+Pf+|GI5edGv{EJ%t_Mze3#MP&QC>>iF}$B&60q+n_-6Ohv|nd zB5B6oiI(;s1oPCD|&6ZkO>7 zLrQTH{3qEZ_{7Wl-h@_@4bo$|Nnlfat^B^`nc^cVTvz?2KV=e3owbLtS+pi>^=5gF`o@P1iNBb4Vh^mdys^fwKW;prw<#V0eG;eq z-8@F$++f#8id;vp0*6YcYjTY9%>}0G+P(zFQIS0F8uxE+D)>5@lQeK&kzvZw`h&)2 z#yNUcu^j?azXRtyE4?FvkD}8ObLfr0S4l6;1H(X5J7bAD8(Tvcg?4#5dj<#oif)Np z(_8sf=w3xN-CE;SlhGhm^ajqy34asMX5WzTzws97=}a_}!qUpx`o6|XhD+)en49ht zp5lGuWrCx~J*nDs75)NTEZ?E)X>4P>sSQhLes6TVx1y(fpj~WAYB4>PD*#$ZUTG-f zQd29vMA04WnJDGk?u@$s3B?lInJdBh0(8#9L zMXnhL5tOo>zQ|a{_*_#W$r6L{qrS7wT=(Zdm|RSa=S~CVB%`$>%rh;Y4Moap$Pwyr zU{cAP5{LgLDRd?Tf&QjjESXmbSJN3d>&C$_u-CI3Y zgR06825U=ZYO7cx)>7uGnk0IZ!UD}4JBk9XGhsTlfIkOOlHQub#t-K6rb^mZ_+Zu_ zvO0rBt({u~JrY`OHrRnc)U1IuRWRPxOp$)iJdIs)+Z~OZ-~ER8TxNinL}Q8%ddTcI z4%Y6HE){Dh96qw-VaXHk&FE&TOy(i-RvyvUv<|e+HH75`uwkN^7jTqv{B{?I-Y3uT z8^`<5+H7nk^~*o9 zxJkk4Vwcw%`%0CFVI~e9 zelNM1zc0V7!|yAKQFLqAp<=CIZk3#_RzbZQ>P)tD&djfq|G9Xe|5BnkKNNm1t7SND zADA=T7F3spp2e4WCKO#R$aOsN{UGIR9cZzvSl`|5&n|5nrzwIgi9sH$2rK+taxQQs z9%g2MkkqNQSk+m_t@&C2JD;xMuUuTIpkeW1Z+^_rTnFn&C+TvnZS6-bXS4>qE?q6) zDgIedzPO_2d}J(LAF3gD>K)c&S&a3EW&+YSb@2*K-?Dg;R}!nv z?1%cwGlr&F|K-%P|I(g8wj`H$Di`YW`NFwwZ}=ot1O8hXGIq61u-~vY)$hlfQmuT- zqH*~Riw?TmM@G^KXt3g_@lX3X`!h4DnTR%}1i#VYDR37paXUi0QV|i7*EW5~D$Xu% zo2;FOD3YH%6^h>%c5|HdJPG$sF9H8j#?0RAP!4bFuN9#fxy*H~;6;9{2=`Qp6jK6J zNj1b`&Hj*8U{Pr|pdC}UJU0u)d|OdZ*ZbhWlnnf!$g?ynHKTNY`!aP`kR=DYPZjLW zZ|vykdl?;0uY~RD8>!IW4%TCf?4_>56VwN-m2!vXcuaO# zeXe=f=vI`}E$QSs;QKdPj&UPFwb821UTd#vd?fwAo(e`v_BejI?)ut?_L8%?V?K(twJ0x`s<7`Lm7cGBjHo#fQOJ0v-Vo8A~6U>fHNgc?{l$|wMvQzea z!)$4om&Yo5CpynL8Sk!0UdkfO!gAD{v9_g#sl8?^M$lD)QJ2L%*Y_!Og6u^d$V|fD zt3Dc9nVT4wsa)`tRENMg_X5w@z?sM&i37|pXo~!VcAtK@j#F)wsKhJrA^vKfw6A?6 z6@Q$@_!_8QwMtLv_iFblijgYJt1#o4>iHeWkDX0zXYPvSC5ts*^|N$URgEP5!CZXHaZJIeto_Qt+wQ>wg=0kQhK$$-F|lC~~wLbk{Zc zvV2IxR3|~%`%5^*a@B5SGueFPD0eDRIyx_MI@%(B zIK7#J0RTNOy`X%h)XU%EFtmmJU!qC$WTbBFcYHv48~aVXfF%^0wWGCd6-&_XLUH;@ z?0Beus9tPesx7-WDX-l9q(cPsmOmxgncNU!#iv4o4Z(>8cxev0e>cwK3U1)l9B#7@k_K!n1IYv zOYP3wPj*T(6CR%&;d|@&R$R?BJa9Rl;<}=_Dyd~}jnWnUGZaxZ+q*z}Y!)E7p&00hg$LSq^5cw}th~B}-XH@b8i`j-hU2 zaCxj}TAMKv*R{pgDp?oIo0M&U0pthItCB32%wImbJK2l%K!+82({tM`%NNZoluTa_ zq?~j~HE+*I)zm?D4se_3u3coAXKP^EBVR4tjC^!8c5HH9@K24!(@isz@qEp7OTyN} zT&(&DH%q0x7RP!=fkz%$mpsHCgdWM47~9%w*gqN6(ze{+;hwHcadF8w-;?MX>Zo{* z_^f$hUT9lqj;sEJOQ%}7^mL%qS!(1e!Fg6_!1=uMWS3DKS++6oEs zq(AK5;ei9@=*d)W<~)8^UDq_v5;H1PT9`=x6TIPG;~MY182TFT%I<*+72Avpt%uEk zb}U}N-is3c%HH$dcm8;|TJi)hVnKCtliG62_(gReaZ$Rk&Kq;@^ED6uARAM(cttkI z2-$e^1Z@?<$Y+yl{jEHRcS~S!w05ek@C+}jeQzFV9cNrGKPEm-)Ckt~9`@D`oDQFj zS7-MiJ5-O1Z_KNVUsW8^ll~H(?ECJW6<8nn5r0a}&m6%oX%3rh7FxTISj8VA6@fP1 zd>;{p;yS9U&=1?Eu512mDb}lHxnldoGyk9NL!PO@&aqU|$TdVnrbn+C{#2>(PcxVx2HbUFRYqVrM)p&i~un`2#I ze`DUS`X3}suJ?IMDmkBen?)WbOSrP=IMqPYGV2!ePECJo6Fn-(mF#kCa(4@kBbPA! z5sNz8lD5ljg}NJfA^jkD!Fk2e#I@XCBUXyO3fkrM4PUHVZ3~QU87Uly4feKnK6C=U zixG2rk5CRfu4-)BXI*4IuU?OQOAilrbI){r^G*yq;~M58n2@#6_cebs6=>&3Y75!q zPG8J5%QGWrB6p^{3T?5D>K^9%*0#p#3ILjr9uh)4a(6kOCcGf7X68dz6(M6Ko6GV` zI}IPpzKl%qV(t%~DZxanIK40PkZ7UHShic68am7V%#w87?X2LABDGgF8Kp zw|l5%Op-jnc)`aqlfI>yF|JZK!^*O?qJR5_cy|R3M1{mExhacBz7H` zBVD8=%pP-VeGlnrUL9NLd+2`U=@q<5mZR&7Q;EG=)LO~bzz8TJz@JHTK}2u)Q(-lr-W7MJjm)Id{8f1dZ_*)YQyoqCl_8TA8)Z)JP$UczmFT zFHV=({cLnhx~EWp)zEggd9wlg1g#w&9^d8}Sn|`k%R3}ACZ5Gc;LEC?R%NN3Iem;X z@pb7Rz5<8Q@zqrr7(@=F>w!091C6D#r{v7DtWk6k8ilRS`^6q-sX#e$IrU0tf-TXE zvGLh6Z8;hQnj059>XIqWDZW7wDj{LJL(k=>jZoIJtOlkm=_=M4n&Nutu)10WF!Fag zEb#a(-8Fmv9LzRU{SRP{HFH75_ewIpNOV|QCJ5*Q^=?a_tm?KrZC7MTa)@tpN%xZ8 zo(G}MiCOF<|@G~B&3*qO95ZPBH=+S%<&-_IFpT!bU(t)5Q>Z2o!& z>1`10K^MY9HRZCJl%A4fHC7~=)BF9)i@xXoD&FsX6zNYD!S%IU><@BY+wU0y(h1y_ zK;NR~1)m&Mef1)pQZ<2~vbz06sob2&Cb_((P&3@4*z>Dt;V#eZ$jj9G%vIR|^SzwO zIT`Z=Uvw~ENbHR2Tvr<2s0!D4P&!vXS>ZORWM8^Z}^%!z87_J zUht123z+T5XY~bZxg1$mH~m4(mEPdjmy|DlS#sRhII5-UL$g$Mt?#q<+n?!cNa}H` z!muk^T*m408p6*Kt1~m@f17i&58FE%ugXgUK{DvJ7v~p;-G@WN6M0-WJXinPuFm1D zwKQ|#nMvCFsCaMDZfE1bALML$AM{Su$W|k_e0JP$i5SRS3pz?Z7u|OB_Gm&c6E;zh z&$H~##dDjRJIR}7#>SFvjbn^sqx;WbF8Pv~iLKI&v%kpRW<@pM;o{Vhzz5d_*EMhL zpgp=UHA?I+D`Tu`|J$Z8G?RYk8^?^kL#}GQ! zs@Aj08KQxtJv&R(&Rox`Ks=gHeS=qN2z%+=tgOcRDY%1%LyMfJimN%x`PPIdB->EkHk}e+4!>;gTX( zTmR_D#8eI7pkjvQPR_3EXGVqeKX!bGa`q|t;KF^O;O2O}OnZ481ht>Jc%Ld29p3*ApyxyH%rPL|gP4!dg&!o;*-tn+_w0lEvAlZ!G4#iZ*ZAd91 zyQ4lAUqcTHMoU^1?=3m&y&3M9Y73lGbhA{*-JDy_+F8+xUmg0-Iok2Iq?YGgaBpIg zZ~;G{8Do)WG1i6J8EBfahFg0iu72)(--K|LL<7E-L}j#PH_ACtVD zb@w~}+o*>+0S!{UwwBGko>kkRk~HJWM3%WW6pt=B?A;O`k-Q@OE2(36WxtqR+O|q_ z6B6Qgy>CiZlzeo(^c6<7QTL!D%IoH@*?V*J)_g^nmxo`J+$!`IRdbgPbxkDWvoKpXs*fgdRa#^+AQa-1Db}7>}=?!juc$l+i(dXj-+}lIv zlfQ+##7ccUE3edqtijsR@TSB!H(qEc80{c^cS$=3VwC2$ZD4NK>+ozWLH+R0J zNTy_Y-|d2%1 z6>W-U`Lc`5W_ek@PuN$oudqxp>?sUaPt6m?5Sad?jj`9T)X;1|rlyL0cS=5#%=2i2 zf5d82rvX@g-k6j1*51}wUVca%K~{4wEqd;teDh-S(gXO`Fd=Vf_{%2Pei*mPI`L1! zWnJHkt2-O{Ys6Nj6~a*Tf-++mW~pG=p!Z3?^GCwvoKK2}yOstP#@N(yelDt0Z?_E0 z*4XRls$f^CJ%PK9p+&Epzk*8=qnJ^mhM1(iWvOWEY;L1bqw;itf2gau>xWzJmqve4 z>%e=`#=29M%QmGsp{xM)OqTI4bzX5U@E!=+6Z_c*kX5cXw6LDHT+)#eTjo5u!uP>_ z$vZGmF}x?fjr)q8S02$1FugZ!(r%Zw5+^6N1Zekr_c!0nurb-4Pa=a9uXQ_&#|;wg zR9SDZb82F6ho_qd^p_2HOzh$6Ae8K-Ry3lfQ`#HSQ^5C>IaJ;ga-H@b2scbQ`PWE} zLZx45`fmK8h2l*+{2vx z+=gJUL>vABvR8grx5^Ay9Qt?i*Wl$;tzf{l&$+>KGITuofZvY{k+;zy<^>jyp{HUF z*gkpP-`w@LQ{(+#_-pEJW-7K;&T0-BTbkYap>n5qCBE4gaJpS}{GrG{so_FfEKgP6 zc-8#KG+U>UHO}Z_qWeopkt-{(BZg7cGe#WJAQpwatHrJ9fK{b82Y)%SlD_VP!C?F{ zdjYyH9j)zcer8>7uCG~ztVr$l*LG%?NZov(Ln6*?hC9oq>fDy3ZL)ccx)D+*CG(wf z_#GzCzoDARN8AxuCRgc?Sk_u+7?sMl(DIZskmXul^3&ZZ)H=D5zk-~S_t*6?4Kxoo zHdk9w6;&rV$vxb4(0$ndCYE5!J9ETT?drP@yxf=w$WDj;8_!d8|T&bUKs$jaI9U@uAC!>UKl3VZH z5d2LpVm<=jvCHz5hSMJ~c(fyA`$T_yu)m*M?imqyPrhSKP$4!%wo*;%#~Fv{=E|bt z@`NIw@(l1&!2sEWjtCC;n>3?dqBj^mXxGR`LPhD9;bLE9-}s;__Bf662)GM-CBLQJ zZLDJKuJ)pn8BKJpKjOO`+!Y(1-pP5zd}O6Gq>AcX`lXt>l4-)#_{NYfSSMtNOeAYl zZ-hzkUSf;#5B&+_cU_+BHsDXcj_N{(f*->l$lX12L(3zrw1i5ReAwG4(=vvs%v5% zVE$Y8L3&R_Q+q={y;5JzP#-d$GI2Gbb+Y~Xc~;yu-Ec-aUbsz;4CH$M^fG~DtRnTN z@CIHbbLehcx>|c1R?2>5Dkidnv%DL<-vVP|RJy%T0sbths;O&wZCP&&DHcNG)9%n5 z-!xxIATRPY?x0Ttb%{R8B|6qRggb87wt4axhTdKPIp_axl4>+W?W0ZJKK)zzUj7DkZXk{u=4yd*)v3{Sn%iz}Wi0 zKX^=)H2${Eu@2U^lkl89mh!%I8eAdY=vYPio#@1^YQNEFD{C8W+#)Z^bR+M12RK_g zYk3<)UZme=XtasKp}%KcZ(nTIsFp*S)S=)*SId&Pt8A!o>Vlw0en>{CM;jYhWac~C zIFaJoM^AcAIIp{F1#O8{Top)zHq_MqxOJ*5a#@Eet!@VTXf*eodnJv(0 zLZ+6Qwpvw|FPatTNy-sg=LNi&|9i+A_cE`=9%yZOTYVR+%C^Z+M%FTOK7KWD%Jal? zDv*iYrgDT@kU;!a|2D2O4>Lp+bKvfDkLVwPqdwMuBYY`Q%+3H0VlCt|b-X!l-lfgM zuW*;*i$Ys{4)3x+lh`HdOy&l1R{C0v8hxgOKBJg~EMY9MA%TIu3;yR}f1)DS4E%_~ zGP$O#p_5^iMk=iZv`#+{&+!S~`=KStja*V(1fRmI%d^yLw3D=Ll_a{9J0G7HeiCFt zve@0^KkP{0Z)70;Mk-N#(Nxg%mk&q&;J2qh@c$G0L-1>2r$VJ!t-YdtA{D`*j5HC9 z#6pGPzv2_=MnWCH3GbKOQ+3qM))pzs;Zw!yR6DYHcwGpN{+GPTd4O@S30on3s$8g! zEB#Uo{h#nAwIZ;lctmzhm9Kg&8;|thC#Sn6 z29rgxnF)^Gkr@GY1-n3Nu-~#?s&T3*G7s`wFwsYoixSdgx%52d8DAsQI&(=3z)HzT zd3!}8`7fd&e2DKvVX0%OHnhl|;Oep$=sS#3e2pzpj8*qg-ITq+=7VkdGn9~Qm6}YY zC?I_&If1&A$-|c`n`-N6OR26%x1+1Xr}UV_K5|)nOJZzdO(K>)kU5IaS1#3xx@TIg zY71cmD$&9CoERQE9Q&87pO8~CGZl$l>c0&C8LH~KsOCs2fl=yktV4Kf_Ab*7yhYv=~u_f_dRK9Qu*)46L zifKXPa^oM`pTr8Gak+@MH#Fox+~A<_8K7FJ^5z@7nY^Jk-*+={h0K|DkCEZtj8EsSf52U4VE!`wOGj@<{oy?)G zFhTBGrX$={GFkOT2ODZ=7s&`X!={q=$Y5+U$;C$}rRgS&UaW=pRwea6j9z_b)ogr& zXkeBlo08^eFfxz~BzM!Zg`UVt`8VAS6Jc^|N6IT9les^WouX$$!O-(4lNdlJ`NvRq z>0V6>V<%IgevWDYP72dg)1os&=Rz~0V-lCC1a}VjfgM(C)ipGgGOf@?CELVT>5Alz z$h64b*#DBV>4{v8%t1&md8V4KKV+Du?Ilw~PDYw8l9l;p{uD}fDO%Dpvot>*v*(S-XK{yeU@$@oQIXNWt#sPsuBd zJg!!@*Yz=M(Um9%5?LV2^hk~(i(>Y8`(&rIl77R2Ks~&@a-r^*VV}OEsvI84T%v`f zA`y*mNwi3&l1tJMI~Z6(plZNS*O=CBkxS8Gnc2+9^w?xFUO&Dw?n>NEzvqgej#8hh znl7ljtx3x#V4Rp>b0}SMCpjh7owOuxQlt1B_?#5fyw{I6RM0+^HAQ*}Rq1WX)$sxG zE{Q*qM5-I*R5b8LT<&Ow>%YOk7NKOg>EYWSWYbu-A(Ay0(VP zx^k-dL_4q!SCHSvOTT(+kP5;E;)fFil5E@7${6n`(euy25^pD(&HA&Usx-Q}SR`7S{F0bJUEux(Dq)9ZD^&|L(=}UFvt&6aBZySzv zeS`)$Nv1W_4Hsk`RHxO$RL^Bwuz!JEt|fIbwLMjms*`?{rl}bFOq`9bmo`=wtA?pq zxkl0xX(ldXKd1L5pCvjZ_ol{D_1VRlR)|DePT5JlQoT<3TPnxO0+U!E-92$9{xLB- zwVry(KFm0vA$UxdP&qXN)Hh@oQKwjudrM`fAEg{AG(9VAq<3*wf!UZ#wn%kCy;N0A z-T~)8tx$$plFm)ZQ|k0VY6x?g+a-QN?9%4S3+i6#u>1u63S7%yp*N@7rpr=|XppJS zU@R_7g`N=!MRWBz)qeRe{6A=QhUZ?hC|ifo&|lJn(_N_gYzwg&x?MU~8C88(MrD5x zrI1p<5&kA)p*|<`66+K8)DU{9a09L;J*IMK^}3Gg$+A1B9B9O?pbjVR#e?K05=-n( zn}vSpEJYvPRzo-a3Uzf^3v`v(hb^5>$6v)f(Y>)IiF$Mw@jl*Abwd}_&(_6NBV-2b zFQ5%8Ca;j=W8Gq-$sdW1^oPtyY=+{7c7(yLzo9uSABb%dCo=YwC%%uAkWq4SvMXII zyhkd_wc20$KlCwmN4XK71YYB|q#wn%#pvj1a$HK!_7vYCt)*%eshOsItF|jN|Gy)? zCbch-Px9oQgeTpXB{EkajDQrq)HOA<3R27_5cq;{n)#D@n2IF%WUur^`Uv-z=zp~ab6+&p?mdP!PA|{*!h}(7fBN(GL^Ejs;jb>EQoyp+X^+< z2K3LgJpDbjE-g^!*=FKXgq9%6Kh;&#&6KO8J5d*)5Nzx*DlgR{xhI*IzQkl_cEdl2 zQ}TS}3Dq~HMt%i<34IlgF#n{1)W69(sVC`o%+Smi*e3DI)v9r-$BOIH<=B2O!Ea<< zQCHH+bgy&?^?(g!9572{DLSe!Ri6A9F$Nh6)D zvYnC|IE0)8UI^Pc6I+{kN{h6Dt;qKk8^KcipyZ_VhBQ}tl~{#6gWm&{GcUOkW(WNT zU4uEpg)&tjH}V+s;@^l(lH-!@L{Ib!cp)>JkFzpX$p+c^{FclHU?|iUnT{PJ4oKb+ z7qEJW8CnQ@$}|^ft_jzZtI0nQeu=qIbL0j31KWdt#0TKDvBgLm=)4FBx7lw@clH~n z$*cudL3*Si+6&u{pC$GaeQ^jq23E~1;A*i=*eRSvxSr_;NT8eWHnbz&jaW`lcq42S zTn%_2)aM&<*&M>J5Qd0@Kpt9x6rzW*|FEst|Np1#fY*X+#KQu^>A1Vx4&lAH19U-; z;Q2@e^arZME~6ii#c&lU28T+ZYHouI|A3V8>w zflt9wqz_UHvBD$4-D17WI^nCpWcmTiz%CF6ErIvJE#W=Ta_A={KwF?0pbV%WmJ@G@ z_kkD~fpB;xbQ2`NrNAoXJKkzM}f1!rQlKUC-@xP1x^Onf%n0; z;BD|J=m1}WW5H5jMX(;I0CnJ6Pzn`--9Z6p1ik@5NCP#5CPM9?lOO=@0G0!8pgOn% zOoF+P9J&q;1Yd!@q07({Xb^N7bOY4@w^#F(HeCbpBw#I`54ZB9HfCw9`YZQE+3d9A8bRp(j% z=R54R_M5%-uQSSz{O}&!1h>LHa4p;nx5HadM2*njXfs-c#-W-h058HD@Cv*DFTo@5 z1iS`c!+6vf)kHCaqtQ3jDDa(xDrlB3s4o53P;1D&=h4qhSqL7tV$6VH|3XwxgG51$qX%!Kbhdnu@BS_wXpZ1Fyl$@Cz(~hNAswFY1Oa z!(uQU6oR{9b+i^8MTgOUs2>v0C-?$>g9dcLSMWI83y;IMFdtfpGLacSKn^qwR)^(a zL%0Usfe}~+^+B7^H*^DCKnKv@NJe*IYnTpxfqbwtJO&G)Tr>FSR9Fp4 zFahp>)lm}^fiGcU^brlmGjRqgh;G2ka0{Fb2g4EYDEtLwR2gkRA>>E<(Ku8O-Gigx ze0UaKhreJsG!Y#^cTpP3MnBL#lz@)G39uGS0qej#Ai%qD1saQ+a8tM_t}i?2IJszwBdi+6t^80#oLhy9fFsj6(ymM@Ga!gD6|p{M9ok!^ch}< zN8xrj0QQ3?VLr4D$+!jHg6if#j!ECSsM8ieU50{|I_%vqt74Cx1 zqv7aJ6o)>*C9o zF_;Io1gF^rRv#3AEzmsNo7=)AaHsJlycVmdE*cN-0TWoxHnK9H3ao=1_!g%4E8dG+ z<6^i3zK;AbKkNh&!G16UmPMz~7i7cvv4CHpo+t};g8RS*@Eg>HlOTtVqwzQsf5PkW zK->-&#BWd@L?yvfG6Qw_ynGY&*5-X5x2w9_zhZ%{y}@tdNc}|P=DxzMd3u446nhDFbWkx zHP9IJ4E=%E;=_0oE{iuHH>?BSfecU;_JCdCba)U(qgm)8x{Dqo2d;?o;UJoZGT>Ht z8(L9Yv;dtzkI)me9A&^J@Dtb$&H)Jjf{)-h)C_0hA>3%LHun@)!;6p`PJ#(=Gbjqa zvK%%D*x@sH6b;4iv4;KlC0>Es;5hsn%|chvJKS!AmxbbznPLGw>Y@fdrjIYw>cf0l$#1!mr?t;N9pv zECC0D6KoKh%r>whzzYn>;bnL#ZiH*$1~`Pap})}*bQN7e-w?nz(8m97$Y9hlNSPK7Jfm2tR_OL5^`>Z>smztwtHv0Zf8B(MRmzZt~@Y zn!+nS!rj2D(Rz3QzDKodP}1>b3zWk<5miH z#CoJ087or$PwpXV2o-kGn5y5=?rN>{Dn>7M0F*}m;VkYr|AIfl&*D4sCHX_#YfMoQ z)Cz6@URIv1H)+^Mmuuxb$EIj6uxuG}+_kqEzz44D;TvxQN zdROBF>kNOP5Prfn=I8Myp{@|*NAXLz3Ai8X09%9BY|H;kGaq!TvE5j~o&Xc7f}3+K z_*mhXU>7rmDncp#9&UiHgDGsW;nm0KrSbr6Elw0>^Aouq_$%xH+{PU} zM_Zsx(oA|p7uWk`X%FcqT1UI5&DZxEIy(ao;3a%D@gLGdIw@_Fl1Y+Sl#jwsK}Vyo zwoVNz7WE%>GnMp!(G?nazObBlrSWoOd5lz=^c3Q`R2X43jeXi^dP}A1cbcu0Fy^!S zpa+WKuJDD$>cmePOP|Oav70cSn~Y|GX~qd{5&fmUQzz3J+A_T!D+fE_KlyJ$O;Smk zE!C7-k`uxjZUmYGei`%ij@n^*l;+n$n$@Vpu7aT`f-CWDg`(nKF`CpQYsAsQCoTam zgYQ^n1L=9ReRL~*NXKe>^ct)HY=t-T+2S0jshnT#AeANG1)jfzdV>l^D=l4Zq3%+* z(O+5-V*zUd|H75{*+L(&8aYU=lP;u<_?G9m?&t-mz>e#eHM4eyUZy#8q&7<*&%VI! z+;qW03QOsdDz%gP5MDI6iAZDb^(5`L+D=`guB1=2{Ki7o95%uI_;TW8Vv^#eP2_?2 zQ5etP!#|(^78?uo8(MWOkJeYq(C+BZjacv!KEQ+cr-Dm-NZLs4q=TfQSdJ%H1!1F- zewn^jXR66+D>_qaYV-jY5#}A@4)Q?iA{UWsOQ*%F{9;@mwqkem1=>AYkrtzu=qb&o zC$m2A8=A<;LJzSPIZ95G$s|+!C`9w==m$t(oAf@~6k3w@q2K8Xt-hhL_b`GV@r}ee zq=GbAnkd~Mjl>RoQ(PWaW>fS8ttdUEW~is=9WAVPV$I-b?B_3vi4vBV$xG$k(iyQQ zAB|;5jdU%dx|LH(w93=2TC~v=d_+z8^5Q4L%a>$LE+Y>oT?CFh45zahI?^KQO!bwz zkABvM845cCcjA8hQDLfBkQ^i@Nj=hEtSh|dbYzD8Sqa0e7u1f?6Es14qV3X)vM%sC z_VRbdSV@rg$*1LKQe_e?%*JV8t}#pttF=_1_EsCvo7y7d8YqEB@B_tk5|I|j8|4gX z2YDr&;`*VIpqw#8GtoinbhQvIr7hCE#u~5><#6wW>Exj_NSSLj`JhWbI>PS0wO z^(rh6EQ3q&6~uI6mM6<)zg;XNm6G?%qvRXXFw#d5 zxE*jD+pTN#iP}tUqlz>}tE_)9G*Ago;pd2=pj1{? zDGSsc)TFzNI`BR2EzBYf<$k7g(D3>BfB7>BTs#QzV3xJ)d z2tQ4nDkYj+rUxcu8Y9gW^YPVDX*NhJs%AtEMA|BA)M}bwykIBcVf>co$$9CFY%`sg zA4qLTUST}G2|60>v|nn1nyB7X&(V-J&WHsr$gs+97jwu{DUX~jIi)9}!q35BkZiot zCeTyrB2`tN(0kffy(UY96LBUll1b8VSu%Z+pG#TdKYU(%4Ky`UXsp^$X{W@hHRx=u zlF=5tM}P5ui>0K=vdNSor%P=~U%|v}f?ZiVJwVIR3+frQ0xhi#*7q5eKqK@ocUEXg z=19fmX7U^9BzZ18(pxMEVU@jtJTrh8#BNq^qJcu5K=?pyfo2eqzX_7wMXb3u@G2AdAj&zV>jP%7T|xOnIP6EsQJ`B z>MXT5eMK*5srnLj25LCS&l0bYwUS-7$;GA1qMtvCi^4O;b!|BPpl(wisNHBSZMI&3 z<%47JT)wGzh|H93OADpv&>v)poRi)?C*O4%%@Rw^nFE{*%VY^JSm(mMFq4 zt{w8QWc?ofL+z~$Q<(BaRp}=E1DlLexv+4O_@({wUAdH;P2$8XZVE~QVZE?+RehqY zRcxw-7S`73{n!Aw3t#8gh`Hp2)L9-QpO*5Fe8OwI0M=$qD?^zwM_H{DR0&+DHIddQGhe?Ww9t3pI+i)t=}J*hDx5PvPr{+euI9 zn{-1WQjSJhav{YfusMGZTML-n~1LP4@f z>L?GFeUd2k7OV5=Xf(hE(gvv=lq$*-<+)l{`>N-#TBr$^BmrC-EIW z3Aco;*kAe$x?6?nP_+t8r{A^iMh#F4mFE~gT-;11NMEJPl0l}3OZa}cFPz8@=xKC{ z`arR%-_&UBZ#`su1h3FT?wZhoRFKX~&!v9SQ1VPz!j(jy*h4*5Q`On(WYtbfYdiJk z>^&%pmg0E+zEFoKq>5yfS`k$sya~60Z)S*_7epRFCA=+ANp}#V6fdyOmqe21FO#*U;G)0G)%u}EsZ*$ z2Fk=O`5(e8vPaf_9b;qFZTIEv#9MB5WA=376oe{7&Jzc#;&6nn)?+zF0#j z!2O0Qt8QG^PE(J%R(+$+rF*o2#&9qfP2gGxezC5^q)u|I+)0WiMTFH@fV+%o+9~zA za$1?I-lFMR9^(PK1#jX-d|0SUx=9IgK6!yugR~I>cp_}i{?+Shjp$d^ME|1=wTk*b zMqe-%4dOERPGVP*O$tZ>GJ^CG5Ar+kU^t#hMnvPZDfAE>r~RoX85ULrY=CXB!VM7q z5&tGG@{80V4aM(#5PyN`Og6S@M`;qZ(1Fyc#p)A`(x4vd#nlydh&xFqDOs8-tt3vd z3||=Mg(54gKcLUlN$NSZAMK!R(hIQwc!M5syM>~py7XMiktRu<$v$B@*AKM-ZH;kS zUfNPEtL{=K&~@4ueH1GP>)>MiZ=oCMD7mG0d6zVmtPrBPBX9711md<`R$-BpS`MBzjoAp*Exj z{j3pVEt?0|;Q#nO;s(+|IxJn4T1c44!Y6zVZem09wREJIu`n{4y}i_s2l zqELcNmL&OyG)}rg8jJ1tD0~{6G19bwbfwx^y{{gi4>hK*XJg@1T!Y^(>=XYYhskZS znmiY02^Y9)=mvnSg`Ppn(rGrBp)1Yg~I2Vt4g)x=g*T98g-Q zbLb1LxzP;FK>fMu!c);KU6Z~`E2I>1Q2fa+#t5bx_4IU_pQfr+=qI{C`$zv~^aW;g z6OZCGp)IK>ZI|Xqd8IF+!e7CYV0Sh}zeA6y4b?Gf1)4{zpx-w>gJ>-A7lhiRi4>MN zd6#sK0P!8S2z3R0jKf+DI$Z6iW~<+6S$&;h0~g>hT%JEKTorqh*Ca~%M1tZ-VGnl= zT>vMHEbSc4R?n$rX;H1F-orS;`oQ+MF#k&Miw6mk;-n`eLmV!w;ntx;V5jj+TR=am zin@SS(@N^qjI-8-SeG>UGeT{NJ7&~uC~ zzy){V5qv&zCTS~8mYh;W@>+=JZI}Wx>!fp90s3BTM#D5!t7+V46JQN&j4M_9v+MdQE)qo!U^TSE8H z>YA!u(Dxd@*nC(TALb};65olfNH5|bZNwm7gR6k*gOf%BUDA5f0W?haX{+@&Mo(Zy z4{;Cvyzp6kPGY3HqzLf}z4+0%Ega9j>kGBjv@)GV+h`8mVH9E0Ky6fr`^}FM>ytag zDIuvpDI^x=@1sp%o$*s!OW&$@)n-)EB)ys8WnoyHbMv*tB(jjKA=3y)yh0nkKOPSM zVQ=+G+Il*ZrqCT)FFl}V8f}0Xy}~2;mjX|cNr>c-Ib^Yz#qYx<;U^E&7{W35k;NFxwHCCKT2akIr)sHs7nTO*qcYqD{*ACltU*?i z=>!v1Xu=El7T99E(oWMFvFY;BA(!*U(bbl4?oyks6{M^mJnaYN^ZDw_(J%1WUi{wt@40P$e{oVZ+CDesoM$eB`psi(Mu z>kn7=i=*46;%_VES%qXv&ewkW{`YZUw69ztl2{J(3$f9x12#=~;a$ z>j*dD^1>2gkzdM1OvmJH(p|9*zX)AmW__GGHS##zI&wvsL=|nEQ5^h%HgdX9Q2HT% zG#xf|mRl1^IE|gKsj-v}Rq90wL_Co}>N#rC^RmUT2zOg>NEl>SRDypk{*p$UY~~%N5%RxetWca=3#S`%XlbQvq)DWh zGF~-n@AXq`2i${0`~WgQ9%$-rnl0Cpwu`O#{OGaqo}N+;MfyheMs_MpeW?{=$6-zG zyHHSiF26UuFm0Bvk-376TMRX0yjE7d8krJVs0^Va^i+efHqbyhTrshrG(M*(O*Bci`6XX+jKnMxGHvTrC8-!FVS;$dYv*O;zuzgXn#2q49*>0bgMa zoXTw#yy6p5QF=tWiaq(txCR``F6bq+0yIb6MI+jJBb5a~6zYq=amxjXJRo058xj(1 zyoO@n0G6xo)*jO(G?^~c7U?gIE&!un_&Q%(>`oZL(t6TbY`}j(uR#k2jP+UxI!(=1 zOKA7>=Ikq&fj;9h{5&B={6P|>sieBNm-k>BB7ieGXi4;oI)nbBJ=A|0Ue*+*p*>u0 z!7ctGC8d*Ow^%^f!Fkaq(8VaGT~&vw0reaGr4=)-ux9W%+Q%Ic))R-kQcjg-lF0(* zw!@mtqq)_cN;&1Jl9&Fcbu&7HQ^?LIh@Z%4xr}MM>>{Ux;oMZz7y#ojb*gG45GkeB z)m9tlz&uoi^YH(OUUF4BEo4AdPmbytR zNKi=Q&Y*+fvB9*zXk`_u8`LMXzg~P$I@oZ%sMdlWQv0ee)S_CVF#y~|>$xAi zC>ACma+aJI^9p&mSX3O8F&1c(D5gA}NV{lZ{TI6o|HjX`I>H|DG$|+zB3p%lTxrx9 zc#M8}4t3HyYL@zpF4ZqHAN+_H^WTM2A|^k?%A!qJ!`(x#z&E43E@?e!9y)|ZY0dQV ztR}35HExV>O&m|kleXeD{v5smmw?5rkg-&2Ps`Kebg_0vpUSqti+C-cD3&E-$ZK)F zaFE-FvcYgx*%+)J)?&2$nqO;U_*pM_5>?{1@+XA~Vw^ZbD8kpo&0t4*!5lK?WPgV%T*f*$5hE*lBPAoT6!QbUy^E3IkoDXa01sn&Ovc|?y z{jzR0E*Rfg3@n9O;i}wkt{vZy|HO6Wo@0z(z%AemBW$t}Zy5S$qZwNdQlX4}_$>D) zzlHC_@8Ndfjp!154z97whG=}!%Ni$)Wh@s=M4NGG?gsZK-%*<%dUB`nJ@gj71b#M$&0x#ecIE&9@DR2}%h3%Kh3jG~ zev9s-|4@B&1eS$gz!Fddh@cMm54;EY;1`&T2I57yJ1&dYArYN|3*bN)122M;U_aOh zrh#NoABNy0bP8QV&(L?Y06EchxDIxJC1FX}6^@2oU{lx={sRxgb8rV-4fn%sa0$E% z^PxY{0MrW=Kqui`xC5Sp|63$n2H!wg*c7&bQ{WjGffC}812sn7Q8)Al%8x$5flz`O zpa7f;cfu90KgUB;#Oyh1ynx^Rg<$|;DzGVGrILTja!*Uo4k^*by9 z73JRZ1H}piknciWz9;SvyRlKasI{P_=q371dt!8lg}CuTWg<$C$Oo~ekc;!cCPr1Q z5WTIYs3Yhrtt@jOjvpn~m4ebhNg%0wJpRCbYR}ZC%3{T?HlXG7T-F<(5gJLzbjXw` zKOskXA1r13Rxd|(gtvs}L?m^(hCn-RKG|#PVENaw*F0AKBJ@E=_3KL2@PEO$;M3r` z@Jh8cL!$q7ixxFvCCHUo!9`*j_nfRON@6B>PZjV`r3orn$K&z(hJLG|u1Bx5xLve>!+R zazSs*{gx-#Z$!4V-%-uAwZfvaJwo`XH|5__}gb20U!Z`krn zr{E9uY_Nu}rH8qJ_b>nS@M%4UcbX44%Ejc3eHk^~+Fm@$vLnp`E4;Hjxt?fW-oTge zJ$)$eHQ#g!u`^?@L_M{93!}y5a=73Wn}RAEa#nEY`0jC^Qh@7dZ(Tb zVDC$JYtI<(7hmt-X~oMHiOJSl(G}u`$8L5!lj^}4O0s{V=c9X$r|_j|L4|ooi(t-uW? zYWs%-cSro%NVJ!Xx6XAwh}!C4rmoypt$*m1udjEgcY&`{pl%q_C+sdi&n!64L|=%q z+m4F2+3X1RSM=CCKfLDy|AyzP6O7iJUv6w~5p_1|p1q{p27ZrJ^$+(rJxjes1KFWr zN|v?=#YrV?m!j6jJd1Kz`|^V{8Yt{p>^kLc=4&2|id;}v8Oyn`ru&Yfv1ekpIv>c5 zV1vjj?=4qnS0#_r|8FoOe3+)gmXd5=7u_zlOY}VJ7rusO_@B7u=YDn{^LGfvL{im0 zV7fTKGT5Ht80aiu-yqchb;9Gk>F$EwCjM%{+o37S4x=a^Z+d3kWbfq2v`sQmEYb)5 z=AHqbo4#^ESLk6RR%-;;iTNyd?C+h&ogwRWah0(lxY}*x*77KRDJ&>kDFH9}Wu|ww zw$6W@x^01+il(c`pX4f%``cY3FemI%F6!HHTe+s~Uq>P5J9`DoPQhmU4r0&J+{*3+ z{;}a>ia{5E_Tmyt2}fIJZ%35%FLDSBiL~~P%dO)|@;^kQ(b=bzlAu3TTk$U$u&_{p`BJKIJ&3pp2CXOda)vD!SS zcm}xkx!!vZg_5-TaES2CRKwod*~(Gc(p_8%x6lp2Rh~Ys`|jEPoL}!9u?KT~TYP^8 z%;616O>HaKC)6|_u`RUEv`&@l@EzD|WlHd?Z;UVCUmc27QfQFX;Cst=EcI<4t$&%% ziDB4M`!jshKf<@b?+uoZI=4=-yr{GU2flRUtpOkz6F4;4E^>e`S1Bx1h<6uD^>LTc)xVk+TJnTk!zhVO-FC& zoX{^{iZ`#nN-!oIuXNMG@D-V4z3SNLylD@aO#B?(6{_wl;i=^H``3kl@>rXLz7dyY zr+t;>gIu!X!+m8B4L#@RemmJq^3ry$vLhN~Dv;VT^4{zx}x9~d! z>M3xmXg6=S0{ahJaf^lQfqzhY=%nwacc{Nk=u)IK1*{FXRoZQl>@V%DZ9C;0yhv{n zi3@!2w)WKv%nT(cC3GH#NoPx{?XCTWEzVp_7{Z1r8G$Z7(RbHhG&Ci`YZ9C(^fFbm zZFXF6bhF+P8-tSSgWz-DO|R^q6RZ^Zn_gvQ_`hUi?PFK%%dOp{&1f~v310PSUfEwb z=nglhf3vCFV5zYspM9RAtbL)W8dpH;9E|g(xMz9i1eS!`sC$hDd_i*o$MmR`&J=4M zDGc+g)%_OtB$vrc1J@#dYn|ao5m>7@H$>fZyfdHYD;TT8{e4Z{i`?&hS)mzfiv9u} zlkFwSuAwD`{_}oukM}kWu2mZ7A3#z5qx99%+MZ<3Ybit^I!fKa*Iv#2 z!6O9rMK0)H(N6NW6*<>CpV~^xP4Q|iJ+#6%-otyB`X7h>Rrj;00<*l1x*7ArS>IfX zb5V29;hp8);6Cm(1&b=1jSswJO^xQ`lVc}1j*@ytV(^lyYj&UP?yeucb>Z>)e7=n} zE@pOo%lIzQVbe@-H+aLfIJ-r5f!w8@#=(a4H*%X=MX$^wB&>)jXgP|CMK-u|GP`CB z%x>(x7k;JJ!%L(~_F(MFJj-LNTR)uJuw54xN&a$k&+4Eg@{1K%OXef@fE|1P1|2(#zJxzG09S-z%m(DqrJ=3+`zgQW; zrt#lQ2OM9ceNlaEG2{g68M)_ET%&WZxX$?!B3JZ3u|;y)=0^31-tL%hYJ*GAmVxT- zSvjtp)gC42raADjSlwdSk2tS6IO|3+9u!dmzO>v*IVIc=1C!NeERky{Ijzs_F^*r> zJo0J0S+j>acr{lc_YmKxa1(7Z_{g1-=2;flM%s8wK~e=4RpWzYeDPkFcUNF)N61D?qJ6Qgl{vrI0jAOB;qU%d zz8SuGfzpvun!)0@9;B3ctF?pGZjyw*zU853+8`D-Z?$c(7qD(8+h9|AGnC?g=9}bi7Mvg1rR4yFyG2TxA6fg@ zE}FB1Q>?b41(x~FcyIZR1bMYGtHDht70m5zSM2w!eWiP_h`J$=>Yd_U=2HW%2r$;- z9FoV<&bHG=EuW5xTDq0p|p}<(Z>)6mkqPrQt$a z@8B*^MfY7#v%rf;j9v^L6Utf6I-;VY94kySa1^~1sOsJC-r+X;l0zM|R;V`FWZCSP z7}dd9)Y6BeYW+aSlj1JyDesF3HKGOJRB@f|O7!;1;|e0~OV2V3at*dN?XBriZh+xg+<9h69bg zT|LR3;XV}ds6D`QKEFw`6^%OWEM|QttTcLu|M4Ag4{!zCqXQLG403so>6bkzYLIic z)j@u+U*RS`;0e2bc&`MTs2+oGMWtz$()Q-|Cl*N>hsw}?!BW0T-qpTi!Ar_OqcM&r zlg(vqOKoE;@5v1Gfi4cU@k8G%Us~W%WP+Z7(#Zl#BU>TcQwx?y;3IT<@PTinSN6vF zXNN7i6E~53)+SETxykAwuiyoBWALX>^Y-)o5eSBh>r2rJv6%U%E!J_~dPI7UifFUK z<$|pOae=`>QJJXEgZcS;#9=lpYb`&e0KTqAA~QlM!LgxWc(!_8{|b)bAwrTg)6~`c zR?ZO8flIZA+XtP&4xzM2v^I^|@O|Nj0iVBUU~aH`6@ho^X0TWYTHG;Z6YnK7jLPAAgqP*a{$1*~HEW0ac&LEUS~z2U5mO~$ zQo@Ls)+V!2-Mb^>c-rgV`EwWfpDK62F==3wn(#1hkA&;?Dd?c@Q~Kv$HPh;3YZHI~OPJEU++N-k1`?iD3B*^fTp0Abo^;c4(;f89S^y<6GzNn!kNKl^?0&a!#Zi z|5+_KeVY2{c)4rEG{aQe~qPs>T--KJsZ?J^UNQ8g13ep~?Pa|AEje zwLW`^i<2MnAEsVXWj-&ft@I1t^RM=|3#{>B_~kR?1m_S0b6-jiFw^~5tbh_xZuB44%su-CBHGP}4eS|PB? zeKNPC%i?oKAlSzLmN(j}IR3WI6E7Ox&}Z)f_iOh}Z~NdL^*a>hn)bVn$JX-FYIKNl zLF5VMc5v_a4_935q0rj$-OzzA)# zP}D*4Bqw%>_gk&7xBq0;_uqkxLpjsDcS8I0h2kJ5Oz4&PM~qo&P9M2vWsFXrmYLwr z45;co^xixnHaT%j!cm70W%!R~c22vWHaP2tH(U7#R*CCuH{*^Z3h^%UFFoQul3pgI zPuipG3;t-j6{VO~#_&m(lA6WNkfthPc63V3UtiNY=By9A(SC4!EbU`XCvb_+qT{65 zYFbW8ituwz>bRWifz4V6ew6iOY;xkNgg>GZ#N82+gHmt*9Fq1hXH{^ZaYo3nPL4gA zXixmd>A{xZsjLQR*3`kj_1we37Wx@(jiqy3>%7Yn^Ep#+VsKYxRO+hKiy50;&4N$0 z;rwxHgV<6D3*)ERC*qI6ZaE~Q^zYr7_uc2hKaI&;5m~WMiq&GA)?KJg1`Z4L&2Q}Y zoQG@=#X5#9)Y3CQce!hwFEw;f#q1@wS3Y5_W3OkMCQpXG@F8zGcYXIwPj^2I^V%G= zUOI0p5LMopY%azvQl60xfgx@s9fDxp=j@!T-Q@F6W@@kpHBT!iETK&9U|*hsPQx zwFEW7<2CS;sX*QmWH9|q=_U813?(YXrXT5iUGL)jM<*-RW-ot*Ne9B$rb%oyOKX}djr=y!Q)%IK}0%`cO zXFzUd4sd_;52vqiO%rx>i(VC#VadxCP;xy+&hDILu4rG4@HxFcA7i!0hT`)?ZH1!dVvg@0x8XtsMy zM!U3U=|gia1jZOyWT&%ro+$~T=<0G`J;66Qt5y1<^sKD!-V}8c-_X7+zE|SdxI>mx zU}WG|cH`dz(_3U(Jw25+xQ3-w?8d}JdG6WDpp(H$Ii1s6r7g;Q>vkGw?c7N=U_^Hum(?TP`|1xVx`jB*(UCv)td&mv6 zUXII6+!1%wJeP@qa8~IwA#Gn)A^$;I2!E9mqm1~1dFDBNLJ9Sq>t*`rl!AeJv2#6v`zyf~}DWXUKML?=_NS~QZ$zR-#+KC?diptN^Yo6t}63v;7{7Io()Ewjc; zw`)R`?iciVMR9lMZ`D`CRFgJwQ@s{RWifwIrRF!+n9|%A@04UaFI8U^XN-mM$C8I8 z9<`29)eFVC7M4tZakk`^^R>WQ@ueXv{(g!xX`t<>WDHuJ-r`Qh7s`s7v$wd}kz&fhXRLX~1!S7&$9qWGT1b4ojJZuxH|Q_2dRHQtXy z?~tCx_u|$jHAqm!bRbf|@0?qfUOJ%siu->xTfq#c?Dy(q*4b-K)69>4=h<9Fi$f*j zT!}S>;uYOq>z?>Y3AY?KbjkA99;J*GA1wa8(peqHduW1|oI1gT-y9YC9I?OpTxF}0 zQN@Mj!@Nx+U$RH0cjJyGbc&x~xuZG}n(a(0HoSOH`jdNpusO*#L>%W6Hz(}3o>NT< zSGZp;z5Lu)oa5RSOd}U`mA0#iQgWK3P<=gg(p6dzm@t=Z8yvaZRkrLzZ!4+|9&L{GphAQXu@Z$5Z}h$&C_+Gf-V6-Y|UWIGV6C z{-(Jfn;Ps+<~OAk;dP!Pm63`}SFU$XaJvX;gO&!dckNG1tyJxzm%RHco|bwmm~UCQ9ND^U z)>E-Z?Td}=SV8y~&!dV5<#yK&-;2=Ou;~U_55)d%ziGV2R!8hU=Db**SGnHPD0G-C zFf_IOV>eja7#6UTkyPLH%17l#onQMdhxZbye`XyM*T`|yuml}y(yM;098#I#n(AF1 zI!3=WosIn}zJonmpDShtUU8qPXj%EYd%b^oco12vPqx2^-yiEXGV*ociR*a94;7tU zHQu42@6g%M+2N1xAA8cYge?mN+5Nde=YD0h z;w@Lcw|{V(_*a)_`#cV@Hgh5SG?Z4gtlV2BoZ9Liql_`b9-A)i4_ipLTHLMq!PCT* z?Hu9``Iba(G0C*Xo*sM3vQ0Bc$qP*Jyyn{K@_UPeJCvo28aCN}cbqamV4K33{=J^v zRoAO>e62$_#W$Ke<^lGL)?xZ@u`ZP9H+UYqH+nJyxzY9HUCkcTKHCSjxrTEv1kGNn zyQgb}r)TgOZzvhHm4?iiNiod~SD8LK$=BIwu3S}>7EIxinl{Zh8BvH$sm|f#Hy2d_qCoCesA! z4=$@ZQNF+QVnst=O{AXmfvH<;UY&f$Rs#nMmblNASCp-AF7X*6B`nX}H!c`I*gjal z0TY9_-8ajIm9=m!sMaZZO}?dlTyE@$m>ufvN_t?0yL)9z=Sq*WW`zjouGx;q{$RE1 z=g=upw?EBwu%g`cS@ll2RPq?BZD;JCn%AopJ|L9uo$qY!JniWjT*Qy5UFI75JzHnv zPi%$!cg-U2A1eZgkRb9QW1};Q~(7XDuCEIq{ zyjsKg#^4=q-71skfPYv>R%Gc5<3j5T%M`;?wqI^gQ{Owi>OJpw0TMliV)fU?pJJYx zN9r#!wQ{BAq4)KwQ&rji+%U+?I-RAtt!Yf6t|LvBb8F6ces;~SI$S+4`YBD<_qQCg z4T-s|se^0b_o|n8@~U*cuEAoZNIIxbHjglGG$gBcidK=78oNKmmsPC^ujj+1G5VS2 zho<_v8+4+Q9?l5#_Vx3v39O5p!emW9Q%j3v-lHkNfat8?jB1U4o_~FyB0Lt&wI|H? zEH?8)%^|!WnHc!S`?AO9&98Y^X{!3$;IL5Z9n)s@PQ@1d*gwZx?aA~n2rU#%HE)}< zZS}2geJ<5UU#ijj?|Mo+U8|c$(#cZof*75hS_kN}NP2jVKi%`NYJpGGY>{WPCx)+W zv+Zj0VO0x0Bh=Xc*geQS-ghAMfUi?+G!-~j$G&gA!0tyZ0lSx0J*-;n|0T3e)Ys-& zPB;$Qo*8blwX#2Osp^Z$xz2BWTcg9JE=H^Eq`lnov;HBii4^!ZxE@p#yVeK3AUW~6wFrs zWS#X>&3;oiU4NFz4}^~g{Ql?F%|aPUV|GB>$hg7KU1Op3_$Segq5FZtz`oE+N*Ot# zzM=1JT%oIG+xgvyK2#RC9_SmIAxF_gwOiXwZ`93HwI?2BVDwt3d2mf|P-Gnclnzxt z(gw6l{TF7zb$IGoA7^iS1x^>VdJ z9b~gGSotP;Epj~EFFYi=TKvQIs|z)~HAT`eIAn9AbEH-DVbm$l66fd|)f4qZb$=;^ zD9ZWhdy#*`^CNxa7-6CPRRgs>bw|~Q$VB;-@cob>@@e!#$~9Q6zQLtkT420@6p2qpc&oBReAHksk6wah-M14AdGm8(1|TAMFt# z(L}jWE>I5O6G^S9uc@PIL*qnad2wWLBqh2=-oZa3Nve~YCfeJoEo6XVjhqUt59dXT zl_^MJ+3Jt98#NQ9<@idrM5c#rk@nH+@<7p^{i)fnKc~xAt;A&cWH=*4LVLq!l#VeKHKRGVDT|d$ zJS@iJGBh-aC9^w3i?{jP%64TRzb^7&B=zZ^tcP@!<{_WwE2EX&N^71W=An!XVS}VN zX*=D6Am5`D%k7lbyp@=SR2pG-q#n{Xx)g(Wu3Qy;AUiooKl%!*WY^e!`YozB_(i27 zZzjyhMKK1@5=Nv;^geotq5Q7$NEyjr6_c@>T%|rXR{D^AOMVp^UL^l0pH+s7zmZLE zu}9KrX&|e@54@N1y{yPSB}a@WE!h+4yh^Vsq_;$_5+^^4R>~Ln=jczpteYxdwM0sx z8^mU%zg!W$A|K%uh-F36XqAwbvEC%e7bs47jJZCGBDd$W~FM zJeRk~eUxh6iOgU&)mN$-sTX^MPxw>0gPbqB6+8Zsqf|}qiX>6Qf97X-8jc3SH(E~RB6k9 z;fusZl#s^k0sEDOsGpRg4qA)h+{~Bp^})km#}ee>ASzLhv?Cvo8APBf^2AcH0Beato|Ap#Z8C)PApfE@Zi+MFwup-U(2y|s zo<5jpG+Z7(FIq7<%$rSZ&3JtP&~d6HsM?kIhQft;ZV`%YRa z^Sy&v6E+Wh2Ig=u>wU{PR7%{v?0}z z=i+ZZhR@?senxzQB_x?HrxWQpauv^nReZv8xJsNCAEPn3O{UPf^g6i(MXV81MKke& zOX8j|kpw!O$|RjkLRdT$XT&n`zW7T_hMvqKUyy0!8D2q=*dq3eQt>+W!bB#K1tf+{ z!(*{ad@3#q4L$}VGs#D!9XXGeaaO!9=7~$9DGE@R0}|9OgfQ6s1hT^WN}E8i$tt~jZ7y~iH`h)KBy3%i#_6n7=~RqiK}>wr}zS7n0bMX0^RXC{F%bPQ4s-E7h9VPL zn2+h0kNKE^!RU%M=!O31jiH!{^;nI0n1Utv7$eaP5-dnT2MoY$6yOv-#W-|CTXe$+ z48iMo8T~KUj2x`MTFgN|)Po)xXrP4!_0R#sF$o{w1B^x% zdZ8Pdf`AJh($EAQ&1YTCl3;@waY#dF495WUKt1U2UvEv2f<)L6kA`T2&gh6&(HyCW zg#{8ENI(i2p$Xce0UDtJ(oi3%sD~CvLOdKuL_NgA3>%Ws2rbbJP0qu)>NM z=%IrI6-+S04oj_SK@1Gg)w2HU&QR-`V1gd%+R?!X4b0HM2nhyAFo8j;9c`_uLJU;U hfIKm`IVDD+^^fPjL63yS}||1zvL$Djxa{|8PH47LCO literal 0 HcmV?d00001 diff --git a/scripts/system/appreciate/resources/sounds/whistles/11.wav b/scripts/system/appreciate/resources/sounds/whistles/11.wav new file mode 100644 index 0000000000000000000000000000000000000000..8315b21ccaa4c1fd46cf643ac255af63ba179d22 GIT binary patch literal 168526 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

K|0A^BmB%4(>vgMq9W<;p;PwOfK)#L{ATxg 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 literal 0 HcmV?d00001 diff --git a/scripts/system/appreciate/resources/sounds/whistles/12.wav b/scripts/system/appreciate/resources/sounds/whistles/12.wav new file mode 100644 index 0000000000000000000000000000000000000000..c78733606875df12b186b511ccf67003ef10babc GIT binary patch literal 181312 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%0AQxnY+He8};Xqo- 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 literal 0 HcmV?d00001 diff --git a/scripts/system/appreciate/resources/sounds/whistles/14.wav b/scripts/system/appreciate/resources/sounds/whistles/14.wav new file mode 100644 index 0000000000000000000000000000000000000000..eda14dc2915e46d67d16abb49094f7ea48e1e9d5 GIT binary patch literal 113754 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 z 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 PEFsHE_XaJELe~EQ+n^|5 literal 0 HcmV?d00001 diff --git a/scripts/system/appreciate/resources/sounds/whistles/15.wav b/scripts/system/appreciate/resources/sounds/whistles/15.wav new file mode 100644 index 0000000000000000000000000000000000000000..f86e9e2cb28576463ff078d387600a836f3979ff GIT binary patch literal 178220 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 literal 0 HcmV?d00001 diff --git a/scripts/system/appreciate/resources/sounds/whistles/16.wav b/scripts/system/appreciate/resources/sounds/whistles/16.wav new file mode 100644 index 0000000000000000000000000000000000000000..22ff07a650a3cc938e75c9b4648371c05cf3ce24 GIT binary patch literal 136242 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 mB*s6nS#* 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

U8;zXeRZIkmKr#*PH;RP*uSjwg!`L&m^`!15u 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

qQkX7z=#{i|)C@n1}T%`nR-13&(^SDrX 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 z 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 literal 0 HcmV?d00001 From 3335c040e50018f2cf0732dc2015731a3e2a19b5 Mon Sep 17 00:00:00 2001 From: HifiExperiments Date: Mon, 18 Jan 2021 18:39:12 -0800 Subject: [PATCH 089/152] hurr durr I'm an idiot --- .../ui/src/ui/TabletScriptingInterface.cpp | 29 ++++++++++--------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/libraries/ui/src/ui/TabletScriptingInterface.cpp b/libraries/ui/src/ui/TabletScriptingInterface.cpp index c09888758c..61c74dc17c 100644 --- a/libraries/ui/src/ui/TabletScriptingInterface.cpp +++ b/libraries/ui/src/ui/TabletScriptingInterface.cpp @@ -321,8 +321,8 @@ void TabletScriptingInterface::processEvent(const QKeyEvent* event) { QObject* TabletScriptingInterface::getFlags() { Q_ASSERT(QThread::currentThread() == qApp->thread()); - auto offscreenUi = DependencyManager::get(); - return offscreenUi->getFlags(); + auto offscreenUI = DependencyManager::get(); + return offscreenUI ? offscreenUI->getFlags() : nullptr; } // @@ -364,8 +364,6 @@ void TabletProxy::setToolbarMode(bool toolbarMode) { _toolbarMode = toolbarMode; - auto offscreenUi = DependencyManager::get(); - if (toolbarMode) { #if !defined(DISABLE_QML) closeDialog(); @@ -385,18 +383,21 @@ void TabletProxy::setToolbarMode(bool toolbarMode) { connect(tabletRootWindow, &QmlWindowClass::fromQml, this, &TabletProxy::fromQml); #endif } else { -#if !defined(DISABLE_QML) if (_currentPathLoaded != TABLET_HOME_SOURCE_URL) { loadHomeScreen(true); } -#endif - //check if running scripts window opened and save it for reopen in Tablet - if (offscreenUi->isVisible("RunningScripts")) { - offscreenUi->hide("RunningScripts"); - _showRunningScripts = true; + + auto offscreenUI = DependencyManager::get(); + if (offscreenUI) { + //check if running scripts window opened and save it for reopen in Tablet + if (offscreenUI->isVisible("RunningScripts")) { + offscreenUI->hide("RunningScripts"); + _showRunningScripts = true; + } + + offscreenUI->hideDesktopWindows(); } - offscreenUi->hideDesktopWindows(); // destroy desktop window if (_desktopWindow) { _desktopWindow->deleteLater(); @@ -579,9 +580,9 @@ void TabletProxy::gotoMenuScreen(const QString& submenu) { root = _desktopWindow->asQuickItem(); } - if (root) { - auto offscreenUi = DependencyManager::get(); - QObject* menu = offscreenUi->getRootMenu(); + auto offscreenUI = DependencyManager::get(); + if (root && offscreenUI) { + QObject* menu = offscreenUI->getRootMenu(); QMetaObject::invokeMethod(root, "setMenuProperties", Q_ARG(QVariant, QVariant::fromValue(menu)), Q_ARG(const QVariant&, QVariant(submenu))); QMetaObject::invokeMethod(root, "loadSource", Q_ARG(const QVariant&, QVariant(VRMENU_SOURCE_URL))); _state = State::Menu; From a0747b291288c4b4d86411de0a8e8825e6d2a503 Mon Sep 17 00:00:00 2001 From: Kalila L Date: Wed, 20 Jan 2021 01:17:45 -0500 Subject: [PATCH 090/152] Add "RELEASE_NAME" env variable. --- cmake/macros/SetPackagingParameters.cmake | 1 + cmake/templates/BuildInfo.h.in | 2 ++ interface/src/Application.cpp | 4 ++++ 3 files changed, 7 insertions(+) diff --git a/cmake/macros/SetPackagingParameters.cmake b/cmake/macros/SetPackagingParameters.cmake index c9cf91bd3d..9311594938 100644 --- a/cmake/macros/SetPackagingParameters.cmake +++ b/cmake/macros/SetPackagingParameters.cmake @@ -23,6 +23,7 @@ macro(SET_PACKAGING_PARAMETERS) set_from_env(RELEASE_TYPE RELEASE_TYPE "DEV") set_from_env(RELEASE_NUMBER RELEASE_NUMBER "") + set_from_env(RELEASE_NAME RELEASE_NAME "") set_from_env(STABLE_BUILD STABLE_BUILD 0) set_from_env(INITIAL_STARTUP_LOCATION INITIAL_STARTUP_LOCATION "") set_from_env(BYPASS_SIGNING BYPASS_SIGNING 0) diff --git a/cmake/templates/BuildInfo.h.in b/cmake/templates/BuildInfo.h.in index 02f6a50919..fa29c40a61 100644 --- a/cmake/templates/BuildInfo.h.in +++ b/cmake/templates/BuildInfo.h.in @@ -4,6 +4,7 @@ // // Created by Stephen Birarda on 1/14/16. // Copyright 2015 High Fidelity, Inc. +// Copyright 2020 Vircadia contributors. // // Distributed under the Apache License, Version 2.0. // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html @@ -24,6 +25,7 @@ namespace BuildInfo { const QString MODIFIED_ORGANIZATION = "@BUILD_ORGANIZATION@"; const QString ORGANIZATION_DOMAIN = "vircadia.com"; const QString VERSION = "@BUILD_VERSION@"; + const QString RELEASE_NAME = "@RELEASE_NAME@"; const QString BUILD_NUMBER = "@BUILD_NUMBER@"; const QString BUILD_GLOBAL_SERVICES = "@BUILD_GLOBAL_SERVICES@"; const QString BUILD_TIME = "@BUILD_TIME@"; diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index cc46d8591b..331e6226ab 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -7180,6 +7180,10 @@ void Application::updateWindowTitle() const { QString buildVersion = " - Vircadia - " + (BuildInfo::BUILD_TYPE == BuildInfo::BuildType::Stable ? QString("Version") : QString("Build")) + " " + applicationVersion(); + + if (BuildInfo::RELEASE_NAME != "") { + buildVersion += " - " + BuildInfo::RELEASE_NAME; + } QString connectionStatus = isInErrorState ? " (ERROR CONNECTING)" : nodeList->getDomainHandler().isConnected() ? "" : " (NOT CONNECTED)"; From 5b40ac4c1ebb28d5f6061bdd5eefaede4754677e Mon Sep 17 00:00:00 2001 From: Alezia Kurdis <60075796+AleziaKurdis@users.noreply.github.com> Date: Wed, 20 Jan 2021 23:13:47 -0500 Subject: [PATCH 091/152] Transmitting Intersection to Create App Transmitting Intersection to Create App --- scripts/system/controllers/controllerModules/inEditMode.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/scripts/system/controllers/controllerModules/inEditMode.js b/scripts/system/controllers/controllerModules/inEditMode.js index 5bef8ec11a..992a76614a 100644 --- a/scripts/system/controllers/controllerModules/inEditMode.js +++ b/scripts/system/controllers/controllerModules/inEditMode.js @@ -84,7 +84,8 @@ Script.include("/~/system/libraries/utils.js"); method: "selectEntity", entityID: this.selectedTarget.objectID, hand: hand, - surfaceNormal: this.selectedTarget.surfaceNormal + surfaceNormal: this.selectedTarget.surfaceNormal, + intersection: this.selectedTarget.intersection, })); } else if (this.selectedTarget.type === Picks.INTERSECTED_OVERLAY) { Messages.sendLocalMessage(this.ENTITY_TOOL_UPDATES_CHANNEL, JSON.stringify({ From aedce21007e68cf8812161f04d8b903d58dd002e Mon Sep 17 00:00:00 2001 From: Alezia Kurdis <60075796+AleziaKurdis@users.noreply.github.com> Date: Wed, 20 Jan 2021 23:17:06 -0500 Subject: [PATCH 092/152] Snap to Next Clicked Surface This adds the move in addition to the rotation to the "Rotate as Next Clicked Surface" action. Which is now become: "Snap to Next Clicked Surface" --- scripts/system/create/edit.js | 11 ++++++- .../entitySelectionTool.js | 31 ++++++++++++++++++- 2 files changed, 40 insertions(+), 2 deletions(-) diff --git a/scripts/system/create/edit.js b/scripts/system/create/edit.js index 23292cd85c..05bc7d2381 100644 --- a/scripts/system/create/edit.js +++ b/scripts/system/create/edit.js @@ -1115,7 +1115,16 @@ function findClickedEntity(event) { expectingRotateAsClickedSurface = false; } else { //Rotate Selection according the Surface Normal - selectionDisplay.rotateSelection(Quat.lookAt(Vec3.ZERO, Vec3.multiply(entityResult.surfaceNormal, -1), Vec3.UP)); + var normalRotation = Quat.lookAtSimple(Vec3.ZERO, Vec3.multiply(entityResult.surfaceNormal, -1)); + selectionDisplay.rotateSelection(normalRotation); + //Translate Selection according the clicked Surface + var distanceFromSurface; + if (selectionDisplay.getSpaceMode() === "world"){ + distanceFromSurface = SelectionManager.worldDimensions.z / 2; + } else { + distanceFromSurface = SelectionManager.localDimensions.z / 2; + } + selectionDisplay.moveSelection(Vec3.sum(entityResult.intersection, Vec3.multiplyQbyV( normalRotation, {"x": 0.0, "y":0.0, "z": distanceFromSurface}))); selectionManager._update(false, this); pushCommandForSelections(); expectingRotateAsClickedSurface = false; diff --git a/scripts/system/create/entitySelectionTool/entitySelectionTool.js b/scripts/system/create/entitySelectionTool/entitySelectionTool.js index b1ce7f801c..f4d6117bd1 100644 --- a/scripts/system/create/entitySelectionTool/entitySelectionTool.js +++ b/scripts/system/create/entitySelectionTool/entitySelectionTool.js @@ -110,7 +110,16 @@ SelectionManager = (function() { expectingRotateAsClickedSurface = false; } else { //Rotate Selection according the Surface Normal - selectionDisplay.rotateSelection(Quat.lookAt(Vec3.ZERO, Vec3.multiply(messageParsed.surfaceNormal, -1), Vec3.UP)); + var normalRotation = Quat.lookAtSimple(Vec3.ZERO, Vec3.multiply(messageParsed.surfaceNormal, -1)); + selectionDisplay.rotateSelection(normalRotation); + //Translate Selection according the clicked Surface + var distanceFromSurface; + if (selectionDisplay.getSpaceMode() === SPACE_WORLD){ + distanceFromSurface = SelectionManager.worldDimensions.z / 2; + } else { + distanceFromSurface = SelectionManager.localDimensions.z / 2; + } + selectionDisplay.moveSelection(Vec3.sum(messageParsed.intersection, Vec3.multiplyQbyV( normalRotation, {"x": 0.0, "y":0.0, "z": distanceFromSurface}))); that._update(false, this); pushCommandForSelections(); expectingRotateAsClickedSurface = false; @@ -2401,6 +2410,26 @@ SelectionDisplay = (function() { updateSelectionsRotation(rotation, SelectionManager.worldPosition); }; + that.moveSelection = function(targetPosition) { + SelectionManager.saveProperties(); + // editing a parent will cause all the children to automatically follow along, so don't + // edit any entity who has an ancestor in SelectionManager.selections + var toMove = SelectionManager.selections.filter(function (selection) { + if (SelectionManager.selections.indexOf(SelectionManager.savedProperties[selection].parentID) >= 0) { + return false; // a parent is also being moved, so don't issue an edit for this entity + } else { + return true; + } + }); + + for (var i = 0; i < toMove.length; i++) { + var id = toMove[i]; + var properties = SelectionManager.savedProperties[id]; + var newPosition = Vec3.sum(targetPosition, Vec3.subtract(properties.position, SelectionManager.worldPosition)); + Entities.editEntity(id, { position: newPosition }); + } + }; + that.rotate90degreeSelection = function(axis) { //axis is a string and expect "X", "Y" or "Z" if (!SelectionManager.hasSelection() || !SelectionManager.hasUnlockedSelection()) { From a9c2a3d46a64808948678e6ff2267c3c9d3a8304 Mon Sep 17 00:00:00 2001 From: Alezia Kurdis <60075796+AleziaKurdis@users.noreply.github.com> Date: Wed, 20 Jan 2021 23:19:43 -0500 Subject: [PATCH 093/152] Snap to Next Clicked Surface Rename the action: "Rotate as Next Clicked Surface" for "Snap to Next Clicked Surface" since it is now doing the rotation and the move to the clicked surface. --- scripts/system/create/entityList/html/entityList.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/system/create/entityList/html/entityList.html b/scripts/system/create/entityList/html/entityList.html index 4c84f7ed4d..cc30c6d6df 100644 --- a/scripts/system/create/entityList/html/entityList.html +++ b/scripts/system/create/entityList/html/entityList.html @@ -159,7 +159,7 @@

From 2667af3682981f21fe3728adb38446f5a3312b49 Mon Sep 17 00:00:00 2001 From: HifiExperiments Date: Wed, 20 Jan 2021 21:25:30 -0800 Subject: [PATCH 094/152] more safeguards --- interface/src/AboutUtil.cpp | 10 ++--- interface/src/Bookmarks.cpp | 1 - interface/src/avatar/AvatarPackager.cpp | 4 +- .../AssetMappingsScriptingInterface.cpp | 5 +++ .../scripting/DesktopScriptingInterface.cpp | 7 +++- .../src/scripting/HMDScriptingInterface.cpp | 10 +++-- interface/src/ui/ApplicationOverlay.cpp | 4 +- interface/src/ui/InteractiveWindow.cpp | 7 ++-- interface/src/ui/overlays/Overlays.cpp | 8 ++-- interface/src/ui/overlays/QmlOverlay.cpp | 8 +++- libraries/ui/src/DockWidget.cpp | 17 ++++---- libraries/ui/src/InfoView.cpp | 23 ++++++----- libraries/ui/src/OffscreenQmlElement.h | 41 +++++++++++-------- libraries/ui/src/QmlFragmentClass.cpp | 4 -- libraries/ui/src/QmlWebWindowClass.cpp | 2 - libraries/ui/src/QmlWindowClass.cpp | 2 - plugins/openvr/src/OpenVrHelpers.cpp | 14 +++---- 17 files changed, 94 insertions(+), 73 deletions(-) diff --git a/interface/src/AboutUtil.cpp b/interface/src/AboutUtil.cpp index b9bea2d85c..5340fcd248 100644 --- a/interface/src/AboutUtil.cpp +++ b/interface/src/AboutUtil.cpp @@ -57,15 +57,15 @@ void AboutUtil::openUrl(const QString& url) const { auto tablet = DependencyManager::get()->getTablet("com.highfidelity.interface.tablet.system"); auto hmd = DependencyManager::get(); - auto offscreenUi = DependencyManager::get(); + auto offscreenUI = DependencyManager::get(); - if (tablet->getToolbarMode()) { - offscreenUi->load("Browser.qml", [=](QQmlContext* context, QObject* newObject) { + if (tablet->getToolbarMode() && offscreenUI) { + offscreenUI->load("Browser.qml", [=](QQmlContext* context, QObject* newObject) { newObject->setProperty("url", url); }); } else { - if (!hmd->getShouldShowTablet() && !qApp->isHMDMode()) { - offscreenUi->load("Browser.qml", [=](QQmlContext* context, QObject* newObject) { + if (!hmd->getShouldShowTablet() && !qApp->isHMDMode() && offscreenUI) { + offscreenUI->load("Browser.qml", [=](QQmlContext* context, QObject* newObject) { newObject->setProperty("url", url); }); } else { diff --git a/interface/src/Bookmarks.cpp b/interface/src/Bookmarks.cpp index 9a8d8eb279..263723ebe0 100644 --- a/interface/src/Bookmarks.cpp +++ b/interface/src/Bookmarks.cpp @@ -61,7 +61,6 @@ void Bookmarks::deleteBookmark(const QString& bookmarkName) { void Bookmarks::addBookmarkToFile(const QString& bookmarkName, const QVariant& bookmark) { Menu* menubar = Menu::getInstance(); if (contains(bookmarkName)) { - auto offscreenUi = DependencyManager::get(); ModalDialogListener* dlg = OffscreenUi::asyncWarning("Duplicate Bookmark", "The bookmark name you entered already exists in your list.", QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes); diff --git a/interface/src/avatar/AvatarPackager.cpp b/interface/src/avatar/AvatarPackager.cpp index 90def7ad43..d43b7d9575 100644 --- a/interface/src/avatar/AvatarPackager.cpp +++ b/interface/src/avatar/AvatarPackager.cpp @@ -58,7 +58,9 @@ bool AvatarPackager::open() { if (tablet->getToolbarMode()) { static const QUrl url{ "hifi/AvatarPackagerWindow.qml" }; - DependencyManager::get()->show(url, "AvatarPackager", packageModelDialogCreated); + if (auto offscreenUI = DependencyManager::get()) { + offscreenUI->show(url, "AvatarPackager", packageModelDialogCreated); + } return true; } diff --git a/interface/src/scripting/AssetMappingsScriptingInterface.cpp b/interface/src/scripting/AssetMappingsScriptingInterface.cpp index c5769ef4bb..a6fbd8b3fd 100644 --- a/interface/src/scripting/AssetMappingsScriptingInterface.cpp +++ b/interface/src/scripting/AssetMappingsScriptingInterface.cpp @@ -77,6 +77,11 @@ void AssetMappingsScriptingInterface::uploadFile(QString path, QString mapping, "Specifying a new folder name will automatically create that folder for you."; auto offscreenUi = DependencyManager::get(); + if (!offscreenUi) { + completedCallback.call({ -1 }); + return; + } + auto result = offscreenUi->inputDialog(OffscreenUi::ICON_INFORMATION, "Specify Asset Path", dropEvent ? dropHelpText : helpText, mapping); diff --git a/interface/src/scripting/DesktopScriptingInterface.cpp b/interface/src/scripting/DesktopScriptingInterface.cpp index f78f7853ca..e527561b05 100644 --- a/interface/src/scripting/DesktopScriptingInterface.cpp +++ b/interface/src/scripting/DesktopScriptingInterface.cpp @@ -99,11 +99,16 @@ void DesktopScriptingInterface::setHUDAlpha(float alpha) { } void DesktopScriptingInterface::show(const QString& path, const QString& title) { + auto offscreenUI = DependencyManager::get(); + if (!offscreenUI) { + return; + } + if (QThread::currentThread() != thread()) { QMetaObject::invokeMethod(this, "show", Qt::QueuedConnection, Q_ARG(QString, path), Q_ARG(QString, title)); return; } - DependencyManager::get()->show(path, title); + offscreenUI->show(path, title); } InteractiveWindowPointer DesktopScriptingInterface::createWindow(const QString& sourceUrl, const QVariantMap& properties) { diff --git a/interface/src/scripting/HMDScriptingInterface.cpp b/interface/src/scripting/HMDScriptingInterface.cpp index 8f7ae7c4dc..79c0452a45 100644 --- a/interface/src/scripting/HMDScriptingInterface.cpp +++ b/interface/src/scripting/HMDScriptingInterface.cpp @@ -96,8 +96,9 @@ bool HMDScriptingInterface::shouldShowHandControllers() const { void HMDScriptingInterface::activateHMDHandMouse() { QWriteLocker lock(&_hmdHandMouseLock); - auto offscreenUi = DependencyManager::get(); - offscreenUi->getDesktop()->setProperty("hmdHandMouseActive", true); + if (auto offscreenUI = DependencyManager::get()) { + offscreenUI->getDesktop()->setProperty("hmdHandMouseActive", true); + } _hmdHandMouseCount++; } @@ -105,8 +106,9 @@ void HMDScriptingInterface::deactivateHMDHandMouse() { QWriteLocker lock(&_hmdHandMouseLock); _hmdHandMouseCount = std::max(_hmdHandMouseCount - 1, 0); if (_hmdHandMouseCount == 0) { - auto offscreenUi = DependencyManager::get(); - offscreenUi->getDesktop()->setProperty("hmdHandMouseActive", false); + if (auto offscreenUI = DependencyManager::get()) { + offscreenUI->getDesktop()->setProperty("hmdHandMouseActive", false); + } } } diff --git a/interface/src/ui/ApplicationOverlay.cpp b/interface/src/ui/ApplicationOverlay.cpp index e91b1d725c..144f64c385 100644 --- a/interface/src/ui/ApplicationOverlay.cpp +++ b/interface/src/ui/ApplicationOverlay.cpp @@ -100,10 +100,10 @@ void ApplicationOverlay::renderQmlUi(RenderArgs* renderArgs) { // threads, we need to use a sync object to deteremine when // the current UI texture is no longer being read from, and only // then release it back to the UI for re-use - auto offscreenUi = DependencyManager::get(); + auto offscreenUI = DependencyManager::get(); OffscreenQmlSurface::TextureAndFence newTextureAndFence; - bool newTextureAvailable = offscreenUi->fetchTexture(newTextureAndFence); + bool newTextureAvailable = offscreenUI ? offscreenUI->fetchTexture(newTextureAndFence) : false; if (newTextureAvailable) { _uiTexture->setExternalTexture(newTextureAndFence.first, newTextureAndFence.second); } diff --git a/interface/src/ui/InteractiveWindow.cpp b/interface/src/ui/InteractiveWindow.cpp index 0ac1f05737..420efbf448 100644 --- a/interface/src/ui/InteractiveWindow.cpp +++ b/interface/src/ui/InteractiveWindow.cpp @@ -362,10 +362,11 @@ InteractiveWindow::InteractiveWindow(const QString& sourceUrl, const QVariantMap object->setObjectName("InteractiveWindow"); object->setProperty(SOURCE_PROPERTY, sourceURL); }; - auto offscreenUi = DependencyManager::get(); - // Build the event bridge and wrapper on the main thread - offscreenUi->loadInNewContext(CONTENT_WINDOW_QML, objectInitLambda, contextInitLambda); + if (auto offscreenUi = DependencyManager::get()) { + // Build the event bridge and wrapper on the main thread + offscreenUi->loadInNewContext(CONTENT_WINDOW_QML, objectInitLambda, contextInitLambda); + } } } diff --git a/interface/src/ui/overlays/Overlays.cpp b/interface/src/ui/overlays/Overlays.cpp index 5e43c5df8d..e9e310e68b 100644 --- a/interface/src/ui/overlays/Overlays.cpp +++ b/interface/src/ui/overlays/Overlays.cpp @@ -1212,8 +1212,8 @@ float Overlays::width() { return result; } - auto offscreenUi = DependencyManager::get(); - return offscreenUi->getWindow()->size().width(); + auto offscreenUI = DependencyManager::get(); + return offscreenUI ? offscreenUI->getWindow()->size().width() : -1.0f; } float Overlays::height() { @@ -1224,8 +1224,8 @@ float Overlays::height() { return result; } - auto offscreenUi = DependencyManager::get(); - return offscreenUi->getWindow()->size().height(); + auto offscreenUI = DependencyManager::get(); + return offscreenUI ? offscreenUI->getWindow()->size().height() : -1.0f; } void Overlays::mousePressOnPointerEvent(const QUuid& id, const PointerEvent& event) { diff --git a/interface/src/ui/overlays/QmlOverlay.cpp b/interface/src/ui/overlays/QmlOverlay.cpp index 2afb29bb91..c097e7dd97 100644 --- a/interface/src/ui/overlays/QmlOverlay.cpp +++ b/interface/src/ui/overlays/QmlOverlay.cpp @@ -24,13 +24,17 @@ QmlOverlay::QmlOverlay(const QUrl& url, const QmlOverlay* overlay) } void QmlOverlay::buildQmlElement(const QUrl& url) { + auto offscreenUI = DependencyManager::get(); + if (!offscreenUI) { + return; + } + if (QThread::currentThread() != thread()) { QMetaObject::invokeMethod(this, "buildQmlElement", Q_ARG(QUrl, url)); return; } - auto offscreenUi = DependencyManager::get(); - offscreenUi->load(url, [=](QQmlContext* context, QObject* object) { + offscreenUI->load(url, [=](QQmlContext* context, QObject* object) { _qmlElement = dynamic_cast(object); connect(_qmlElement, &QObject::destroyed, this, &QmlOverlay::qmlElementDestroyed); }); diff --git a/libraries/ui/src/DockWidget.cpp b/libraries/ui/src/DockWidget.cpp index 13c4d9a548..f899def2c6 100644 --- a/libraries/ui/src/DockWidget.cpp +++ b/libraries/ui/src/DockWidget.cpp @@ -26,14 +26,15 @@ static void quickViewDeleter(QQuickView* quickView) { } DockWidget::DockWidget(const QString& title, QWidget* parent) : QDockWidget(title, parent) { - auto offscreenUi = DependencyManager::get(); - auto qmlEngine = offscreenUi->getSurfaceContext()->engine(); - _quickView = std::shared_ptr(new QQuickView(qmlEngine, nullptr), quickViewDeleter); - _quickView->setFormat(getDefaultOpenGLSurfaceFormat()); - QWidget* widget = QWidget::createWindowContainer(_quickView.get()); - setWidget(widget); - QWidget* headerWidget = new QWidget(); - setTitleBarWidget(headerWidget); + if (auto offscreenUI = DependencyManager::get()) { + auto qmlEngine = offscreenUI->getSurfaceContext()->engine(); + _quickView = std::shared_ptr(new QQuickView(qmlEngine, nullptr), quickViewDeleter); + _quickView->setFormat(getDefaultOpenGLSurfaceFormat()); + QWidget* widget = QWidget::createWindowContainer(_quickView.get()); + setWidget(widget); + QWidget* headerWidget = new QWidget(); + setTitleBarWidget(headerWidget); + } } void DockWidget::setSource(const QUrl& url) { diff --git a/libraries/ui/src/InfoView.cpp b/libraries/ui/src/InfoView.cpp index 478401c6f8..f98d514f5d 100644 --- a/libraries/ui/src/InfoView.cpp +++ b/libraries/ui/src/InfoView.cpp @@ -65,17 +65,18 @@ void InfoView::show(const QString& path, bool firstOrChangedOnly, QString urlQue } infoVersion.set(version); } - auto offscreenUi = DependencyManager::get(); - QString infoViewName(NAME + "_" + path); - offscreenUi->show(QML, NAME + "_" + path, [=](QQmlContext* context, QObject* newObject){ - QQuickItem* item = dynamic_cast(newObject); - item->setWidth(1024); - item->setHeight(720); - InfoView* newInfoView = newObject->findChild(); - Q_ASSERT(newInfoView); - newInfoView->parent()->setObjectName(infoViewName); - newInfoView->setUrl(url); - }); + if (auto offscreenUI = DependencyManager::get()) { + QString infoViewName(NAME + "_" + path); + offscreenUI->show(QML, NAME + "_" + path, [=](QQmlContext* context, QObject* newObject){ + QQuickItem* item = dynamic_cast(newObject); + item->setWidth(1024); + item->setHeight(720); + InfoView* newInfoView = newObject->findChild(); + Q_ASSERT(newInfoView); + newInfoView->parent()->setObjectName(infoViewName); + newInfoView->setUrl(url); + }); + } } QUrl InfoView::url() { diff --git a/libraries/ui/src/OffscreenQmlElement.h b/libraries/ui/src/OffscreenQmlElement.h index 69009533c6..ac1bcb0866 100644 --- a/libraries/ui/src/OffscreenQmlElement.h +++ b/libraries/ui/src/OffscreenQmlElement.h @@ -53,25 +53,30 @@ private: } \ \ void x::show(std::function f) { \ - auto offscreenUi = DependencyManager::get(); \ + auto offscreenUI = DependencyManager::get(); \ if (!registered) { \ x::registerType(); \ } \ - offscreenUi->show(QML, NAME, f); \ + if (offscreenUI) { \ + offscreenUI->show(QML, NAME, f); \ + } \ } \ \ void x::hide() { \ - auto offscreenUi = DependencyManager::get(); \ - offscreenUi->hide(NAME); \ + if (auto offscreenUI = DependencyManager::get()) { \ + offscreenUI->hide(NAME); \ + } \ } \ \ void x::toggle(std::function f) { \ - auto offscreenUi = DependencyManager::get(); \ - offscreenUi->toggle(QML, NAME, f); \ + if (auto offscreenUI = DependencyManager::get()) { \ + offscreenUI->toggle(QML, NAME, f); \ + } \ } \ void x::load(std::function f) { \ - auto offscreenUi = DependencyManager::get(); \ - offscreenUi->load(QML, f); \ + if (auto offscreenUI = DependencyManager::get()) { \ + offscreenUI->load(QML, f); \ + } \ } #define HIFI_QML_DEF_LAMBDA(x, f) \ @@ -82,21 +87,25 @@ private: qmlRegisterType("Hifi", 1, 0, NAME.toLocal8Bit().constData()); \ } \ void x::show() { \ - auto offscreenUi = DependencyManager::get(); \ - offscreenUi->show(QML, NAME, f); \ + if (auto offscreenUI = DependencyManager::get()) { \ + offscreenUI->show(QML, NAME, f); \ + } \ } \ void x::hide() { \ - auto offscreenUi = DependencyManager::get(); \ - offscreenUi->hide(NAME); \ + if (auto offscreenUI = DependencyManager::get()) { \ + offscreenUI->hide(NAME); \ + } \ } \ \ void x::toggle() { \ - auto offscreenUi = DependencyManager::get(); \ - offscreenUi->toggle(QML, NAME, f); \ + if (auto offscreenUI = DependencyManager::get()) { \ + offscreenUI->toggle(QML, NAME, f); \ + } \ } \ void x::load() { \ - auto offscreenUi = DependencyManager::get(); \ - offscreenUi->load(QML, f); \ + if (auto offscreenUI = DependencyManager::get()) { \ + offscreenUI->load(QML, f); \ + } \ } #endif diff --git a/libraries/ui/src/QmlFragmentClass.cpp b/libraries/ui/src/QmlFragmentClass.cpp index fbd045fdb1..1219094afc 100644 --- a/libraries/ui/src/QmlFragmentClass.cpp +++ b/libraries/ui/src/QmlFragmentClass.cpp @@ -14,9 +14,6 @@ #include -#include "OffscreenUi.h" - - std::mutex QmlFragmentClass::_mutex; std::map QmlFragmentClass::_fragments; @@ -40,7 +37,6 @@ QScriptValue QmlFragmentClass::internal_constructor(QScriptContext* context, QSc } auto properties = parseArguments(context); - auto offscreenUi = DependencyManager::get(); QmlFragmentClass* retVal = new QmlFragmentClass(restricted, qml.toString()); Q_ASSERT(retVal); if (QThread::currentThread() != qApp->thread()) { diff --git a/libraries/ui/src/QmlWebWindowClass.cpp b/libraries/ui/src/QmlWebWindowClass.cpp index 282161497a..c7851d416f 100644 --- a/libraries/ui/src/QmlWebWindowClass.cpp +++ b/libraries/ui/src/QmlWebWindowClass.cpp @@ -14,7 +14,6 @@ #include #include -#include "OffscreenUi.h" static const char* const URL_PROPERTY = "source"; static const char* const SCRIPT_PROPERTY = "scriptUrl"; @@ -22,7 +21,6 @@ static const char* const SCRIPT_PROPERTY = "scriptUrl"; // Method called by Qt scripts to create a new web window in the overlay QScriptValue QmlWebWindowClass::internal_constructor(QScriptContext* context, QScriptEngine* engine, bool restricted) { auto properties = parseArguments(context); - auto offscreenUi = DependencyManager::get(); QmlWebWindowClass* retVal = new QmlWebWindowClass(restricted); Q_ASSERT(retVal); if (QThread::currentThread() != qApp->thread()) { diff --git a/libraries/ui/src/QmlWindowClass.cpp b/libraries/ui/src/QmlWindowClass.cpp index 13a289a5fd..ae2292dc09 100644 --- a/libraries/ui/src/QmlWindowClass.cpp +++ b/libraries/ui/src/QmlWindowClass.cpp @@ -72,7 +72,6 @@ QVariantMap QmlWindowClass::parseArguments(QScriptContext* context) { // Method called by Qt scripts to create a new web window in the overlay QScriptValue QmlWindowClass::internal_constructor(QScriptContext* context, QScriptEngine* engine, bool restricted) { auto properties = parseArguments(context); - auto offscreenUi = DependencyManager::get(); QmlWindowClass* retVal = new QmlWindowClass(restricted); Q_ASSERT(retVal); if (QThread::currentThread() != qApp->thread()) { @@ -349,7 +348,6 @@ void QmlWindowClass::raise() { return; } - auto offscreenUi = DependencyManager::get(); if (_qmlWindow) { QMetaObject::invokeMethod(asQuickItem(), "raise", Qt::DirectConnection); } diff --git a/plugins/openvr/src/OpenVrHelpers.cpp b/plugins/openvr/src/OpenVrHelpers.cpp index ce7625eedb..eed2242602 100644 --- a/plugins/openvr/src/OpenVrHelpers.cpp +++ b/plugins/openvr/src/OpenVrHelpers.cpp @@ -203,14 +203,14 @@ void updateFromOpenVrKeyboardInput() { } void finishOpenVrKeyboardInput() { - auto offscreenUi = DependencyManager::get(); + auto offscreenUI = DependencyManager::get(); updateFromOpenVrKeyboardInput(); // Simulate an enter press on the top level window to trigger the action - if (0 == (_currentHints & Qt::ImhMultiLine)) { + if (0 == (_currentHints & Qt::ImhMultiLine) && offscreenUI) { auto keyPress = QKeyEvent(QEvent::KeyPress, Qt::Key_Return, Qt::KeyboardModifiers(), QString("\n")); auto keyRelease = QKeyEvent(QEvent::KeyRelease, Qt::Key_Return, Qt::KeyboardModifiers()); - qApp->sendEvent(offscreenUi->getWindow(), &keyPress); - qApp->sendEvent(offscreenUi->getWindow(), &keyRelease); + qApp->sendEvent(offscreenUI->getWindow(), &keyPress); + qApp->sendEvent(offscreenUI->getWindow(), &keyRelease); } } @@ -221,10 +221,8 @@ void enableOpenVrKeyboard(PluginContainer* container) { if (disableSteamVrKeyboard) { return; } - auto offscreenUi = DependencyManager::get(); _overlay = vr::VROverlay(); - auto menu = container->getPrimaryMenu(); auto action = menu->getActionForOption(MenuOption::Overlays); @@ -282,7 +280,9 @@ void handleOpenVrEvents() { case vr::VREvent_KeyboardClosed: _keyboardFocusObject = nullptr; _keyboardShown = false; - DependencyManager::get()->unfocusWindows(); + if (auto offscreenUI = DependencyManager::get()) { + offscreenUI->unfocusWindows(); + } break; default: From 82313eccbf919550f8eadd50b386a3e97c37e759 Mon Sep 17 00:00:00 2001 From: Kalila L Date: Thu, 21 Jan 2021 01:51:37 -0500 Subject: [PATCH 095/152] Add userAgent property for web entities. --- .../src/RenderableWebEntityItem.cpp | 10 ++++++++++ .../src/RenderableWebEntityItem.h | 2 ++ libraries/entities/src/EntityItemProperties.cpp | 12 ++++++++++++ libraries/entities/src/EntityItemProperties.h | 1 + libraries/entities/src/EntityPropertyFlags.h | 1 + libraries/entities/src/WebEntityItem.cpp | 17 +++++++++++++++++ libraries/entities/src/WebEntityItem.h | 5 +++++ libraries/networking/src/NetworkingConstants.h | 1 + libraries/networking/src/udt/PacketHeaders.h | 1 + .../create/assets/data/createAppTooltips.json | 3 +++ .../html/js/entityProperties.js | 6 ++++++ 11 files changed, 59 insertions(+) diff --git a/libraries/entities-renderer/src/RenderableWebEntityItem.cpp b/libraries/entities-renderer/src/RenderableWebEntityItem.cpp index 8b41a85cf8..23f506a795 100644 --- a/libraries/entities-renderer/src/RenderableWebEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableWebEntityItem.cpp @@ -39,6 +39,7 @@ const char* WebEntityRenderer::URL_PROPERTY = "url"; const char* WebEntityRenderer::SCRIPT_URL_PROPERTY = "scriptURL"; const char* WebEntityRenderer::GLOBAL_POSITION_PROPERTY = "globalPosition"; const char* WebEntityRenderer::USE_BACKGROUND_PROPERTY = "useBackground"; +const char* WebEntityRenderer::USER_AGENT_PROPERTY = "userAgent"; std::function&, bool&)> WebEntityRenderer::_acquireWebSurfaceOperator = nullptr; std::function&, bool&, std::vector&)> WebEntityRenderer::_releaseWebSurfaceOperator = nullptr; @@ -194,6 +195,7 @@ void WebEntityRenderer::doRenderUpdateSynchronousTyped(const ScenePointer& scene _webSurface->getRootItem()->setProperty(URL_PROPERTY, newSourceURL); _webSurface->getRootItem()->setProperty(SCRIPT_URL_PROPERTY, _scriptURL); _webSurface->getRootItem()->setProperty(USE_BACKGROUND_PROPERTY, _useBackground); + _webSurface->getRootItem()->setProperty(USER_AGENT_PROPERTY, _userAgent); _webSurface->getSurfaceContext()->setContextProperty(GLOBAL_POSITION_PROPERTY, vec3toVariant(_contextPosition)); _webSurface->setMaxFps((QUrl(newSourceURL).host().endsWith("youtube.com", Qt::CaseInsensitive)) ? YOUTUBE_MAX_FPS : _maxFPS); ::hifi::scripting::setLocalAccessSafeThread(false); @@ -231,6 +233,14 @@ void WebEntityRenderer::doRenderUpdateSynchronousTyped(const ScenePointer& scene _useBackground = useBackground; } } + + { + auto userAgent = entity->getUserAgent(); + if (_userAgent != userAgent) { + _webSurface->getRootItem()->setProperty(USER_AGENT_PROPERTY, userAgent); + _userAgent = userAgent; + } + } { auto contextPosition = entity->getWorldPosition(); diff --git a/libraries/entities-renderer/src/RenderableWebEntityItem.h b/libraries/entities-renderer/src/RenderableWebEntityItem.h index 63ec722811..7288a380d3 100644 --- a/libraries/entities-renderer/src/RenderableWebEntityItem.h +++ b/libraries/entities-renderer/src/RenderableWebEntityItem.h @@ -36,6 +36,7 @@ public: static const char* SCRIPT_URL_PROPERTY; static const char* GLOBAL_POSITION_PROPERTY; static const char* USE_BACKGROUND_PROPERTY; + static const char* USER_AGENT_PROPERTY; static void setAcquireWebSurfaceOperator(std::function&, bool&)> acquireWebSurfaceOperator) { _acquireWebSurfaceOperator = acquireWebSurfaceOperator; } static void acquireWebSurface(const QString& url, bool htmlContent, QSharedPointer& webSurface, bool& cachedWebSurface) { @@ -97,6 +98,7 @@ private: QString _scriptURL; uint8_t _maxFPS; bool _useBackground; + QString _userAgent; WebInputMode _inputMode; glm::vec3 _contextPosition; diff --git a/libraries/entities/src/EntityItemProperties.cpp b/libraries/entities/src/EntityItemProperties.cpp index ff55137a03..969be6589e 100644 --- a/libraries/entities/src/EntityItemProperties.cpp +++ b/libraries/entities/src/EntityItemProperties.cpp @@ -603,6 +603,7 @@ EntityPropertyFlags EntityItemProperties::getChangedProperties() const { CHECK_PROPERTY_CHANGE(PROP_INPUT_MODE, inputMode); CHECK_PROPERTY_CHANGE(PROP_SHOW_KEYBOARD_FOCUS_HIGHLIGHT, showKeyboardFocusHighlight); CHECK_PROPERTY_CHANGE(PROP_WEB_USE_BACKGROUND, useBackground); + CHECK_PROPERTY_CHANGE(PROP_USER_AGENT, userAgent); // Polyline CHECK_PROPERTY_CHANGE(PROP_LINE_POINTS, linePoints); @@ -1387,6 +1388,7 @@ EntityPropertyFlags EntityItemProperties::getChangedProperties() const { * @property {boolean} useBackground=true - true if the web entity should have a background, * false if the web entity's background should be transparent. The webpage must have CSS properties for transparency set * on the background-color for this property to have an effect. + * @property {string} userAgent="Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Mobile Safari/537.36" - The user agent for the web entity to use when visiting web pages. * @example

s{S4)Z(v8BK~6Q;1l33EVyC0S8>t@ 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

Create a Web entity displaying at 1920 x 1080 resolution.Create a Web entity displaying at 1920 x 1080 resolution.Report information on the version of Interface currently running.
+ * + * + * + * + * + * + * + * + *
ValueDescription
"left"Text is aligned to the left side.
"center"Text is centered.
"right"Text is aligned to the right side.
+ * @typedef {string} Entities.TextAlignment + */ + +enum class TextAlignment { + LEFT = 0, + CENTER, + RIGHT +}; + +class TextAlignmentHelpers { +public: + static QString getNameForTextAlignment(TextAlignment alignment); +}; + +#endif // hifi_TextAlignment_h \ No newline at end of file diff --git a/libraries/shared/src/TextEffect.h b/libraries/shared/src/TextEffect.h index 91bd5ec60c..3e205f72fe 100644 --- a/libraries/shared/src/TextEffect.h +++ b/libraries/shared/src/TextEffect.h @@ -20,7 +20,7 @@ * * "none"No effect. * "outline"An outline effect. - * "outlineFill"An outline effect, with fill. + * "outline fill"An outline effect, with fill. * "shadow"A shadow effect. * * diff --git a/scripts/system/create/assets/data/createAppTooltips.json b/scripts/system/create/assets/data/createAppTooltips.json index 478793ab78..561133c258 100644 --- a/scripts/system/create/assets/data/createAppTooltips.json +++ b/scripts/system/create/assets/data/createAppTooltips.json @@ -38,6 +38,9 @@ "textEffectThickness": { "tooltip": "The magnitude of the text effect." }, + "textAlignment": { + "tooltip": "How the text is aligned within its left and right bounds." + }, "textBillboardMode": { "tooltip": "If enabled, determines how the entity will face the camera.", "jsPropertyName": "billboardMode" diff --git a/scripts/system/create/entityProperties/html/js/entityProperties.js b/scripts/system/create/entityProperties/html/js/entityProperties.js index f3f92a887e..932f9e03e7 100644 --- a/scripts/system/create/entityProperties/html/js/entityProperties.js +++ b/scripts/system/create/entityProperties/html/js/entityProperties.js @@ -229,6 +229,16 @@ const GROUPS = [ decimals: 2, propertyID: "textEffectThickness", }, + { + label: "Alignment", + type: "dropdown", + options: { + left: "Left", + center: "Center", + right: "Right" + }, + propertyID: "textAlignment", + }, { label: "Billboard Mode", type: "dropdown", From 56fa4698da5c791ac07b5061d1d62b493a864983 Mon Sep 17 00:00:00 2001 From: HifiExperiments Date: Thu, 11 Feb 2021 19:01:51 -0800 Subject: [PATCH 146/152] potential fix for offset soft attachments --- .../avatars-renderer/src/avatars-renderer/SkeletonModel.cpp | 1 - libraries/render-utils/src/Model.cpp | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/avatars-renderer/src/avatars-renderer/SkeletonModel.cpp b/libraries/avatars-renderer/src/avatars-renderer/SkeletonModel.cpp index 15ff09d13d..5ac808d3fb 100644 --- a/libraries/avatars-renderer/src/avatars-renderer/SkeletonModel.cpp +++ b/libraries/avatars-renderer/src/avatars-renderer/SkeletonModel.cpp @@ -33,7 +33,6 @@ SkeletonModel::SkeletonModel(Avatar* owningAvatar, QObject* parent) : { // SkeletonModels, and by extention Avatars, use Dual Quaternion skinning. _useDualQuaternionSkinning = true; - _forceOffset = true; // Avatars all cast shadow setCanCastShadow(true); diff --git a/libraries/render-utils/src/Model.cpp b/libraries/render-utils/src/Model.cpp index 1c9fdc50d6..95857a603d 100644 --- a/libraries/render-utils/src/Model.cpp +++ b/libraries/render-utils/src/Model.cpp @@ -151,6 +151,7 @@ void Model::setOffset(const glm::vec3& offset) { // if someone manually sets our offset, then we are no longer snapped to center _snapModelToRegistrationPoint = false; _snappedToRegistrationPoint = false; + _forceOffset = true; } void Model::calculateTextureInfo() { From 515ee40824ae83fc8078cfa4ee9682e1fd0ad071 Mon Sep 17 00:00:00 2001 From: HifiExperiments Date: Fri, 12 Feb 2021 10:38:40 -0800 Subject: [PATCH 147/152] third times the charm --- .../system/create/entityProperties/html/js/entityProperties.js | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/system/create/entityProperties/html/js/entityProperties.js b/scripts/system/create/entityProperties/html/js/entityProperties.js index ba78c5d950..a7800b3e73 100644 --- a/scripts/system/create/entityProperties/html/js/entityProperties.js +++ b/scripts/system/create/entityProperties/html/js/entityProperties.js @@ -248,6 +248,7 @@ const GROUPS = [ right: "Right" }, propertyID: "textAlignment", + propertyName: "alignment", // actual entity property name }, { label: "Top Margin", From 30c4779eeb27602c4202f18f05b2e89fb02f9568 Mon Sep 17 00:00:00 2001 From: HifiExperiments Date: Sat, 13 Feb 2021 20:17:28 -0800 Subject: [PATCH 148/152] name all the threads --- .gitignore | 1 + assignment-client/src/AssignmentClient.cpp | 8 ++++++-- .../src/audio/AudioMixerSlavePool.cpp | 5 +++++ assignment-client/src/octree/OctreeServer.cpp | 6 +++++- domain-server/src/DomainServer.cpp | 5 ++++- interface/src/Application.cpp | 3 +++ libraries/audio/src/AudioInjectorManager.cpp | 8 ++++++-- .../display-plugins/OpenGLDisplayPlugin.cpp | 2 ++ .../src/gpu/gl/GLTextureTransfer.cpp | 6 +++++- libraries/networking/src/ResourceManager.cpp | 9 +++++++-- libraries/networking/src/udt/SendQueue.cpp | 19 +++++++++++-------- libraries/qml/src/qml/impl/SharedObject.cpp | 5 ++++- libraries/script-engine/src/ScriptEngine.cpp | 10 +++++++--- libraries/shared/src/GenericThread.cpp | 9 +++++++-- libraries/shared/src/SettingInterface.cpp | 6 +++++- libraries/shared/src/ThreadHelpers.h | 2 ++ .../ui/src/ui/TabletScriptingInterface.cpp | 2 +- plugins/openvr/src/OpenVrDisplayPlugin.cpp | 2 ++ plugins/openvr/src/ViveControllerManager.cpp | 2 ++ 19 files changed, 85 insertions(+), 25 deletions(-) diff --git a/.gitignore b/.gitignore index 82c9535c5d..195def9544 100644 --- a/.gitignore +++ b/.gitignore @@ -111,3 +111,4 @@ tools/unity-avatar-exporter server-console/package-lock.json vcpkg/ /tools/nitpick/compiledResources +qt/ \ No newline at end of file diff --git a/assignment-client/src/AssignmentClient.cpp b/assignment-client/src/AssignmentClient.cpp index 50eee258ab..adc7f5e3c5 100644 --- a/assignment-client/src/AssignmentClient.cpp +++ b/assignment-client/src/AssignmentClient.cpp @@ -33,6 +33,7 @@ #include #include +#include #include "AssignmentClientLogging.h" #include "AssignmentFactory.h" @@ -235,10 +236,13 @@ void AssignmentClient::handleCreateAssignmentPacket(QSharedPointergetDomainHandler().getIP().toString(); // start the deployed assignment - QThread* workerThread = new QThread; + QThread* workerThread = new QThread(); workerThread->setObjectName("ThreadedAssignment Worker"); - connect(workerThread, &QThread::started, _currentAssignment.data(), &ThreadedAssignment::run); + connect(workerThread, &QThread::started, _currentAssignment.data(), [this] { + setThreadName("ThreadedAssignment Worker"); + _currentAssignment->run(); + }); // Once the ThreadedAssignment says it is finished - we ask it to deleteLater // This is a queued connection so that it is put into the event loop to be processed by the worker diff --git a/assignment-client/src/audio/AudioMixerSlavePool.cpp b/assignment-client/src/audio/AudioMixerSlavePool.cpp index 5f6936cb2d..e8a2909acb 100644 --- a/assignment-client/src/audio/AudioMixerSlavePool.cpp +++ b/assignment-client/src/audio/AudioMixerSlavePool.cpp @@ -11,9 +11,13 @@ #include "AudioMixerSlavePool.h" +#include + #include #include +#include + void AudioMixerSlaveThread::run() { while (true) { wait(); @@ -157,6 +161,7 @@ void AudioMixerSlavePool::resize(int numThreads) { // start new slaves for (int i = 0; i < numThreads - _numThreads; ++i) { auto slave = new AudioMixerSlaveThread(*this, _workerSharedData); + QObject::connect(slave, &QThread::started, [] { setThreadName("AudioMixerSlaveThread"); }); slave->start(); _slaves.emplace_back(slave); } diff --git a/assignment-client/src/octree/OctreeServer.cpp b/assignment-client/src/octree/OctreeServer.cpp index f72ab0ac05..4ef220df29 100644 --- a/assignment-client/src/octree/OctreeServer.cpp +++ b/assignment-client/src/octree/OctreeServer.cpp @@ -34,6 +34,7 @@ #include #include +#include Q_LOGGING_CATEGORY(octree_server, "hifi.octree-server") @@ -1192,7 +1193,10 @@ void OctreeServer::domainSettingsRequestComplete() { _persistAsFileType); _persistManager->moveToThread(&_persistThread); connect(&_persistThread, &QThread::finished, _persistManager, &QObject::deleteLater); - connect(&_persistThread, &QThread::started, _persistManager, &OctreePersistThread::start); + connect(&_persistThread, &QThread::started, _persistManager, [this] { + setThreadName("OctreePersistThread"); + _persistManager->start(); + }); connect(_persistManager, &OctreePersistThread::loadCompleted, this, [this]() { beginRunning(); }); diff --git a/domain-server/src/DomainServer.cpp b/domain-server/src/DomainServer.cpp index 1d7ef7fcfc..bb79bb367a 100644 --- a/domain-server/src/DomainServer.cpp +++ b/domain-server/src/DomainServer.cpp @@ -60,6 +60,7 @@ #include #include +#include using namespace std::chrono; @@ -830,9 +831,11 @@ void DomainServer::setupNodeListAndAssignments() { // set a custom packetVersionMatch as the verify packet operator for the udt::Socket nodeList->setPacketFilterOperator(&DomainServer::isPacketVerified); - _assetClientThread.setObjectName("AssetClient Thread"); + QString name = "AssetClient Thread"; + _assetClientThread.setObjectName(name); auto assetClient = DependencyManager::set(); assetClient->moveToThread(&_assetClientThread); + connect(&_assetClientThread, &QThread::started, [name] { setThreadName(name.toStdString()); }); _assetClientThread.start(); // add whatever static assignments that have been parsed to the queue addStaticAssignmentsToQueue(); diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 07fecc13dc..06ce6c3d6c 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -254,6 +254,7 @@ #include "AboutUtil.h" #include "ExternalResource.h" +#include #if defined(Q_OS_WIN) #include @@ -1168,6 +1169,7 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo if (!DISABLE_WATCHDOG) { auto deadlockWatchdogThread = new DeadlockWatchdogThread(); deadlockWatchdogThread->setMainThreadID(QThread::currentThreadId()); + connect(deadlockWatchdogThread, &QThread::started, [] { setThreadName("DeadlockWatchdogThread"); }); deadlockWatchdogThread->start(); // Pause the deadlock watchdog when we sleep, or it might @@ -5206,6 +5208,7 @@ void getCpuUsage(vec3& systemAndUser) { void setupCpuMonitorThread() { initCpuUsage(); auto cpuMonitorThread = QThread::currentThread(); + setThreadName("CPU Monitor Thread"); QTimer* timer = new QTimer(); timer->setInterval(50); diff --git a/libraries/audio/src/AudioInjectorManager.cpp b/libraries/audio/src/AudioInjectorManager.cpp index 04e5666106..9494a84fab 100644 --- a/libraries/audio/src/AudioInjectorManager.cpp +++ b/libraries/audio/src/AudioInjectorManager.cpp @@ -15,6 +15,7 @@ #include #include +#include #include "AudioConstants.h" #include "AudioInjector.h" @@ -54,11 +55,14 @@ AudioInjectorManager::~AudioInjectorManager() { } void AudioInjectorManager::createThread() { - _thread = new QThread; + _thread = new QThread(); _thread->setObjectName("Audio Injector Thread"); // when the thread is started, have it call our run to handle injection of audio - connect(_thread, &QThread::started, this, &AudioInjectorManager::run, Qt::DirectConnection); + connect(_thread, &QThread::started, this, [this] { + setThreadName("AudioInjectorManager"); + run(); + }, Qt::DirectConnection); moveToThread(_thread); diff --git a/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.cpp b/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.cpp index f601b99779..ba83ddff55 100644 --- a/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.cpp +++ b/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.cpp @@ -50,6 +50,7 @@ #include "CompositorHelper.h" #include "Logging.h" #include "RefreshRateController.h" +#include using namespace shader::gpu::program; @@ -285,6 +286,7 @@ bool OpenGLDisplayPlugin::activate() { widget->context()->doneCurrent(); presentThread->setContext(widget->context()); + connect(presentThread.data(), &QThread::started, [] { setThreadName("OpenGL Present Thread"); }); // Start execution presentThread->start(); } diff --git a/libraries/gpu-gl-common/src/gpu/gl/GLTextureTransfer.cpp b/libraries/gpu-gl-common/src/gpu/gl/GLTextureTransfer.cpp index af865b3ad7..1b57d4292c 100644 --- a/libraries/gpu-gl-common/src/gpu/gl/GLTextureTransfer.cpp +++ b/libraries/gpu-gl-common/src/gpu/gl/GLTextureTransfer.cpp @@ -8,8 +8,10 @@ #include "GLTexture.h" +#include #include #include +#include #include "GLBackend.h" @@ -64,7 +66,7 @@ public: protected: class TextureBufferThread : public QThread { public: - TextureBufferThread(GLTextureTransferEngineDefault& parent) : _parent(parent) { start(); } + TextureBufferThread(GLTextureTransferEngineDefault& parent) : _parent(parent) {} protected: void run() override { @@ -302,6 +304,8 @@ void GLTextureTransferEngineDefault::processTransferQueues() { #if THREADED_TEXTURE_BUFFERING if (!_transferThread) { _transferThread = new TextureBufferThread(*this); + QObject::connect(_transferThread, &QThread::started, [] { setThreadName("TextureBufferThread"); }); + _transferThread->start(); } #endif diff --git a/libraries/networking/src/ResourceManager.cpp b/libraries/networking/src/ResourceManager.cpp index 0b9d5a2d60..f4e4cca482 100644 --- a/libraries/networking/src/ResourceManager.cpp +++ b/libraries/networking/src/ResourceManager.cpp @@ -19,6 +19,7 @@ #include #include +#include #include "AssetResourceRequest.h" #include "FileResourceRequest.h" @@ -28,12 +29,16 @@ #include "NetworkingConstants.h" ResourceManager::ResourceManager(bool atpSupportEnabled) : _atpSupportEnabled(atpSupportEnabled) { - _thread.setObjectName("Resource Manager Thread"); + QString name = "Resource Manager Thread"; + _thread.setObjectName(name); if (_atpSupportEnabled) { auto assetClient = DependencyManager::set(); assetClient->moveToThread(&_thread); - QObject::connect(&_thread, &QThread::started, assetClient.data(), &AssetClient::initCaching); + QObject::connect(&_thread, &QThread::started, assetClient.data(), [assetClient, name] { + setThreadName(name.toStdString()); + assetClient->initCaching(); + }); } _thread.start(); diff --git a/libraries/networking/src/udt/SendQueue.cpp b/libraries/networking/src/udt/SendQueue.cpp index 2997c272f9..63447f6e70 100644 --- a/libraries/networking/src/udt/SendQueue.cpp +++ b/libraries/networking/src/udt/SendQueue.cpp @@ -31,6 +31,7 @@ #include "Socket.h" #include #include +#include #include "../NetworkLogging.h" @@ -67,24 +68,26 @@ const microseconds SendQueue::MINIMUM_ESTIMATED_TIMEOUT = milliseconds(10); 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, currentMessageNumber, hasReceivedHandshakeACK)); // Setup queue private thread - QThread* thread = new QThread; - thread->setObjectName("Networking: SendQueue " + destination.objectName()); // Name thread for easier debug - + QThread* thread = new QThread(); + QString name = "Networking: SendQueue " + destination.objectName(); + thread->setObjectName(name); // Name thread for easier debug + + connect(thread, &QThread::started, [name] { setThreadName(name.toStdString()); }); connect(thread, &QThread::started, queue.get(), &SendQueue::run); - + connect(queue.get(), &QObject::destroyed, thread, &QThread::quit); // Thread auto cleanup connect(thread, &QThread::finished, thread, &QThread::deleteLater); // Thread auto cleanup - + // Move queue to private thread and start it queue->moveToThread(thread); - + thread->start(); - + return queue; } diff --git a/libraries/qml/src/qml/impl/SharedObject.cpp b/libraries/qml/src/qml/impl/SharedObject.cpp index 55788c8a02..c5411a6195 100644 --- a/libraries/qml/src/qml/impl/SharedObject.cpp +++ b/libraries/qml/src/qml/impl/SharedObject.cpp @@ -29,6 +29,7 @@ #include "RenderControl.h" #include "RenderEventHandler.h" #include "TextureCache.h" +#include // Time between receiving a request to render the offscreen UI actually triggering // the render. Could possibly be increased depending on the framerate we expect to @@ -162,7 +163,9 @@ void SharedObject::setRootItem(QQuickItem* rootItem) { // Create the render thread _renderThread = new QThread(); - _renderThread->setObjectName(objectName()); + QString name = objectName(); + _renderThread->setObjectName(name); + QObject::connect(_renderThread, &QThread::started, [name] { setThreadName("QML SharedObject " + name.toStdString()); }); _renderThread->start(); // Create event handler for the render thread diff --git a/libraries/script-engine/src/ScriptEngine.cpp b/libraries/script-engine/src/ScriptEngine.cpp index f42178b023..e553672b02 100644 --- a/libraries/script-engine/src/ScriptEngine.cpp +++ b/libraries/script-engine/src/ScriptEngine.cpp @@ -87,7 +87,7 @@ #include "SettingHandle.h" #include #include - +#include const QString ScriptEngine::_SETTINGS_ENABLE_EXTENDED_EXCEPTIONS { "com.highfidelity.experimental.enableExtendedJSExceptions" @@ -429,13 +429,17 @@ void ScriptEngine::runInThread() { // The thread interface cannot live on itself, and we want to move this into the thread, so // the thread cannot have this as a parent. QThread* workerThread = new QThread(); - workerThread->setObjectName(QString("js:") + getFilename().replace("about:","")); + QString name = QString("js:") + getFilename().replace("about:",""); + workerThread->setObjectName(name); moveToThread(workerThread); // NOTE: If you connect any essential signals for proper shutdown or cleanup of // the script engine, make sure to add code to "reconnect" them to the // disconnectNonEssentialSignals() method - connect(workerThread, &QThread::started, this, &ScriptEngine::run); + connect(workerThread, &QThread::started, this, [this, name] { + setThreadName(name.toStdString()); + run(); + }); connect(this, &QObject::destroyed, workerThread, &QThread::quit); connect(workerThread, &QThread::finished, workerThread, &QObject::deleteLater); diff --git a/libraries/shared/src/GenericThread.cpp b/libraries/shared/src/GenericThread.cpp index e35c74e68a..4e9dba8893 100644 --- a/libraries/shared/src/GenericThread.cpp +++ b/libraries/shared/src/GenericThread.cpp @@ -14,6 +14,8 @@ #include #include +#include "ThreadHelpers.h" + GenericThread::GenericThread() : _stopThread(false), _isThreaded(false) // assume non-threaded, must call initialize() @@ -36,8 +38,11 @@ void GenericThread::initialize(bool isThreaded, QThread::Priority priority) { // match the thread name to our object name _thread->setObjectName(objectName()); - connect(_thread, &QThread::started, this, &GenericThread::started); - connect(_thread, &QThread::started, this, &GenericThread::threadRoutine); + connect(_thread, &QThread::started, this, [this] { + setThreadName("Generic thread " + objectName().toStdString()); + started(); + threadRoutine(); + }); connect(_thread, &QThread::finished, this, &GenericThread::finished); moveToThread(_thread); diff --git a/libraries/shared/src/SettingInterface.cpp b/libraries/shared/src/SettingInterface.cpp index 04da35656e..ab5b3e380a 100644 --- a/libraries/shared/src/SettingInterface.cpp +++ b/libraries/shared/src/SettingInterface.cpp @@ -21,6 +21,7 @@ #include "SettingManager.h" #include "SharedLogging.h" #include "SharedUtil.h" +#include "ThreadHelpers.h" namespace Setting { // This should only run as a post-routine in the QCoreApplication destructor @@ -53,7 +54,10 @@ namespace Setting { thread->setObjectName("Settings Thread"); // Setup setting periodical save timer - QObject::connect(thread, &QThread::started, globalManager.data(), &Manager::startTimer); + QObject::connect(thread, &QThread::started, globalManager.data(), [globalManager] { + setThreadName("Settings Save Thread"); + globalManager->startTimer(); + }); QObject::connect(thread, &QThread::finished, globalManager.data(), &Manager::stopTimer); // Setup manager threading affinity diff --git a/libraries/shared/src/ThreadHelpers.h b/libraries/shared/src/ThreadHelpers.h index d236344dc5..42de117e67 100644 --- a/libraries/shared/src/ThreadHelpers.h +++ b/libraries/shared/src/ThreadHelpers.h @@ -32,6 +32,8 @@ void withLock(QMutex& lock, F function) { function(); } +void setThreadName(const std::string& name); + void moveToNewNamedThread(QObject* object, const QString& name, std::function preStartCallback, std::function startCallback, diff --git a/libraries/ui/src/ui/TabletScriptingInterface.cpp b/libraries/ui/src/ui/TabletScriptingInterface.cpp index 61c74dc17c..e80b11915a 100644 --- a/libraries/ui/src/ui/TabletScriptingInterface.cpp +++ b/libraries/ui/src/ui/TabletScriptingInterface.cpp @@ -595,7 +595,7 @@ void TabletProxy::gotoMenuScreen(const QString& submenu) { } void TabletProxy::loadQMLOnTopImpl(const QVariant& path, bool localSafeContext) { - if (QThread::currentThread() != thread()) { + if (QThread::currentThread() != thread()) { qCWarning(uiLogging) << __FUNCTION__ << "may not be called directly by scripts"; return; } diff --git a/plugins/openvr/src/OpenVrDisplayPlugin.cpp b/plugins/openvr/src/OpenVrDisplayPlugin.cpp index c5eb740325..b5c1f713e7 100644 --- a/plugins/openvr/src/OpenVrDisplayPlugin.cpp +++ b/plugins/openvr/src/OpenVrDisplayPlugin.cpp @@ -31,6 +31,7 @@ #include #include #include +#include #include "OpenVrHelpers.h" @@ -494,6 +495,7 @@ bool OpenVrDisplayPlugin::internalActivate() { _submitCanvas->doneCurrent(); }); } + connect(_submitThread.get(), &QThread::started, [] { setThreadName("OpenVR Submit Thread"); }); _submitCanvas->moveToThread(_submitThread.get()); } diff --git a/plugins/openvr/src/ViveControllerManager.cpp b/plugins/openvr/src/ViveControllerManager.cpp index 3629698e11..ac41502a38 100644 --- a/plugins/openvr/src/ViveControllerManager.cpp +++ b/plugins/openvr/src/ViveControllerManager.cpp @@ -49,6 +49,7 @@ #include #include #include +#include #include #include @@ -403,6 +404,7 @@ bool ViveControllerManager::activate() { if (_viveProEye) { _viveProEyeReadThread = std::make_shared(); + connect(_viveProEyeReadThread.get(), &QThread::started, [] { setThreadName("ViveProEyeReadThread"); }); _viveProEyeReadThread->start(QThread::HighPriority); } } From b2b38ad23be55bf2dc1f47087a7914d63433b3dd Mon Sep 17 00:00:00 2001 From: Alezia Kurdis <60075796+AleziaKurdis@users.noreply.github.com> Date: Tue, 16 Feb 2021 21:49:26 -0500 Subject: [PATCH 149/152] Minor adjustments Minor adjustments --- scripts/system/create/entityList/html/js/entityList.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/scripts/system/create/entityList/html/js/entityList.js b/scripts/system/create/entityList/html/js/entityList.js index cd33bdd29c..d21e65d47d 100644 --- a/scripts/system/create/entityList/html/js/entityList.js +++ b/scripts/system/create/entityList/html/js/entityList.js @@ -933,7 +933,7 @@ function loaded() { entityIds: selection, })); } - + function updateEntityData(entityData) { entities = []; entitiesByID = {}; @@ -943,7 +943,7 @@ function loaded() { entityData.forEach(function(entity) { let type = entity.type; let filename = getFilename(entity.url); - + let entityData = { id: entity.id, name: entity.name, @@ -991,7 +991,7 @@ function loaded() { e.type.toLowerCase().indexOf(searchTerm) > -1 || e.fullUrl.toLowerCase().indexOf(searchTerm) > -1 || (e.urlWithPath.toLowerCase().indexOf(searchTerm) > -1 && - columnsByID["urlWithPath"].elTh.style.visibility === "visible")|| + columnsByID["urlWithPath"].elTh.style.visibility === "visible") || e.id.toLowerCase().indexOf(searchTerm) > -1); return typeFilter && searchFilter; }); From 852edec9e76d6dfe04965f9c3a5e9c1cc59a10c4 Mon Sep 17 00:00:00 2001 From: HifiExperiments Date: Thu, 18 Feb 2021 22:15:12 -0800 Subject: [PATCH 150/152] entities with billboardMode != none use local rotation so parent rotation doesn't affect them --- .../src/RenderableEntityItem.cpp | 17 +++++++++++------ .../src/RenderableEntityItem.h | 11 ++++++----- .../src/RenderableModelEntityItem.cpp | 5 +++-- .../src/RenderablePolyLineEntityItem.cpp | 6 +++--- .../src/RenderablePolyLineEntityItem.h | 2 +- .../src/RenderablePolyVoxEntityItem.cpp | 5 +++-- .../src/RenderableShapeEntityItem.cpp | 7 ++----- .../src/RenderableShapeEntityItem.h | 4 ---- .../src/RenderableTextEntityItem.cpp | 12 ++++++------ libraries/entities/src/EntityItem.cpp | 13 +++++++++++++ libraries/entities/src/EntityItem.h | 1 + libraries/entities/src/EntityTreeElement.cpp | 10 ++++++---- libraries/entities/src/GizmoEntityItem.cpp | 10 ++++++---- libraries/entities/src/ModelEntityItem.cpp | 13 +++++++++++++ libraries/entities/src/ModelEntityItem.h | 1 + libraries/entities/src/PolyVoxEntityItem.cpp | 7 ++++--- libraries/entities/src/ShapeEntityItem.cpp | 10 ++++++---- libraries/render-utils/src/Model.cpp | 3 ++- libraries/shared/src/SpatiallyNestable.cpp | 11 +++++++++++ libraries/shared/src/SpatiallyNestable.h | 1 + 20 files changed, 99 insertions(+), 50 deletions(-) diff --git a/libraries/entities-renderer/src/RenderableEntityItem.cpp b/libraries/entities-renderer/src/RenderableEntityItem.cpp index b2670e3bce..3e13b301df 100644 --- a/libraries/entities-renderer/src/RenderableEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableEntityItem.cpp @@ -368,6 +368,11 @@ bool EntityRenderer::needsRenderUpdate() const { return needsRenderUpdateFromEntity(_entity); } +Transform EntityRenderer::getTransformToCenterWithMaybeOnlyLocalRotation(const EntityItemPointer& entity, bool& success) const { + return entity->getBillboardMode() == BillboardMode::NONE ? entity->getTransformToCenter(success) : + entity->getTransformToCenterWithOnlyLocalRotation(success); +} + // Returns true if the item in question needs to have updateInScene called because of changes in the entity bool EntityRenderer::needsRenderUpdateFromEntity(const EntityItemPointer& entity) const { if (entity->needsRenderUpdate()) { @@ -379,12 +384,12 @@ bool EntityRenderer::needsRenderUpdateFromEntity(const EntityItemPointer& entity } bool success = false; - auto bound = _entity->getAABox(success); + auto bound = entity->getAABox(success); if (success && _bound != bound) { return true; } - auto newModelTransform = _entity->getTransformToCenter(success); + auto newModelTransform = getTransformToCenterWithMaybeOnlyLocalRotation(entity, success); // FIXME can we use a stale model transform here? if (success && newModelTransform != _modelTransform) { return true; @@ -401,15 +406,15 @@ bool EntityRenderer::needsRenderUpdateFromEntity(const EntityItemPointer& entity return false; } -void EntityRenderer::updateModelTransformAndBound() { +void EntityRenderer::updateModelTransformAndBound(const EntityItemPointer& entity) { bool success = false; - auto newModelTransform = _entity->getTransformToCenter(success); + auto newModelTransform = getTransformToCenterWithMaybeOnlyLocalRotation(entity, success); if (success) { _modelTransform = newModelTransform; } success = false; - auto bound = _entity->getAABox(success); + auto bound = entity->getAABox(success); if (success) { _bound = bound; } @@ -429,7 +434,7 @@ void EntityRenderer::doRenderUpdateSynchronous(const ScenePointer& scene, Transa _prevIsTransparent = transparent; - updateModelTransformAndBound(); + updateModelTransformAndBound(entity); _moving = entity->isMovingRelativeToParent(); _visible = entity->getVisible(); diff --git a/libraries/entities-renderer/src/RenderableEntityItem.h b/libraries/entities-renderer/src/RenderableEntityItem.h index 7f0e1e16ee..9392d61e75 100644 --- a/libraries/entities-renderer/src/RenderableEntityItem.h +++ b/libraries/entities-renderer/src/RenderableEntityItem.h @@ -101,7 +101,7 @@ protected: virtual void doRender(RenderArgs* args) = 0; virtual bool isFading() const { return _isFading; } - virtual void updateModelTransformAndBound(); + virtual void updateModelTransformAndBound(const EntityItemPointer& entity); virtual bool isTransparent() const { return _isFading ? Interpolate::calculateFadeRatio(_fadeStartTime) < 1.0f : false; } inline bool isValidRenderItem() const { return _renderItemID != Item::INVALID_ITEM_ID; } @@ -109,16 +109,14 @@ protected: virtual void setRenderLayer(RenderLayer value) { _renderLayer = value; } virtual void setCullWithParent(bool value) { _cullWithParent = value; } -signals: - void requestRenderUpdate(); - -protected: template std::shared_ptr asTypedEntity() { return std::static_pointer_cast(_entity); } static void makeStatusGetters(const EntityItemPointer& entity, Item::Status::Getters& statusGetters); const Transform& getModelTransform() const; + Transform getTransformToCenterWithMaybeOnlyLocalRotation(const EntityItemPointer& entity, bool& success) const; + Item::Bound _bound; SharedSoundPointer _collisionSound; QUuid _changeHandlerId; @@ -154,6 +152,9 @@ protected: const EntityItemPointer _entity; QUuid _entityID; + +signals: + void requestRenderUpdate(); }; template diff --git a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp index 4d3a79c9af..3c245e5d4f 100644 --- a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp @@ -115,11 +115,12 @@ bool RenderableModelEntityItem::needsUpdateModelBounds() const { } bool success; - auto transform = getTransform(success); + auto transform = getBillboardMode() == BillboardMode::NONE ? getTransform(success) : getTransformWithOnlyLocalRotation(success); if (success) { if (model->getTranslation() != transform.getTranslation()) { return true; } + if (model->getRotation() != transform.getRotation()) { return true; } @@ -171,7 +172,7 @@ void RenderableModelEntityItem::updateModelBounds() { } bool success; - auto transform = getTransform(success); + auto transform = getBillboardMode() == BillboardMode::NONE ? getTransform(success) : getTransformWithOnlyLocalRotation(success); if (success && (model->getTranslation() != transform.getTranslation() || model->getRotation() != transform.getRotation())) { model->setTransformNoUpdateRenderItems(transform); diff --git a/libraries/entities-renderer/src/RenderablePolyLineEntityItem.cpp b/libraries/entities-renderer/src/RenderablePolyLineEntityItem.cpp index 65e9f57b02..e4bb6952a7 100644 --- a/libraries/entities-renderer/src/RenderablePolyLineEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderablePolyLineEntityItem.cpp @@ -41,13 +41,13 @@ PolyLineEntityRenderer::PolyLineEntityRenderer(const EntityItemPointer& entity) } } -void PolyLineEntityRenderer::updateModelTransformAndBound() { +void PolyLineEntityRenderer::updateModelTransformAndBound(const EntityItemPointer& entity) { bool success = false; - auto newModelTransform = _entity->getTransformToCenter(success); + auto newModelTransform = getTransformToCenterWithMaybeOnlyLocalRotation(entity, success); if (success) { _modelTransform = newModelTransform; - auto lineEntity = std::static_pointer_cast(_entity); + auto lineEntity = std::static_pointer_cast(entity); AABox bound; lineEntity->computeTightLocalBoundingBox(bound); bound.transform(newModelTransform); diff --git a/libraries/entities-renderer/src/RenderablePolyLineEntityItem.h b/libraries/entities-renderer/src/RenderablePolyLineEntityItem.h index c4fbb9a776..6e5068c24f 100644 --- a/libraries/entities-renderer/src/RenderablePolyLineEntityItem.h +++ b/libraries/entities-renderer/src/RenderablePolyLineEntityItem.h @@ -25,7 +25,7 @@ class PolyLineEntityRenderer : public TypedEntityRenderer { public: PolyLineEntityRenderer(const EntityItemPointer& entity); - void updateModelTransformAndBound() override; + void updateModelTransformAndBound(const EntityItemPointer& entity) override; virtual bool isTransparent() const override; diff --git a/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.cpp b/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.cpp index 859accf01a..5c8374b937 100644 --- a/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.cpp @@ -1785,8 +1785,9 @@ void PolyVoxEntityRenderer::doRenderUpdateSynchronousTyped(const ScenePointer& s void PolyVoxEntityRenderer::doRenderUpdateAsynchronousTyped(const TypedEntityPointer& entity) { _lastVoxelToLocalMatrix = entity->voxelToLocalMatrix(); - _position = entity->getWorldPosition(); - _orientation = entity->getWorldOrientation(); + bool success; + _position = entity->getCenterPosition(success); + _orientation = entity->getBillboardMode() == BillboardMode::NONE ? entity->getWorldOrientation() : entity->getLocalOrientation(); _lastVoxelVolumeSize = entity->getVoxelVolumeSize(); _params->setSubData(0, vec4(_lastVoxelVolumeSize, 0.0)); graphics::MeshPointer newMesh; diff --git a/libraries/entities-renderer/src/RenderableShapeEntityItem.cpp b/libraries/entities-renderer/src/RenderableShapeEntityItem.cpp index 674d7c297d..35739c2430 100644 --- a/libraries/entities-renderer/src/RenderableShapeEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableShapeEntityItem.cpp @@ -56,15 +56,12 @@ void ShapeEntityRenderer::doRenderUpdateSynchronousTyped(const ScenePointer& sce AbstractViewStateInterface::instance()->pushPostUpdateLambda(key, [this, entity] { withWriteLock([&] { _shape = entity->getShape(); - _position = entity->getWorldPosition(); - _dimensions = entity->getUnscaledDimensions(); // get unscaled to avoid scaling twice - _orientation = entity->getWorldOrientation(); _renderTransform = getModelTransform(); // contains parent scale, if this entity scales with its parent if (_shape == entity::Sphere) { _renderTransform.postScale(SPHERE_ENTITY_SCALE); } - _renderTransform.postScale(_dimensions); + _renderTransform.postScale(entity->getUnscaledDimensions()); }); }); } @@ -248,7 +245,7 @@ void ShapeEntityRenderer::doRender(RenderArgs* args) { outColor = procedural->getColor(outColor); outColor.a *= procedural->isFading() ? Interpolate::calculateFadeRatio(procedural->getFadeStartTime()) : 1.0f; withReadLock([&] { - procedural->prepare(batch, _position, _dimensions, _orientation, _created, ProceduralProgramKey(outColor.a < 1.0f)); + procedural->prepare(batch, transform.getTranslation(), transform.getScale(), transform.getRotation(), _created, ProceduralProgramKey(outColor.a < 1.0f)); }); if (render::ShapeKey(args->_globalShapeKey).isWireframe() || _primitiveMode == PrimitiveMode::LINES) { diff --git a/libraries/entities-renderer/src/RenderableShapeEntityItem.h b/libraries/entities-renderer/src/RenderableShapeEntityItem.h index fe62ad48b9..403d389378 100644 --- a/libraries/entities-renderer/src/RenderableShapeEntityItem.h +++ b/libraries/entities-renderer/src/RenderableShapeEntityItem.h @@ -45,10 +45,6 @@ private: std::shared_ptr _material { std::make_shared() }; glm::vec3 _color { NAN }; float _alpha { NAN }; - - glm::vec3 _position; - glm::vec3 _dimensions; - glm::quat _orientation; }; } } diff --git a/libraries/entities-renderer/src/RenderableTextEntityItem.cpp b/libraries/entities-renderer/src/RenderableTextEntityItem.cpp index 16d9afb913..3d658d8511 100644 --- a/libraries/entities-renderer/src/RenderableTextEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableTextEntityItem.cpp @@ -292,12 +292,12 @@ void entities::TextPayload::render(RenderArgs* args) { } auto textRenderable = std::static_pointer_cast(renderable); - Transform modelTransform; + Transform transform; glm::vec3 dimensions; glm::vec4 textColor; textRenderable->withReadLock([&] { - modelTransform = textRenderable->_renderTransform; + transform = textRenderable->_renderTransform; dimensions = textRenderable->_dimensions; float fadeRatio = textRenderable->_isFading ? Interpolate::calculateFadeRatio(textRenderable->_fadeStartTime) : 1.0f; @@ -313,13 +313,13 @@ void entities::TextPayload::render(RenderArgs* args) { return; } - modelTransform.setRotation(BillboardModeHelpers::getBillboardRotation(modelTransform.getTranslation(), modelTransform.getRotation(), textRenderable->_billboardMode, + transform.setRotation(BillboardModeHelpers::getBillboardRotation(transform.getTranslation(), transform.getRotation(), textRenderable->_billboardMode, args->_renderMode == RenderArgs::RenderMode::SHADOW_RENDER_MODE ? BillboardModeHelpers::getPrimaryViewFrustumPosition() : args->getViewFrustum().getPosition())); float scale = textRenderable->_lineHeight / textRenderer->getFontSize(); - modelTransform.postTranslate(glm::vec3(-0.5, 0.5, 1.0f + EPSILON / dimensions.z)); - modelTransform.setScale(scale); - batch.setModelTransform(modelTransform); + transform.postTranslate(glm::vec3(-0.5, 0.5, 1.0f + EPSILON / dimensions.z)); + transform.setScale(scale); + batch.setModelTransform(transform); glm::vec2 bounds = glm::vec2(dimensions.x - (textRenderable->_leftMargin + textRenderable->_rightMargin), dimensions.y - (textRenderable->_topMargin + textRenderable->_bottomMargin)); textRenderer->draw(batch, textRenderable->_leftMargin / scale, -textRenderable->_topMargin / scale, bounds / scale, scale, diff --git a/libraries/entities/src/EntityItem.cpp b/libraries/entities/src/EntityItem.cpp index 9d3947ab56..6e761698c9 100644 --- a/libraries/entities/src/EntityItem.cpp +++ b/libraries/entities/src/EntityItem.cpp @@ -1620,6 +1620,19 @@ const Transform EntityItem::getTransformToCenter(bool& success) const { return result; } +const Transform EntityItem::getTransformToCenterWithOnlyLocalRotation(bool& success) const { + Transform result = getTransformWithOnlyLocalRotation(success); + glm::vec3 pivot = getPivot(); + if (pivot != ENTITY_ITEM_ZERO_VEC3) { + result.postTranslate(pivot); + } + glm::vec3 registrationPoint = getRegistrationPoint(); + if (registrationPoint != ENTITY_ITEM_HALF_VEC3) { // If it is not already centered, translate to center + result.postTranslate((ENTITY_ITEM_HALF_VEC3 - registrationPoint) * getScaledDimensions()); // Position to center + } + return result; +} + /// The maximum bounding cube for the entity, independent of it's rotation. /// This accounts for the registration point (upon which rotation occurs around). /// diff --git a/libraries/entities/src/EntityItem.h b/libraries/entities/src/EntityItem.h index 152e003913..b08817044a 100644 --- a/libraries/entities/src/EntityItem.h +++ b/libraries/entities/src/EntityItem.h @@ -190,6 +190,7 @@ public: void setCenterPosition(const glm::vec3& position); const Transform getTransformToCenter(bool& success) const; + const Transform getTransformToCenterWithOnlyLocalRotation(bool& success) const; void requiresRecalcBoxes(); diff --git a/libraries/entities/src/EntityTreeElement.cpp b/libraries/entities/src/EntityTreeElement.cpp index 90c185be8b..f330058a78 100644 --- a/libraries/entities/src/EntityTreeElement.cpp +++ b/libraries/entities/src/EntityTreeElement.cpp @@ -218,8 +218,9 @@ EntityItemID EntityTreeElement::evalDetailedRayIntersection(const glm::vec3& ori // extents is the entity relative, scaled, centered extents of the entity glm::vec3 position = entity->getWorldPosition(); glm::mat4 translation = glm::translate(position); - glm::quat orientation = entity->getWorldOrientation(); - glm::mat4 rotation = glm::mat4_cast(BillboardModeHelpers::getBillboardRotation(position, orientation, entity->getBillboardMode(), + BillboardMode billboardMode = entity->getBillboardMode(); + glm::quat orientation = billboardMode == BillboardMode::NONE ? entity->getWorldOrientation() : entity->getLocalOrientation(); + glm::mat4 rotation = glm::mat4_cast(BillboardModeHelpers::getBillboardRotation(position, orientation, billboardMode, viewFrustumPos, entity->getRotateForPicking())); glm::mat4 entityToWorldMatrix = translation * rotation; glm::mat4 worldToEntityMatrix = glm::inverse(entityToWorldMatrix); @@ -368,8 +369,9 @@ EntityItemID EntityTreeElement::evalDetailedParabolaIntersection(const glm::vec3 // extents is the entity relative, scaled, centered extents of the entity glm::vec3 position = entity->getWorldPosition(); glm::mat4 translation = glm::translate(position); - glm::quat orientation = entity->getWorldOrientation(); - glm::mat4 rotation = glm::mat4_cast(BillboardModeHelpers::getBillboardRotation(position, orientation, entity->getBillboardMode(), + BillboardMode billboardMode = entity->getBillboardMode(); + glm::quat orientation = billboardMode == BillboardMode::NONE ? entity->getWorldOrientation() : entity->getLocalOrientation(); + glm::mat4 rotation = glm::mat4_cast(BillboardModeHelpers::getBillboardRotation(position, orientation, billboardMode, viewFrustumPos, entity->getRotateForPicking())); glm::mat4 entityToWorldMatrix = translation * rotation; glm::mat4 worldToEntityMatrix = glm::inverse(entityToWorldMatrix); diff --git a/libraries/entities/src/GizmoEntityItem.cpp b/libraries/entities/src/GizmoEntityItem.cpp index 694371d739..b6c5713c1a 100644 --- a/libraries/entities/src/GizmoEntityItem.cpp +++ b/libraries/entities/src/GizmoEntityItem.cpp @@ -108,10 +108,11 @@ bool GizmoEntityItem::findDetailedRayIntersection(const glm::vec3& origin, const QVariantMap& extraInfo, bool precisionPicking) const { glm::vec3 dimensions = getScaledDimensions(); glm::vec2 xyDimensions(dimensions.x, dimensions.z); - glm::quat rotation = getWorldOrientation(); + BillboardMode billboardMode = getBillboardMode(); + glm::quat rotation = billboardMode == BillboardMode::NONE ? getWorldOrientation() : getLocalOrientation(); rotation *= glm::angleAxis(-(float)M_PI_2, Vectors::RIGHT); glm::vec3 position = getWorldPosition() + rotation * (dimensions * (ENTITY_ITEM_DEFAULT_REGISTRATION_POINT - getRegistrationPoint())); - rotation = BillboardModeHelpers::getBillboardRotation(position, rotation, getBillboardMode(), viewFrustumPos); + rotation = BillboardModeHelpers::getBillboardRotation(position, rotation, billboardMode, viewFrustumPos); if (findRayRectangleIntersection(origin, direction, rotation, position, xyDimensions, distance)) { glm::vec3 hitPosition = origin + (distance * direction); @@ -143,10 +144,11 @@ bool GizmoEntityItem::findDetailedParabolaIntersection(const glm::vec3& origin, //// Scale the dimensions by the diameter glm::vec3 dimensions = getScaledDimensions(); glm::vec2 xyDimensions(dimensions.x, dimensions.z); - glm::quat rotation = getWorldOrientation(); + BillboardMode billboardMode = getBillboardMode(); + glm::quat rotation = billboardMode == BillboardMode::NONE ? getWorldOrientation() : getLocalOrientation(); rotation *= glm::angleAxis(-(float)M_PI_2, Vectors::RIGHT); glm::vec3 position = getWorldPosition(); - rotation = BillboardModeHelpers::getBillboardRotation(position, rotation, getBillboardMode(), viewFrustumPos); + rotation = BillboardModeHelpers::getBillboardRotation(position, rotation, billboardMode, viewFrustumPos); glm::quat inverseRot = glm::inverse(rotation); glm::vec3 localOrigin = inverseRot * (origin - position); diff --git a/libraries/entities/src/ModelEntityItem.cpp b/libraries/entities/src/ModelEntityItem.cpp index 61362896ee..321e92b9f0 100644 --- a/libraries/entities/src/ModelEntityItem.cpp +++ b/libraries/entities/src/ModelEntityItem.cpp @@ -330,6 +330,19 @@ const Transform ModelEntityItem::getTransform(bool& success, int depth) const { return worldTransform; } + +const Transform ModelEntityItem::getTransformWithOnlyLocalRotation(bool& success, int depth) const { + const Transform parentTransform = getParentTransform(success, depth); + Transform localTransform = getLocalTransform(); + localTransform.postScale(getModelScale()); + + Transform worldTransform; + Transform::mult(worldTransform, parentTransform, localTransform); + worldTransform.setRotation(localTransform.getRotation()); + + return worldTransform; +} + void ModelEntityItem::setCompoundShapeURL(const QString& url) { withWriteLock([&] { if (_compoundShapeURL.get() != url) { diff --git a/libraries/entities/src/ModelEntityItem.h b/libraries/entities/src/ModelEntityItem.h index 6e92b225a1..a00327251c 100644 --- a/libraries/entities/src/ModelEntityItem.h +++ b/libraries/entities/src/ModelEntityItem.h @@ -71,6 +71,7 @@ public: virtual void setScaledDimensions(const glm::vec3& value) override; virtual const Transform getTransform(bool& success, int depth = 0) const override; + virtual const Transform getTransformWithOnlyLocalRotation(bool& success, int depth = 0) const override; virtual const Transform getTransform() const override; static const QString DEFAULT_COMPOUND_SHAPE_URL; diff --git a/libraries/entities/src/PolyVoxEntityItem.cpp b/libraries/entities/src/PolyVoxEntityItem.cpp index 5ed9f69b5a..49dc0d7c90 100644 --- a/libraries/entities/src/PolyVoxEntityItem.cpp +++ b/libraries/entities/src/PolyVoxEntityItem.cpp @@ -378,14 +378,15 @@ glm::mat4 PolyVoxEntityItem::localToVoxelMatrix() const { } glm::mat4 PolyVoxEntityItem::voxelToWorldMatrix(bool includeBillboard) const { - glm::quat orientation = getWorldOrientation(); glm::vec3 position = getWorldPosition(); glm::mat4 translation = glm::translate(position); glm::mat4 rotation; if (includeBillboard) { - rotation = glm::mat4_cast(BillboardModeHelpers::getBillboardRotation(position, orientation, getBillboardMode(), BillboardModeHelpers::getPrimaryViewFrustumPosition())); + BillboardMode billboardMode = getBillboardMode(); + glm::quat orientation = billboardMode == BillboardMode::NONE ? getWorldOrientation() : getLocalOrientation(); + rotation = glm::mat4_cast(BillboardModeHelpers::getBillboardRotation(position, orientation, billboardMode, BillboardModeHelpers::getPrimaryViewFrustumPosition())); } else { - rotation = glm::mat4_cast(orientation); + rotation = glm::mat4_cast(getWorldOrientation()); } return translation * rotation * voxelToLocalMatrix(); } diff --git a/libraries/entities/src/ShapeEntityItem.cpp b/libraries/entities/src/ShapeEntityItem.cpp index 7858e62f7d..4349eefd2d 100644 --- a/libraries/entities/src/ShapeEntityItem.cpp +++ b/libraries/entities/src/ShapeEntityItem.cpp @@ -277,9 +277,10 @@ bool ShapeEntityItem::findDetailedRayIntersection(const glm::vec3& origin, const float& distance, BoxFace& face, glm::vec3& surfaceNormal, QVariantMap& extraInfo, bool precisionPicking) const { glm::vec3 dimensions = getScaledDimensions(); - glm::quat rotation = getWorldOrientation(); + BillboardMode billboardMode = getBillboardMode(); + glm::quat rotation = billboardMode == BillboardMode::NONE ? getWorldOrientation() : getLocalOrientation(); glm::vec3 position = getWorldPosition() + rotation * (dimensions * (ENTITY_ITEM_DEFAULT_REGISTRATION_POINT - getRegistrationPoint())); - rotation = BillboardModeHelpers::getBillboardRotation(position, rotation, getBillboardMode(), viewFrustumPos); + rotation = BillboardModeHelpers::getBillboardRotation(position, rotation, billboardMode, viewFrustumPos); // determine the ray in the frame of the entity transformed from a unit sphere glm::mat4 entityToWorldMatrix = glm::translate(position) * glm::mat4_cast(rotation) * glm::scale(dimensions); @@ -309,9 +310,10 @@ bool ShapeEntityItem::findDetailedParabolaIntersection(const glm::vec3& origin, BoxFace& face, glm::vec3& surfaceNormal, QVariantMap& extraInfo, bool precisionPicking) const { glm::vec3 dimensions = getScaledDimensions(); - glm::quat rotation = getWorldOrientation(); + BillboardMode billboardMode = getBillboardMode(); + glm::quat rotation = billboardMode == BillboardMode::NONE ? getWorldOrientation() : getLocalOrientation(); glm::vec3 position = getWorldPosition() + rotation * (dimensions * (ENTITY_ITEM_DEFAULT_REGISTRATION_POINT - getRegistrationPoint())); - rotation = BillboardModeHelpers::getBillboardRotation(position, rotation, getBillboardMode(), viewFrustumPos); + rotation = BillboardModeHelpers::getBillboardRotation(position, rotation, billboardMode, viewFrustumPos); // determine the parabola in the frame of the entity transformed from a unit sphere glm::mat4 entityToWorldMatrix = glm::translate(position) * glm::mat4_cast(rotation) * glm::scale(dimensions); diff --git a/libraries/render-utils/src/Model.cpp b/libraries/render-utils/src/Model.cpp index 1c9fdc50d6..5d0273c7bf 100644 --- a/libraries/render-utils/src/Model.cpp +++ b/libraries/render-utils/src/Model.cpp @@ -114,7 +114,8 @@ Transform Model::getTransform() const { return transform; } else if (_spatiallyNestableOverride) { bool success; - Transform transform = _spatiallyNestableOverride->getTransform(success); + Transform transform = _billboardMode == BillboardMode::NONE ? _spatiallyNestableOverride->getTransform(success) : + _spatiallyNestableOverride->getTransformWithOnlyLocalRotation(success); if (success) { transform.setScale(getScale()); return transform; diff --git a/libraries/shared/src/SpatiallyNestable.cpp b/libraries/shared/src/SpatiallyNestable.cpp index c1c1fd38d9..670b03611b 100644 --- a/libraries/shared/src/SpatiallyNestable.cpp +++ b/libraries/shared/src/SpatiallyNestable.cpp @@ -754,6 +754,17 @@ const Transform SpatiallyNestable::getTransform(bool& success, int depth) const return result; } +const Transform SpatiallyNestable::getTransformWithOnlyLocalRotation(bool& success, int depth) const { + Transform result; + // return a world-space transform for this object's location + Transform parentTransform = getParentTransform(success, depth); + _transformLock.withReadLock([&] { + Transform::mult(result, parentTransform, _transform); + result.setRotation(_transform.getRotation()); + }); + return result; +} + const Transform SpatiallyNestable::getTransform() const { bool success; Transform result = getTransform(success); diff --git a/libraries/shared/src/SpatiallyNestable.h b/libraries/shared/src/SpatiallyNestable.h index 01e3b045ad..29f23afdfb 100644 --- a/libraries/shared/src/SpatiallyNestable.h +++ b/libraries/shared/src/SpatiallyNestable.h @@ -82,6 +82,7 @@ public: // world frame virtual const Transform getTransform(bool& success, int depth = 0) const; + virtual const Transform getTransformWithOnlyLocalRotation(bool& success, int depth = 0) const; virtual const Transform getTransform() const; virtual void setTransform(const Transform& transform, bool& success); virtual bool setTransform(const Transform& transform); From eefe80995054569491fa80bc9705581ad9bf002d Mon Sep 17 00:00:00 2001 From: HifiExperiments Date: Fri, 19 Feb 2021 19:31:06 -0800 Subject: [PATCH 151/152] CR --- libraries/gpu-gl-common/src/gpu/gl/GLTextureTransfer.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/libraries/gpu-gl-common/src/gpu/gl/GLTextureTransfer.cpp b/libraries/gpu-gl-common/src/gpu/gl/GLTextureTransfer.cpp index 1b57d4292c..0712f68541 100644 --- a/libraries/gpu-gl-common/src/gpu/gl/GLTextureTransfer.cpp +++ b/libraries/gpu-gl-common/src/gpu/gl/GLTextureTransfer.cpp @@ -304,7 +304,9 @@ void GLTextureTransferEngineDefault::processTransferQueues() { #if THREADED_TEXTURE_BUFFERING if (!_transferThread) { _transferThread = new TextureBufferThread(*this); - QObject::connect(_transferThread, &QThread::started, [] { setThreadName("TextureBufferThread"); }); + QString name = "TextureBufferThread"; + _transferThread->setObjectName(name); + QObject::connect(_transferThread, &QThread::started, [name] { setThreadName(name.toStdString()); }); _transferThread->start(); } #endif From c57d3ab8d0f9ddba6519fe9d809b8810988f1a8a Mon Sep 17 00:00:00 2001 From: Kalila <69767640+digisomni@users.noreply.github.com> Date: Sat, 20 Feb 2021 18:11:59 -0500 Subject: [PATCH 152/152] Update BUILD_ANDROID.md --- BUILD_ANDROID.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/BUILD_ANDROID.md b/BUILD_ANDROID.md index 47a3a4434b..cc894618cf 100644 --- a/BUILD_ANDROID.md +++ b/BUILD_ANDROID.md @@ -2,7 +2,7 @@ *Last Updated on December 15, 2020* -Please read the [general build guide](BUILD.md) for information on building other platforms. Only Android specific instructions are found in this file. **Note that these instructions apply to building for Oculus Quest.** +Please read the [general build guide](BUILD.md) for information on building other platforms. Only Android specific instructions are found in this file. **Note that these instructions apply to building for the Oculus Quest 1.** ## Dependencies