void PollJoystickMove (void) { int joyx,joyy; INL_GetJoyDelta(joystickport,&joyx,&joyy); if (joystickprogressive) { if (joyx > 64) controlx += (joyx-64)*JOYSCALE*tics; else if (joyx < -64) controlx -= (-joyx-64)*JOYSCALE*tics; if (joyy > 64) controlx += (joyy-64)*JOYSCALE*tics; else if (joyy < -64) controly -= (-joyy-64)*JOYSCALE*tics; } else if (buttonstate[bt_run]) { if (joyx > 64) controlx += RUNMOVE*tics; else if (joyx < -64) controlx -= RUNMOVE*tics; if (joyy > 64) controly += RUNMOVE*tics; else if (joyy < -64) controly -= RUNMOVE*tics; } else { if (joyx > 64) controlx += BASEMOVE*tics; else if (joyx < -64) controlx -= BASEMOVE*tics; if (joyy > 64) controly += BASEMOVE*tics; else if (joyy < -64) controly -= BASEMOVE*tics; } }
/////////////////////////////////////////////////////////////////////////// // // IN_ReadControl() - Reads the device associated with the specified // player and fills in the control info struct // /////////////////////////////////////////////////////////////////////////// void IN_ReadControl(int player,ControlInfo *info) { boolean realdelta = false; word buttons; int dx,dy; Motion mx,my; ControlType type; KeyboardDef *def; dx = dy = 0; mx = my = motion_None; buttons = 0; IN_CheckAck(); switch (type = Controls[player]) { case ctrl_Keyboard: def = &KbdDefs; if (Keyboard[def->upleft]) mx = motion_Left,my = motion_Up; else if (Keyboard[def->upright]) mx = motion_Right,my = motion_Up; else if (Keyboard[def->downleft]) mx = motion_Left,my = motion_Down; else if (Keyboard[def->downright]) mx = motion_Right,my = motion_Down; if (Keyboard[def->up]) my = motion_Up; else if (Keyboard[def->down]) my = motion_Down; if (Keyboard[def->left]) mx = motion_Left; else if (Keyboard[def->right]) mx = motion_Right; if (Keyboard[def->button0]) buttons += 1 << 0; if (Keyboard[def->button1]) buttons += 1 << 1; realdelta = false; break; case ctrl_Joystick1: case ctrl_Joystick2: INL_GetJoyDelta(type - ctrl_Joystick,&dx,&dy); buttons = INL_GetJoyButtons(type - ctrl_Joystick); realdelta = true; break; case ctrl_Mouse: IN_GetMouseDelta(&dx,&dy); buttons = IN_MouseButtons(); realdelta = true; break; } if (realdelta) { if(dx || dy != 0) { mx = (dx < -20)? motion_Left : ((dx > 20)? motion_Right : motion_None); my = (dy < -20)? motion_Up : ((dy > 20)? motion_Down : motion_None); } } else { dx = mx * 127; dy = my * 127; } info->x = dx; info->xaxis = mx; info->y = dy; info->yaxis = my; info->button0 = buttons & (1 << 0); info->button1 = buttons & (1 << 1); info->button2 = buttons & (1 << 2); info->button3 = buttons & (1 << 3); info->dir = DirTable[((my + 1) * 3) + (mx + 1)]; }