From b87a07a7d09cb3fe56f8c84019351910c4481054 Mon Sep 17 00:00:00 2001 From: Cristian Luis Duarte Date: Mon, 12 Mar 2018 14:55:20 -0300 Subject: [PATCH] Android - Improve View controller making it like a drag rather than like a joystick (reference touch is updated at every frame and is not only the initial touch anymore) --- interface/resources/controllers/touchscreenvirtualpad.json | 2 +- .../src/input-plugins/TouchscreenVirtualPadDevice.cpp | 6 +++++- .../src/input-plugins/TouchscreenVirtualPadDevice.h | 2 +- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/interface/resources/controllers/touchscreenvirtualpad.json b/interface/resources/controllers/touchscreenvirtualpad.json index 772bbff39a..907ff8b403 100644 --- a/interface/resources/controllers/touchscreenvirtualpad.json +++ b/interface/resources/controllers/touchscreenvirtualpad.json @@ -7,6 +7,6 @@ { "from": "TouchscreenVirtualPad.RX", "when": "!Application.CameraIndependent", "filters": [ {"type": "deadZone", "min": 0.05} , "invert" ], "to": "Actions.Yaw" }, - { "from": "TouchscreenVirtualPad.RY", "when": "!Application.CameraIndependent", "filters": [ "invert" ], "to": "Actions.Pitch" } + { "from": "TouchscreenVirtualPad.RY", "when": "!Application.CameraIndependent", "filters": [ {"type": "deadZone", "min": 0.05}, "invert" ], "to": "Actions.Pitch" } ] } diff --git a/libraries/input-plugins/src/input-plugins/TouchscreenVirtualPadDevice.cpp b/libraries/input-plugins/src/input-plugins/TouchscreenVirtualPadDevice.cpp index 2bc5d374af..7f9caf193a 100644 --- a/libraries/input-plugins/src/input-plugins/TouchscreenVirtualPadDevice.cpp +++ b/libraries/input-plugins/src/input-plugins/TouchscreenVirtualPadDevice.cpp @@ -138,10 +138,13 @@ void TouchscreenVirtualPadDevice::processInputDeviceForView() { // NOW BETWEEN -1 1 rightDistanceScaleX /= STICK_RADIUS_INCHES; - rightDistanceScaleY /= STICK_RADIUS_INCHES*2; // pitch is slower + rightDistanceScaleY /= STICK_RADIUS_INCHES; _inputDevice->_axisStateMap[controller::RX] = rightDistanceScaleX; _inputDevice->_axisStateMap[controller::RY] = rightDistanceScaleY; + + // after use, save last touch point as ref + _viewRefTouchPoint = _viewCurrentTouchPoint; } void TouchscreenVirtualPadDevice::pluginUpdate(float deltaTime, const controller::InputCalibrationData& inputCalibrationData) { @@ -343,6 +346,7 @@ void TouchscreenVirtualPadDevice::viewTouchBegin(glm::vec2 touchPoint) { auto& virtualPadManager = VirtualPad::Manager::instance(); if (virtualPadManager.isEnabled() && !virtualPadManager.isHidden()) { _viewRefTouchPoint = touchPoint; + _viewCurrentTouchPoint = touchPoint; _viewHasValidTouch = true; } } diff --git a/libraries/input-plugins/src/input-plugins/TouchscreenVirtualPadDevice.h b/libraries/input-plugins/src/input-plugins/TouchscreenVirtualPadDevice.h index a25f0db7b1..3f94dfef07 100644 --- a/libraries/input-plugins/src/input-plugins/TouchscreenVirtualPadDevice.h +++ b/libraries/input-plugins/src/input-plugins/TouchscreenVirtualPadDevice.h @@ -20,7 +20,7 @@ class QTouchEvent; class QGestureEvent; -const float STICK_RADIUS_INCHES = 1.0f; +const float STICK_RADIUS_INCHES = .3f; class TouchscreenVirtualPadDevice : public InputPlugin { Q_OBJECT