X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=sbar.c;h=18f3b7ee891682f17daed95bb01e0136daf00f8f;hb=37fd9ad77c7903bf205618885062db9579d90c17;hp=8e8155680bb972afe0825037d940ee983bf814c4;hpb=19f4d582f45f8d1eae8f6e7591f026128b4c3f9a;p=xonotic%2Fdarkplaces.git diff --git a/sbar.c b/sbar.c index 8e815568..18f3b7ee 100644 --- a/sbar.c +++ b/sbar.c @@ -90,6 +90,7 @@ cachepic_t *sb_finale; cvar_t showfps = {CVAR_SAVE, "showfps", "0", "shows your rendered fps (frames per second)"}; cvar_t showsound = {CVAR_SAVE, "showsound", "0", "shows number of active sound sources, sound latency, and other statistics"}; +cvar_t showblur = {CVAR_SAVE, "showblur", "0", "shows the current alpha level of motionblur"}; cvar_t showspeed = {CVAR_SAVE, "showspeed", "0", "shows your current speed (qu per second); number selects unit: 1 = qu/s, 2 = m/s, 3 = km/h, 4 = mph, 5 = knots"}; cvar_t showtopspeed = {CVAR_SAVE, "showtopspeed", "0", "shows your top speed (kept on screen for max 3 seconds); value -1 takes over the unit from showspeed, otherwise it's an unit number just like in showspeed"}; cvar_t showtime = {CVAR_SAVE, "showtime", "0", "shows current time of day (useful on screenshots)"}; @@ -104,6 +105,7 @@ cvar_t sbar_gametime = {CVAR_SAVE, "sbar_gametime", "1", "shows an overlay for t cvar_t sbar_miniscoreboard_size = {CVAR_SAVE, "sbar_miniscoreboard_size", "-1", "sets the size of the mini deathmatch overlay in items, or disables it when set to 0, or sets it to a sane default when set to -1"}; cvar_t sbar_flagstatus_right = {CVAR_SAVE, "sbar_flagstatus_right", "0", "moves Nexuiz flag status icons to the right"}; cvar_t sbar_flagstatus_pos = {CVAR_SAVE, "sbar_flagstatus_pos", "115", "pixel position of the Nexuiz flag status icons, from the bottom"}; +cvar_t sbar_info_pos = {CVAR_SAVE, "sbar_info_pos", "0", "pixel position of the info strings (such as showfps), from the bottom"}; cvar_t cl_deathscoreboard = {0, "cl_deathscoreboard", "1", "shows scoreboard (+showscores) while dead"}; @@ -377,6 +379,7 @@ void Sbar_Init (void) Cmd_AddCommand("-showscores", Sbar_DontShowScores, "hide scoreboard"); Cvar_RegisterVariable(&showfps); Cvar_RegisterVariable(&showsound); + Cvar_RegisterVariable(&showblur); Cvar_RegisterVariable(&showspeed); Cvar_RegisterVariable(&showtopspeed); Cvar_RegisterVariable(&showtime); @@ -389,6 +392,7 @@ void Sbar_Init (void) Cvar_RegisterVariable(&sbar_scorerank); Cvar_RegisterVariable(&sbar_gametime); Cvar_RegisterVariable(&sbar_miniscoreboard_size); + Cvar_RegisterVariable(&sbar_info_pos); Cvar_RegisterVariable(&cl_deathscoreboard); Cvar_RegisterVariable(&crosshair_color_red); @@ -527,7 +531,7 @@ void Sbar_DrawXNum (int x, int y, int num, int digits, int lettersize, float r, //============================================================================= -int Sbar_IsTeammatch() +int Sbar_IsTeammatch(void) { // currently only nexuiz uses the team score board return ((gamemode == GAME_NEXUIZ) @@ -672,8 +676,13 @@ void Sbar_SoloScoreboard (void) // monsters and secrets are now both on the top row if (cl.stats[STAT_TOTALMONSTERS]) Sbar_DrawString(8, 4, va("Monsters:%3i /%3i", cl.stats[STAT_MONSTERS], cl.stats[STAT_TOTALMONSTERS])); + else if (cl.stats[STAT_MONSTERS]) // LA: Display something if monsters_killed is non-zero, but total_monsters is zero + Sbar_DrawString(8, 4, va("Monsters:%3i", cl.stats[STAT_MONSTERS])); + if (cl.stats[STAT_TOTALSECRETS]) Sbar_DrawString(8+22*8, 4, va("Secrets:%3i /%3i", cl.stats[STAT_SECRETS], cl.stats[STAT_TOTALSECRETS])); + else if (cl.stats[STAT_SECRETS]) // LA: And similarly for secrets + Sbar_DrawString(8+22*8, 4, va("Secrets:%3i", cl.stats[STAT_SECRETS])); // figure out the map's filename without path or extension strlcpy(str, FS_FileWithoutPath(cl.worldmodel ? cl.worldmodel->name : ""), sizeof(str)); @@ -1081,6 +1090,27 @@ static void get_showspeed_unit(int unitnumber, double *conversion_factor, const } } +static double showfps_nexttime = 0, showfps_lasttime = -1; +static double showfps_framerate = 0; +static int showfps_framecount = 0; + +void Sbar_ShowFPS_Update(void) +{ + double interval = 1; + double newtime; + newtime = realtime; + if (newtime >= showfps_nexttime) + { + showfps_framerate = showfps_framecount / (newtime - showfps_lasttime); + if (showfps_nexttime < newtime - interval * 1.5) + showfps_nexttime = newtime; + showfps_lasttime = newtime; + showfps_nexttime += interval; + showfps_framecount = 0; + } + showfps_framecount++; +} + void Sbar_ShowFPS(void) { float fps_x, fps_y, fps_scalex, fps_scaley, fps_height; @@ -1089,6 +1119,7 @@ void Sbar_ShowFPS(void) char timestring[32]; char datestring[32]; char speedstring[32]; + char blurstring[32]; char topspeedstring[48]; qboolean red = false; soundstring[0] = 0; @@ -1096,39 +1127,26 @@ void Sbar_ShowFPS(void) timestring[0] = 0; datestring[0] = 0; speedstring[0] = 0; + blurstring[0] = 0; topspeedstring[0] = 0; if (showfps.integer) { - float calc; - static double nexttime = 0, lasttime = 0; - static double framerate = 0; - static int framecount = 0; - double interval = 0.25; - double newtime; - newtime = realtime; - if (newtime >= nexttime) - { - framerate = framecount / (newtime - lasttime); - if (nexttime < newtime - interval * 1.5) - nexttime = newtime; - lasttime = newtime; - nexttime += interval; - framecount = 0; - } - framecount++; - calc = framerate; - - if ((red = (calc < 1.0f))) - dpsnprintf(fpsstring, sizeof(fpsstring), "%4i spf", (int)(1.0f / calc + 0.5)); + red = (showfps_framerate < 1.0f); + if(showfps.integer == 2) + dpsnprintf(fpsstring, sizeof(fpsstring), "%7.3f mspf", (1000.0 / showfps_framerate)); + else if (red) + dpsnprintf(fpsstring, sizeof(fpsstring), "%4i spf", (int)(1.0 / showfps_framerate + 0.5)); else - dpsnprintf(fpsstring, sizeof(fpsstring), "%4i fps", (int)(calc + 0.5)); + dpsnprintf(fpsstring, sizeof(fpsstring), "%4i fps", (int)(showfps_framerate + 0.5)); } if (showtime.integer) strlcpy(timestring, Sys_TimeString(showtime_format.string), sizeof(timestring)); if (showdate.integer) strlcpy(datestring, Sys_TimeString(showdate_format.string), sizeof(datestring)); + if (showblur.integer) + dpsnprintf(blurstring, sizeof(blurstring), "%3i%% blur", (int)(cl.motionbluralpha * 100)); if (showsound.integer) - dpsnprintf(soundstring, sizeof(soundstring), "%4i/%4i at %3ims\n", cls.soundstats.mixedsounds, cls.soundstats.totalsounds, cls.soundstats.latency_milliseconds); + dpsnprintf(soundstring, sizeof(soundstring), "%4i/4%i at %3ims", cls.soundstats.mixedsounds, cls.soundstats.totalsounds, cls.soundstats.latency_milliseconds); if (showspeed.integer || showtopspeed.integer) { double speed, speedxy, f; @@ -1165,14 +1183,14 @@ void Sbar_ShowFPS(void) time(¤t_time); } } - if (fpsstring[0] || timestring[0] || datestring[0] || speedstring[0] || topspeedstring[0]) + if (fpsstring[0] || timestring[0] || datestring[0] || speedstring[0] || blurstring[0] || topspeedstring[0]) { fps_scalex = 12; fps_scaley = 12; - fps_height = fps_scaley * ((soundstring[0] != 0) + (fpsstring[0] != 0) + (timestring[0] != 0) + (datestring[0] != 0) + (speedstring[0] != 0) + (topspeedstring[0] != 0)); + fps_height = fps_scaley * ((soundstring[0] != 0) + (blurstring[0] != 0) + (fpsstring[0] != 0) + (timestring[0] != 0) + (datestring[0] != 0) + (speedstring[0] != 0) + (topspeedstring[0] != 0)); //fps_y = vid_conheight.integer - sb_lines; // yes this may draw over the sbar //fps_y = bound(0, fps_y, vid_conheight.integer - fps_height); - fps_y = vid_conheight.integer - fps_height; + fps_y = vid_conheight.integer - sbar_info_pos.integer - fps_height; if (soundstring[0]) { fps_x = vid_conwidth.integer - DrawQ_TextWidth_Font(soundstring, 0, true, FONT_INFOBAR) * fps_scalex; @@ -1218,6 +1236,13 @@ void Sbar_ShowFPS(void) DrawQ_String_Font(fps_x, fps_y, topspeedstring, 0, fps_scalex, fps_scaley, 1, 1, 1, 1, 0, NULL, false, FONT_INFOBAR); fps_y += fps_scaley; } + if (blurstring[0]) + { + fps_x = vid_conwidth.integer - DrawQ_TextWidth_Font(blurstring, 0, true, FONT_INFOBAR) * fps_scalex; + DrawQ_Fill(fps_x, fps_y, vid_conwidth.integer - fps_x, fps_scaley, 0, 0, 0, 0.5, 0); + DrawQ_String_Font(fps_x, fps_y, blurstring, 0, fps_scalex, fps_scaley, 1, 1, 1, 1, 0, NULL, true, FONT_INFOBAR); + fps_y += fps_scaley; + } } } @@ -1694,8 +1719,6 @@ void Sbar_Draw (void) } } - Sbar_ShowFPS(); - if (cl.csqc_vidvars.drawcrosshair && crosshair.integer >= 1 && !cl.intermission && !r_letterbox.value) { pic = Draw_CachePic (va("gfx/crosshair%i", crosshair.integer)); @@ -2146,16 +2169,30 @@ void Sbar_IntermissionOverlay (void) Sbar_DrawPic (246,64,sb_nums[0][num/10]); Sbar_DrawPic (266,64,sb_nums[0][num%10]); - Sbar_DrawNum (160, 104, cl.stats[STAT_SECRETS], 3, 0); - if (gamemode != GAME_NEXUIZ) - Sbar_DrawPic (232, 104, sb_slash); - Sbar_DrawNum (240, 104, cl.stats[STAT_TOTALSECRETS], 3, 0); - - Sbar_DrawNum (160, 144, cl.stats[STAT_MONSTERS], 3, 0); - if (gamemode != GAME_NEXUIZ) - Sbar_DrawPic (232, 144, sb_slash); - Sbar_DrawNum (240, 144, cl.stats[STAT_TOTALMONSTERS], 3, 0); +// LA: Display as "a" instead of "a/b" if b is 0 + if(cl.stats[STAT_TOTALSECRETS]) + { + Sbar_DrawNum (160, 104, cl.stats[STAT_SECRETS], 3, 0); + if (gamemode != GAME_NEXUIZ) + Sbar_DrawPic (232, 104, sb_slash); + Sbar_DrawNum (240, 104, cl.stats[STAT_TOTALSECRETS], 3, 0); + } + else + { + Sbar_DrawNum (240, 104, cl.stats[STAT_SECRETS], 3, 0); + } + if(cl.stats[STAT_TOTALMONSTERS]) + { + Sbar_DrawNum (160, 144, cl.stats[STAT_MONSTERS], 3, 0); + if (gamemode != GAME_NEXUIZ) + Sbar_DrawPic (232, 144, sb_slash); + Sbar_DrawNum (240, 144, cl.stats[STAT_TOTALMONSTERS], 3, 0); + } + else + { + Sbar_DrawNum (240, 144, cl.stats[STAT_MONSTERS], 3, 0); + } }