74 lines
2.3 KiB
Java
74 lines
2.3 KiB
Java
package gui.widget;
|
|
|
|
import game.Game;
|
|
import game.Player;
|
|
import imgui.ImGui;
|
|
import imgui.ImVec2;
|
|
import imgui.ImVec4;
|
|
import imgui.flag.ImGuiCol;
|
|
import imgui.flag.ImGuiStyleVar;
|
|
|
|
public class LeaderboardRenderer {
|
|
|
|
private final Game game;
|
|
private final Player currentPlayer;
|
|
|
|
private final float cellHeight = 75;
|
|
private final ImVec2 cellSize = new ImVec2(12 * cellHeight, cellHeight);
|
|
private final ImVec2 rankSize = new ImVec2(cellHeight, cellHeight);
|
|
private final ImVec2 scoreSize = rankSize;
|
|
private final ImVec2 nameSize = new ImVec2(cellSize.x - cellHeight * 2.0f, cellHeight);
|
|
private final ImVec4 cellColorPlayer = new ImVec4(0.20f, 0.67f, 1.0f, 0.5f);
|
|
private final ImVec4 cellColorEnemy = new ImVec4(1.0f, 0.0f, 0.0f, 0.5f);
|
|
private final int maxPlayersShowed = 2;
|
|
|
|
private final int emptyCellCount;
|
|
|
|
public LeaderboardRenderer(Game game, Player player) {
|
|
this.game = game;
|
|
this.currentPlayer = player;
|
|
this.emptyCellCount = game.getDoku().getEmptyCells().size();
|
|
}
|
|
|
|
private void renderRank(int rank) {
|
|
ImGui.button(Integer.toString(rank), rankSize);
|
|
}
|
|
|
|
private void renderName(String name) {
|
|
ImGui.button(name, nameSize);
|
|
}
|
|
|
|
private void renderScore(int score) {
|
|
ImGui.button(Integer.toString(score), scoreSize);
|
|
}
|
|
|
|
private void renderCell(Player player, int rank, ImVec4 color) {
|
|
ImGui.pushStyleColor(ImGuiCol.Button, color);
|
|
ImGui.pushStyleColor(ImGuiCol.ButtonHovered, color);
|
|
ImGui.pushStyleColor(ImGuiCol.ButtonActive, color);
|
|
ImGui.beginChild(player.getPseudo() + "##" + player.getId(), cellSize);
|
|
renderRank(rank);
|
|
ImGui.sameLine();
|
|
renderName(player.getPseudo());
|
|
ImGui.sameLine();
|
|
renderScore(emptyCellCount - player.getRemainingCells());
|
|
ImGui.endChild();
|
|
ImGui.popStyleColor(3);
|
|
}
|
|
|
|
public void render() {
|
|
var displaySize = ImGui.getIO().getDisplaySize();
|
|
ImGui.setCursorPosX(displaySize.x / 2.0f - cellSize.x / 2.0f);
|
|
ImGui.beginChild("Leaderboard", new ImVec2(cellSize.x + 15.0f, cellHeight * maxPlayersShowed));
|
|
ImGui.pushStyleVar(ImGuiStyleVar.ItemSpacing, new ImVec2());
|
|
ImGui.pushStyleVar(ImGuiStyleVar.FrameBorderSize, 3.0f);
|
|
for (int i = 0; i < game.getLeaderboard().size(); i++) {
|
|
Player player = game.getLeaderboard().get(i);
|
|
renderCell(player, i + 1, player == currentPlayer ? cellColorPlayer : cellColorEnemy);
|
|
}
|
|
ImGui.popStyleVar(2);
|
|
ImGui.endChild();
|
|
}
|
|
|
|
}
|