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 /src | |
| parent | 61e39d0181a097bc70f3a0630d642eaf11da9eb1 (diff) | |
| download | NPEhero-3e6e29892c13115d528cf6109e1600f93e2d873e.tar.gz NPEhero-3e6e29892c13115d528cf6109e1600f93e2d873e.tar.bz2 NPEhero-3e6e29892c13115d528cf6109e1600f93e2d873e.zip | |
Splash screen
Diffstat (limited to 'src')
| -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) { | 
