aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsowgro <tpoke.ferrari@gmail.com>2024-09-29 22:41:30 -0400
committersowgro <tpoke.ferrari@gmail.com>2024-09-29 22:41:30 -0400
commit3e6e29892c13115d528cf6109e1600f93e2d873e (patch)
treeb6d338172e1e7d6e105ae4ec586f9e85aaae3210
parent61e39d0181a097bc70f3a0630d642eaf11da9eb1 (diff)
downloadNPEhero-3e6e29892c13115d528cf6109e1600f93e2d873e.tar.gz
NPEhero-3e6e29892c13115d528cf6109e1600f93e2d873e.tar.bz2
NPEhero-3e6e29892c13115d528cf6109e1600f93e2d873e.zip
Splash screen
-rwxr-xr-xsrc/main/java/net/sowgro/npehero/Driver.java176
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) {