mirror of
https://github.com/HifiExperiments/overte.git
synced 2025-07-10 20:07:22 +02:00
Make view/rotation control independent of touchUpdate events rate
This commit is contained in:
parent
1a967e45a6
commit
bd6f0fd59e
3 changed files with 13 additions and 4 deletions
|
@ -10,7 +10,7 @@
|
||||||
{ "from": "TouchscreenVirtualPad.RX", "when": "!Application.CameraIndependent",
|
{ "from": "TouchscreenVirtualPad.RX", "when": "!Application.CameraIndependent",
|
||||||
"filters": [
|
"filters": [
|
||||||
{ "type": "deadZone", "min": 0.000 },
|
{ "type": "deadZone", "min": 0.000 },
|
||||||
{ "type": "scale", "scale": 0.014175 },
|
{ "type": "scale", "scale": 0.06 },
|
||||||
"invert"
|
"invert"
|
||||||
],
|
],
|
||||||
"to": "Actions.Yaw"
|
"to": "Actions.Yaw"
|
||||||
|
@ -19,7 +19,7 @@
|
||||||
{ "from": "TouchscreenVirtualPad.RY", "when": "!Application.CameraIndependent",
|
{ "from": "TouchscreenVirtualPad.RY", "when": "!Application.CameraIndependent",
|
||||||
"filters": [
|
"filters": [
|
||||||
{ "type": "deadZone", "min": 0.000 },
|
{ "type": "deadZone", "min": 0.000 },
|
||||||
{ "type": "scale", "scale": 0.014175 },
|
{ "type": "scale", "scale": 0.06 },
|
||||||
"invert"
|
"invert"
|
||||||
],
|
],
|
||||||
"to": "Actions.Pitch"
|
"to": "Actions.Pitch"
|
||||||
|
|
|
@ -41,6 +41,7 @@ bool TouchscreenVirtualPadDevice::isSupported() const {
|
||||||
|
|
||||||
void TouchscreenVirtualPadDevice::init() {
|
void TouchscreenVirtualPadDevice::init() {
|
||||||
_fixedPosition = true; // This should be config
|
_fixedPosition = true; // This should be config
|
||||||
|
_viewTouchUpdateCount = 0;
|
||||||
|
|
||||||
QScreen* eventScreen = qApp->primaryScreen();
|
QScreen* eventScreen = qApp->primaryScreen();
|
||||||
if (_screenDPIProvided != eventScreen->physicalDotsPerInch()) {
|
if (_screenDPIProvided != eventScreen->physicalDotsPerInch()) {
|
||||||
|
@ -137,10 +138,15 @@ void TouchscreenVirtualPadDevice::processInputDeviceForMove(VirtualPad::Manager&
|
||||||
}
|
}
|
||||||
|
|
||||||
void TouchscreenVirtualPadDevice::processInputDeviceForView() {
|
void TouchscreenVirtualPadDevice::processInputDeviceForView() {
|
||||||
_inputDevice->_axisStateMap[controller::RX] = _viewCurrentTouchPoint.x - _viewRefTouchPoint.x;
|
// We use average across how many times we've got touchUpdate events.
|
||||||
_inputDevice->_axisStateMap[controller::RY] = _viewCurrentTouchPoint.y - _viewRefTouchPoint.y;
|
// Using the average instead of the full deltaX and deltaY, makes deltaTime in MyAvatar dont't accelerate rotation when there is a low touchUpdate rate (heavier domains).
|
||||||
|
// (Because it multiplies this input value by deltaTime (with a coefficient)).
|
||||||
|
_inputDevice->_axisStateMap[controller::RX] = _viewTouchUpdateCount==0?0:(_viewCurrentTouchPoint.x - _viewRefTouchPoint.x)/_viewTouchUpdateCount++;
|
||||||
|
_inputDevice->_axisStateMap[controller::RY] = _viewTouchUpdateCount==0?0:(_viewCurrentTouchPoint.y - _viewRefTouchPoint.y)/_viewTouchUpdateCount++;
|
||||||
|
|
||||||
// after use, save last touch point as ref
|
// after use, save last touch point as ref
|
||||||
_viewRefTouchPoint = _viewCurrentTouchPoint;
|
_viewRefTouchPoint = _viewCurrentTouchPoint;
|
||||||
|
_viewTouchUpdateCount = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void TouchscreenVirtualPadDevice::pluginUpdate(float deltaTime, const controller::InputCalibrationData& inputCalibrationData) {
|
void TouchscreenVirtualPadDevice::pluginUpdate(float deltaTime, const controller::InputCalibrationData& inputCalibrationData) {
|
||||||
|
@ -427,12 +433,14 @@ void TouchscreenVirtualPadDevice::viewTouchBegin(glm::vec2 touchPoint) {
|
||||||
if (virtualPadManager.isEnabled() && !virtualPadManager.isHidden()) {
|
if (virtualPadManager.isEnabled() && !virtualPadManager.isHidden()) {
|
||||||
_viewRefTouchPoint = touchPoint;
|
_viewRefTouchPoint = touchPoint;
|
||||||
_viewCurrentTouchPoint = touchPoint;
|
_viewCurrentTouchPoint = touchPoint;
|
||||||
|
_viewTouchUpdateCount++;
|
||||||
_viewHasValidTouch = true;
|
_viewHasValidTouch = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void TouchscreenVirtualPadDevice::viewTouchUpdate(glm::vec2 touchPoint) {
|
void TouchscreenVirtualPadDevice::viewTouchUpdate(glm::vec2 touchPoint) {
|
||||||
_viewCurrentTouchPoint = touchPoint;
|
_viewCurrentTouchPoint = touchPoint;
|
||||||
|
_viewTouchUpdateCount++;
|
||||||
}
|
}
|
||||||
|
|
||||||
void TouchscreenVirtualPadDevice::viewTouchEnd() {
|
void TouchscreenVirtualPadDevice::viewTouchEnd() {
|
||||||
|
|
|
@ -41,6 +41,7 @@ public:
|
||||||
|
|
||||||
static const char* NAME;
|
static const char* NAME;
|
||||||
|
|
||||||
|
int _viewTouchUpdateCount;
|
||||||
enum TouchAxisChannel {
|
enum TouchAxisChannel {
|
||||||
LX,
|
LX,
|
||||||
LY,
|
LY,
|
||||||
|
|
Loading…
Reference in a new issue