From abf74b0543eb5ab63732d96b808e3722046c3abb Mon Sep 17 00:00:00 2001 From: Mario Date: Fri, 25 Mar 2016 03:50:37 +1000 Subject: [PATCH] Colorize vehicle's crosshair (optional, cl_vehicles_crosshair_colorize 0 to use old white color) --- qcsrc/client/autocvars.qh | 1 + qcsrc/client/view.qc | 154 ++++++++++++++------------- qcsrc/client/view.qh | 2 + qcsrc/common/vehicles/cl_vehicles.qc | 6 +- 4 files changed, 89 insertions(+), 74 deletions(-) diff --git a/qcsrc/client/autocvars.qh b/qcsrc/client/autocvars.qh index ac02e4c1d..3320b1662 100644 --- a/qcsrc/client/autocvars.qh +++ b/qcsrc/client/autocvars.qh @@ -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; diff --git a/qcsrc/client/view.qc b/qcsrc/client/view.qc index 276c0b18e..ed675fc6b 100644 --- a/qcsrc/client/view.qc +++ b/qcsrc/client/view.qc @@ -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) { diff --git a/qcsrc/client/view.qh b/qcsrc/client/view.qh index 6f70f09be..f8c8bd26b 100644 --- a/qcsrc/client/view.qh +++ b/qcsrc/client/view.qh @@ -1 +1,3 @@ #pragma once + +vector crosshair_getcolor(entity this, float health_stat); diff --git a/qcsrc/common/vehicles/cl_vehicles.qc b/qcsrc/common/vehicles/cl_vehicles.qc index 9a9b8b08b..e2187290d 100644 --- a/qcsrc/common/vehicles/cl_vehicles.qc +++ b/qcsrc/common/vehicles/cl_vehicles.qc @@ -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); } } -- 2.39.2