X-Git-Url: https://git.sesse.net/?p=ccbs;a=blobdiff_plain;f=bigscreen%2Fgroupscreen.cpp;h=e811369c9233daae73d9f2f1ce82ce8df32d560c;hp=d0370de55c9514cc26e50a49625bc082e8f8674f;hb=876c65c3f4f828a54fa8041f5d68e3c4cae1d463;hpb=914b810749b54bb07e1944e558015d6c8f615528 diff --git a/bigscreen/groupscreen.cpp b/bigscreen/groupscreen.cpp index d0370de..e811369 100644 --- a/bigscreen/groupscreen.cpp +++ b/bigscreen/groupscreen.cpp @@ -10,8 +10,8 @@ #include "fetch_highscore.h" #include "fonts.h" -GroupScreen::GroupScreen(pqxx::connection &conn, unsigned tournament, unsigned round, unsigned parallel) - : tournament(tournament), round(round), parallel(parallel), scores_changed(conn, "scores"), conn(conn), valid(false) +GroupScreen::GroupScreen(pqxx::connection &conn, unsigned tournament, unsigned round, unsigned parallel, unsigned machine, unsigned num_machines) + : tournament(tournament), round(round), parallel(parallel), machine(machine), num_machines(num_machines), scores_changed(conn, "scores"), conn(conn), valid(false) { } @@ -144,11 +144,15 @@ void GroupScreen::draw(unsigned char *buf) my_draw_text_deferred(td, "Rank", 12.0, x + width[num_scores + 2] / 2 - my_draw_text("Rank", NULL, 12.0) / 2, 100); // show all the players and the scores - unsigned show_players = std::min(group.players.size(), 9U); + unsigned num_players_this_machine = (group.players.size() + num_machines - machine - 1) / num_machines; + unsigned show_players = std::min(num_players_this_machine, 9U); unsigned y = (show_players <= 7) ? 140 : (140 - (show_players - 7) * 5); - unsigned row = 0; - for (std::vector::const_iterator i = group.players.begin(); i != group.players.end() && row < 9; ++i, ++row) { + unsigned row = 0, m = 0; + for (std::vector::const_iterator i = group.players.begin(); i != group.players.end() && row < 9; ++i) { + if (m++ % num_machines != machine) + continue; + my_draw_text_deferred(td, i->nick, 18.0, 20, y); unsigned x = 40 + width[0]; @@ -190,6 +194,8 @@ void GroupScreen::draw(unsigned char *buf) y += 40 - (show_players - 7) * 4; else y += 40; + ++row; + } /* @@ -238,7 +244,7 @@ void GroupScreen::draw(unsigned char *buf) // now finally find min and max rank, and draw it all y = (show_players <= 7) ? 140 : (140 - (show_players - 7) * 5); - for (unsigned i = 0; i < show_players; ++i) { + for (unsigned i = 0; i < group.players.size() && (i/num_machines) < show_players; ++i) { unsigned best_rank = 1, worst_rank = 1; for (unsigned j = 0; j < group.players.size(); ++j) { if (i == j) @@ -256,6 +262,9 @@ void GroupScreen::draw(unsigned char *buf) else std::sprintf(text, "%u-%u", best_rank, worst_rank); + if (i % num_machines != machine) + continue; + unsigned this_width = my_draw_text(text, NULL, 22.0); my_draw_text_deferred(td, text, 22.0, x + width[num_scores + 2] / 2 - this_width / 2, y); @@ -284,9 +293,10 @@ void GroupScreen::draw(unsigned char *buf) * Needs to win group: */ - /* Find the first player with the fewest songs played. */ + /* Find the first player with the fewest songs played and part of this machine. */ unsigned min_played_songs = 9999, num_random_songs = 0; Player *next_player = NULL; + m = 0; for (std::vector::iterator i = group.players.begin(); i != group.players.end(); ++i) { unsigned this_played = 0, this_random_songs = 0; for (std::vector::const_iterator j = i->scores.begin(); j != i->scores.end(); ++j, ++col) { @@ -296,7 +306,7 @@ void GroupScreen::draw(unsigned char *buf) ++this_random_songs; } - if (this_played < min_played_songs) { + if ((m++ % num_machines == machine) && this_played < min_played_songs) { min_played_songs = this_played; next_player = &(*i); num_random_songs = this_random_songs; // should be equal for all