diff --git a/.github/workflows/pr_build.yml b/.github/workflows/pr_build.yml
index 757a6fd7c8..8a3dce98ec 100644
--- a/.github/workflows/pr_build.yml
+++ b/.github/workflows/pr_build.yml
@@ -14,7 +14,9 @@ env:
RELEASE_TYPE: PR
RELEASE_NUMBER: ${{ github.event.number }}
VERSION_CODE: ${{ github.event.number }}
-
+ # Sentry Crash Reporting
+ CMAKE_BACKTRACE_URL: ${{ secrets.MINIDUMP_TOKEN }}
+ CMAKE_BACKTRACE_TOKEN: PR_${{ github.event.number }}_${{ github.sha }}
# OSX specific variables
DEVELOPER_DIR: /Applications/Xcode_11.2.app/Contents/Developer
@@ -169,7 +171,7 @@ jobs:
- name: Build for Android + Quest
if: matrix.build_type == 'android'
shell: bash
- working-directory: ${{runner.workspace}}/project-athena
+ working-directory: ${{runner.workspace}}/vircadia
run: |
echo "Pre-cache the vcpkg managed dependencies"
$PYTHON_EXEC prebuild.py --build-root ${{runner.workspace}}/build --android interface
diff --git a/BUILD_ANDROID.md b/BUILD_ANDROID.md
index 0bea3e5a90..fc73d7905e 100644
--- a/BUILD_ANDROID.md
+++ b/BUILD_ANDROID.md
@@ -66,7 +66,7 @@ The above code to suppress modules is not necessary, but will speed up the build
### Clone the repository
-`git clone https://github.com/kasenvr/project-athena.git`
+`git clone https://github.com/vircadia/vircadia.git`
## Building & Running
@@ -119,4 +119,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
diff --git a/BUILD_LINUX.md b/BUILD_LINUX.md
index f6287846ed..90782e90b4 100644
--- a/BUILD_LINUX.md
+++ b/BUILD_LINUX.md
@@ -1,9 +1,11 @@
# Build Linux
-*Last Updated on April 11, 2020*
+*Last Updated on December 1, 2020*
Please read the [general build guide](BUILD.md) for information on dependencies required for all platforms. Only Linux specific instructions are found in this file.
+You can use the [Vircadia Builder](https://github.com/vircadia/vircadia-builder) to build on Linux more easily. Alternatively, you can follow the manual steps below.
+
## Ubuntu 16.04/18.04 specific build guide
### Ubuntu 16.04 only
Add the following line to *.bash_profile*
@@ -76,7 +78,7 @@ sudo apt-get install nodejs
Clone this repository:
```bash
-git clone https://github.com/kasenvr/project-athena.git
+git clone https://github.com/vircadia/vircadia.git
```
To compile a DEV version checkout the branch you need. To get a list of all tags:
@@ -86,7 +88,7 @@ git fetch -a
Then checkout the main branch with:
```bash
-git checkout kasen/core
+git checkout master
```
### Using a custom Qt build
@@ -103,7 +105,7 @@ Qt must be installed in `$HIFI_QT_BASE/$VIRCADIA_USE_QT_VERSION/qt5-install`.
Create the build directory:
```bash
-cd project-athena
+cd vircadia
mkdir build
cd build
```
diff --git a/BUILD_WIN.md b/BUILD_WIN.md
index c057d9ca5d..1035b1c366 100644
--- a/BUILD_WIN.md
+++ b/BUILD_WIN.md
@@ -107,7 +107,7 @@ Note: You can also run Interface by launching it from command line or File Explo
For any problems after Step #6, first try this:
* Delete your locally cloned copy of the Vircadia repository
* Restart your computer
-* Redownload the [repository](https://github.com/kasenvr/project-athena)
+* Redownload the [repository](https://github.com/vircadia/vircadia)
* Restart directions from Step #6
#### CMake gives you the same error message repeatedly after the build fails
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 424fbdc940..f111f482ae 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -41,6 +41,12 @@ 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 "$ENV{USE_GLES}")
+
+# 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 +135,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/CONTRIBUTING.md b/CONTRIBUTING.md
index aeb6f49280..72f296e92e 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -1,3 +1,4 @@
+
The project embraces distributed development and if you'd like to help, it would be greatly appreciated. Just open a pull request with the revisions.
Contributing
@@ -6,7 +7,7 @@ Contributing
2. Clone your fork of the repository locally
```
- git clone git://github.com/USERNAME/project-athena.git
+ git clone git://github.com/USERNAME/vircadia.git
```
3. Create a new branch
@@ -20,7 +21,7 @@ Contributing
6. Update your branch
```
- git remote add upstream https://github.com/kasenvr/project-athena
+ git remote add upstream https://github.com/vircadia/vircadia
git pull upstream master
```
@@ -35,13 +36,22 @@ Contributing
*You can follow [GitHub's guide](https://help.github.com/articles/creating-a-pull-request) to find out how to create a pull request.*
+Tips for Pull Requests
+===
+To make the QA process go as smoothly as possible.
+
+1. Have a basic description in your pull request.
+2. Write a basic test plan if you are altering or adding features.
+3. If a new API is added, try to make sure that some level of basic documentation on how you can utilize it is included.
+4. If an added API or feature requires an external service, try to document or link to instructions on how to create a basic working setup.
+
Reporting Bugs
===
1. Always update to the latest code on master, we make many merges every day and it is possible the bug has already been fixed!
-2. Search [issues](https://github.com/kasenvr/project-athena/issues) to make sure that somebody has not already reported the same bug.
-3. [Add](https://github.com/kasenvr/project-athena/issues/new) your report to the issues list!
+2. Search [issues](https://github.com/vircadia/vircadia/issues) to make sure that somebody has not already reported the same bug.
+3. [Add](https://github.com/vircadia/vircadia/issues/new) your report to the issues list!
Requesting a Feature
===
-1. Search [issues](https://github.com/kasenvr/project-athena/issues) to make sure that somebody has not already requested the same feature.
-2. [Add](https://github.com/kasenvr/project-athena/issues/new) your request to the issues list!
+1. Search [issues](https://github.com/vircadia/vircadia/issues) to make sure that somebody has not already requested the same feature.
+2. [Add](https://github.com/vircadia/vircadia/issues/new) your request to the issues list!
diff --git a/README.md b/README.md
index baf333d81f..0368799c73 100644
--- a/README.md
+++ b/README.md
@@ -8,17 +8,17 @@ Vircadia is a 3D social software project seeking to incrementally bring about a
### Releases
-[View Releases here](https://github.com/kasenvr/project-athena/releases/)
+[View Releases here](https://github.com/vircadia/vircadia/releases/)
### How to build the Interface
-[For Windows](https://github.com/kasenvr/project-athena/blob/master/BUILD_WIN.md)
+[For Windows](https://github.com/vircadia/vircadia/blob/master/BUILD_WIN.md)
-[For Mac](https://github.com/kasenvr/project-athena/blob/master/BUILD_OSX.md)
+[For Mac](https://github.com/vircadia/vircadia/blob/master/BUILD_OSX.md)
-[For Linux](https://github.com/kasenvr/project-athena/blob/master/BUILD_LINUX.md)
+[For Linux](https://github.com/vircadia/vircadia/blob/master/BUILD_LINUX.md)
-[For Linux - Vircadia Builder](https://github.com/kasenvr/vircadia-builder)
+[For Linux - Vircadia Builder](https://github.com/vircadia/vircadia-builder)
### How to deploy a Server
@@ -26,13 +26,13 @@ Vircadia is a 3D social software project seeking to incrementally bring about a
### How to build a Server
-[For Linux - Vircadia Builder](https://github.com/kasenvr/vircadia-builder)
+[For Linux - Vircadia Builder](https://github.com/vircadia/vircadia-builder)
### How to generate an Installer
-[For Windows](https://github.com/kasenvr/project-athena/blob/master/INSTALL.md)
+[For Windows](https://github.com/vircadia/vircadia/blob/master/INSTALL.md)
-[For Linux - AppImage - Vircadia Builder](https://github.com/kasenvr/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
diff --git a/android/containerized_build.sh b/android/containerized_build.sh
index 94b5b28831..bbf0b605d8 100755
--- a/android/containerized_build.sh
+++ b/android/containerized_build.sh
@@ -17,7 +17,7 @@ test -z "$STABLE_BUILD" && export STABLE_BUILD=0
docker run \
--rm \
--security-opt seccomp:unconfined \
- -v "${WORKSPACE}":/home/gha/project-athena \
+ -v "${WORKSPACE}":/home/gha/vircadia \
-e RELEASE_NUMBER \
-e RELEASE_TYPE \
-e ANDROID_APP \
diff --git a/android/docker/Dockerfile b/android/docker/Dockerfile
index 144f6caffa..ab5ddb562d 100644
--- a/android/docker/Dockerfile
+++ b/android/docker/Dockerfile
@@ -72,17 +72,17 @@ RUN mkdir "$HIFI_BASE" && \
mkdir "$HIFI_ANDROID_PRECOMPILED"
# Download the repo
-RUN git clone https://github.com/kasenvr/project-athena.git
+RUN git clone https://github.com/vircadia/vircadia.git
-WORKDIR /home/gha/project-athena
+WORKDIR /home/gha/vircadia
RUN mkdir build
# Pre-cache the vcpkg managed dependencies
-WORKDIR /home/gha/project-athena/build
+WORKDIR /home/gha/vircadia/build
RUN python3 ../prebuild.py --build-root `pwd` --android interface
# Pre-cache the gradle dependencies
-WORKDIR /home/gha/project-athena/android
+WORKDIR /home/gha/vircadia/android
RUN ./gradlew -m tasks -PHIFI_ANDROID_PRECOMPILED=$HIFI_ANDROID_PRECOMPILED
#RUN ./gradlew extractDependencies -PHIFI_ANDROID_PRECOMPILED=$HIFI_ANDROID_PRECOMPILED
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/cmake/ports/etc2comp/portfile.cmake b/cmake/ports/etc2comp/portfile.cmake
index 343f67169b..1369492599 100644
--- a/cmake/ports/etc2comp/portfile.cmake
+++ b/cmake/ports/etc2comp/portfile.cmake
@@ -19,7 +19,7 @@ include(vcpkg_common_functions)
vcpkg_from_github(
OUT_SOURCE_PATH SOURCE_PATH
- REPO kasenvr/etc2comp
+ REPO vircadia/etc2comp
REF 7f1843bf07825c21cab711360c1ddbad04641036
SHA512 d747076acda8537d39585858c793a35c3dcc9ef283d723619a47f8c81ec1454c95b3340ad35f0655a939eae5b8271c801c48a9a7568311a01903a344c44af25b
HEAD_REF master
diff --git a/cmake/ports/glad/portfile.cmake b/cmake/ports/glad/portfile.cmake
index 54b1d91c89..6e3118b31e 100644
--- a/cmake/ports/glad/portfile.cmake
+++ b/cmake/ports/glad/portfile.cmake
@@ -2,13 +2,22 @@ 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)
+# 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
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
+ SHA512 2e02ac633eed8f2ba2adbf96ea85d08998f48dd2e9ec9a88ec3c25f48eaf1405371d258066327c783772fcb3793bdb82bd7375fdabb2ba5e2ce0835468b17f65
+ FILENAME glad32es.zip
+ )
else()
# else Linux desktop
vcpkg_download_distfile(
diff --git a/cmake/ports/hifi-scribe/portfile.cmake b/cmake/ports/hifi-scribe/portfile.cmake
index 498e8a455b..19d03b5db4 100644
--- a/cmake/ports/hifi-scribe/portfile.cmake
+++ b/cmake/ports/hifi-scribe/portfile.cmake
@@ -3,7 +3,7 @@ include(vcpkg_common_functions)
vcpkg_from_github(
OUT_SOURCE_PATH SOURCE_PATH
- REPO kasenvr/scribe
+ REPO vircadia/scribe
REF 1bd638a36ca771e5a68d01985b6389b71835cbd2
SHA512 dbe241d86df3912e544f6b9839873f9875df54efc93822b145e7b13243eaf2e3d690bc8a28b1e52d05bdcd7e68fca6b0b2f5c43ffd0f56a9b7a50d54dcf9e31e
HEAD_REF master
diff --git a/cmake/ports/nvtt/portfile.cmake b/cmake/ports/nvtt/portfile.cmake
index c7bf068e13..b21bb5609c 100644
--- a/cmake/ports/nvtt/portfile.cmake
+++ b/cmake/ports/nvtt/portfile.cmake
@@ -9,7 +9,7 @@ include(vcpkg_common_functions)
vcpkg_from_github(
OUT_SOURCE_PATH SOURCE_PATH
- REPO kasenvr/nvidia-texture-tools
+ REPO vircadia/nvidia-texture-tools
REF 330c4d56274a0f602a5c70596e2eb670a4ed56c2
SHA512 4c0bc2f369120d696cc27710b6d33086b27eef55f537ec66b9a5c8b1839bc2426c0413670b0f65be52c5d353468f0126dfe024be1f0690611d4d7e33ac530127
HEAD_REF master
diff --git a/cmake/ports/tbb/portfile.cmake b/cmake/ports/tbb/portfile.cmake
index 4e81df37d1..76c881833f 100644
--- a/cmake/ports/tbb/portfile.cmake
+++ b/cmake/ports/tbb/portfile.cmake
@@ -3,8 +3,8 @@ include(vcpkg_common_functions)
vcpkg_from_github(
OUT_SOURCE_PATH SOURCE_PATH
REPO oneapi-src/oneTBB
- REF 4bdba61bafc6ba2d636f31564f1de5702d365cf7
- SHA512 f2a8d7e0476f846039390f4a79af3fe13770e23b01bf4741e738136f7ddb401357a0e50f35212e8d0fa5fc4cf1563418337309227d7243fc3676edd406ae652d
+ REF eca91f16d7490a8abfdee652dadf457ec820cc37
+ SHA512 7144e1dc68304b5358e6ea330431b6f0c61fadb147efa353a5b242777d6fabf7b8cf99b79cffb51b49b911dd17a9f1879619d6eebdf319f23ec3235c89cffc25
HEAD_REF tbb_2019
PATCHES fix-static-build.patch
)
diff --git a/domain-server/resources/metadata_exporter/index.html b/domain-server/resources/metadata_exporter/index.html
index a22d50fe22..1b18c508cc 100644
--- a/domain-server/resources/metadata_exporter/index.html
+++ b/domain-server/resources/metadata_exporter/index.html
@@ -2,7 +2,7 @@
//
// index.html
//
-// Created by kasenvr@gmail.com on 21 Jul 2020
+// Created by somnilibertas@gmail.com on 21 Jul 2020
// Copyright 2020 Vircadia and contributors.
//
// Distributed under the Apache License, Version 2.0.
diff --git a/domain-server/resources/web/assignment/placeholder.js b/domain-server/resources/web/assignment/placeholder.js
index 95c9903e32..3666396d6e 100644
--- a/domain-server/resources/web/assignment/placeholder.js
+++ b/domain-server/resources/web/assignment/placeholder.js
@@ -1,3 +1,3 @@
// Here you can put a script that will be run by an assignment-client (AC)
-// For examples, please go to https://github.com/kasenvr/project-athena/tree/master/script-archive/acScripts
+// For examples, please go to https://github.com/vircadia/vircadia/tree/master/script-archive/acScripts
// The directory named acScripts contains assignment-client specific scripts you can try.
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/hifi_qt.py b/hifi_qt.py
index 10708e4bc9..48e9b337a6 100644
--- a/hifi_qt.py
+++ b/hifi_qt.py
@@ -12,7 +12,7 @@ import functools
print = functools.partial(print, flush=True)
-# Encapsulates the vcpkg system
+# Encapsulates the vcpkg system
class QtDownloader:
CMAKE_TEMPLATE = """
# this file auto-generated by hifi_qt.py
@@ -72,7 +72,7 @@ endif()
self.qtUrl = self.assets_url + '/dependencies/vcpkg/qt5-install-5.12.3-ubuntu-18.04.tar.gz'
elif u_major == 19 and u_minor == 10:
self.qtUrl = self.assets_url + '/dependencies/vcpkg/qt5-install-5.12.6-ubuntu-19.10.tar.xz'
- elif u_major > 18 and ( u_major != 19 and u_minor != 4):
+ elif u_major > 19:
print("We don't support " + distro.name(pretty=True) + " yet. Perhaps consider helping us out?")
raise Exception('LINUX DISTRO IS NOT SUPPORTED YET!!!')
else:
@@ -81,7 +81,7 @@ endif()
else:
print("Sorry, " + distro.name(pretty=True) + " is not supported. Please consider helping us out.")
print("It's also possible to build Qt for your distribution, please see the documentation at:")
- print("https://github.com/kasenvr/project-athena/tree/kasen/core/tools/qt-builder")
+ print("https://github.com/vircadia/vircadia/tree/master/tools/qt-builder")
raise Exception('UNKNOWN LINUX VERSION!!!')
else:
print("System : " + platform.system())
diff --git a/interface/resources/qml/desktop/Desktop.qml b/interface/resources/qml/desktop/Desktop.qml
index 9a9252112c..971fb06414 100644
--- a/interface/resources/qml/desktop/Desktop.qml
+++ b/interface/resources/qml/desktop/Desktop.qml
@@ -309,8 +309,8 @@ FocusScope {
if (child.hasOwnProperty("modality")) {
var mappedPoint = mapToItem(child, point.x, point.y);
if (child.hasOwnProperty("frame")) {
- var outLine = child.frame.children[2];
- var framePoint = outLine.mapFromGlobal(point.x, point.y);
+ var outLine = child.frame.children[2]; // sizeOutline
+ var framePoint = mapToItem(outLine, point.x, point.y);
if (outLine.contains(framePoint)) {
return true;
}
diff --git a/interface/resources/qml/hifi/dialogs/TabletAboutDialog.qml b/interface/resources/qml/hifi/dialogs/TabletAboutDialog.qml
index a943da32a0..f7a4061f45 100644
--- a/interface/resources/qml/hifi/dialogs/TabletAboutDialog.qml
+++ b/interface/resources/qml/hifi/dialogs/TabletAboutDialog.qml
@@ -54,10 +54,10 @@ Rectangle {
textFormat: Text.StyledText
linkColor: "#00B4EF"
color: "white"
- text: "Vircadia Github."
+ text: "Vircadia Github."
size: 20
onLinkActivated: {
- About.openUrl("https:/github.com/kasenvr/project-athena");
+ About.openUrl("https:/github.com/vircadia/vircadia");
}
}
diff --git a/interface/resources/qml/hifi/dialogs/security/EntityScriptQMLWhitelist.qml b/interface/resources/qml/hifi/dialogs/security/EntityScriptQMLWhitelist.qml
index 9e0b6ba4cf..8180475527 100644
--- a/interface/resources/qml/hifi/dialogs/security/EntityScriptQMLWhitelist.qml
+++ b/interface/resources/qml/hifi/dialogs/security/EntityScriptQMLWhitelist.qml
@@ -2,8 +2,8 @@
// EntityScriptQMLWhitelist.qml
// interface/resources/qml/hifi/dialogs/security
//
-// Created by Kasen IO on 2019.12.05 | realities.dev | kasenvr@gmail.com
-// Copyright 2019 Kasen IO
+// Created by Kalila L. on 2019.12.05 | realities.dev | somnilibertas@gmail.com
+// Copyright 2019 Kalila L.
//
// Distributed under the Apache License, Version 2.0.
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
diff --git a/interface/resources/qml/hifi/dialogs/security/Security.qml b/interface/resources/qml/hifi/dialogs/security/Security.qml
index 918a0a2ca6..b109f83a23 100644
--- a/interface/resources/qml/hifi/dialogs/security/Security.qml
+++ b/interface/resources/qml/hifi/dialogs/security/Security.qml
@@ -314,7 +314,7 @@ Rectangle {
onClicked: {
lightboxPopup.titleText = "Script Plugin Infrastructure";
lightboxPopup.bodyText = "Toggles the activation of scripting plugins in the 'plugins/scripting' folder. \n\n"
- + "Created by:\n humbletim@gmail.com\n kasenvr@gmail.com";
+ + "Created by:\n humbletim@gmail.com\n somnilibertas@gmail.com";
lightboxPopup.button1text = "OK";
lightboxPopup.button1method = function() {
lightboxPopup.visible = false;
diff --git a/interface/resources/qml/windows/Frame.qml b/interface/resources/qml/windows/Frame.qml
index 7b0fbf8d8c..cfff40bbf6 100644
--- a/interface/resources/qml/windows/Frame.qml
+++ b/interface/resources/qml/windows/Frame.qml
@@ -27,7 +27,6 @@ Item {
readonly property int frameMarginRight: frame.decoration ? frame.decoration.frameMarginRight : 0
readonly property int frameMarginTop: frame.decoration ? frame.decoration.frameMarginTop : 0
readonly property int frameMarginBottom: frame.decoration ? frame.decoration.frameMarginBottom : 0
- readonly property int offsetCorrection: 20
// Frames always fill their parents, but their decorations may extend
// beyond the window via negative margin sizes
@@ -76,7 +75,7 @@ Item {
Rectangle {
id: sizeOutline
x: -frameMarginLeft
- y: -frameMarginTop - offsetCorrection
+ y: -frameMarginTop
width: window ? window.width + frameMarginLeft + frameMarginRight + 2 : 0
height: window ? window.height + frameMarginTop + frameMarginBottom + 2 : 0
color: hifi.colors.baseGrayHighlight15
diff --git a/interface/src/main.cpp b/interface/src/main.cpp
index c14d22bdbb..d190e3f3da 100644
--- a/interface/src/main.cpp
+++ b/interface/src/main.cpp
@@ -89,6 +89,7 @@ int main(int argc, const char* argv[]) {
QCommandLineOption displayNameOption("displayName", "set user display name ", "string");
QCommandLineOption setBookmarkOption("setBookmark", "set bookmark key=value pair", "string");
QCommandLineOption defaultScriptOverrideOption("defaultScriptsOverride", "override defaultsScripts.js", "string");
+ QCommandLineOption forceCrashReportingOption("forceCrashReporting", "Force crash reporting to initialize");
parser.addOption(urlOption);
parser.addOption(noLauncherOption);
@@ -103,6 +104,7 @@ int main(int argc, const char* argv[]) {
parser.addOption(displayNameOption);
parser.addOption(setBookmarkOption);
parser.addOption(defaultScriptOverrideOption);
+ parser.addOption(forceCrashReportingOption);
if (!parser.parse(arguments)) {
std::cout << parser.errorText().toStdString() << std::endl; // Avoid Qt log spam
@@ -218,8 +220,9 @@ int main(int argc, const char* argv[]) {
}
qDebug() << "UserActivityLogger is enabled:" << ual.isEnabled();
- qDebug() << "Crash handler logger is enabled:" << ual.isCrashMonitorEnabled();
- if (ual.isCrashMonitorEnabled()) {
+ bool isCrashHandlerEnabled = ual.isCrashMonitorEnabled() || parser.isSet(forceCrashReportingOption);
+ qDebug() << "Crash handler logger is enabled:" << isCrashHandlerEnabled;
+ if (isCrashHandlerEnabled) {
auto crashHandlerStarted = startCrashHandler(argv[0]);
qDebug() << "Crash handler started:" << crashHandlerStarted;
}
diff --git a/interface/src/ui/OverlayConductor.cpp b/interface/src/ui/OverlayConductor.cpp
index 8edd8ee3a5..557b4d09bf 100644
--- a/interface/src/ui/OverlayConductor.cpp
+++ b/interface/src/ui/OverlayConductor.cpp
@@ -23,7 +23,7 @@ OverlayConductor::OverlayConductor() {
OverlayConductor::~OverlayConductor() {
}
-bool OverlayConductor::headOutsideOverlay() const {
+bool OverlayConductor::headNotCenteredInOverlay() const {
glm::mat4 hmdMat = qApp->getHMDSensorPose();
glm::vec3 hmdPos = extractTranslation(hmdMat);
glm::vec3 hmdForward = transformVectorFast(hmdMat, glm::vec3(0.0f, 0.0f, -1.0f));
@@ -32,8 +32,8 @@ bool OverlayConductor::headOutsideOverlay() const {
glm::vec3 uiPos = uiTransform.getTranslation();
glm::vec3 uiForward = uiTransform.getRotation() * glm::vec3(0.0f, 0.0f, -1.0f);
- const float MAX_COMPOSITOR_DISTANCE = 0.99f; // If you're 1m from center of ui sphere, you're at the surface.
- const float MAX_COMPOSITOR_ANGLE = 180.0f; // rotation check is effectively disabled
+ const float MAX_COMPOSITOR_DISTANCE = 0.33f;
+ const float MAX_COMPOSITOR_ANGLE = 90.0f;
if (glm::distance(uiPos, hmdPos) > MAX_COMPOSITOR_DISTANCE ||
glm::dot(uiForward, hmdForward) < cosf(glm::radians(MAX_COMPOSITOR_ANGLE))) {
return true;
@@ -70,6 +70,8 @@ bool OverlayConductor::updateAvatarIsAtRest() {
void OverlayConductor::centerUI() {
// place the overlay at the current hmd position in sensor space
auto camMat = cancelOutRollAndPitch(qApp->getHMDSensorPose());
+ // Set its radius.
+ camMat = glm::scale(camMat, glm::vec3(HUD_RADIUS));
qApp->getApplicationCompositor().setModelTransform(Transform(camMat));
}
@@ -83,7 +85,6 @@ void OverlayConductor::update(float dt) {
if (!desktop) {
return;
}
- bool currentVisible = !desktop->property("pinned").toBool();
auto myAvatar = DependencyManager::get()->getMyAvatar();
// centerUI when hmd mode is first enabled and mounted
@@ -96,24 +97,24 @@ void OverlayConductor::update(float dt) {
_hmdMode = false;
}
- bool shouldRecenter = false;
-
- if (_suppressedByHead) {
- if (updateAvatarIsAtRest()) {
- _suppressedByHead = false;
- shouldRecenter = true;
- }
- } else {
- if (_hmdMode && headOutsideOverlay()) {
- _suppressedByHead = true;
- }
+ bool initiateRecenter = false;
+ if (_hmdMode && headNotCenteredInOverlay()) {
+ initiateRecenter = true;
}
+ bool shouldRecenter = false;
+ if (initiateRecenter || _suppressedByHead) {
+ _suppressedByHead = !updateAvatarIsAtRest();
+ shouldRecenter = !_suppressedByHead;
+ }
+
+ bool currentVisible = !desktop->property("pinned").toBool();
bool targetVisible = Menu::getInstance()->isOptionChecked(MenuOption::Overlays) && !_suppressedByHead;
if (targetVisible != currentVisible) {
offscreenUi->setPinned(!targetVisible);
}
- if (shouldRecenter && !_suppressedByHead) {
+
+ if (shouldRecenter) {
centerUI();
}
#endif
diff --git a/interface/src/ui/OverlayConductor.h b/interface/src/ui/OverlayConductor.h
index 6c3732cf3c..7e7cf5bd3c 100644
--- a/interface/src/ui/OverlayConductor.h
+++ b/interface/src/ui/OverlayConductor.h
@@ -22,7 +22,7 @@ public:
void centerUI();
private:
- bool headOutsideOverlay() const;
+ bool headNotCenteredInOverlay() const;
bool updateAvatarIsAtRest();
#if !defined(DISABLE_QML)
diff --git a/libraries/display-plugins/src/display-plugins/CompositorHelper.cpp b/libraries/display-plugins/src/display-plugins/CompositorHelper.cpp
index 9b6946bbcc..c645c39eb4 100644
--- a/libraries/display-plugins/src/display-plugins/CompositorHelper.cpp
+++ b/libraries/display-plugins/src/display-plugins/CompositorHelper.cpp
@@ -41,10 +41,10 @@ static const float reticleSize = TWO_PI / 100.0f;
//EntityItemID CompositorHelper::_noItemId;
static QString _tooltipId;
-const uvec2 CompositorHelper::VIRTUAL_SCREEN_SIZE = uvec2(3960, 1188); // ~10% more pixel density than old version, 72dx240d FOV
-const QRect CompositorHelper::VIRTUAL_SCREEN_RECOMMENDED_OVERLAY_RECT = QRect(956, 0, 2048, 1188); // don't include entire width only center 2048
+const uvec2 CompositorHelper::VIRTUAL_SCREEN_SIZE = uvec2(2640, 1188);
+const QRect CompositorHelper::VIRTUAL_SCREEN_RECOMMENDED_OVERLAY_RECT = QRect(296, 0, 2048, 1188); // Center 2048 pixels.
const float CompositorHelper::VIRTUAL_UI_ASPECT_RATIO = (float)VIRTUAL_SCREEN_SIZE.x / (float)VIRTUAL_SCREEN_SIZE.y;
-const vec2 CompositorHelper::VIRTUAL_UI_TARGET_FOV = vec2(PI * 3.0f / 2.0f, PI * 3.0f / 2.0f / VIRTUAL_UI_ASPECT_RATIO);
+const vec2 CompositorHelper::VIRTUAL_UI_TARGET_FOV = vec2(PI, PI / VIRTUAL_UI_ASPECT_RATIO);
const vec2 CompositorHelper::MOUSE_EXTENTS_ANGULAR_SIZE = vec2(PI * 2.0f, PI * 0.95f); // horizontal: full sphere, vertical: ~5deg from poles
const vec2 CompositorHelper::MOUSE_EXTENTS_PIXELS = vec2(VIRTUAL_SCREEN_SIZE) * (MOUSE_EXTENTS_ANGULAR_SIZE / VIRTUAL_UI_TARGET_FOV);
@@ -384,9 +384,9 @@ bool CompositorHelper::calculateRayUICollisionPoint(const glm::vec3& position, c
glm::vec3 localPosition = transformPoint(worldToUi, position);
glm::vec3 localDirection = glm::normalize(transformVectorFast(worldToUi, direction));
- const float UI_RADIUS = 1.0f;
+ const float UNIT_RADIUS = 1.0f;
float intersectionDistance;
- if (raySphereIntersect(localDirection, localPosition, UI_RADIUS, &intersectionDistance)) {
+ if (raySphereIntersect(localDirection, localPosition, UNIT_RADIUS, &intersectionDistance)) {
result = transformPoint(uiToWorld, localPosition + localDirection * intersectionDistance);
#ifdef WANT_DEBUG
DebugDraw::getInstance().drawRay(position, result, glm::vec4(0.0f, 1.0f, 0.0f, 1.0f));
@@ -407,9 +407,8 @@ bool CompositorHelper::calculateParabolaUICollisionPoint(const glm::vec3& origin
glm::vec3 localVelocity = glm::normalize(transformVectorFast(worldToUi, velocity));
glm::vec3 localAcceleration = glm::normalize(transformVectorFast(worldToUi, acceleration));
- const float UI_RADIUS = 1.0f;
float intersectionDistance;
- if (findParabolaSphereIntersection(localOrigin, localVelocity, localAcceleration, glm::vec3(0.0f), UI_RADIUS, intersectionDistance)) {
+ if (findParabolaSphereIntersection(localOrigin, localVelocity, localAcceleration, glm::vec3(0.0f), HUD_RADIUS, intersectionDistance)) {
result = origin + velocity * intersectionDistance + 0.5f * acceleration * intersectionDistance * intersectionDistance;
parabolicDistance = intersectionDistance;
return true;
diff --git a/libraries/display-plugins/src/display-plugins/CompositorHelper.h b/libraries/display-plugins/src/display-plugins/CompositorHelper.h
index c45119fd63..b44d6ffbd9 100644
--- a/libraries/display-plugins/src/display-plugins/CompositorHelper.h
+++ b/libraries/display-plugins/src/display-plugins/CompositorHelper.h
@@ -27,7 +27,8 @@
class ReticleInterface;
-const float DEFAULT_RETICLE_DEPTH = 1.0f; // FIXME - probably should be based on UI radius
+const float HUD_RADIUS = 1.5f;
+const float DEFAULT_RETICLE_DEPTH = HUD_RADIUS;
const float MAGNIFY_WIDTH = 220.0f;
const float MAGNIFY_HEIGHT = 100.0f;
@@ -154,7 +155,7 @@ private:
std::unique_ptr _alphaPropertyAnimation;
std::atomic _reticleVisible { true };
- std::atomic _reticleDepth { 1.0f };
+ std::atomic _reticleDepth { DEFAULT_RETICLE_DEPTH };
// NOTE: when the compositor is running in HMD mode, it will control the reticle position as a custom
// application specific position, when it's in desktop mode, the reticle position will simply move
diff --git a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp
index 940bf55e86..f58df45a31 100644
--- a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp
+++ b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp
@@ -716,7 +716,7 @@ void RenderableModelEntityItem::setJointMap(std::vector jointMap) {
int RenderableModelEntityItem::avatarJointIndex(int modelJointIndex) {
int result = -1;
- int mapSize = (int) _jointMap.size();
+ int mapSize = (int)_jointMap.size();
if (modelJointIndex >= 0 && modelJointIndex < mapSize) {
result = _jointMap[modelJointIndex];
}
diff --git a/libraries/gl/src/gl/GLWidget.cpp b/libraries/gl/src/gl/GLWidget.cpp
index 94702a9906..45c8e70659 100644
--- a/libraries/gl/src/gl/GLWidget.cpp
+++ b/libraries/gl/src/gl/GLWidget.cpp
@@ -35,11 +35,6 @@ class GLPaintEngine : public QPaintEngine {
};
GLWidget::GLWidget() {
-#ifdef Q_OS_LINUX
- // Cause GLWidget::eventFilter to be called.
- // It wouldn't hurt to do this on Mac and PC too; but apparently it's only needed on linux.
- qApp->installEventFilter(this);
-#endif
setAttribute(Qt::WA_AcceptTouchEvents);
setAttribute(Qt::WA_NativeWindow);
setAttribute(Qt::WA_PaintOnScreen);
@@ -118,39 +113,6 @@ bool GLWidget::event(QEvent* event) {
return QWidget::event(event);
}
-// Pressing Alt (and Meta) key alone activates the menubar because its style inherits the
-// SHMenuBarAltKeyNavigation from QWindowsStyle. This makes it impossible for a scripts to
-// receive keyPress events for the Alt (and Meta) key in a reliable manner.
-//
-// This filter catches events before QMenuBar can steal the keyboard focus.
-// The idea was borrowed from
-// http://www.archivum.info/qt-interest@trolltech.com/2006-09/00053/Re-(Qt4)-Alt-key-focus-QMenuBar-(solved).html
-
-bool GLWidget::eventFilter(QObject*, QEvent* event) {
- switch (event->type()) {
- case QEvent::KeyPress:
- case QEvent::KeyRelease:
- case QEvent::ShortcutOverride:
- {
- QKeyEvent* keyEvent = static_cast(event);
- if (keyEvent->key() == Qt::Key_Alt || keyEvent->key() == Qt::Key_Meta) {
- if (event->type() == QEvent::KeyPress) {
- keyPressEvent(keyEvent);
- } else if (event->type() == QEvent::KeyRelease) {
- keyReleaseEvent(keyEvent);
- } else {
- QWidget::event(event);
- }
- return true;
- }
- }
- default:
- break;
- }
- return false;
-}
-
-
bool GLWidget::nativeEvent(const QByteArray &eventType, void *message, long *result) {
#ifdef Q_OS_WIN32
MSG* win32message = static_cast(message);
diff --git a/libraries/gl/src/gl/GLWidget.h b/libraries/gl/src/gl/GLWidget.h
index 777d43e8af..9d5c8800bb 100644
--- a/libraries/gl/src/gl/GLWidget.h
+++ b/libraries/gl/src/gl/GLWidget.h
@@ -42,9 +42,6 @@ protected:
virtual bool event(QEvent* event) override;
gl::Context* _context { nullptr };
-private slots:
- virtual bool eventFilter(QObject*, QEvent* event) override;
-
private:
QPaintEngine* _paintEngine { nullptr };
bool _vsyncSupported { false };
diff --git a/libraries/gpu-gl-common/src/gpu/gl/GLBackend.cpp b/libraries/gpu-gl-common/src/gpu/gl/GLBackend.cpp
index ef247b0835..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)
+#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
@@ -219,19 +219,21 @@ void GLBackend::init() {
}
size_t GLBackend::getAvailableMemory() {
- GLint mem;
+ // GL_GPU_MEMORY_INFO_CURRENT_AVAILABLE_VIDMEM_NVX returns 1 value
+ // GL_TEXTURE_FREE_MEMORY_ATI returns 4 values, we only need the first
+ GLint mem[4] = {0,0,0,0};
switch( _videoCard ) {
case NVIDIA:
-#if !defined(Q_OS_ANDROID)
- glGetIntegerv(GL_GPU_MEMORY_INFO_CURRENT_AVAILABLE_VIDMEM_NVX, &mem);
+#if !defined(Q_OS_ANDROID) && !defined(USE_GLES)
+ glGetIntegerv(GL_GPU_MEMORY_INFO_CURRENT_AVAILABLE_VIDMEM_NVX, &mem[0]);
#endif
- return mem * BYTES_PER_KIB;
+ return mem[0] * BYTES_PER_KIB;
case ATI:
-#if !defined(Q_OS_ANDROID)
- glGetIntegerv(GL_TEXTURE_FREE_MEMORY_ATI, &mem);
+#if !defined(Q_OS_ANDROID) && !defined(USE_GLES)
+ glGetIntegerv(GL_TEXTURE_FREE_MEMORY_ATI, &mem[0]);
#endif
- return mem * BYTES_PER_KIB;
+ return mem[0] * BYTES_PER_KIB;
case MESA:
return 0; // Don't know the current value
case Unknown:
@@ -1002,4 +1004,4 @@ void GLBackend::setCameraCorrection(const Mat4& correction, const Mat4& prevRend
void GLBackend::syncProgram(const gpu::ShaderPointer& program) {
gpu::gl::GLShader::sync(*this, *program);
-}
\ No newline at end of file
+}
diff --git a/libraries/networking/src/NetworkingConstants.h b/libraries/networking/src/NetworkingConstants.h
index 58cefb35ad..b64a0845ac 100644
--- a/libraries/networking/src/NetworkingConstants.h
+++ b/libraries/networking/src/NetworkingConstants.h
@@ -72,7 +72,7 @@ namespace NetworkingConstants {
const QUrl HELP_FORUM_URL { "https://forums.vircadia.dev" };
const QUrl HELP_SCRIPTING_REFERENCE_URL{ "https://apidocs.vircadia.dev/" };
const QUrl HELP_RELEASE_NOTES_URL{ "https://docs.vircadia.dev/release-notes.html" };
- const QUrl HELP_BUG_REPORT_URL{ "https://github.com/kasenvr/project-athena/issues" };
+ const QUrl HELP_BUG_REPORT_URL{ "https://github.com/vircadia/vircadia/issues" };
const QString DEFAULT_VIRCADIA_ADDRESS = "file:///~/serverless/tutorial.json";
const QString DEFAULT_HOME_ADDRESS = "file:///~/serverless/tutorial.json";
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;
diff --git a/libraries/render-utils/src/Model.cpp b/libraries/render-utils/src/Model.cpp
index 3ce43e059e..78ff17a8ef 100644
--- a/libraries/render-utils/src/Model.cpp
+++ b/libraries/render-utils/src/Model.cpp
@@ -980,7 +980,7 @@ void Model::setPrimitiveMode(PrimitiveMode primitiveMode, const render::ScenePoi
render::Transaction transaction;
- for (int i = 0; i < (int) _modelMeshRenderItemIDs.size(); i++) {
+ for (int i = 0; i < (int)_modelMeshRenderItemIDs.size(); i++) {
auto itemID = _modelMeshRenderItemIDs[i];
auto meshIndex = _modelMeshRenderItemShapes[i].meshIndex;
bool invalidatePayloadShapeKey = shouldInvalidatePayloadShapeKey(meshIndex);
diff --git a/libraries/script-engine/src/Quat.h b/libraries/script-engine/src/Quat.h
index 23bfe56309..c1eaa97797 100644
--- a/libraries/script-engine/src/Quat.h
+++ b/libraries/script-engine/src/Quat.h
@@ -188,7 +188,7 @@ public slots:
* @param {number} roll - The roll angle in degrees.
* @returns {Quat} A quaternion created using the pitch
, yaw
, and roll
Euler angles.
* @example Create a rotation of 180 degrees about the y axis.
- * var rotation = Quat.fromPitchYawRollDgrees(0, 180, 0 );
+ * var rotation = Quat.fromPitchYawRollDegrees(0, 180, 0 );
*/
glm::quat fromPitchYawRollDegrees(float pitch, float yaw, float roll);
diff --git a/pkg-scripts/README b/pkg-scripts/README
index 92a9bf00d3..6eb74980d0 100644
--- a/pkg-scripts/README
+++ b/pkg-scripts/README
@@ -1,5 +1,5 @@
Collection of scripts to create server distribution packages. Most of these scripts assume
-use of the build script at https://github.com/kasenvr/vircadia-builder, specifically that
+use of the build script at https://github.com/vircadia/vircadia-builder, specifically that
the following directory structure exists
base folder/
diff --git a/pkg-scripts/server-control b/pkg-scripts/server-control
index c80b8da724..3ed23b7149 100644
--- a/pkg-scripts/server-control
+++ b/pkg-scripts/server-control
@@ -5,8 +5,8 @@ Maintainer: Heather Anderson
Build-Depends: debhelper (>= 10)
Standards-Version: 4.1.2
Homepage: https://vircadia.com
-Vcs-Git: https://github.com/kasenvr/project-athena.git
-Vcs-Browser: https://github.com/kasenvr/project-athena
+Vcs-Git: https://github.com/vircadia/vircadia.git
+Vcs-Browser: https://github.com/vircadia/vircadia
Package: vircadia-server
Architecture: any
diff --git a/pkg-scripts/vircadia-server.spec b/pkg-scripts/vircadia-server.spec
index 3e0eed896e..575ad9589e 100644
--- a/pkg-scripts/vircadia-server.spec
+++ b/pkg-scripts/vircadia-server.spec
@@ -9,7 +9,7 @@ Summary: Vircadia metaverse platform, based on the High Fidelity Engine.
License: ASL 2.0
URL: https://vircadia.com
-Source0: https://github.com/kasenvr/vircadia-builder/blob/master/vircadia-builder
+Source0: https://github.com/vircadia/vircadia-builder/blob/master/vircadia-builder
#BuildRequires: systemd-rpm-macros
BuildRequires: chrpath
diff --git a/plugins/JSAPIExample/src/JSAPIExample.cpp b/plugins/JSAPIExample/src/JSAPIExample.cpp
index ed637e198b..91aa8bd32a 100644
--- a/plugins/JSAPIExample/src/JSAPIExample.cpp
+++ b/plugins/JSAPIExample/src/JSAPIExample.cpp
@@ -3,7 +3,7 @@
// plugins/JSAPIExample/src
//
// Copyright (c) 2019-2020 humbletim (humbletim@gmail.com)
-// Copyright (c) 2019 Kalila L. (kasenvr@gmail.com)
+// Copyright (c) 2019 Kalila L. (somnilibertas@gmail.com)
//
// Distributed under the Apache License, Version 2.0.
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
diff --git a/prebuild.py b/prebuild.py
index 21363bb9de..d5bed2d813 100644
--- a/prebuild.py
+++ b/prebuild.py
@@ -102,7 +102,7 @@ def parse_args():
if True:
args = parser.parse_args()
else:
- args = parser.parse_args(['--android', 'questInterface', '--build-root', 'C:/git/project-athena/android/apps/questInterface/.externalNativeBuild/cmake/debug/arm64-v8a'])
+ args = parser.parse_args(['--android', 'questInterface', '--build-root', 'C:/git/vircadia/android/apps/questInterface/.externalNativeBuild/cmake/debug/arm64-v8a'])
return args
def main():
diff --git a/screenshare/package-lock.json b/screenshare/package-lock.json
index c7d92d3e17..8195347159 100644
--- a/screenshare/package-lock.json
+++ b/screenshare/package-lock.json
@@ -655,6 +655,12 @@
"yargs-parser": "^13.0.0"
},
"dependencies": {
+ "camelcase": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
+ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
+ "dev": true
+ },
"debug": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
@@ -680,6 +686,16 @@
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
"integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
"dev": true
+ },
+ "yargs-parser": {
+ "version": "13.1.2",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz",
+ "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==",
+ "dev": true,
+ "requires": {
+ "camelcase": "^5.0.0",
+ "decamelize": "^1.2.0"
+ }
}
}
},
@@ -1091,9 +1107,9 @@
"dev": true
},
"ini": {
- "version": "1.3.5",
- "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
- "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==",
+ "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": {
@@ -2246,23 +2262,13 @@
"requires": {
"ansi-regex": "^4.1.0"
}
- },
- "yargs-parser": {
- "version": "15.0.0",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-15.0.0.tgz",
- "integrity": "sha512-xLTUnCMc4JhxrPEPUYD5IBR1mWCK/aT6+RJ/K29JY2y1vD+FhtgKK0AXRWvI262q3QSffAQuTouFIKUuHX89wQ==",
- "requires": {
- "camelcase": "^5.0.0",
- "decamelize": "^1.2.0"
- }
}
}
},
"yargs-parser": {
- "version": "13.1.1",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz",
- "integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==",
- "dev": true,
+ "version": "15.0.1",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-15.0.1.tgz",
+ "integrity": "sha512-0OAMV2mAZQrs3FkNpDQcBk1x5HXb8X4twADss4S0Iuk+2dGnLOE/fRHrsYm542GduMveyA77OF4wrNJuanRCWw==",
"requires": {
"camelcase": "^5.0.0",
"decamelize": "^1.2.0"
@@ -2271,8 +2277,7 @@
"camelcase": {
"version": "5.3.1",
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
- "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
- "dev": true
+ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg=="
}
}
},
diff --git a/scripts/system/create/edit.js b/scripts/system/create/edit.js
index 099cb94988..fc3d4fc10f 100644
--- a/scripts/system/create/edit.js
+++ b/scripts/system/create/edit.js
@@ -41,7 +41,7 @@ Script.include([
var CreateWindow = Script.require('./modules/createWindow.js');
var TITLE_OFFSET = 60;
-var CREATE_TOOLS_WIDTH = 490;
+var CREATE_TOOLS_WIDTH = 750;
var MAX_DEFAULT_ENTITY_LIST_HEIGHT = 942;
var ENTIRE_DOMAIN_SCAN_RADIUS = 27713;
@@ -117,8 +117,10 @@ var gridTool = new GridTool({
});
gridTool.setVisible(false);
+var entityShapeVisualizerSessionName = "SHAPE_VISUALIZER_" + Uuid.generate();
+
var EntityShapeVisualizer = Script.require('./modules/entityShapeVisualizer.js');
-var entityShapeVisualizer = new EntityShapeVisualizer(["Zone"]);
+var entityShapeVisualizer = new EntityShapeVisualizer(["Zone"], entityShapeVisualizerSessionName);
var entityListTool = new EntityListTool(shouldUseEditTabletApp);
@@ -146,7 +148,10 @@ var DEFAULT_DIMENSIONS = {
var DEFAULT_LIGHT_DIMENSIONS = Vec3.multiply(20, DEFAULT_DIMENSIONS);
-var SUBMENU_ENTITY_EDITOR_PREFERENCES = "Edit > Create Application - Preferences";
+var MENU_IMPORT_FROM_FILE = "Import Entities (.json) From a File";
+var MENU_IMPORT_FROM_URL = "Import Entities (.json) From a URL";
+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";
@@ -878,13 +883,11 @@ var toolBar = (function () {
});
addButton("importEntitiesButton", function() {
- Window.browseChanged.connect(onFileOpenChanged);
- Window.browseAsync("Select .json to Import", "", "*.json");
+ importEntitiesFromFile();
});
addButton("importEntitiesFromUrlButton", function() {
- Window.promptTextChanged.connect(onPromptTextChanged);
- Window.promptAsync("URL of a .json to import", "");
+ importEntitiesFromUrl();
});
addButton("openAssetBrowserButton", function() {
@@ -1400,6 +1403,22 @@ function setupModelMenus() {
position: 1,
});
+ Menu.addMenuItem({
+ menuName: "Edit",
+ menuItemName: MENU_CREATE_SEPARATOR,
+ isSeparator: true
+ });
+ Menu.addMenuItem({
+ menuName: "Edit",
+ menuItemName: MENU_IMPORT_FROM_FILE,
+ afterItem: MENU_CREATE_SEPARATOR
+ });
+ Menu.addMenuItem({
+ menuName: "Edit",
+ menuItemName: MENU_IMPORT_FROM_URL,
+ afterItem: MENU_IMPORT_FROM_FILE
+ });
+
Menu.addMenu(SUBMENU_ENTITY_EDITOR_PREFERENCES);
Menu.addMenuItem({
@@ -1482,7 +1501,10 @@ function cleanupModelMenus() {
Menu.removeMenuItem(SUBMENU_ENTITY_EDITOR_PREFERENCES, MENU_SHOW_ZONES_IN_EDIT_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);
+ Menu.removeMenu(SUBMENU_ENTITY_EDITOR_PREFERENCES);
+ Menu.removeMenuItem("Edit", MENU_IMPORT_FROM_URL);
+ Menu.removeMenuItem("Edit", MENU_IMPORT_FROM_FILE);
+ Menu.removeSeparator("Edit", MENU_CREATE_SEPARATOR);
}
Script.scriptEnding.connect(function () {
@@ -1856,6 +1878,10 @@ function handleMenuEvent(menuItem) {
} else if (menuItem === MENU_ENTITY_LIST_DEFAULT_RADIUS) {
Window.promptTextChanged.connect(onPromptTextChangedDefaultRadiusUserPref);
Window.promptAsync("Entity List Default Radius (in meters)", "" + Settings.getValue(SETTING_ENTITY_LIST_DEFAULT_RADIUS, 100));
+ } else if (menuItem === MENU_IMPORT_FROM_FILE) {
+ importEntitiesFromFile();
+ } else if (menuItem === MENU_IMPORT_FROM_URL) {
+ importEntitiesFromUrl();
}
tooltip.show(false);
}
@@ -2013,18 +2039,27 @@ function toggleKey(value) {
}
function focusKey(value) {
if (value === 0) { // on release
- cameraManager.enable();
- if (selectionManager.hasSelection()) {
- cameraManager.focus(selectionManager.worldPosition, selectionManager.worldDimensions,
- Menu.isOptionChecked(MENU_EASE_ON_FOCUS));
- }
+ setCameraFocusToSelection();
}
}
function gridKey(value) {
if (value === 0) { // on release
- if (selectionManager.hasSelection()) {
- grid.moveToSelection();
- }
+ alignGridToSelection();
+ }
+}
+function viewGridKey(value) {
+ if (value === 0) { // on release
+ toggleGridVisibility();
+ }
+}
+function snapKey(value) {
+ if (value === 0) { // on release
+ entityListTool.toggleSnapToGrid();
+ }
+}
+function gridToAvatarKey(value) {
+ if (value === 0) { // on release
+ alignGridToAvatar();
}
}
function recursiveAdd(newParentID, parentData) {
@@ -2424,7 +2459,6 @@ var PropertiesTool = function (opts) {
}
}
-
if (data.onlyUpdateEntities) {
blockPropertyUpdates = true;
} else {
@@ -2433,6 +2467,10 @@ var PropertiesTool = function (opts) {
}
selectionManager._update(false, this);
blockPropertyUpdates = false;
+
+ if (data.snapToGrid !== undefined) {
+ entityListTool.setListMenuSnapToGrid(data.snapToGrid);
+ }
} else if (data.type === 'saveUserData' || data.type === 'saveMaterialData') {
data.ids.forEach(function(entityID) {
Entities.editEntity(entityID, data.properties);
@@ -2787,7 +2825,10 @@ if (isOnMacPlatform) {
}
mapping.from([Controller.Hardware.Keyboard.T]).to(toggleKey);
mapping.from([Controller.Hardware.Keyboard.F]).to(focusKey);
-mapping.from([Controller.Hardware.Keyboard.G]).to(gridKey);
+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.X])
.when([Controller.Hardware.Keyboard.Control])
.to(whenReleased(function() { selectionManager.cutSelectedEntities() }));
@@ -2828,8 +2869,14 @@ keyUpEventFromUIWindow = function(keyUpEvent) {
toggleKey(pressedValue);
} else if (keyUpEvent.keyCodeString === "F") {
focusKey(pressedValue);
- } else if (keyUpEvent.keyCodeString === "G") {
+ } else if (keyUpEvent.keyCodeString === "J") {
gridKey(pressedValue);
+ } else if (keyUpEvent.keyCodeString === "G") {
+ viewGridKey(pressedValue);
+ } else if (keyUpEvent.keyCodeString === "H") {
+ snapKey(pressedValue);
+ } else if (keyUpEvent.keyCodeString === "K") {
+ gridToAvatarKey(pressedValue);
} else if (keyUpEvent.controlKey && keyUpEvent.keyCodeString === "X") {
selectionManager.cutSelectedEntities();
} else if (keyUpEvent.controlKey && keyUpEvent.keyCodeString === "C") {
@@ -2908,7 +2955,7 @@ function zoneSortOrder(a, b) {
function getParentState(id) {
var state = "NONE";
var properties = Entities.getEntityProperties(id, ["parentID"]);
- var children = Entities.getChildrenIDs(id);
+ var children = getDomainOnlyChildrenIDs(id);
if (properties.parentID !== Uuid.NULL) {
if (children.length > 0) {
state = "PARENT_CHILDREN";
@@ -2923,4 +2970,59 @@ function getParentState(id) {
return state;
}
+function getDomainOnlyChildrenIDs(id) {
+ var allChildren = Entities.getChildrenIDs(id);
+ var realChildren = [];
+ var properties;
+ for (var i = 0; i < allChildren.length; i++) {
+ properties = Entities.getEntityProperties(allChildren[i], ["name"]);
+ if (properties.name !== undefined && properties.name !== entityShapeVisualizerSessionName) {
+ realChildren.push(allChildren[i]);
+ }
+ }
+ return realChildren;
+}
+
+function importEntitiesFromFile() {
+ Window.browseChanged.connect(onFileOpenChanged);
+ Window.browseAsync("Select .json to Import", "", "*.json");
+}
+
+function importEntitiesFromUrl() {
+ Window.promptTextChanged.connect(onPromptTextChanged);
+ Window.promptAsync("URL of a .json to import", "");
+}
+
+function setCameraFocusToSelection() {
+ cameraManager.enable();
+ if (selectionManager.hasSelection()) {
+ cameraManager.focus(selectionManager.worldPosition, selectionManager.worldDimensions,
+ Menu.isOptionChecked(MENU_EASE_ON_FOCUS));
+ }
+}
+
+function alignGridToSelection() {
+ if (selectionManager.hasSelection()) {
+ if (!grid.getVisible()) {
+ grid.setVisible(true, true);
+ }
+ grid.moveToSelection();
+ }
+}
+
+function alignGridToAvatar() {
+ if (!grid.getVisible()) {
+ grid.setVisible(true, true);
+ }
+ grid.moveToAvatar();
+}
+
+function toggleGridVisibility() {
+ if (!grid.getVisible()) {
+ grid.setVisible(true, true);
+ } else {
+ grid.setVisible(false, true);
+ }
+}
+
}()); // END LOCAL_SCOPE
diff --git a/scripts/system/create/entityList/entityList.js b/scripts/system/create/entityList/entityList.js
index 58cf4ce892..a4d4decedb 100644
--- a/scripts/system/create/entityList/entityList.js
+++ b/scripts/system/create/entityList/entityList.js
@@ -146,6 +146,20 @@ EntityListTool = function(shouldUseEditTabletApp) {
});
};
+ that.setListMenuSnapToGrid = function (isSnapToGrid) {
+ emitJSONScriptEvent({ "type": "setSnapToGrid", "snap": isSnapToGrid });
+ };
+
+ that.toggleSnapToGrid = function () {
+ if (!grid.getSnapToGrid()) {
+ grid.setSnapToGrid(true);
+ emitJSONScriptEvent({ "type": "setSnapToGrid", "snap": true });
+ } else {
+ grid.setSnapToGrid(false);
+ emitJSONScriptEvent({ "type": "setSnapToGrid", "snap": false });
+ }
+ };
+
function valueIfDefined(value) {
return value !== undefined ? value : "";
}
@@ -381,7 +395,22 @@ EntityListTool = function(shouldUseEditTabletApp) {
});
} else if (data.type === 'saveColumnsConfigSetting') {
Settings.setValue(SETTING_EDITOR_COLUMNS_SETUP, data.columnsData);
+ } else if (data.type === 'importFromFile') {
+ importEntitiesFromFile();
+ } else if (data.type === 'importFromUrl') {
+ importEntitiesFromUrl();
+ } else if (data.type === 'setCameraFocusToSelection') {
+ setCameraFocusToSelection();
+ } else if (data.type === 'alignGridToSelection') {
+ alignGridToSelection();
+ } else if (data.type === 'alignGridToAvatar') {
+ alignGridToAvatar();
+ } else if (data.type === 'toggleGridVisibility') {
+ toggleGridVisibility();
+ } else if (data.type === 'toggleSnapToGrid') {
+ that.toggleSnapToGrid();
}
+
};
webView.webEventReceived.connect(onWebEventReceived);
diff --git a/scripts/system/create/entityList/html/entityList.html b/scripts/system/create/entityList/html/entityList.html
index a5f27bd3a8..9817f9ddf9 100644
--- a/scripts/system/create/entityList/html/entityList.html
+++ b/scripts/system/create/entityList/html/entityList.html
@@ -32,8 +32,9 @@
-
-
+
+
+
@@ -159,7 +160,7 @@
-
+
+