#include <common/stats.qh>
#include <common/teams.qh>
+// Scoreboard (#24)
+
float sbt_bg_alpha;
float sbt_fg_alpha;
float sbt_fg_alpha_self;
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"));
}
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";
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);
}
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;
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")
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")
// 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;
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")
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")
{
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)
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;
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);
{
if(tm.team == NUM_SPECTATOR)
continue;
- if(!tm.team && teamplay)
+ if(!tm.team)
continue;
draw_beginBoldFont();
{
if(tm.team == NUM_SPECTATOR)
continue;
- if(!tm.team && teamplay)
- continue;
pos = Scoreboard_MakeTable(pos, tm, panel_bg_color, bg_size);
}
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;
}
{
// 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)
{
(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))
)
);
}