Desktop/GLFW - Windows Xbox 360 DPad integration
Monkey Forums/Monkey Code/Desktop/GLFW - Windows Xbox 360 DPad integration
| ||
NO LONGER REQUIRED - FUNCTIONALITY HAS BEEN IMPLEMENTED INTO v77c This code will allow you to enable Xbox 360 DPad integration for the Desktop [GLFW] target for the Windows platform. Works in v77b or better. Replace the following functions in the glfw/src/win32_joystick.c file: int _glfwPlatformGetJoystickParam( int joy, int param ) { JOYCAPS jc; int numbuttons; // return 0; // Is joystick present? if( !_glfwJoystickPresent( joy ) ) { return 0; } // We got this far, the joystick is present if( param == GLFW_PRESENT ) { return GL_TRUE; } // Get joystick capabilities _glfw_joyGetDevCaps( joy - GLFW_JOYSTICK_1, &jc, sizeof(JOYCAPS) ); switch( param ) { case GLFW_AXES: // Return number of joystick axes return jc.wNumAxes; case GLFW_BUTTONS: // Return number of joystick axes // CHANGE - Validate for DPad numbuttons = (int) jc.wNumButtons; if (jc.wCaps & JOYCAPS_HASPOV) numbuttons += 2; return numbuttons; default: break; } return 0; } int _glfwPlatformGetJoystickButtons( int joy, unsigned char *buttons, int numbuttons ) { JOYCAPS jc; JOYINFOEX ji; int button; // return 0; // Is joystick present? if( !_glfwJoystickPresent( joy ) ) { return 0; } // Get joystick capabilities _glfw_joyGetDevCaps( joy - GLFW_JOYSTICK_1, &jc, sizeof(JOYCAPS) ); // Get joystick state ji.dwSize = sizeof( JOYINFOEX ); ji.dwFlags = JOY_RETURNBUTTONS; _glfw_joyGetPosEx( joy - GLFW_JOYSTICK_1, &ji ); // Get states of all requested buttons button = 0; while( button < numbuttons && button < (int) jc.wNumButtons ) { buttons[ button ] = (unsigned char) (ji.dwButtons & (1UL << button) ? GLFW_PRESS : GLFW_RELEASE); button ++; } // CHANGE - Get state of DPad if (jc.wCaps & JOYCAPS_HASPOV) { int m, value = ji.dwPOV / 100 / 45; const int directions[9] = { 1, 3, 2, 6, 4, 12, 8, 9, 0 }; const int mapButton[4] = { 9, 10, 11, 8 }; if (value < 0 || value > 8) value = 8; // Map to required button index for (m = 0; m < 4 && button < numbuttons; m++) { buttons[mapButton[m]] = directions[value] & (1 << m) ? GLFW_PRESS : GLFW_RELEASE; } } return button; } The main changes involve extending the number of found buttons by 2 if the DPad is found (glfwPlatformGetJoystickParam) so we can map the results correctly (glfwPlatformGetJoystickButtons). |