void PollControls (void) { int max, min, i; byte buttonbits; IN_ProcessEvents(); // // get timing info for last frame // if (demoplayback || demorecord) // demo recording and playback needs to be constant { // wait up to DEMOTICS Wolf tics uint32_t curtime = SDL_GetTicks(); lasttimecount += DEMOTICS; int32_t timediff = (lasttimecount * 100) / 7 - curtime; if(timediff > 0) SDL_Delay(timediff); if(timediff < -2 * DEMOTICS) // more than 2-times DEMOTICS behind? lasttimecount = (curtime * 7) / 100; // yes, set to current timecount tics = DEMOTICS; } else CalcTics (); controlx = 0; controly = 0; memcpy (buttonheld, buttonstate, sizeof (buttonstate)); memset (buttonstate, 0, sizeof (buttonstate)); if (demoplayback) { // // read commands from demo buffer // buttonbits = *demoptr++; for (i = 0; i < NUMBUTTONS; i++) { buttonstate[i] = buttonbits & 1; buttonbits >>= 1; } controlx = *demoptr++; controly = *demoptr++; if (demoptr == lastdemoptr) playstate = ex_completed; // demo is done controlx *= (int) tics; controly *= (int) tics; return; } // // get button states // PollKeyboardButtons (); if (mouseenabled && IN_IsInputGrabbed()) PollMouseButtons (); if (joystickenabled) PollJoystickButtons (); // // get movements // if (mouseenabled && IN_IsInputGrabbed()) PollKeyboardMoveStrafe (); else PollKeyboardMove (); if (mouseenabled && IN_IsInputGrabbed()) PollMouseMove (); if (joystickenabled) PollJoystickMove (); // // bound movement to a maximum // max = 100 * tics; min = -max; if (controlx > max) controlx = max; else if (controlx < min) controlx = min; if (controly > max) controly = max; else if (controly < min) controly = min; if (demorecord) { // // save info out to demo buffer // controlx /= (int) tics; controly /= (int) tics; buttonbits = 0; // TODO: Support 32-bit buttonbits for (i = NUMBUTTONS - 1; i >= 0; i--) { buttonbits <<= 1; if (buttonstate[i]) buttonbits |= 1; } *demoptr++ = buttonbits; *demoptr++ = controlx; *demoptr++ = controly; if (demoptr >= lastdemoptr - 8) playstate = ex_completed; else { controlx *= (int) tics; controly *= (int) tics; } } }
void PollControls (void) { Sint16 max,min,i; Uint8 buttonbits; controlx = 0; controly = 0; memcpy (buttonheld,buttonstate,sizeof(buttonstate)); memset (buttonstate,0,sizeof(buttonstate)); #ifdef MYPROFILE controlx = 100; // just spin in place return; #endif if (demoplayback) { // // read commands from demo buffer // buttonbits = *demoptr++; for (i=0;i<NUMBUTTONS;i++) { buttonstate[i] = buttonbits&1; buttonbits >>= 1; } controlx = *demoptr++; controly = *demoptr++; tics = *demoptr++; while (TimeCount-lasttimecount < tics) ; lasttimecount = TimeCount; if (demoptr == lastdemoptr) playstate = ex_completed; // demo is done controlx *= tics; controly *= tics; return; } // // get timing info for last frame // CalcTics (); // BBi ::in_handle_events(); // // get button states // PollKeyboardButtons (); if (mouseenabled) PollMouseButtons (); if (joystickenabled) PollJoystickButtons (); #if 0 if (buttonstate[bt_run]) VL_ColorBorder (1); else VL_ColorBorder (0); #endif // // get movements // PollKeyboardMove (); if (mouseenabled) PollMouseMove (); if (joystickenabled) PollJoystickMove (); // // bound movement to a maximum // max = 100*tics; min = -max; if (controlx > max) controlx = max; else if (controlx < min) controlx = min; if (controly > max) controly = max; else if (controly < min) controly = min; #ifdef DEMOS_EXTERN if (demorecord) { // // save info out to demo buffer // controlx /= (Sint16)tics; controly /= (Sint16)tics; buttonbits = 0; for (i=NUMBUTTONS-1;i>=0;i--) { buttonbits <<= 1; if (buttonstate[i]) buttonbits |= 1; } *demoptr++ = buttonbits; *demoptr++ = controlx; *demoptr++ = controly; *demoptr++ = tics; if (demoptr >= lastdemoptr) PLAY_ERROR(POLLCONTROLS_DEMO_OV); controlx *= (Sint16)tics; controly *= (Sint16)tics; } #endif }