X-Git-Url: https://git.sesse.net/?p=ccbs;a=blobdiff_plain;f=bigscreen%2Fgroupscreen.cpp;h=8d408ec50358b56db1f560f425ebbbd938f9da21;hp=d0370de55c9514cc26e50a49625bc082e8f8674f;hb=0b3bb271ac40b5f8bcfc5a417d4423e92c4483b1;hpb=914b810749b54bb07e1944e558015d6c8f615528 diff --git a/bigscreen/groupscreen.cpp b/bigscreen/groupscreen.cpp index d0370de..8d408ec 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) { } @@ -57,15 +57,23 @@ void GroupScreen::draw(unsigned char *buf) // main heading char heading[64]; - if (parallel == 0) { - std::sprintf(heading, "Round %u", round); + if (num_machines == 1) { + if (parallel == 0) { + std::sprintf(heading, "Round %u", round); + } else { + std::sprintf(heading, "Round %u, Group %u", round, parallel); + } } else { - std::sprintf(heading, "Round %u, Group %u", round, parallel); + if (parallel == 0) { + std::sprintf(heading, "Round %u, Machine %u", round, machine + 1); + } else { + std::sprintf(heading, "Round %u, Group %u, Machine %u", round, parallel, machine + 1); + } } { - unsigned width = my_draw_text(heading, NULL, 48.0); - my_draw_text_deferred(td, heading, 48.0, 800/2 - width/2, 60); + unsigned width = my_draw_text(heading, NULL, 40.0); + my_draw_text_deferred(td, heading, 40.0, 800/2 - width/2, 60); } // Find out how wide each column has to be. First try unlimited width (ie. @@ -144,11 +152,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 +202,8 @@ void GroupScreen::draw(unsigned char *buf) y += 40 - (show_players - 7) * 4; else y += 40; + ++row; + } /* @@ -238,7 +252,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 +270,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 +301,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 +314,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 @@ -483,3 +501,7 @@ void GroupScreen::draw(unsigned char *buf) last_text = td; } +int GroupScreen::get_priority() +{ + return 10; +}