X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fclient%2Fview.qc;h=e873f64535bd40ca74bb8126e882c92f7085fe64;hb=d1f6778ea3816cff62e2ddf43306fd75904ff9c3;hp=e0e3a569b6b0de4237854662b444f01194e6a91b;hpb=0797867d53b78246541c604b24e2eacc08c900f2;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/client/view.qc b/qcsrc/client/view.qc index e0e3a569b..e873f6453 100644 --- a/qcsrc/client/view.qc +++ b/qcsrc/client/view.qc @@ -9,7 +9,7 @@ #include "hud/panel/scoreboard.qh" #include "hud/panel/quickmenu.qh" -#include "mutators/events.qh" +#include #include #include @@ -17,12 +17,13 @@ #include #include #include +#include #include #include #include #include #include -#include +#include #include #include @@ -31,8 +32,9 @@ #include #include #include +#include #include -#include +#include #include #include @@ -371,7 +373,35 @@ STATIC_INIT(viewmodel) { viewmodels[slot] = new(viewmodel); } -void Porto_Draw(entity this); +float showfps_prevfps; +float showfps_prevfps_time; +int showfps_framecounter; + +void fpscounter_update() +{ + if(!STAT(SHOWFPS)) + return; + + float currentTime = gettime(GETTIME_REALTIME); + showfps_framecounter += 1; + if(currentTime - showfps_prevfps_time > STAT(SHOWFPS)) + { + showfps_prevfps = showfps_framecounter/(currentTime - showfps_prevfps_time); + showfps_framecounter = 0; + showfps_prevfps_time = currentTime; + + int channel = MSG_C2S; + WriteHeader(channel, fpsreport); + WriteShort(channel, bound(0, rint(showfps_prevfps), 65535)); // prevent insane fps values + } +} + +STATIC_INIT(fpscounter_init) +{ + float currentTime = gettime(GETTIME_REALTIME); + showfps_prevfps_time = currentTime; // we must initialize it to avoid an instant low frame sending +} + STATIC_INIT(Porto) { entity e = new_pure(porto); @@ -397,6 +427,10 @@ void Porto_Draw(entity this) vector pos = view_origin; vector dir = view_forward; + makevectors(((autocvar_chase_active) ? warpzone_save_view_angles : view_angles)); + pos += v_right * -wepent.movedir.y + + v_up * wepent.movedir.z; + if (wepent.angles_held_status) { makevectors(wepent.angles_held); @@ -461,9 +495,8 @@ vector GetCurrentFov(float fov) if(zoomfactor < 1 || zoomfactor > 30) zoomfactor = 2.5; zoomspeed = autocvar_cl_zoomspeed; - if(zoomspeed >= 0) - if(zoomspeed < 0.5 || zoomspeed > 16) - zoomspeed = 3.5; + if (zoomspeed >= 0 && (zoomspeed < 0.5 || zoomspeed > 16)) + zoomspeed = 3.5; zoomdir = button_zoom; @@ -496,7 +529,11 @@ vector GetCurrentFov(float fov) if(zoomdir) { zoomin_effect = 0; } - if(camera_active) + if (spectatee_status > 0 && STAT(CAMERA_SPECTATOR) == 2) + { + current_viewzoom = 1; + } + else if (camera_active) { current_viewzoom = min(1, current_viewzoom + drawframetime); } @@ -540,10 +577,10 @@ vector GetCurrentFov(float fov) if(autocvar_cl_velocityzoom_enabled && autocvar_cl_velocityzoom_type) // _type = 0 disables velocity zoom too { - if(intermission) { curspeed = 0; } + if (intermission || (spectatee_status > 0 && STAT(CAMERA_SPECTATOR) == 2)) + curspeed = 0; else { - makevectors(view_angles); v = pmove_vel; if(csqcplayer) @@ -739,8 +776,6 @@ float TrueAimCheck(entity wepent) return SHOTTYPE_HITWORLD; } -void PostInit(); -void CSQC_Demo_Camera(); float camera_mode; const float CAMERA_FREE = 1; const float CAMERA_CHASE = 2; @@ -1370,12 +1405,8 @@ void HUD_Crosshair(entity this) wcross_scale_goal_prev = 0; wcross_alpha_goal_prev = 0; wcross_changedonetime = 0; - if(wcross_name_goal_prev) - strunzone(wcross_name_goal_prev); - wcross_name_goal_prev = string_null; - if(wcross_name_goal_prev_prev) - strunzone(wcross_name_goal_prev_prev); - wcross_name_goal_prev_prev = string_null; + strfree(wcross_name_goal_prev); + strfree(wcross_name_goal_prev_prev); wcross_name_changestarttime = 0; wcross_name_changedonetime = 0; wcross_name_alpha_goal_prev = 0; @@ -1417,8 +1448,8 @@ void SpecialCommand() vector slot = specialcommand_slots[j]; if(slot.y) slot.y += SPECIALCOMMAND_SPEED * frametime; - if(slot.z) - slot.z = sin(SPECIALCOMMAND_TURNSPEED * M_PI * time); + //if(slot.z) + //slot.z = sin(SPECIALCOMMAND_TURNSPEED * M_PI * time); if(slot.y >= vid_conheight) slot = '0 0 0'; @@ -1428,7 +1459,7 @@ void SpecialCommand() { slot.x = bound(0, (random() * vid_conwidth + 1), vid_conwidth); slot.y = 1; // start it off 0 so we can use it - slot.z = random(); + slot.z = floor(random() * Weapons_MAX); sc_spawntime = time + bound(0.4, random(), 0.75); // prevent spawning another one for this amount of time! vector newcolor = randomvec() * 2; newcolor.x = bound(0.4, newcolor.x, 1); @@ -1442,7 +1473,11 @@ void SpecialCommand() vector splash_size = '0 0 0'; splash_size.x = max(vid_conwidth, vid_conheight) * SPECIALCOMMAND_SIZE; splash_size.y = max(vid_conwidth, vid_conheight) * SPECIALCOMMAND_SIZE; - drawpic(vec2(slot), "gfx/smile", vec2(splash_size), specialcommand_colors[j], 0.95, DRAWFLAG_NORMAL); + entity wep = Weapons_from(slot.z); + if(wep == WEP_Null) + drawpic(vec2(slot), "gfx/smile", vec2(splash_size), specialcommand_colors[j], 0.95, DRAWFLAG_NORMAL); + else + drawpic_skin(vec2(slot), wep.model2, vec2(splash_size), specialcommand_colors[j], 0.95, DRAWFLAG_NORMAL); //drawrotpic(vec2(slot), slot.z, "gfx/smile", vec2(splash_size), vec2(splash_size) / 2, specialcommand_colors[j], 0.95, DRAWFLAG_NORMAL); } @@ -1532,15 +1567,12 @@ float oldr_novis; float oldr_useportalculling; float oldr_useinfinitefarclip; -void cl_notice_run(); - float prev_myteam; int lasthud; float vh_notice_time; -void WaypointSprite_Load(); void CSQC_UpdateView(entity this, float w, float h) { - TC(int, w); TC(int, h); + TC(int, w); TC(int, h); entity e; float fov; float f; @@ -1886,6 +1918,7 @@ void CSQC_UpdateView(entity this, float w, float h) TargetMusic_Advance(); Fog_Force(); + fpscounter_update(); if(drawtime == 0) drawframetime = 0.01666667; // when we don't know fps yet, we assume 60fps @@ -2031,7 +2064,7 @@ void CSQC_UpdateView(entity this, float w, float h) IL_EACH(g_drawables, it.draw, it.draw(it)); - addentities(MASK_NORMAL | MASK_ENGINE | MASK_ENGINEVIEWMODELS); + addentities(MASK_NORMAL | MASK_ENGINE | MASK_ENGINEVIEWMODELS); // TODO: .health is used in cl_deathfade (a feature we have turned off currently) renderscene(); // now switch to 2D drawing mode by calling a 2D drawing function