From 5d4cbfdacba62c81fb14df4c58e0b7dbffc8dfec Mon Sep 17 00:00:00 2001 From: Brad Davis Date: Thu, 22 Oct 2015 09:40:41 -0700 Subject: [PATCH] Resolving ambiguity between functions and inputs differently --- examples/tests/controllerInterfaceTest.js | 35 ++++++++++--------- interface/resources/qml/TestControllers.qml | 17 ++++----- .../controllers/impl/MappingBuilderProxy.cpp | 22 ++++++------ .../controllers/impl/MappingBuilderProxy.h | 9 ++--- .../controllers/impl/RouteBuilderProxy.cpp | 10 ++---- .../src/controllers/impl/RouteBuilderProxy.h | 7 ++-- 6 files changed, 49 insertions(+), 51 deletions(-) diff --git a/examples/tests/controllerInterfaceTest.js b/examples/tests/controllerInterfaceTest.js index 35a92daa6b..a4e0557c78 100644 --- a/examples/tests/controllerInterfaceTest.js +++ b/examples/tests/controllerInterfaceTest.js @@ -17,9 +17,9 @@ ControllerTest = function() { this.mapping.from(standard.RB).pulse(0.10).scale(15.0).to(actions.StepYaw); } - var testFunctionSource = false; + var testFunctionSource = true; if (testFunctionSource) { - this.mapping.fromFunction(function(){ + this.mapping.from(function(){ return Math.sin(Date.now() / 250); }).to(actions.Yaw); } @@ -27,22 +27,25 @@ ControllerTest = function() { this.mapping.enable(); this.mappingEnabled = true; - print("Actions"); - for (var prop in Controller.Actions) { - print("\t" + prop); - } - print("Standard"); - for (var prop in Controller.Standard) { - print("\t" + prop); - } - print("Hardware"); - for (var prop in Controller.Hardware) { - print("\t" + prop); - for (var prop2 in Controller.Hardware[prop]) { - print("\t\t" + prop2); + var dumpInputs = false; + if (dumpInputs) { + print("Actions"); + for (var prop in Controller.Actions) { + print("\t" + prop); } + print("Standard"); + for (var prop in Controller.Standard) { + print("\t" + prop); + } + print("Hardware"); + for (var prop in Controller.Hardware) { + print("\t" + prop); + for (var prop2 in Controller.Hardware[prop]) { + print("\t\t" + prop2); + } + } + print("Done"); } - print("Done"); var that = this; Script.scriptEnding.connect(function() { diff --git a/interface/resources/qml/TestControllers.qml b/interface/resources/qml/TestControllers.qml index f967b8bf9c..a21735b3cc 100644 --- a/interface/resources/qml/TestControllers.qml +++ b/interface/resources/qml/TestControllers.qml @@ -25,15 +25,15 @@ HifiControls.VrDialog { function buildMapping() { testMapping = Controller.newMapping(); - testMapping.from(standard.RY).invert().to(actions.Pitch); - testMapping.fromQmlFunction(function(){ + testMapping.fromQml(standard.RY).invert().toQml(actions.Pitch); + testMapping.fromQml(function(){ return Math.sin(Date.now() / 250); - }).to(actions.Yaw); + }).toQml(actions.Yaw); //testMapping.makeAxis(standard.LB, standard.RB).to(actions.Yaw); // Step yaw takes a number of degrees - testMapping.from(standard.LB).pulse(0.10).invert().scale(40.0).to(actions.StepYaw); - testMapping.from(standard.RB).pulse(0.10).scale(15.0).to(actions.StepYaw); - testMapping.from(standard.RX).scale(15.0).to(actions.StepYaw); + testMapping.fromQml(standard.LB).pulse(0.10).invert().scale(40.0).toQml(actions.StepYaw); + testMapping.fromQml(standard.RB).pulse(0.10).scale(15.0).toQml(actions.StepYaw); + testMapping.fromQml(standard.RX).scale(15.0).toQml(actions.StepYaw); } function toggleMapping() { @@ -91,8 +91,9 @@ HifiControls.VrDialog { Hydra { device: root.hydra; width: 180 } } - Row { - spacing: 8 + Grid { + columns: 6 + spacing: 4 ScrollingGraph { controlId: Controller.Actions.Yaw label: "Yaw" diff --git a/libraries/controllers/src/controllers/impl/MappingBuilderProxy.cpp b/libraries/controllers/src/controllers/impl/MappingBuilderProxy.cpp index 91b11115d9..1af3f271be 100644 --- a/libraries/controllers/src/controllers/impl/MappingBuilderProxy.cpp +++ b/libraries/controllers/src/controllers/impl/MappingBuilderProxy.cpp @@ -20,19 +20,13 @@ using namespace controller; -QObject* MappingBuilderProxy::from(int input) { - qCDebug(controllers) << "Creating new Route builder proxy from " << input; - auto sourceEndpoint = _parent.endpointFor(Input(input)); - return from(sourceEndpoint); -} - -QObject* MappingBuilderProxy::fromQmlFunction(const QJSValue& source) { +QObject* MappingBuilderProxy::fromQml(const QJSValue& source) { qCDebug(controllers) << "Creating new Route builder proxy from " << source.toString(); auto sourceEndpoint = _parent.endpointFor(source); return from(sourceEndpoint); } -QObject* MappingBuilderProxy::fromFunction(const QScriptValue& source) { +QObject* MappingBuilderProxy::from(const QScriptValue& source) { qCDebug(controllers) << "Creating new Route builder proxy from " << source.toString(); auto sourceEndpoint = _parent.endpointFor(source); return from(sourceEndpoint); @@ -49,9 +43,15 @@ QObject* MappingBuilderProxy::from(const Endpoint::Pointer& source) { } } -QObject* MappingBuilderProxy::makeAxis(int source1, int source2) { - auto source1Endpoint = _parent.endpointFor(Input(source1)); - auto source2Endpoint = _parent.endpointFor(Input(source2)); +QObject* MappingBuilderProxy::makeAxisQml(const QJSValue& source1, const QJSValue& source2) { + auto source1Endpoint = _parent.endpointFor(source1); + auto source2Endpoint = _parent.endpointFor(source2); + return from(_parent.compositeEndpointFor(source1Endpoint, source2Endpoint)); +} + +QObject* MappingBuilderProxy::makeAxis(const QScriptValue& source1, const QScriptValue& source2) { + auto source1Endpoint = _parent.endpointFor(source1); + auto source2Endpoint = _parent.endpointFor(source2); return from(_parent.compositeEndpointFor(source1Endpoint, source2Endpoint)); } diff --git a/libraries/controllers/src/controllers/impl/MappingBuilderProxy.h b/libraries/controllers/src/controllers/impl/MappingBuilderProxy.h index 06ffcd8ea3..93aa022647 100644 --- a/libraries/controllers/src/controllers/impl/MappingBuilderProxy.h +++ b/libraries/controllers/src/controllers/impl/MappingBuilderProxy.h @@ -32,10 +32,11 @@ public: MappingBuilderProxy(UserInputMapper& parent, Mapping::Pointer mapping) : _parent(parent), _mapping(mapping) { } - Q_INVOKABLE QObject* from(int sourceInput); - Q_INVOKABLE QObject* fromQmlFunction(const QJSValue& source); - Q_INVOKABLE QObject* fromFunction(const QScriptValue& source); - Q_INVOKABLE QObject* makeAxis(int source1, const int source2); + Q_INVOKABLE QObject* fromQml(const QJSValue& source); + Q_INVOKABLE QObject* makeAxisQml(const QJSValue& source1, const QJSValue& source2); + + Q_INVOKABLE QObject* from(const QScriptValue& source); + Q_INVOKABLE QObject* makeAxis(const QScriptValue& source1, const QScriptValue& source2); Q_INVOKABLE QObject* enable(bool enable = true); Q_INVOKABLE QObject* disable() { return enable(false); } diff --git a/libraries/controllers/src/controllers/impl/RouteBuilderProxy.cpp b/libraries/controllers/src/controllers/impl/RouteBuilderProxy.cpp index 14bcbca80e..186cf2e84e 100644 --- a/libraries/controllers/src/controllers/impl/RouteBuilderProxy.cpp +++ b/libraries/controllers/src/controllers/impl/RouteBuilderProxy.cpp @@ -20,13 +20,7 @@ using namespace controller; -void RouteBuilderProxy::to(int destinationInput) { - qCDebug(controllers) << "Completing route " << destinationInput; - auto destinationEndpoint = _parent.endpointFor(Input(destinationInput)); - return to(destinationEndpoint); -} - -void RouteBuilderProxy::to(const QJSValue& destination) { +void RouteBuilderProxy::toQml(const QJSValue& destination) { qCDebug(controllers) << "Completing route " << destination.toString(); auto destinationEndpoint = _parent.endpointFor(destination); return to(destinationEndpoint); @@ -45,7 +39,7 @@ void RouteBuilderProxy::to(const Endpoint::Pointer& destination) { deleteLater(); } -QObject* RouteBuilderProxy::filter(const QJSValue& expression) { +QObject* RouteBuilderProxy::filterQml(const QJSValue& expression) { if (expression.isCallable()) { addFilter([=](float value) { QJSValue originalExpression = expression; diff --git a/libraries/controllers/src/controllers/impl/RouteBuilderProxy.h b/libraries/controllers/src/controllers/impl/RouteBuilderProxy.h index 1b66a3d996..6bceba995a 100644 --- a/libraries/controllers/src/controllers/impl/RouteBuilderProxy.h +++ b/libraries/controllers/src/controllers/impl/RouteBuilderProxy.h @@ -31,11 +31,10 @@ class RouteBuilderProxy : public QObject { RouteBuilderProxy(UserInputMapper& parent, Mapping::Pointer mapping, Route::Pointer route) : _parent(parent), _mapping(mapping), _route(route) { } - Q_INVOKABLE void to(int destination); - Q_INVOKABLE void to(const QJSValue& destination); - Q_INVOKABLE void to(const QScriptValue& destination); + Q_INVOKABLE void toQml(const QJSValue& destination); + Q_INVOKABLE QObject* filterQml(const QJSValue& expression); - Q_INVOKABLE QObject* filter(const QJSValue& expression); + Q_INVOKABLE void to(const QScriptValue& destination); Q_INVOKABLE QObject* filter(const QScriptValue& expression); Q_INVOKABLE QObject* clamp(float min, float max); Q_INVOKABLE QObject* pulse(float interval);