Compare commits
2 Commits
68021b796b
...
d806420d21
| Author | SHA1 | Date | |
|---|---|---|---|
| d806420d21 | |||
| 4b98341618 |
@@ -78,4 +78,9 @@ public class MultiPlayerView extends BaseView {
|
||||
renderGameStatus();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void cleanResources() {
|
||||
this.selector.clean();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -25,4 +25,9 @@ public class SoloMenu extends BaseView {
|
||||
renderReturnButton();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void cleanResources() {
|
||||
this.sudokuSelector.clean();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user