From d7b3686364b0995d690cb67c72e74c1b88947b38 Mon Sep 17 00:00:00 2001 From: SamGondelman Date: Tue, 22 Aug 2017 17:37:51 -0700 Subject: [PATCH] include noncollidable entities --- interface/src/Application.cpp | 4 +++- interface/src/raypick/RayPick.h | 6 +++--- interface/src/raypick/RayPickManager.cpp | 12 ++++++------ scripts/system/controllers/handControllerGrab.js | 4 ++-- 4 files changed, 14 insertions(+), 12 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 8d7892c4cc..d3b547a54c 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -1736,7 +1736,9 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo connect(&_myCamera, &Camera::modeUpdated, this, &Application::cameraModeChanged); // Setup the mouse ray pick and related operators - DependencyManager::get()->setMouseRayPickID(_rayPickManager.createRayPick(RayPickFilter(RayPickFilter::PICK_ENTITIES), 0.0f, true)); + DependencyManager::get()->setMouseRayPickID(_rayPickManager.createRayPick( + RayPickFilter(DependencyManager::get()->PICK_ENTITIES() | DependencyManager::get()->PICK_INCLUDE_NONCOLLIDABLE()), + 0.0f, true)); DependencyManager::get()->setMouseRayPickResultOperator([&](QUuid rayPickID) { RayToEntityIntersectionResult entityResult; RayPickResult result = _rayPickManager.getPrevRayPickResult(rayPickID); diff --git a/interface/src/raypick/RayPick.h b/interface/src/raypick/RayPick.h index 17969fd9a6..188779bb83 100644 --- a/interface/src/raypick/RayPick.h +++ b/interface/src/raypick/RayPick.h @@ -47,6 +47,8 @@ public: bool operator== (const RayPickFilter& rhs) const { return _flags == rhs._flags; } bool operator!= (const RayPickFilter& rhs) const { return _flags != rhs._flags; } + void setFlag(FlagBit flag, bool value) { _flags[flag] = value; } + bool doesPickNothing() const { return _flags[PICK_NOTHING]; } bool doesPickEntities() const { return _flags[PICK_ENTITIES]; } bool doesPickOverlays() const { return _flags[PICK_OVERLAYS]; } @@ -102,8 +104,7 @@ public: bool isEnabled() { return _enabled; } const RayPickResult& getPrevRayPickResult() { return _prevResult; } - void setPrecisionPicking(bool precisionPicking) { _precisionPicking = precisionPicking; } - bool doesPrecisionPicking() { return _precisionPicking; } + void setPrecisionPicking(bool precisionPicking) { _filter.setFlag(RayPickFilter::PICK_COURSE, !precisionPicking); } void setRayPickResult(const RayPickResult& rayPickResult) { _prevResult = rayPickResult; } @@ -126,7 +127,6 @@ private: bool _enabled; RayPickResult _prevResult; - bool _precisionPicking { true }; QVector _ignoreEntities; QVector _includeEntities; QVector _ignoreOverlays; diff --git a/interface/src/raypick/RayPickManager.cpp b/interface/src/raypick/RayPickManager.cpp index 971b08c82e..1ec8efc331 100644 --- a/interface/src/raypick/RayPickManager.cpp +++ b/interface/src/raypick/RayPickManager.cpp @@ -64,11 +64,11 @@ void RayPickManager::update() { RayToEntityIntersectionResult entityRes; bool fromCache = true; bool invisible = rayPick->getFilter().doesPickInvisible(); - bool noncollidable = rayPick->getFilter().doesPickNonCollidable(); + bool nonCollidable = rayPick->getFilter().doesPickNonCollidable(); RayPickFilter::Flags entityMask = rayPick->getFilter().getEntityFlags(); if (!checkAndCompareCachedResults(rayKey, results, res, entityMask)) { - entityRes = DependencyManager::get()->findRayIntersectionVector(ray, rayPick->doesPrecisionPicking(), - rayPick->getIncludeEntites(), rayPick->getIgnoreEntites(), !invisible, !noncollidable); + entityRes = DependencyManager::get()->findRayIntersectionVector(ray, !rayPick->getFilter().doesPickCourse(), + rayPick->getIncludeEntites(), rayPick->getIgnoreEntites(), !invisible, !nonCollidable); fromCache = false; } @@ -82,11 +82,11 @@ void RayPickManager::update() { RayToOverlayIntersectionResult overlayRes; bool fromCache = true; bool invisible = rayPick->getFilter().doesPickInvisible(); - bool noncollidable = rayPick->getFilter().doesPickNonCollidable(); + bool nonCollidable = rayPick->getFilter().doesPickNonCollidable(); RayPickFilter::Flags overlayMask = rayPick->getFilter().getOverlayFlags(); if (!checkAndCompareCachedResults(rayKey, results, res, overlayMask)) { - overlayRes = qApp->getOverlays().findRayIntersectionVector(ray, rayPick->doesPrecisionPicking(), - rayPick->getIncludeOverlays(), rayPick->getIgnoreOverlays(), !invisible, !noncollidable); + overlayRes = qApp->getOverlays().findRayIntersectionVector(ray, !rayPick->getFilter().doesPickCourse(), + rayPick->getIncludeOverlays(), rayPick->getIgnoreOverlays(), !invisible, !nonCollidable); fromCache = false; } diff --git a/scripts/system/controllers/handControllerGrab.js b/scripts/system/controllers/handControllerGrab.js index 9318873f64..f6eec7ab76 100644 --- a/scripts/system/controllers/handControllerGrab.js +++ b/scripts/system/controllers/handControllerGrab.js @@ -1182,7 +1182,7 @@ function MyController(hand) { this.fullEnd = fullEnd; this.laserPointer = LaserPointers.createLaserPointer({ joint: (hand == RIGHT_HAND) ? "_CAMERA_RELATIVE_CONTROLLER_RIGHTHAND" : "_CAMERA_RELATIVE_CONTROLLER_LEFTHAND", - filter: RayPick.PICK_ENTITIES | RayPick.PICK_OVERLAYS, + filter: RayPick.PICK_ENTITIES | RayPick.PICK_OVERLAYS | RayPick.PICK_INCLUDE_NONCOLLIDABLE, maxDistance: PICK_MAX_DISTANCE, posOffset: getGrabPointSphereOffset(this.handToController()), renderStates: renderStates, @@ -1191,7 +1191,7 @@ function MyController(hand) { }); this.headLaserPointer = LaserPointers.createLaserPointer({ joint: "Avatar", - filter: RayPick.PICK_ENTITIES | RayPick.PICK_OVERLAYS, + filter: RayPick.PICK_ENTITIES | RayPick.PICK_OVERLAYS | RayPick.PICK_INCLUDE_NONCOLLIDABLE, maxDistance: PICK_MAX_DISTANCE, renderStates: headRenderStates, faceAvatar: true,