diff --git a/app/src/main/java/gui/menu/MultiPlayerView.java b/app/src/main/java/gui/menu/MultiPlayerView.java index b52dbdd..4ece808 100644 --- a/app/src/main/java/gui/menu/MultiPlayerView.java +++ b/app/src/main/java/gui/menu/MultiPlayerView.java @@ -78,4 +78,9 @@ public class MultiPlayerView extends BaseView { renderGameStatus(); } + @Override + public void cleanResources() { + this.selector.clean(); + } + } diff --git a/app/src/main/java/gui/menu/SoloMenu.java b/app/src/main/java/gui/menu/SoloMenu.java index d823671..0e303d6 100644 --- a/app/src/main/java/gui/menu/SoloMenu.java +++ b/app/src/main/java/gui/menu/SoloMenu.java @@ -25,4 +25,9 @@ public class SoloMenu extends BaseView { renderReturnButton(); } + @Override + public void cleanResources() { + this.sudokuSelector.clean(); + } + } diff --git a/app/src/main/java/gui/widget/SudokuSelector.java b/app/src/main/java/gui/widget/SudokuSelector.java index 8bf0ad5..ce446ce 100644 --- a/app/src/main/java/gui/widget/SudokuSelector.java +++ b/app/src/main/java/gui/widget/SudokuSelector.java @@ -35,6 +35,8 @@ public class SudokuSelector { private final String confirmMessage; + private Thread genThread = null; + public SudokuSelector(boolean canGenEmptyGrid, String confirmMessage) { this.canGenEmptyGrid = canGenEmptyGrid; this.confirmMessage = confirmMessage; @@ -56,16 +58,36 @@ 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 ..."); + ImGui.endPopup(); + } else { + stopGenThread(); + } + } + private void selectSudoku(MultiDoku doku, boolean empty) { this.doku = doku; - if (!empty) { - try { - SudokuFactory.fillDoku(doku, Difficulty.values()[difficulty.get()]); - } catch (Exception e) { - e.printStackTrace(); + 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 +153,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(); + } + }