From a52ea1981bc957b46874633877cbc9d20d3e88e4 Mon Sep 17 00:00:00 2001 From: Samual Date: Mon, 29 Aug 2011 01:43:10 -0400 Subject: [PATCH] Move lockview code to be after chase_camera, this way it freezes whenever map voting starts. --- qcsrc/client/View.qc | 35 +++++++++++++++++++---------------- 1 file changed, 19 insertions(+), 16 deletions(-) diff --git a/qcsrc/client/View.qc b/qcsrc/client/View.qc index cb077390c..743c19617 100644 --- a/qcsrc/client/View.qc +++ b/qcsrc/client/View.qc @@ -417,22 +417,14 @@ void CSQC_UpdateView(float w, float h) ticrate = getstatf(STAT_MOVEVARS_TICRATE) * getstatf(STAT_MOVEVARS_TIMESCALE); - if(autocvar_cl_lockview || (autocvar__hud_configure && spectatee_status <= 0) || intermission > 1) - { - R_SetView(VF_ORIGIN, freeze_org); - R_SetView(VF_ANGLES, freeze_ang); - } - else - { - freeze_org = R_SetView3fv(VF_ORIGIN); - freeze_ang = R_SetView3fv(VF_ANGLES); - } - // event chase camera if(autocvar_chase_active <= 0) // greater than 0 means it's enabled manually, and this code is skipped { if(spectatee_status >= 0 && (autocvar_cl_eventchase_death && getstati(STAT_HEALTH) <= 0 && !intermission) || intermission) { + // make special vector since we can't use view_origin (It is one frame old as of this code, it gets set later with the results this code makes.) + vector current_view_origin = R_SetView3fv(VF_ORIGIN); + // We must enable chase_active to get a third person view (weapon viewmodel hidden and own player model showing). // Ideally, there should be another way to enable third person cameras, such as through R_SetView() if(!autocvar_chase_active) @@ -447,13 +439,12 @@ void CSQC_UpdateView(float w, float h) vector eventchase_target_origin; makevectors(view_angles); // pass 1, used to check where the camera would go and obtain the trace_fraction - eventchase_target_origin = freeze_org - v_forward * eventchase_current_distance; - - WarpZone_TraceLine(freeze_org, eventchase_target_origin, MOVE_WORLDONLY, self); + eventchase_target_origin = current_view_origin - v_forward * eventchase_current_distance; + WarpZone_TraceLine(current_view_origin, eventchase_target_origin, MOVE_WORLDONLY, self); // pass 2, also multiplying view_forward with trace_fraction, to prevent the camera from going through walls // The 0.1 subtraction is to not limit the camera precisely at the wall surface, as that allows the view to poke through - eventchase_target_origin = freeze_org - v_forward * eventchase_current_distance * (trace_fraction - 0.1); - WarpZone_TraceLine(freeze_org, eventchase_target_origin, MOVE_WORLDONLY, self); + eventchase_target_origin = current_view_origin - v_forward * eventchase_current_distance * (trace_fraction - 0.1); + WarpZone_TraceLine(current_view_origin, eventchase_target_origin, MOVE_WORLDONLY, self); R_SetView(VF_ORIGIN, trace_endpos); R_SetView(VF_ANGLES, WarpZone_TransformVAngles(WarpZone_trace_transform, view_angles)); @@ -464,6 +455,18 @@ void CSQC_UpdateView(float w, float h) eventchase_current_distance = 0; // start from 0 next time } } + + // do lockview after event chase camera so that it still applies whenever necessary. + if(autocvar_cl_lockview || (autocvar__hud_configure && spectatee_status <= 0) || intermission > 1) + { + R_SetView(VF_ORIGIN, freeze_org); + R_SetView(VF_ANGLES, freeze_ang); + } + else + { + freeze_org = R_SetView3fv(VF_ORIGIN); + freeze_ang = R_SetView3fv(VF_ANGLES); + } WarpZone_FixView(); //WarpZone_FixPMove(); -- 2.39.2