void R_InterpolateView (player_t *player, fixed_t frac) { if (movement_smooth) { if (NoInterpolateView) { NoInterpolateView = false; original_view_vars.viewx = player->mo->x; original_view_vars.viewy = player->mo->y; original_view_vars.viewz = player->viewz; original_view_vars.viewangle = player->mo->angle + viewangleoffset; } viewx = original_view_vars.viewx + FixedMul (frac, player->mo->x - original_view_vars.viewx); viewy = original_view_vars.viewy + FixedMul (frac, player->mo->y - original_view_vars.viewy); viewz = original_view_vars.viewz + FixedMul (frac, player->viewz - original_view_vars.viewz); viewangle = original_view_vars.viewangle + FixedMul (frac, R_SmoothPlaying_Get(player->mo->angle) + viewangleoffset - original_view_vars.viewangle); } else { viewx = player->mo->x; viewy = player->mo->y; viewz = player->viewz; viewangle = R_SmoothPlaying_Get(player->mo->angle); } }
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); } } } }
void R_InterpolateView (player_t *player, fixed_t frac) { if (movement_smooth) { if (NoInterpolateView) { NoInterpolateView = false; original_view_vars.viewx = player->mo->x; original_view_vars.viewy = player->mo->y; original_view_vars.viewz = player->viewz; original_view_vars.viewangle = player->mo->angle + viewangleoffset; original_view_vars.viewpitch = player->mo->pitch; if(walkcamera.type) { P_ResetWalkcam(); } } if (walkcamera.type != 2) { viewx = original_view_vars.viewx + FixedMul (frac, player->mo->x - original_view_vars.viewx); viewy = original_view_vars.viewy + FixedMul (frac, player->mo->y - original_view_vars.viewy); viewz = original_view_vars.viewz + FixedMul (frac, player->viewz - original_view_vars.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 = original_view_vars.viewangle + FixedMul (frac, R_SmoothPlaying_Get(player->mo->angle) + viewangleoffset - original_view_vars.viewangle); viewpitch = original_view_vars.viewpitch + FixedMul (frac, player->mo->pitch - original_view_vars.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->mo->angle); viewpitch = player->mo->pitch; } } }