This commit is contained in:
Zach Fox 2017-08-22 15:02:06 -07:00
parent 2a75d97006
commit ec2a27e68c
5 changed files with 96 additions and 8 deletions

View file

@ -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<ContextOverlayInterface>();
DependencyManager::set<Ledger>();
DependencyManager::set<Wallet>();
DependencyManager::set<ItemHighlightScriptingInterface>(qApp);
DependencyManager::set<LaserPointerScriptingInterface>();
DependencyManager::set<RayPickScriptingInterface>();

View file

@ -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";
}
}

View file

@ -12,17 +12,36 @@
#ifndef hifi_ItemHighlightScriptingInterface_h
#define hifi_ItemHighlightScriptingInterface_h
class ItemHighlightScriptingInterface : public Dependency {
#include <QtCore/QObject>
#include <DependencyManager.h>
#include <AbstractViewStateInterface.h>
#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

View file

@ -27,6 +27,7 @@ ContextOverlayInterface::ContextOverlayInterface() {
_entityScriptingInterface = DependencyManager::get<EntityScriptingInterface>();
_hmdScriptingInterface = DependencyManager::get<HMDScriptingInterface>();
_tabletScriptingInterface = DependencyManager::get<TabletScriptingInterface>();
_itemHighlightScriptingInterface = DependencyManager::get<ItemHighlightScriptingInterface>();
_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) {

View file

@ -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> _hmdScriptingInterface;
QSharedPointer<TabletScriptingInterface> _tabletScriptingInterface;
QSharedPointer<ItemHighlightScriptingInterface> _itemHighlightScriptingInterface;
OverlayID _contextOverlayID { UNKNOWN_OVERLAY_ID };
std::shared_ptr<Image3DOverlay> _contextOverlay { nullptr };
public: