X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fgui%2Fgamepad.cpp;h=8706e17643667499b39d8fe78caed6190898181a;hb=c436dad60e34fb9da720a89db917eb4cf4e3a624;hp=6ca2329a02cf20ab737bdca253cdc37bb7552f43;hpb=5c28b6dbf7aa20441c8a51f484f4f64b1966f7e3;p=virtualjaguar diff --git a/src/gui/gamepad.cpp b/src/gui/gamepad.cpp index 6ca2329..8706e17 100644 --- a/src/gui/gamepad.cpp +++ b/src/gui/gamepad.cpp @@ -18,10 +18,13 @@ // Class member initialization /*static*/ int Gamepad::numJoysticks = 0; /*static*/ SDL_Joystick * Gamepad::pad[8]; +/*static*/ const char * Gamepad::padName[8]; /*static*/ int Gamepad::numButtons[8]; /*static*/ int Gamepad::numHats[8]; +/*static*/ int Gamepad::numAxes[8]; /*static*/ bool Gamepad::button[8][256]; /*static*/ uint8_t Gamepad::hat[8][32]; +/*static*/ int32_t Gamepad::axis[8][32]; Gamepad::Gamepad(void)//: numJoysticks(0) @@ -48,12 +51,14 @@ void Gamepad::AllocateJoysticks(void) for(int i=0; i= 8) + return NULL; + + return padName[joystickID]; +} + + bool Gamepad::GetState(int joystickID, int buttonID) { uint8_t hatMask[8] = { 1, 2, 4, 8, 16, 32, 64, 128 }; @@ -76,7 +91,6 @@ bool Gamepad::GetState(int joystickID, int buttonID) { // Handle SDL button int buttonNum = (buttonID & JOY_BUTTON_MASK); -// SDL_JoystickGetButton(pad[joystickID]); return button[joystickID][buttonNum]; } else if (buttonID & JOY_HAT) @@ -84,10 +98,22 @@ bool Gamepad::GetState(int joystickID, int buttonID) // Handle SDL hats int hatNumber = (buttonID & JOY_HATNUM_MASK) >> 3; uint8_t hatDirection = hatMask[buttonID & JOY_HATBUT_MASK]; -// uint8 direction = SDL_JoystickGetHat(pad[joystickID], hatNumber); -// return ( return (hat[joystickID][hatNumber] & hatDirection ? true : false); } + else if (buttonID & JOY_AXIS) + { + int axisNum = (buttonID & JOY_AXISNUM_MASK) >> 1; + int direction = (buttonID & JOY_AXISDIR_MASK); + + if (axis[joystickID][axisNum] != 0) + { + if (axis[joystickID][axisNum] > 16000 && (direction == 0)) + return true; + + if (axis[joystickID][axisNum] < -16000 && (direction == 1)) + return true; + } + } // Default == failure return false; @@ -114,6 +140,18 @@ int Gamepad::CheckButtonPressed(void) if (hat[i][j]) return (JOY_HAT | hatNum[hat[i][j]]); } + + for(int j=0; j 0) + if (axis[i][j] > 32000) + return (JOY_AXIS | (j << 1) | 0); + +// if (axis[i][j] < 0) + if (axis[i][j] < -32000) + return (JOY_AXIS | (j << 1) | 1); + } } return -1; @@ -146,6 +184,9 @@ void Gamepad::Update(void) for(int j=0; j