diff options
author | Stanislaw Halik <sthalik@misaki.pl> | 2016-11-03 11:11:46 +0100 |
---|---|---|
committer | Stanislaw Halik <sthalik@misaki.pl> | 2016-11-03 11:12:03 +0100 |
commit | e26830bf71ca5968fc9d9d473966ea4b75120b56 (patch) | |
tree | 27ade992facd45b2746b167dc031adfd96537035 /tracker-joystick | |
parent | 2dc57da89cdc56a61ec8da1c7fa7770448f3d3f6 (diff) |
logic/tracker, dinput, tracker/joystick: fix rounding errors
Issue: #487
Reported-by: @H-Bear-22
Closes #487
Also use a power of two for joy_axis_size. Floats are base 2.
axis_max in tracker/joystick had a fencepost error.
Diffstat (limited to 'tracker-joystick')
-rw-r--r-- | tracker-joystick/ftnoir_tracker_joystick.cpp | 8 | ||||
-rw-r--r-- | tracker-joystick/ftnoir_tracker_joystick.h | 2 |
2 files changed, 6 insertions, 4 deletions
diff --git a/tracker-joystick/ftnoir_tracker_joystick.cpp b/tracker-joystick/ftnoir_tracker_joystick.cpp index 263a5cb0..fff060d6 100644 --- a/tracker-joystick/ftnoir_tracker_joystick.cpp +++ b/tracker-joystick/ftnoir_tracker_joystick.cpp @@ -5,6 +5,7 @@ * copyright notice and this permission notice appear in all copies. */ #include "ftnoir_tracker_joystick.h" +#include "compat/util.hpp" #include "api/plugin-api.hpp" #include <QMutexLocker> @@ -48,11 +49,11 @@ void FTNoIR_Tracker::data(double *data) 180, 180 }; - + const QString guid = s.guid; int axes[8]; const bool ret = joy_ctx.poll_axis(guid, axes); - + if (ret) { for (int i = 0; i < 6; i++) @@ -61,7 +62,8 @@ void FTNoIR_Tracker::data(double *data) if (k < 0 || k >= 8) data[i] = 0; else - data[i] = axes[k] * limits[i] / AXIS_MAX; + data[i] = clamp(axes[k] * limits[i] / AXIS_MAX, + -limits[i], limits[i]); } } } diff --git a/tracker-joystick/ftnoir_tracker_joystick.h b/tracker-joystick/ftnoir_tracker_joystick.h index 0af1444e..a7e8fddd 100644 --- a/tracker-joystick/ftnoir_tracker_joystick.h +++ b/tracker-joystick/ftnoir_tracker_joystick.h @@ -45,7 +45,7 @@ public: void data(double *data); settings s; QString guid; - static constexpr int AXIS_MAX = win32_joy_ctx::joy_axis_size - 1; + static constexpr int AXIS_MAX = win32_joy_ctx::joy_axis_size; win32_joy_ctx joy_ctx; }; |