void R_DoInterpolations(fixed_t smoothratio) { int i; if (!movement_smooth) return; if (smoothratio == FRACUNIT) { didInterp = false; return; } didInterp = true; for (i = numinterpolations-1; i >= 0; --i) { R_DoAnInterpolation (i, smoothratio); } }
void R_InterpolateView(player_t *player) { static mobj_t *oviewer; fixed_t frac; dboolean NoInterpolate = (paused && !walkcamera.type) || (menuactive && !demoplayback); viewplayer = player; if (player->mo != oviewer || NoInterpolate) { R_ResetViewInterpolation(); oviewer = player->mo; } tic_vars.frac = I_GetTimeFrac(); if (NoInterpolate) tic_vars.frac = FRACUNIT; frac = tic_vars.frac; if (movement_smooth) { if (NoInterpolateView) { NoInterpolateView = false; player->prev_viewz = player->viewz; player->prev_viewangle = player->mo->angle + viewangleoffset; player->prev_viewpitch = player->mo->pitch; P_ResetWalkcam(); } if (walkcamera.type != 2) { viewx = player->mo->PrevX + FixedMul (frac, player->mo->x - player->mo->PrevX); viewy = player->mo->PrevY + FixedMul (frac, player->mo->y - player->mo->PrevY); viewz = player->prev_viewz + FixedMul (frac, player->viewz - player->prev_viewz); } else { viewx = walkcamera.PrevX + FixedMul (frac, walkcamera.x - walkcamera.PrevX); viewy = walkcamera.PrevY + FixedMul (frac, walkcamera.y - walkcamera.PrevY); viewz = walkcamera.PrevZ + FixedMul (frac, walkcamera.z - walkcamera.PrevZ); } if (walkcamera.type) { viewangle = walkcamera.PrevAngle + FixedMul (frac, walkcamera.angle - walkcamera.PrevAngle); viewpitch = walkcamera.PrevPitch + FixedMul (frac, walkcamera.pitch - walkcamera.PrevPitch); } else { viewangle = player->prev_viewangle + FixedMul (frac, R_SmoothPlaying_Get(player) + viewangleoffset - player->prev_viewangle); viewpitch = player->prev_viewpitch + FixedMul (frac, player->mo->pitch - player->prev_viewpitch); } } else { if (walkcamera.type != 2) { viewx = player->mo->x; viewy = player->mo->y; viewz = player->viewz; } else { viewx = walkcamera.x; viewy = walkcamera.y; viewz = walkcamera.z; } if (walkcamera.type) { viewangle = walkcamera.angle; viewpitch = walkcamera.pitch; } else { viewangle = R_SmoothPlaying_Get(player); viewpitch = player->mo->pitch; } } if (!paused && movement_smooth) { int i; didInterp = tic_vars.frac != FRACUNIT; if (didInterp) { for (i = numinterpolations - 1; i >= 0; i--) { R_DoAnInterpolation (i, tic_vars.frac); } } } }