X-Git-Url: https://git.sesse.net/?p=ccbs;a=blobdiff_plain;f=bigscreen%2Fgroupscreen.cpp;h=1a0723408211f6f983a8ca93fb6123d7328e7949;hp=fbdcc5ed89aac1ea9e44fe3ad7159b53e81b5936;hb=b2230c3bda253bf91d775447a2d1bd3d51e25d79;hpb=57c939a53665f808b2429461d547271adf2c5908 diff --git a/bigscreen/groupscreen.cpp b/bigscreen/groupscreen.cpp index fbdcc5e..1a07234 100644 --- a/bigscreen/groupscreen.cpp +++ b/bigscreen/groupscreen.cpp @@ -5,7 +5,7 @@ #include "groupscreen.h" #include "fetch_group.h" #include "fetch_max_score_for_songs.h" -#include "fetch_max_score_for_player.h" +#include "fetch_max_score_for_players.h" #include "fetch_needs_update.h" #include "fetch_highscore.h" #include "fonts.h" @@ -45,8 +45,9 @@ void GroupScreen::draw(unsigned char *buf) * We'll probably need some values from here later on (although not all), just fetch them * all while we're at it. */ - std::map song_scores; + std::map song_scores, player_scores; conn.perform(FetchMaxScoreForSongs(tournament, &song_scores)); + conn.perform(FetchMaxScoreForPlayers(tournament, round, &player_scores)); Group group; conn.perform(FetchGroup(tournament, round, parallel, &group)); @@ -211,8 +212,6 @@ void GroupScreen::draw(unsigned char *buf) * matter of sorting; the best attainable rank for player X is obtained if * X gets max score and all others get min score, the worst attainable rank * is obtained if X gets min score and all others get max score. - * - * This is a bit SQL-heavy, but heck... */ std::vector max_score, min_score; for (std::vector::const_iterator i = group.players.begin(); i != group.players.end(); ++i) { @@ -228,7 +227,7 @@ void GroupScreen::draw(unsigned char *buf) // random song, or we know what song the player picked max_score_this_song = song_scores[j->song.id]; } else { - conn.perform(FetchMaxScoreForPlayer(tournament, i->id, round, &max_score_this_song)); + max_score_this_song = player_scores[i->id]; } max_score_tp += max_score_this_song; } @@ -360,7 +359,7 @@ void GroupScreen::draw(unsigned char *buf) // random song, or we know what song the player picked max_score_this_song = song_scores[next_song->song.id]; } else { - conn.perform(FetchMaxScoreForPlayer(tournament, next_player->id, round, &max_score_this_song)); + max_score_this_song = player_scores[next_player->id]; } unsigned y = 520; @@ -454,7 +453,9 @@ void GroupScreen::draw(unsigned char *buf) y += 30; } - if (next_player->total + max_score_this_song > qualify_beat_worst_case && (qualify_beat_worst_case != win_beat)) { + if (group.num_qualifying > 0 && + next_player->total + max_score_this_song > unsigned(qualify_beat_worst_case) && + (unsigned(qualify_beat_worst_case) != win_beat)) { int qual_need = std::max(qualify_beat_worst_case - next_player->total + 1, 0U); if (qualify_beat_worst_case == qualify_beat_best_case) {