@@ -171,7 +171,9 @@ UserSettings XboxController::LoadSettings(const std::string& ini_key, const User
171
171
if (defaults.remap_enabled )
172
172
ret.button_remap = defaults.button_remap ;
173
173
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 )
175
177
{
176
178
std::string remap;
177
179
@@ -201,6 +203,8 @@ UserSettings XboxController::LoadSettings(const std::string& ini_key, const User
201
203
LoadMap (DpadDown);
202
204
LoadMap (DpadLeft);
203
205
LoadMap (DpadRight);
206
+ LoadMap (LT);
207
+ LoadMap (RT);
204
208
205
209
#undef LoadMap
206
210
}
@@ -535,19 +539,33 @@ bool XboxController::update()
535
539
gamepad_.wButtons |= input_prev_.Gamepad .bAnalogButtons [OGXINPUT_GAMEPAD_WHITE] ? XUSB_GAMEPAD_LEFT_SHOULDER : 0 ;
536
540
gamepad_.wButtons |= input_prev_.Gamepad .bAnalogButtons [OGXINPUT_GAMEPAD_BLACK] ? XUSB_GAMEPAD_RIGHT_SHOULDER : 0 ;
537
541
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
+
538
549
if (settings_.button_remap .size ())
539
550
{
540
551
auto buttons = gamepad_.wButtons ;
541
552
gamepad_.wButtons = 0 ;
542
553
554
+ auto leftTrig = gamepad_.bLeftTrigger ;
555
+ auto rightTrig = gamepad_.bRightTrigger ;
556
+
543
557
// TODO: could probably change this into a loop over XUSB_BUTTON enum instead of a macro?
544
558
#define LoadMap (btn ) \
545
559
if (buttons & XUSB_GAMEPAD_##btn) \
546
560
{ \
547
561
auto remap = (int )XUSB_GAMEPAD_##btn; \
548
562
if (settings_.button_remap .count (XUSB_GAMEPAD_##btn)) \
549
563
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 ; \
551
569
}
552
570
553
571
LoadMap (A);
@@ -565,6 +583,40 @@ bool XboxController::update()
565
583
LoadMap (DpadLeft);
566
584
LoadMap (DpadRight);
567
585
#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
+ }
568
620
}
569
621
570
622
// Secret Deadzone Adjustment Combinations:
@@ -623,13 +675,6 @@ bool XboxController::update()
623
675
deadZoneCalc (&gamepad_.sThumbLX , &gamepad_.sThumbLY , input_prev_.Gamepad .sThumbLX , input_prev_.Gamepad .sThumbLY , settings_.deadzone .sThumbL , SHRT_MAX);
624
676
deadZoneCalc (&gamepad_.sThumbRX , &gamepad_.sThumbRY , input_prev_.Gamepad .sThumbRX , input_prev_.Gamepad .sThumbRY , settings_.deadzone .sThumbR , SHRT_MAX);
625
677
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
-
633
678
// Create a 'digital' bitfield so we can test combinations against LT/RT
634
679
int digitalPressed = gamepad_.wButtons ;
635
680
if (gamepad_.bLeftTrigger >= 0x8 )
0 commit comments