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();
}
@Override
public void cleanResources() {
this.selector.clean();
}
}

View File

@@ -25,4 +25,9 @@ public class SoloMenu extends BaseView {
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 clipConstant = 0.001f;
public void render(String label, ImVec2 size, float progress) {
float delta = progress - lastProgress;
private void updateProgress(float newProgress) {
float delta = newProgress - lastProgress;
if (Math.abs(delta) < clipConstant)
lastProgress = progress;
lastProgress = newProgress;
else
lastProgress = lastProgress + delta * ImGui.getIO().getDeltaTime() * speed;
}
public void render(String label, ImVec2 size, float progress) {
updateProgress(progress);
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 Thread genThread = null;
private final SmoothProgressBar genProgressBar;
public SudokuSelector(boolean canGenEmptyGrid, String confirmMessage) {
this.canGenEmptyGrid = canGenEmptyGrid;
this.confirmMessage = confirmMessage;
initConstraints();
this.genProgressBar = new SmoothProgressBar();
}
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) {
this.doku = doku;
ImGui.openPopup("genProgress");
this.genThread = new Thread(() -> {
if (!empty) {
try {
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() {
@@ -131,7 +159,12 @@ public class SudokuSelector {
if (ImGui.button("À partir d'un fichier")) {
ImGuiFileDialog.openDialog("browse-sudoku", "Choisissez un fichier", ".json", ".");
}
renderGenProgress();
renderFileDialog();
}
public void clean() {
stopGenThread();
}
}