Read max score for all players in one shot as well, with a new query and an index...
[ccbs] / bigscreen / groupscreen.cpp
index fbdcc5e..7b0175a 100644 (file)
@@ -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<unsigned, unsigned> song_scores;
+       std::map<unsigned, unsigned> 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<unsigned> max_score, min_score;
        for (std::vector<Player>::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;