X-Git-Url: https://git.sesse.net/?p=ccbs;a=blobdiff_plain;f=bigscreen%2Fgroupscreen.cpp;h=3628447512372f1c0b776c8c3bc69e1dea58a8b2;hp=aca0780b97d9b7393703c0db650cb61f53d0909e;hb=b11d796b525a70f1458ce2d7188baac4b6d5aa27;hpb=b3ef74a8872266e9162444a6626770b29beb03ca diff --git a/bigscreen/groupscreen.cpp b/bigscreen/groupscreen.cpp index aca0780..3628447 100644 --- a/bigscreen/groupscreen.cpp +++ b/bigscreen/groupscreen.cpp @@ -223,6 +223,71 @@ void GroupScreen::draw(unsigned char *buf) y += 40; } + /* + * Next up (at the bottom) is "who's playing, what will he/she be playing, and + * optionally, how much to lead/win and how much to secure qualification" (the + * last one only in the final round). We assume playing is done in a modified + * zigzag; all the random songs are played first in zigzag/wrapping order (player + * 1 song 1, player 2 song 2, player 3 song 3, player 1 song 2, player 2 song 3, + * player 3 song 1, etc... assuming three songs and three players) and then all + * the chosen songs are played (we assume only one chosen song). + * + * The lines are as follows: + * + * + * + * High score: by at + * Needs to (lead/win): + * Needs to secure qualification: + */ + + /* Find the first player with the fewest songs played. */ + unsigned min_played_songs = 9999, num_random_songs = 0; + Player *next_player = NULL; + 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) { + if (j->score != -1) + ++this_played; + if (!j->chosen) + ++this_random_songs; + } + + if (this_played < min_played_songs) { + min_played_songs = this_played; + next_player = &(*i); + num_random_songs = this_random_songs; // should be equal for all + } + } + + /* Find out what song this player is supposed to play next; try random songs first */ + Score *next_song = NULL; + + for (unsigned i = 0; i < num_random_songs; ++i) { + unsigned j = (i + next_player->position - 1) % num_random_songs; + if (next_player->scores[j].score == -1) { + next_song = &(next_player->scores[j]); + printf("Selecting score %u\n", j); + break; + } + } + + // then all songs, if that didn't work out (slightly icky, but hey) + if (next_song == NULL) { + for (unsigned i = 0; i < num_scores; ++i) { + unsigned j = (i + next_player->position) % num_scores; + if (next_player->scores[j].score == -1) { + next_song = &(next_player->scores[j]); + printf("Selecting score %u\n", j); + break; + } + } + } + + if (next_song != NULL) { + printf("Next: player %u\n", next_player->id); + } + valid = true; draw_all_deferred_text(buf, td, last_text); last_text = td;