/******************************************************************************/ /* */ /* joystick.c */ /* */ /* joystick handler routines */ /* */ /******************************************************************************/ #include #include #include #include #include //#include #include #include #include "joystick.h" #define JOYSTICK_HAS_MOVED .10 int hasJoystick = 0; int joyX = 0; int joyY = 0; double joyxmod,joyymod,joyzmod; JOYCAPS jii; // info about the used joystick /******************************************************************************/ /* */ /* init_Joystick() */ /* */ /* check existence of joystick & set flag appropriately */ /* */ /******************************************************************************/ void init_Joystick(void) { JOYINFOEX ji; if (!joyGetNumDevs()) { printf("No joystick driver installed!\n"); hasJoystick = 0; } ji.dwSize = sizeof(ji); ji.dwFlags = JOY_RETURNALL; if (joyGetPosEx(JOYSTICKID1, &ji) != JOYERR_NOERROR) { printf("No joystick controller installed!\n"); hasJoystick = 0; } else { hasJoystick = 1; printf("Found (and using) joystick!\n"); joyGetDevCaps(JOYSTICKID1,&jii,sizeof(JOYCAPS)); joyxmod = ((double)(jii.wXmax-jii.wXmin))/ ((double)(JOYSTICKMAX-JOYSTICKMIN)); joyymod = ((double)(jii.wYmax-jii.wYmin))/ ((double)(JOYSTICKMAX-JOYSTICKMIN)); joyzmod = ((double)(jii.wZmax-jii.wZmin))/ ((double)(JOYSTICKMAX)); joyX = (int)ji.dwXpos >> 11; joyY = (int)ji.dwYpos >> 11; } } /******************************************************************************/ /* */ /* read_Joystick() */ /* */ /* read joystick info and return */ /* */ /******************************************************************************/ int read_Joystick(JOYINFOEX *ji) { int retval; if (hasJoystick) { ji->dwSize = sizeof(*ji); ji->dwFlags = JOY_RETURNALL; joyGetPosEx(JOYSTICKID1, ji); ji->dwXpos = (int) (((double)(ji->dwXpos-jii.wXmin))/joyxmod)+JOYSTICKMIN; ji->dwYpos = (int) (((double)(ji->dwYpos-jii.wYmin))/joyymod)+JOYSTICKMIN; ji->dwZpos = (int) (((double)(ji->dwZpos-jii.wZmin))/joyzmod); retval = (ji->dwButtons || ((((double)abs(ji->dwXpos))/((double)JOYSTICKMAX)) > JOYSTICK_HAS_MOVED) || ((((double)abs(ji->dwYpos))/((double)JOYSTICKMAX)) > JOYSTICK_HAS_MOVED)); /* ji->dwXpos = ji->dwXpos >> 11; ji->dwYpos = ji->dwYpos >> 11; retval = (ji->dwButtons || (((int)ji->dwXpos - 20) > 0) || (((int)ji->dwXpos - 12) < 0) || (((int)ji->dwYpos - 20) > 0) || (((int)ji->dwYpos - 12) < 0) ) || (ji->dwPOV != JOY_POVCENTERED); */ return(retval); } else { retval = 0; } return(retval); }