From 5be945715f584cfa8ad9f2547f9e933f805f39be Mon Sep 17 00:00:00 2001 From: David Rowe <david@ctrlaltstudio.com> Date: Fri, 3 Aug 2018 08:22:36 +1200 Subject: [PATCH] Include the teleporter target in the occlusion --- interface/src/raypick/PathPointer.cpp | 17 ++++++++++++++++- interface/src/raypick/PathPointer.h | 2 ++ .../src/raypick/PointerScriptingInterface.cpp | 4 ++++ .../src/raypick/PointerScriptingInterface.h | 7 +++++++ interface/src/raypick/StylusPointer.cpp | 8 +++++++- interface/src/raypick/StylusPointer.h | 2 ++ libraries/pointers/src/Pointer.h | 2 ++ libraries/pointers/src/PointerManager.cpp | 11 ++++++++++- libraries/pointers/src/PointerManager.h | 2 ++ .../controllers/controllerModules/teleport.js | 11 +++++++++++ 10 files changed, 63 insertions(+), 3 deletions(-) diff --git a/interface/src/raypick/PathPointer.cpp b/interface/src/raypick/PathPointer.cpp index 685611d77b..d0f66cd240 100644 --- a/interface/src/raypick/PathPointer.cpp +++ b/interface/src/raypick/PathPointer.cpp @@ -350,4 +350,19 @@ glm::vec2 PathPointer::findPos2D(const PickedObject& pickedObject, const glm::ve default: return glm::vec2(NAN); } -} \ No newline at end of file +} + +QVector<QUuid> PathPointer::getOverlayIDs() { + QVector<QUuid> result; + for (auto& state : _renderStates) { + QUuid uuid = state.second->getStartID(); + if (!uuid.isNull()) { + result.append(uuid); + } + uuid = state.second->getEndID(); + if (!uuid.isNull()) { + result.append(uuid); + } + } + return result; +} diff --git a/interface/src/raypick/PathPointer.h b/interface/src/raypick/PathPointer.h index 44c1b7f82b..92d221aeb9 100644 --- a/interface/src/raypick/PathPointer.h +++ b/interface/src/raypick/PathPointer.h @@ -76,6 +76,8 @@ public: // You cannot use editRenderState to change the type of any part of the pointer. You can only edit the properties of the existing overlays. void editRenderState(const std::string& state, const QVariant& startProps, const QVariant& pathProps, const QVariant& endProps) override; + QVector<QUuid> getOverlayIDs() override; + void setLength(float length) override; void setLockEndUUID(const QUuid& objectID, bool isOverlay, const glm::mat4& offsetMat = glm::mat4()) override; diff --git a/interface/src/raypick/PointerScriptingInterface.cpp b/interface/src/raypick/PointerScriptingInterface.cpp index 5bb4293ef3..259c02d943 100644 --- a/interface/src/raypick/PointerScriptingInterface.cpp +++ b/interface/src/raypick/PointerScriptingInterface.cpp @@ -374,4 +374,8 @@ QVariantMap PointerScriptingInterface::getPrevPickResult(unsigned int uid) const result = pickResult->toVariantMap(); } return result; +} + +QVector<QUuid> PointerScriptingInterface::getOverlayIDs(unsigned int uid) { + return DependencyManager::get<PointerManager>()->getOverlayIDs(uid); } \ No newline at end of file diff --git a/interface/src/raypick/PointerScriptingInterface.h b/interface/src/raypick/PointerScriptingInterface.h index 9fe05182c7..65036c3104 100644 --- a/interface/src/raypick/PointerScriptingInterface.h +++ b/interface/src/raypick/PointerScriptingInterface.h @@ -203,6 +203,13 @@ public: */ Q_INVOKABLE bool isMouse(unsigned int uid) { return DependencyManager::get<PointerManager>()->isMouse(uid); } + /**jsdoc + * Get the IDs of the overlays used by a Pointer. + * @function Pointers.getOverlayIDs + * @param {number} uid The ID of the Pointer, as returned by {@link Pointers.createPointer}. + * @returns {Uuid[]} The overlay IDs used by the Pointer. + */ + Q_INVOKABLE QVector<QUuid> getOverlayIDs(unsigned int uid); }; #endif // hifi_PointerScriptingInterface_h diff --git a/interface/src/raypick/StylusPointer.cpp b/interface/src/raypick/StylusPointer.cpp index 8c0fb59106..0d376bf3f1 100644 --- a/interface/src/raypick/StylusPointer.cpp +++ b/interface/src/raypick/StylusPointer.cpp @@ -225,4 +225,10 @@ glm::vec2 StylusPointer::findPos2D(const PickedObject& pickedObject, const glm:: default: return glm::vec2(NAN); } -} \ No newline at end of file +} + +QVector<QUuid> StylusPointer::getOverlayIDs() { + QVector<QUuid> result; + result.append(_stylusOverlay); + return result; +} diff --git a/interface/src/raypick/StylusPointer.h b/interface/src/raypick/StylusPointer.h index 950b03b7c9..a4778ffd97 100644 --- a/interface/src/raypick/StylusPointer.h +++ b/interface/src/raypick/StylusPointer.h @@ -33,6 +33,8 @@ public: void setRenderState(const std::string& state) override; void editRenderState(const std::string& state, const QVariant& startProps, const QVariant& pathProps, const QVariant& endProps) override {} + QVector<QUuid> getOverlayIDs() override; + static OverlayID buildStylusOverlay(const QVariantMap& properties); protected: diff --git a/libraries/pointers/src/Pointer.h b/libraries/pointers/src/Pointer.h index 0c842dbd88..96b43e317b 100644 --- a/libraries/pointers/src/Pointer.h +++ b/libraries/pointers/src/Pointer.h @@ -50,6 +50,8 @@ public: virtual void setRenderState(const std::string& state) = 0; virtual void editRenderState(const std::string& state, const QVariant& startProps, const QVariant& pathProps, const QVariant& endProps) = 0; + virtual QVector<QUuid> getOverlayIDs() = 0; + virtual void setPrecisionPicking(bool precisionPicking); virtual void setIgnoreItems(const QVector<QUuid>& ignoreItems) const; virtual void setIncludeItems(const QVector<QUuid>& includeItems) const; diff --git a/libraries/pointers/src/PointerManager.cpp b/libraries/pointers/src/PointerManager.cpp index be890da392..6a395ecac2 100644 --- a/libraries/pointers/src/PointerManager.cpp +++ b/libraries/pointers/src/PointerManager.cpp @@ -144,4 +144,13 @@ bool PointerManager::isMouse(unsigned int uid) { return pointer->isMouse(); } return false; -} \ No newline at end of file +} + +QVector<QUuid> PointerManager::getOverlayIDs(unsigned int uid) { + auto pointer = find(uid); + if (pointer) { + return pointer->getOverlayIDs(); + } + QVector<QUuid> empty; + return empty; +} diff --git a/libraries/pointers/src/PointerManager.h b/libraries/pointers/src/PointerManager.h index b98558622f..0b6dcd6eae 100644 --- a/libraries/pointers/src/PointerManager.h +++ b/libraries/pointers/src/PointerManager.h @@ -44,6 +44,8 @@ public: bool isRightHand(unsigned int uid); bool isMouse(unsigned int uid); + QVector<QUuid> getOverlayIDs(unsigned int uid); + static const unsigned int MOUSE_POINTER_ID { PointerEvent::INVALID_POINTER_ID + 1 }; private: diff --git a/scripts/system/controllers/controllerModules/teleport.js b/scripts/system/controllers/controllerModules/teleport.js index 2b273c60d6..a2d1c30793 100644 --- a/scripts/system/controllers/controllerModules/teleport.js +++ b/scripts/system/controllers/controllerModules/teleport.js @@ -199,6 +199,17 @@ Script.include("/~/system/libraries/controllers.js"); maxDistance: 8.0 }); + this.addToSelectedItemsList = function (overlays) { + for (var i = 0, length = overlays.length; i < length; i++) { + Selection.addToSelectedItemsList(this.teleporterSelectionName, "overlay", overlays[i]); + } + }; + + this.addToSelectedItemsList(Pointers.getOverlayIDs(this.teleportParabolaHandVisible)); + this.addToSelectedItemsList(Pointers.getOverlayIDs(this.teleportParabolaHandInvisible)); + this.addToSelectedItemsList(Pointers.getOverlayIDs(this.teleportParabolaHeadVisible)); + this.addToSelectedItemsList(Pointers.getOverlayIDs(this.teleportParabolaHeadInvisible)); + this.PLAY_AREA_OVERLAY_MODEL = Script.resolvePath("../../assets/models/trackingSpacev2.fbx"); this.PLAY_AREA_OVERLAY_MODEL_DIMENSIONS = { x: 2, y: 0.2, z: 2 };