X-Git-Url: https://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=blobdiff_plain;f=qcsrc%2Fclient%2FView.qc;h=5d5f28789e0449dd846777465d6174db501dc1f6;hp=547f90268ec14904bf71cda677bf4dc248fcf367;hb=e64a2a1d922f7bb65999b71d1c35fd9e42def55d;hpb=55f87426a3f58e4161eae8a7e8523f165cb9da00 diff --git a/qcsrc/client/View.qc b/qcsrc/client/View.qc index 547f90268e..5d5f28789e 100644 --- a/qcsrc/client/View.qc +++ b/qcsrc/client/View.qc @@ -214,6 +214,9 @@ 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; + +float wcross_ring_prev; + entity trueaim; entity trueaim_rifle; @@ -381,6 +384,9 @@ vector damage_blurpostprocess, content_blurpostprocess; float checkfail[16]; +float rainbow_last_flicker; +vector rainbow_prev_color; + #define BUTTON_3 4 #define BUTTON_4 8 float cl_notice_run(); @@ -477,7 +483,16 @@ void CSQC_UpdateView(float w, float h) if(spectatee_status >= 0 && (autocvar_cl_eventchase_death && is_dead) || intermission) { // make special vector since we can't use view_origin (It is one frame old as of this code, it gets set later with the results this code makes.) - vector current_view_origin = ((csqcplayer ? csqcplayer.origin : pmove_org) + autocvar_cl_eventchase_viewoffset); + vector current_view_origin = (csqcplayer ? csqcplayer.origin : pmove_org); + + // detect maximum viewoffset and use it + WarpZone_TraceLine(current_view_origin, current_view_origin + autocvar_cl_eventchase_viewoffset + ('0 0 1' * autocvar_cl_eventchase_maxs_z), MOVE_WORLDONLY, self); + current_view_origin_z += + max(0, + (trace_fraction * autocvar_cl_eventchase_viewoffset_z) + - + autocvar_cl_eventchase_maxs_z + ); // We must enable chase_active to get a third person view (weapon viewmodel hidden and own player model showing). // Ideally, there should be another way to enable third person cameras, such as through setproperty() @@ -895,8 +910,8 @@ void CSQC_UpdateView(float w, float h) } } } - - if(autocvar_hud_damage) + + if(autocvar_hud_damage && !getstati(STAT_FROZEN)) { splash_size_x = max(vid_conwidth, vid_conheight); splash_size_y = max(vid_conwidth, vid_conheight); @@ -1080,7 +1095,7 @@ void CSQC_UpdateView(float w, float h) if(getstatf(STAT_REVIVE_PROGRESS)) { DrawCircleClippedPic(eX * 0.5 * vid_conwidth + eY * 0.6 * vid_conheight, 0.1 * vid_conheight, "gfx/crosshair_ring.tga", getstatf(STAT_REVIVE_PROGRESS), '0.25 0.90 1', autocvar_hud_colorflash_alpha, DRAWFLAG_ADDITIVE); - drawstring_aspect(eY * 0.64 * vid_conheight, "Revival progress", eX * vid_conwidth + eY * 0.025 * vid_conheight, '1 1 1', 1, DRAWFLAG_NORMAL); + drawstring_aspect(eY * 0.64 * vid_conheight, _("Revival progress"), eX * vid_conwidth + eY * 0.025 * vid_conheight, '1 1 1', 1, DRAWFLAG_NORMAL); } } @@ -1135,7 +1150,8 @@ void CSQC_UpdateView(float w, float h) string wcross_wep = "", wcross_name; float wcross_scale, wcross_blur; - if (autocvar_crosshair_per_weapon || autocvar_crosshair_color_per_weapon) { + if (autocvar_crosshair_per_weapon || (autocvar_crosshair_color_special == 1)) + { e = get_weaponinfo(switchingweapon); if (e && e.netname != "") { @@ -1155,56 +1171,82 @@ void CSQC_UpdateView(float w, float h) } } } - if(wcross_wep != "" && autocvar_crosshair_color_per_weapon) - wcross_color = stov(cvar_string(strcat("crosshair_", wcross_wep, "_color"))); - else if(autocvar_crosshair_color_by_health) - { - float x = getstati(STAT_HEALTH); - - //x = red - //y = green - //z = blue - wcross_color_z = 0; + //print(sprintf("crosshair style: %s\n", wcross_style)); + wcross_name = strcat("gfx/crosshair", wcross_style); - 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) + // MAIN CROSSHAIR COLOR DECISION + switch(autocvar_crosshair_color_special) + { + case 1: // crosshair_color_per_weapon { - wcross_color_x = 1; - wcross_color_y = 1; - wcross_color_z = 0.2 + (x-50)*0.02 * 0.8; + if(wcross_wep != "") + { + wcross_color = stov(cvar_string(sprintf("crosshair_%s_color", wcross_wep))); + break; + } + else { goto normalcolor; } } - else if(x > 20) + + case 2: // crosshair_color_by_health { - wcross_color_x = 1; - wcross_color_y = (x-20)*90/27/100; - wcross_color_z = (x-20)*90/27/100 * 0.2; + float x = getstati(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; } - else + + case 3: // crosshair_color_rainbow { - wcross_color_x = 1; - wcross_color_y = 0; + 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; } + :normalcolor + default: { wcross_color = stov(autocvar_crosshair_color); break; } } - else - wcross_color = stov(autocvar_crosshair_color); - - wcross_name = strcat("gfx/crosshair", wcross_style); if(autocvar_crosshair_effect_scalefade) { @@ -1238,7 +1280,7 @@ void CSQC_UpdateView(float w, float h) if(autocvar_crosshair_hitindication) { - vector hitindication_color = ((autocvar_crosshair_color_per_weapon) ? stov(autocvar_crosshair_hitindication_per_weapon_color) : stov(autocvar_crosshair_hitindication_color)); + vector hitindication_color = ((autocvar_crosshair_color_special == 1) ? stov(autocvar_crosshair_hitindication_per_weapon_color) : stov(autocvar_crosshair_hitindication_color)); if(hitindication_crosshair_time < hit_time) { @@ -1264,9 +1306,7 @@ void CSQC_UpdateView(float w, float h) if(shottype == SHOTTYPE_HITTEAM) wcross_scale /= autocvar_crosshair_hittest; // is not queried if hittest is 0 - f = autocvar_crosshair_effect_speed; - if(f < 0) - f *= -2 * g_weaponswitchdelay; // anim starts when weapon has been lowered and new weapon comes up + f = fabs(autocvar_crosshair_effect_time); if(wcross_scale != wcross_scale_goal_prev || wcross_alpha != wcross_alpha_goal_prev || wcross_color != wcross_color_goal_prev) { wcross_changedonetime = time + f; @@ -1390,11 +1430,24 @@ void CSQC_UpdateView(float w, float h) } // if in weapon switch animation, fade ring out/in - if(g_weaponswitchdelay > 0) + if(autocvar_crosshair_effect_time > 0) { - f = (time - wcross_name_changestarttime) / g_weaponswitchdelay; - if(f > 0 && f < 2) - ring_alpha *= fabs(1 - f); + f = (time - wcross_name_changestarttime) / autocvar_crosshair_effect_time; + if not(f < 1) + { + wcross_ring_prev = ((ring_image) ? TRUE : FALSE); + } + + if(wcross_ring_prev) + { + if(f < 1) + ring_alpha *= fabs(1 - bound(0, f, 1)); + } + else + { + if(f < 1) + ring_alpha *= bound(0, f, 1); + } } if (autocvar_crosshair_ring_inner && ring_inner_value) // lets draw a ring inside a ring so you can ring while you ring