]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Colorize vehicle's crosshair (optional, cl_vehicles_crosshair_colorize 0 to use old...
authorMario <mario@smbclan.net>
Thu, 24 Mar 2016 17:50:37 +0000 (03:50 +1000)
committerMario <mario@smbclan.net>
Thu, 24 Mar 2016 17:50:37 +0000 (03:50 +1000)
qcsrc/client/autocvars.qh
qcsrc/client/view.qc
qcsrc/client/view.qh
qcsrc/common/vehicles/cl_vehicles.qc

index ac02e4c1d00c67ac79946ba435d60251adbc3719..3320b16620927c9840efeb86021f73ec1392484d 100644 (file)
@@ -82,6 +82,7 @@ bool autocvar_cl_vehicles_hud_tactical = true;
 float autocvar_cl_vehicles_hudscale = 0.5;
 float autocvar_cl_vehicles_notify_time = 15;
 float autocvar_cl_vehicles_crosshair_size = 0.5;
+bool autocvar_cl_vehicles_crosshair_colorize = true;
 bool autocvar__vehicles_shownchasemessage;
 bool autocvar_cl_velocityzoom_enabled;
 float autocvar_cl_velocityzoom_factor;
index 276c0b18ec7441700c7b7c9115966a1949030236..ed675fc6b7cdd34409fabefd05378f44ce0eeec2 100644 (file)
@@ -842,10 +842,88 @@ void HitSound()
        }
 }
 
