2 Commits

Author SHA1 Message Date
d806420d21 Fixes #32
All checks were successful
Linux arm64 / Build (push) Successful in 41s
2025-02-02 11:01:10 +01:00
4b98341618 feat: basic gen loading 2025-02-02 10:53:24 +01:00
4 changed files with 62 additions and 10 deletions

View File

@@ -78,4 +78,9 @@ public class MultiPlayerView extends BaseView {
renderGameStatus(); renderGameStatus();
} }
@Override
public void cleanResources() {
this.selector.clean();
}
} }

View File

@@ -25,4 +25,9 @@ public class SoloMenu extends BaseView {
renderReturnButton(); renderReturnButton();
} }
@Override
public void cleanResources() {
this.sudokuSelector.clean();
}
} }

View File

@@ -9,13 +9,22 @@ public class SmoothProgressBar {
private final float speed = 2.0f; private final float speed = 2.0f;
private final float clipConstant = 0.001f; private final float clipConstant = 0.001f;
public void render(String label, ImVec2 size, float progress) { private void updateProgress(float newProgress) {
float delta = progress - lastProgress; float delta = newProgress - lastProgress;
if (Math.abs(delta) < clipConstant) if (Math.abs(delta) < clipConstant)
lastProgress = progress; lastProgress = newProgress;
else else
lastProgress = lastProgress + delta * ImGui.getIO().getDeltaTime() * speed; lastProgress = lastProgress + delta * ImGui.getIO().getDeltaTime() * speed;
}
public void render(String label, ImVec2 size, float progress) {
updateProgress(progress);
ImGui.progressBar(lastProgress, size, label); ImGui.progressBar(lastProgress, size, label);
} }
public void render(float progress) {
updateProgress(progress);
ImGui.progressBar(lastProgress);
}
} }

View File

@@ -35,10 +35,15 @@ public class SudokuSelector {
private final String confirmMessage; private final String confirmMessage;
private Thread genThread = null;
private final SmoothProgressBar genProgressBar;
public SudokuSelector(boolean canGenEmptyGrid, String confirmMessage) { public SudokuSelector(boolean canGenEmptyGrid, String confirmMessage) {
this.canGenEmptyGrid = canGenEmptyGrid; this.canGenEmptyGrid = canGenEmptyGrid;
this.confirmMessage = confirmMessage; this.confirmMessage = confirmMessage;
initConstraints(); initConstraints();
this.genProgressBar = new SmoothProgressBar();
} }
private List<IConstraint> getConstraints() { private List<IConstraint> getConstraints() {
@@ -56,16 +61,39 @@ public class SudokuSelector {
} }
} }
private void stopGenThread() {
if (this.genThread != null) {
this.genThread.interrupt();
this.genThread = null;
}
}
private void renderGenProgress() {
if (ImGui.beginPopup("genProgress")) {
ImGui.text("Loading ...");
int filled = this.doku.getFilledCells().size();
int total = this.doku.getCells().size();
this.genProgressBar.render(filled / (float) total);
ImGui.endPopup();
} else {
stopGenThread();
}
}
private void selectSudoku(MultiDoku doku, boolean empty) { private void selectSudoku(MultiDoku doku, boolean empty) {
this.doku = doku; this.doku = doku;
if (!empty) { ImGui.openPopup("genProgress");
try { this.genThread = new Thread(() -> {
SudokuFactory.fillDoku(doku, Difficulty.values()[difficulty.get()]); if (!empty) {
} catch (Exception e) { try {
e.printStackTrace(); SudokuFactory.fillDoku(doku, Difficulty.values()[difficulty.get()]);
this.onSelect.emit(this.doku);
} catch (Exception e) {
e.printStackTrace();
}
} }
} });
this.onSelect.emit(this.doku); this.genThread.start();
} }
public void renderFileDialog() { public void renderFileDialog() {
@@ -131,7 +159,12 @@ public class SudokuSelector {
if (ImGui.button("À partir d'un fichier")) { if (ImGui.button("À partir d'un fichier")) {
ImGuiFileDialog.openDialog("browse-sudoku", "Choisissez un fichier", ".json", "."); ImGuiFileDialog.openDialog("browse-sudoku", "Choisissez un fichier", ".json", ".");
} }
renderGenProgress();
renderFileDialog(); renderFileDialog();
} }
public void clean() {
stopGenThread();
}
} }