X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fclient%2FView.qc;h=9ffe5a738c67634732ac4716a6fc8e7ccace8106;hb=55a4c54757ace30c9d82a63b73e8b6bce32b4643;hp=ac2f12cb52a9eba1196579b8616b4a6631d6d53a;hpb=5e42a6f54307afc1263845f546bfe74a6dfa100b;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/client/View.qc b/qcsrc/client/View.qc index ac2f12cb5..9ffe5a738 100644 --- a/qcsrc/client/View.qc +++ b/qcsrc/client/View.qc @@ -10,7 +10,9 @@ void Porto_Draw() vector p, dir, ang, q, nextdir; float idx, portal_number, portal1_idx; - if(activeweapon != WEP_PORTO || spectatee_status || gametype == GAME_NEXBALL) + if(activeweapon != WEP_PORTO || spectatee_status || gametype == MAPINFO_TYPE_NEXBALL) + return; + if(g_balance_porto_secondary) return; if(intermission == 1) return; @@ -92,6 +94,7 @@ vector GetCurrentFov(float fov) { float zoomsensitivity, zoomspeed, zoomfactor, zoomdir; float velocityzoom, curspeed; + vector v; zoomsensitivity = autocvar_cl_zoomsensitivity; zoomfactor = autocvar_cl_zoomfactor; @@ -157,13 +160,17 @@ vector GetCurrentFov(float fov) makevectors(view_angles); - if(autocvar_cl_velocityzoom) + if(autocvar_cl_velocityzoom && autocvar_cl_velocityzoom_type) // _type = 0 disables velocity zoom too { + v = pmove_vel; + if(csqcplayer) + v = csqcplayer.velocity; + switch(autocvar_cl_velocityzoom_type) { - case 3: curspeed = max(0, v_forward * pmove_vel); break; - case 2: curspeed = (v_forward * pmove_vel); break; - case 1: default: curspeed = vlen(pmove_vel); break; + case 3: curspeed = max(0, v_forward * v); break; + case 2: curspeed = (v_forward * v); break; + case 1: default: curspeed = vlen(v); break; } velocityzoom = bound(0, drawframetime / max(0.000000001, autocvar_cl_velocityzoom_time), 1); // speed at which the zoom adapts to player velocity @@ -218,14 +225,18 @@ void TrueAim_Init() float EnemyHitCheck() { - float t; + float t, n; wcross_origin = project_3d_to_2d(trace_endpos); wcross_origin_z = 0; - if(trace_networkentity < 1) + if(trace_ent) + n = trace_ent.entnum; + else + n = trace_networkentity; + if(n < 1) return SHOTTYPE_HITWORLD; - if(trace_networkentity > maxclients) + if(n > maxclients) return SHOTTYPE_HITWORLD; - t = GetPlayerColor(trace_networkentity - 1); + t = GetPlayerColor(n - 1); if(teamplay) if(t == myteam) return SHOTTYPE_HITTEAM; @@ -363,6 +374,7 @@ float checkfail[16]; #define BUTTON_3 4 #define BUTTON_4 8 +float cl_notice_run(); void CSQC_UpdateView(float w, float h) { entity e; @@ -372,6 +384,10 @@ void CSQC_UpdateView(float w, float h) vector vf_size, vf_min; float a; + execute_next_frame(); + + ++framecount; + hud = getstati(STAT_HUD); if(checkextension("DP_CSQC_MINFPS_QUALITY")) @@ -426,7 +442,7 @@ void CSQC_UpdateView(float w, float h) { // 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 = getpropertyvec(VF_ORIGIN); - + // 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() if(!autocvar_chase_active) @@ -457,9 +473,16 @@ void CSQC_UpdateView(float w, float h) eventchase_current_distance = 0; // start from 0 next time } } - + // workaround for camera stuck between player's legs when using chase_active 1 + // because the engine stops updating the chase_active camera when the game ends + else if(intermission) + { + cvar_settemp("chase_active", "-1"); + eventchase_current_distance = 0; + } + // do lockview after event chase camera so that it still applies whenever necessary. - if(autocvar_cl_lockview || (autocvar__hud_configure && spectatee_status <= 0) || intermission > 1) + if(autocvar_cl_lockview || (!autocvar_hud_cursormode && (autocvar__hud_configure && spectatee_status <= 0 || intermission > 1))) { setproperty(VF_ORIGIN, freeze_org); setproperty(VF_ANGLES, freeze_ang); @@ -523,8 +546,8 @@ void CSQC_UpdateView(float w, float h) calledhooks |= HOOK_END; } } - - Announcer(); + + Announcer(); fov = autocvar_fov; if(fov <= 59.5) @@ -911,12 +934,14 @@ void CSQC_UpdateView(float w, float h) } } - if(autocvar_hud_postprocessing) // TODO: Remove this code and re-do the postprocess handling in the engine, where it properly belongs. + float e1 = (autocvar_hud_postprocessing_maxbluralpha != 0); + float e2 = (autocvar_hud_powerup != 0); + if(autocvar_hud_postprocessing && (e1 || e2)) // TODO: Remove this code and re-do the postprocess handling in the engine, where it properly belongs. { // enable or disable rendering types if they are used or not - if(cvar("r_glsl_postprocess_uservec1_enable") != (autocvar_hud_postprocessing_maxbluralpha != 0)) { cvar_set("r_glsl_postprocess_uservec1_enable", ftos(autocvar_hud_postprocessing_maxbluralpha != 0)); } - if(cvar("r_glsl_postprocess_uservec2_enable") != (autocvar_hud_powerup != 0)) { cvar_set("r_glsl_postprocess_uservec2_enable", ftos(autocvar_hud_powerup != 0)); } - + if(cvar("r_glsl_postprocess_uservec1_enable") != e1) { cvar_set("r_glsl_postprocess_uservec1_enable", ftos(e1)); } + if(cvar("r_glsl_postprocess_uservec2_enable") != e2) { cvar_set("r_glsl_postprocess_uservec2_enable", ftos(e2)); } + // blur postprocess handling done first (used by hud_damage and hud_contents) if((damage_blurpostprocess_x || content_blurpostprocess_x) && autocvar_chase_active >= 0) // not while the event chase camera is active { @@ -956,12 +981,17 @@ void CSQC_UpdateView(float w, float h) cvar_set("r_glsl_postprocess_uservec2", "0 0 0 0"); old_sharpen_intensity = 0; } + + if(cvar("r_glsl_postprocess") == 0) + cvar_set("r_glsl_postprocess", "2"); } + else if(cvar("r_glsl_postprocess") == 2) + cvar_set("r_glsl_postprocess", "0"); if(menu_visible) menu_show(); - /*if(gametype == GAME_CTF) + /*if(gametype == MAPINFO_TYPE_CTF) { ctf_view(); } else */ @@ -995,7 +1025,7 @@ void CSQC_UpdateView(float w, float h) //else { - if(gametype == GAME_FREEZETAG) + if(gametype == MAPINFO_TYPE_FREEZETAG) { if(getstati(STAT_FROZEN)) drawfill('0 0 0', eX * vid_conwidth + eY * vid_conheight, '0.25 0.90 1', autocvar_hud_colorflash_alpha, DRAWFLAG_ADDITIVE); @@ -1011,7 +1041,11 @@ void CSQC_UpdateView(float w, float h) CSQC_common_hud(); // crosshair goes VERY LAST - if(!scoreboard_active && !camera_active && intermission != 2 && spectatee_status != -1 && hud == HUD_NORMAL) { + if(!scoreboard_active && !camera_active && intermission != 2 && spectatee_status != -1 && hud == HUD_NORMAL) + { + if not(autocvar_crosshair_enabled) // main toggle for crosshair rendering + return; + string wcross_style; float wcross_alpha, wcross_resolution; wcross_style = autocvar_crosshair; @@ -1156,7 +1190,8 @@ void CSQC_UpdateView(float w, float h) if(autocvar_crosshair_hitindication) { - vector hitindication_color = stov(autocvar_crosshair_hitindication_color); + vector hitindication_color = ((autocvar_crosshair_color_per_weapon) ? stov(autocvar_crosshair_hitindication_per_weapon_color) : stov(autocvar_crosshair_hitindication_color)); + if(hitindication_crosshair_time < hit_time) { if(time - hit_time < MAX_TIME_DIFF) // don't trigger the animation if it's too old @@ -1363,10 +1398,12 @@ void CSQC_UpdateView(float w, float h) { vector wcross_color_old; wcross_color_old = wcross_color; - if(autocvar_crosshair_dot_color != "0") + + if((autocvar_crosshair_dot_color_custom) && (autocvar_crosshair_dot_color != "0")) wcross_color = stov(autocvar_crosshair_dot_color); + CROSSHAIR_DRAW(wcross_resolution * autocvar_crosshair_dot_size, "gfx/crosshairdot.tga", f * autocvar_crosshair_dot_alpha); - // FIXME why don't we use wcross_alpha here? + // FIXME why don't we use wcross_alpha here?cl_notice_run(); wcross_color = wcross_color_old; } } @@ -1439,7 +1476,12 @@ void CSQC_UpdateView(float w, float h) CSQC_RAPTOR_HUD(); else if(hud == HUD_BUMBLEBEE) CSQC_BUMBLE_HUD(); + else if(hud == HUD_BUMBLEBEE_GUN) + CSQC_BUMBLE_GUN_HUD(); } + + cl_notice_run(); + // let's reset the view back to normal for the end setproperty(VF_MIN, '0 0 0'); setproperty(VF_SIZE, '1 0 0' * w + '0 1 0' * h); @@ -1450,7 +1492,7 @@ void CSQC_common_hud(void) { // do some accuracy var caching float i; - if(!(gametype == GAME_RACE || gametype == GAME_CTS)) + if(!(gametype == MAPINFO_TYPE_RACE || gametype == MAPINFO_TYPE_CTS)) { if(autocvar_accuracy_color_levels != acc_color_levels) { @@ -1465,7 +1507,7 @@ void CSQC_common_hud(void) acc_lev[i] = stof(argv(i)) / 100.0; } // let know that acc_col[] needs to be loaded - acc_col_x[0] = -1; + acc_col[0] = '-1 0 0'; } HUD_Main(); // always run these functions for alpha checks