diff options
Diffstat (limited to '')
7 files changed, 132 insertions, 136 deletions
diff --git a/src/main/java/net/sowgro/npehero/editor/DiffEditor.java b/src/main/java/net/sowgro/npehero/editor/DiffEditor.java index 75e687a..2b67013 100755 --- a/src/main/java/net/sowgro/npehero/editor/DiffEditor.java +++ b/src/main/java/net/sowgro/npehero/editor/DiffEditor.java @@ -67,7 +67,7 @@ public class DiffEditor extends Page          VBox options = new VBox(folderNameLabel, folderName, titleLabel, titleEntry, scoresLabel, clearScores, playLabel, playLevel);          options.setSpacing(10);  //        options.getStyleClass().add("box"); -        options.setPadding(new Insets(5)); +//        options.setPadding(new Insets(5));          ScrollPane optionsScroll = new ScrollPane(options); @@ -136,19 +136,19 @@ public class DiffEditor extends Page          VBox left = new VBox();          left.getChildren().addAll(/*optionsLabel, */optionsScroll);          options.setSpacing(10); -        optionsScroll.setPrefWidth(500); +        optionsScroll.setPrefWidth(350);          optionsScroll.getStyleClass().remove("scroll-pane"); -        optionsScroll.getStyleClass().add("box"); +//        optionsScroll.getStyleClass().add("box");          optionsScroll.setFitToWidth(true); -        optionsScroll.setPadding(new Insets(5)); +//        optionsScroll.setPadding(new Insets(5));  //        optionsft.setPrefHeight();          HBox main = new HBox();          main.getChildren().addAll(left, notePreview);          main.setSpacing(10); -        main.prefHeightProperty().bind(content.heightProperty().multiply(0.75)); +//        main.prefHeightProperty().bind(content.heightProperty().multiply(0.75));          main.maxWidthProperty().bind(content.widthProperty().multiply(0.95)); -        optionsScroll.prefHeightProperty().bind(main.heightProperty()); +//        optionsScroll.prefHeightProperty().bind(main.heightProperty());          Button exit = new Button();          exit.setText("Back"); diff --git a/src/main/java/net/sowgro/npehero/editor/LevelEditor.java b/src/main/java/net/sowgro/npehero/editor/LevelEditor.java index a39911e..0578d31 100755 --- a/src/main/java/net/sowgro/npehero/editor/LevelEditor.java +++ b/src/main/java/net/sowgro/npehero/editor/LevelEditor.java @@ -1,10 +1,8 @@  package net.sowgro.npehero.editor; -import java.io.File;  import java.io.IOException;  import javafx.beans.property.ReadOnlyStringWrapper; -import javafx.geometry.Insets;  import javafx.geometry.Pos;  import javafx.scene.control.*;  import javafx.scene.layout.*; @@ -201,14 +199,14 @@ public class LevelEditor extends Page                  songLabel, b1, previewLabel, b2, backgroundLabel, b3, colorsLabel, colorPickerBox/*, new Separator(Orientation.HORIZONTAL), save*/);          optionsBox.setSpacing(10);  //        left.setPrefWidth(300); -        optionsBox.setPadding(new Insets(5)); +//        optionsBox.setPadding(new Insets(5));          ScrollPane leftScroll = new ScrollPane(optionsBox);          leftScroll.getStyleClass().remove("scroll-pane"); -        leftScroll.getStyleClass().add("box"); -        leftScroll.setPadding(new Insets(5)); +//        leftScroll.getStyleClass().add("box"); +//        leftScroll.setPadding(new Insets(5));          leftScroll.setFitToWidth(true); -        leftScroll.setPrefWidth(500); +        leftScroll.setPrefWidth(400);  //        VBox center = new VBox();  //        center.setSpacing(10); @@ -261,7 +259,6 @@ public class LevelEditor extends Page      @Override      public void onLeave() { -        Sound.playSfx(Sound.FORWARD);          level.title = titleEntry.getText();          level.artist = artistEntry.getText();          level.desc = descEntry.getText(); diff --git a/src/main/java/net/sowgro/npehero/editor/NotesEditor2.java b/src/main/java/net/sowgro/npehero/editor/NotesEditor2.java index 6c45865..50bfbcb 100644 --- a/src/main/java/net/sowgro/npehero/editor/NotesEditor2.java +++ b/src/main/java/net/sowgro/npehero/editor/NotesEditor2.java @@ -11,13 +11,11 @@ import javafx.collections.FXCollections;  import javafx.collections.ListChangeListener;  import javafx.geometry.Insets;  import javafx.geometry.Pos; +import javafx.scene.Node;  import javafx.scene.control.*;  import javafx.scene.input.KeyCode;  import javafx.scene.input.KeyEvent; -import javafx.scene.layout.HBox; -import javafx.scene.layout.Pane; -import javafx.scene.layout.StackPane; -import javafx.scene.layout.VBox; +import javafx.scene.layout.*;  import javafx.scene.media.MediaPlayer;  import javafx.scene.paint.Color;  import javafx.scene.shape.Line; @@ -32,9 +30,11 @@ import net.sowgro.npehero.main.*;  import net.sowgro.npehero.main.Control;  import java.io.IOException; +import java.util.Set;  import java.util.concurrent.atomic.AtomicInteger;  public class NotesEditor2 extends Page { +    private final DoubleBinding scaleBind;      Difficulty diff;      ScrollPane scroll = new ScrollPane();      Pane[] lanes; @@ -101,6 +101,7 @@ public class NotesEditor2 extends Page {          Pane playheadLane = new Pane();          playheadLane.setOnMouseClicked(e -> {              m.seek(new Duration(screenPosToSecond(e.getY()) * 1000)); +//            System.out.println("dbg: "+e.getY());          });          this.playhead = new Polygon(); @@ -149,19 +150,39 @@ public class NotesEditor2 extends Page {          endLine.setEndY(0);          endLine.setStroke(Color.RED); +        HBox main = new HBox(); +          Pane contentOverlay = new Pane(playheadLine, endLine);          contentOverlay.setPickOnBounds(false);          StackPane stackPane = new StackPane();          stackPane.getChildren().addAll(scrollContent, contentOverlay); +//        var contentHeight = content.heightProperty().multiply(0.75); +        BorderPane scrollHolder = new BorderPane(scroll);          scroll.setContent(stackPane); -        scroll.prefHeightProperty().bind(content.heightProperty().multiply(0.75)); -        scroll.prefWidthProperty().bind(scroll.heightProperty().multiply(0.72)); -        scroll.minWidthProperty().bind(scroll.heightProperty().multiply(0.72)); +//        scroll.prefHeightProperty().bind(content.heightProperty().multiply(0.75)); +        final int SCROLLPORT_NATIVE_HEIGHT = 864; +        scroll.setMinHeight(SCROLLPORT_NATIVE_HEIGHT); +        scroll.setMinWidth(SCROLLPORT_NATIVE_HEIGHT * 0.72); +        scroll.setMaxHeight(SCROLLPORT_NATIVE_HEIGHT); +        scroll.setMaxWidth(SCROLLPORT_NATIVE_HEIGHT * 0.72); +        scaleBind = scrollHolder.heightProperty().divide(SCROLLPORT_NATIVE_HEIGHT); +        scroll.scaleXProperty().bind(scaleBind); +        scroll.scaleYProperty().bind(scaleBind); +//        scroll.prefWidthProperty().bind(scroll.heightProperty().multiply(0.72)); +//        scroll.minWidthProperty().bind(scroll.heightProperty().multiply(0.72));          scroll.getStyleClass().remove("scroll-pane");          scroll.getStyleClass().add("box");          scroll.setPadding(new Insets(5)); +//        scaleBind.addListener((_, _, v) -> { +//            scroll.setStyle("-fx-font-size: " + (1/v.doubleValue()) * 10); +//        }); + +        scrollHolder.minHeightProperty().bind(main.prefHeightProperty()); +        scrollHolder.minWidthProperty() .bind(main.prefHeightProperty().multiply(0.72)); +        scrollHolder.maxHeightProperty().bind(main.prefHeightProperty()); +        scrollHolder.maxWidthProperty() .bind(main.prefHeightProperty().multiply(0.72));          Pane helpBox = new Pane(); @@ -169,9 +190,10 @@ public class NotesEditor2 extends Page {          actionScroll.getStyleClass().remove("scroll-pane");          actionScroll.prefWidthProperty().bind(actionBox.widthProperty().add(20)); -        HBox main = new HBox(); -        main.getChildren().addAll(scroll, actionScroll, helpBox); +        main.getChildren().addAll(scrollHolder, actionScroll, helpBox);          main.setSpacing(10); +        main.maxWidthProperty().bind(content.widthProperty().multiply(0.95)); +        main.prefHeightProperty().bind(content.prefHeightProperty().multiply(0.80));          Button exit = new Button();          exit.setText("Cancel"); @@ -234,11 +256,17 @@ public class NotesEditor2 extends Page {          // Draw and update ruler          AtomicInteger lastRuler = new AtomicInteger(-1);          scrollContent.heightProperty().addListener(_ -> { -            int ruler1 = (int) screenPosToSecond(scrollContent.getHeight()); +            int ruler1 = (int) (screenPosToSecond(scrollContent.getHeight()) * 10);              for (int i = lastRuler.get() + 1; i <= ruler1; i++) { -                Label l = new Label(toMinAndSec(i)+" -"); -                l.layoutYProperty().bind(secondToScreenPos(i)); -                l.setTextFill(Color.WHITE); +                Label l= new Label(); +                if (i % 10 == 0) { +                    l.setText(toMinAndSec(i / 10) + " - "); +                } +                else { +                    l.setText("-"); +                    l.getStyleClass().add("gray"); +                } +                l.layoutYProperty().bind(secondToScreenPos(i / 10.0));                  rulerLane.getChildren().add(l);              }              lastRuler.set(ruler1); @@ -392,6 +420,12 @@ public class NotesEditor2 extends Page {      @Override      public void onView() { +        var sb = getScrollBar(scroll); +        if (sb != null) { +            sb.prefWidthProperty().bind(scaleBind.multiply(1 / 17.0)); +        } else { +            System.out.println("No scrollbar :("); +        }          Sound.stopSong();          m.play();          m.pause(); @@ -407,26 +441,34 @@ public class NotesEditor2 extends Page {      private Block drawBlock(Note n) {          Color color = diff.level.colors[n.lane];          Block b = new Block(color, false, n); -        var sizeBind = scroll.widthProperty().divide(8); +//        var sizeBind = scroll.widthProperty().divide(8); +//        b.heightProperty().bind(sizeBind); +//        b.widthProperty().bind(sizeBind); +//        var arcBind = scroll.widthProperty().divide(30); +//        b.arcHeightProperty().bind(arcBind); +//        b.arcWidthProperty().bind(arcBind); +        var sizeBind = scroll.heightProperty().multiply(87/1080.0);          b.heightProperty().bind(sizeBind);          b.widthProperty().bind(sizeBind); -        var arcBind = scroll.widthProperty().divide(30); +        var arcBind = scroll.heightProperty().multiply(20/1080.0);          b.arcHeightProperty().bind(arcBind);          b.arcWidthProperty().bind(arcBind); -        b.strokeWidthProperty().bind(scroll.widthProperty().divide(120)); +        b.strokeWidthProperty().bind(scroll.heightProperty().multiply(5/1080.0));          b.layoutYProperty().bind(secondToScreenPos(n.time.add(0)));          b.setOnMouseClicked(_ -> {              if (selectedNotes.contains(b)) { -                selectedNotes.remove(b); -//                b.setStroke(Color.TRANSPARENT); +                if (selectMultiple.isSelected() || selectedNotes.size() == 1) { +                    selectedNotes.remove(b); +                } else { +                    selectedNotes.clear(); +                    selectedNotes.add(b); +                }              }              else {                  if (!selectMultiple.isSelected()) { -//                    selectedNotes.forEach(e -> e.setStroke(Color.TRANSPARENT));                      selectedNotes.clear();                  }                  selectedNotes.add(b); -//                b.setStroke(Color.WHITE);              }          });          return b; @@ -519,4 +561,14 @@ public class NotesEditor2 extends Page {          target.rect.setStrokeWidth(3);          return target;      } + +    private ScrollBar getScrollBar(ScrollPane s) { +        Set<Node> nodes = s.lookupAll(".scroll-bar"); +        for (final Node node : nodes) { +            if (node instanceof ScrollBar sb) { +                return sb; +            } +        } +        return null; +    }  } diff --git a/src/main/java/net/sowgro/npehero/gameplay/ScoreController.java b/src/main/java/net/sowgro/npehero/gameplay/ScoreController.java index 4c603c1..a03bab6 100755 --- a/src/main/java/net/sowgro/npehero/gameplay/ScoreController.java +++ b/src/main/java/net/sowgro/npehero/gameplay/ScoreController.java @@ -1,115 +1,43 @@  package net.sowgro.npehero.gameplay; -import javafx.beans.property.SimpleStringProperty; -import javafx.beans.property.StringProperty; -import net.sowgro.npehero.main.Sound; +import javafx.beans.property.IntegerProperty; +import javafx.beans.property.SimpleIntegerProperty; -public class ScoreController{ +public class ScoreController { -    private int score = 0; -    private int combo = 0; -    private int comboMultiplier=1; -    public StringProperty scoreProperty = new SimpleStringProperty("0"); -    public StringProperty comboProperty = new SimpleStringProperty("0"); +    public IntegerProperty combo = new SimpleIntegerProperty(0); +    public IntegerProperty comboMultiplier = new SimpleIntegerProperty(1); +    public IntegerProperty score = new SimpleIntegerProperty(0); + +    public ScoreController() { +        combo.addListener((_, _, _) -> { +            if      (combo.get() >= 30) { comboMultiplier.set(4); } +            else if (combo.get() >= 20) { comboMultiplier.set(3); } +            else if (combo.get() >= 10) { comboMultiplier.set(2); } +            else                        { comboMultiplier.set(1); } +        }); +    }      /**       * Called when the user performs a perfect hit       */      public void perfect() { -        combo(); -        score += 300*comboMultiplier; -        scoreProperty.setValue(score+""); -        comboProperty.setValue(combo +""); -        // System.out.println("Perfect!"); +        combo.set(combo.get() + 1); +        score.set(score.get() + 300 * comboMultiplier.get());      }      /**       * called when the user performs an okay hit       */      public void good() { -        combo(); -        score += 100*comboMultiplier; -        scoreProperty.setValue(score+""); -        comboProperty.setValue(combo+""); -        // System.out.println("Good"); +        combo.set(combo.get() + 1); +        score.set(score.get() + 100 * comboMultiplier.get());      }      /**       * Called when the user misses a note       */      public void miss() { -        Sound.playSfx(Sound.MISS); -        combo = 0; -        comboMultiplier = 1; -        scoreProperty.setValue(score+""); -        comboProperty.setValue(combo+""); -        // System.out.println("Miss"); -    } - -    /** -     * Increments the combo by one -     */ -    private void combo() { -        Sound.playSfx(Sound.HIT); -        combo++; -         -        if (combo == 2) { -            comboMultiplier = 2; -        } -         -        if (combo == 4) { -            comboMultiplier = 4; -        } -         -        if (combo == 8) { -            comboMultiplier = 8; -        } -    } - -    /** -     * @return current score -     */ -    public int getScore() -    { -        return score; -    } - -    /** -     * @return current combo -     */ -    public int getCombo() -    { -        return combo; -    } - -    /** -     * @param newScore: the score to be set, only used in debug -     */ -    public void setScore(int newScore) -    { -        score = newScore; -        scoreProperty.setValue(newScore+""); -    } - -    /** -     * @param newCombo: the combo to be set, only used in debug -     */ -    public void setCombo(int newCombo) -    { -        combo = newCombo; -        comboProperty.setValue(newCombo+""); -    } - -    /** -     * prints values into console -     */ -    public void print() -    { -        System.out.println("--"); -        System.out.println(combo); -        System.out.println(score); -        System.out.println(""); -        System.out.println(scoreProperty); -        System.out.println(comboProperty); +        combo.set(0);      }  } diff --git a/src/main/java/net/sowgro/npehero/gameplay/SongPlayer.java b/src/main/java/net/sowgro/npehero/gameplay/SongPlayer.java index f3abf91..22dea09 100755 --- a/src/main/java/net/sowgro/npehero/gameplay/SongPlayer.java +++ b/src/main/java/net/sowgro/npehero/gameplay/SongPlayer.java @@ -80,7 +80,7 @@ public class SongPlayer extends HBox {          }));          // schedule the game over screen to show at the end          timeline.getKeyFrames().add(new KeyFrame(Duration.seconds(songLength + FALL_TIME + START_DELAY), _ -> { -            Driver.setMenu(new GameOver(level, diff, prev, scoreCounter.getScore())); +            Driver.setMenu(new GameOver(level, diff, prev, scoreCounter));              cancel();          })); @@ -89,12 +89,13 @@ public class SongPlayer extends HBox {              for (int i = 0; i < lanes.length; i++) {                  if (e.getCode() == Control.lanes[i].getKey()) {                      checkNote(lanes[i]); +                    e.consume();                  }              }              if (e.getCode() == Control.LEGACY_PRINT.getKey()) {                  System.out.println("" + timeline.getCurrentTime()); +                e.consume();              } -            e.consume();          };          Driver.primaryStage.addEventFilter(KeyEvent.KEY_PRESSED, eventHandler); @@ -142,6 +143,7 @@ public class SongPlayer extends HBox {          anim.setOnFinished(_ -> {              if (lane.pane.getChildren().remove(block) && !done) {                  scoreCounter.miss(); +                Sound.playSfx(Sound.MISS);                  FillTransition ft = new FillTransition(Duration.millis(500), lane.target.rect);                  ft.setFromValue(Color.RED);                  ft.setToValue(lane.target.getFillColor()); @@ -236,17 +238,20 @@ public class SongPlayer extends HBox {                  ft.setFromValue(Color.WHITE);                  ft.play();                  scoreCounter.perfect(); +                Sound.playSfx(Sound.HIT);                  return 2;              }              if (distance < super.getHeight() / 4) {                  ft.setFromValue(Color.CYAN);                  ft.play();                  scoreCounter.good(); +                Sound.playSfx(Sound.HIT);                  return 1;              }              ft.setFromValue(Color.RED);              ft.play();              scoreCounter.miss(); +            Sound.playSfx(Sound.MISS);              return 0;          }          return -1; diff --git a/src/main/java/net/sowgro/npehero/gui/GameOver.java b/src/main/java/net/sowgro/npehero/gui/GameOver.java index 3b3c8bb..bcdd25e 100755 --- a/src/main/java/net/sowgro/npehero/gui/GameOver.java +++ b/src/main/java/net/sowgro/npehero/gui/GameOver.java @@ -3,6 +3,7 @@ package net.sowgro.npehero.gui;  import javafx.geometry.Insets;  import javafx.geometry.Pos;  import javafx.scene.control.Button; +import javafx.scene.control.Label;  import javafx.scene.control.TextField;  import javafx.scene.layout.BorderPane;  import javafx.scene.layout.HBox; @@ -10,6 +11,7 @@ import javafx.scene.layout.Pane;  import javafx.scene.layout.VBox;  import javafx.scene.text.Text;  import net.sowgro.npehero.Driver; +import net.sowgro.npehero.gameplay.ScoreController;  import net.sowgro.npehero.main.ErrorDisplay;  import net.sowgro.npehero.levelapi.Difficulty;  import net.sowgro.npehero.levelapi.Level; @@ -22,7 +24,7 @@ public class GameOver extends Page  {      HBox content = new HBox(); -    public GameOver(Level level, Difficulty diff, Page prev, int score2) +    public GameOver(Level level, Difficulty diff, Page prev, ScoreController score2)      {          Text topText = new Text();          topText.setText("Level Complete"); @@ -45,15 +47,21 @@ public class GameOver extends Page          Text scoreLabel = new Text();          scoreLabel.setText("Final score");          scoreLabel.getStyleClass().add("t3"); +        Label maxScoreLabel = new Label("Max possible score"); +        ScoreController maxScoreController = new ScoreController(); +        for (int i = 0; i < diff.notes.list.size(); i++) { +            maxScoreController.perfect(); +        } +        Label maxScore = new Label(maxScoreController.score.get() + "");          Text score = new Text(); -        score.setText(score2+""); +        score.setText(score2.score.get()+"");          score.getStyleClass().add("t2");          score.setStyle("-fx-font-size: 30;");          VBox scoreBox = new VBox();          scoreBox.getStyleClass().add("box"); -        scoreBox.getChildren().addAll(scoreLabel,score); +        scoreBox.getChildren().addAll(scoreLabel,score, maxScoreLabel, maxScore);          scoreBox.setPadding(new Insets(5)); @@ -71,7 +79,7 @@ public class GameOver extends Page              save.setDisable(true);              name.setDisable(true);              try { -                diff.leaderboard.add(name.getText(), score2); +                diff.leaderboard.add(name.getText(), score2.score.get());              } catch (IOException e) {                  Driver.setMenu(new ErrorDisplay("Failed to save score to leaderboard", e, this));              } @@ -110,6 +118,7 @@ public class GameOver extends Page          centerBox.getChildren().addAll(topText,levelDetailsBox,scoreBox,nameBox,buttonBox);          centerBox.setSpacing(10);          centerBox.setAlignment(Pos.CENTER); +        centerBox.setMaxWidth(300);          content.getChildren().add(centerBox);          content.setAlignment(Pos.CENTER); diff --git a/src/main/java/net/sowgro/npehero/gui/LevelSurround.java b/src/main/java/net/sowgro/npehero/gui/LevelSurround.java index 56bb560..f4d46a3 100755 --- a/src/main/java/net/sowgro/npehero/gui/LevelSurround.java +++ b/src/main/java/net/sowgro/npehero/gui/LevelSurround.java @@ -1,6 +1,7 @@  package net.sowgro.npehero.gui;  import javafx.animation.AnimationTimer; +import javafx.scene.control.Label;  import javafx.scene.layout.*;  import net.sowgro.npehero.Driver;  import net.sowgro.npehero.gameplay.SongPlayer; @@ -63,7 +64,7 @@ public class LevelSurround extends Page          scoreLabel.getStyleClass().add("t3");          Text scoreDisplay = new Text(); -        scoreDisplay.textProperty().bind(sc.scoreProperty); +        scoreDisplay.textProperty().bind(sc.score.asString());          scoreDisplay.getStyleClass().add("t1");          VBox scoreTextBox = new VBox(); @@ -84,12 +85,16 @@ public class LevelSurround extends Page          comboLabel.getStyleClass().add("t3");          Text comboDisplay = new Text(); -        comboDisplay.textProperty().bind(sc.comboProperty); +        comboDisplay.textProperty().bind(sc.combo.asString());          comboDisplay.getStyleClass().add("t1"); +        Label comboMultiplier = new Label(); +        comboMultiplier.getStyleClass().add("gray"); +        comboMultiplier.textProperty().bind(sc.comboMultiplier.asString().concat("x score multiplier")); +          VBox comboTextBox = new VBox();          comboTextBox.setAlignment(Pos.BOTTOM_RIGHT); -        comboTextBox.getChildren().addAll(comboLabel,comboDisplay); +        comboTextBox.getChildren().addAll(comboLabel,comboDisplay, comboMultiplier);          comboTextBox.setPadding(new Insets(10));          comboTextBox.getStyleClass().add("box");          comboTextBox.minWidthProperty().bind(comboTextBox.heightProperty()); @@ -117,10 +122,10 @@ public class LevelSurround extends Page          var widthBind = content.widthProperty().subtract(gameHolder.widthProperty()).divide(2);          scoreBox.prefWidthProperty().bind(widthBind); -        scoreBox.prefWidthProperty().bind(widthBind); +        comboBox.prefWidthProperty().bind(widthBind);          HBox centerBox = new HBox(); -        HBox.setHgrow(gameHolder, Priority.NEVER); +//        HBox.setHgrow(gameHolder, Priority.NEVER);          centerBox.getChildren().addAll(comboBox, gameHolder, scoreBox);          centerBox.setAlignment(Pos.BOTTOM_CENTER);  | 
