]> git.rm.cloudns.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Move lockview code to be after chase_camera, this way it freezes whenever map voting...
authorSamual <samual@xonotic.org>
Mon, 29 Aug 2011 05:43:10 +0000 (01:43 -0400)
committerSamual <samual@xonotic.org>
Mon, 29 Aug 2011 05:43:10 +0000 (01:43 -0400)
qcsrc/client/View.qc

index cb077390c3bead6dc6c3b35ce000594d07bd5334..743c196178b09f07025b4f9a65fc490218e74c3f 100644 (file)
@@ -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();