feat: first player progress display

This commit is contained in:
2025-02-01 11:58:42 +01:00
parent caf6569409
commit 438252a8ca
3 changed files with 53 additions and 0 deletions

View File

@@ -2,6 +2,7 @@ package gui.menu;
import game.Game; import game.Game;
import gui.widget.LeaderboardRenderer; import gui.widget.LeaderboardRenderer;
import gui.widget.MultiPlayerCompleteProgress;
import gui.widget.SudokuRenderer; import gui.widget.SudokuRenderer;
import gui.widget.TimerRenderer; import gui.widget.TimerRenderer;
import imgui.ImGui; import imgui.ImGui;
@@ -16,6 +17,7 @@ public class MultiPlayerDokuView extends BaseView {
private final SudokuRenderer sudokuRenderer; private final SudokuRenderer sudokuRenderer;
private final LeaderboardRenderer leaderboardRenderer; private final LeaderboardRenderer leaderboardRenderer;
private final TimerRenderer timerRenderer; private final TimerRenderer timerRenderer;
private final MultiPlayerCompleteProgress completeProgress;
public MultiPlayerDokuView(StateMachine stateMachine, Client client, Server server) { public MultiPlayerDokuView(StateMachine stateMachine, Client client, Server server) {
super(stateMachine); super(stateMachine);
@@ -26,6 +28,7 @@ public class MultiPlayerDokuView extends BaseView {
this.sudokuRenderer.onCellChange.connect(this::onCellChange); this.sudokuRenderer.onCellChange.connect(this::onCellChange);
this.client.onDisconnect.connect(this::onDisconnect); this.client.onDisconnect.connect(this::onDisconnect);
this.timerRenderer = new TimerRenderer(this.client.getGame().getStartTime(), Game.GAME_DURATION); this.timerRenderer = new TimerRenderer(this.client.getGame().getStartTime(), Game.GAME_DURATION);
this.completeProgress = new MultiPlayerCompleteProgress(this.client.getGame());
} }
private void onCellChange(Cell cell) { private void onCellChange(Cell cell) {
@@ -42,6 +45,7 @@ public class MultiPlayerDokuView extends BaseView {
public void render() { public void render() {
this.timerRenderer.render(); this.timerRenderer.render();
this.leaderboardRenderer.render(); this.leaderboardRenderer.render();
this.completeProgress.render();
this.sudokuRenderer.render(); this.sudokuRenderer.render();
if (ImGui.button("Quitter")) { if (ImGui.button("Quitter")) {
this.client.stop(); this.client.stop();

View File

@@ -0,0 +1,28 @@
package gui.widget;
import game.Game;
import game.Player;
import imgui.ImGui;
import imgui.ImVec2;
public class MultiPlayerCompleteProgress {
private final Game game;
private final int emptyCellCount;
private final ImVec2 progressSize = new ImVec2(700, 50);
private final SmoothProgressBar progressBar;
public MultiPlayerCompleteProgress(Game game) {
this.game = game;
this.emptyCellCount = game.getDoku().getEmptyCells().size();
this.progressBar = new SmoothProgressBar();
}
public void render() {
Player firstPlayer = game.getLeaderboard().get(0);
ImGui.setCursorPosX(ImGui.getIO().getDisplaySizeX() / 2.0f - progressSize.x / 2.0f);
String progressText = firstPlayer.getPseudo() + " - " + firstPlayer.getScore() + "/" + emptyCellCount;
this.progressBar.render(progressText, progressSize, 1.0f - firstPlayer.getScore() / (float) emptyCellCount);
}
}

View File

@@ -0,0 +1,21 @@
package gui.widget;
import imgui.ImGui;
import imgui.ImVec2;
public class SmoothProgressBar {
private float lastProgress = 0;
private final float speed = 2.0f;
private final float clipConstant = 0.001f;
public void render(String label, ImVec2 size, float progress) {
float delta = progress - lastProgress;
if (Math.abs(delta) < clipConstant)
lastProgress = progress;
else
lastProgress = lastProgress + delta * ImGui.getIO().getDeltaTime() * speed;
ImGui.progressBar(lastProgress, size, label);
}
}