mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2025-10-30 08:01:28 +00:00
Try to correctly interpolate chase camera viewpoint as angle changes
This commit is contained in:
parent
de5b151985
commit
c758a8ad27
3 changed files with 16 additions and 6 deletions
10
src/r_fps.c
10
src/r_fps.c
|
|
@ -140,10 +140,6 @@ void R_InterpolateView(fixed_t frac)
|
|||
prevview = newview;
|
||||
}
|
||||
|
||||
viewx = R_LerpFixed(prevview->x, newview->x, frac);
|
||||
viewy = R_LerpFixed(prevview->y, newview->y, frac);
|
||||
viewz = R_LerpFixed(prevview->z, newview->z, frac);
|
||||
|
||||
viewangle = R_LerpAngle(prevview->angle, newview->angle, frac);
|
||||
aimingangle = R_LerpAngle(prevview->aim, newview->aim, frac);
|
||||
viewroll = R_LerpAngle(prevview->roll, newview->roll, frac);
|
||||
|
|
@ -151,6 +147,12 @@ void R_InterpolateView(fixed_t frac)
|
|||
viewsin = FINESINE(viewangle>>ANGLETOFINESHIFT);
|
||||
viewcos = FINECOSINE(viewangle>>ANGLETOFINESHIFT);
|
||||
|
||||
fixed_t zoom = R_LerpFixed(prevview->zoom, newview->zoom, frac);
|
||||
|
||||
viewx = R_LerpFixed(prevview->x, newview->x, frac) - FixedMul(viewcos, zoom);
|
||||
viewy = R_LerpFixed(prevview->y, newview->y, frac) - FixedMul(viewsin, zoom);
|
||||
viewz = R_LerpFixed(prevview->z, newview->z, frac);
|
||||
|
||||
viewplayer = newview->player;
|
||||
viewsector = R_PointInSubsector(viewx, viewy)->sector;
|
||||
|
||||
|
|
|
|||
|
|
@ -48,6 +48,7 @@ struct viewvars_t {
|
|||
fixed_t x;
|
||||
fixed_t y;
|
||||
fixed_t z;
|
||||
fixed_t zoom;
|
||||
boolean sky;
|
||||
sector_t *sector;
|
||||
player_t *player;
|
||||
|
|
|
|||
|
|
@ -1244,6 +1244,7 @@ void R_SetupFrame(int s)
|
|||
newview->x = r_viewmobj->x;
|
||||
newview->y = r_viewmobj->y;
|
||||
newview->z = r_viewmobj->z;
|
||||
newview->zoom = 0;
|
||||
|
||||
R_SetupCommonFrame(player, r_viewmobj->subsector);
|
||||
}
|
||||
|
|
@ -1252,9 +1253,13 @@ void R_SetupFrame(int s)
|
|||
{
|
||||
r_viewmobj = NULL;
|
||||
|
||||
newview->x = thiscam->x;
|
||||
newview->y = thiscam->y;
|
||||
fixed_t x = player->mo ? player->mo->x : thiscam->x;
|
||||
fixed_t y = player->mo ? player->mo->y : thiscam->y;
|
||||
|
||||
newview->x = x;
|
||||
newview->y = y;
|
||||
newview->z = thiscam->z + (thiscam->height>>1);
|
||||
newview->zoom = FixedHypot(thiscam->x - x, thiscam->y - y);
|
||||
|
||||
R_SetupCommonFrame(player, thiscam->subsector);
|
||||
}
|
||||
|
|
@ -1267,6 +1272,7 @@ void R_SetupFrame(int s)
|
|||
newview->x = r_viewmobj->x;
|
||||
newview->y = r_viewmobj->y;
|
||||
newview->z = player->viewz;
|
||||
newview->zoom = 0;
|
||||
|
||||
R_SetupCommonFrame(player, r_viewmobj->subsector);
|
||||
}
|
||||
|
|
@ -1297,6 +1303,7 @@ void R_SkyboxFrame(int s)
|
|||
newview->x = r_viewmobj->x;
|
||||
newview->y = r_viewmobj->y;
|
||||
newview->z = r_viewmobj->z; // 26/04/17: use actual Z position instead of spawnpoint angle!
|
||||
newview->zoom = 0;
|
||||
|
||||
if (mapheaderinfo[gamemap-1])
|
||||
{
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue