package drawer;
import com.google.common.base.Strings;
import models.Score;
import java.awt.*;
import static drawer.RankingGameConfiguration.COLOR_SHMUP_GREY;
import static java.awt.Color.DARK_GRAY;
import static java.awt.Color.GRAY;
import static java.awt.Color.WHITE;
import static java.awt.Font.BOLD;
import static java.awt.Font.ITALIC;
import static java.awt.Font.PLAIN;
import static org.apache.commons.lang3.StringUtils.defaultString;
import static org.apache.commons.lang3.StringUtils.leftPad;
import static org.apache.commons.lang3.StringUtils.rightPad;
public class ScoreLine implements PictureLine {
private static final int fontWidth = 12;
private final static Font normalFont = new Font("Liberation Mono", PLAIN, 12);
private final static Font parameterFont = new Font("Liberation Mono", PLAIN, 14);
private final static Font playerFont = new Font("Liberation Mono", BOLD, 12);
private final static Font scoreFont = new Font("Liberation Mono", BOLD, 14);
private final static Font stageFont = new Font("Liberation Mono", ITALIC, 14);
private static final int SCORE_X = 140;
private static final int STAGE_PLATFORM_X = SCORE_X + 220;
private static final Color COLOR_SHMUP_PLAYER = new Color(247, 127, 74);
private static final Color COLOR_SHMUP_SCORE = new Color(245, 70, 52);
private static final Color COLOR_SHMUP_COMMENT = new Color(193, 193, 193);
private final models.Score score;
public ScoreLine(Score score) {
this.score = score;
}
@Override
public void draw(Graphics2D graphics, int y, RankingGameConfiguration rankingGameConfiguration) {
pyjama(graphics, y);
rank(graphics, y);
player(graphics, y);
score(graphics, y);
stage(graphics, y, rankingGameConfiguration);
platformAndComment(graphics, y, rankingGameConfiguration);
}
private void platformAndComment(Graphics2D graphics, int y, RankingGameConfiguration rankingGameConfiguration) {
String platform = score.platform == null ? "" : leftPad(score.platform.name, rankingGameConfiguration.maxPlatformLength);
if (score.game.platforms.isEmpty() || score.game.platforms.size() == 1) {
platform = "";
}
graphics.setColor(COLOR_SHMUP_COMMENT);
graphics.setFont(parameterFont);
graphics.drawString(platform + " " + score.shipName() + " " + defaultString(score.comment).trim(), STAGE_PLATFORM_X + (rankingGameConfiguration.maxStageLength * fontWidth), y);
}
private void stage(Graphics2D graphics, int y, RankingGameConfiguration rankingGameConfiguration) {
graphics.setColor(DARK_GRAY);
graphics.setFont(parameterFont);
String stage = score.stage == null ? "" : rightPad(score.stage.toString(), rankingGameConfiguration.maxStageLength);
graphics.setFont(stageFont);
graphics.drawString(stage + " ", STAGE_PLATFORM_X, y);
}
private void score(Graphics2D graphics, int y) {
graphics.setColor(COLOR_SHMUP_SCORE);
graphics.setFont(scoreFont);
graphics.drawString(Strings.padStart(score.formattedValue(), "14607555540022222222".length() + 6, ' '), SCORE_X, y);
}
private void player(Graphics2D graphics, int y) {
graphics.setFont(playerFont);
graphics.setColor(COLOR_SHMUP_PLAYER);
graphics.drawString(score.player.name, 30, y);
}
private void rank(Graphics2D graphics, int y) {
graphics.setColor(GRAY);
graphics.setFont(normalFont);
String rank = leftPad(score.rank + ".", 3);
graphics.drawString(rank, 0, y);
}
private void pyjama(Graphics2D graphics, int y) {
if (score.rank % 2 == 1) {
graphics.setColor(WHITE);
} else {
graphics.setColor(COLOR_SHMUP_GREY);
}
graphics.fillRect(0, y - RankingGameConfiguration.fontHeight, RankingGameConfiguration.width, y);
}
}