]> git.rm.cloudns.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Properly unstick the camera from going through walls. The code is a little tricky...
authorMircea Kitsune <sonichedgehog_hyperblast00@yahoo.com>
Thu, 31 Mar 2011 21:16:44 +0000 (00:16 +0300)
committerMircea Kitsune <sonichedgehog_hyperblast00@yahoo.com>
Thu, 31 Mar 2011 21:16:44 +0000 (00:16 +0300)
qcsrc/client/View.qc

index 27c0c40b90a31aff395b78f1ab63c63645336b84..da1e2cfea686940fa75ddee2e3ddc3bb5638d04f 100644 (file)
@@ -367,7 +367,6 @@ float contentavgalpha, liquidalpha_prev;
 vector liquidcolor_prev;
 
 float chase_current_distance;
-vector chase_final_origin;
 
 void CSQC_UpdateView(float w, float h)
 {
@@ -424,13 +423,12 @@ void CSQC_UpdateView(float w, float h)
 
                        vector chase_target_origin;
                        makevectors(view_angles);
-                       chase_target_origin = pmove_org - view_forward * chase_current_distance;
+                       chase_target_origin = pmove_org - view_forward * chase_current_distance; // pass 1, used to check where the camera would go and obtain the trace_fraction
 
                        // don't allow the camera to go through walls
                        traceline(pmove_org, chase_target_origin, MOVE_NORMAL, self);
-                       if(trace_fraction == 1)
-                               chase_final_origin = chase_target_origin;
-                       R_SetView(VF_ORIGIN, chase_final_origin);
+                       chase_target_origin = pmove_org - view_forward * chase_current_distance * trace_fraction; // pass 2, also multiplying view_forward with trace_fraction now, to avoid sticking the camera in solid
+                       R_SetView(VF_ORIGIN, chase_target_origin);
                }
                else if(autocvar_chase_active < 0)
                {