diff --git a/interface/src/raypick/ParabolaPointer.cpp b/interface/src/raypick/ParabolaPointer.cpp index fd6bdc7dbb..4aaab4c654 100644 --- a/interface/src/raypick/ParabolaPointer.cpp +++ b/interface/src/raypick/ParabolaPointer.cpp @@ -20,6 +20,7 @@ const glm::vec4 ParabolaPointer::RenderState::ParabolaRenderItem::DEFAULT_PARABOLA_COLOR { 1.0f }; const float ParabolaPointer::RenderState::ParabolaRenderItem::DEFAULT_PARABOLA_WIDTH { 0.01f }; const bool ParabolaPointer::RenderState::ParabolaRenderItem::DEFAULT_PARABOLA_ISVISIBLEINSECONDARYCAMERA { false }; +const bool ParabolaPointer::RenderState::ParabolaRenderItem::DEFAULT_PARABOLA_DRAWINFRONT { false }; gpu::PipelinePointer ParabolaPointer::RenderState::ParabolaRenderItem::_parabolaPipeline { nullptr }; gpu::PipelinePointer ParabolaPointer::RenderState::ParabolaRenderItem::_transparentParabolaPipeline { nullptr }; @@ -40,6 +41,7 @@ void ParabolaPointer::editRenderStatePath(const std::string& state, const QVaria float alpha = RenderState::ParabolaRenderItem::DEFAULT_PARABOLA_COLOR.a; float width = RenderState::ParabolaRenderItem::DEFAULT_PARABOLA_WIDTH; bool isVisibleInSecondaryCamera = RenderState::ParabolaRenderItem::DEFAULT_PARABOLA_ISVISIBLEINSECONDARYCAMERA; + bool drawInFront = RenderState::ParabolaRenderItem::DEFAULT_PARABOLA_DRAWINFRONT; bool enabled = false; if (!pathMap.isEmpty()) { enabled = true; @@ -57,8 +59,11 @@ void ParabolaPointer::editRenderStatePath(const std::string& state, const QVaria if (pathMap["isVisibleInSecondaryCamera"].isValid()) { isVisibleInSecondaryCamera = pathMap["isVisibleInSecondaryCamera"].toBool(); } + if (pathMap["drawInFront"].isValid()) { + drawInFront = pathMap["drawInFront"].toBool(); + } } - renderState->editParabola(color, alpha, width, isVisibleInSecondaryCamera, enabled); + renderState->editParabola(color, alpha, width, isVisibleInSecondaryCamera, drawInFront, enabled); } } @@ -108,7 +113,7 @@ void ParabolaPointer::setVisualPickResultInternal(PickResultPointer pickResult, } ParabolaPointer::RenderState::RenderState(const OverlayID& startID, const OverlayID& endID, const glm::vec3& pathColor, float pathAlpha, float pathWidth, - bool isVisibleInSecondaryCamera, bool pathEnabled) : + bool isVisibleInSecondaryCamera, bool drawInFront, bool pathEnabled) : StartEndRenderState(startID, endID) { render::Transaction transaction; @@ -116,7 +121,7 @@ ParabolaPointer::RenderState::RenderState(const OverlayID& startID, const Overla _pathID = scene->allocateID(); _pathWidth = pathWidth; if (render::Item::isValidID(_pathID)) { - auto renderItem = std::make_shared(pathColor, pathAlpha, pathWidth, isVisibleInSecondaryCamera, pathEnabled); + auto renderItem = std::make_shared(pathColor, pathAlpha, pathWidth, isVisibleInSecondaryCamera, drawInFront, pathEnabled); transaction.resetItem(_pathID, std::make_shared(renderItem)); scene->enqueueTransaction(transaction); } @@ -144,15 +149,16 @@ void ParabolaPointer::RenderState::disable() { } } -void ParabolaPointer::RenderState::editParabola(const glm::vec3& color, float alpha, float width, bool isVisibleInSecondaryCamera, bool enabled) { +void ParabolaPointer::RenderState::editParabola(const glm::vec3& color, float alpha, float width, bool isVisibleInSecondaryCamera, bool drawInFront, bool enabled) { if (render::Item::isValidID(_pathID)) { render::Transaction transaction; auto scene = qApp->getMain3DScene(); - transaction.updateItem(_pathID, [color, alpha, width, isVisibleInSecondaryCamera, enabled](ParabolaRenderItem& item) { + transaction.updateItem(_pathID, [color, alpha, width, isVisibleInSecondaryCamera, drawInFront, enabled](ParabolaRenderItem& item) { item.setColor(color); item.setAlpha(alpha); item.setWidth(width); item.setIsVisibleInSecondaryCamera(isVisibleInSecondaryCamera); + item.setDrawInFront(drawInFront); item.setEnabled(enabled); item.updateKey(); }); @@ -200,6 +206,7 @@ std::shared_ptr ParabolaPointer::buildRenderState(const QVa float alpha = RenderState::ParabolaRenderItem::DEFAULT_PARABOLA_COLOR.a; float width = RenderState::ParabolaRenderItem::DEFAULT_PARABOLA_WIDTH; bool isVisibleInSecondaryCamera = RenderState::ParabolaRenderItem::DEFAULT_PARABOLA_ISVISIBLEINSECONDARYCAMERA; + bool drawInFront = RenderState::ParabolaRenderItem::DEFAULT_PARABOLA_DRAWINFRONT; bool enabled = false; if (propMap["path"].isValid()) { enabled = true; @@ -220,6 +227,10 @@ std::shared_ptr ParabolaPointer::buildRenderState(const QVa if (pathMap["isVisibleInSecondaryCamera"].isValid()) { isVisibleInSecondaryCamera = pathMap["isVisibleInSecondaryCamera"].toBool(); } + + if (pathMap["drawInFront"].isValid()) { + drawInFront = pathMap["drawInFront"].toBool(); + } } QUuid endID; @@ -231,7 +242,7 @@ std::shared_ptr ParabolaPointer::buildRenderState(const QVa } } - return std::make_shared(startID, endID, color, alpha, width, isVisibleInSecondaryCamera, enabled); + return std::make_shared(startID, endID, color, alpha, width, isVisibleInSecondaryCamera, drawInFront, enabled); } PointerEvent ParabolaPointer::buildPointerEvent(const PickedObject& target, const PickResultPointer& pickResult, const std::string& button, bool hover) { @@ -283,8 +294,8 @@ glm::vec3 ParabolaPointer::findIntersection(const PickedObject& pickedObject, co } ParabolaPointer::RenderState::ParabolaRenderItem::ParabolaRenderItem(const glm::vec3& color, float alpha, float width, - bool isVisibleInSecondaryCamera, bool enabled) : - _isVisibleInSecondaryCamera(isVisibleInSecondaryCamera), _enabled(enabled) + bool isVisibleInSecondaryCamera, bool drawInFront, bool enabled) : + _isVisibleInSecondaryCamera(isVisibleInSecondaryCamera), _drawInFront(drawInFront), _enabled(enabled) { _uniformBuffer->resize(sizeof(ParabolaData)); setColor(color); @@ -320,6 +331,10 @@ void ParabolaPointer::RenderState::ParabolaRenderItem::updateKey() { builder.withTagBits(render::hifi::TAG_MAIN_VIEW); } + if (_drawInFront) { + builder.withLayer(render::hifi::LAYER_3D_FRONT); + } + _key = builder.build(); } diff --git a/interface/src/raypick/ParabolaPointer.h b/interface/src/raypick/ParabolaPointer.h index 93f9a7b055..d655b27396 100644 --- a/interface/src/raypick/ParabolaPointer.h +++ b/interface/src/raypick/ParabolaPointer.h @@ -21,7 +21,7 @@ public: using Pointer = Payload::DataPointer; ParabolaRenderItem(const glm::vec3& color, float alpha, float width, - bool isVisibleInSecondaryCamera, bool enabled); + bool isVisibleInSecondaryCamera, bool drawInFront, bool enabled); ~ParabolaRenderItem() {} static gpu::PipelinePointer _parabolaPipeline; @@ -46,11 +46,13 @@ public: void setAcceleration(const glm::vec3& acceleration) { _parabolaData.acceleration = acceleration; } void setOrigin(const glm::vec3& origin) { _origin = origin; } void setIsVisibleInSecondaryCamera(const bool& isVisibleInSecondaryCamera) { _isVisibleInSecondaryCamera = isVisibleInSecondaryCamera; } + void setDrawInFront(const bool& drawInFront) { _drawInFront = drawInFront; } void setEnabled(const bool& enabled) { _enabled = enabled; } static const glm::vec4 DEFAULT_PARABOLA_COLOR; static const float DEFAULT_PARABOLA_WIDTH; static const bool DEFAULT_PARABOLA_ISVISIBLEINSECONDARYCAMERA; + static const bool DEFAULT_PARABOLA_DRAWINFRONT; private: render::Item::Bound _bound; @@ -58,6 +60,7 @@ public: glm::vec3 _origin { 0.0f }; bool _isVisibleInSecondaryCamera { DEFAULT_PARABOLA_ISVISIBLEINSECONDARYCAMERA }; + bool _drawInFront { DEFAULT_PARABOLA_DRAWINFRONT }; bool _visible { false }; bool _enabled { false }; @@ -77,7 +80,7 @@ public: RenderState() {} RenderState(const OverlayID& startID, const OverlayID& endID, const glm::vec3& pathColor, float pathAlpha, float pathWidth, - bool isVisibleInSecondaryCamera, bool pathEnabled); + bool isVisibleInSecondaryCamera, bool drawInFront, bool pathEnabled); void setPathWidth(float width) { _pathWidth = width; } float getPathWidth() const { return _pathWidth; } @@ -87,7 +90,7 @@ public: void update(const glm::vec3& origin, const glm::vec3& end, const glm::vec3& surfaceNormal, bool scaleWithAvatar, bool distanceScaleEnd, bool centerEndY, bool faceAvatar, bool followNormal, float followNormalStrength, float distance, const PickResultPointer& pickResult) override; - void editParabola(const glm::vec3& color, float alpha, float width, bool isVisibleInSecondaryCamera, bool enabled); + void editParabola(const glm::vec3& color, float alpha, float width, bool isVisibleInSecondaryCamera, bool drawInFront, bool enabled); private: int _pathID; diff --git a/scripts/system/controllers/controllerModules/teleport.js b/scripts/system/controllers/controllerModules/teleport.js index c42956bb41..ee0825625b 100644 --- a/scripts/system/controllers/controllerModules/teleport.js +++ b/scripts/system/controllers/controllerModules/teleport.js @@ -56,17 +56,20 @@ Script.include("/~/system/libraries/controllers.js"); var cancelPath = { color: COLORS_TELEPORT_CANCEL, alpha: 1, - width: 0.025 + width: 0.025, + drawInFront: true }; var teleportPath = { color: COLORS_TELEPORT_CAN_TELEPORT, alpha: 1, - width: 0.025 + width: 0.025, + drawInFront: true }; var seatPath = { color: COLORS_TELEPORT_SEAT, alpha: 1, - width: 0.025 + width: 0.025, + drawInFront: true }; var teleportEnd = { type: "model",