static void joystick_poll( int32_t *mx, int32_t *my, int32_t *ix, int32_t *iy ) { //SDL_JoystickUpdate(); *mx = joystick_axis( 0, 500, 256 ); *my = joystick_axis( 1, 500, 256 ); *ix += joystick_axis( 2, 500, 1000 ); *iy += joystick_axis( 3, 500, 1000 ); }
double joystick_pov(int id, int axis1, int axis2) { double a1, a2; a1 = joystick_axis(id, axis1); a2 = joystick_axis(id, axis2); if (a1 == 0 && a2 == 0) { return -1.f; } // in C, atan2 is y,x not x,y return ma_angle_from_radians((atan2(-a1, a2) + M_PI)); }
int joystick_direction(int id, int axis1, int axis2) { JOYINFOEX joyinfo; joyGetPosEx(JOYSTICKID1 + id, &joyinfo); double a1, a2; a1 = joystick_axis(id, axis1); a2 = joystick_axis(id, axis2); const int x = a1 < -.5 ? 0 : a1 > .5 ? 2 : 1; const int y = a2 < -.5 ? 0 : a2 > .5 ? 6 : 3; return 97 + x + y; }