X-Git-Url: http://git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=blobdiff_plain;f=qcsrc%2Fclient%2Fscoreboard.qc;h=591f4b0dc6edc9478df5d85b69ff755db78bf5e9;hp=ffa4c6e220bec97c2c28d08a874abfe90e47b3aa;hb=e15ed5c2ab522ab6da87f8068c5d9ff92467a452;hpb=14cfbdee1a2b90bff05e9b9fb4e1f96c8f9daa52 diff --git a/qcsrc/client/scoreboard.qc b/qcsrc/client/scoreboard.qc index ffa4c6e22..591f4b0dc 100644 --- a/qcsrc/client/scoreboard.qc +++ b/qcsrc/client/scoreboard.qc @@ -129,9 +129,25 @@ void HUD_UpdatePlayerTeams() */ } +float HUD_CompareScore(float f, float vl, float vr) +{ + if(f & SFL_ZERO_IS_WORST) + { + if(vl == 0 && vr != 0) + return 1; + if(vl != 0 && vr == 0) + return 0; + } + if(vl > vr) + return IS_INCREASING(f); + if(vl < vr) + return IS_DECREASING(f); + return -1; +} + float HUD_ComparePlayerScores(entity left, entity right) { - float vl, vr; + float vl, vr, r, i; vl = GetPlayerColor(left.sv_entnum); vr = GetPlayerColor(right.sv_entnum); @@ -154,33 +170,20 @@ float HUD_ComparePlayerScores(entity left, entity right) return false; } - vl = left.scores[ps_primary]; - vr = right.scores[ps_primary]; - if(scores_flags[ps_primary] & SFL_ZERO_IS_WORST) - { - if(vl == 0 && vr != 0) - return 1; - if(vl != 0 && vr == 0) - return 0; - } - if(vl > vr) - return IS_INCREASING(scores_flags[ps_primary]); - if(vl < vr) - return IS_DECREASING(scores_flags[ps_primary]); + r = HUD_CompareScore(left.scores[ps_primary], right.scores[ps_primary], scores_flags[ps_primary]); + if (r >= 0) + return r; + + r = HUD_CompareScore(left.scores[ps_secondary], right.scores[ps_secondary], scores_flags[ps_secondary]); + if (r >= 0) + return r; - vl = left.scores[ps_secondary]; - vr = right.scores[ps_secondary]; - if(scores_flags[ps_secondary] & SFL_ZERO_IS_WORST) + for(i = 0; i < MAX_SCORE; ++i) { - if(vl == 0 && vr != 0) - return 1; - if(vl != 0 && vr == 0) - return 0; + r = HUD_CompareScore(left.scores[i], right.scores[i], scores_flags[i]); + if (r >= 0) + return r; } - if(vl > vr) - return IS_INCREASING(scores_flags[ps_secondary]); - if(vl < vr) - return IS_DECREASING(scores_flags[ps_secondary]); return false; } @@ -199,26 +202,27 @@ void HUD_UpdatePlayerPos(entity player) float HUD_CompareTeamScores(entity left, entity right) { - float vl, vr; + float i, r; if(left.team == COLOR_SPECTATOR) return 1; if(right.team == COLOR_SPECTATOR) return 0; - vl = left.teamscores[ts_primary]; - vr = right.teamscores[ts_primary]; - if(vl > vr) - return IS_INCREASING(teamscores_flags[ts_primary]); - if(vl < vr) - return IS_DECREASING(teamscores_flags[ts_primary]); + r = HUD_CompareScore(left.teamscores[ts_primary], right.teamscores[ts_primary], teamscores_flags[ts_primary]); + if (r >= 0) + return r; - vl = left.teamscores[ts_secondary]; - vr = right.teamscores[ts_secondary]; - if(vl > vr) - return IS_INCREASING(teamscores_flags[ts_secondary]); - if(vl < vr) - return IS_DECREASING(teamscores_flags[ts_secondary]); + r = HUD_CompareScore(left.teamscores[ts_secondary], right.teamscores[ts_secondary], teamscores_flags[ts_secondary]); + if (r >= 0) + return r; + + for(i = 0; i < MAX_SCORE; ++i) + { + r = HUD_CompareScore(left.teamscores[i], right.teamscores[i], teamscores_flags[i]); + if (r >= 0) + return r; + } return false; } @@ -306,20 +310,20 @@ void Cmd_HUD_SetFields(float argc) { float i, j, slash; string str, pattern; - float have_name, have_primary, have_secondary, have_separator; + float have_name = 0, have_primary = 0, have_secondary = 0, have_separator = 0; float missing; // TODO: re enable with gametype dependant cvars? if(argc < 3) // no arguments provided - argc = tokenizebyseparator(strcat("x ", autocvar_scoreboard_columns), " "); + argc = tokenizebyseparator(strcat("0 1 ", autocvar_scoreboard_columns), " "); if(argc < 3) - argc = tokenizebyseparator(strcat("x ", HUD_DefaultColumnLayout()), " "); + argc = tokenizebyseparator(strcat("0 1 ", HUD_DefaultColumnLayout()), " "); if(argc == 3) { if(argv(2) == "default") - argc = tokenizebyseparator(strcat("x ", HUD_DefaultColumnLayout()), " "); + argc = tokenizebyseparator(strcat("0 1 ", HUD_DefaultColumnLayout()), " "); else if(argv(2) == "all") { string s; @@ -334,17 +338,17 @@ void Cmd_HUD_SetFields(float argc) if(ps_secondary != ps_primary) s = strcat(s, " ", scores_label[ps_secondary]); s = strcat(s, " ", scores_label[ps_primary]); - argc = tokenizebyseparator(strcat("x ", s), " "); + argc = tokenizebyseparator(strcat("0 1 ", s), " "); } } hud_num_fields = 0; - hud_fontsize = HUD_GetFontsize("hud_fontsize"); + hud_fontsize = HUD_GetFontsize("hud_fontsize"); draw_beginBoldFont(); - for(i = 0; i < argc - 1; ++i) + for(i = 1; i < argc - 1; ++i) { float nocomplain; str = argv(i+1); @@ -791,7 +795,7 @@ void HUD_PrintScoreboardItem(vector pos, entity pl, float is_self, float pl_numb vector HUD_Scoreboard_MakeTable(vector pos, entity tm, vector rgb, vector bg_size) { float body_table_height, i; - vector tmp, column_dim; + vector tmp = '0 0 0', column_dim = '0 0 0'; entity pl; body_table_height = 1.25 * hud_fontsize_y * max(1, tm.team_size); // no player? show 1 empty line @@ -955,7 +959,7 @@ vector HUD_DrawScoreboardAccuracyStats(vector pos, vector rgb, vector bg_size) drawstring(pos, sprintf(_("Accuracy stats (average %d%%)"), average_accuracy), hud_fontsize, '1 1 1', scoreboard_alpha_fg, DRAWFLAG_NORMAL); pos_y += 1.25 * hud_fontsize_y + autocvar_scoreboard_border_thickness; - vector tmp; + vector tmp = '0 0 0'; tmp_x = sbwidth; tmp_y = height * rows; @@ -1092,7 +1096,7 @@ vector HUD_DrawMapStats(vector pos, vector rgb, vector bg_size) { pos_y += 1.25 * hud_fontsize_y + autocvar_scoreboard_border_thickness; // draw table - vector tmp; + vector tmp = '0 0 0'; tmp_x = sbwidth; tmp_y = hud_fontsize_y * rows; @@ -1133,7 +1137,7 @@ vector HUD_DrawScoreboardRankings(vector pos, entity pl, vector rgb, vector bg_ pos_y += hud_fontsize_y; drawstring(pos, _("Rankings"), hud_fontsize, '1 1 1', scoreboard_alpha_fg, DRAWFLAG_NORMAL); pos_y += hud_fontsize_y + autocvar_scoreboard_border_thickness; - vector tmp; + vector tmp = '0 0 0'; tmp_x = sbwidth; tmp_y = 1.25 * hud_fontsize_y * RANKINGS_RECEIVED_CNT; @@ -1258,9 +1262,19 @@ void HUD_DrawScoreboard() pos = HUD_Scoreboard_MakeTable(pos, tm, rgb, bg_size); } + +#ifdef GMQCC + rgb = '0 0 0'; +#endif + rgb_x = autocvar_scoreboard_color_bg_r; + rgb_y = autocvar_scoreboard_color_bg_g; + rgb_z = autocvar_scoreboard_color_bg_b; } else { +#ifdef GMQCC + rgb = '0 0 0'; +#endif rgb_x = autocvar_scoreboard_color_bg_r; rgb_y = autocvar_scoreboard_color_bg_g; rgb_z = autocvar_scoreboard_color_bg_b; @@ -1283,7 +1297,7 @@ void HUD_DrawScoreboard() drawcolorcodedstring(pos, sprintf(_("All-time fastest: %d ^7(%s^7)"), race_speedaward_alltimebest, race_speedaward_alltimebest_holder), hud_fontsize, scoreboard_alpha_fg, DRAWFLAG_NORMAL); pos_y += 1.25 * hud_fontsize_y; } - pos = HUD_DrawScoreboardRankings(pos, pl, rgb, bg_size); + pos = HUD_DrawScoreboardRankings(pos, playerslots[player_localnum], rgb, bg_size); } else if(autocvar_scoreboard_accuracy && spectatee_status != -1 && !warmup_stage) { if(teamplay) @@ -1385,12 +1399,14 @@ void HUD_DrawScoreboard() { // a negative number means we are awaiting respawn, time value is still the same respawn_time *= -1; // remove mark now that we checked it - str = strcat("^1Respawning in ^3", substring(ftos(bound(0, respawn_time - time, 9.999999)), 0, 4), "^1 seconds..."); + 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 seconds..."), ftos_decimals(respawn_time - time, autocvar_scoreboard_respawntime_decimals)); } else if(time < respawn_time) - str = strcat("You are dead, wait ^3", substring(ftos(bound(0, respawn_time - time, 9.999999)), 0, 4), "^7 seconds before respawning"); + str = sprintf(_("You are dead, wait ^3%s^7 seconds before respawning"), ftos_decimals(respawn_time - time, autocvar_scoreboard_respawntime_decimals)); else if(time >= respawn_time) - str = strcat("You are dead, press ^2", getcommandkey("primary fire", "+fire"), "^7 to respawn"); + str = sprintf(_("You are dead, press ^2%s^7 to respawn"), getcommandkey("jump", "+jump")); pos_y += 1.2 * hud_fontsize_y; drawcolorcodedstring(pos + '0.5 0 0' * (sbwidth - stringwidth(str, TRUE, hud_fontsize)), str, hud_fontsize, scoreboard_alpha_fg, DRAWFLAG_NORMAL);