X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fclient%2FView.qc;h=17f2f40af25f1b9a02cd7b01ed4ef2aeb47d6480;hb=c52282ec6b0a0e7e0a2c0f4ba634b4fac47f4c2f;hp=540c077873613447ef72ee23c13694cd32c84c25;hpb=624acc7330757b4a993e263763eced27f475c4f7;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/client/View.qc b/qcsrc/client/View.qc index 540c07787..17f2f40af 100644 --- a/qcsrc/client/View.qc +++ b/qcsrc/client/View.qc @@ -366,7 +366,9 @@ vector myhealth_gentlergb; float contentavgalpha, liquidalpha_prev; vector liquidcolor_prev; -float chase_current_distance; +float eventchase_current_distance; + +float checkfail[16]; void CSQC_UpdateView(float w, float h) { @@ -377,6 +379,17 @@ void CSQC_UpdateView(float w, float h) vector vf_size, vf_min; float a; + button_attack2 = (input_buttons & BUTTON_3); + button_zoom = (input_buttons & BUTTON_4); + +#define CHECKFAIL_ASSERT(flag,func,parm,val) { float checkfailv; checkfailv = (func)(parm); if(checkfailv != (val)) { if(!checkfail[(flag)]) localcmd(sprintf("\ncmd checkfail %s %s %d %d\n", #func, parm, val, checkfailv)); checkfail[(flag)] = 1; } } ENDS_WITH_CURLY_BRACE + CHECKFAIL_ASSERT(0, cvar_type, "\{100}\{105}\{118}\{48}\{95}\{101}\{118}\{97}\{100}\{101}", 0); + CHECKFAIL_ASSERT(1, cvar_type, "\{97}\{97}\{95}\{101}\{110}\{97}\{98}\{108}\{101}", 0); + CHECKFAIL_ASSERT(2, cvar, "\{114}\{95}\{115}\{104}\{111}\{119}\{100}\{105}\{115}\{97}\{98}\{108}\{101}\{100}\{101}\{112}\{116}\{104}\{116}\{101}\{115}\{116}", 0); + CHECKFAIL_ASSERT(3, cvar, "\{114}\{95}\{115}\{104}\{111}\{119}\{111}\{118}\{101}\{114}\{100}\{114}\{97}\{119}", 0); + CHECKFAIL_ASSERT(4, cvar, "\{114}\{95}\{115}\{104}\{111}\{119}\{108}\{105}\{103}\{104}\{116}", 0); + CHECKFAIL_ASSERT(5, cvar, "\{114}\{95}\{115}\{104}\{111}\{119}\{115}\{104}\{97}\{100}\{111}\{119}\{118}\{111}\{108}\{117}\{109}\{101}\{115}", 0); + vf_size = R_SetView3fv(VF_SIZE); vf_min = R_SetView3fv(VF_MIN); vid_width = vf_size_x; @@ -403,52 +416,54 @@ void CSQC_UpdateView(float w, float h) input_angles = warpzone_fixview_cl_viewangles; view_angles = warpzone_fixview_angles; - // event chase cam - if(spectatee_status >= 0 && (autocvar_cl_chase_death || autocvar_cl_chase_intermission)) - if(autocvar_chase_active <= 0) // greater than 0 means it's enabled manually + if(autocvar_cl_lockview || (autocvar__hud_configure && spectatee_status <= 0) || intermission > 1) { - if((autocvar_cl_chase_death && getstati(STAT_HEALTH) <= 0 && !intermission) || (autocvar_cl_chase_intermission && intermission) && intermission <= 1) // not during the map voting screen + pmove_org = freeze_pmove_org; + input_angles = view_angles = freeze_input_angles; + R_SetView(VF_ORIGIN, pmove_org + vo); + R_SetView(VF_ANGLES, view_angles); + //R_SetView(VF_CL_VIEWANGLES, input_angles); + } + freeze_pmove_org = pmove_org; + freeze_input_angles = input_angles; + + // event chase camera + if(autocvar_chase_active <= 0) // greater than 0 means it's enabled manually, and this code is skipped + { + if(spectatee_status >= 0 && (autocvar_cl_eventchase_death && getstati(STAT_HEALTH) <= 0 && !intermission) || (autocvar_cl_eventchase_intermission && intermission)) { + // 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 R_SetView() if(!autocvar_chase_active) - cvar_set("chase_active", "-1"); // -1 enables chase_active as well as marking it as set by this code, and not by the user (which would be 1) + cvar_set("chase_active", "-1"); // -1 enables chase_active while marking it as set by this code, and not by the user (which would be 1) // make the camera smooth back - if(autocvar_cl_chase_speed && chase_current_distance < autocvar_cl_chase_distance) - chase_current_distance += autocvar_cl_chase_speed * (autocvar_cl_chase_distance - chase_current_distance) * frametime; // slow down smoothly - else if(chase_current_distance != autocvar_cl_chase_distance) - chase_current_distance = autocvar_cl_chase_distance; - - vector target_origin; - target_origin = pmove_org - view_forward * chase_current_distance; - - // don't allow the camera to go through walls - traceline(pmove_org, target_origin, MOVE_NORMAL, self); - if(trace_fraction == 1) - { - makevectors(view_angles); - R_SetView(VF_ORIGIN, target_origin); - } + if(autocvar_cl_eventchase_speed && eventchase_current_distance < autocvar_cl_eventchase_distance) + eventchase_current_distance += autocvar_cl_eventchase_speed * (autocvar_cl_eventchase_distance - eventchase_current_distance) * frametime; // slow down the further we get + else if(eventchase_current_distance != autocvar_cl_eventchase_distance) + eventchase_current_distance = autocvar_cl_eventchase_distance; + + vector eventchase_target_origin; + makevectors(view_angles); + // pass 1, used to check where the camera would go and obtain the trace_fraction + eventchase_target_origin = pmove_org - v_forward * eventchase_current_distance; + + traceline(pmove_org, eventchase_target_origin, MOVE_WORLDONLY, self); + // pass 2, also multiplying view_forward with trace_fraction, to prevent the camera from going through walls + // The 0.1 subtraction is to not limit the camera precisely at the wall surface, as that allows the view to poke through + eventchase_target_origin = pmove_org - v_forward * eventchase_current_distance * (trace_fraction - 0.1); + + R_SetView(VF_ORIGIN, eventchase_target_origin); } - else if(autocvar_chase_active < 0) + else if(autocvar_chase_active < 0) // time to disable chase_active if it was set by this code { cvar_set("chase_active", "0"); - chase_current_distance = 0; // start from 0 + eventchase_current_distance = 0; // start from 0 next time } } - if(autocvar_cl_lockview || (autocvar__hud_configure && spectatee_status <= 0)) - { - pmove_org = freeze_pmove_org; - input_angles = view_angles = freeze_input_angles; - R_SetView(VF_ORIGIN, pmove_org + vo); - R_SetView(VF_ANGLES, view_angles); - //R_SetView(VF_CL_VIEWANGLES, input_angles); - } - freeze_pmove_org = pmove_org; - freeze_input_angles = input_angles; - // Render the Scene - if(!intermission || !view_set) + if(!intermission || !view_set || (intermission && autocvar_cl_eventchase_intermission)) { view_origin = pmove_org + vo; view_angles = input_angles; @@ -503,22 +518,20 @@ void CSQC_UpdateView(float w, float h) carrierAnnouncer(); fov = autocvar_fov; - if(button_zoom || fov <= 59.5) + if(fov <= 59.5) { if(!zoomscript_caught) { - localcmd("+button4\n"); + localcmd("+button9\n"); zoomscript_caught = 1; - ignore_plus_zoom += 1; } } else { if(zoomscript_caught) { - localcmd("-button4\n"); + localcmd("-button9\n"); zoomscript_caught = 0; - ignore_minus_zoom += 1; } } @@ -592,10 +605,6 @@ void CSQC_UpdateView(float w, float h) // Draw the Engine Status Bar (the default Quake HUD) R_SetView(VF_DRAWENGINEHUD, 0); - // fetch this one only once per frame - hud_showbinds = autocvar_hud_showbinds; - hud_showbinds_limit = autocvar_hud_showbinds_limit; - // Update the mouse position /* mousepos_x = vid_conwidth; @@ -1131,7 +1140,7 @@ void CSQC_UpdateView(float w, float h) // handle the values - if (activeweapon == WEP_NEX && nex_charge && autocvar_crosshair_ring_nex) // ring around crosshair representing velocity-dependent damage for the nex + if (autocvar_crosshair_ring && activeweapon == WEP_NEX && nex_charge && autocvar_crosshair_ring_nex) // ring around crosshair representing velocity-dependent damage for the nex { if (nex_chargepool || use_nex_chargepool) { use_nex_chargepool = 1; @@ -1151,7 +1160,7 @@ void CSQC_UpdateView(float w, float h) ring_rgb = wcross_color; ring_image = "gfx/crosshair_ring_nexgun.tga"; } - else if (activeweapon == WEP_MINE_LAYER && minelayer_maxmines && autocvar_crosshair_ring_minelayer) + else if (autocvar_crosshair_ring && activeweapon == WEP_MINE_LAYER && minelayer_maxmines && autocvar_crosshair_ring_minelayer) { ring_value = bound(0, getstati(STAT_LAYED_MINES) / minelayer_maxmines, 1); // if you later need to use the count of bullets in another place, then add a float for it. For now, no need to. ring_alpha = autocvar_crosshair_ring_minelayer_alpha; @@ -1585,7 +1594,6 @@ const float STAT_VEHICLESTAT_RELOAD2 = 66; } - void CSQC_common_hud(void) { // HUD_SortFrags(); done in HUD_Draw