From 64665c87b2886b36926ba8384d2988f32083f8aa Mon Sep 17 00:00:00 2001 From: SamGondelman Date: Tue, 31 Oct 2017 17:07:48 -0700 Subject: [PATCH] replace ids with unsigned ints --- interface/src/Application.cpp | 4 +- interface/src/raypick/LaserPointer.cpp | 3 +- .../LaserPointerScriptingInterface.cpp | 8 ++-- .../raypick/LaserPointerScriptingInterface.h | 24 +++++----- .../src/raypick/PickScriptingInterface.cpp | 22 ++++----- .../src/raypick/PickScriptingInterface.h | 18 +++---- .../src/raypick/PointerScriptingInterface.cpp | 12 ++--- .../src/raypick/PointerScriptingInterface.h | 26 +++++----- .../src/raypick/RayPickScriptingInterface.cpp | 16 +++---- .../src/raypick/RayPickScriptingInterface.h | 16 +++---- .../src/EntityTreeRenderer.cpp | 4 +- .../src/EntityTreeRenderer.h | 12 ++--- .../src/pointers/PickCacheOptimizer.h | 4 +- .../pointers/src/pointers/PickManager.cpp | 30 +++++++----- libraries/pointers/src/pointers/PickManager.h | 25 +++++----- libraries/pointers/src/pointers/Pointer.cpp | 13 +++-- libraries/pointers/src/pointers/Pointer.h | 10 ++-- .../pointers/src/pointers/PointerManager.cpp | 47 ++++++++++--------- .../pointers/src/pointers/PointerManager.h | 30 ++++++------ libraries/shared/src/PointerEvent.h | 1 + libraries/ui/src/ui/OffscreenQmlSurface.cpp | 4 +- 21 files changed, 176 insertions(+), 153 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 6038ff6c9a..8fe58ddc7c 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -1821,7 +1821,7 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo // Setup the mouse ray pick and related operators DependencyManager::get()->setMouseRayPickID(DependencyManager::get()->addPick(PickQuery::Ray, std::make_shared( PickFilter(PickScriptingInterface::PICK_ENTITIES() | PickScriptingInterface::PICK_INCLUDE_NONCOLLIDABLE()), 0.0f, true))); - DependencyManager::get()->setMouseRayPickResultOperator([&](QUuid rayPickID) { + DependencyManager::get()->setMouseRayPickResultOperator([&](unsigned int rayPickID) { RayToEntityIntersectionResult entityResult; entityResult.intersects = false; QVariantMap result = DependencyManager::get()->getPrevPickResult(rayPickID); @@ -1837,7 +1837,7 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo } return entityResult; }); - DependencyManager::get()->setSetPrecisionPickingOperator([&](QUuid rayPickID, bool value) { + DependencyManager::get()->setSetPrecisionPickingOperator([&](unsigned int rayPickID, bool value) { DependencyManager::get()->setPrecisionPicking(rayPickID, value); }); diff --git a/interface/src/raypick/LaserPointer.cpp b/interface/src/raypick/LaserPointer.cpp index d2d829e579..2506c6222d 100644 --- a/interface/src/raypick/LaserPointer.cpp +++ b/interface/src/raypick/LaserPointer.cpp @@ -282,7 +282,6 @@ RenderState LaserPointer::buildRenderState(const QVariantMap& propMap) { } PointerEvent LaserPointer::buildPointerEvent(const PickedObject& target, const QVariantMap& pickResult) const { - uint32_t id = 0; glm::vec3 intersection = vec3FromVariant(pickResult["intersection"]); glm::vec3 surfaceNormal = vec3FromVariant(pickResult["surfaceNormal"]); QVariantMap searchRay = pickResult["searchRay"].toMap(); @@ -304,7 +303,7 @@ PointerEvent LaserPointer::buildPointerEvent(const PickedObject& target, const Q } else if (target.type == HUD) { pos2D = DependencyManager::get()->calculatePos2DFromHUD(intersection); } - return PointerEvent(PointerEvent::Move, id, pos2D, intersection, surfaceNormal, direction, PointerEvent::NoButtons); + return PointerEvent(PointerEvent::Move, 0, pos2D, intersection, surfaceNormal, direction, PointerEvent::NoButtons); } glm::vec3 LaserPointer::intersectRayWithXYPlane(const glm::vec3& origin, const glm::vec3& direction, const glm::vec3& point, const glm::quat rotation, const glm::vec3& registration) const { diff --git a/interface/src/raypick/LaserPointerScriptingInterface.cpp b/interface/src/raypick/LaserPointerScriptingInterface.cpp index 533dffafb9..53ddd71969 100644 --- a/interface/src/raypick/LaserPointerScriptingInterface.cpp +++ b/interface/src/raypick/LaserPointerScriptingInterface.cpp @@ -14,17 +14,17 @@ #include "RegisteredMetaTypes.h" #include "PointerScriptingInterface.h" -void LaserPointerScriptingInterface::setIgnoreItems(const QUuid& uid, const QScriptValue& ignoreItems) const { +void LaserPointerScriptingInterface::setIgnoreItems(unsigned int uid, const QScriptValue& ignoreItems) const { DependencyManager::get()->setIgnoreItems(uid, qVectorQUuidFromScriptValue(ignoreItems)); } -void LaserPointerScriptingInterface::setIncludeItems(const QUuid& uid, const QScriptValue& includeItems) const { +void LaserPointerScriptingInterface::setIncludeItems(unsigned int uid, const QScriptValue& includeItems) const { DependencyManager::get()->setIncludeItems(uid, qVectorQUuidFromScriptValue(includeItems)); } -QUuid LaserPointerScriptingInterface::createLaserPointer(const QVariant& properties) const { +unsigned int LaserPointerScriptingInterface::createLaserPointer(const QVariant& properties) const { return DependencyManager::get()->createLaserPointer(properties); } -void LaserPointerScriptingInterface::editRenderState(const QUuid& uid, const QString& renderState, const QVariant& properties) const { +void LaserPointerScriptingInterface::editRenderState(unsigned int uid, const QString& renderState, const QVariant& properties) const { DependencyManager::get()->editRenderState(uid, renderState, properties); } \ No newline at end of file diff --git a/interface/src/raypick/LaserPointerScriptingInterface.h b/interface/src/raypick/LaserPointerScriptingInterface.h index 1116da1528..da62f4eb12 100644 --- a/interface/src/raypick/LaserPointerScriptingInterface.h +++ b/interface/src/raypick/LaserPointerScriptingInterface.h @@ -21,20 +21,20 @@ class LaserPointerScriptingInterface : public QObject, public Dependency { SINGLETON_DEPENDENCY public slots: - Q_INVOKABLE QUuid createLaserPointer(const QVariant& properties) const; - Q_INVOKABLE void enableLaserPointer(const QUuid& uid) const { DependencyManager::get()->enablePointer(uid); } - Q_INVOKABLE void disableLaserPointer(const QUuid& uid) const { DependencyManager::get()->disablePointer(uid); } - Q_INVOKABLE void removeLaserPointer(const QUuid& uid) const { DependencyManager::get()->removePointer(uid); } - Q_INVOKABLE void editRenderState(const QUuid& uid, const QString& renderState, const QVariant& properties) const; - Q_INVOKABLE void setRenderState(const QUuid& uid, const QString& renderState) const { DependencyManager::get()->setRenderState(uid, renderState.toStdString()); } - Q_INVOKABLE QVariantMap getPrevRayPickResult(QUuid uid) const { return DependencyManager::get()->getPrevPickResult(uid); } + Q_INVOKABLE unsigned int createLaserPointer(const QVariant& properties) const; + Q_INVOKABLE void enableLaserPointer(unsigned int uid) const { DependencyManager::get()->enablePointer(uid); } + Q_INVOKABLE void disableLaserPointer(unsigned int uid) const { DependencyManager::get()->disablePointer(uid); } + Q_INVOKABLE void removeLaserPointer(unsigned int uid) const { DependencyManager::get()->removePointer(uid); } + Q_INVOKABLE void editRenderState(unsigned int uid, const QString& renderState, const QVariant& properties) const; + Q_INVOKABLE void setRenderState(unsigned int uid, const QString& renderState) const { DependencyManager::get()->setRenderState(uid, renderState.toStdString()); } + Q_INVOKABLE QVariantMap getPrevRayPickResult(unsigned int uid) const { return DependencyManager::get()->getPrevPickResult(uid); } - Q_INVOKABLE void setPrecisionPicking(const QUuid& uid, bool precisionPicking) const { DependencyManager::get()->setPrecisionPicking(uid, precisionPicking); } - Q_INVOKABLE void setLaserLength(const QUuid& uid, float laserLength) const { DependencyManager::get()->setLength(uid, laserLength); } - Q_INVOKABLE void setIgnoreItems(const QUuid& uid, const QScriptValue& ignoreEntities) const; - Q_INVOKABLE void setIncludeItems(const QUuid& uid, const QScriptValue& includeEntities) const; + Q_INVOKABLE void setPrecisionPicking(unsigned int uid, bool precisionPicking) const { DependencyManager::get()->setPrecisionPicking(uid, precisionPicking); } + Q_INVOKABLE void setLaserLength(unsigned int uid, float laserLength) const { DependencyManager::get()->setLength(uid, laserLength); } + Q_INVOKABLE void setIgnoreItems(unsigned int uid, const QScriptValue& ignoreEntities) const; + Q_INVOKABLE void setIncludeItems(unsigned int uid, const QScriptValue& includeEntities) const; - Q_INVOKABLE void setLockEndUUID(const QUuid& uid, const QUuid& objectID, bool isOverlay) const { DependencyManager::get()->setLockEndUUID(uid, objectID, isOverlay); } + Q_INVOKABLE void setLockEndUUID(unsigned int uid, const QUuid& objectID, bool isOverlay) const { DependencyManager::get()->setLockEndUUID(uid, objectID, isOverlay); } }; diff --git a/interface/src/raypick/PickScriptingInterface.cpp b/interface/src/raypick/PickScriptingInterface.cpp index 40f898e65d..a59e96ccbf 100644 --- a/interface/src/raypick/PickScriptingInterface.cpp +++ b/interface/src/raypick/PickScriptingInterface.cpp @@ -20,16 +20,16 @@ #include #include -QUuid PickScriptingInterface::createPick(const PickQuery::PickType type, const QVariant& properties) { +unsigned int PickScriptingInterface::createPick(const PickQuery::PickType type, const QVariant& properties) { switch (type) { case PickQuery::PickType::Ray: return createRayPick(properties); default: - return QUuid(); + return 0; } } -QUuid PickScriptingInterface::createRayPick(const QVariant& properties) { +unsigned int PickScriptingInterface::createRayPick(const QVariant& properties) { QVariantMap propMap = properties.toMap(); bool enabled = false; @@ -78,34 +78,34 @@ QUuid PickScriptingInterface::createRayPick(const QVariant& properties) { return DependencyManager::get()->addPick(PickQuery::Ray, std::make_shared(position, direction, filter, maxDistance, enabled)); } - return QUuid(); + return 0; } -void PickScriptingInterface::enablePick(const QUuid& uid) { +void PickScriptingInterface::enablePick(unsigned int uid) { DependencyManager::get()->enablePick(uid); } -void PickScriptingInterface::disablePick(const QUuid& uid) { +void PickScriptingInterface::disablePick(unsigned int uid) { DependencyManager::get()->disablePick(uid); } -void PickScriptingInterface::removePick(const QUuid& uid) { +void PickScriptingInterface::removePick(unsigned int uid) { DependencyManager::get()->removePick(uid); } -QVariantMap PickScriptingInterface::getPrevPickResult(const QUuid& uid) { +QVariantMap PickScriptingInterface::getPrevPickResult(unsigned int uid) { return DependencyManager::get()->getPrevPickResult(uid); } -void PickScriptingInterface::setPrecisionPicking(const QUuid& uid, const bool precisionPicking) { +void PickScriptingInterface::setPrecisionPicking(unsigned int uid, const bool precisionPicking) { DependencyManager::get()->setPrecisionPicking(uid, precisionPicking); } -void PickScriptingInterface::setIgnoreItems(const QUuid& uid, const QScriptValue& ignoreItems) { +void PickScriptingInterface::setIgnoreItems(unsigned int uid, const QScriptValue& ignoreItems) { DependencyManager::get()->setIgnoreItems(uid, qVectorQUuidFromScriptValue(ignoreItems)); } -void PickScriptingInterface::setIncludeItems(const QUuid& uid, const QScriptValue& includeItems) { +void PickScriptingInterface::setIncludeItems(unsigned int uid, const QScriptValue& includeItems) { DependencyManager::get()->setIncludeItems(uid, qVectorQUuidFromScriptValue(includeItems)); } diff --git a/interface/src/raypick/PickScriptingInterface.h b/interface/src/raypick/PickScriptingInterface.h index 7c2eeb1ffc..900fa2ef40 100644 --- a/interface/src/raypick/PickScriptingInterface.h +++ b/interface/src/raypick/PickScriptingInterface.h @@ -33,20 +33,20 @@ class PickScriptingInterface : public QObject, public Dependency { SINGLETON_DEPENDENCY public: - QUuid createRayPick(const QVariant& properties); + unsigned int createRayPick(const QVariant& properties); void registerMetaTypes(QScriptEngine* engine); public slots: - Q_INVOKABLE QUuid createPick(const PickQuery::PickType type, const QVariant& properties); - Q_INVOKABLE void enablePick(const QUuid& uid); - Q_INVOKABLE void disablePick(const QUuid& uid); - Q_INVOKABLE void removePick(const QUuid& uid); - Q_INVOKABLE QVariantMap getPrevPickResult(const QUuid& uid); + Q_INVOKABLE unsigned int createPick(const PickQuery::PickType type, const QVariant& properties); + Q_INVOKABLE void enablePick(unsigned int uid); + Q_INVOKABLE void disablePick(unsigned int uid); + Q_INVOKABLE void removePick(unsigned int uid); + Q_INVOKABLE QVariantMap getPrevPickResult(unsigned int uid); - Q_INVOKABLE void setPrecisionPicking(const QUuid& uid, const bool precisionPicking); - Q_INVOKABLE void setIgnoreItems(const QUuid& uid, const QScriptValue& ignoreEntities); - Q_INVOKABLE void setIncludeItems(const QUuid& uid, const QScriptValue& includeEntities); + Q_INVOKABLE void setPrecisionPicking(unsigned int uid, const bool precisionPicking); + Q_INVOKABLE void setIgnoreItems(unsigned int uid, const QScriptValue& ignoreEntities); + Q_INVOKABLE void setIncludeItems(unsigned int uid, const QScriptValue& includeEntities); static constexpr unsigned int PICK_NOTHING() { return 0; } static constexpr unsigned int PICK_ENTITIES() { return PickFilter::getBitMask(PickFilter::FlagBit::PICK_ENTITIES); } diff --git a/interface/src/raypick/PointerScriptingInterface.cpp b/interface/src/raypick/PointerScriptingInterface.cpp index c3a4ac164a..b7211830a8 100644 --- a/interface/src/raypick/PointerScriptingInterface.cpp +++ b/interface/src/raypick/PointerScriptingInterface.cpp @@ -14,23 +14,23 @@ #include "Application.h" #include "LaserPointer.h" -void PointerScriptingInterface::setIgnoreItems(const QUuid& uid, const QScriptValue& ignoreItems) const { +void PointerScriptingInterface::setIgnoreItems(unsigned int uid, const QScriptValue& ignoreItems) const { DependencyManager::get()->setIgnoreItems(uid, qVectorQUuidFromScriptValue(ignoreItems)); } -void PointerScriptingInterface::setIncludeItems(const QUuid& uid, const QScriptValue& includeItems) const { +void PointerScriptingInterface::setIncludeItems(unsigned int uid, const QScriptValue& includeItems) const { DependencyManager::get()->setIncludeItems(uid, qVectorQUuidFromScriptValue(includeItems)); } -QUuid PointerScriptingInterface::createPointer(const PickQuery::PickType& type, const QVariant& properties) const { +unsigned int PointerScriptingInterface::createPointer(const PickQuery::PickType& type, const QVariant& properties) const { switch (type) { case PickQuery::PickType::Ray: return createLaserPointer(properties); default: - return QUuid(); + return 0; } } -QUuid PointerScriptingInterface::createLaserPointer(const QVariant& properties) const { +unsigned int PointerScriptingInterface::createLaserPointer(const QVariant& properties) const { QVariantMap propertyMap = properties.toMap(); bool faceAvatar = false; @@ -114,7 +114,7 @@ QUuid PointerScriptingInterface::createLaserPointer(const QVariant& properties) faceAvatar, centerEndY, lockEnd, distanceScaleEnd, enabled)); } -void PointerScriptingInterface::editRenderState(const QUuid& uid, const QString& renderState, const QVariant& properties) const { +void PointerScriptingInterface::editRenderState(unsigned int uid, const QString& renderState, const QVariant& properties) const { QVariantMap propMap = properties.toMap(); QVariant startProps; diff --git a/interface/src/raypick/PointerScriptingInterface.h b/interface/src/raypick/PointerScriptingInterface.h index cc2ffbc3cc..722ba8cec5 100644 --- a/interface/src/raypick/PointerScriptingInterface.h +++ b/interface/src/raypick/PointerScriptingInterface.h @@ -19,23 +19,23 @@ class PointerScriptingInterface : public QObject, public Dependency { SINGLETON_DEPENDENCY public: - QUuid createLaserPointer(const QVariant& properties) const; + unsigned int createLaserPointer(const QVariant& properties) const; public slots: - Q_INVOKABLE QUuid createPointer(const PickQuery::PickType& type, const QVariant& properties) const; - Q_INVOKABLE void enablePointer(const QUuid& uid) const { DependencyManager::get()->enablePointer(uid); } - Q_INVOKABLE void disablePointer(const QUuid& uid) const { DependencyManager::get()->disablePointer(uid); } - Q_INVOKABLE void removePointer(const QUuid& uid) const { DependencyManager::get()->removePointer(uid); } - Q_INVOKABLE void editRenderState(const QUuid& uid, const QString& renderState, const QVariant& properties) const; - Q_INVOKABLE void setRenderState(const QUuid& uid, const QString& renderState) const { DependencyManager::get()->setRenderState(uid, renderState.toStdString()); } - Q_INVOKABLE QVariantMap getPrevPickResult(const QUuid& uid) const { return DependencyManager::get()->getPrevPickResult(uid); } + Q_INVOKABLE unsigned int createPointer(const PickQuery::PickType& type, const QVariant& properties) const; + Q_INVOKABLE void enablePointer(unsigned int uid) const { DependencyManager::get()->enablePointer(uid); } + Q_INVOKABLE void disablePointer(unsigned int uid) const { DependencyManager::get()->disablePointer(uid); } + Q_INVOKABLE void removePointer(unsigned int uid) const { DependencyManager::get()->removePointer(uid); } + Q_INVOKABLE void editRenderState(unsigned int uid, const QString& renderState, const QVariant& properties) const; + Q_INVOKABLE void setRenderState(unsigned int uid, const QString& renderState) const { DependencyManager::get()->setRenderState(uid, renderState.toStdString()); } + Q_INVOKABLE QVariantMap getPrevPickResult(unsigned int uid) const { return DependencyManager::get()->getPrevPickResult(uid); } - Q_INVOKABLE void setPrecisionPicking(const QUuid& uid, bool precisionPicking) const { DependencyManager::get()->setPrecisionPicking(uid, precisionPicking); } - Q_INVOKABLE void setLaserLength(const QUuid& uid, float laserLength) const { DependencyManager::get()->setLength(uid, laserLength); } - Q_INVOKABLE void setIgnoreItems(const QUuid& uid, const QScriptValue& ignoreEntities) const; - Q_INVOKABLE void setIncludeItems(const QUuid& uid, const QScriptValue& includeEntities) const; + Q_INVOKABLE void setPrecisionPicking(unsigned int uid, bool precisionPicking) const { DependencyManager::get()->setPrecisionPicking(uid, precisionPicking); } + Q_INVOKABLE void setLaserLength(unsigned int uid, float laserLength) const { DependencyManager::get()->setLength(uid, laserLength); } + Q_INVOKABLE void setIgnoreItems(unsigned int uid, const QScriptValue& ignoreEntities) const; + Q_INVOKABLE void setIncludeItems(unsigned int uid, const QScriptValue& includeEntities) const; - Q_INVOKABLE void setLockEndUUID(const QUuid& uid, const QUuid& objectID, bool isOverlay) const { DependencyManager::get()->setLockEndUUID(uid, objectID, isOverlay); } + Q_INVOKABLE void setLockEndUid(unsigned int uid, const QUuid& objectID, bool isOverlay) const { DependencyManager::get()->setLockEndUUID(uid, objectID, isOverlay); } signals: void triggerBegin(const QUuid& id, const PointerEvent& pointerEvent); diff --git a/interface/src/raypick/RayPickScriptingInterface.cpp b/interface/src/raypick/RayPickScriptingInterface.cpp index 92bf3ec521..f9774dda31 100644 --- a/interface/src/raypick/RayPickScriptingInterface.cpp +++ b/interface/src/raypick/RayPickScriptingInterface.cpp @@ -20,34 +20,34 @@ #include "JointRayPick.h" #include "MouseRayPick.h" -QUuid RayPickScriptingInterface::createRayPick(const QVariant& properties) { +uint32_t RayPickScriptingInterface::createRayPick(const QVariant& properties) { return DependencyManager::get()->createRayPick(properties); } -void RayPickScriptingInterface::enableRayPick(const QUuid& uid) { +void RayPickScriptingInterface::enableRayPick(uint32_t uid) { DependencyManager::get()->enablePick(uid); } -void RayPickScriptingInterface::disableRayPick(const QUuid& uid) { +void RayPickScriptingInterface::disableRayPick(uint32_t uid) { DependencyManager::get()->disablePick(uid); } -void RayPickScriptingInterface::removeRayPick(const QUuid& uid) { +void RayPickScriptingInterface::removeRayPick(uint32_t uid) { DependencyManager::get()->removePick(uid); } -QVariantMap RayPickScriptingInterface::getPrevRayPickResult(const QUuid& uid) { +QVariantMap RayPickScriptingInterface::getPrevRayPickResult(uint32_t uid) { return DependencyManager::get()->getPrevPickResult(uid); } -void RayPickScriptingInterface::setPrecisionPicking(const QUuid& uid, const bool precisionPicking) { +void RayPickScriptingInterface::setPrecisionPicking(uint32_t uid, const bool precisionPicking) { DependencyManager::get()->setPrecisionPicking(uid, precisionPicking); } -void RayPickScriptingInterface::setIgnoreItems(const QUuid& uid, const QScriptValue& ignoreItems) { +void RayPickScriptingInterface::setIgnoreItems(uint32_t uid, const QScriptValue& ignoreItems) { DependencyManager::get()->setIgnoreItems(uid, qVectorQUuidFromScriptValue(ignoreItems)); } -void RayPickScriptingInterface::setIncludeItems(const QUuid& uid, const QScriptValue& includeItems) { +void RayPickScriptingInterface::setIncludeItems(uint32_t uid, const QScriptValue& includeItems) { DependencyManager::get()->setIncludeItems(uid, qVectorQUuidFromScriptValue(includeItems)); } diff --git a/interface/src/raypick/RayPickScriptingInterface.h b/interface/src/raypick/RayPickScriptingInterface.h index b0d36f482c..844add9012 100644 --- a/interface/src/raypick/RayPickScriptingInterface.h +++ b/interface/src/raypick/RayPickScriptingInterface.h @@ -37,15 +37,15 @@ class RayPickScriptingInterface : public QObject, public Dependency { SINGLETON_DEPENDENCY public slots: - Q_INVOKABLE QUuid createRayPick(const QVariant& properties); - Q_INVOKABLE void enableRayPick(const QUuid& uid); - Q_INVOKABLE void disableRayPick(const QUuid& uid); - Q_INVOKABLE void removeRayPick(const QUuid& uid); - Q_INVOKABLE QVariantMap getPrevRayPickResult(const QUuid& uid); + Q_INVOKABLE unsigned int createRayPick(const QVariant& properties); + Q_INVOKABLE void enableRayPick(unsigned int uid); + Q_INVOKABLE void disableRayPick(unsigned int uid); + Q_INVOKABLE void removeRayPick(unsigned int uid); + Q_INVOKABLE QVariantMap getPrevRayPickResult(unsigned int uid); - Q_INVOKABLE void setPrecisionPicking(const QUuid& uid, const bool precisionPicking); - Q_INVOKABLE void setIgnoreItems(const QUuid& uid, const QScriptValue& ignoreEntities); - Q_INVOKABLE void setIncludeItems(const QUuid& uid, const QScriptValue& includeEntities); + Q_INVOKABLE void setPrecisionPicking(unsigned int uid, const bool precisionPicking); + Q_INVOKABLE void setIgnoreItems(unsigned int uid, const QScriptValue& ignoreEntities); + Q_INVOKABLE void setIncludeItems(unsigned int uid, const QScriptValue& includeEntities); static unsigned int PICK_NOTHING() { return PickScriptingInterface::PICK_NOTHING(); } static unsigned int PICK_ENTITIES() { return PickScriptingInterface::PICK_ENTITIES(); } diff --git a/libraries/entities-renderer/src/EntityTreeRenderer.cpp b/libraries/entities-renderer/src/EntityTreeRenderer.cpp index 4dc5729c03..3cccc31145 100644 --- a/libraries/entities-renderer/src/EntityTreeRenderer.cpp +++ b/libraries/entities-renderer/src/EntityTreeRenderer.cpp @@ -51,11 +51,11 @@ EntityTreeRenderer::EntityTreeRenderer(bool wantScripts, AbstractViewStateInterf _displayModelBounds(false), _layeredZones(this) { - setMouseRayPickResultOperator([](QUuid rayPickID) { + setMouseRayPickResultOperator([](unsigned int rayPickID) { RayToEntityIntersectionResult entityResult; return entityResult; }); - setSetPrecisionPickingOperator([](QUuid rayPickID, bool value) {}); + setSetPrecisionPickingOperator([](unsigned int rayPickID, bool value) {}); EntityRenderer::initEntityRenderers(); _currentHoverOverEntityID = UNKNOWN_ENTITY_ID; _currentClickingOnEntityID = UNKNOWN_ENTITY_ID; diff --git a/libraries/entities-renderer/src/EntityTreeRenderer.h b/libraries/entities-renderer/src/EntityTreeRenderer.h index 1eb44f996a..52876fa90e 100644 --- a/libraries/entities-renderer/src/EntityTreeRenderer.h +++ b/libraries/entities-renderer/src/EntityTreeRenderer.h @@ -74,9 +74,9 @@ public: static float getEntityLoadingPriority(const EntityItem& item) { return _calculateEntityLoadingPriorityFunc(item); } static void setEntityLoadingPriorityFunction(CalculateEntityLoadingPriority fn) { _calculateEntityLoadingPriorityFunc = fn; } - void setMouseRayPickID(QUuid rayPickID) { _mouseRayPickID = rayPickID; } - void setMouseRayPickResultOperator(std::function getPrevRayPickResultOperator) { _getPrevRayPickResultOperator = getPrevRayPickResultOperator; } - void setSetPrecisionPickingOperator(std::function setPrecisionPickingOperator) { _setPrecisionPickingOperator = setPrecisionPickingOperator; } + void setMouseRayPickID(unsigned int rayPickID) { _mouseRayPickID = rayPickID; } + void setMouseRayPickResultOperator(std::function getPrevRayPickResultOperator) { _getPrevRayPickResultOperator = getPrevRayPickResultOperator; } + void setSetPrecisionPickingOperator(std::function setPrecisionPickingOperator) { _setPrecisionPickingOperator = setPrecisionPickingOperator; } void shutdown(); void update(bool simulate); @@ -182,9 +182,9 @@ private: QMultiMap _waitingOnPreload; - QUuid _mouseRayPickID; - std::function _getPrevRayPickResultOperator; - std::function _setPrecisionPickingOperator; + unsigned int _mouseRayPickID; + std::function _getPrevRayPickResultOperator; + std::function _setPrecisionPickingOperator; class LayeredZone { public: diff --git a/libraries/pointers/src/pointers/PickCacheOptimizer.h b/libraries/pointers/src/pointers/PickCacheOptimizer.h index c4bf96ab51..f3bdbb87b0 100644 --- a/libraries/pointers/src/pointers/PickCacheOptimizer.h +++ b/libraries/pointers/src/pointers/PickCacheOptimizer.h @@ -37,7 +37,7 @@ template class PickCacheOptimizer { public: - void update(QHash>& picks, bool shouldPickHUD); + void update(QHash>& picks, bool shouldPickHUD); protected: typedef std::unordered_map> PickCache; @@ -67,7 +67,7 @@ void PickCacheOptimizer::cacheResult(const bool intersects, const PickResultP } template -void PickCacheOptimizer::update(QHash>& picks, bool shouldPickHUD) { +void PickCacheOptimizer::update(QHash>& picks, bool shouldPickHUD) { PickCache results; for (const auto& uid : picks.keys()) { std::shared_ptr> pick = std::static_pointer_cast>(picks[uid]); diff --git a/libraries/pointers/src/pointers/PickManager.cpp b/libraries/pointers/src/pointers/PickManager.cpp index 1c5025250a..903113d79d 100644 --- a/libraries/pointers/src/pointers/PickManager.cpp +++ b/libraries/pointers/src/pointers/PickManager.cpp @@ -12,16 +12,20 @@ PickManager::PickManager() { setCalculatePos2DFromHUDOperator([](const glm::vec3& intersection) { return glm::vec2(NAN); }); } -QUuid PickManager::addPick(PickQuery::PickType type, const std::shared_ptr pick) { - QUuid id = QUuid::createUuid(); +unsigned int PickManager::addPick(PickQuery::PickType type, const std::shared_ptr pick) { + unsigned int id = 0; withWriteLock([&] { - _picks[type][id] = pick; - _typeMap[id] = type; + // Don't let the pick IDs overflow + if (_nextPickID < UINT32_MAX) { + id = _nextPickID++; + _picks[type][id] = pick; + _typeMap[id] = type; + } }); return id; } -std::shared_ptr PickManager::findPick(const QUuid& uid) const { +std::shared_ptr PickManager::findPick(unsigned int uid) const { return resultWithReadLock>([&] { auto type = _typeMap.find(uid); if (type != _typeMap.end()) { @@ -31,7 +35,7 @@ std::shared_ptr PickManager::findPick(const QUuid& uid) const { }); } -void PickManager::removePick(const QUuid& uid) { +void PickManager::removePick(unsigned int uid) { withWriteLock([&] { auto type = _typeMap.find(uid); if (type != _typeMap.end()) { @@ -41,7 +45,7 @@ void PickManager::removePick(const QUuid& uid) { }); } -QVariantMap PickManager::getPrevPickResult(const QUuid& uid) const { +QVariantMap PickManager::getPrevPickResult(unsigned int uid) const { auto pick = findPick(uid); if (pick && pick->getPrevPickResult()) { return pick->getPrevPickResult()->toVariantMap(); @@ -49,35 +53,35 @@ QVariantMap PickManager::getPrevPickResult(const QUuid& uid) const { return QVariantMap(); } -void PickManager::enablePick(const QUuid& uid) const { +void PickManager::enablePick(unsigned int uid) const { auto pick = findPick(uid); if (pick) { pick->enable(); } } -void PickManager::disablePick(const QUuid& uid) const { +void PickManager::disablePick(unsigned int uid) const { auto pick = findPick(uid); if (pick) { pick->disable(); } } -void PickManager::setPrecisionPicking(const QUuid& uid, bool precisionPicking) const { +void PickManager::setPrecisionPicking(unsigned int uid, bool precisionPicking) const { auto pick = findPick(uid); if (pick) { pick->setPrecisionPicking(precisionPicking); } } -void PickManager::setIgnoreItems(const QUuid& uid, const QVector& ignore) const { +void PickManager::setIgnoreItems(unsigned int uid, const QVector& ignore) const { auto pick = findPick(uid); if (pick) { pick->setIgnoreItems(ignore); } } -void PickManager::setIncludeItems(const QUuid& uid, const QVector& include) const { +void PickManager::setIncludeItems(unsigned int uid, const QVector& include) const { auto pick = findPick(uid); if (pick) { pick->setIncludeItems(include); @@ -85,7 +89,7 @@ void PickManager::setIncludeItems(const QUuid& uid, const QVector& includ } void PickManager::update() { - QHash>> cachedPicks; + QHash>> cachedPicks; withReadLock([&] { cachedPicks = _picks; }); diff --git a/libraries/pointers/src/pointers/PickManager.h b/libraries/pointers/src/pointers/PickManager.h index e3b1d03080..7ff4fcc941 100644 --- a/libraries/pointers/src/pointers/PickManager.h +++ b/libraries/pointers/src/pointers/PickManager.h @@ -22,16 +22,16 @@ public: void update(); - QUuid addPick(PickQuery::PickType type, const std::shared_ptr pick); - void removePick(const QUuid& uid); - void enablePick(const QUuid& uid) const; - void disablePick(const QUuid& uid) const; + unsigned int addPick(PickQuery::PickType type, const std::shared_ptr pick); + void removePick(unsigned int uid); + void enablePick(unsigned int uid) const; + void disablePick(unsigned int uid) const; - QVariantMap getPrevPickResult(const QUuid& uid) const; + QVariantMap getPrevPickResult(unsigned int uid) const; - void setPrecisionPicking(const QUuid& uid, bool precisionPicking) const; - void setIgnoreItems(const QUuid& uid, const QVector& ignore) const; - void setIncludeItems(const QUuid& uid, const QVector& include) const; + void setPrecisionPicking(unsigned int uid, bool precisionPicking) const; + void setIgnoreItems(unsigned int uid, const QVector& ignore) const; + void setIncludeItems(unsigned int uid, const QVector& include) const; void setShouldPickHUDOperator(std::function shouldPickHUDOperator) { _shouldPickHUDOperator = shouldPickHUDOperator; } void setCalculatePos2DFromHUDOperator(std::function calculatePos2DFromHUDOperator) { _calculatePos2DFromHUDOperator = calculatePos2DFromHUDOperator; } @@ -41,9 +41,12 @@ protected: std::function _shouldPickHUDOperator; std::function _calculatePos2DFromHUDOperator; - std::shared_ptr findPick(const QUuid& uid) const; - QHash>> _picks; - QHash _typeMap; + std::shared_ptr findPick(unsigned int uid) const; + QHash>> _picks; + QHash _typeMap; + // 0 = invalid + const unsigned int FIRST_PICK_ID { 1 }; + unsigned int _nextPickID { FIRST_PICK_ID }; PickCacheOptimizer _rayPickCacheOptimizer; }; diff --git a/libraries/pointers/src/pointers/Pointer.cpp b/libraries/pointers/src/pointers/Pointer.cpp index 90518ed965..f57bded5ad 100644 --- a/libraries/pointers/src/pointers/Pointer.cpp +++ b/libraries/pointers/src/pointers/Pointer.cpp @@ -46,16 +46,16 @@ void Pointer::setIncludeItems(const QVector& includeItems) const { DependencyManager::get()->setIncludeItems(_pickUID, includeItems); } -void Pointer::update() { +void Pointer::update(unsigned int pointerID) { // This only needs to be a read lock because update won't change any of the properties that can be modified from scripts withReadLock([&] { QVariantMap pickResult = getPrevPickResult(); updateVisuals(pickResult); - generatePointerEvents(pickResult); + generatePointerEvents(pointerID, pickResult); }); } -void Pointer::generatePointerEvents(const QVariantMap& pickResult) { +void Pointer::generatePointerEvents(unsigned int pointerID, const QVariantMap& pickResult) { // TODO: avatars? auto pointerManager = DependencyManager::get(); @@ -63,6 +63,7 @@ void Pointer::generatePointerEvents(const QVariantMap& pickResult) { Pointer::PickedObject hoveredObject = getHoveredObject(pickResult); PointerEvent hoveredEvent = buildPointerEvent(hoveredObject, pickResult); hoveredEvent.setType(PointerEvent::Move); + hoveredEvent.setID(pointerID); // TODO: set buttons on hover events hoveredEvent.setButton(PointerEvent::NoButtons); if (_enabled && _hover && shouldHover()) { @@ -72,6 +73,7 @@ void Pointer::generatePointerEvents(const QVariantMap& pickResult) { emit pointerManager->hoverContinueOverlay(hoveredObject.objectID, hoveredEvent); } else { PointerEvent prevHoveredEvent = buildPointerEvent(_prevHoveredObject, pickResult); + prevHoveredEvent.setID(pointerID); emit pointerManager->hoverEndOverlay(_prevHoveredObject.objectID, prevHoveredEvent); emit pointerManager->hoverBeginOverlay(hoveredObject.objectID, hoveredEvent); } @@ -92,6 +94,7 @@ void Pointer::generatePointerEvents(const QVariantMap& pickResult) { emit pointerManager->hoverContinueEntity(hoveredObject.objectID, hoveredEvent); } else { PointerEvent prevHoveredEvent = buildPointerEvent(_prevHoveredObject, pickResult); + prevHoveredEvent.setID(pointerID); emit pointerManager->hoverEndEntity(_prevHoveredObject.objectID, prevHoveredEvent); emit pointerManager->hoverBeginEntity(hoveredObject.objectID, hoveredEvent); } @@ -153,10 +156,13 @@ void Pointer::generatePointerEvents(const QVariantMap& pickResult) { } _triggeredObjects[button] = hoveredObject; } + // We still want other trigger events for Focus buttons, but they only set focus on triggerBegin + hoveredEvent.setShouldFocus(false); // Trigger continue for (const std::string& button : sameButtons) { PointerEvent triggeredEvent = buildPointerEvent(_triggeredObjects[button], pickResult); + triggeredEvent.setID(pointerID); triggeredEvent.setType(PointerEvent::Move); hoveredEvent.setButton(chooseButton(button)); if (_triggeredObjects[button].type == ENTITY) { @@ -171,6 +177,7 @@ void Pointer::generatePointerEvents(const QVariantMap& pickResult) { // Trigger end for (const std::string& button : _prevButtons) { PointerEvent triggeredEvent = buildPointerEvent(_triggeredObjects[button], pickResult); + triggeredEvent.setID(pointerID); triggeredEvent.setType(PointerEvent::Release); hoveredEvent.setButton(chooseButton(button)); if (_triggeredObjects[button].type == ENTITY) { diff --git a/libraries/pointers/src/pointers/Pointer.h b/libraries/pointers/src/pointers/Pointer.h index b8294cd2f6..fc43e121f0 100644 --- a/libraries/pointers/src/pointers/Pointer.h +++ b/libraries/pointers/src/pointers/Pointer.h @@ -38,7 +38,7 @@ using PointerTriggers = std::vector; class Pointer : protected ReadWriteLockable { public: - Pointer(const QUuid& uid, bool enabled, bool hover) : _pickUID(uid), _enabled(enabled), _hover(hover) {} + Pointer(unsigned int uid, bool enabled, bool hover) : _pickUID(uid), _enabled(enabled), _hover(hover) {} virtual ~Pointer(); @@ -57,9 +57,9 @@ public: virtual void setLength(float length) {} virtual void setLockEndUUID(const QUuid& objectID, bool isOverlay) {} - void update(); + void update(unsigned int pointerID); virtual void updateVisuals(const QVariantMap& pickResult) = 0; - void generatePointerEvents(const QVariantMap& pickResult); + void generatePointerEvents(unsigned int pointerID, const QVariantMap& pickResult); struct PickedObject { PickedObject() {} @@ -71,10 +71,10 @@ public: using Buttons = std::unordered_set; - QUuid getRayUID() { return _pickUID; } + unsigned int getRayUID() { return _pickUID; } protected: - const QUuid _pickUID; + const unsigned int _pickUID; bool _enabled; bool _hover; diff --git a/libraries/pointers/src/pointers/PointerManager.cpp b/libraries/pointers/src/pointers/PointerManager.cpp index 2d41543b6b..b6d826c6f1 100644 --- a/libraries/pointers/src/pointers/PointerManager.cpp +++ b/libraries/pointers/src/pointers/PointerManager.cpp @@ -8,7 +8,7 @@ #include "PointerManager.h" -std::shared_ptr PointerManager::find(const QUuid& uid) const { +std::shared_ptr PointerManager::find(unsigned int uid) const { return resultWithReadLock>([&] { auto itr = _pointers.find(uid); if (itr != _pointers.end()) { @@ -18,50 +18,55 @@ std::shared_ptr PointerManager::find(const QUuid& uid) const { }); } -QUuid PointerManager::addPointer(std::shared_ptr pointer) { - QUuid result; - if (!pointer->getRayUID().isNull()) { - result = QUuid::createUuid(); - withWriteLock([&] { _pointers[result] = pointer; }); +unsigned int PointerManager::addPointer(std::shared_ptr pointer) { + unsigned int result = 0; + if (pointer->getRayUID() > 0) { + withWriteLock([&] { + // Don't let the pointer IDs overflow + if (_nextPointerID < UINT32_MAX) { + result = _nextPointerID++; + _pointers[result] = pointer; + } + }); } return result; } -void PointerManager::removePointer(const QUuid& uid) { +void PointerManager::removePointer(unsigned int uid) { withWriteLock([&] { _pointers.remove(uid); }); } -void PointerManager::enablePointer(const QUuid& uid) const { +void PointerManager::enablePointer(unsigned int uid) const { auto pointer = find(uid); if (pointer) { pointer->enable(); } } -void PointerManager::disablePointer(const QUuid& uid) const { +void PointerManager::disablePointer(unsigned int uid) const { auto pointer = find(uid); if (pointer) { pointer->disable(); } } -void PointerManager::setRenderState(const QUuid& uid, const std::string& renderState) const { +void PointerManager::setRenderState(unsigned int uid, const std::string& renderState) const { auto pointer = find(uid); if (pointer) { pointer->setRenderState(renderState); } } -void PointerManager::editRenderState(const QUuid& uid, const std::string& state, const QVariant& startProps, const QVariant& pathProps, const QVariant& endProps) const { +void PointerManager::editRenderState(unsigned int uid, const std::string& state, const QVariant& startProps, const QVariant& pathProps, const QVariant& endProps) const { auto pointer = find(uid); if (pointer) { pointer->editRenderState(state, startProps, pathProps, endProps); } } -const QVariantMap PointerManager::getPrevPickResult(const QUuid& uid) const { +const QVariantMap PointerManager::getPrevPickResult(unsigned int uid) const { auto pointer = find(uid); if (pointer) { return pointer->getPrevPickResult(); @@ -70,44 +75,44 @@ const QVariantMap PointerManager::getPrevPickResult(const QUuid& uid) const { } void PointerManager::update() { - auto cachedPointers = resultWithReadLock>>([&] { - return _pointers.values(); + auto cachedPointers = resultWithReadLock>>([&] { + return _pointers; }); - for (const auto& pointer : cachedPointers) { - pointer->update(); + for (const auto& uid : cachedPointers.keys()) { + cachedPointers[uid]->update(uid); } } -void PointerManager::setPrecisionPicking(const QUuid& uid, bool precisionPicking) const { +void PointerManager::setPrecisionPicking(unsigned int uid, bool precisionPicking) const { auto pointer = find(uid); if (pointer) { pointer->setPrecisionPicking(precisionPicking); } } -void PointerManager::setIgnoreItems(const QUuid& uid, const QVector& ignoreEntities) const { +void PointerManager::setIgnoreItems(unsigned int uid, const QVector& ignoreEntities) const { auto pointer = find(uid); if (pointer) { pointer->setIgnoreItems(ignoreEntities); } } -void PointerManager::setIncludeItems(const QUuid& uid, const QVector& includeEntities) const { +void PointerManager::setIncludeItems(unsigned int uid, const QVector& includeEntities) const { auto pointer = find(uid); if (pointer) { pointer->setIncludeItems(includeEntities); } } -void PointerManager::setLength(const QUuid& uid, float length) const { +void PointerManager::setLength(unsigned int uid, float length) const { auto pointer = find(uid); if (pointer) { pointer->setLength(length); } } -void PointerManager::setLockEndUUID(const QUuid& uid, const QUuid& objectID, bool isOverlay) const { +void PointerManager::setLockEndUUID(unsigned int uid, const QUuid& objectID, bool isOverlay) const { auto pointer = find(uid); if (pointer) { pointer->setLockEndUUID(objectID, isOverlay); diff --git a/libraries/pointers/src/pointers/PointerManager.h b/libraries/pointers/src/pointers/PointerManager.h index 574be8320a..fcb347fb82 100644 --- a/libraries/pointers/src/pointers/PointerManager.h +++ b/libraries/pointers/src/pointers/PointerManager.h @@ -23,26 +23,28 @@ class PointerManager : public QObject, public Dependency, protected ReadWriteLoc public: PointerManager() {} - QUuid addPointer(std::shared_ptr pointer); - void removePointer(const QUuid& uid); - void enablePointer(const QUuid& uid) const; - void disablePointer(const QUuid& uid) const; - void setRenderState(const QUuid& uid, const std::string& renderState) const; - void editRenderState(const QUuid& uid, const std::string& state, const QVariant& startProps, const QVariant& pathProps, const QVariant& endProps) const; - const QVariantMap getPrevPickResult(const QUuid& uid) const; + unsigned int addPointer(std::shared_ptr pointer); + void removePointer(unsigned int uid); + void enablePointer(unsigned int uid) const; + void disablePointer(unsigned int uid) const; + void setRenderState(unsigned int uid, const std::string& renderState) const; + void editRenderState(unsigned int uid, const std::string& state, const QVariant& startProps, const QVariant& pathProps, const QVariant& endProps) const; + const QVariantMap getPrevPickResult(unsigned int uid) const; - void setPrecisionPicking(const QUuid& uid, bool precisionPicking) const; - void setIgnoreItems(const QUuid& uid, const QVector& ignoreEntities) const; - void setIncludeItems(const QUuid& uid, const QVector& includeEntities) const; + void setPrecisionPicking(unsigned int uid, bool precisionPicking) const; + void setIgnoreItems(unsigned int uid, const QVector& ignoreEntities) const; + void setIncludeItems(unsigned int uid, const QVector& includeEntities) const; - void setLength(const QUuid& uid, float length) const; - void setLockEndUUID(const QUuid& uid, const QUuid& objectID, bool isOverlay) const; + void setLength(unsigned int uid, float length) const; + void setLockEndUUID(unsigned int uid, const QUuid& objectID, bool isOverlay) const; void update(); private: - std::shared_ptr find(const QUuid& uid) const; - QHash> _pointers; + std::shared_ptr find(unsigned int uid) const; + QHash> _pointers; + // 0 = invalid, 1 = reserved for system mouse + unsigned int _nextPointerID { 2 }; signals: void triggerBeginOverlay(const QUuid& id, const PointerEvent& pointerEvent); diff --git a/libraries/shared/src/PointerEvent.h b/libraries/shared/src/PointerEvent.h index d3b72f072c..239e7c6e4e 100644 --- a/libraries/shared/src/PointerEvent.h +++ b/libraries/shared/src/PointerEvent.h @@ -57,6 +57,7 @@ public: Qt::KeyboardModifiers getKeyboardModifiers() const { return _keyboardModifiers; } bool shouldFocus() const { return _shouldFocus; } + void setID(uint32_t id) { _id = id; } void setType(EventType type) { _type = type; } void setButton(Button button); void setShouldFocus(bool focus) { _shouldFocus = focus; } diff --git a/libraries/ui/src/ui/OffscreenQmlSurface.cpp b/libraries/ui/src/ui/OffscreenQmlSurface.cpp index 3363a47092..204986090c 100644 --- a/libraries/ui/src/ui/OffscreenQmlSurface.cpp +++ b/libraries/ui/src/ui/OffscreenQmlSurface.cpp @@ -959,7 +959,7 @@ void OffscreenQmlSurface::handlePointerEvent(const QUuid& id, const PointerEvent return; } - QEvent::Type type; + QEvent::Type type = QEvent::Type::MouseMove; switch (event.getType()) { case PointerEvent::Press: type = QEvent::Type::MouseButtonPress; @@ -973,6 +973,8 @@ void OffscreenQmlSurface::handlePointerEvent(const QUuid& id, const PointerEvent case PointerEvent::Move: type = QEvent::Type::MouseMove; break; + default: + break; } QPointF screenPos(event.getPos2D().x, event.getPos2D().y); QMouseEvent mouseEvent(type, screenPos, Qt::MouseButton(event.getButton()), Qt::MouseButtons(event.getButtons()), event.getKeyboardModifiers());