]> git.rm.cloudns.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
cleaner handling of view origin and angles for input in warpzonelib
authorRudolf Polzer <divverent@alientrap.org>
Sat, 8 May 2010 20:05:04 +0000 (22:05 +0200)
committerRudolf Polzer <divverent@alientrap.org>
Sat, 8 May 2010 20:05:04 +0000 (22:05 +0200)
qcsrc/client/View.qc
qcsrc/warpzonelib/client.qc
qcsrc/warpzonelib/client.qh

index afa884df1ea055a8a1c578d16243e5f3811b9431..2c898bbcbb5470a5ffbd5ee39cd5d62384b60f8a 100644 (file)
@@ -363,17 +363,19 @@ void CSQC_UpdateView(float w, float h)
        vo = '0 0 1' * getstati(STAT_VIEWHEIGHT);
 
        warpzone_fixview_origin = pmove_org + vo;
-       warpzone_fixview_angles = input_angles;
+       warpzone_fixview_cl_viewangles = input_angles;
+       warpzone_fixview_angles = view_angles;
        WarpZone_FixView();
        pmove_org = warpzone_fixview_origin - vo;
-       input_angles = warpzone_fixview_angles;
+       input_angles = warpzone_fixview_cl_viewangles;
+       view_angles = warpzone_fixview_angles;
 
        if(cvar("cl_lockview"))
        {
-               pmove_org = warpzone_fixview_origin = freeze_pmove_org;
-               input_angles = freeze_input_angles;
+               pmove_org = freeze_pmove_org;
+               input_angles = view_angles = freeze_input_angles;
                R_SetView(VF_ORIGIN, pmove_org + vo);
-               R_SetView(VF_ANGLES, input_angles);
+               R_SetView(VF_ANGLES, view_angles);
                //R_SetView(VF_CL_VIEWANGLES, input_angles);
        }
        freeze_pmove_org = pmove_org;
index c16fc898b0d09232c049bb25a31babf4ffca811a..773e90d5ecd655752f4fa02ca10ac2e36f951361 100644 (file)
@@ -112,22 +112,33 @@ void WarpZone_Outside()
 float warpzone_saved;
 vector warpzone_saved_origin;
 vector warpzone_saved_angles;
+vector warpzone_saved_cl_viewangles;
 #ifndef KEEP_ROLL
 var float autocvar_cl_rollkillspeed = 10;
 #endif
 void WarpZone_FixView()
 {
-       float pd;
+       float pd, f;
        entity e;
        warpzone_saved = 0;
        warpzone_saved_origin = warpzone_fixview_origin;
        warpzone_saved_angles = warpzone_fixview_angles;
+       warpzone_saved_cl_viewangles = warpzone_fixview_cl_viewangles;
 
 #ifndef KEEP_ROLL
-       if(autocvar_cl_rollkillspeed)
-               R_SetView(VF_CL_VIEWANGLES_Z, input_angles_z * max(0, (1 - frametime * autocvar_cl_rollkillspeed)));
-       else
-               R_SetView(VF_CL_VIEWANGLES_Z, 0);
+       if(warpzone_fixview_angles_z != 0 || warpzone_fixview_cl_viewangles_z != 0)
+       {
+               if(autocvar_cl_rollkillspeed)
+                       f = max(0, (1 - frametime * autocvar_cl_rollkillspeed));
+               else
+                       f = 0;
+               warpzone_fixview_angles_z *= f;
+               warpzone_fixview_cl_viewangles_z *= f;
+               warpzone_saved_angles_z *= f; // PERMANENTLY apply that change!
+               warpzone_saved_cl_viewangles_z *= f; // PERMANENTLY apply that change!
+               warpzone_saved = 2;
+               R_SetView(VF_CL_VIEWANGLES_Z, warpzone_fixview_angles_z);
+       }
 #endif
 
        e = WarpZone_Find(warpzone_fixview_origin, warpzone_fixview_origin);
@@ -136,6 +147,7 @@ void WarpZone_FixView()
                warpzone_saved = 1;
                warpzone_fixview_origin = WarpZone_TransformOrigin(e, warpzone_fixview_origin);
                warpzone_fixview_angles = WarpZone_TransformVAngles(e, warpzone_fixview_angles);
+               warpzone_fixview_cl_viewangles = WarpZone_TransformVAngles(e, warpzone_fixview_cl_viewangles);
                WarpZone_Inside();
        }
        else
@@ -154,10 +166,10 @@ void WarpZone_FixView()
                }
        }
 
-       if(warpzone_saved)
+       if(warpzone_saved == 1)
        {
                R_SetView(VF_ORIGIN, warpzone_fixview_origin);
-               R_SetView(VF_ANGLES, warpzone_fixview_angles);
+               R_SetView(VF_ANGLES, warpzone_fixview_cl_viewangles);
        }
 }
 void WarpZone_UnFixView()
@@ -166,8 +178,10 @@ void WarpZone_UnFixView()
        {
                warpzone_fixview_origin = warpzone_saved_origin;
                warpzone_fixview_angles = warpzone_saved_angles;
+               warpzone_fixview_cl_viewangles = warpzone_saved_cl_viewangles;
                R_SetView(VF_ORIGIN, warpzone_fixview_origin);
                R_SetView(VF_ANGLES, warpzone_fixview_angles);
+               R_SetView(VF_CL_VIEWANGLES, warpzone_fixview_cl_viewangles);
        }
 }
 
index 5ab212a333e938c9e7bcb7c18fe46adba6e71dba..e8f44be136d4effa8c4cf5102554fdab48c77eec 100644 (file)
@@ -3,6 +3,7 @@ void WarpZone_Camera_Read(float bIsNewEntity);
 
 vector warpzone_fixview_origin;
 vector warpzone_fixview_angles;
+vector warpzone_fixview_cl_viewangles;
 void WarpZone_FixView(); // this saves the previous values
 void WarpZone_UnFixView(); // and restores them