From 89c3fa8d49092dd575c52f8288eff892cd2e37bb Mon Sep 17 00:00:00 2001 From: emoose Date: Mon, 1 Feb 2021 08:29:17 +0000 Subject: [PATCH] Allow remapping to/from triggers, fix default remappings not being applied --- Xb2XInput/Xb2XInput.cpp | 3 ++ Xb2XInput/Xb2XInput.rc | Bin 6452 -> 6452 bytes Xb2XInput/XboxController.cpp | 63 ++++++++++++++++++++++++++++++----- 3 files changed, 57 insertions(+), 9 deletions(-) diff --git a/Xb2XInput/Xb2XInput.cpp b/Xb2XInput/Xb2XInput.cpp index 8094db5..4b28f8f 100644 --- a/Xb2XInput/Xb2XInput.cpp +++ b/Xb2XInput/Xb2XInput.cpp @@ -399,6 +399,9 @@ std::unordered_map xinput_buttons = { "START", XUSB_GAMEPAD_START }, { "BACK", XUSB_GAMEPAD_BACK }, + + { "WHITE", XUSB_GAMEPAD_LEFT_SHOULDER }, + { "BLACK", XUSB_GAMEPAD_RIGHT_SHOULDER } }; std::string PrintButtonCombination(int combo) diff --git a/Xb2XInput/Xb2XInput.rc b/Xb2XInput/Xb2XInput.rc index e31e3c548d14ab3006e40f2d88051686e36209c2..ea9f2ec85b8f63d1a1f361d092326138a9e7e265 100644 GIT binary patch delta 72 zcmdmDw8dz{JAPJE1|0^&$)EXkA*{`+0_T}HO&RnU41w5SvZIjhWG&%sjE0*Z3d=L1 MNQiG%5EWqo0IAdvr~m)} delta 72 zcmdmDw8dz{JAPIZ1|0^2$)EXkA*{`+0_T}HO&IhT3_y6Yqmb@oE#Ym92AdxW%QK=# Lh;LR96=4AYsAUkJ diff --git a/Xb2XInput/XboxController.cpp b/Xb2XInput/XboxController.cpp index 838e681..7d81ecf 100644 --- a/Xb2XInput/XboxController.cpp +++ b/Xb2XInput/XboxController.cpp @@ -171,7 +171,9 @@ UserSettings XboxController::LoadSettings(const std::string& ini_key, const User if (defaults.remap_enabled) ret.button_remap = defaults.button_remap; - if (GetSettingBool("RemapEnable", defaults.remap_enabled, ini_key)) + ret.remap_enabled = GetSettingBool("RemapEnable", defaults.remap_enabled, ini_key); + + if (ret.remap_enabled) { std::string remap; @@ -201,6 +203,8 @@ UserSettings XboxController::LoadSettings(const std::string& ini_key, const User LoadMap(DpadDown); LoadMap(DpadLeft); LoadMap(DpadRight); + LoadMap(LT); + LoadMap(RT); #undef LoadMap } @@ -535,11 +539,21 @@ bool XboxController::update() gamepad_.wButtons |= input_prev_.Gamepad.bAnalogButtons[OGXINPUT_GAMEPAD_WHITE] ? XUSB_GAMEPAD_LEFT_SHOULDER : 0; gamepad_.wButtons |= input_prev_.Gamepad.bAnalogButtons[OGXINPUT_GAMEPAD_BLACK] ? XUSB_GAMEPAD_RIGHT_SHOULDER : 0; + // Trigger Deadzone Calculations + short triggerbuf; + deadZoneCalc(&triggerbuf, NULL, input_prev_.Gamepad.bAnalogButtons[OGXINPUT_GAMEPAD_LEFT_TRIGGER], 0, settings_.deadzone.bLeftTrigger, 0xFF); + gamepad_.bLeftTrigger = triggerbuf; + deadZoneCalc(&triggerbuf, NULL, input_prev_.Gamepad.bAnalogButtons[OGXINPUT_GAMEPAD_RIGHT_TRIGGER], 0, settings_.deadzone.bRightTrigger, 0xFF); + gamepad_.bRightTrigger = triggerbuf; + if (settings_.button_remap.size()) { auto buttons = gamepad_.wButtons; gamepad_.wButtons = 0; + auto leftTrig = gamepad_.bLeftTrigger; + auto rightTrig = gamepad_.bRightTrigger; + // TODO: could probably change this into a loop over XUSB_BUTTON enum instead of a macro? #define LoadMap(btn) \ if (buttons & XUSB_GAMEPAD_##btn) \ @@ -547,7 +561,11 @@ bool XboxController::update() auto remap = (int)XUSB_GAMEPAD_##btn; \ if (settings_.button_remap.count(XUSB_GAMEPAD_##btn)) \ remap = settings_.button_remap[XUSB_GAMEPAD_##btn]; \ - gamepad_.wButtons |= remap; \ + gamepad_.wButtons |= (remap & ~(XUSB_GAMEPAD_LT | XUSB_GAMEPAD_RT)); \ + if (remap & XUSB_GAMEPAD_LT) \ + gamepad_.bLeftTrigger = 255; \ + if (remap & XUSB_GAMEPAD_RT) \ + gamepad_.bRightTrigger = 255; \ } LoadMap(A); @@ -565,6 +583,40 @@ bool XboxController::update() LoadMap(DpadLeft); LoadMap(DpadRight); #undef LoadMap + + if (leftTrig >= 8) + { + if (settings_.button_remap.count(XUSB_GAMEPAD_LT)) + { + gamepad_.bLeftTrigger = 0; + + auto remap = settings_.button_remap[XUSB_GAMEPAD_LT]; + gamepad_.wButtons |= (remap & ~(XUSB_GAMEPAD_LT | XUSB_GAMEPAD_RT)); + + if (remap & XUSB_GAMEPAD_LT) + gamepad_.bLeftTrigger = leftTrig; + + if (remap & XUSB_GAMEPAD_RT) + gamepad_.bRightTrigger = leftTrig; + } + } + + if (rightTrig >= 8) + { + if (settings_.button_remap.count(XUSB_GAMEPAD_RT)) + { + gamepad_.bRightTrigger = 0; + + auto remap = settings_.button_remap[XUSB_GAMEPAD_RT]; + gamepad_.wButtons |= (remap & ~(XUSB_GAMEPAD_LT | XUSB_GAMEPAD_RT)); + + if (remap & XUSB_GAMEPAD_LT) + gamepad_.bLeftTrigger = rightTrig; + + if (remap & XUSB_GAMEPAD_RT) + gamepad_.bRightTrigger = rightTrig; + } + } } // Secret Deadzone Adjustment Combinations: @@ -623,13 +675,6 @@ bool XboxController::update() deadZoneCalc(&gamepad_.sThumbLX, &gamepad_.sThumbLY, input_prev_.Gamepad.sThumbLX, input_prev_.Gamepad.sThumbLY, settings_.deadzone.sThumbL, SHRT_MAX); deadZoneCalc(&gamepad_.sThumbRX, &gamepad_.sThumbRY, input_prev_.Gamepad.sThumbRX, input_prev_.Gamepad.sThumbRY, settings_.deadzone.sThumbR, SHRT_MAX); - // Trigger Deadzone Calculations - short triggerbuf; - deadZoneCalc(&triggerbuf, NULL, input_prev_.Gamepad.bAnalogButtons[OGXINPUT_GAMEPAD_LEFT_TRIGGER], 0, settings_.deadzone.bLeftTrigger, 0xFF); - gamepad_.bLeftTrigger = triggerbuf; - deadZoneCalc(&triggerbuf, NULL, input_prev_.Gamepad.bAnalogButtons[OGXINPUT_GAMEPAD_RIGHT_TRIGGER], 0, settings_.deadzone.bRightTrigger, 0xFF); - gamepad_.bRightTrigger = triggerbuf; - // Create a 'digital' bitfield so we can test combinations against LT/RT int digitalPressed = gamepad_.wButtons; if (gamepad_.bLeftTrigger >= 0x8)