diff options
| author | SND\dario86_cp <SND\dario86_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97> | 2011-03-10 17:31:02 +0000 |
|---|---|---|
| committer | SND\dario86_cp <SND\dario86_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97> | 2011-03-10 17:31:02 +0000 |
| commit | c257b2ba811853191944c69da7e3fee2870504e2 (patch) | |
| tree | be5ba1b152105a65601d795cb296468a25051ec2 /plugins/dfinput | |
| parent | 8ee251f1379ffab7d0fd914429e834ae672afc57 (diff) | |
| download | pcsxr-c257b2ba811853191944c69da7e3fee2870504e2.tar.gz | |
Fixed reopened issue #8061 (by darktjm).
git-svn-id: https://pcsxr.svn.codeplex.com/svn/pcsxr@64391 e17a0e51-4ae3-4d35-97c3-1a29b211df97
Diffstat (limited to 'plugins/dfinput')
| -rw-r--r-- | plugins/dfinput/sdljoy.c | 36 |
1 files changed, 28 insertions, 8 deletions
diff --git a/plugins/dfinput/sdljoy.c b/plugins/dfinput/sdljoy.c index ff4ed467..750f26bb 100644 --- a/plugins/dfinput/sdljoy.c +++ b/plugins/dfinput/sdljoy.c @@ -53,6 +53,26 @@ void DestroySDLJoy() { } } +static void bdown(int pad, int bit) +{ + if(bit < 16) + g.PadState[pad].JoyKeyStatus &= ~(1 << bit); + else if(bit == DKEY_ANALOG) { + if(++g.PadState[pad].PadModeKey == 10) + g.PadState[pad].PadModeSwitch = 1; + else if(g.PadState[pad].PadModeKey > 10) + g.PadState[pad].PadModeKey = 11; + } +} + +static void bup(int pad, int bit) +{ + if(bit < 16) + g.PadState[pad].JoyKeyStatus |= (1 << bit); + else if(bit == DKEY_ANALOG) + g.PadState[pad].PadModeKey = 0; +} + void CheckJoy() { uint8_t i, j, n; @@ -70,15 +90,15 @@ void CheckJoy() { if (g.cfg.PadDef[i].KeyDef[j].J.Axis > 0) { if (SDL_JoystickGetAxis(g.PadState[i].JoyDev, n) > 16383) { - g.PadState[i].JoyKeyStatus &= ~(1 << j); + bdown(i, j); } else { - g.PadState[i].JoyKeyStatus |= (1 << j); + bup(i, j); } } else if (g.cfg.PadDef[i].KeyDef[j].J.Axis < 0) { if (SDL_JoystickGetAxis(g.PadState[i].JoyDev, n) < -16383) { - g.PadState[i].JoyKeyStatus &= ~(1 << j); + bdown(i, j); } else { - g.PadState[i].JoyKeyStatus |= (1 << j); + bup(i, j); } } break; @@ -87,17 +107,17 @@ void CheckJoy() { n = (g.cfg.PadDef[i].KeyDef[j].J.Hat >> 8); if (SDL_JoystickGetHat(g.PadState[i].JoyDev, n) & (g.cfg.PadDef[i].KeyDef[j].J.Hat & 0xFF)) { - g.PadState[i].JoyKeyStatus &= ~(1 << j); + bdown(i, j); } else { - g.PadState[i].JoyKeyStatus |= (1 << j); + bup(i, j); } break; case BUTTON: if (SDL_JoystickGetButton(g.PadState[i].JoyDev, g.cfg.PadDef[i].KeyDef[j].J.Button)) { - g.PadState[i].JoyKeyStatus &= ~(1 << j); + bdown(i, j); } else { - g.PadState[i].JoyKeyStatus |= (1 << j); + bup(i, j); } break; |
