]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/client/View.qc
Merge remote-tracking branch 'origin/samual/remove_useless_stuff'
[xonotic/xonotic-data.pk3dir.git] / qcsrc / client / View.qc
index 298b820f754bae215886fb678ab37cb72530ac16..f1352472bc64cbd2e22db7cac0c64e984721d39b 100644 (file)
@@ -366,8 +366,9 @@ vector myhealth_gentlergb;
 float contentavgalpha, liquidalpha_prev;
 vector liquidcolor_prev;
 
-float chase_current_distance;
-vector chase_target_origin;
+float eventchase_current_distance;
+
+float checkfail[16];
 
 void CSQC_UpdateView(float w, float h)
 {
@@ -378,6 +379,17 @@ void CSQC_UpdateView(float w, float h)
        vector vf_size, vf_min;
        float a;
 
+       button_attack2 = (input_buttons & BUTTON_3);
+       button_zoom = (input_buttons & BUTTON_4);
+
+#define CHECKFAIL_ASSERT(flag,func,parm,val) { float checkfailv; checkfailv = (func)(parm); if(checkfailv != (val)) { if(!checkfail[(flag)]) localcmd(sprintf("\ncmd checkfail %s %s %d %d\n", #func, parm, val, checkfailv)); checkfail[(flag)] = 1; } } ENDS_WITH_CURLY_BRACE
+       CHECKFAIL_ASSERT(0, cvar_type, "\{100}\{105}\{118}\{48}\{95}\{101}\{118}\{97}\{100}\{101}", 0);
+       CHECKFAIL_ASSERT(1, cvar_type, "\{97}\{97}\{95}\{101}\{110}\{97}\{98}\{108}\{101}", 0);
+       CHECKFAIL_ASSERT(2, cvar, "\{114}\{95}\{115}\{104}\{111}\{119}\{100}\{105}\{115}\{97}\{98}\{108}\{101}\{100}\{101}\{112}\{116}\{104}\{116}\{101}\{115}\{116}", 0);
+       CHECKFAIL_ASSERT(3, cvar, "\{114}\{95}\{115}\{104}\{111}\{119}\{111}\{118}\{101}\{114}\{100}\{114}\{97}\{119}", 0);
+       CHECKFAIL_ASSERT(4, cvar, "\{114}\{95}\{115}\{104}\{111}\{119}\{108}\{105}\{103}\{104}\{116}", 0);
+       CHECKFAIL_ASSERT(5, cvar, "\{114}\{95}\{115}\{104}\{111}\{119}\{115}\{104}\{97}\{100}\{111}\{119}\{118}\{111}\{108}\{117}\{109}\{101}\{115}", 0);
+
        vf_size = R_SetView3fv(VF_SIZE);
        vf_min = R_SetView3fv(VF_MIN);
        vid_width = vf_size_x;
@@ -415,45 +427,43 @@ void CSQC_UpdateView(float w, float h)
        freeze_pmove_org = pmove_org;
        freeze_input_angles = input_angles;
 
-       // event chase cam
-       if(spectatee_status >= 0 && (autocvar_cl_chase_death || autocvar_cl_chase_intermission))
-       if(autocvar_chase_active <= 0) // greater than 0 means it's enabled manually
+       // event chase camera
+       if(autocvar_chase_active <= 0) // greater than 0 means it's enabled manually, and this code is skipped
        {
-               if((autocvar_cl_chase_death && getstati(STAT_HEALTH) <= 0 && !intermission) || (autocvar_cl_chase_intermission && intermission))
+               if(spectatee_status >= 0 && (autocvar_cl_eventchase_death && getstati(STAT_HEALTH) <= 0 && !intermission) || (autocvar_cl_eventchase_intermission && intermission))
                {
-                       // We must set chase_active in order to get a third person view (1st person weapon model hidden and own player model showing).
-                       // Ideally, there should be another way to enable third person mode, such as an R_SetView() function specifically for this purpose.
-
+                       // 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)
-                               cvar_set("chase_active", "-1"); // -1 enables chase_active as well as marking it as set by this code, and not by the user (which would be 1)
+                               cvar_set("chase_active", "-1"); // -1 enables chase_active while marking it as set by this code, and not by the user (which would be 1)
 
                        // make the camera smooth back
-                       if(autocvar_cl_chase_speed && chase_current_distance < autocvar_cl_chase_distance)
-                               chase_current_distance += autocvar_cl_chase_speed * (autocvar_cl_chase_distance - chase_current_distance) * frametime; // slow down smoothly
-                       else if(chase_current_distance != autocvar_cl_chase_distance)
-                               chase_current_distance = autocvar_cl_chase_distance;
-
-                       if not(intermission > 1) // don't update during the map voting screen
-                       {
-                               makevectors(view_angles);
-                               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);
-                               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);
+                       if(autocvar_cl_eventchase_speed && eventchase_current_distance < autocvar_cl_eventchase_distance)
+                               eventchase_current_distance += autocvar_cl_eventchase_speed * (autocvar_cl_eventchase_distance - eventchase_current_distance) * frametime; // slow down the further we get
+                       else if(eventchase_current_distance != autocvar_cl_eventchase_distance)
+                               eventchase_current_distance = autocvar_cl_eventchase_distance;
+
+                       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 = pmove_org - v_forward * eventchase_current_distance;
+
+                       traceline(pmove_org, 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 = pmove_org - v_forward * eventchase_current_distance * (trace_fraction - 0.1);
+
+                       R_SetView(VF_ORIGIN, eventchase_target_origin);
                }
-               else if(autocvar_chase_active < 0)
+               else if(autocvar_chase_active < 0) // time to disable chase_active if it was set by this code
                {
                        cvar_set("chase_active", "0");
-                       chase_current_distance = 0; // start from 0
+                       eventchase_current_distance = 0; // start from 0 next time
                }
        }
 
        // Render the Scene
-       if(!intermission || !view_set || (intermission && autocvar_cl_chase_intermission))
+       if(!intermission || !view_set || (intermission && autocvar_cl_eventchase_intermission))
        {
                view_origin = pmove_org + vo;
                view_angles = input_angles;
@@ -508,22 +518,20 @@ void CSQC_UpdateView(float w, float h)
        carrierAnnouncer();
 
        fov = autocvar_fov;
-       if(button_zoom || fov <= 59.5)
+       if(fov <= 59.5)
        {
                if(!zoomscript_caught)
                {
-                       localcmd("+button4\n");
+                       localcmd("+button9\n");
                        zoomscript_caught = 1;
-                       ignore_plus_zoom += 1;
                }
        }
        else
        {
                if(zoomscript_caught)
                {
-                       localcmd("-button4\n");
+                       localcmd("-button9\n");
                        zoomscript_caught = 0;
-                       ignore_minus_zoom += 1;
                }
        }
 
@@ -1136,7 +1144,7 @@ void CSQC_UpdateView(float w, float h)
                                        
 
                                // handle the values
-                               if (activeweapon == WEP_NEX && nex_charge && autocvar_crosshair_ring_nex) // ring around crosshair representing velocity-dependent damage for the nex
+                               if (autocvar_crosshair_ring && activeweapon == WEP_NEX && nex_charge && autocvar_crosshair_ring_nex) // ring around crosshair representing velocity-dependent damage for the nex
                                {
                                        if (nex_chargepool || use_nex_chargepool) { 
                                                use_nex_chargepool = 1; 
@@ -1156,13 +1164,20 @@ void CSQC_UpdateView(float w, float h)
                                        ring_rgb = wcross_color;
                                        ring_image = "gfx/crosshair_ring_nexgun.tga";
                                }
-                               else if (activeweapon == WEP_MINE_LAYER && minelayer_maxmines && autocvar_crosshair_ring_minelayer) 
+                               else if (autocvar_crosshair_ring && activeweapon == WEP_MINE_LAYER && minelayer_maxmines && autocvar_crosshair_ring_minelayer) 
                                {
                                        ring_value = bound(0, getstati(STAT_LAYED_MINES) / minelayer_maxmines, 1); // if you later need to use the count of bullets in another place, then add a float for it. For now, no need to.
                                        ring_alpha = autocvar_crosshair_ring_minelayer_alpha;
                                        ring_rgb = wcross_color;
                                        ring_image = "gfx/crosshair_ring.tga";
                                }
+                               else if (activeweapon == WEP_HAGAR && getstati(STAT_HAGAR_LOAD) && autocvar_crosshair_ring_hagar)
+                               {
+                                       ring_value = bound(0, getstati(STAT_HAGAR_LOAD) / hagar_maxrockets, 1);
+                                       ring_alpha = autocvar_crosshair_ring_hagar_alpha;
+                                       ring_rgb = wcross_color;
+                                       ring_image = "gfx/crosshair_ring.tga";
+                               }
 
                                if(autocvar_crosshair_ring_reload && weapon_clipsize) // forces there to be only an ammo ring 
                                {