From 449cdee5266d0e9cfe29e910867af47f3293f1e3 Mon Sep 17 00:00:00 2001 From: fruitiex Date: Tue, 13 Oct 2009 18:41:37 +0000 Subject: [PATCH] smooth crosshair effects by Taoki git-svn-id: svn://svn.icculus.org/nexuiz/trunk@8119 f962a42d-fe04-0410-a3ab-8c8b0445ebaa --- data/defaultNexuiz.cfg | 1 + data/qcsrc/client/View.qc | 39 +++++++++++++++++++++++++++++++-------- 2 files changed, 32 insertions(+), 8 deletions(-) diff --git a/data/defaultNexuiz.cfg b/data/defaultNexuiz.cfg index f0b3328a4..9ae935cc6 100644 --- a/data/defaultNexuiz.cfg +++ b/data/defaultNexuiz.cfg @@ -113,6 +113,7 @@ _cl_playerskin 0 crosshair 1 seta crosshair_per_weapon 0 "when 1, each gun will display a different crosshair" seta crosshair_color_override 0 "when 1, crosshair_color_* overrides the per-weapon color" +seta crosshair_effect_speed 0.05 "how fast some crosshair effects should take place, 0 = instant" seta crosshair_hittest 1 "do a crosshair hit evaluation; also, the crosshair is scaled by the given number when aiming at an enemy, and blurred when aiming at a team mate" seta crosshair_hittest_blur 1 "blur the crosshair if the shot is obstructed" seta crosshair_hittest_showimpact 0 "move the crosshair to the actual impact location if obstructed" diff --git a/data/qcsrc/client/View.qc b/data/qcsrc/client/View.qc index 5e90de28e..139caed45 100644 --- a/data/qcsrc/client/View.qc +++ b/data/qcsrc/client/View.qc @@ -208,6 +208,7 @@ vector GetCurrentFov(float fov) float zoomscript_caught; vector wcross_origin; +float wcross_sizefloat, wcross_alpha; entity trueaim; entity trueaim_rifle; @@ -617,13 +618,13 @@ void CSQC_UpdateView(float w, float h) if (wcross_style != "0") { vector wcross_color, wcross_size; string wcross_wep, wcross_name; - float wcross_alpha, wcross_sizefloat; + float wcross_alpha_initial, wcross_alpha_old, wcross_sizefloat_initial; wcross_color_x = cvar("crosshair_color_red"); wcross_color_y = cvar("crosshair_color_green"); wcross_color_z = cvar("crosshair_color_blue"); - wcross_alpha = cvar("crosshair_color_alpha") * (1-cvar("_menu_alpha")); - wcross_sizefloat = cvar("crosshair_size") * (1-cvar("_menu_alpha")); + wcross_alpha_initial = cvar("crosshair_color_alpha") * (1-cvar("_menu_alpha")); + wcross_sizefloat_initial = cvar("crosshair_size") * (1-cvar("_menu_alpha")); if (cvar("crosshair_per_weapon")) { e = get_weaponinfo(activeweapon); if (e && e.netname != "") @@ -640,17 +641,26 @@ void CSQC_UpdateView(float w, float h) wcross_color_z = cvar(strcat("crosshair_", wcross_wep, "_color_blue")); } - wcross_alpha *= cvar(strcat("crosshair_", wcross_wep, "_color_alpha")); - wcross_sizefloat *= cvar(strcat("crosshair_", wcross_wep, "_size")); + wcross_alpha_initial *= cvar(strcat("crosshair_", wcross_wep, "_color_alpha")); + wcross_sizefloat_initial *= cvar(strcat("crosshair_", wcross_wep, "_size")); } } wcross_name = strcat("gfx/crosshair", wcross_style); if(shottype == SHOTTYPE_HITENEMY) - wcross_sizefloat *= cvar("crosshair_hittest"); // is not queried if hittest is 0 + wcross_sizefloat_initial *= cvar("crosshair_hittest"); // is not queried if hittest is 0 if(shottype == SHOTTYPE_HITTEAM) - wcross_sizefloat /= cvar("crosshair_hittest"); // is not queried if hittest is 0 + wcross_sizefloat_initial /= cvar("crosshair_hittest"); // is not queried if hittest is 0 + + if(cvar("crosshair_effect_speed") <= 0 || 1-cvar("_menu_alpha") != 1) + wcross_sizefloat = wcross_sizefloat_initial; + else if(wcross_sizefloat < (wcross_sizefloat_initial - cvar("crosshair_effect_speed"))) + wcross_sizefloat += cvar("crosshair_effect_speed"); + else if(wcross_sizefloat > (wcross_sizefloat_initial + cvar("crosshair_effect_speed"))) + wcross_sizefloat -= cvar("crosshair_effect_speed"); + else + wcross_sizefloat = wcross_sizefloat_initial; wcross_size = drawgetimagesize(wcross_name); wcross_size_x *= wcross_sizefloat; @@ -667,7 +677,8 @@ void CSQC_UpdateView(float w, float h) if(shottype == SHOTTYPE_HITTEAM || (shottype == SHOTTYPE_HITOBSTRUCTION && cvar("crosshair_hittest_blur") && !cvar("chase_active"))) { - wcross_alpha *= 0.04 * 0.75; + wcross_alpha_old = wcross_alpha; + wcross_alpha = wcross_alpha_initial * 0.04 * 0.75; for(i = -2; i <= 2; ++i) for(j = -2; j <= 2; ++j) { @@ -675,9 +686,18 @@ void CSQC_UpdateView(float w, float h) drawpic(wcross_origin - '0.5 0 0' * (wcross_size_x * ring_scale + i) - '0 0.5 0' * (wcross_size_y * ring_scale + j), strcat("gfx/hud/rifle_ring_", ftos(bullets)), wcross_size * ring_scale, wcross_color, wcross_alpha, DRAWFLAG_NORMAL); drawpic(wcross_origin - '0.5 0 0' * (wcross_size_x + i) - '0 0.5 0' * (wcross_size_y + j), wcross_name, wcross_size, wcross_color, wcross_alpha, DRAWFLAG_NORMAL); } + wcross_alpha = wcross_alpha_old; } else { + if(cvar("crosshair_effect_speed") <= 0 || 1-cvar("_menu_alpha") != 1) + wcross_alpha = wcross_alpha_initial; + else if(wcross_alpha < (wcross_alpha_initial - cvar("crosshair_effect_speed") * 1.5)) + wcross_alpha += cvar("crosshair_effect_speed") * 1.5; + else if(wcross_alpha > (wcross_alpha_initial + cvar("crosshair_effect_speed") * 1.5)) + wcross_alpha -= cvar("crosshair_effect_speed") * 1.5; + else + wcross_alpha = wcross_alpha_initial; if (bullets) drawpic(wcross_origin - '0.5 0 0' * (wcross_size_x * ring_scale) - '0 0.5 0' * (wcross_size_y * ring_scale), strcat("gfx/hud/rifle_ring_", ftos(bullets)), wcross_size * ring_scale, wcross_color, wcross_alpha, DRAWFLAG_NORMAL); drawpic(wcross_origin - '0.5 0 0' * (wcross_size_x) - '0 0.5 0' * ( wcross_size_y), wcross_name, wcross_size, wcross_color, wcross_alpha, DRAWFLAG_NORMAL); @@ -805,6 +825,9 @@ void CSQC_common_hud(void) CSQC_spider_HUD(); break; } + + if (getstati(STAT_HEALTH) <= 0) + wcross_sizefloat = wcross_alpha = 0; } -- 2.39.2