X-Git-Url: https://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=blobdiff_plain;f=qcsrc%2Fclient%2FView.qc;h=476991137586a62dec20cce20dbb33173857100e;hp=5b7a1b7cf89d0891748ae05ec10fb6d658044ab6;hb=44effb3a66f8b44d05106ff361ef5fc126fef03b;hpb=79ab84695f689fd7024d60c3429988f7c8774552 diff --git a/qcsrc/client/View.qc b/qcsrc/client/View.qc index 5b7a1b7cf8..4769911375 100644 --- a/qcsrc/client/View.qc +++ b/qcsrc/client/View.qc @@ -1,7 +1,5 @@ entity porto; vector polyline[16]; -float trace_dphitcontents; -float trace_networkentity; float Q3SURFACEFLAG_SLICK = 2; // low friction surface float DPCONTENTS_SOLID = 1; // blocks player movement float DPCONTENTS_BODY = 32; // blocks player movement @@ -93,7 +91,7 @@ void CheckForGamestartChange() { if (previous_game_starttime != startTime) { if ((time + 5.0) < startTime) { //if connecting to server while restart was active don't always play prepareforbattle - sound(world, CHAN_AUTO, strcat("announcer/", autocvar_cl_announcer, "/prepareforbattle.wav"), VOL_BASEVOICE, ATTN_NONE); + sound(world, CH_INFO, strcat("announcer/", autocvar_cl_announcer, "/prepareforbattle.wav"), VOL_BASEVOICE, ATTN_NONE); } if (time < startTime) { restartAnnouncer = spawn(); @@ -352,6 +350,9 @@ float use_nex_chargepool; float myhealth, myhealth_prev; float myhealth_flash; +float old_blurradius, old_bluralpha; +float old_sharpen_intensity; + vector myhealth_gentlergb; float contentavgalpha, liquidalpha_prev; @@ -359,6 +360,8 @@ vector liquidcolor_prev; float eventchase_current_distance; +vector damage_blurpostprocess, content_blurpostprocess; + float checkfail[16]; void CSQC_UpdateView(float w, float h) @@ -366,7 +369,7 @@ void CSQC_UpdateView(float w, float h) entity e; float fov; float f, i, j; - vector v, vo; + vector v; vector vf_size, vf_min; float a; hud = getstati(STAT_HUD); @@ -398,7 +401,6 @@ void CSQC_UpdateView(float w, float h) myteam = GetPlayerColor(player_localentnum - 1); ticrate = getstatf(STAT_MOVEVARS_TICRATE) * getstatf(STAT_MOVEVARS_TIMESCALE); - vo = '0 0 1' * getstati(STAT_VIEWHEIGHT); if(autocvar_cl_lockview || (autocvar__hud_configure && spectatee_status <= 0) || intermission > 1) { @@ -545,8 +547,15 @@ void CSQC_UpdateView(float w, float h) // ALWAYS Clear Current Scene First R_ClearScene(); +#ifdef WORKAROUND_XON010 + if(checkextension("DP_CSQC_ROTATEMOVES")) + { +#endif R_SetView(VF_ORIGIN, view_origin); R_SetView(VF_ANGLES, view_angles); +#ifdef WORKAROUND_XON010 + } +#endif // FIXME engine bug? VF_SIZE and VF_MIN are not restored to sensible values by this R_SetView(VF_SIZE, vf_size); @@ -760,6 +769,22 @@ void CSQC_UpdateView(float w, float h) if(contentavgalpha) drawfill('0 0 0', eX * vid_conwidth + eY * vid_conheight, liquidcolor_prev, contentavgalpha * liquidalpha_prev, DRAWFLAG_NORMAL); + + if(autocvar_hud_postprocessing) + { + if(autocvar_hud_contents_blur && contentavgalpha) + { + content_blurpostprocess_x = 1; + content_blurpostprocess_y = contentavgalpha * autocvar_hud_contents_blur; + content_blurpostprocess_z = contentavgalpha * autocvar_hud_contents_blur_alpha; + } + else + { + content_blurpostprocess_x = 0; + content_blurpostprocess_y = 0; + content_blurpostprocess_z = 0; + } + } } if(autocvar_hud_damage && !autocvar_chase_active) @@ -827,6 +852,74 @@ void CSQC_UpdateView(float w, float h) } else drawpic(splash_pos, "gfx/blood", splash_size, stov(autocvar_hud_damage_color), bound(0, myhealth_flash_temp, 1) * autocvar_hud_damage, DRAWFLAG_NORMAL); + + if(autocvar_hud_postprocessing) + { + if(autocvar_hud_damage_blur && myhealth_flash_temp) + { + damage_blurpostprocess_x = 1; + damage_blurpostprocess_y = bound(0, myhealth_flash_temp, 1) * autocvar_hud_damage_blur; + damage_blurpostprocess_z = bound(0, myhealth_flash_temp, 1) * autocvar_hud_damage_blur_alpha; + } + else + { + damage_blurpostprocess_x = 0; + damage_blurpostprocess_y = 0; + damage_blurpostprocess_z = 0; + } + } + } + + if(autocvar_hud_postprocessing) + { + // all of this should be done in the engine eventually + + // enable or disable rendering types if they are used or not + if(cvar("r_glsl_postprocess_uservec1_enable") != (cvar("hud_postprocessing_maxbluralpha") != 0)) + cvar_set("r_glsl_postprocess_uservec1_enable", ftos(cvar("hud_postprocessing_maxbluralpha") != 0)); + if(cvar("r_glsl_postprocess_uservec2_enable") != (cvar("hud_powerup") != 0)) + cvar_set("r_glsl_postprocess_uservec2_enable", ftos(cvar("hud_powerup") != 0)); + + // lets apply the postprocess effects from the previous two functions if needed + if((damage_blurpostprocess_x || content_blurpostprocess_x) && autocvar_chase_active >= 0) // not while the event chase camera is active + { + float blurradius = bound(0, damage_blurpostprocess_y + content_blurpostprocess_y, autocvar_hud_postprocessing_maxblurradius); + float bluralpha = bound(0, damage_blurpostprocess_z + content_blurpostprocess_z, autocvar_hud_postprocessing_maxbluralpha); + if(blurradius != old_blurradius || bluralpha != old_bluralpha) // reduce cvar_set spam as much as possible + { + cvar_set("r_glsl_postprocess_uservec1", strcat(ftos(blurradius), " ", ftos(bluralpha), " 0 0")); + old_blurradius = blurradius; + old_bluralpha = bluralpha; + } + } + else if(cvar_string("r_glsl_postprocess_uservec1") != "0 0 0 0") // reduce cvar_set spam as much as possible + { + cvar_set("r_glsl_postprocess_uservec1", "0 0 0 0"); + old_blurradius = 0; + old_bluralpha = 0; + } + + float sharpen_intensity; + if (getstatf(STAT_STRENGTH_FINISHED) - time > 0) + sharpen_intensity += (getstatf(STAT_STRENGTH_FINISHED) - time); + if (getstatf(STAT_INVINCIBLE_FINISHED) - time > 0) + sharpen_intensity += (getstatf(STAT_INVINCIBLE_FINISHED) - time); + + if(autocvar_hud_powerup && sharpen_intensity > 0 && autocvar_chase_active >= 0) // not while the event chase camera is active + { + sharpen_intensity = bound(0, sharpen_intensity, 5); // powerup warning time is 5 seconds, so fade the effect from there + + if(sharpen_intensity != old_sharpen_intensity) // reduce cvar_set spam as much as possible + { + cvar_set("r_glsl_postprocess_uservec2", strcat("0 ", ftos(-sharpen_intensity * cvar("hud_powerup")), " 0 0")); + old_sharpen_intensity = sharpen_intensity; + } + } + else if(cvar_string("r_glsl_postprocess_uservec2") != "0 0 0 0") // reduce cvar_set spam as much as possible + { + cvar_set("r_glsl_postprocess_uservec2", "0 0 0 0"); + old_sharpen_intensity = 0; + } } if(menu_visible) @@ -850,13 +943,13 @@ void CSQC_UpdateView(float w, float h) hit_time = getstatf(STAT_HIT_TIME); if(hit_time > nextsound_hit_time && autocvar_cl_hitsound) { - sound(world, CHAN_AUTO, "misc/hit.wav", VOL_BASE, ATTN_NONE); + sound(world, CH_INFO, "misc/hit.wav", VOL_BASE, ATTN_NONE); nextsound_hit_time = time + autocvar_cl_hitsound_antispam_time; } typehit_time = getstatf(STAT_TYPEHIT_TIME); if(typehit_time > nextsound_typehit_time) { - sound(world, CHAN_AUTO, "misc/typehit.wav", VOL_BASE, ATTN_NONE); + sound(world, CH_INFO, "misc/typehit.wav", VOL_BASE, ATTN_NONE); nextsound_typehit_time = time + autocvar_cl_hitsound_antispam_time; }