X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fclient%2Fhud%2Fpanel%2Fscoreboard.qc;h=b4a0680bf7ba8f113f08e680219ab16d0cc7714d;hb=c039d054a46888048d214000273ccfc63e4611b6;hp=e725878a378ecae78b8db514987d66292b50a4ee;hpb=3e21073f2bd7f282947bc1f214b3ec25d69ccae0;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/client/hud/panel/scoreboard.qc b/qcsrc/client/hud/panel/scoreboard.qc index e725878a3..b4a0680bf 100644 --- a/qcsrc/client/hud/panel/scoreboard.qc +++ b/qcsrc/client/hud/panel/scoreboard.qc @@ -8,6 +8,8 @@ #include #include +// Scoreboard (#24) + float sbt_bg_alpha; float sbt_fg_alpha; float sbt_fg_alpha_self; @@ -29,7 +31,7 @@ string autocvar_hud_panel_scoreboard_bg_padding = ""; float autocvar_hud_panel_scoreboard_fadeinspeed = 10; float autocvar_hud_panel_scoreboard_fadeoutspeed = 5; float autocvar_hud_panel_scoreboard_respawntime_decimals = 1; -float autocvar_hud_panel_scoreboard_table_bg_alpha = 0.7; +float autocvar_hud_panel_scoreboard_table_bg_alpha = 0; float autocvar_hud_panel_scoreboard_table_bg_scale = 0.25; float autocvar_hud_panel_scoreboard_table_fg_alpha = 0.9; float autocvar_hud_panel_scoreboard_table_fg_alpha_self = 1; @@ -85,6 +87,7 @@ string TranslateScoresLabel(string l) case "rank": return CTX(_("SCO^rank")); case "returns": return CTX(_("SCO^returns")); case "revivals": return CTX(_("SCO^revivals")); + case "rounds": return CTX(_("SCO^rounds won")); case "score": return CTX(_("SCO^score")); case "suicides": return CTX(_("SCO^suicides")); case "takes": return CTX(_("SCO^takes")); @@ -363,6 +366,7 @@ void Cmd_Scoreboard_SetFields(int argc) // no layout can be properly set up until score_info data haven't been received argc = tokenizebyseparator("0 1 ping pl name | score", " "); ps_primary = SP_SCORE; + ps_secondary = SP_SCORE; scores_label(ps_primary) = strzone("score"); scores_flags(ps_primary) = SFL_ALLOW_HIDE; } @@ -603,7 +607,7 @@ string Scoreboard_GetField(entity pl, PlayerScoreField field) } else if(!teamplay) { - f = stof(getplayerkeyvalue(pl.sv_entnum, "colors")); + f = entcs_GetClientColors(pl.sv_entnum); { sbt_field_icon0 = "gfx/scoreboard/playercolor_base"; sbt_field_icon1 = "gfx/scoreboard/playercolor_shirt"; @@ -784,10 +788,7 @@ vector Scoreboard_DrawHeader(vector pos, vector rgb) if (sbt_highlight) if (!(i % 2)) { - if (i == sbt_num_fields-1) - column_dim.x = sbt_field_size[i] + hud_fontsize.x * 0.5; - else - column_dim.x = sbt_field_size[i] + hud_fontsize.x; + column_dim.x = sbt_field_size[i] + hud_fontsize.x; drawfill(pos - eX * hud_fontsize.x * 0.5, column_dim, '0 0 0', sbt_highlight_alpha, DRAWFLAG_NORMAL); } @@ -807,8 +808,6 @@ void Scoreboard_DrawItem(vector item_pos, vector rgb, entity pl, bool is_self, i TC(bool, is_self); TC(int, pl_number); string str; bool is_spec = (entcs_GetTeam(pl.sv_entnum) == NUM_SPECTATOR); - if(is_spec && !is_self) - rgb = '0 0 0'; vector h_pos = item_pos; vector h_size = eX * panel_size.x + eY * hud_fontsize.y * 1.25; @@ -933,7 +932,7 @@ vector Scoreboard_MakeTable(vector pos, entity tm, vector rgb, vector bg_size) panel_pos = pos; panel_size.y = 1.25 * hud_fontsize.y * (1 + max(1, tm.team_size)); panel_size.y += panel_bg_padding * 2; - HUD_Panel_DrawBg(scoreboard_fade_alpha); + HUD_Panel_DrawBg(); vector end_pos = panel_pos + eY * (panel_size.y + hud_fontsize.y); if(panel.current_panel_bg != "0") @@ -1038,7 +1037,7 @@ vector Scoreboard_AccuracyStats_Draw(vector pos, vector rgb, vector bg_size) panel_pos = pos; panel_size.y = height * rows; panel_size.y += panel_bg_padding * 2; - HUD_Panel_DrawBg(scoreboard_fade_alpha); + HUD_Panel_DrawBg(); vector end_pos = panel_pos + eY * (panel_size.y + hud_fontsize.y); if(panel.current_panel_bg != "0") @@ -1069,7 +1068,7 @@ vector Scoreboard_AccuracyStats_Draw(vector pos, vector rgb, vector bg_size) // row highlighting for (int i = 0; i < rows; ++i) - drawfill(pos + eY * weapon_height + eY * height * i, eX * tmp.x + eY * fontsize, '1 1 1', sbt_highlight_alpha, DRAWFLAG_NORMAL); + drawfill(pos + eY * weapon_height + eY * height * i, eX * tmp.x + eY * fontsize, rgb, sbt_highlight_alpha, DRAWFLAG_NORMAL); } average_accuracy = 0; @@ -1179,7 +1178,7 @@ vector Scoreboard_MapStats_Draw(vector pos, vector rgb, vector bg_size) { panel_pos = pos; panel_size.y = hud_fontsize.y * rows; panel_size.y += panel_bg_padding * 2; - HUD_Panel_DrawBg(scoreboard_fade_alpha); + HUD_Panel_DrawBg(); vector end_pos = panel_pos + eY * (panel_size.y + hud_fontsize.y); if(panel.current_panel_bg != "0") @@ -1238,7 +1237,7 @@ vector Scoreboard_Rankings_Draw(vector pos, entity pl, vector rgb, vector bg_siz panel_pos = pos; panel_size.y = 1.25 * hud_fontsize.y * RANKINGS_RECEIVED_CNT; panel_size.y += panel_bg_padding * 2; - HUD_Panel_DrawBg(scoreboard_fade_alpha); + HUD_Panel_DrawBg(); vector end_pos = panel_pos + eY * (panel_size.y + hud_fontsize.y); if(panel.current_panel_bg != "0") @@ -1284,9 +1283,11 @@ void Scoreboard_Draw() { if(!autocvar__hud_configure) { + if(!hud_draw_maximized) return; + // frametime checks allow to toggle the scoreboard even when the game is paused if(scoreboard_active) { - if(menu_enabled == 1) + if(hud_configure_menu_open == 1) scoreboard_fade_alpha = 1; float scoreboard_fadeinspeed = autocvar_hud_panel_scoreboard_fadeinspeed; if (scoreboard_fadeinspeed && frametime) @@ -1313,12 +1314,10 @@ void Scoreboard_Draw() else HUD_Scale_Disable(); - float hud_fade_alpha_save = hud_fade_alpha; - if(menu_enabled == 1) - hud_fade_alpha = 1; - else - hud_fade_alpha = scoreboard_fade_alpha * (1 - autocvar__menu_alpha); - HUD_Panel_UpdateCvars(); + if(scoreboard_fade_alpha <= 0) + return; + panel_fade_alpha *= scoreboard_fade_alpha; + HUD_Panel_LoadCvars(); sbt_bg_alpha = autocvar_hud_panel_scoreboard_table_bg_alpha * panel_fg_alpha; sbt_highlight = autocvar_hud_panel_scoreboard_table_highlight; @@ -1327,8 +1326,6 @@ void Scoreboard_Draw() sbt_fg_alpha = autocvar_hud_panel_scoreboard_table_fg_alpha * panel_fg_alpha; sbt_fg_alpha_self = autocvar_hud_panel_scoreboard_table_fg_alpha_self * panel_fg_alpha; - hud_fade_alpha = hud_fade_alpha_save; - // don't overlap with con_notify if(!autocvar__hud_configure) panel_pos.y = max((autocvar_con_notify * autocvar_con_notifysize), panel_pos.y); @@ -1369,7 +1366,7 @@ void Scoreboard_Draw() { if(tm.team == NUM_SPECTATOR) continue; - if(!tm.team && teamplay) + if(!tm.team) continue; draw_beginBoldFont(); @@ -1399,8 +1396,6 @@ void Scoreboard_Draw() { if(tm.team == NUM_SPECTATOR) continue; - if(!tm.team && teamplay) - continue; pos = Scoreboard_MakeTable(pos, tm, panel_bg_color, bg_size); } @@ -1430,7 +1425,7 @@ void Scoreboard_Draw() if(pl.team != NUM_SPECTATOR) continue; pos.y += 1.25 * hud_fontsize.y; - Scoreboard_DrawItem(pos, panel_bg_color, pl, (pl.sv_entnum == player_localnum), specs); + Scoreboard_DrawItem(pos, '0 0 0', pl, (pl.sv_entnum == player_localnum), specs); ++specs; } @@ -1509,15 +1504,17 @@ void Scoreboard_Draw() { // a negative number means we are awaiting respawn, time value is still the same respawn_time *= -1; // remove mark now that we checked it - respawn_time = max(time, respawn_time); // don't show a negative value while the server is respawning the player (lag) - str = sprintf(_("^1Respawning in ^3%s^1..."), - (autocvar_hud_panel_scoreboard_respawntime_decimals ? - count_seconds_decs(respawn_time - time, autocvar_hud_panel_scoreboard_respawntime_decimals) - : - count_seconds(respawn_time - time) - ) - ); + if(respawn_time < time) // it happens for a few frames when server is respawning the player + str = ""; // draw an empty string to not change suddenly scoreboard_bottom + else + str = sprintf(_("^1Respawning in ^3%s^1..."), + (autocvar_hud_panel_scoreboard_respawntime_decimals ? + count_seconds_decs(respawn_time - time, autocvar_hud_panel_scoreboard_respawntime_decimals) + : + count_seconds(ceil(respawn_time - time)) + ) + ); } else if(time < respawn_time) { @@ -1525,7 +1522,7 @@ void Scoreboard_Draw() (autocvar_hud_panel_scoreboard_respawntime_decimals ? count_seconds_decs(respawn_time - time, autocvar_hud_panel_scoreboard_respawntime_decimals) : - count_seconds(respawn_time - time) + count_seconds(ceil(respawn_time - time)) ) ); }