From ec2a27e68c1f22917038c3b7bb9d395e323a9c6e Mon Sep 17 00:00:00 2001 From: Zach Fox Date: Tue, 22 Aug 2017 15:02:06 -0700 Subject: [PATCH] Progress --- interface/src/Application.cpp | 2 + .../ItemHighlightScriptingInterface.cpp | 68 ++++++++++++++++++- .../ItemHighlightScriptingInterface.h | 27 ++++++-- .../ui/overlays/ContextOverlayInterface.cpp | 5 +- .../src/ui/overlays/ContextOverlayInterface.h | 2 + 5 files changed, 96 insertions(+), 8 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 65929228bb..06a33983fc 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -166,6 +166,7 @@ #include "scripting/WindowScriptingInterface.h" #include "scripting/ControllerScriptingInterface.h" #include "scripting/RatesScriptingInterface.h" +#include "scripting/ItemHighlightScriptingInterface.h" #if defined(Q_OS_MAC) || defined(Q_OS_WIN) #include "SpeechRecognizer.h" #endif @@ -611,6 +612,7 @@ bool setupEssentials(int& argc, char** argv, bool runningMarkerExisted) { DependencyManager::set(); DependencyManager::set(); DependencyManager::set(); + DependencyManager::set(qApp); DependencyManager::set(); DependencyManager::set(); diff --git a/interface/src/scripting/ItemHighlightScriptingInterface.cpp b/interface/src/scripting/ItemHighlightScriptingInterface.cpp index 4f59c71beb..1b808b3691 100644 --- a/interface/src/scripting/ItemHighlightScriptingInterface.cpp +++ b/interface/src/scripting/ItemHighlightScriptingInterface.cpp @@ -10,7 +10,71 @@ // #include "ItemHighlightScriptingInterface.h" +#include "Application.h" -ItemHighlightScriptingInterface::ItemHighlightScriptingInterface() { - +ItemHighlightScriptingInterface::ItemHighlightScriptingInterface(AbstractViewStateInterface* viewState) { + _viewState = viewState; +} + +bool ItemHighlightScriptingInterface::addToHighlightedItemsList(const EntityItemID& entityID) { + auto entityTree = qApp->getEntities()->getTree(); + entityTree->withReadLock([&] { + auto entityItem = entityTree->findEntityByEntityItemID(entityID); + if ((entityItem != NULL)) { + addToHighlightedItemsList(entityItem->getRenderItemID()); + } + }); +} +bool ItemHighlightScriptingInterface::removeFromHighlightedItemsList(const EntityItemID& entityID) { +} + +bool ItemHighlightScriptingInterface::addToHighlightedItemsList(const OverlayID& overlayID) { + auto& overlays = qApp->getOverlays(); + auto overlay = overlays.getOverlay(overlayID); + if (overlay != NULL) { + auto itemID = overlay->getRenderItemID(); + if (itemID != render::Item::INVALID_ITEM_ID) { + addToHighlightedItemsList(overlay->getRenderItemID()); + } + } +} +bool ItemHighlightScriptingInterface::removeFromHighlightedItemsList(const OverlayID& overlayID) { + auto& overlays = qApp->getOverlays(); + auto overlay = overlays.getOverlay(overlayID); + if (overlay != NULL) { + auto itemID = overlay->getRenderItemID(); + if (itemID != render::Item::INVALID_ITEM_ID) { + removeFromHighlightedItemsList(overlay->getRenderItemID()); + } + } +} + +bool ItemHighlightScriptingInterface::addToHighlightedItemsList(render::ItemID idToAdd) { + _highlightedItemsList.push_back(idToAdd); + updateRendererHighlightList(); + return true; +} +bool ItemHighlightScriptingInterface::removeFromHighlightedItemsList(render::ItemID idToRemove) { + auto itr = std::find(_highlightedItemsList.begin(), _highlightedItemsList.end(), idToRemove); + if (itr == _highlightedItemsList.end()) { + return false; + } else { + _highlightedItemsList.erase(itr); + updateRendererHighlightList(); + return true; + } +} + +void ItemHighlightScriptingInterface::updateRendererHighlightList() { + auto scene = _viewState->getMain3DScene(); + if (scene) { + render::Transaction transaction; + + render::Selection selection("Highlight", _highlightedItemsList); + transaction.resetSelection(selection); + + scene->enqueueTransaction(transaction); + } else { + qWarning() << "ItemHighlightScriptingInterface::updateRendererHighlightList(), Unexpected null scene, possibly during application shutdown"; + } } diff --git a/interface/src/scripting/ItemHighlightScriptingInterface.h b/interface/src/scripting/ItemHighlightScriptingInterface.h index a6b7d33be5..ad5e9db83e 100644 --- a/interface/src/scripting/ItemHighlightScriptingInterface.h +++ b/interface/src/scripting/ItemHighlightScriptingInterface.h @@ -12,17 +12,36 @@ #ifndef hifi_ItemHighlightScriptingInterface_h #define hifi_ItemHighlightScriptingInterface_h -class ItemHighlightScriptingInterface : public Dependency { +#include +#include + +#include + +#include "EntityItemID.h" +#include "ui/overlays/Overlay.h" + +class ItemHighlightScriptingInterface : public QObject, public Dependency { Q_OBJECT public: + ItemHighlightScriptingInterface(AbstractViewStateInterface* viewState); -signals: + Q_INVOKABLE bool addToHighlightedItemsList(const EntityItemID& entityID); + Q_INVOKABLE bool removeFromHighlightedItemsList(const EntityItemID& entityID); + + Q_INVOKABLE bool addToHighlightedItemsList(const OverlayID& overlayID); + Q_INVOKABLE bool removeFromHighlightedItemsList(const OverlayID& overlayID); -public: - ItemHighlightScriptingInterface(); +//signals: private: + AbstractViewStateInterface* _viewState; + render::ItemIDs _highlightedItemsList; + + bool addToHighlightedItemsList(render::ItemID idToAdd); + bool removeFromHighlightedItemsList(render::ItemID idToRemove); + + void updateRendererHighlightList(); }; #endif // hifi_ItemHighlightScriptingInterface_h diff --git a/interface/src/ui/overlays/ContextOverlayInterface.cpp b/interface/src/ui/overlays/ContextOverlayInterface.cpp index 00c99f3d51..79447e8f4c 100644 --- a/interface/src/ui/overlays/ContextOverlayInterface.cpp +++ b/interface/src/ui/overlays/ContextOverlayInterface.cpp @@ -27,6 +27,7 @@ ContextOverlayInterface::ContextOverlayInterface() { _entityScriptingInterface = DependencyManager::get(); _hmdScriptingInterface = DependencyManager::get(); _tabletScriptingInterface = DependencyManager::get(); + _itemHighlightScriptingInterface = DependencyManager::get(); _entityPropertyFlags += PROP_POSITION; _entityPropertyFlags += PROP_ROTATION; @@ -260,11 +261,11 @@ void ContextOverlayInterface::openMarketplace() { } void ContextOverlayInterface::enableEntityHighlight(const EntityItemID& entityItemID) { - + _itemHighlightScriptingInterface->addToHighlightedItemsList(entityItemID); } void ContextOverlayInterface::disableEntityHighlight(const EntityItemID& entityItemID) { - + _itemHighlightScriptingInterface->removeFromHighlightedItemsList(entityItemID); } void ContextOverlayInterface::deletingEntity(const EntityItemID& entityID) { diff --git a/interface/src/ui/overlays/ContextOverlayInterface.h b/interface/src/ui/overlays/ContextOverlayInterface.h index b386de08cc..ccfd675e64 100644 --- a/interface/src/ui/overlays/ContextOverlayInterface.h +++ b/interface/src/ui/overlays/ContextOverlayInterface.h @@ -25,6 +25,7 @@ #include "ui/overlays/Image3DOverlay.h" #include "ui/overlays/Overlays.h" #include "scripting/HMDScriptingInterface.h" +#include "scripting/ItemHighlightScriptingInterface.h" #include "EntityTree.h" #include "ContextOverlayLogging.h" @@ -42,6 +43,7 @@ class ContextOverlayInterface : public QObject, public Dependency { EntityPropertyFlags _entityPropertyFlags; QSharedPointer _hmdScriptingInterface; QSharedPointer _tabletScriptingInterface; + QSharedPointer _itemHighlightScriptingInterface; OverlayID _contextOverlayID { UNKNOWN_OVERLAY_ID }; std::shared_ptr _contextOverlay { nullptr }; public: