From 2863ee781000c0837d81a8ff25e5343252717309 Mon Sep 17 00:00:00 2001 From: div0 Date: Sat, 17 Oct 2009 14:41:10 +0000 Subject: [PATCH] moar crosshair effect stuff: cvar crosshair_effect_scalefade, and also fade the color git-svn-id: svn://svn.icculus.org/nexuiz/trunk@8147 f962a42d-fe04-0410-a3ab-8c8b0445ebaa --- data/defaultNexuiz.cfg | 1 + data/qcsrc/client/View.qc | 96 ++++++++++++++++++++++----------------- 2 files changed, 56 insertions(+), 41 deletions(-) diff --git a/data/defaultNexuiz.cfg b/data/defaultNexuiz.cfg index 7de18dc73..9b4260c40 100644 --- a/data/defaultNexuiz.cfg +++ b/data/defaultNexuiz.cfg @@ -114,6 +114,7 @@ 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 -1 "how fast (in seconds) some crosshair effects should take place, 0 = instant, -1 = 2x weapon switch time" +seta crosshair_effect_scalefade 1 "use scaling and fading for crosshair effects" 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 f616e72d0..cad9f48d7 100644 --- a/data/qcsrc/client/View.qc +++ b/data/qcsrc/client/View.qc @@ -208,10 +208,14 @@ vector GetCurrentFov(float fov) float zoomscript_caught; vector wcross_origin; -float wcross_sizefloat_prev, wcross_alpha_prev, wcross_blur_prev; -float wcross_sizefloat_goal_prev, wcross_alpha_goal_prev, wcross_blur_goal_prev; +float wcross_scale_prev, wcross_alpha_prev; +vector wcross_color_prev; +float wcross_scale_goal_prev, wcross_alpha_goal_prev; +vector wcross_color_goal_prev; float wcross_changedonetime; + string wcross_name_goal_prev, wcross_name_goal_prev_prev; +float wcross_resolution_goal_prev, wcross_resolution_goal_prev_prev; float wcross_name_changestarttime, wcross_name_changedonetime; float wcross_name_alpha_goal_prev, wcross_name_alpha_goal_prev_prev; entity trueaim; @@ -623,13 +627,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, wcross_blur; + float wcross_alpha, wcross_scale, wcross_blur, wcross_resolution; 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"); - wcross_sizefloat = cvar("crosshair_size"); + wcross_resolution = cvar("crosshair_size"); if (cvar("crosshair_per_weapon")) { e = get_weaponinfo(activeweapon); if (e && e.netname != "") @@ -647,32 +651,35 @@ void CSQC_UpdateView(float w, float h) } wcross_alpha *= cvar(strcat("crosshair_", wcross_wep, "_color_alpha")); - wcross_sizefloat *= cvar(strcat("crosshair_", wcross_wep, "_size")); + wcross_resolution *= 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 - if(shottype == SHOTTYPE_HITTEAM) - wcross_sizefloat /= cvar("crosshair_hittest"); // is not queried if hittest is 0 - if(shottype == SHOTTYPE_HITTEAM || (shottype == SHOTTYPE_HITOBSTRUCTION && cvar("crosshair_hittest_blur") && !cvar("chase_active"))) + if(cvar("crosshair_effect_scalefade")) { - wcross_alpha *= 0.75; - wcross_blur = 1; + wcross_scale = wcross_resolution; + wcross_resolution = 1; } else - wcross_blur = 0; + { + wcross_scale = 1; + } + + if(shottype == SHOTTYPE_HITENEMY) + wcross_scale *= cvar("crosshair_hittest"); // is not queried if hittest is 0 + if(shottype == SHOTTYPE_HITTEAM) + wcross_scale /= cvar("crosshair_hittest"); // is not queried if hittest is 0 f = cvar("crosshair_effect_speed"); if(f < 0) f *= -2 * g_weaponswitchdelay; - if(wcross_blur != wcross_blur_goal_prev || wcross_sizefloat != wcross_sizefloat_goal_prev || wcross_alpha != wcross_alpha_goal_prev) + if(wcross_scale != wcross_scale_goal_prev || wcross_alpha != wcross_alpha_goal_prev || wcross_color != wcross_color_goal_prev) { wcross_changedonetime = time + f; } - if(wcross_name != wcross_name_goal_prev) + if(wcross_name != wcross_name_goal_prev || wcross_resolution != wcross_resolution_goal_prev) { wcross_name_changestarttime = time; wcross_name_changedonetime = time + f; @@ -681,33 +688,40 @@ void CSQC_UpdateView(float w, float h) wcross_name_goal_prev_prev = wcross_name_goal_prev; wcross_name_goal_prev = strzone(wcross_name); wcross_name_alpha_goal_prev_prev = wcross_name_alpha_goal_prev; + wcross_resolution_goal_prev_prev = wcross_resolution_goal_prev; + wcross_resolution_goal_prev = wcross_resolution; } - wcross_sizefloat_goal_prev = wcross_sizefloat; + wcross_scale_goal_prev = wcross_scale; wcross_alpha_goal_prev = wcross_alpha; - wcross_blur_goal_prev = wcross_blur; + wcross_color_goal_prev = wcross_color; + if(shottype == SHOTTYPE_HITTEAM || (shottype == SHOTTYPE_HITOBSTRUCTION && cvar("crosshair_hittest_blur") && !cvar("chase_active"))) + { + wcross_blur = 1; + wcross_alpha *= 0.75; + } + else + wcross_blur = 0; // *_prev is at time-frametime // * is at wcross_changedonetime+f // what do we have at time? if(time < wcross_changedonetime) { f = frametime / (wcross_changedonetime - time + frametime); - wcross_sizefloat = f * wcross_sizefloat + (1 - f) * wcross_sizefloat_prev; + wcross_scale = f * wcross_scale + (1 - f) * wcross_scale_prev; wcross_alpha = f * wcross_alpha + (1 - f) * wcross_alpha_prev; - //wcross_blur = (frametime / f) * wcross_blur + (1 - frametime / f) * wcross_blur_prev; + wcross_color = f * wcross_color + (1 - f) * wcross_color_prev; } - wcross_sizefloat_prev = wcross_sizefloat; + wcross_scale_prev = wcross_scale; wcross_alpha_prev = wcross_alpha; - wcross_blur_prev = wcross_blur; + wcross_color_prev = wcross_color; - wcross_sizefloat *= 1 - cvar("_menu_alpha"); + wcross_scale *= 1 - cvar("_menu_alpha"); wcross_alpha *= 1 - cvar("_menu_alpha"); - wcross_size = drawgetimagesize(wcross_name); - wcross_size_x *= wcross_sizefloat; - wcross_size_y *= wcross_sizefloat; + wcross_size = drawgetimagesize(wcross_name) * wcross_scale; // ring around crosshair representing bullets left in camping rifle clip if (activeweapon == WEP_CAMPINGRIFLE) @@ -718,10 +732,10 @@ void CSQC_UpdateView(float w, float h) else bullets = 0; -#define CROSSHAIR_DRAW_RING(i,j,dummy1,dummy2) \ - drawpic(wcross_origin - ('0.5 0 0' * (wcross_size_x * ring_scale + i * wcross_blur) + '0 0.5 0' * (wcross_size_y * ring_scale + j * wcross_blur)), strcat("gfx/hud/rifle_ring_", ftos(bullets)), wcross_size * ring_scale, wcross_color, wcross_alpha, DRAWFLAG_NORMAL) +#define CROSSHAIR_DRAW_RING(i,j,sz,dummy1,dummy2) \ + drawpic(wcross_origin - ('0.5 0 0' * (sz * wcross_size_x * ring_scale + i * wcross_blur) + '0 0.5 0' * (sz * wcross_size_y * ring_scale + j * wcross_blur)), strcat("gfx/hud/rifle_ring_", ftos(bullets)), sz * wcross_size * ring_scale, wcross_color, wcross_alpha, DRAWFLAG_NORMAL) -#define CROSSHAIR_DO_BLUR(M,a,b) \ +#define CROSSHAIR_DO_BLUR(M,sz,a,b) \ do \ { \ if(wcross_blur > 0) \ @@ -729,48 +743,46 @@ void CSQC_UpdateView(float w, float h) wcross_alpha = wcross_alpha * 0.04; \ for(i = -2; i <= 2; ++i) \ for(j = -2; j <= 2; ++j) \ - M(i,j,a,b); \ + M(i,j,sz,a,b); \ } \ else \ { \ - M(0,0,a,b); \ + M(0,0,sz,a,b); \ } \ } \ while(0) -#define CROSSHAIR_DRAW_SINGLE(i,j,wcross_name,wcross_alpha) \ - drawpic(wcross_origin - ('0.5 0 0' * (wcross_size_x + i * wcross_blur) + '0 0.5 0' * (wcross_size_y + j * wcross_blur)), wcross_name, wcross_size, wcross_color, wcross_alpha, DRAWFLAG_NORMAL) +#define CROSSHAIR_DRAW_SINGLE(i,j,sz,wcross_name,wcross_alpha) \ + drawpic(wcross_origin - ('0.5 0 0' * (sz * wcross_size_x + i * wcross_blur) + '0 0.5 0' * (sz * wcross_size_y + j * wcross_blur)), wcross_name, sz * wcross_size, wcross_color, wcross_alpha, DRAWFLAG_NORMAL) -#define CROSSHAIR_DRAW(wcross_name,wcross_alpha) \ - CROSSHAIR_DO_BLUR(CROSSHAIR_DRAW_SINGLE,wcross_name,wcross_alpha) +#define CROSSHAIR_DRAW(sz,wcross_name,wcross_alpha) \ + CROSSHAIR_DO_BLUR(CROSSHAIR_DRAW_SINGLE,sz,wcross_name,wcross_alpha) if(bullets) { - CROSSHAIR_DO_BLUR(CROSSHAIR_DRAW_RING, 0, 0); + CROSSHAIR_DO_BLUR(CROSSHAIR_DRAW_RING, wcross_resolution, 0, 0); } if(time < wcross_name_changedonetime && wcross_name != wcross_name_goal_prev_prev && wcross_name_goal_prev_prev) { f = (wcross_name_changedonetime - time) / (wcross_name_changedonetime - wcross_name_changestarttime); - CROSSHAIR_DRAW(wcross_name_goal_prev_prev, wcross_alpha * f * wcross_name_alpha_goal_prev_prev); + CROSSHAIR_DRAW(wcross_resolution_goal_prev_prev, wcross_name_goal_prev_prev, wcross_alpha * f * wcross_name_alpha_goal_prev_prev); f = 1 - f; } else { f = 1; } - CROSSHAIR_DRAW(wcross_name, wcross_alpha * f); + CROSSHAIR_DRAW(wcross_resolution, wcross_name, wcross_alpha * f); wcross_name_alpha_goal_prev = f; } } else { - wcross_sizefloat_prev = 0; + wcross_scale_prev = 0; wcross_alpha_prev = 0; - wcross_blur_prev = 0; - wcross_sizefloat_goal_prev = 0; + wcross_scale_goal_prev = 0; wcross_alpha_goal_prev = 0; - wcross_blur_goal_prev = 0; wcross_changedonetime = 0; if(wcross_name_goal_prev) strunzone(wcross_name_goal_prev); @@ -782,6 +794,8 @@ void CSQC_UpdateView(float w, float h) wcross_name_changedonetime = 0; wcross_name_alpha_goal_prev = 0; wcross_name_alpha_goal_prev_prev = 0; + wcross_resolution_goal_prev = 0; + wcross_resolution_goal_prev_prev = 0; } } -- 2.39.2