X-Git-Url: https://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=blobdiff_plain;f=qcsrc%2Fclient%2FView.qc;h=2c3ce6b8f54e898e96e8ab05bb0c14e1b15462a6;hp=55c6dfecbdfe75c1edd7c80d32157b9182d3be54;hb=580c768d0f2e32d2b545fa80c08c515aeb0ca67a;hpb=fb10ae43a94b9047a1e3fc3af3cfb173c8c1151c diff --git a/qcsrc/client/View.qc b/qcsrc/client/View.qc index 55c6dfecb..2c3ce6b8f 100644 --- a/qcsrc/client/View.qc +++ b/qcsrc/client/View.qc @@ -697,179 +697,6 @@ void CSQC_UpdateView(float w, float h) if(cvar("viewsize") < 120) CSQC_common_hud(); - - // ring around crosshair representing velocity-dependent damage for the nex - if (activeweapon == WEP_NEX) - { - float x, y, x0, y0, q, d; - vector ringorigin, ringsize, t; - ringorigin = '0.5 0 0' * vid_conwidth + '0 0.5 0' * vid_conheight; - ringsize = 64 * '1 1 0'; // testing only - - // TODO send from server - float maxvel, minvel, curvel; - minvel = 400; - maxvel = 1000; - curvel = vlen(pmove_vel); - - f = bound(0, (curvel - minvel) / (maxvel - minvel), 1); - x = cos(f * 2 * M_PI); - y = sin(f * 2 * M_PI); - q = fabs(x) + fabs(y); - x /= q; - y /= q; - - if(f >= 1) - { - // draw full rectangle - R_BeginPolygon("gfx/nex_ring.tga", DRAWFLAG_ADDITIVE); - v = ringorigin; t = '0.5 0.5 0'; - v_x += 0.5 * ringsize_x; t += '0.5 0.5 0'; - R_PolygonVertex(v, t, '1 1 1', 1); - - v = ringorigin; t = '0.5 0.5 0'; - v_y += 0.5 * ringsize_y; t += '0.5 -0.5 0'; - R_PolygonVertex(v, t, '1 1 1', 1); - - v = ringorigin; t = '0.5 0.5 0'; - v_x -= 0.5 * ringsize_y; t -= '0.5 0.5 0'; - R_PolygonVertex(v, t, '1 1 1', 1); - - v = ringorigin; t = '0.5 0.5 0'; - v_y -= 0.5 * ringsize_y; t -= '0.5 -0.5 0'; - R_PolygonVertex(v, t, '1 1 1', 1); - R_EndPolygon(); - - x0 = 1; - y0 = 0; - d = q - 1; - if(d > 0) - { - R_BeginPolygon("gfx/nex_ring.tga", DRAWFLAG_ADDITIVE); - v = ringorigin; t = '0.5 0.5 0'; - R_PolygonVertex(v, t, '1 1 1', 1); - - v = ringorigin; t = '0.5 0.5 0'; - v_x += x0 * 0.5 * ringsize_x; t += x0 * '0.5 0.5 0'; - v_y += y0 * 0.5 * ringsize_x; t += y0 * '0.5 -0.5 0'; - R_PolygonVertex(v, t, '1 1 1', 1); - } - } - else if(f > 0.75) - { - // draw upper and first triangle - R_BeginPolygon("gfx/nex_ring.tga", DRAWFLAG_ADDITIVE); - v = ringorigin; t = '0.5 0.5 0'; - v_x += 0.5 * ringsize_x; t += '0.5 0.5 0'; - R_PolygonVertex(v, t, '1 1 1', 1); - - v = ringorigin; t = '0.5 0.5 0'; - v_y += 0.5 * ringsize_y; t += '0.5 -0.5 0'; - R_PolygonVertex(v, t, '1 1 1', 1); - - v = ringorigin; t = '0.5 0.5 0'; - v_x -= 0.5 * ringsize_y; t -= '0.5 0.5 0'; - R_PolygonVertex(v, t, '1 1 1', 1); - R_EndPolygon(); - R_BeginPolygon("gfx/nex_ring.tga", DRAWFLAG_ADDITIVE); - v = ringorigin; t = '0.5 0.5 0'; - R_PolygonVertex(v, t, '1 1 1', 1); - - v = ringorigin; t = '0.5 0.5 0'; - v_x -= 0.5 * ringsize_y; t -= '0.5 0.5 0'; - R_PolygonVertex(v, t, '1 1 1', 1); - - v = ringorigin; t = '0.5 0.5 0'; - v_y -= 0.5 * ringsize_y; t -= '0.5 -0.5 0'; - R_PolygonVertex(v, t, '1 1 1', 1); - - x0 = 0; - y0 = -1; - d = q - 0.75; - if(d <= 0) - R_EndPolygon(); - } - else if(f > 0.5) - { - // draw upper triangle - R_BeginPolygon("gfx/nex_ring.tga", DRAWFLAG_ADDITIVE); - v = ringorigin; t = '0.5 0.5 0'; - v_x += 0.5 * ringsize_x; t += '0.5 0.5 0'; - R_PolygonVertex(v, t, '1 1 1', 1); - - v = ringorigin; t = '0.5 0.5 0'; - v_y += 0.5 * ringsize_y; t += '0.5 -0.5 0'; - R_PolygonVertex(v, t, '1 1 1', 1); - - v = ringorigin; t = '0.5 0.5 0'; - v_x -= 0.5 * ringsize_y; t -= '0.5 0.5 0'; - R_PolygonVertex(v, t, '1 1 1', 1); - R_EndPolygon(); - - x0 = -1; - y0 = 0; - d = q - 0.5; - if(d > 0) - { - R_BeginPolygon("gfx/nex_ring.tga", DRAWFLAG_ADDITIVE); - v = ringorigin; t = '0.5 0.5 0'; - R_PolygonVertex(v, t, '1 1 1', 1); - - v = ringorigin; t = '0.5 0.5 0'; - v_x += x0 * 0.5 * ringsize_x; t += x0 * '0.5 0.5 0'; - v_y += y0 * 0.5 * ringsize_x; t += y0 * '0.5 -0.5 0'; - R_PolygonVertex(v, t, '1 1 1', 1); - } - } - else if(f > 0.25) - { - // draw first triangle - R_BeginPolygon("gfx/nex_ring.tga", DRAWFLAG_ADDITIVE); - v = ringorigin; t = '0.5 0.5 0'; - R_PolygonVertex(v, t, '1 1 1', 1); - - v = ringorigin; t = '0.5 0.5 0'; - v_x += 0.5 * ringsize_y; t += '0.5 0.5 0'; - R_PolygonVertex(v, t, '1 1 1', 1); - - v = ringorigin; t = '0.5 0.5 0'; - v_y += 0.5 * ringsize_y; t += '0.5 -0.5 0'; - R_PolygonVertex(v, t, '1 1 1', 1); - - x0 = 0; - y0 = 1; - d = q - 0.25; - if(d <= 0) - R_EndPolygon(); - } - else - { - x0 = 1; - y0 = 0; - d = q; - if(d > 0) - { - R_BeginPolygon("gfx/nex_ring.tga", DRAWFLAG_ADDITIVE); - v = ringorigin; t = '0.5 0.5 0'; - R_PolygonVertex(v, t, '1 1 1', 1); - - v = ringorigin; t = '0.5 0.5 0'; - v_x += x0 * 0.5 * ringsize_x; t += x0 * '0.5 0.5 0'; - v_y += y0 * 0.5 * ringsize_x; t += y0 * '0.5 -0.5 0'; - R_PolygonVertex(v, t, '1 1 1', 1); - } - } - - if(d > 0) - { - v = ringorigin; t = '0.5 0.5 0'; - v_x += x * 0.5 * ringsize_x; t += x * '0.5 0.5 0'; - v_y += y * 0.5 * ringsize_y; t += y * '0.5 -0.5 0'; - R_PolygonVertex(v, t, '1 1 1', 1); - R_EndPolygon(); - } - } - // crosshair goes VERY LAST if(!scoreboard_active && !camera_active && intermission != 2) { // TrueAim check @@ -997,17 +824,34 @@ void CSQC_UpdateView(float w, float h) wcross_scale *= 1 - cvar("_menu_alpha"); wcross_alpha *= 1 - cvar("_menu_alpha"); + ring_scale = cvar("crosshair_ring_size"); + + float f, a; + wcross_size = drawgetimagesize(wcross_name) * wcross_scale; + + float xyspeed; + xyspeed = vlen('1 0 0' * pmove_vel_x + '0 1 0' * pmove_vel_y); + if(xyspeed > nex_speed) + nex_speed = min(xyspeed, nex_maxvelocity); + else + nex_speed = (1 - nex_speed_falloff_factor) * nex_speed; + // ring around crosshair representing bullets left in camping rifle clip - if (activeweapon == WEP_CAMPINGRIFLE) + if (activeweapon == WEP_CAMPINGRIFLE && cr_maxbullets) { - ring_scale = cvar("crosshair_campingrifle_ring_size"); - bullets = bound(0, getstati(STAT_BULLETS_LOADED), 4); + bullets = getstati(STAT_BULLETS_LOADED); + f = bound(0, bullets / cr_maxbullets, 1); + + a = cvar("crosshair_campingrifle_bulletcounter_alpha"); + DrawCircleClippedPic(wcross_origin, wcross_size_x * ring_scale, "gfx/crosshair_ring.tga", f, wcross_color, wcross_alpha * a, DRAWFLAG_ADDITIVE); } - else - bullets = 0; + else if (activeweapon == WEP_NEX) // ring around crosshair representing velocity-dependent damage for the nex + { + f = bound(0, (nex_speed - nex_minvelocity) / (nex_maxvelocity - nex_minvelocity), 1); -#define CROSSHAIR_DRAW_RING(i,j,sz,wcross_name,wcross_alpha) \ - 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/rifle_ring_", ftos(bullets)), sz * wcross_size * ring_scale, wcross_color, wcross_alpha, DRAWFLAG_NORMAL) + a = cvar("crosshair_nexvelocity_alpha"); + DrawCircleClippedPic(wcross_origin, wcross_size_x * ring_scale, "gfx/crosshair_ring.tga", f, wcross_color, wcross_alpha * a, DRAWFLAG_ADDITIVE); + } #define CROSSHAIR_DO_BLUR(M,sz,wcross_name,wcross_alpha) \ do \ @@ -1044,11 +888,11 @@ void CSQC_UpdateView(float w, float h) } wcross_size = drawgetimagesize(wcross_name) * wcross_scale; - if(bullets) - { - CROSSHAIR_DO_BLUR(CROSSHAIR_DRAW_RING, wcross_resolution, wcross_name, wcross_alpha); - } CROSSHAIR_DRAW(wcross_resolution, wcross_name, wcross_alpha * f); + + if(cvar("crosshair_dot")) + CROSSHAIR_DRAW(wcross_resolution * cvar("crosshair_dot_size"), "gfx/crosshairdot.tga", wcross_alpha * f * cvar("crosshair_dot_alpha")); + wcross_name_alpha_goal_prev = f; } }