|
@@ -1,5 +1,6 @@
|
|
|
package xyz.tbvns.ui;
|
|
|
|
|
|
+import javafx.application.Platform;
|
|
|
import javafx.geometry.Insets;
|
|
|
import javafx.geometry.Pos;
|
|
|
import javafx.scene.Node;
|
|
@@ -11,6 +12,7 @@ import javafx.scene.text.Font;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import xyz.tbvns.core.DataManager;
|
|
|
import xyz.tbvns.core.Objects.Level;
|
|
|
+import xyz.tbvns.core.UIProgressBar;
|
|
|
import xyz.tbvns.ui.LevelEditor.MainWindow;
|
|
|
|
|
|
import java.util.List;
|
|
@@ -21,9 +23,10 @@ public class LevelSelectScreen {
|
|
|
public static Pane pane() {
|
|
|
FlowPane pane = new FlowPane();
|
|
|
pane.setAlignment(Pos.TOP_CENTER);
|
|
|
- pane.setPrefWidth(5000);
|
|
|
+ pane.setPrefWidth(400);
|
|
|
pane.setMinWidth(400);
|
|
|
pane.setMinHeight(400);
|
|
|
+ pane.setMaxHeight(500);
|
|
|
|
|
|
label.setPadding(new Insets(10));
|
|
|
label.setFont(Font.font(50));
|
|
@@ -42,17 +45,31 @@ public class LevelSelectScreen {
|
|
|
|
|
|
scrollPane.setContent(gridPane);
|
|
|
scrollPane.fitToWidthProperty().set(true);
|
|
|
- gridPane.setBackground(new Background(new BackgroundFill(new Color(1, 1, 1, 1), new CornerRadii(10), Insets.EMPTY)));
|
|
|
+ gridPane.setBackground(new Background(new BackgroundFill(new Color(1, 1, 1, 1), new CornerRadii(0), Insets.EMPTY)));
|
|
|
|
|
|
- try {
|
|
|
- List<Level> levelList = DataManager.getLevels();
|
|
|
- for (int i = 0; i < levelList.size(); i++) {
|
|
|
- Level level = levelList.get(i);
|
|
|
- gridPane.add(getLevelPane(level, i), 1, i);
|
|
|
+
|
|
|
+ UIProgressBar progressBar = new UIProgressBar();
|
|
|
+ progressBar.openNow("Loading levels...");
|
|
|
+ new Thread(() -> {
|
|
|
+ try {
|
|
|
+ List<Level> levelList = DataManager.getLevels();
|
|
|
+ progressBar.updateBar(0.5);
|
|
|
+ for (int i = 0; i < levelList.size(); i++) {
|
|
|
+ Level level = levelList.get(i);
|
|
|
+
|
|
|
+ int finalI = i;
|
|
|
+ Platform.runLater(() -> gridPane.add(getLevelPane(level, finalI), 1, finalI));
|
|
|
+ double factor = 1f / levelList.size() * 0.5;
|
|
|
+
|
|
|
+ progressBar.updateBar(progressBar.getProgressBar().getProgress() + factor);
|
|
|
+ }
|
|
|
+ progressBar.updateBar(1);
|
|
|
+ progressBar.close();
|
|
|
+ } catch (Exception e) {
|
|
|
+ throw new RuntimeException(e);
|
|
|
}
|
|
|
- } catch (Exception e) {
|
|
|
- throw new RuntimeException(e);
|
|
|
- }
|
|
|
+ }).start();
|
|
|
+
|
|
|
|
|
|
return scrollPane;
|
|
|
}
|
|
@@ -69,17 +86,33 @@ public class LevelSelectScreen {
|
|
|
|
|
|
pane.setOnMouseClicked(mouseEvent -> {
|
|
|
if (selected == index) {
|
|
|
- log.info("Launched level {}", level.getName());
|
|
|
- MainWindow.open(Main.getStage());
|
|
|
+ loadLevel(level);
|
|
|
}
|
|
|
selected = index;
|
|
|
for (Node node : pane.getParent().getChildrenUnmodifiable()) {
|
|
|
- ((Pane) node).setBackground(new Background(new BackgroundFill(new Color(1, 1, 1, 1), new CornerRadii(10), Insets.EMPTY)));
|
|
|
+ ((Pane) node).setBackground(new Background(new BackgroundFill(new Color(1, 1, 1, 1), new CornerRadii(0), Insets.EMPTY)));
|
|
|
}
|
|
|
- pane.setBackground(new Background(new BackgroundFill(new Color(0.8, 0.8, 0.8, 0.5), new CornerRadii(10), Insets.EMPTY)));
|
|
|
- System.out.println(level.getName());
|
|
|
+ pane.setBackground(new Background(new BackgroundFill(new Color(0.8, 0.8, 0.8, 0.5), new CornerRadii(0), Insets.EMPTY)));
|
|
|
});
|
|
|
|
|
|
return pane;
|
|
|
}
|
|
|
+
|
|
|
+ public static void loadLevel(Level level) {
|
|
|
+ UIProgressBar progressBar = new UIProgressBar();
|
|
|
+ progressBar.openNow("Loading level '" + level.getName() + "'...");
|
|
|
+ progressBar.updateBar(0.5);
|
|
|
+ log.info("Launched level {}", level.getName());
|
|
|
+ new Thread(() -> {
|
|
|
+ Utils.safeSleep(50);
|
|
|
+ Platform.runLater(() -> {
|
|
|
+ MainWindow.open(Main.getStage(), level);
|
|
|
+ progressBar.updateBar(1);
|
|
|
+ Platform.runLater(() -> {
|
|
|
+ Utils.safeSleep(500);
|
|
|
+ progressBar.close();
|
|
|
+ });
|
|
|
+ });
|
|
|
+ }).start();
|
|
|
+ }
|
|
|
}
|