package drawer;
import models.Difficulty;
import models.Mode;
import models.Ranking;
import models.Score;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import static java.awt.RenderingHints.*;
import static java.awt.image.BufferedImage.TYPE_INT_ARGB;
public class RankingPicture {
public static BufferedImage createRankingPicture(models.Game game) {
Collection<Difficulty> difficulties = new ArrayList<Difficulty>(game.difficulties);
Collection<Mode> modes = new ArrayList<Mode>(game.modes);
if (difficulties.isEmpty()) {
difficulties.add(null);
}
if (modes.isEmpty()) {
modes.add(null);
}
List<PictureLine> pictureLines = new ArrayList<PictureLine>();
for (Ranking ranking : game.rankings()) {
if (!ranking.scores.isEmpty()) {
pictureLines.add(new BreakLine());
pictureLines.add(new GameLine(ranking));
pictureLines.add(new BreakLine());
for (Score score : ranking.scores) {
pictureLines.add(new ScoreLine(score));
}
pictureLines.add(new BreakLine());
}
}
return computeRanking(pictureLines, new RankingGameConfiguration(game));
}
private static BufferedImage computeRanking(List<PictureLine> pictureLines, RankingGameConfiguration rankingGameConfiguration) {
int height = (RankingGameConfiguration.fontHeight + 5) * (pictureLines.size());
if (height == 0) {
height = 1;
}
BufferedImage bi = new BufferedImage(RankingGameConfiguration.width, height, TYPE_INT_ARGB);
Graphics2D graphics = bi.createGraphics();
graphics.setRenderingHint(KEY_ANTIALIASING, VALUE_ANTIALIAS_ON);
graphics.setRenderingHint(KEY_TEXT_ANTIALIASING, VALUE_TEXT_ANTIALIAS_ON);
FontMetrics fontMetrics = graphics.getFontMetrics();
int stringHeight = fontMetrics.getAscent() + 5;
for (int i = 0; i < pictureLines.size(); i++) {
pictureLines.get(i).draw(graphics, 10 + (i * stringHeight), rankingGameConfiguration);
}
return bi;
}
}