mirror of
https://github.com/overte-org/overte.git
synced 2025-07-24 03:23:51 +02:00
Merge remote-tracking branch 'upstream/master' into HEAD
This commit is contained in:
commit
49e7d42c2c
31 changed files with 318 additions and 396 deletions
|
@ -185,22 +185,8 @@ set(EXTERNAL_PROJECT_PREFIX "project")
|
||||||
set_property(DIRECTORY PROPERTY EP_PREFIX ${EXTERNAL_PROJECT_PREFIX})
|
set_property(DIRECTORY PROPERTY EP_PREFIX ${EXTERNAL_PROJECT_PREFIX})
|
||||||
setup_externals_binary_dir()
|
setup_externals_binary_dir()
|
||||||
|
|
||||||
# setup options to grab external project dependencies
|
|
||||||
option(GET_BULLET "Get Bullet library automatically as external project" 1)
|
|
||||||
option(GET_GLM "Get GLM library automatically as external project" 1)
|
|
||||||
option(GET_GVERB "Get Gverb library automatically as external project" 1)
|
|
||||||
option(GET_TBB "Get Threading Building Blocks library automatically as external project" 1)
|
|
||||||
option(GET_LIBOVR "Get LibOVR library automatically as external project" 1)
|
|
||||||
option(GET_VHACD "Get V-HACD library automatically as external project" 1)
|
|
||||||
option(GET_POLYVOX "Get polyvox library automatically as external project" 1)
|
|
||||||
option(GET_OPENVR "Get OpenVR library automatically as external project" 1)
|
|
||||||
option(GET_BOOSTCONFIG "Get Boost-config library automatically as external project" 1)
|
|
||||||
option(GET_OGLPLUS "Get OGLplus library automatically as external project" 1)
|
|
||||||
option(GET_GLEW "Get GLEW library automatically as external project" 1)
|
|
||||||
|
|
||||||
option(USE_NSIGHT "Attempt to find the nSight libraries" 1)
|
option(USE_NSIGHT "Attempt to find the nSight libraries" 1)
|
||||||
|
|
||||||
option(GET_SDL2 "Get SDL2 library automatically as external project" 0)
|
|
||||||
|
|
||||||
if (WIN32)
|
if (WIN32)
|
||||||
add_paths_to_fixup_libs("${QT_DIR}/bin")
|
add_paths_to_fixup_libs("${QT_DIR}/bin")
|
||||||
|
|
|
@ -254,10 +254,10 @@ void AvatarMixer::broadcastAvatarData() {
|
||||||
// potentially update the max full rate distance for this frame
|
// potentially update the max full rate distance for this frame
|
||||||
maxAvatarDistanceThisFrame = std::max(maxAvatarDistanceThisFrame, distanceToAvatar);
|
maxAvatarDistanceThisFrame = std::max(maxAvatarDistanceThisFrame, distanceToAvatar);
|
||||||
|
|
||||||
if (distanceToAvatar != 0.0f
|
if (distanceToAvatar != 0.0f
|
||||||
&& distribution(generator) > (nodeData->getFullRateDistance() / distanceToAvatar)) {
|
&& distribution(generator) > (nodeData->getFullRateDistance() / distanceToAvatar)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
AvatarDataSequenceNumber lastSeqToReceiver = nodeData->getLastBroadcastSequenceNumber(otherNode->getUUID());
|
AvatarDataSequenceNumber lastSeqToReceiver = nodeData->getLastBroadcastSequenceNumber(otherNode->getUUID());
|
||||||
AvatarDataSequenceNumber lastSeqFromSender = otherNodeData->getLastReceivedSequenceNumber();
|
AvatarDataSequenceNumber lastSeqFromSender = otherNodeData->getLastReceivedSequenceNumber();
|
||||||
|
|
30
cmake/externals/faceshift/CMakeLists.txt
vendored
Normal file
30
cmake/externals/faceshift/CMakeLists.txt
vendored
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
set(EXTERNAL_NAME faceshift)
|
||||||
|
|
||||||
|
include(ExternalProject)
|
||||||
|
ExternalProject_Add(
|
||||||
|
${EXTERNAL_NAME}
|
||||||
|
URL https://hifi-public.s3.amazonaws.com/dependencies/faceshift.zip
|
||||||
|
CMAKE_ARGS ${ANDROID_CMAKE_ARGS} -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
|
||||||
|
BINARY_DIR ${EXTERNAL_PROJECT_PREFIX}/build
|
||||||
|
LOG_DOWNLOAD 1
|
||||||
|
LOG_CONFIGURE 1
|
||||||
|
LOG_BUILD 1
|
||||||
|
)
|
||||||
|
|
||||||
|
# URL_MD5 1bdcb8a0b8d5b1ede434cc41efade41d
|
||||||
|
|
||||||
|
# Hide this external target (for ide users)
|
||||||
|
set_target_properties(${EXTERNAL_NAME} PROPERTIES FOLDER "hidden/externals")
|
||||||
|
|
||||||
|
ExternalProject_Get_Property(${EXTERNAL_NAME} INSTALL_DIR)
|
||||||
|
|
||||||
|
string(TOUPPER ${EXTERNAL_NAME} EXTERNAL_NAME_UPPER)
|
||||||
|
set(${EXTERNAL_NAME_UPPER}_INCLUDE_DIRS ${INSTALL_DIR}/include CACHE FILEPATH "Path to Faceshift include directory")
|
||||||
|
|
||||||
|
if (WIN32)
|
||||||
|
set(${EXTERNAL_NAME_UPPER}_LIBRARY_DEBUG ${INSTALL_DIR}/lib/Debug/faceshift.lib CACHE FILEPATH "Faceshift libraries")
|
||||||
|
set(${EXTERNAL_NAME_UPPER}_LIBRARY_RELEASE ${INSTALL_DIR}/lib/Release/faceshift.lib CACHE FILEPATH "Faceshift libraries")
|
||||||
|
elseif (APPLE)
|
||||||
|
set(${EXTERNAL_NAME_UPPER}_LIBRARY_DEBUG ${INSTALL_DIR}/lib/Debug/libfaceshift.a CACHE FILEPATH "Faceshift libraries")
|
||||||
|
set(${EXTERNAL_NAME_UPPER}_LIBRARY_RELEASE ${INSTALL_DIR}/lib/Release/libfaceshift.a CACHE FILEPATH "Faceshift libraries")
|
||||||
|
endif()
|
30
cmake/externals/sdl2/CMakeLists.txt
vendored
30
cmake/externals/sdl2/CMakeLists.txt
vendored
|
@ -47,25 +47,13 @@ if (APPLE)
|
||||||
ExternalProject_Get_Property(${EXTERNAL_NAME} SOURCE_DIR)
|
ExternalProject_Get_Property(${EXTERNAL_NAME} SOURCE_DIR)
|
||||||
set(${EXTERNAL_NAME_UPPER}_INCLUDE_DIR ${SOURCE_DIR}/SDL2.framework/Headers CACHE PATH "Location of SDL2 include directory")
|
set(${EXTERNAL_NAME_UPPER}_INCLUDE_DIR ${SOURCE_DIR}/SDL2.framework/Headers CACHE PATH "Location of SDL2 include directory")
|
||||||
set(${EXTERNAL_NAME_UPPER}_LIBRARY_TEMP ${SOURCE_DIR}/SDL2.framework/SDL2 CACHE STRING "Path to SDL2 library")
|
set(${EXTERNAL_NAME_UPPER}_LIBRARY_TEMP ${SOURCE_DIR}/SDL2.framework/SDL2 CACHE STRING "Path to SDL2 library")
|
||||||
|
elseif (WIN32)
|
||||||
|
ExternalProject_Get_Property(${EXTERNAL_NAME} SOURCE_DIR)
|
||||||
|
set(${EXTERNAL_NAME_UPPER}_INCLUDE_DIR ${SOURCE_DIR}/include CACHE PATH "Location of SDL2 include directory")
|
||||||
|
set(${EXTERNAL_NAME_UPPER}_LIBRARY_TEMP ${SOURCE_DIR}/lib/x86/SDL2.lib CACHE FILEPATH "Path to SDL2 library")
|
||||||
|
set(${EXTERNAL_NAME_UPPER}_DLL_PATH ${SOURCE_DIR}/lib/x86 CACHE PATH "Location of SDL2 DLL")
|
||||||
else ()
|
else ()
|
||||||
if (WIN32)
|
ExternalProject_Get_Property(${EXTERNAL_NAME} INSTALL_DIR)
|
||||||
ExternalProject_Get_Property(${EXTERNAL_NAME} SOURCE_DIR)
|
set(${EXTERNAL_NAME_UPPER}_INCLUDE_DIR ${INSTALL_DIR}/include/SDL2 CACHE PATH "Location of SDL2 include directory")
|
||||||
set(_ROOT_DIR ${SOURCE_DIR})
|
set(${EXTERNAL_NAME_UPPER}_LIBRARY_TEMP ${INSTALL_DIR}/lib/libSDL2.so CACHE FILEPATH "Path to SDL2 library")
|
||||||
set(_INCLUDE_DIR ${_ROOT_DIR}/include)
|
endif ()
|
||||||
set(_LIB_DIR "${SOURCE_DIR}/lib/x86")
|
|
||||||
set(_LIB_EXT "lib")
|
|
||||||
|
|
||||||
set(${EXTERNAL_NAME_UPPER}_DLL_PATH ${_LIB_DIR} CACHE PATH "Location of SDL2 DLL")
|
|
||||||
else ()
|
|
||||||
ExternalProject_Get_Property(${EXTERNAL_NAME} INSTALL_DIR)
|
|
||||||
set(_ROOT_DIR ${INSTALL_DIR})
|
|
||||||
set(_INCLUDE_DIR ${_ROOT_DIR}/include/SDL2)
|
|
||||||
|
|
||||||
set(_LIB_DIR ${INSTALL_DIR}/lib)
|
|
||||||
set(_LIB_EXT "so")
|
|
||||||
set(_LIB_PREFIX "lib")
|
|
||||||
endif ()
|
|
||||||
|
|
||||||
set(${EXTERNAL_NAME_UPPER}_INCLUDE_DIR ${_INCLUDE_DIR} CACHE PATH "Location of SDL2 include directory")
|
|
||||||
set(${EXTERNAL_NAME_UPPER}_LIBRARY_TEMP ${_LIB_DIR}/${_LIB_PREFIX}SDL2.${_LIB_EXT} CACHE FILEPATH "Path to SDL2 library")
|
|
||||||
endif ()
|
|
||||||
|
|
36
cmake/externals/sixense/CMakeLists.txt
vendored
36
cmake/externals/sixense/CMakeLists.txt
vendored
|
@ -1,30 +1,20 @@
|
||||||
include(ExternalProject)
|
include(ExternalProject)
|
||||||
include(SelectLibraryConfigurations)
|
|
||||||
|
|
||||||
set(EXTERNAL_NAME Sixense)
|
set(EXTERNAL_NAME sixense)
|
||||||
|
|
||||||
string(TOUPPER ${EXTERNAL_NAME} EXTERNAL_NAME_UPPER)
|
string(TOUPPER ${EXTERNAL_NAME} EXTERNAL_NAME_UPPER)
|
||||||
|
|
||||||
ExternalProject_Add(
|
ExternalProject_Add(
|
||||||
${EXTERNAL_NAME}
|
${EXTERNAL_NAME}
|
||||||
URL ./SixenseSDK_062612.zip
|
URL http://hifi-public.s3.amazonaws.com/dependencies/SixenseSDK_071615.zip
|
||||||
URL_MD5 10cc8dc470d2ac1244a88cf04bc549cc
|
URL_MD5 752a3901f334124e9cffc2ba4136ef7d
|
||||||
CONFIGURE_COMMAND ""
|
CONFIGURE_COMMAND ""
|
||||||
BUILD_COMMAND ""
|
BUILD_COMMAND ""
|
||||||
INSTALL_COMMAND ""
|
INSTALL_COMMAND ""
|
||||||
LOG_DOWNLOAD 1
|
LOG_DOWNLOAD 1
|
||||||
)
|
)
|
||||||
|
|
||||||
if (APPLE)
|
set_target_properties(${EXTERNAL_NAME} PROPERTIES FOLDER "hidden/externals")
|
||||||
find_library(SIXENSE_LIBRARY_RELEASE lib/osx_x64/release_dll/libsixense_x64.dylib HINTS ${SIXENSE_SEARCH_DIRS})
|
|
||||||
find_library(SIXENSE_LIBRARY_DEBUG lib/osx_x64/debug_dll/libsixensed_x64.dylib HINTS ${SIXENSE_SEARCH_DIRS})
|
|
||||||
elseif (UNIX)
|
|
||||||
find_library(SIXENSE_LIBRARY_RELEASE lib/linux_x64/release/libsixense_x64.so HINTS ${SIXENSE_SEARCH_DIRS})
|
|
||||||
# find_library(SIXENSE_LIBRARY_DEBUG lib/linux_x64/debug/libsixensed_x64.so HINTS ${SIXENSE_SEARCH_DIRS})
|
|
||||||
elseif (WIN32)
|
|
||||||
endif ()
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
ExternalProject_Get_Property(${EXTERNAL_NAME} SOURCE_DIR)
|
ExternalProject_Get_Property(${EXTERNAL_NAME} SOURCE_DIR)
|
||||||
|
|
||||||
|
@ -39,22 +29,18 @@ if (WIN32)
|
||||||
set(ARCH_DIR "Win32")
|
set(ARCH_DIR "Win32")
|
||||||
set(ARCH_SUFFIX "")
|
set(ARCH_SUFFIX "")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# FIXME need to account for different architectures
|
set(${EXTERNAL_NAME_UPPER}_LIBRARIES "${SOURCE_DIR}/lib/${ARCH_DIR}/VS2013/release_dll/sixense${ARCH_SUFFIX}.lib" CACHE TYPE INTERNAL)
|
||||||
set(${EXTERNAL_NAME_UPPER}_LIBRARIES "${SOURCE_DIR}/lib/${ARCH_DIR}/release_dll/sixense${ARCH_SUFFIX}.lib" CACHE TYPE INTERNAL)
|
add_paths_to_fixup_libs("${SOURCE_DIR}/bin/${ARCH_DIR}/VS2013/release_dll")
|
||||||
add_paths_to_fixup_libs(${SOURCE_DIR}/bin/win32)
|
|
||||||
|
|
||||||
elseif(APPLE)
|
elseif(APPLE)
|
||||||
|
|
||||||
# FIXME need to account for different architectures
|
set(${EXTERNAL_NAME_UPPER}_LIBRARIES ${SOURCE_DIR}/lib/osx_x64/release_dll/libsixense_x64.dylib CACHE TYPE INTERNAL)
|
||||||
set(${EXTERNAL_NAME_UPPER}_LIBRARIES ${SOURCE_DIR}/lib/osx_x64/release_dll/libsixense_x64.dylib CACHE TYPE INTERNAL)
|
|
||||||
add_paths_to_fixup_libs(${SOURCE_DIR}/bin/osx32)
|
|
||||||
|
|
||||||
elseif(NOT ANDROID)
|
elseif(NOT ANDROID)
|
||||||
|
|
||||||
# FIXME need to account for different architectures
|
# FIXME need to account for different architectures
|
||||||
set(${EXTERNAL_NAME_UPPER}_LIBRARIES ${SOURCE_DIR}/lib/linux_x64/release/libsixense_x64.so CACHE TYPE INTERNAL)
|
set(${EXTERNAL_NAME_UPPER}_LIBRARIES ${SOURCE_DIR}/lib/linux_x64/release/libsixense_x64.so CACHE TYPE INTERNAL)
|
||||||
add_paths_to_fixup_libs(${SOURCE_DIR}/bin/linux32)
|
|
||||||
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
|
|
@ -16,7 +16,7 @@ macro(ADD_DEPENDENCY_EXTERNAL_PROJECTS)
|
||||||
string(TOUPPER ${_PROJ_NAME} _PROJ_NAME_UPPER)
|
string(TOUPPER ${_PROJ_NAME} _PROJ_NAME_UPPER)
|
||||||
|
|
||||||
# has the user told us they specific don't want this as an external project?
|
# has the user told us they specific don't want this as an external project?
|
||||||
if (GET_${_PROJ_NAME_UPPER})
|
if (NOT USE_LOCAL_${_PROJ_NAME_UPPER})
|
||||||
# have we already detected we can't have this as external project on this OS?
|
# have we already detected we can't have this as external project on this OS?
|
||||||
if (NOT DEFINED ${_PROJ_NAME_UPPER}_EXTERNAL_PROJECT OR ${_PROJ_NAME_UPPER}_EXTERNAL_PROJECT)
|
if (NOT DEFINED ${_PROJ_NAME_UPPER}_EXTERNAL_PROJECT OR ${_PROJ_NAME_UPPER}_EXTERNAL_PROJECT)
|
||||||
# have we already setup the target?
|
# have we already setup the target?
|
||||||
|
|
14
cmake/macros/TargetFaceshift.cmake
Normal file
14
cmake/macros/TargetFaceshift.cmake
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
#
|
||||||
|
# Copyright 2015 High Fidelity, Inc.
|
||||||
|
# Created by Bradley Austin Davis on 2015/10/10
|
||||||
|
#
|
||||||
|
# Distributed under the Apache License, Version 2.0.
|
||||||
|
# See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
||||||
|
#
|
||||||
|
macro(TARGET_FACESHIFT)
|
||||||
|
add_dependency_external_projects(faceshift)
|
||||||
|
find_package(Faceshift REQUIRED)
|
||||||
|
target_include_directories(${TARGET_NAME} PRIVATE ${FACESHIFT_INCLUDE_DIRS})
|
||||||
|
target_link_libraries(${TARGET_NAME} ${FACESHIFT_LIBRARIES})
|
||||||
|
add_definitions(-DHAVE_FACESHIFT)
|
||||||
|
endmacro()
|
14
cmake/macros/TargetSDL2.cmake
Normal file
14
cmake/macros/TargetSDL2.cmake
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
#
|
||||||
|
# Copyright 2015 High Fidelity, Inc.
|
||||||
|
# Created by Bradley Austin Davis on 2015/10/10
|
||||||
|
#
|
||||||
|
# Distributed under the Apache License, Version 2.0.
|
||||||
|
# See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
||||||
|
#
|
||||||
|
macro(TARGET_SDL2)
|
||||||
|
add_dependency_external_projects(sdl2)
|
||||||
|
find_package(SDL2 REQUIRED)
|
||||||
|
target_include_directories(${TARGET_NAME} SYSTEM PRIVATE ${SDL2_INCLUDE_DIR})
|
||||||
|
target_link_libraries(${TARGET_NAME} ${SDL2_LIBRARY})
|
||||||
|
add_definitions(-DHAVE_SDL2)
|
||||||
|
endmacro()
|
14
cmake/macros/TargetSixense.cmake
Normal file
14
cmake/macros/TargetSixense.cmake
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
#
|
||||||
|
# Copyright 2015 High Fidelity, Inc.
|
||||||
|
# Created by Bradley Austin Davis on 2015/10/10
|
||||||
|
#
|
||||||
|
# Distributed under the Apache License, Version 2.0.
|
||||||
|
# See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
||||||
|
#
|
||||||
|
macro(TARGET_SIXENSE)
|
||||||
|
add_dependency_external_projects(sixense)
|
||||||
|
find_package(Sixense REQUIRED)
|
||||||
|
target_include_directories(${TARGET_NAME} PRIVATE ${SIXENSE_INCLUDE_DIRS})
|
||||||
|
target_link_libraries(${TARGET_NAME} ${SIXENSE_LIBRARIES})
|
||||||
|
add_definitions(-DHAVE_SIXENSE)
|
||||||
|
endmacro()
|
|
@ -18,32 +18,9 @@
|
||||||
# See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
# See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
||||||
#
|
#
|
||||||
|
|
||||||
include("${MACRO_DIR}/HifiLibrarySearchHints.cmake")
|
|
||||||
hifi_library_search_hints("faceshift")
|
|
||||||
|
|
||||||
find_path(FACESHIFT_INCLUDE_DIRS fsbinarystream.h PATH_SUFFIXES include HINTS ${FACESHIFT_SEARCH_DIRS})
|
|
||||||
|
|
||||||
if (APPLE)
|
|
||||||
set(ARCH_DIR "MacOS")
|
|
||||||
elseif (UNIX)
|
|
||||||
set(ARCH_DIR "UNIX")
|
|
||||||
elseif (WIN32)
|
|
||||||
if ("${CMAKE_SIZEOF_VOID_P}" EQUAL "8")
|
|
||||||
set(ARCH_DIR "x64")
|
|
||||||
else()
|
|
||||||
set(ARCH_DIR "Win32")
|
|
||||||
endif()
|
|
||||||
endif ()
|
|
||||||
|
|
||||||
find_library(FACESHIFT_LIBRARY_RELEASE NAME faceshift PATH_SUFFIXES lib/${ARCH_DIR} HINTS ${FACESHIFT_SEARCH_DIRS})
|
|
||||||
find_library(FACESHIFT_LIBRARY_DEBUG NAME faceshiftd PATH_SUFFIXES lib/${ARCH_DIR} HINTS ${FACESHIFT_SEARCH_DIRS})
|
|
||||||
|
|
||||||
include(SelectLibraryConfigurations)
|
include(SelectLibraryConfigurations)
|
||||||
select_library_configurations(FACESHIFT)
|
select_library_configurations(FACESHIFT)
|
||||||
|
|
||||||
set(FACESHIFT_LIBRARIES ${FACESHIFT_LIBRARY})
|
|
||||||
|
|
||||||
include(FindPackageHandleStandardArgs)
|
include(FindPackageHandleStandardArgs)
|
||||||
find_package_handle_standard_args(Faceshift DEFAULT_MSG FACESHIFT_INCLUDE_DIRS FACESHIFT_LIBRARIES)
|
find_package_handle_standard_args(Faceshift DEFAULT_MSG FACESHIFT_INCLUDE_DIRS FACESHIFT_LIBRARIES)
|
||||||
|
|
||||||
mark_as_advanced(FACESHIFT_INCLUDE_DIRS FACESHIFT_LIBRARIES FACESHIFT_SEARCH_DIRS)
|
mark_as_advanced(FACESHIFT_INCLUDE_DIRS FACESHIFT_LIBRARIES FACESHIFT_SEARCH_DIRS)
|
|
@ -18,49 +18,6 @@
|
||||||
# See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
# See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
||||||
#
|
#
|
||||||
|
|
||||||
include("${MACRO_DIR}/HifiLibrarySearchHints.cmake")
|
|
||||||
hifi_library_search_hints("sixense")
|
|
||||||
|
|
||||||
find_path(SIXENSE_INCLUDE_DIRS sixense.h PATH_SUFFIXES include HINTS ${SIXENSE_SEARCH_DIRS})
|
|
||||||
|
|
||||||
if (APPLE)
|
|
||||||
find_library(SIXENSE_LIBRARY_RELEASE lib/osx_x64/release_dll/libsixense_x64.dylib HINTS ${SIXENSE_SEARCH_DIRS})
|
|
||||||
find_library(SIXENSE_LIBRARY_DEBUG lib/osx_x64/debug_dll/libsixensed_x64.dylib HINTS ${SIXENSE_SEARCH_DIRS})
|
|
||||||
elseif (UNIX)
|
|
||||||
find_library(SIXENSE_LIBRARY_RELEASE lib/linux_x64/release/libsixense_x64.so HINTS ${SIXENSE_SEARCH_DIRS})
|
|
||||||
# find_library(SIXENSE_LIBRARY_DEBUG lib/linux_x64/debug/libsixensed_x64.so HINTS ${SIXENSE_SEARCH_DIRS})
|
|
||||||
elseif (WIN32)
|
|
||||||
if ("${CMAKE_SIZEOF_VOID_P}" EQUAL "8")
|
|
||||||
set(ARCH_DIR "x64")
|
|
||||||
set(ARCH_SUFFIX "_x64")
|
|
||||||
else()
|
|
||||||
set(ARCH_DIR "Win32")
|
|
||||||
set(ARCH_SUFFIX "")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
find_library(SIXENSE_LIBRARY_RELEASE "lib/${ARCH_DIR}/release_dll/sixense${ARCH_SUFFIX}.lib" HINTS ${SIXENSE_SEARCH_DIRS})
|
|
||||||
find_library(SIXENSE_LIBRARY_DEBUG "lib/${ARCH_DIR}/debug_dll/sixensed.lib" HINTS ${SIXENSE_SEARCH_DIRS})
|
|
||||||
|
|
||||||
find_path(SIXENSE_DEBUG_DLL_PATH "sixensed${ARCH_SUFFIX}.dll" PATH_SUFFIXES bin/${ARCH_DIR}/debug_dll HINTS ${SIXENSE_SEARCH_DIRS})
|
|
||||||
find_path(SIXENSE_RELEASE_DLL_PATH "sixense${ARCH_SUFFIX}.dll" PATH_SUFFIXES bin/${ARCH_DIR}/release_dll HINTS ${SIXENSE_SEARCH_DIRS})
|
|
||||||
find_path(SIXENSE_DEVICE_DLL_PATH DeviceDLL.dll PATH_SUFFIXES samples/${ARCH_DIR}/sixense_simple3d HINTS ${SIXENSE_SEARCH_DIRS})
|
|
||||||
endif ()
|
|
||||||
|
|
||||||
include(SelectLibraryConfigurations)
|
|
||||||
select_library_configurations(SIXENSE)
|
|
||||||
|
|
||||||
set(SIXENSE_REQUIREMENTS SIXENSE_INCLUDE_DIRS SIXENSE_LIBRARIES)
|
|
||||||
if (WIN32)
|
|
||||||
list(APPEND SIXENSE_REQUIREMENTS SIXENSE_DEBUG_DLL_PATH SIXENSE_RELEASE_DLL_PATH SIXENSE_DEVICE_DLL_PATH)
|
|
||||||
endif ()
|
|
||||||
|
|
||||||
set(SIXENSE_LIBRARIES "${SIXENSE_LIBRARY}")
|
|
||||||
|
|
||||||
include(FindPackageHandleStandardArgs)
|
include(FindPackageHandleStandardArgs)
|
||||||
find_package_handle_standard_args(Sixense DEFAULT_MSG ${SIXENSE_REQUIREMENTS})
|
find_package_handle_standard_args(Sixense DEFAULT_MSG SIXENSE_INCLUDE_DIRS SIXENSE_LIBRARIES)
|
||||||
|
|
||||||
if (WIN32)
|
|
||||||
add_paths_to_fixup_libs(${SIXENSE_DEBUG_DLL_PATH} ${SIXENSE_RELEASE_DLL_PATH} ${SIXENSE_DEVICE_DLL_PATH})
|
|
||||||
endif ()
|
|
||||||
|
|
||||||
mark_as_advanced(SIXENSE_LIBRARIES SIXENSE_INCLUDE_DIRS SIXENSE_SEARCH_DIRS)
|
mark_as_advanced(SIXENSE_LIBRARIES SIXENSE_INCLUDE_DIRS SIXENSE_SEARCH_DIRS)
|
||||||
|
|
|
@ -1510,7 +1510,7 @@ PropertiesTool = function(opts) {
|
||||||
if (entity.properties.rotation !== undefined) {
|
if (entity.properties.rotation !== undefined) {
|
||||||
entity.properties.rotation = Quat.safeEulerAngles(entity.properties.rotation);
|
entity.properties.rotation = Quat.safeEulerAngles(entity.properties.rotation);
|
||||||
}
|
}
|
||||||
if (entity.properties.keyLight.direction !== undefined) {
|
if (entity.properties.keyLight !== undefined && entity.properties.keyLight.direction !== undefined) {
|
||||||
entity.properties.keyLight.direction = Vec3.multiply(RADIANS_TO_DEGREES, Vec3.toPolar(entity.properties.keyLight.direction));
|
entity.properties.keyLight.direction = Vec3.multiply(RADIANS_TO_DEGREES, Vec3.toPolar(entity.properties.keyLight.direction));
|
||||||
entity.properties.keyLight.direction.z = 0.0;
|
entity.properties.keyLight.direction.z = 0.0;
|
||||||
}
|
}
|
||||||
|
@ -1541,7 +1541,7 @@ PropertiesTool = function(opts) {
|
||||||
var rotation = data.properties.rotation;
|
var rotation = data.properties.rotation;
|
||||||
data.properties.rotation = Quat.fromPitchYawRollDegrees(rotation.x, rotation.y, rotation.z);
|
data.properties.rotation = Quat.fromPitchYawRollDegrees(rotation.x, rotation.y, rotation.z);
|
||||||
}
|
}
|
||||||
if (data.properties.keyLight.direction !== undefined) {
|
if (data.properties.keyLight !== undefined && data.properties.keyLight.direction !== undefined) {
|
||||||
data.properties.keyLight.direction = Vec3.fromPolar(
|
data.properties.keyLight.direction = Vec3.fromPolar(
|
||||||
data.properties.keyLight.direction.x * DEGREES_TO_RADIANS, data.properties.keyLight.direction.y * DEGREES_TO_RADIANS);
|
data.properties.keyLight.direction.x * DEGREES_TO_RADIANS, data.properties.keyLight.direction.y * DEGREES_TO_RADIANS);
|
||||||
}
|
}
|
||||||
|
|
|
@ -830,7 +830,7 @@
|
||||||
elZoneKeyLightColorRed.addEventListener('change', zoneKeyLightColorChangeFunction);
|
elZoneKeyLightColorRed.addEventListener('change', zoneKeyLightColorChangeFunction);
|
||||||
elZoneKeyLightColorGreen.addEventListener('change', zoneKeyLightColorChangeFunction);
|
elZoneKeyLightColorGreen.addEventListener('change', zoneKeyLightColorChangeFunction);
|
||||||
elZoneKeyLightColorBlue.addEventListener('change', zoneKeyLightColorChangeFunction);
|
elZoneKeyLightColorBlue.addEventListener('change', zoneKeyLightColorChangeFunction);
|
||||||
elZoneKeyLightIntensity.addEventListener('change', createEmitGroupNumberPropertyUpdateFunction('intensity','keyLight'));
|
elZoneKeyLightIntensity.addEventListener('change', createEmitGroupNumberPropertyUpdateFunction('keyLight','intensity'));
|
||||||
elZoneKeyLightAmbientIntensity.addEventListener('change', createEmitGroupNumberPropertyUpdateFunction('keyLight','ambientIntensity'));
|
elZoneKeyLightAmbientIntensity.addEventListener('change', createEmitGroupNumberPropertyUpdateFunction('keyLight','ambientIntensity'));
|
||||||
var zoneKeyLightDirectionChangeFunction = createEmitGroupVec3PropertyUpdateFunction('keyLight','direction', elZoneKeyLightDirectionX, elZoneKeyLightDirectionY, elZoneKeyLightDirectionZ);
|
var zoneKeyLightDirectionChangeFunction = createEmitGroupVec3PropertyUpdateFunction('keyLight','direction', elZoneKeyLightDirectionX, elZoneKeyLightDirectionY, elZoneKeyLightDirectionZ);
|
||||||
elZoneKeyLightDirectionX.addEventListener('change', zoneKeyLightDirectionChangeFunction);
|
elZoneKeyLightDirectionX.addEventListener('change', zoneKeyLightDirectionChangeFunction);
|
||||||
|
@ -1520,7 +1520,7 @@
|
||||||
<div class="zone-section keyLight-section property">
|
<div class="zone-section keyLight-section property">
|
||||||
<div class="label">Ambient URL</div>
|
<div class="label">Ambient URL</div>
|
||||||
<div class="value">
|
<div class="value">
|
||||||
<input type="text" id="property-zone-skybox-url" class="url">
|
<input type="text" id="property-zone-key-ambient-url" class="url">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
|
@ -47,6 +47,7 @@
|
||||||
if (this.painting) {
|
if (this.painting) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
this.whichHand = this.hand;
|
||||||
if (this.hand === RIGHT_HAND) {
|
if (this.hand === RIGHT_HAND) {
|
||||||
this.getHandPosition = MyAvatar.getRightPalmPosition;
|
this.getHandPosition = MyAvatar.getRightPalmPosition;
|
||||||
this.getHandRotation = MyAvatar.getRightPalmRotation;
|
this.getHandRotation = MyAvatar.getRightPalmRotation;
|
||||||
|
@ -183,6 +184,9 @@
|
||||||
},
|
},
|
||||||
|
|
||||||
releaseGrab: function() {
|
releaseGrab: function() {
|
||||||
|
if(this.hand !== this.whichHand) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
this.stopPainting();
|
this.stopPainting();
|
||||||
|
|
||||||
},
|
},
|
||||||
|
@ -241,10 +245,8 @@
|
||||||
Overlays.deleteOverlay(this.laserPointer);
|
Overlays.deleteOverlay(this.laserPointer);
|
||||||
// this.eraseBoard();
|
// this.eraseBoard();
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
// entity scripts always need to return a newly constructed object of our type
|
// entity scripts always need to return a newly constructed object of our type
|
||||||
return new Whiteboard();
|
return new Whiteboard();
|
||||||
});
|
});
|
|
@ -16,186 +16,199 @@
|
||||||
|
|
||||||
Script.include("../../libraries/utils.js");
|
Script.include("../../libraries/utils.js");
|
||||||
var scriptURL = Script.resolvePath("whiteboardEntityScript.js");
|
var scriptURL = Script.resolvePath("whiteboardEntityScript.js");
|
||||||
|
var modelURL = "https://s3.amazonaws.com/hifi-public/eric/models/whiteboard.fbx";
|
||||||
|
|
||||||
|
var colorIndicatorBorderModelURL = "https://s3.amazonaws.com/hifi-public/eric/models/colorIndicatorBorder.fbx";
|
||||||
|
var eraserModelURL = "https://s3.amazonaws.com/hifi-public/eric/models/eraser.fbx";
|
||||||
|
var surfaceModelURL = "https://s3.amazonaws.com/hifi-public/eric/models/boardSurface.fbx";
|
||||||
var rotation = Quat.safeEulerAngles(Camera.getOrientation());
|
var rotation = Quat.safeEulerAngles(Camera.getOrientation());
|
||||||
rotation = Quat.fromPitchYawRollDegrees(0, rotation.y, 0);
|
rotation = Quat.fromPitchYawRollDegrees(0, rotation.y, 0);
|
||||||
var center = Vec3.sum(MyAvatar.position, Vec3.multiply(3, Quat.getFront(rotation)));
|
var center = Vec3.sum(MyAvatar.position, Vec3.multiply(3, Quat.getFront(rotation)));
|
||||||
center.y += 0.4;
|
|
||||||
|
var whiteboardDimensions, colorIndicatorBoxDimensions, colorIndicatorBox, eraser, blocker;
|
||||||
|
var colorBoxes = [];
|
||||||
|
|
||||||
var colors = [
|
var colors = [
|
||||||
hexToRgb("#2F8E84"),
|
|
||||||
hexToRgb("#66CCB3"),
|
hexToRgb("#66CCB3"),
|
||||||
hexToRgb("#A43C37"),
|
hexToRgb("#A43C37"),
|
||||||
hexToRgb("#491849"),
|
hexToRgb("#491849"),
|
||||||
hexToRgb("#6AB03B"),
|
hexToRgb("#6AB03B"),
|
||||||
hexToRgb("#993369"),
|
hexToRgb("#993369"),
|
||||||
hexToRgb("#9B47C2")
|
hexToRgb("#000000")
|
||||||
];
|
];
|
||||||
|
|
||||||
//WHITEBOARD
|
|
||||||
var whiteboardDimensions = {
|
|
||||||
x: 2,
|
|
||||||
y: 1.5,
|
|
||||||
z: 0.08
|
|
||||||
};
|
|
||||||
var whiteboard = Entities.addEntity({
|
var whiteboard = Entities.addEntity({
|
||||||
type: "Model",
|
type: "Model",
|
||||||
modelURL: "https://hifi-public.s3.amazonaws.com/ozan/support/for_eric/whiteboard/whiteboard.fbx",
|
shapeType: "box",
|
||||||
name: "whiteboard",
|
modelURL: modelURL,
|
||||||
|
name: "whiteboard base",
|
||||||
position: center,
|
position: center,
|
||||||
rotation: rotation,
|
rotation: rotation,
|
||||||
script: scriptURL,
|
|
||||||
dimensions: whiteboardDimensions,
|
|
||||||
color: {
|
|
||||||
red: 255,
|
|
||||||
green: 255,
|
|
||||||
blue: 255
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
var colorIndicatorPosition = {
|
||||||
// COLOR INDICATOR BOX
|
x: center.x,
|
||||||
var colorIndicatorDimensions = {
|
y: center.y,
|
||||||
x: whiteboardDimensions.x,
|
z: center.z
|
||||||
y: 0.05,
|
|
||||||
z: 0.02
|
|
||||||
};
|
};
|
||||||
scriptURL = Script.resolvePath("colorIndicatorEntityScript.js");
|
colorIndicatorPosition.y += 1.55;
|
||||||
var colorIndicatorPosition = Vec3.sum(center, {
|
colorIndicatorPosition = Vec3.sum(colorIndicatorPosition, Vec3.multiply(-0.1, Quat.getFront(rotation)));
|
||||||
x: 0,
|
var colorIndicatorBorder = Entities.addEntity({
|
||||||
y: whiteboardDimensions.y / 2 + colorIndicatorDimensions.y / 2,
|
type: "Model",
|
||||||
z: 0
|
|
||||||
});
|
|
||||||
var colorIndicatorBox = Entities.addEntity({
|
|
||||||
type: "Box",
|
|
||||||
name: "Color Indicator",
|
|
||||||
color: colors[0],
|
|
||||||
rotation: rotation,
|
|
||||||
position: colorIndicatorPosition,
|
position: colorIndicatorPosition,
|
||||||
dimensions: colorIndicatorDimensions,
|
modelURL: colorIndicatorBorderModelURL,
|
||||||
script: scriptURL,
|
rotation: rotation,
|
||||||
userData: JSON.stringify({
|
shapeType: "box"
|
||||||
whiteboard: whiteboard
|
|
||||||
})
|
|
||||||
});
|
});
|
||||||
|
|
||||||
Entities.editEntity(whiteboard, {
|
var surfaceCenter = Vec3.sum(center, Vec3.multiply(-0.1, Quat.getFront(rotation)));
|
||||||
|
surfaceCenter.y += 0.6;
|
||||||
|
var drawingSurface = Entities.addEntity({
|
||||||
|
type: "Model",
|
||||||
|
modelURL: surfaceModelURL,
|
||||||
|
shapeType: "box",
|
||||||
|
name: "whiteboard surface",
|
||||||
|
position: surfaceCenter,
|
||||||
|
script: scriptURL,
|
||||||
|
rotation: rotation,
|
||||||
userData: JSON.stringify({
|
userData: JSON.stringify({
|
||||||
color: {
|
color: {
|
||||||
currentColor: colors[0]
|
currentColor: colors[0]
|
||||||
},
|
|
||||||
colorIndicator: colorIndicatorBox
|
|
||||||
})
|
|
||||||
});
|
|
||||||
|
|
||||||
//COLOR BOXES
|
|
||||||
var direction = Quat.getRight(rotation);
|
|
||||||
var colorBoxPosition = Vec3.subtract(center, Vec3.multiply(direction, whiteboardDimensions.x / 2));
|
|
||||||
var colorBoxes = [];
|
|
||||||
var colorSquareDimensions = {
|
|
||||||
x: (whiteboardDimensions.x / 2) / (colors.length - 1),
|
|
||||||
y: 0.1,
|
|
||||||
z: 0.05
|
|
||||||
};
|
|
||||||
colorBoxPosition.y += whiteboardDimensions.y / 2 + colorIndicatorDimensions.y + colorSquareDimensions.y / 2;
|
|
||||||
var spaceBetweenColorBoxes = Vec3.multiply(direction, colorSquareDimensions.x * 2);
|
|
||||||
var scriptURL = Script.resolvePath("colorSelectorEntityScript.js");
|
|
||||||
for (var i = 0; i < colors.length; i++) {
|
|
||||||
var colorBox = Entities.addEntity({
|
|
||||||
type: "Box",
|
|
||||||
name: "Color Selector",
|
|
||||||
position: colorBoxPosition,
|
|
||||||
dimensions: colorSquareDimensions,
|
|
||||||
rotation: rotation,
|
|
||||||
color: colors[i],
|
|
||||||
script: scriptURL,
|
|
||||||
userData: JSON.stringify({
|
|
||||||
whiteboard: whiteboard,
|
|
||||||
colorIndicator: colorIndicatorBox
|
|
||||||
})
|
|
||||||
});
|
|
||||||
colorBoxes.push(colorBox);
|
|
||||||
colorBoxPosition = Vec3.sum(colorBoxPosition, spaceBetweenColorBoxes);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// BLACK BOX
|
|
||||||
var blackBoxDimensions = {
|
|
||||||
x: 0.3,
|
|
||||||
y: 0.3,
|
|
||||||
z: 0.01
|
|
||||||
};
|
|
||||||
|
|
||||||
colorBoxPosition = Vec3.subtract(center, Vec3.multiply(direction, whiteboardDimensions.x / 2 + blackBoxDimensions.x / 2 - 0.01));
|
|
||||||
colorBoxPosition.y += 0.3;
|
|
||||||
var fragShaderURL = Script.resolvePath('blackInk.fs?v1' + Math.random());
|
|
||||||
var blackBox = Entities.addEntity({
|
|
||||||
type: 'Box',
|
|
||||||
name: "Black Color",
|
|
||||||
position: colorBoxPosition,
|
|
||||||
dimensions: blackBoxDimensions,
|
|
||||||
rotation: rotation,
|
|
||||||
color: {
|
|
||||||
red: 0,
|
|
||||||
green: 0,
|
|
||||||
blue: 0
|
|
||||||
},
|
|
||||||
script: scriptURL,
|
|
||||||
userData: JSON.stringify({
|
|
||||||
whiteboard: whiteboard,
|
|
||||||
version: 2,
|
|
||||||
ProceduralEntity: {
|
|
||||||
shaderUrl: fragShaderURL
|
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
var lightPosition = Vec3.sum(center, Vec3.multiply(-3, Quat.getFront(rotation)));
|
||||||
|
var light = Entities.addEntity({
|
||||||
|
type: 'Light',
|
||||||
|
name: 'whiteboard light',
|
||||||
|
position: lightPosition,
|
||||||
|
dimensions: {x: 10, y: 10, z: 10},
|
||||||
|
intensity: 2,
|
||||||
|
color: {red: 255, green: 255, blue: 255}
|
||||||
|
});
|
||||||
|
|
||||||
var eraseBoxDimensions = {
|
var eraserPosition = Vec3.sum(center, {x: 0, y: 2.05, z: 0 });
|
||||||
x: 0.5,
|
eraserPosition = Vec3.sum(eraserPosition, Vec3.multiply(-0.1, rotation));
|
||||||
y: 0.1,
|
|
||||||
z: 0.01
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
var eraseBoxPosition = Vec3.sum(center, Vec3.multiply(direction, whiteboardDimensions.x / 2 + eraseBoxDimensions.x / 2 + 0.01));
|
|
||||||
eraseBoxPosition.y += 0.3;
|
|
||||||
scriptURL = Script.resolvePath("eraseBoardEntityScript.js");
|
scriptURL = Script.resolvePath("eraseBoardEntityScript.js");
|
||||||
var eraseAllText = Entities.addEntity({
|
var eraser = Entities.addEntity({
|
||||||
type: "Text",
|
type: "Model",
|
||||||
position: eraseBoxPosition,
|
modelURL: eraserModelURL,
|
||||||
|
position: eraserPosition,
|
||||||
name: "Eraser",
|
name: "Eraser",
|
||||||
script: scriptURL,
|
script: scriptURL,
|
||||||
rotation: rotation,
|
rotation: rotation,
|
||||||
dimensions: eraseBoxDimensions,
|
|
||||||
backgroundColor: {
|
|
||||||
red: 0,
|
|
||||||
green: 60,
|
|
||||||
blue: 0
|
|
||||||
},
|
|
||||||
textColor: {
|
|
||||||
red: 255,
|
|
||||||
green: 10,
|
|
||||||
blue: 10
|
|
||||||
},
|
|
||||||
text: "ERASE BOARD",
|
|
||||||
lineHeight: 0.07,
|
|
||||||
userData: JSON.stringify({
|
userData: JSON.stringify({
|
||||||
whiteboard: whiteboard
|
whiteboard: drawingSurface
|
||||||
})
|
})
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Script.setTimeout(function() {
|
||||||
|
whiteboardDimensions = Entities.getEntityProperties(whiteboard, "naturalDimensions").naturalDimensions;
|
||||||
|
colorIndicatorBorderDimensions = Entities.getEntityProperties(colorIndicatorBorder, "naturalDimensions").naturalDimensions;
|
||||||
|
setUp();
|
||||||
|
}, 2000)
|
||||||
|
|
||||||
|
|
||||||
|
function setUp() {
|
||||||
|
var blockerPosition = Vec3.sum(center, {x: 0, y: -1, z: 0 });
|
||||||
|
blockerPosition = Vec3.sum(blockerPosition, Vec3.multiply(-1, Quat.getFront(rotation)));
|
||||||
|
blocker = Entities.addEntity({
|
||||||
|
type: "Box",
|
||||||
|
rotation: rotation,
|
||||||
|
position: blockerPosition,
|
||||||
|
dimensions: {x: whiteboardDimensions.x, y: 1, z: 0.1},
|
||||||
|
shapeType: "box",
|
||||||
|
visible: false
|
||||||
|
});
|
||||||
|
|
||||||
|
var eraseModelDimensions = Entities.getEntityProperties(eraser, "naturalDimensions").naturalDimensions;
|
||||||
|
Entities.editEntity(eraser, {dimensions: eraseModelDimensions});
|
||||||
|
Entities.editEntity(colorIndicatorBorder, {dimensions: colorIndicatorBorderDimensions});
|
||||||
|
|
||||||
|
scriptURL = Script.resolvePath("colorIndicatorEntityScript.js");
|
||||||
|
var colorIndicatorPosition = Vec3.sum(center, {
|
||||||
|
x: 0,
|
||||||
|
y: whiteboardDimensions.y / 2 + colorIndicatorBorderDimensions.y / 2,
|
||||||
|
z: 0
|
||||||
|
});
|
||||||
|
colorIndicatorPosition = Vec3.sum(colorIndicatorPosition, Vec3.multiply(-.1, Quat.getFront(rotation)));
|
||||||
|
var colorIndicatorBoxDimensions = Vec3.multiply(colorIndicatorBorderDimensions, 0.9);
|
||||||
|
colorIndicatorBox = Entities.addEntity({
|
||||||
|
type: "Box",
|
||||||
|
name: "Color Indicator",
|
||||||
|
color: colors[0],
|
||||||
|
rotation: rotation,
|
||||||
|
position: colorIndicatorPosition,
|
||||||
|
dimensions: colorIndicatorBoxDimensions,
|
||||||
|
script: scriptURL,
|
||||||
|
userData: JSON.stringify({
|
||||||
|
whiteboard: drawingSurface
|
||||||
|
})
|
||||||
|
});
|
||||||
|
|
||||||
|
Entities.editEntity(drawingSurface, {
|
||||||
|
userData: JSON.stringify({
|
||||||
|
color: {
|
||||||
|
currentColor: colors[0]
|
||||||
|
},
|
||||||
|
colorIndicator: colorIndicatorBox
|
||||||
|
})
|
||||||
|
});
|
||||||
|
|
||||||
|
//COLOR BOXES
|
||||||
|
var direction = Quat.getRight(rotation);
|
||||||
|
var colorBoxPosition = Vec3.subtract(center, Vec3.multiply(direction, whiteboardDimensions.x / 2));
|
||||||
|
var colorSquareDimensions = {
|
||||||
|
x: 0.13,
|
||||||
|
y: 0.13,
|
||||||
|
z: 0.002
|
||||||
|
};
|
||||||
|
|
||||||
|
var palleteDepthOffset = -0.07;
|
||||||
|
var palleteHeightOffset = -0.28;
|
||||||
|
|
||||||
|
colorBoxPosition = Vec3.sum(colorBoxPosition, Vec3.multiply(palleteDepthOffset, Quat.getFront(rotation)));
|
||||||
|
colorBoxPosition.y += palleteHeightOffset;
|
||||||
|
var spaceBetweenColorBoxes = Vec3.multiply(direction, colorSquareDimensions.x * 1.76);
|
||||||
|
var palleteXOffset = Vec3.multiply(direction, 0.43);
|
||||||
|
colorBoxPosition = Vec3.sum(colorBoxPosition, palleteXOffset);
|
||||||
|
var scriptURL = Script.resolvePath("colorSelectorEntityScript.js");
|
||||||
|
for (var i = 0; i < colors.length; i++) {
|
||||||
|
var colorBox = Entities.addEntity({
|
||||||
|
type: "Box",
|
||||||
|
name: "Color Selector",
|
||||||
|
position: colorBoxPosition,
|
||||||
|
dimensions: colorSquareDimensions,
|
||||||
|
rotation: rotation,
|
||||||
|
color: colors[i],
|
||||||
|
script: scriptURL,
|
||||||
|
userData: JSON.stringify({
|
||||||
|
whiteboard: drawingSurface,
|
||||||
|
colorIndicator: colorIndicatorBox
|
||||||
|
})
|
||||||
|
});
|
||||||
|
colorBoxes.push(colorBox);
|
||||||
|
colorBoxPosition = Vec3.sum(colorBoxPosition, spaceBetweenColorBoxes);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
function cleanup() {
|
function cleanup() {
|
||||||
Entities.deleteEntity(whiteboard);
|
Entities.deleteEntity(whiteboard);
|
||||||
Entities.deleteEntity(eraseAllText);
|
Entities.deleteEntity(drawingSurface);
|
||||||
Entities.deleteEntity(blackBox);
|
Entities.deleteEntity(colorIndicatorBorder);
|
||||||
|
Entities.deleteEntity(eraser);
|
||||||
Entities.deleteEntity(colorIndicatorBox);
|
Entities.deleteEntity(colorIndicatorBox);
|
||||||
|
Entities.deleteEntity(blocker);
|
||||||
|
Entities.deleteEntity(light);
|
||||||
colorBoxes.forEach(function(colorBox) {
|
colorBoxes.forEach(function(colorBox) {
|
||||||
Entities.deleteEntity(colorBox);
|
Entities.deleteEntity(colorBox);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Uncomment this line to delete whiteboard and all associated entity on script close
|
// Uncomment this line to delete whiteboard and all associated entity on script close
|
||||||
Script.scriptEnding.connect(cleanup);
|
// Script.scriptEnding.connect(cleanup);
|
|
@ -2,7 +2,12 @@ set(TARGET_NAME interface)
|
||||||
project(${TARGET_NAME})
|
project(${TARGET_NAME})
|
||||||
|
|
||||||
# set a default root dir for each of our optional externals if it was not passed
|
# set a default root dir for each of our optional externals if it was not passed
|
||||||
set(OPTIONAL_EXTERNALS "Faceshift" "LeapMotion" "RtMidi" "RSSDK" "3DConnexionClient" "iViewHMD")
|
set(OPTIONAL_EXTERNALS "LeapMotion" "RtMidi" "RSSDK" "iViewHMD")
|
||||||
|
|
||||||
|
if(WIN32)
|
||||||
|
list(APPEND OPTIONAL_EXTERNALS "3DConnexionClient")
|
||||||
|
endif()
|
||||||
|
|
||||||
foreach(EXTERNAL ${OPTIONAL_EXTERNALS})
|
foreach(EXTERNAL ${OPTIONAL_EXTERNALS})
|
||||||
string(TOUPPER ${EXTERNAL} ${EXTERNAL}_UPPERCASE)
|
string(TOUPPER ${EXTERNAL} ${EXTERNAL}_UPPERCASE)
|
||||||
if (NOT ${${EXTERNAL}_UPPERCASE}_ROOT_DIR)
|
if (NOT ${${EXTERNAL}_UPPERCASE}_ROOT_DIR)
|
||||||
|
@ -102,12 +107,14 @@ link_hifi_libraries(shared octree environment gpu gl procedural model render
|
||||||
render-utils entities-renderer ui auto-updater
|
render-utils entities-renderer ui auto-updater
|
||||||
controllers plugins display-plugins input-plugins )
|
controllers plugins display-plugins input-plugins )
|
||||||
|
|
||||||
|
#fixme find a way to express faceshift as a plugin
|
||||||
target_bullet()
|
target_bullet()
|
||||||
target_glew()
|
target_glew()
|
||||||
target_opengl()
|
target_opengl()
|
||||||
|
|
||||||
|
if (WIN32 OR APPLE)
|
||||||
add_dependency_external_projects(sdl2)
|
target_faceshift()
|
||||||
|
endif()
|
||||||
|
|
||||||
# perform standard include and linking for found externals
|
# perform standard include and linking for found externals
|
||||||
foreach(EXTERNAL ${OPTIONAL_EXTERNALS})
|
foreach(EXTERNAL ${OPTIONAL_EXTERNALS})
|
||||||
|
|
26
interface/external/faceshift/readme.txt
vendored
26
interface/external/faceshift/readme.txt
vendored
|
@ -1,26 +0,0 @@
|
||||||
|
|
||||||
Instructions for adding the Faceshift library to Interface
|
|
||||||
Stephen Birarda, July 18th, 2014
|
|
||||||
|
|
||||||
OS X users: You can also use homebrew to get the Faceshift library by tapping our repo - highfidelity/homebrew-formulas
|
|
||||||
and then calling 'brew install highfidelity/formulas/faceshift'.
|
|
||||||
|
|
||||||
You can download the Faceshift SDK from http://download.faceshift.com/faceshift-network.zip.
|
|
||||||
|
|
||||||
Create a ‘faceshift’ folder under interface/externals.
|
|
||||||
|
|
||||||
You may optionally choose to place this folder in a location outside the repository (so you can re-use with different checkouts and different projects).
|
|
||||||
|
|
||||||
If so our CMake find module expects you to set the ENV variable 'HIFI_LIB_DIR' to a directory containing a subfolder ‘faceshift’ that contains the lib and include folders.
|
|
||||||
|
|
||||||
1. Build a Faceshift static library from the fsbinarystream.cpp file.
|
|
||||||
Windows: Win32 console application; no precompiled header or SDL checks; no ATL or MFC headers; Project Properties, Configuration Type = Static Library (.lib).
|
|
||||||
|
|
||||||
2. Copy the library files to the ‘lib’ folder in your Faceshift folder.
|
|
||||||
OSX: If you build a release version call it libfaceshift.a. The debug version should be called libfaceshiftd.a.
|
|
||||||
Windows: The release and debug versions should be called faceshift.lib and faceshiftd.lib, respectively. Copy them into a ‘Win32’ folder in your ‘lib’ folder.
|
|
||||||
|
|
||||||
3. Copy the fsbinarystream.h header file from the Faceshift SDK into the ‘include’ folder in your Faceshift folder.
|
|
||||||
|
|
||||||
4. Clear your build directory, run cmake and build, and you should be all set.
|
|
||||||
|
|
13
interface/external/sdl2/readme.txt
vendored
13
interface/external/sdl2/readme.txt
vendored
|
@ -1,13 +0,0 @@
|
||||||
|
|
||||||
Instructions for adding the SDL library (SDL2) to Interface
|
|
||||||
David Rowe, 11 Jan 2015
|
|
||||||
|
|
||||||
You can download the SDL development library from https://www.libsdl.org/. Interface has been tested with version 2.0.3.
|
|
||||||
|
|
||||||
1. Copy the include and lib folders into the interface/externals/sdl2 folder.
|
|
||||||
This readme.txt should be there as well.
|
|
||||||
|
|
||||||
You may optionally choose to copy the SDK folders to a location outside the repository (so you can re-use with different checkouts and different projects).
|
|
||||||
If so our CMake find module expects you to set the ENV variable 'HIFI_LIB_DIR' to a directory containing a subfolder 'sdl2' that contains the two folders mentioned above.
|
|
||||||
|
|
||||||
2. Clear your build directory, run cmake and build, and you should be all set.
|
|
10
interface/external/sixense/readme.txt
vendored
10
interface/external/sixense/readme.txt
vendored
|
@ -1,10 +0,0 @@
|
||||||
|
|
||||||
Instructions for adding the Sixense driver to Interface
|
|
||||||
Andrzej Kapolka, November 18, 2013
|
|
||||||
|
|
||||||
1. Copy the Sixense sdk folders (bin, include, lib, and samples) into the interface/external/Sixense folder. This readme.txt should be there as well.
|
|
||||||
|
|
||||||
You may optionally choose to copy the SDK folders to a location outside the repository (so you can re-use with different checkouts and different projects).
|
|
||||||
If so our CMake find module expects you to set the ENV variable 'HIFI_LIB_DIR' to a directory containing a subfolder 'sixense' that contains the folders mentioned above.
|
|
||||||
|
|
||||||
3. Delete your build directory, run cmake and build, and you should be all set.
|
|
|
@ -197,7 +197,7 @@
|
||||||
"id": "rightHandOpen",
|
"id": "rightHandOpen",
|
||||||
"type": "clip",
|
"type": "clip",
|
||||||
"data": {
|
"data": {
|
||||||
"url": "http://hifi-public.s3.amazonaws.com/ozan/anim/hand_anims/point_right_hand.fbx",
|
"url": "https://hifi-public.s3.amazonaws.com/ozan/anim/grab/grab_right.fbx",
|
||||||
"startFrame": 0.0,
|
"startFrame": 0.0,
|
||||||
"endFrame": 0.0,
|
"endFrame": 0.0,
|
||||||
"timeScale": 1.0,
|
"timeScale": 1.0,
|
||||||
|
@ -209,9 +209,9 @@
|
||||||
"id": "rightHandClose",
|
"id": "rightHandClose",
|
||||||
"type": "clip",
|
"type": "clip",
|
||||||
"data": {
|
"data": {
|
||||||
"url": "http://hifi-public.s3.amazonaws.com/ozan/anim/squeeze_hands/right_hand_anim.fbx",
|
"url": "https://hifi-public.s3.amazonaws.com/ozan/anim/grab/grab_right.fbx",
|
||||||
"startFrame": 15.0,
|
"startFrame": 10.0,
|
||||||
"endFrame": 15.0,
|
"endFrame": 10.0,
|
||||||
"timeScale": 1.0,
|
"timeScale": 1.0,
|
||||||
"loopFlag": true
|
"loopFlag": true
|
||||||
},
|
},
|
||||||
|
@ -346,7 +346,7 @@
|
||||||
"id": "leftHandOpen",
|
"id": "leftHandOpen",
|
||||||
"type": "clip",
|
"type": "clip",
|
||||||
"data": {
|
"data": {
|
||||||
"url": "http://hifi-public.s3.amazonaws.com/ozan/anim/hand_anims/point_left_hand.fbx",
|
"url": "https://hifi-public.s3.amazonaws.com/ozan/anim/grab/grab_left.fbx",
|
||||||
"startFrame": 0.0,
|
"startFrame": 0.0,
|
||||||
"endFrame": 0.0,
|
"endFrame": 0.0,
|
||||||
"timeScale": 1.0,
|
"timeScale": 1.0,
|
||||||
|
@ -358,9 +358,9 @@
|
||||||
"id": "leftHandClose",
|
"id": "leftHandClose",
|
||||||
"type": "clip",
|
"type": "clip",
|
||||||
"data": {
|
"data": {
|
||||||
"url": "http://hifi-public.s3.amazonaws.com/ozan/anim/squeeze_hands/left_hand_anim.fbx",
|
"url": "https://hifi-public.s3.amazonaws.com/ozan/anim/grab/grab_left.fbx",
|
||||||
"startFrame": 15.0,
|
"startFrame": 10.0,
|
||||||
"endFrame": 15.0,
|
"endFrame": 10.0,
|
||||||
"timeScale": 1.0,
|
"timeScale": 1.0,
|
||||||
"loopFlag": true
|
"loopFlag": true
|
||||||
},
|
},
|
||||||
|
|
|
@ -50,7 +50,7 @@ AvatarSharedPointer AvatarHashMap::addAvatar(const QUuid& sessionUUID, const QWe
|
||||||
avatar->setOwningAvatarMixer(mixerWeakPointer);
|
avatar->setOwningAvatarMixer(mixerWeakPointer);
|
||||||
QWriteLocker locker(&_hashLock);
|
QWriteLocker locker(&_hashLock);
|
||||||
_avatarHash.insert(sessionUUID, avatar);
|
_avatarHash.insert(sessionUUID, avatar);
|
||||||
|
emit avatarAddedEvent(sessionUUID);
|
||||||
return avatar;
|
return avatar;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -137,13 +137,16 @@ void AvatarHashMap::processKillAvatar(QSharedPointer<NLPacket> packet, SharedNod
|
||||||
// read the node id
|
// read the node id
|
||||||
QUuid sessionUUID = QUuid::fromRfc4122(packet->readWithoutCopy(NUM_BYTES_RFC4122_UUID));
|
QUuid sessionUUID = QUuid::fromRfc4122(packet->readWithoutCopy(NUM_BYTES_RFC4122_UUID));
|
||||||
removeAvatar(sessionUUID);
|
removeAvatar(sessionUUID);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void AvatarHashMap::removeAvatar(const QUuid& sessionUUID) {
|
void AvatarHashMap::removeAvatar(const QUuid& sessionUUID) {
|
||||||
QWriteLocker locker(&_hashLock);
|
QWriteLocker locker(&_hashLock);
|
||||||
_avatarHash.remove(sessionUUID);
|
_avatarHash.remove(sessionUUID);
|
||||||
|
emit avatarRemovedEvent(sessionUUID);
|
||||||
}
|
}
|
||||||
|
|
||||||
void AvatarHashMap::sessionUUIDChanged(const QUuid& sessionUUID, const QUuid& oldUUID) {
|
void AvatarHashMap::sessionUUIDChanged(const QUuid& sessionUUID, const QUuid& oldUUID) {
|
||||||
_lastOwnerSessionUUID = oldUUID;
|
_lastOwnerSessionUUID = oldUUID;
|
||||||
|
emit avatarSessionChangedEvent(sessionUUID, oldUUID);
|
||||||
}
|
}
|
||||||
|
|
|
@ -34,6 +34,11 @@ public:
|
||||||
void withAvatarHash(std::function<void(const AvatarHash& hash)>);
|
void withAvatarHash(std::function<void(const AvatarHash& hash)>);
|
||||||
int size() { return _avatarHash.size(); }
|
int size() { return _avatarHash.size(); }
|
||||||
|
|
||||||
|
signals:
|
||||||
|
void avatarAddedEvent(const QUuid& sessionUUID);
|
||||||
|
void avatarRemovedEvent(const QUuid& sessionUUID);
|
||||||
|
void avatarSessionChangedEvent(const QUuid& sessionUUID,const QUuid& oldUUID);
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
bool isAvatarInRange(const glm::vec3 & position, const float range);
|
bool isAvatarInRange(const glm::vec3 & position, const float range);
|
||||||
|
|
||||||
|
|
|
@ -44,8 +44,7 @@ bool GlWindow::makeCurrent() {
|
||||||
qDebug() << "GL Renderer: " << QString((const char*) glGetString(GL_RENDERER));
|
qDebug() << "GL Renderer: " << QString((const char*) glGetString(GL_RENDERER));
|
||||||
});
|
});
|
||||||
|
|
||||||
QOpenGLContext * currentContext = QOpenGLContext::currentContext();
|
Q_ASSERT(_context == QOpenGLContext::currentContext());
|
||||||
Q_ASSERT(_context == currentContext);
|
|
||||||
|
|
||||||
return makeCurrentResult;
|
return makeCurrentResult;
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,55 +11,5 @@ if (WIN32)
|
||||||
target_link_libraries(${TARGET_NAME} ${OPENVR_LIBRARIES})
|
target_link_libraries(${TARGET_NAME} ${OPENVR_LIBRARIES})
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
#add_dependency_external_projects(Sixense)
|
target_sdl2()
|
||||||
#find_package(Sixense REQUIRED)
|
target_sixense()
|
||||||
#target_include_directories(${TARGET_NAME} PRIVATE ${SIXENSE_INCLUDE_DIRS})
|
|
||||||
#target_link_libraries(${TARGET_NAME} ${SIXENSE_LIBRARIES})
|
|
||||||
|
|
||||||
# set a default root dir for each of our optional externals if it was not passed
|
|
||||||
set(OPTIONAL_EXTERNALS "SDL2" "Sixense")
|
|
||||||
foreach(EXTERNAL ${OPTIONAL_EXTERNALS})
|
|
||||||
string(TOUPPER ${EXTERNAL} ${EXTERNAL}_UPPERCASE)
|
|
||||||
if (NOT ${${EXTERNAL}_UPPERCASE}_ROOT_DIR)
|
|
||||||
string(TOLOWER ${EXTERNAL} ${EXTERNAL}_LOWERCASE)
|
|
||||||
set(${${EXTERNAL}_UPPERCASE}_ROOT_DIR "${CMAKE_SOURCE_DIR}/interface/external/${${EXTERNAL}_LOWERCASE}")
|
|
||||||
endif ()
|
|
||||||
endforeach()
|
|
||||||
|
|
||||||
# perform standard include and linking for found externals
|
|
||||||
foreach(EXTERNAL ${OPTIONAL_EXTERNALS})
|
|
||||||
|
|
||||||
if (${${EXTERNAL}_UPPERCASE}_REQUIRED)
|
|
||||||
find_package(${EXTERNAL} REQUIRED)
|
|
||||||
else ()
|
|
||||||
find_package(${EXTERNAL})
|
|
||||||
endif ()
|
|
||||||
|
|
||||||
if (${${EXTERNAL}_UPPERCASE}_FOUND AND NOT DISABLE_${${EXTERNAL}_UPPERCASE})
|
|
||||||
add_definitions(-DHAVE_${${EXTERNAL}_UPPERCASE})
|
|
||||||
|
|
||||||
# include the library directories (ignoring warnings)
|
|
||||||
if (NOT ${${EXTERNAL}_UPPERCASE}_INCLUDE_DIRS)
|
|
||||||
set(${${EXTERNAL}_UPPERCASE}_INCLUDE_DIRS ${${${EXTERNAL}_UPPERCASE}_INCLUDE_DIR})
|
|
||||||
endif ()
|
|
||||||
|
|
||||||
include_directories(SYSTEM ${${${EXTERNAL}_UPPERCASE}_INCLUDE_DIRS})
|
|
||||||
|
|
||||||
# perform the system include hack for OS X to ignore warnings
|
|
||||||
if (APPLE)
|
|
||||||
foreach(EXTERNAL_INCLUDE_DIR ${${${EXTERNAL}_UPPERCASE}_INCLUDE_DIRS})
|
|
||||||
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -isystem ${EXTERNAL_INCLUDE_DIR}")
|
|
||||||
endforeach()
|
|
||||||
endif ()
|
|
||||||
|
|
||||||
if (NOT ${${EXTERNAL}_UPPERCASE}_LIBRARIES)
|
|
||||||
set(${${EXTERNAL}_UPPERCASE}_LIBRARIES ${${${EXTERNAL}_UPPERCASE}_LIBRARY})
|
|
||||||
endif ()
|
|
||||||
|
|
||||||
if (NOT APPLE OR NOT ${${EXTERNAL}_UPPERCASE} MATCHES "SIXENSE")
|
|
||||||
target_link_libraries(${TARGET_NAME} ${${${EXTERNAL}_UPPERCASE}_LIBRARIES})
|
|
||||||
elseif (APPLE AND NOT INSTALLER_BUILD)
|
|
||||||
add_definitions(-DSIXENSE_LIB_FILENAME=\"${${${EXTERNAL}_UPPERCASE}_LIBRARY_RELEASE}\")
|
|
||||||
endif ()
|
|
||||||
endif ()
|
|
||||||
endforeach()
|
|
||||||
|
|
|
@ -89,7 +89,6 @@ AssetRequest* AssetClient::createRequest(const QString& hash, const QString& ext
|
||||||
|
|
||||||
// Move to the AssetClient thread in case we are not currently on that thread (which will usually be the case)
|
// Move to the AssetClient thread in case we are not currently on that thread (which will usually be the case)
|
||||||
request->moveToThread(thread());
|
request->moveToThread(thread());
|
||||||
request->setParent(this);
|
|
||||||
|
|
||||||
return request;
|
return request;
|
||||||
} else {
|
} else {
|
||||||
|
@ -105,7 +104,6 @@ AssetUpload* AssetClient::createUpload(const QString& filename) {
|
||||||
auto upload = new AssetUpload(filename);
|
auto upload = new AssetUpload(filename);
|
||||||
|
|
||||||
upload->moveToThread(thread());
|
upload->moveToThread(thread());
|
||||||
upload->setParent(this);
|
|
||||||
|
|
||||||
return upload;
|
return upload;
|
||||||
} else {
|
} else {
|
||||||
|
@ -118,7 +116,6 @@ AssetUpload* AssetClient::createUpload(const QByteArray& data, const QString& ex
|
||||||
auto upload = new AssetUpload(data, extension);
|
auto upload = new AssetUpload(data, extension);
|
||||||
|
|
||||||
upload->moveToThread(thread());
|
upload->moveToThread(thread());
|
||||||
upload->setParent(this);
|
|
||||||
|
|
||||||
return upload;
|
return upload;
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -14,11 +14,11 @@
|
||||||
#include "PhysicsCollisionGroups.h"
|
#include "PhysicsCollisionGroups.h"
|
||||||
|
|
||||||
bool CharacterController::needsRemoval() const {
|
bool CharacterController::needsRemoval() const {
|
||||||
return (bool)(_pendingFlags & PENDING_FLAG_REMOVE_FROM_SIMULATION);
|
return ((_pendingFlags & PENDING_FLAG_REMOVE_FROM_SIMULATION) == PENDING_FLAG_REMOVE_FROM_SIMULATION);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CharacterController::needsAddition() const {
|
bool CharacterController::needsAddition() const {
|
||||||
return (bool)(_pendingFlags & PENDING_FLAG_ADD_TO_SIMULATION);
|
return ((_pendingFlags & PENDING_FLAG_ADD_TO_SIMULATION) == PENDING_FLAG_ADD_TO_SIMULATION);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CharacterController::setDynamicsWorld(btDynamicsWorld* world) {
|
void CharacterController::setDynamicsWorld(btDynamicsWorld* world) {
|
||||||
|
|
|
@ -241,7 +241,7 @@ void PhysicsEngine::stepSimulation() {
|
||||||
float timeStep = btMin(dt, MAX_TIMESTEP);
|
float timeStep = btMin(dt, MAX_TIMESTEP);
|
||||||
|
|
||||||
if (_myAvatarController) {
|
if (_myAvatarController) {
|
||||||
// ADEBUG TODO: move this stuff outside and in front of stepSimulation, because
|
// ADEBUG TODO: move this stuff outside and in front of stepSimulation, because
|
||||||
// the updateShapeIfNecessary() call needs info from MyAvatar and should
|
// the updateShapeIfNecessary() call needs info from MyAvatar and should
|
||||||
// be done on the main thread during the pre-simulation stuff
|
// be done on the main thread during the pre-simulation stuff
|
||||||
if (_myAvatarController->needsRemoval()) {
|
if (_myAvatarController->needsRemoval()) {
|
||||||
|
@ -263,7 +263,8 @@ void PhysicsEngine::stepSimulation() {
|
||||||
updateContactMap();
|
updateContactMap();
|
||||||
};
|
};
|
||||||
|
|
||||||
int numSubsteps = _dynamicsWorld->stepSimulation(timeStep, PHYSICS_ENGINE_MAX_NUM_SUBSTEPS, PHYSICS_ENGINE_FIXED_SUBSTEP, onSubStep);
|
int numSubsteps = _dynamicsWorld->stepSimulationWithSubstepCallback(timeStep, PHYSICS_ENGINE_MAX_NUM_SUBSTEPS,
|
||||||
|
PHYSICS_ENGINE_FIXED_SUBSTEP, onSubStep);
|
||||||
if (numSubsteps > 0) {
|
if (numSubsteps > 0) {
|
||||||
BT_PROFILE("postSimulation");
|
BT_PROFILE("postSimulation");
|
||||||
_numSubsteps += (uint32_t)numSubsteps;
|
_numSubsteps += (uint32_t)numSubsteps;
|
||||||
|
|
|
@ -27,8 +27,9 @@ ThreadSafeDynamicsWorld::ThreadSafeDynamicsWorld(
|
||||||
: btDiscreteDynamicsWorld(dispatcher, pairCache, constraintSolver, collisionConfiguration) {
|
: btDiscreteDynamicsWorld(dispatcher, pairCache, constraintSolver, collisionConfiguration) {
|
||||||
}
|
}
|
||||||
|
|
||||||
int ThreadSafeDynamicsWorld::stepSimulation( btScalar timeStep, int maxSubSteps, btScalar fixedTimeStep, SubStepCallback onSubStep) {
|
int ThreadSafeDynamicsWorld::stepSimulationWithSubstepCallback(btScalar timeStep, int maxSubSteps,
|
||||||
BT_PROFILE("stepSimulation");
|
btScalar fixedTimeStep, SubStepCallback onSubStep) {
|
||||||
|
BT_PROFILE("stepSimulationWithSubstepCallback");
|
||||||
int subSteps = 0;
|
int subSteps = 0;
|
||||||
if (maxSubSteps) {
|
if (maxSubSteps) {
|
||||||
//fixed timestep with interpolation
|
//fixed timestep with interpolation
|
||||||
|
|
|
@ -37,8 +37,9 @@ public:
|
||||||
btConstraintSolver* constraintSolver,
|
btConstraintSolver* constraintSolver,
|
||||||
btCollisionConfiguration* collisionConfiguration);
|
btCollisionConfiguration* collisionConfiguration);
|
||||||
|
|
||||||
// virtual overrides from btDiscreteDynamicsWorld
|
int stepSimulationWithSubstepCallback(btScalar timeStep, int maxSubSteps = 1,
|
||||||
int stepSimulation( btScalar timeStep, int maxSubSteps=1, btScalar fixedTimeStep=btScalar(1.)/btScalar(60.), SubStepCallback onSubStep = []() { });
|
btScalar fixedTimeStep = btScalar(1.)/btScalar(60.),
|
||||||
|
SubStepCallback onSubStep = []() { });
|
||||||
void synchronizeMotionStates();
|
void synchronizeMotionStates();
|
||||||
|
|
||||||
// btDiscreteDynamicsWorld::m_localTime is the portion of real-time that has not yet been simulated
|
// btDiscreteDynamicsWorld::m_localTime is the portion of real-time that has not yet been simulated
|
||||||
|
|
|
@ -23,6 +23,25 @@
|
||||||
/// Scriptable interface a Vec3ernion helper class object. Used exclusively in the JavaScript API
|
/// Scriptable interface a Vec3ernion helper class object. Used exclusively in the JavaScript API
|
||||||
class Vec3 : public QObject {
|
class Vec3 : public QObject {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
Q_PROPERTY(glm::vec3 UNIT_X READ UNIT_X CONSTANT)
|
||||||
|
Q_PROPERTY(glm::vec3 UNIT_Y READ UNIT_Y CONSTANT)
|
||||||
|
Q_PROPERTY(glm::vec3 UNIT_Z READ UNIT_Z CONSTANT)
|
||||||
|
Q_PROPERTY(glm::vec3 UNIT_NEG_X READ UNIT_NEG_X CONSTANT)
|
||||||
|
Q_PROPERTY(glm::vec3 UNIT_NEG_Y READ UNIT_NEG_Y CONSTANT)
|
||||||
|
Q_PROPERTY(glm::vec3 UNIT_NEG_Z READ UNIT_NEG_Z CONSTANT)
|
||||||
|
Q_PROPERTY(glm::vec3 UNIT_XY READ UNIT_XY CONSTANT)
|
||||||
|
Q_PROPERTY(glm::vec3 UNIT_XZ READ UNIT_XZ CONSTANT)
|
||||||
|
Q_PROPERTY(glm::vec3 UNIT_YZ READ UNIT_YZ CONSTANT)
|
||||||
|
Q_PROPERTY(glm::vec3 UNIT_XYZ READ UNIT_XYZ CONSTANT)
|
||||||
|
Q_PROPERTY(glm::vec3 FLOAT_MAX READ FLOAT_MAX CONSTANT)
|
||||||
|
Q_PROPERTY(glm::vec3 FLOAT_MIN READ FLOAT_MIN CONSTANT)
|
||||||
|
Q_PROPERTY(glm::vec3 ZERO READ ZERO CONSTANT)
|
||||||
|
Q_PROPERTY(glm::vec3 ONE READ ONE CONSTANT)
|
||||||
|
Q_PROPERTY(glm::vec3 TWO READ TWO CONSTANT)
|
||||||
|
Q_PROPERTY(glm::vec3 HALF READ HALF CONSTANT)
|
||||||
|
Q_PROPERTY(glm::vec3 RIGHT READ RIGHT CONSTANT)
|
||||||
|
Q_PROPERTY(glm::vec3 UP READ UP CONSTANT)
|
||||||
|
Q_PROPERTY(glm::vec3 FRONT READ FRONT CONSTANT)
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
glm::vec3 reflect(const glm::vec3& v1, const glm::vec3& v2) { return glm::reflect(v1, v2); }
|
glm::vec3 reflect(const glm::vec3& v1, const glm::vec3& v2) { return glm::reflect(v1, v2); }
|
||||||
|
@ -30,6 +49,7 @@ public slots:
|
||||||
float dot(const glm::vec3& v1, const glm::vec3& v2) { return glm::dot(v1, v2); }
|
float dot(const glm::vec3& v1, const glm::vec3& v2) { return glm::dot(v1, v2); }
|
||||||
glm::vec3 multiply(const glm::vec3& v1, float f) { return v1 * f; }
|
glm::vec3 multiply(const glm::vec3& v1, float f) { return v1 * f; }
|
||||||
glm::vec3 multiply(float f, const glm::vec3& v1) { return v1 * f; }
|
glm::vec3 multiply(float f, const glm::vec3& v1) { return v1 * f; }
|
||||||
|
glm::vec3 multiplyVbyV(const glm::vec3& v1, const glm::vec3& v2) { return v1 * v2; }
|
||||||
glm::vec3 multiplyQbyV(const glm::quat& q, const glm::vec3& v) { return q * v; }
|
glm::vec3 multiplyQbyV(const glm::quat& q, const glm::vec3& v) { return q * v; }
|
||||||
glm::vec3 sum(const glm::vec3& v1, const glm::vec3& v2) { return v1 + v2; }
|
glm::vec3 sum(const glm::vec3& v1, const glm::vec3& v2) { return v1 + v2; }
|
||||||
glm::vec3 subtract(const glm::vec3& v1, const glm::vec3& v2) { return v1 - v2; }
|
glm::vec3 subtract(const glm::vec3& v1, const glm::vec3& v2) { return v1 - v2; }
|
||||||
|
@ -45,6 +65,8 @@ public slots:
|
||||||
glm::vec3 toPolar(const glm::vec3& v);
|
glm::vec3 toPolar(const glm::vec3& v);
|
||||||
glm::vec3 fromPolar(const glm::vec3& polar);
|
glm::vec3 fromPolar(const glm::vec3& polar);
|
||||||
glm::vec3 fromPolar(float elevation, float azimuth);
|
glm::vec3 fromPolar(float elevation, float azimuth);
|
||||||
|
|
||||||
|
private:
|
||||||
const glm::vec3& UNIT_X() { return Vectors::UNIT_X; }
|
const glm::vec3& UNIT_X() { return Vectors::UNIT_X; }
|
||||||
const glm::vec3& UNIT_Y() { return Vectors::UNIT_Y; }
|
const glm::vec3& UNIT_Y() { return Vectors::UNIT_Y; }
|
||||||
const glm::vec3& UNIT_Z() { return Vectors::UNIT_Z; }
|
const glm::vec3& UNIT_Z() { return Vectors::UNIT_Z; }
|
||||||
|
|
|
@ -113,6 +113,7 @@ void VrMenu::addMenu(QMenu* menu) {
|
||||||
Q_ARG(QVariant, QVariant::fromValue(qmlParent)),
|
Q_ARG(QVariant, QVariant::fromValue(qmlParent)),
|
||||||
Q_ARG(QVariant, QVariant::fromValue(menu->title())));
|
Q_ARG(QVariant, QVariant::fromValue(menu->title())));
|
||||||
Q_ASSERT(invokeResult);
|
Q_ASSERT(invokeResult);
|
||||||
|
Q_UNUSED(invokeResult); // FIXME - apparently we haven't upgraded the Qt on our unix Jenkins environments to 5.5.x
|
||||||
QObject* result = returnedValue.value<QObject*>();
|
QObject* result = returnedValue.value<QObject*>();
|
||||||
Q_ASSERT(result);
|
Q_ASSERT(result);
|
||||||
|
|
||||||
|
@ -153,6 +154,7 @@ void VrMenu::addAction(QMenu* menu, QAction* action) {
|
||||||
Q_ARG(QVariant, QVariant::fromValue(menuQml)),
|
Q_ARG(QVariant, QVariant::fromValue(menuQml)),
|
||||||
Q_ARG(QVariant, QVariant::fromValue(action->text())));
|
Q_ARG(QVariant, QVariant::fromValue(action->text())));
|
||||||
Q_ASSERT(invokeResult);
|
Q_ASSERT(invokeResult);
|
||||||
|
Q_UNUSED(invokeResult); // FIXME - apparently we haven't upgraded the Qt on our unix Jenkins environments to 5.5.x
|
||||||
QObject* result = returnedValue.value<QObject*>();
|
QObject* result = returnedValue.value<QObject*>();
|
||||||
Q_ASSERT(result);
|
Q_ASSERT(result);
|
||||||
// Bind the QML and Widget together
|
// Bind the QML and Widget together
|
||||||
|
@ -174,6 +176,7 @@ void VrMenu::insertAction(QAction* before, QAction* action) {
|
||||||
Q_ARG(QVariant, QVariant::fromValue(beforeQml)),
|
Q_ARG(QVariant, QVariant::fromValue(beforeQml)),
|
||||||
Q_ARG(QVariant, QVariant::fromValue(action->text())));
|
Q_ARG(QVariant, QVariant::fromValue(action->text())));
|
||||||
Q_ASSERT(invokeResult);
|
Q_ASSERT(invokeResult);
|
||||||
|
Q_UNUSED(invokeResult); // FIXME - apparently we haven't upgraded the Qt on our unix Jenkins environments to 5.5.x
|
||||||
QObject* result = returnedValue.value<QObject*>();
|
QObject* result = returnedValue.value<QObject*>();
|
||||||
Q_ASSERT(result);
|
Q_ASSERT(result);
|
||||||
bindActionToQmlAction(result, action);
|
bindActionToQmlAction(result, action);
|
||||||
|
@ -192,4 +195,5 @@ void VrMenu::removeAction(QAction* action) {
|
||||||
Q_ARG(QVariant, QVariant::fromValue(menu)),
|
Q_ARG(QVariant, QVariant::fromValue(menu)),
|
||||||
Q_ARG(QVariant, QVariant::fromValue(item)));
|
Q_ARG(QVariant, QVariant::fromValue(item)));
|
||||||
Q_ASSERT(invokeResult);
|
Q_ASSERT(invokeResult);
|
||||||
|
Q_UNUSED(invokeResult); // FIXME - apparently we haven't upgraded the Qt on our unix Jenkins environments to 5.5.x
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue