@@ -277,11 +277,12 @@ void XInputController::setJoystick(XInputControl joy, int32_t x, int32_t y) {
277277 setJoystickDirect (joy, x, y);
278278}
279279
280- void XInputController::setJoystickX (XInputControl joy, int32_t x) {
280+ void XInputController::setJoystickX (XInputControl joy, int32_t x, boolean invert ) {
281281 const XInputMap_Joystick * joyData = getJoyFromEnum (joy);
282282 if (joyData == nullptr ) return ; // Not a joystick
283283
284284 x = rescaleInput (x, *getRangeFromEnum (joy), XInputMap_Joystick::range);
285+ if (invert) x = invertInput (x, XInputMap_Joystick::range);
285286
286287 if (getJoystickX (joy) == x) return ; // Axis hasn't changed
287288
@@ -292,11 +293,12 @@ void XInputController::setJoystickX(XInputControl joy, int32_t x) {
292293 autosend ();
293294}
294295
295- void XInputController::setJoystickY (XInputControl joy, int32_t y) {
296+ void XInputController::setJoystickY (XInputControl joy, int32_t y, boolean invert ) {
296297 const XInputMap_Joystick * joyData = getJoyFromEnum (joy);
297298 if (joyData == nullptr ) return ; // Not a joystick
298299
299300 y = rescaleInput (y, *getRangeFromEnum (joy), XInputMap_Joystick::range);
301+ if (invert) y = invertInput (y, XInputMap_Joystick::range);
300302
301303 if (getJoystickY (joy) == y) return ; // Axis hasn't changed
302304
@@ -521,6 +523,10 @@ int32_t XInputController::rescaleInput(int32_t val, const Range& in, const Range
521523 return map (val, in.min , in.max , out.min , out.max );
522524}
523525
526+ int16_t XInputController::invertInput (int16_t val, const Range& range) {
527+ return range.max - val + range.min ;
528+ }
529+
524530void XInputController::setTriggerRange (int32_t rangeMin, int32_t rangeMax) {
525531 setRange (TRIGGER_LEFT, rangeMin, rangeMax);
526532 setRange (TRIGGER_RIGHT, rangeMin, rangeMax);
0 commit comments