-void HUD_Crosshair()
-{SELFPARAM();
+vector crosshair_getcolor(entity this, float health_stat)
+{
        static float rainbow_last_flicker;
        static vector rainbow_prev_color;
+       vector wcross_color = '0 0 0';
+       switch(autocvar_crosshair_color_special)
+       {
+               case 1: // crosshair_color_per_weapon
+               {
+                       if(this)
+                       {
+                               wcross_color = this.wpcolor;
+                               break;
+                       }
+                       else { goto normalcolor; }
+               }
+
+               case 2: // crosshair_color_by_health
+               {
+                       float x = health_stat;
+
+                       //x = red
+                       //y = green
+                       //z = blue
+
+                       wcross_color.z = 0;
+
+                       if(x > 200)
+                       {
+                               wcross_color.x = 0;
+                               wcross_color.y = 1;
+                       }
+                       else if(x > 150)
+                       {
+                               wcross_color.x = 0.4 - (x-150)*0.02 * 0.4;
+                               wcross_color.y = 0.9 + (x-150)*0.02 * 0.1;
+                       }
+                       else if(x > 100)
+                       {
+                               wcross_color.x = 1 - (x-100)*0.02 * 0.6;
+                               wcross_color.y = 1 - (x-100)*0.02 * 0.1;
+                               wcross_color.z = 1 - (x-100)*0.02;
+                       }
+                       else if(x > 50)
+                       {
+                               wcross_color.x = 1;
+                               wcross_color.y = 1;
+                               wcross_color.z = 0.2 + (x-50)*0.02 * 0.8;
+                       }
+                       else if(x > 20)
+                       {
+                               wcross_color.x = 1;
+                               wcross_color.y = (x-20)*90/27/100;
+                               wcross_color.z = (x-20)*90/27/100 * 0.2;
+                       }
+                       else
+                       {
+                               wcross_color.x = 1;
+                               wcross_color.y = 0;
+                       }
+                       break;
+               }
+
+               case 3: // crosshair_color_rainbow
+               {
+                       if(time >= rainbow_last_flicker)
+                       {
+                               rainbow_prev_color = randomvec() * autocvar_crosshair_color_special_rainbow_brightness;
+                               rainbow_last_flicker = time + autocvar_crosshair_color_special_rainbow_delay;
+                       }
+                       wcross_color = rainbow_prev_color;
+                       break;
+               }
+LABEL(normalcolor)
+               default: { wcross_color = stov(autocvar_crosshair_color); break; }
+       }
+
+       return wcross_color;
+}
+
+void HUD_Crosshair()
+{SELFPARAM();
        entity e = this;
        float f, i, j;
        vector v;
@@ -926,77 +1004,7 @@ void HUD_Crosshair()
                        wcross_name = strcat("gfx/crosshair", wcross_style);
 
                // MAIN CROSSHAIR COLOR DECISION
-               switch(autocvar_crosshair_color_special)
-               {
-                       case 1: // crosshair_color_per_weapon
-                       {
-                               if(e)
-                               {
-                                       wcross_color = e.wpcolor;
-                                       break;
-                               }
-                               else { goto normalcolor; }
-                       }
-
-                       case 2: // crosshair_color_by_health
-                       {
-                               float x = STAT(HEALTH);
-
-                               //x = red
-                               //y = green
-                               //z = blue
-
-                               wcross_color.z = 0;
-
-                               if(x > 200)
-                               {
-                                       wcross_color.x = 0;
-                                       wcross_color.y = 1;
-                               }
-                               else if(x > 150)
-                               {
-                                       wcross_color.x = 0.4 - (x-150)*0.02 * 0.4;
-                                       wcross_color.y = 0.9 + (x-150)*0.02 * 0.1;
-                               }
-                               else if(x > 100)
-                               {
-                                       wcross_color.x = 1 - (x-100)*0.02 * 0.6;
-                                       wcross_color.y = 1 - (x-100)*0.02 * 0.1;
-                                       wcross_color.z = 1 - (x-100)*0.02;
-                               }
-                               else if(x > 50)
-                               {
-                                       wcross_color.x = 1;
-                                       wcross_color.y = 1;
-                                       wcross_color.z = 0.2 + (x-50)*0.02 * 0.8;
-                               }
-                               else if(x > 20)
-                               {
-                                       wcross_color.x = 1;
-                                       wcross_color.y = (x-20)*90/27/100;
-                                       wcross_color.z = (x-20)*90/27/100 * 0.2;
-                               }
-                               else
-                               {
-                                       wcross_color.x = 1;
-                                       wcross_color.y = 0;
-                               }
-                               break;
-                       }
-
-                       case 3: // crosshair_color_rainbow
-                       {
-                               if(time >= rainbow_last_flicker)
-                               {
-                                       rainbow_prev_color = randomvec() * autocvar_crosshair_color_special_rainbow_brightness;
-                                       rainbow_last_flicker = time + autocvar_crosshair_color_special_rainbow_delay;
-                               }
-                               wcross_color = rainbow_prev_color;
-                               break;
-                       }
-LABEL(normalcolor)
-                       default: { wcross_color = stov(autocvar_crosshair_color); break; }
-               }
+               wcross_color = crosshair_getcolor(e, STAT(HEALTH));
 
                if(autocvar_crosshair_effect_scalefade)
                {
index 6f70f09beec2219624baeca92e2cd7deaa104fb4..f8c8bd26b65e20203bcdf36d08869345bb516951 100644 (file)
@@ -1 +1,3 @@
 #pragma once
+
+vector crosshair_getcolor(entity this, float health_stat);
index 9a9b8b08bc3b6b2f43dafb2932ffe118c5ac8a41..e2187290d97910574b1b51a2537e2eefd42538ac 100644 (file)
@@ -304,6 +304,10 @@ void Vehicles_drawCrosshair(string crosshair)
                tmpPos.x = (vid_conwidth - tmpSize.x) / 2;
                tmpPos.y = (vid_conheight - tmpSize.y) / 2;
 
-               drawpic(tmpPos, crosshair, tmpSize, '1 1 1', autocvar_crosshair_alpha, DRAWFLAG_NORMAL);
+               vector wcross_color = '1 1 1';
+               if(autocvar_cl_vehicles_crosshair_colorize)
+                       wcross_color = crosshair_getcolor(NULL, STAT(VEHICLESTAT_HEALTH));
+
+               drawpic(tmpPos, crosshair, tmpSize, wcross_color, autocvar_crosshair_alpha, DRAWFLAG_NORMAL);
        }
 }