diff options
Diffstat (limited to 'src/main/java/net/sowgro')
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); |