Skip to content

Commit 89c3fa8

Browse files
committed
Allow remapping to/from triggers, fix default remappings not being applied
1 parent cfe4288 commit 89c3fa8

File tree

3 files changed

+57
-9
lines changed

3 files changed

+57
-9
lines changed

Xb2XInput/Xb2XInput.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -399,6 +399,9 @@ std::unordered_map<std::string, int> xinput_buttons =
399399

400400
{ "START", XUSB_GAMEPAD_START },
401401
{ "BACK", XUSB_GAMEPAD_BACK },
402+
403+
{ "WHITE", XUSB_GAMEPAD_LEFT_SHOULDER },
404+
{ "BLACK", XUSB_GAMEPAD_RIGHT_SHOULDER }
402405
};
403406

404407
std::string PrintButtonCombination(int combo)

Xb2XInput/Xb2XInput.rc

0 Bytes
Binary file not shown.

Xb2XInput/XboxController.cpp

Lines changed: 54 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,9 @@ UserSettings XboxController::LoadSettings(const std::string& ini_key, const User
171171
if (defaults.remap_enabled)
172172
ret.button_remap = defaults.button_remap;
173173

174-
if (GetSettingBool("RemapEnable", defaults.remap_enabled, ini_key))
174+
ret.remap_enabled = GetSettingBool("RemapEnable", defaults.remap_enabled, ini_key);
175+
176+
if (ret.remap_enabled)
175177
{
176178
std::string remap;
177179

@@ -201,6 +203,8 @@ UserSettings XboxController::LoadSettings(const std::string& ini_key, const User
201203
LoadMap(DpadDown);
202204
LoadMap(DpadLeft);
203205
LoadMap(DpadRight);
206+
LoadMap(LT);
207+
LoadMap(RT);
204208

205209
#undef LoadMap
206210
}
@@ -535,19 +539,33 @@ bool XboxController::update()
535539
gamepad_.wButtons |= input_prev_.Gamepad.bAnalogButtons[OGXINPUT_GAMEPAD_WHITE] ? XUSB_GAMEPAD_LEFT_SHOULDER : 0;
536540
gamepad_.wButtons |= input_prev_.Gamepad.bAnalogButtons[OGXINPUT_GAMEPAD_BLACK] ? XUSB_GAMEPAD_RIGHT_SHOULDER : 0;
537541

542+
// Trigger Deadzone Calculations
543+
short triggerbuf;
544+
deadZoneCalc(&triggerbuf, NULL, input_prev_.Gamepad.bAnalogButtons[OGXINPUT_GAMEPAD_LEFT_TRIGGER], 0, settings_.deadzone.bLeftTrigger, 0xFF);
545+
gamepad_.bLeftTrigger = triggerbuf;
546+
deadZoneCalc(&triggerbuf, NULL, input_prev_.Gamepad.bAnalogButtons[OGXINPUT_GAMEPAD_RIGHT_TRIGGER], 0, settings_.deadzone.bRightTrigger, 0xFF);
547+
gamepad_.bRightTrigger = triggerbuf;
548+
538549
if (settings_.button_remap.size())
539550
{
540551
auto buttons = gamepad_.wButtons;
541552
gamepad_.wButtons = 0;
542553

554+
auto leftTrig = gamepad_.bLeftTrigger;
555+
auto rightTrig = gamepad_.bRightTrigger;
556+
543557
// TODO: could probably change this into a loop over XUSB_BUTTON enum instead of a macro?
544558
#define LoadMap(btn) \
545559
if (buttons & XUSB_GAMEPAD_##btn) \
546560
{ \
547561
auto remap = (int)XUSB_GAMEPAD_##btn; \
548562
if (settings_.button_remap.count(XUSB_GAMEPAD_##btn)) \
549563
remap = settings_.button_remap[XUSB_GAMEPAD_##btn]; \
550-
gamepad_.wButtons |= remap; \
564+
gamepad_.wButtons |= (remap & ~(XUSB_GAMEPAD_LT | XUSB_GAMEPAD_RT)); \
565+
if (remap & XUSB_GAMEPAD_LT) \
566+
gamepad_.bLeftTrigger = 255; \
567+
if (remap & XUSB_GAMEPAD_RT) \
568+
gamepad_.bRightTrigger = 255; \
551569
}
552570

553571
LoadMap(A);
@@ -565,6 +583,40 @@ bool XboxController::update()
565583
LoadMap(DpadLeft);
566584
LoadMap(DpadRight);
567585
#undef LoadMap
586+
587+
if (leftTrig >= 8)
588+
{
589+
if (settings_.button_remap.count(XUSB_GAMEPAD_LT))
590+
{
591+
gamepad_.bLeftTrigger = 0;
592+
593+
auto remap = settings_.button_remap[XUSB_GAMEPAD_LT];
594+
gamepad_.wButtons |= (remap & ~(XUSB_GAMEPAD_LT | XUSB_GAMEPAD_RT));
595+
596+
if (remap & XUSB_GAMEPAD_LT)
597+
gamepad_.bLeftTrigger = leftTrig;
598+
599+
if (remap & XUSB_GAMEPAD_RT)
600+
gamepad_.bRightTrigger = leftTrig;
601+
}
602+
}
603+
604+
if (rightTrig >= 8)
605+
{
606+
if (settings_.button_remap.count(XUSB_GAMEPAD_RT))
607+
{
608+
gamepad_.bRightTrigger = 0;
609+
610+
auto remap = settings_.button_remap[XUSB_GAMEPAD_RT];
611+
gamepad_.wButtons |= (remap & ~(XUSB_GAMEPAD_LT | XUSB_GAMEPAD_RT));
612+
613+
if (remap & XUSB_GAMEPAD_LT)
614+
gamepad_.bLeftTrigger = rightTrig;
615+
616+
if (remap & XUSB_GAMEPAD_RT)
617+
gamepad_.bRightTrigger = rightTrig;
618+
}
619+
}
568620
}
569621

570622
// Secret Deadzone Adjustment Combinations:
@@ -623,13 +675,6 @@ bool XboxController::update()
623675
deadZoneCalc(&gamepad_.sThumbLX, &gamepad_.sThumbLY, input_prev_.Gamepad.sThumbLX, input_prev_.Gamepad.sThumbLY, settings_.deadzone.sThumbL, SHRT_MAX);
624676
deadZoneCalc(&gamepad_.sThumbRX, &gamepad_.sThumbRY, input_prev_.Gamepad.sThumbRX, input_prev_.Gamepad.sThumbRY, settings_.deadzone.sThumbR, SHRT_MAX);
625677

626-
// Trigger Deadzone Calculations
627-
short triggerbuf;
628-
deadZoneCalc(&triggerbuf, NULL, input_prev_.Gamepad.bAnalogButtons[OGXINPUT_GAMEPAD_LEFT_TRIGGER], 0, settings_.deadzone.bLeftTrigger, 0xFF);
629-
gamepad_.bLeftTrigger = triggerbuf;
630-
deadZoneCalc(&triggerbuf, NULL, input_prev_.Gamepad.bAnalogButtons[OGXINPUT_GAMEPAD_RIGHT_TRIGGER], 0, settings_.deadzone.bRightTrigger, 0xFF);
631-
gamepad_.bRightTrigger = triggerbuf;
632-
633678
// Create a 'digital' bitfield so we can test combinations against LT/RT
634679
int digitalPressed = gamepad_.wButtons;
635680
if (gamepad_.bLeftTrigger >= 0x8)

0 commit comments

Comments
 (0)