--- src/linux/gl_glx.c.orig Thu Oct 10 01:29:47 2002 +++ src/linux/gl_glx.c Mon Jun 16 23:19:21 2003 @@ -40,7 +40,6 @@ #include #include #ifdef Joystick -#include #include #endif #include "../ref_gl/gl_local.h" @@ -58,7 +57,11 @@ #include #include #ifdef Joystick -#include +# if defined(__linux__) +# include +# elif defined(__FreeBSD__) +# include +# endif #include #endif #include @@ -87,18 +90,19 @@ #ifdef Joystick static cvar_t *in_joystick; static qboolean joystick_avail = false; -static int joy_fd, jx, jy, jt; +static int joy_fd, jx, jy, center_jx, center_jy; static cvar_t *j_invert_y; +static cvar_t *j_sensitivity; #endif #ifdef Joystick void InitJoystick() { int i, err; glob_t pglob; - struct js_event e; + struct joystick j; joystick_avail = false; - err = glob("/dev/js*", 0, NULL, &pglob); + err = glob("/dev/joy*", 0, NULL, &pglob); if (err) { switch (err) { @@ -111,7 +115,7 @@ default: ri.Con_Printf(PRINT_ALL, "Error #%d while looking for joysticks\n",err); } - return; + goto out; } for (i=0;iKey_Event_fp (key_index + e.number, true); - } - else { - in_state->Key_Event_fp (key_index + e.number, false); - } - //joy_oldbuttonstate = e.number; - } - else if (JS_EVENT_AXIS & e.type) { - switch (e.number) { - case 0: - jx = e.value; - break; - case 1: - jy = e.value; - break; - case 3: - jt = e.value; - break; - } - } + if (read(joy_fd, &j, sizeof(struct joystick)) != -1) { + if (j.b1) + in_state->Key_Event_fp (K_JOY1, true); + else + in_state->Key_Event_fp (K_JOY1, false); + if (j.b2) + in_state->Key_Event_fp (K_JOY2, true); + else + in_state->Key_Event_fp (K_JOY2, false); + jx = j.x; jy = j.y; } } #endif @@ -393,7 +383,11 @@ */ void RW_IN_Move (usercmd_t *cmd) { - if (!mouse_avail) + if (!mouse_avail +#ifdef Joystick + && !joystick_avail +#endif + ) return; if (m_filter->value) @@ -429,25 +423,26 @@ #ifdef Joystick if (joystick_avail) { + int djx = (jx - center_jx) * j_sensitivity->value / 10, + djy = (jy - center_jy) * j_sensitivity->value / 10; // add joy X/Y movement to cmd if ( (*in_state->in_strafe_state & 1) || (lookstrafe->value && mlooking )) - cmd->sidemove += m_side->value * (jx/100); + cmd->sidemove += m_side->value * djx; else - in_state->viewangles[YAW] -= m_yaw->value * (jx/100); + in_state->viewangles[YAW] -= m_yaw->value * djx; if ( (mlooking || freelook->value) && !(*in_state->in_strafe_state & 1)) { if (j_invert_y) - in_state->viewangles[PITCH] -= m_pitch->value * (jy/100); + in_state->viewangles[PITCH] -= m_pitch->value * djy; else - in_state->viewangles[PITCH] += m_pitch->value * (jy/100); - cmd->forwardmove -= m_forward->value * (jt/100); + in_state->viewangles[PITCH] += m_pitch->value * djy; } else { - cmd->forwardmove -= m_forward->value * (jy/100); + cmd->forwardmove -= m_forward->value * djy; } } #endif