]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/client/view.qc
Enforce first person view while in vehicle gunner slots
[xonotic/xonotic-data.pk3dir.git] / qcsrc / client / view.qc
index 917d795ca2c21724e8c95d0b5ef748d5b3e9669a..a992d36a4858a114a8934df8dad348c275095726 100644 (file)
@@ -714,7 +714,7 @@ vector liquidcolor_prev;
 
 float eventchase_current_distance;
 float eventchase_running;
-int WantEventchase(entity this)
+int WantEventchase(entity this, bool want_vehiclechase)
 {
        if(autocvar_cl_orthoview)
                return 0;
@@ -724,7 +724,7 @@ int WantEventchase(entity this)
                return 1;
        if(spectatee_status >= 0)
        {
-               if(hud != HUD_NORMAL && (autocvar_cl_eventchase_vehicle || spectatee_status > 0))
+               if(want_vehiclechase)
                        return 1;
                if(MUTATOR_CALLHOOK(WantEventchase, this))
                        return 1;
@@ -974,13 +974,13 @@ void HUD_Crosshair(entity this)
                // wcross_origin = '0.5 0 0' * vid_conwidth + '0 0.5 0' * vid_conheight;
                if(csqcplayer.viewloc && (csqcplayer.viewloc.spawnflags & VIEWLOC_FREEAIM))
                        wcross_origin = viewloc_mousepos;
-               else if(autocvar_chase_active && autocvar_crosshair_chase)
+               else if(autocvar_chase_active > 0 && autocvar_crosshair_chase)
                {
                        vector player_org = ((csqcplayer) ? csqcplayer.origin + csqcplayer.view_ofs : view_origin);
                        if(csqcplayer && crosshair_chase_playeralpha && crosshair_chase_playeralpha < 1)
                        {
                                traceline(view_origin, view_origin + max_shot_distance * view_forward, MOVE_NORMAL, NULL);
-                               if(trace_ent == csqcplayer)
+                               if(trace_ent == csqcplayer && STAT(HEALTH) > 0)
                                        csqcplayer.alpha = crosshair_chase_playeralpha;
                                else
                                        csqcplayer.alpha = csqcplayer.m_alpha;
@@ -1671,7 +1671,7 @@ void CSQC_UpdateView(entity this, float w, float h)
                else if(autocvar_chase_active == -2)
                        cvar_set("chase_active", "0");
 
-               float vehicle_chase = (hud != HUD_NORMAL && (autocvar_cl_eventchase_vehicle || spectatee_status > 0));
+               bool vehicle_chase = (hud != HUD_NORMAL && (autocvar_cl_eventchase_vehicle || spectatee_status > 0));
 
                float vehicle_viewdist = 0;
                vector vehicle_viewofs = '0 0 0';
@@ -1683,10 +1683,14 @@ void CSQC_UpdateView(entity this, float w, float h)
                                Vehicle info = Vehicles_from(hud);
                                vehicle_viewdist = info.height;
                                vehicle_viewofs = info.view_ofs;
+                               if(vehicle_viewdist < 0) // when set below 0, this vehicle doesn't use third person view (gunner slots)
+                                       vehicle_chase = false;
                        }
+                       else
+                               vehicle_chase = false;
                }
 
-               int eventchase = WantEventchase(this);
+               int eventchase = WantEventchase(this, vehicle_chase);
                if (eventchase)
                {
                        vector current_view_origin_override = '0 0 0';