From 37f530f97f37c3985f77b65b626148a613abf3a5 Mon Sep 17 00:00:00 2001 From: Brad Hefta-Gaub Date: Fri, 9 Oct 2015 16:15:29 -0700 Subject: [PATCH] first cut at wiring up devices and inputs to JS --- interface/src/devices/DeviceTracker.h | 4 +++- .../ControllerScriptingInterface.cpp | 24 ++++++++++++++++++- .../scripting/ControllerScriptingInterface.h | 5 +++- .../src/input-plugins/UserInputMapper.h | 7 ++++-- .../AbstractControllerScriptingInterface.h | 4 +++- 5 files changed, 38 insertions(+), 6 deletions(-) diff --git a/interface/src/devices/DeviceTracker.h b/interface/src/devices/DeviceTracker.h index b28e22b06d..543e9bab1a 100644 --- a/interface/src/devices/DeviceTracker.h +++ b/interface/src/devices/DeviceTracker.h @@ -91,6 +91,9 @@ public: /// Get the name assigned to the Device when registered after creation, or "Unknown" if it hasn't been registered which should not happen. const Name& getName() const { return _name; } + typedef std::map< Name, ID > Map; + static const Map& getDevices() { return Singleton::get()->_devicesMap; } + protected: DeviceTracker(); virtual ~DeviceTracker(); @@ -103,7 +106,6 @@ private: void assignIDAndName( const ID id, const Name& name ) { _ID = id; _name = name; } typedef std::vector< DeviceTracker* > Vector; - typedef std::map< Name, ID > Map; struct SingletonData { Map _devicesMap; Vector _devicesVector; diff --git a/interface/src/scripting/ControllerScriptingInterface.cpp b/interface/src/scripting/ControllerScriptingInterface.cpp index 6f36a6267f..1c05ae1087 100644 --- a/interface/src/scripting/ControllerScriptingInterface.cpp +++ b/interface/src/scripting/ControllerScriptingInterface.cpp @@ -111,7 +111,7 @@ void inputPairFromScriptValue(const QScriptValue& object, UserInputMapper::Input inputPair.second = QString(object.property("inputName").toVariant().toString()); } -void ControllerScriptingInterface::registerControllerTypes(QScriptEngine* engine) { +void ControllerScriptingInterface::registerControllerTypes(ScriptEngine* engine) { qScriptRegisterSequenceMetaType >(engine); qScriptRegisterSequenceMetaType >(engine); qScriptRegisterSequenceMetaType >(engine); @@ -119,6 +119,8 @@ void ControllerScriptingInterface::registerControllerTypes(QScriptEngine* engine qScriptRegisterMetaType(engine, inputChannelToScriptValue, inputChannelFromScriptValue); qScriptRegisterMetaType(engine, inputToScriptValue, inputFromScriptValue); qScriptRegisterMetaType(engine, inputPairToScriptValue, inputPairFromScriptValue); + + wireUpControllers(engine); } void ControllerScriptingInterface::handleMetaEvent(HFMetaEvent* event) { @@ -381,6 +383,26 @@ glm::vec2 ControllerScriptingInterface::getViewportDimensions() const { return qApp->getUiSize(); } +void ControllerScriptingInterface::wireUpControllers(ScriptEngine* engine) { + + qDebug() << "------------------- wire up controllers --------------------------"; + ///_registeredDevices + + auto devices = DependencyManager::get()->getDevices(); + + for(const auto& deviceMapping : devices) { + auto device = deviceMapping.second.get(); + qDebug() << device->getName(); + auto deviceInputs = device->getAvailabeInputs(); + for (const auto& inputMapping : deviceInputs) { + auto input = inputMapping.first; + auto inputName = inputMapping.second; + qDebug() << device->getName() << "." << inputName << "["<< input.getID() <<"]"; + } + } + qDebug() << "------------------- DONE wire up controllers --------------------------"; +} + AbstractInputController* ControllerScriptingInterface::createInputController(const QString& deviceName, const QString& tracker) { // This is where we retreive the Device Tracker category and then the sub tracker within it //TODO C++11 auto icIt = _inputControllers.find(0); diff --git a/interface/src/scripting/ControllerScriptingInterface.h b/interface/src/scripting/ControllerScriptingInterface.h index 6956619bf0..1cb6fdb981 100644 --- a/interface/src/scripting/ControllerScriptingInterface.h +++ b/interface/src/scripting/ControllerScriptingInterface.h @@ -56,7 +56,7 @@ class ControllerScriptingInterface : public AbstractControllerScriptingInterface public: ControllerScriptingInterface(); - virtual void registerControllerTypes(QScriptEngine* engine); + virtual void registerControllerTypes(ScriptEngine* engine); void emitKeyPressEvent(QKeyEvent* event) { emit keyPressEvent(KeyEvent(*event)); } void emitKeyReleaseEvent(QKeyEvent* event) { emit keyReleaseEvent(KeyEvent(*event)); } @@ -164,6 +164,9 @@ private: typedef std::map< AbstractInputController::Key, AbstractInputController* > InputControllerMap; InputControllerMap _inputControllers; + + void wireUpControllers(ScriptEngine* engine); + }; const int NUMBER_OF_SPATIALCONTROLS_PER_PALM = 2; // the hand and the tip diff --git a/libraries/input-plugins/src/input-plugins/UserInputMapper.h b/libraries/input-plugins/src/input-plugins/UserInputMapper.h index 2657f335a0..1ad4294e0c 100755 --- a/libraries/input-plugins/src/input-plugins/UserInputMapper.h +++ b/libraries/input-plugins/src/input-plugins/UserInputMapper.h @@ -109,7 +109,8 @@ public: class DeviceProxy { public: DeviceProxy(QString name) { _name = name; } - + const QString& getName() const { return _name; } + QString _name; ButtonGetter getButton = [] (const Input& input, int timestamp) -> bool { return false; }; AxisGetter getAxis = [] (const Input& input, int timestamp) -> float { return 0.0f; }; @@ -234,12 +235,14 @@ public: UserInputMapper(); + typedef std::map DevicesMap; + DevicesMap getDevices() { return _registeredDevices; } + signals: void actionEvent(int action, float state); protected: - typedef std::map DevicesMap; DevicesMap _registeredDevices; uint16 _nextFreeDeviceID = 1; diff --git a/libraries/script-engine/src/AbstractControllerScriptingInterface.h b/libraries/script-engine/src/AbstractControllerScriptingInterface.h index b44e13f012..d6a6b51b62 100644 --- a/libraries/script-engine/src/AbstractControllerScriptingInterface.h +++ b/libraries/script-engine/src/AbstractControllerScriptingInterface.h @@ -24,6 +24,8 @@ #include "TouchEvent.h" #include "WheelEvent.h" +class ScriptEngine; + class AbstractInputController : public QObject { Q_OBJECT @@ -52,7 +54,7 @@ class AbstractControllerScriptingInterface : public QObject { Q_OBJECT public slots: - virtual void registerControllerTypes(QScriptEngine* engine) = 0; + virtual void registerControllerTypes(ScriptEngine* engine) = 0; virtual bool isPrimaryButtonPressed() const = 0; virtual glm::vec2 getPrimaryJoystickPosition() const = 0;