diff options
author | sowgro <tpoke.ferrari@gmail.com> | 2024-09-29 22:41:30 -0400 |
---|---|---|
committer | sowgro <tpoke.ferrari@gmail.com> | 2024-09-29 22:41:30 -0400 |
commit | 3e6e29892c13115d528cf6109e1600f93e2d873e (patch) | |
tree | b6d338172e1e7d6e105ae4ec586f9e85aaae3210 | |
parent | 61e39d0181a097bc70f3a0630d642eaf11da9eb1 (diff) | |
download | NPEhero-3e6e29892c13115d528cf6109e1600f93e2d873e.tar.gz NPEhero-3e6e29892c13115d528cf6109e1600f93e2d873e.tar.bz2 NPEhero-3e6e29892c13115d528cf6109e1600f93e2d873e.zip |
Splash screen
-rwxr-xr-x | src/main/java/net/sowgro/npehero/Driver.java | 176 |
1 files changed, 109 insertions, 67 deletions
diff --git a/src/main/java/net/sowgro/npehero/Driver.java b/src/main/java/net/sowgro/npehero/Driver.java index 3be414c..8725a5a 100755 --- a/src/main/java/net/sowgro/npehero/Driver.java +++ b/src/main/java/net/sowgro/npehero/Driver.java @@ -2,15 +2,31 @@ package net.sowgro.npehero; import javafx.animation.*; import javafx.application.Application; +import javafx.beans.property.ReadOnlyObjectProperty; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import javafx.concurrent.Task; +import javafx.concurrent.Worker; +import javafx.geometry.Insets; +import javafx.geometry.Pos; +import javafx.geometry.Rectangle2D; import javafx.scene.Scene; +import javafx.scene.control.Label; +import javafx.scene.control.ListView; +import javafx.scene.control.ProgressBar; import javafx.scene.control.ScrollPane; +import javafx.scene.effect.DropShadow; import javafx.scene.image.Image; import javafx.scene.image.ImageView; import javafx.scene.input.KeyCode; import javafx.scene.input.KeyCombination; import javafx.scene.input.KeyEvent; import javafx.scene.layout.*; +import javafx.scene.paint.Color; +import javafx.scene.text.Text; +import javafx.stage.Screen; import javafx.stage.Stage; +import javafx.stage.StageStyle; import javafx.util.Duration; import net.sowgro.npehero.main.ErrorDisplay; import net.sowgro.npehero.levelapi.Levels; @@ -41,92 +57,118 @@ public class Driver extends Application public static void main(String[] args) { launch(args); } - + /* * sets up game windows and starts controllers * (automatically called by javafx on start) */ @Override - public void start(Stage newPrimaryStage) { + public void start(Stage initStage) { + Label npehero = new Label("NPEHero"); + Label loading = new Label("Please Wait... "); + VBox splashBox = new VBox(npehero, loading); + splashBox.setPadding(new Insets(30)); + Scene splashScene = new Scene(splashBox); + initStage.setScene(splashScene); + initStage.initStyle(StageStyle.UNDECORATED); + initStage.show(); + + Stack<String> errors = new Stack<>(); + Task<Void> task = new Task<>() { + @Override + protected Void call() { + System.out.println("Loading .npehero..."); + this.updateMessage("Loading .npehero..."); + try { + if (!BASE_DIR.exists() && !BASE_DIR.mkdir()) { + throw new IOException(); + } + if (!BASE_DIR.isDirectory()) { + throw new IOException(); + } + } catch (Exception e) { + errors.push("Failed to locate .npehero\n" + e); + } + System.out.println("Loading settings..."); + this.updateMessage("Loading settings..."); + try { + Settings.read(); + System.out.println("Settings loaded"); + } catch (Exception e) { + errors.push("Failed to load settings from file\n" + e); + } + System.out.println("Loading controls..."); + this.updateMessage("Loading controls..."); + try { + Control.readFromFile(); + System.out.println("Controls loaded"); + } catch (Exception e) { + errors.push("Failed to load controls from file\n" + e); + } + System.out.println("Loading levels..."); + this.updateMessage("Loading levels..."); + try { + Levels.readData(); + System.out.println("Loaded " + Levels.list.size() + " levels (" + Levels.getValidList().size() + " valid)"); + } catch (IOException e) { + errors.push("Failed to load levels\n"); + } + return null; + } + }; - primaryStage = newPrimaryStage; + task.setOnSucceeded(_ -> { + initStage.close(); - primaryPane.setHbarPolicy(ScrollPane.ScrollBarPolicy.NEVER); + Page last = new MainMenu(); + while (!errors.empty()) { + last = new ErrorDisplay(errors.pop(), last); + } + Driver.setMenu(last); + + primaryStage = new Stage(); - StackPane root = new StackPane(backgroundImage2, backgroundImage, primaryPane); - Scene primaryScene = new Scene(root, 800,600); + primaryPane.setHbarPolicy(ScrollPane.ScrollBarPolicy.NEVER); - primaryPane.scaleXProperty().bind(Settings.guiScale); - primaryPane.scaleYProperty().bind(Settings.guiScale); - primaryPane.minHeightProperty().bind(root.heightProperty().divide(Settings.guiScale)); - primaryPane.minWidthProperty() .bind(root.widthProperty() .divide(Settings.guiScale)); - primaryPane.maxHeightProperty().bind(root.heightProperty().divide(Settings.guiScale)); - primaryPane.maxWidthProperty() .bind(root.widthProperty() .divide(Settings.guiScale)); + StackPane root = new StackPane(backgroundImage2, backgroundImage, primaryPane); + Scene primaryScene = new Scene(root, 800,600); + + primaryPane.scaleXProperty().bind(Settings.guiScale); + primaryPane.scaleYProperty().bind(Settings.guiScale); + primaryPane.minHeightProperty().bind(root.heightProperty().divide(Settings.guiScale)); + primaryPane.minWidthProperty() .bind(root.widthProperty() .divide(Settings.guiScale)); + primaryPane.maxHeightProperty().bind(root.heightProperty().divide(Settings.guiScale)); + primaryPane.maxWidthProperty() .bind(root.widthProperty() .divide(Settings.guiScale)); // Cant figure out how to center this - backgroundImage.fitHeightProperty().bind(primaryScene.heightProperty()); - backgroundImage2.fitHeightProperty().bind(primaryScene.heightProperty()); - backgroundImage.setPreserveRatio(true); - backgroundImage2.setPreserveRatio(true); + backgroundImage.fitHeightProperty().bind(primaryScene.heightProperty()); + backgroundImage2.fitHeightProperty().bind(primaryScene.heightProperty()); + backgroundImage.setPreserveRatio(true); + backgroundImage2.setPreserveRatio(true); - primaryScene.getStylesheets().add(getClass().getResource("style.css").toExternalForm()); + primaryScene.getStylesheets().add(getClass().getResource("style.css").toExternalForm()); - primaryStage.setScene(primaryScene); - primaryStage.setTitle("NPE Hero"); + primaryStage.setScene(primaryScene); + primaryStage.setTitle("NPE Hero"); - primaryPane.getStyleClass().remove("scroll-pane"); + primaryPane.getStyleClass().remove("scroll-pane"); - setMenuBackground(); + setMenuBackground(); - Sound.playSong(Sound.MENU_SONG); + Sound.playSong(Sound.MENU_SONG); - primaryStage.addEventHandler(KeyEvent.KEY_PRESSED, event -> { //full screen stuff - if (KeyCode.F11.equals(event.getCode())) { - primaryStage.setFullScreen(!primaryStage.isFullScreen()); - } + primaryStage.addEventHandler(KeyEvent.KEY_PRESSED, event -> { //full screen stuff + if (KeyCode.F11.equals(event.getCode())) { + primaryStage.setFullScreen(!primaryStage.isFullScreen()); + } + }); + primaryStage.setFullScreenExitKeyCombination(KeyCombination.NO_MATCH); + primaryStage.setFullScreenExitHint(""); + primaryStage.show(); }); - primaryStage.setFullScreenExitKeyCombination(KeyCombination.NO_MATCH); - primaryStage.setFullScreenExitHint(""); - primaryStage.show(); - Stack<String> errors = new Stack<>(); - System.out.println("Loading .npehero..."); - try { - if (!BASE_DIR.exists() && !BASE_DIR.mkdir()) { - throw new IOException(); - } - if (!BASE_DIR.isDirectory()) { - throw new IOException(); - } - } catch (Exception e) { - errors.push("Failed to locate .npehero\n"+e); - } - System.out.println("Loading settings..."); - try { - Settings.read(); - System.out.println("Settings loaded"); - } catch (Exception e) { - errors.push("Failed to load settings from file\n"+e); - } - System.out.println("Loading controls..."); - try { - Control.readFromFile(); - System.out.println("Controls loaded"); - } catch (Exception e) { - errors.push("Failed to load controls from file\n"+e); - } - System.out.println("Loading levels..."); - try { - Levels.readData(); - System.out.println("Loaded " + Levels.list.size() + " levels (" + Levels.getValidList().size() + " valid)"); - } catch (IOException e) { - errors.push("Failed to load levels\n"); - } - Page last = new MainMenu(); - while (!errors.empty()) { - last = new ErrorDisplay(errors.pop(), last); - } - Driver.setMenu(last); + loading.textProperty().bind(task.messageProperty()); + new Thread(task).start(); } public static void setMenu(Page p) { |