]> git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/lib/csqcmodel/cl_player.qc
Avoid settings cvars every frame to optimize code and to avoid console spam with...
[xonotic/xonotic-data.pk3dir.git] / qcsrc / lib / csqcmodel / cl_player.qc
index 247f941002ede58abcf97f1998e5f6ee33b99b1c..15d9d279889ea215d90afc24178f385269a7c161 100644 (file)
@@ -306,7 +306,7 @@ float bobfall_speed;
 float bob2_smooth;
 vector CSQCPlayer_ApplyBobbing(entity this, vector v)
 {
-       if(this.csqcmodel_isdead)
+       if(this.csqcmodel_isdead || PHYS_INVEHICLE(this) || !(this.isplayermodel & ISPLAYER_PLAYER))
                return v;
 
        // bounded XY speed, used by several effects below
@@ -479,6 +479,8 @@ vector CSQCPlayer_ApplyChase(entity this, vector v)
        {
                makevectors(view_angles);
                forward = v_forward;
+               if(autocvar_chase_front)
+                       forward = normalize(forward * -1);
                // trace a little further so it hits a surface more consistently (to avoid 'snapping' on the edge of the range)
                float cdist = -autocvar_chase_back - 8;
                chase_dest.x = v.x + forward.x * cdist;
@@ -488,6 +490,14 @@ vector CSQCPlayer_ApplyChase(entity this, vector v)
                v.x = 1 * trace_endpos.x + 8 * forward.x + 4 * trace_plane_normal.x;
                v.y = 1 * trace_endpos.y + 8 * forward.y + 4 * trace_plane_normal.y;
                v.z = 1 * trace_endpos.z + 8 * forward.z + 4 * trace_plane_normal.z;
+
+               if(autocvar_chase_front)
+               {
+                       // now flip the view so the player is looking at themselves
+                       vector newang = vectoangles(forward);
+                       view_angles.x = view_angles.x * -1; // inverse up-down looking direction
+                       view_angles.y = newang.y;
+               }
        }
 
 #if 0
@@ -657,7 +667,8 @@ bool CSQCPlayer_PostUpdate(entity this)
        if (this.entnum != player_localnum + 1) return false;
        csqcplayer = this;
        csqcplayer_status = CSQCPLAYERSTATUS_FROMSERVER;
-       cvar_settemp("cl_movement_replay", "0");
+       if (cvar("cl_movement_replay"))
+               cvar_settemp("cl_movement_replay", "0");
        this.entremove = CSQCPlayer_Remove;
        return true;
 }