From eda9b36455c49cac9c6b779428b1006d97955fe7 Mon Sep 17 00:00:00 2001 From: James R Date: Mon, 17 Jan 2022 21:03:22 -0800 Subject: [PATCH] Refactor R_SetupFrame/R_SkyboxFrame to deduplicate some code --- src/r_main.c | 140 +++++++++++++++++++++++---------------------------- 1 file changed, 64 insertions(+), 76 deletions(-) diff --git a/src/r_main.c b/src/r_main.c index ad6e952bf..50d77f704 100644 --- a/src/r_main.c +++ b/src/r_main.c @@ -1199,6 +1199,54 @@ subsector_t *R_PointInSubsectorOrNull(fixed_t x, fixed_t y) // R_SetupFrame // +static void +R_SetupCommonFrame +( player_t * player, + subsector_t * subsector) +{ + newview->player = player; + + newview->x += quake.x; + newview->y += quake.y; + newview->z += quake.z; + + newview->roll = R_ViewRollAngle(player); + + if (subsector) + newview->sector = subsector->sector; + else + newview->sector = R_PointInSubsector(newview->x, newview->y)->sector; + + R_InterpolateView(rendertimefrac); +} + +static void R_SetupAimingFrame(int s) +{ + player_t *player = &players[displayplayers[s]]; + camera_t *thiscam = &camera[s]; + + if (player->awayviewtics) + { + newview->aim = player->awayviewaiming; + newview->angle = player->awayviewmobj->angle; + } + else if (thiscam && thiscam->chase) + { + newview->aim = thiscam->aiming; + newview->angle = thiscam->angle; + } + else if (!demo.playback && player->playerstate != PST_DEAD) + { + newview->aim = localaiming[s]; + newview->angle = localangle[s]; + } + else + { + newview->aim = player->aiming; + newview->angle = player->mo->angle; + } +} + void R_SetupFrame(int s) { player_t *player = &players[displayplayers[s]]; @@ -1220,74 +1268,43 @@ void R_SetupFrame(int s) newview->sky = false; + R_SetupAimingFrame(s); + if (player->awayviewtics) { // cut-away view stuff r_viewmobj = player->awayviewmobj; // should be a MT_ALTVIEWMAN I_Assert(r_viewmobj != NULL); + + newview->x = r_viewmobj->x; + newview->y = r_viewmobj->y; newview->z = r_viewmobj->z + 20*FRACUNIT; - newview->aim = player->awayviewaiming; - newview->angle = r_viewmobj->angle; + + R_SetupCommonFrame(player, r_viewmobj->subsector); } else if (!player->spectator && chasecam) // use outside cam view { r_viewmobj = NULL; + + newview->x = thiscam->x; + newview->y = thiscam->y; newview->z = thiscam->z + (thiscam->height>>1); - newview->aim = thiscam->aiming; - newview->angle = thiscam->angle; + + R_SetupCommonFrame(player, thiscam->subsector); } else // use the player's eyes view { - newview->z = player->viewz; - r_viewmobj = player->mo; I_Assert(r_viewmobj != NULL); - newview->aim = player->aiming; - newview->angle = r_viewmobj->angle; - - if (!demo.playback && player->playerstate != PST_DEAD) - { - newview->angle = localangle[s]; // WARNING: camera uses this - newview->aim = localaiming[s]; - } - } - newview->roll = R_ViewRollAngle(player); - newview->z += quake.z; - - newview->player = player; - - if (chasecam && !player->awayviewtics && !player->spectator) - { - newview->x = thiscam->x; - newview->y = thiscam->y; - newview->x += quake.x; - newview->y += quake.y; - - if (thiscam->subsector) - newview->sector = thiscam->subsector->sector; - else - newview->sector = R_PointInSubsector(newview->x, newview->y)->sector; - } - else - { newview->x = r_viewmobj->x; newview->y = r_viewmobj->y; - newview->x += quake.x; - newview->y += quake.y; + newview->z = player->viewz; - if (r_viewmobj->subsector) - newview->sector = r_viewmobj->subsector->sector; - else - newview->sector = R_PointInSubsector(newview->x, newview->y)->sector; + R_SetupCommonFrame(player, r_viewmobj->subsector); } - - // newview->sin = FINESINE(viewangle>>ANGLETOFINESHIFT); - // newview->cos = FINECOSINE(viewangle>>ANGLETOFINESHIFT); - - R_InterpolateView(rendertimefrac); } void R_SkyboxFrame(int s) @@ -1307,30 +1324,8 @@ void R_SkyboxFrame(int s) I_Error("R_SkyboxFrame: r_viewmobj null (player %s)", sizeu1(playeri)); } #endif - if (player->awayviewtics) - { - newview->aim = player->awayviewaiming; - newview->angle = player->awayviewmobj->angle; - } - else if (thiscam && thiscam->chase) - { - newview->aim = thiscam->aiming; - newview->angle = thiscam->angle; - } - else - { - newview->aim = player->aiming; - newview->angle = player->mo->angle; - if (/*!demo.playback && */player->playerstate != PST_DEAD) - { - newview->angle = localangle[s]; - newview->aim = localaiming[s]; - } - } - newview->angle += r_viewmobj->angle; - newview->roll = R_ViewRollAngle(player); - newview->player = player; + R_SetupAimingFrame(s); newview->x = r_viewmobj->x; newview->y = r_viewmobj->y; @@ -1407,15 +1402,8 @@ void R_SkyboxFrame(int s) newview->z += campos.z * -mh->skybox_scalez; } - if (r_viewmobj->subsector) - newview->sector = r_viewmobj->subsector->sector; - else - newview->sector = R_PointInSubsector(newview->x, newview->y)->sector; - // newview->sin = FINESINE(viewangle>>ANGLETOFINESHIFT); - // newview->cos = FINECOSINE(viewangle>>ANGLETOFINESHIFT); - - R_InterpolateView(rendertimefrac); + R_SetupCommonFrame(player, r_viewmobj->subsector); } boolean R_ViewpointHasChasecam(player_t *player)