diff options
| author | sowgro <tpoke.ferrari@gmail.com> | 2024-09-01 16:24:25 -0400 | 
|---|---|---|
| committer | sowgro <tpoke.ferrari@gmail.com> | 2024-09-01 16:24:25 -0400 | 
| commit | ef46303949173cd67cf00a4f40d16f1375ed2250 (patch) | |
| tree | 721496396f728062de351caf207dffab342a1f25 /src | |
| parent | 1300b5eb7a86d72e920436de24b77004efe51af8 (diff) | |
| download | NPEhero-ef46303949173cd67cf00a4f40d16f1375ed2250.tar.gz NPEhero-ef46303949173cd67cf00a4f40d16f1375ed2250.tar.bz2 NPEhero-ef46303949173cd67cf00a4f40d16f1375ed2250.zip | |
Smooth scrolling in NotesEditor2
and other improvements
- select multiple checkbox
- make taget and block take less prams
- block sizing changes
- fix sort in LeaderboardView
Diffstat (limited to 'src')
9 files changed, 131 insertions, 101 deletions
| diff --git a/src/main/java/net/sowgro/npehero/editor/DiffEditor.java b/src/main/java/net/sowgro/npehero/editor/DiffEditor.java index d3ecdc4..9a4365d 100755 --- a/src/main/java/net/sowgro/npehero/editor/DiffEditor.java +++ b/src/main/java/net/sowgro/npehero/editor/DiffEditor.java @@ -171,11 +171,13 @@ public class DiffEditor extends Page      // Duplicates of NotesEditor2 methods, should be made generic and combined      private Block drawBlock(Note n) {          Color color = diff.level.colors[n.lane]; -        Block b = new Block(color,20, 20, 5, false, n); -        b.heightProperty().bind(scroll.widthProperty().divide(8)); -        b.widthProperty().bind(scroll.widthProperty().divide(8)); -        b.arcHeightProperty().bind(scroll.widthProperty().divide(25)); -        b.arcWidthProperty().bind(scroll.widthProperty().divide(25)); +        Block b = new Block(color, false, n); +        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);          b.strokeWidthProperty().bind(scroll.widthProperty().divide(120));          b.layoutYProperty().bind(secondToScreenPos(n.time.add(0)));          return b; diff --git a/src/main/java/net/sowgro/npehero/editor/DiffList.java b/src/main/java/net/sowgro/npehero/editor/DiffList.java index 7106609..acda994 100755 --- a/src/main/java/net/sowgro/npehero/editor/DiffList.java +++ b/src/main/java/net/sowgro/npehero/editor/DiffList.java @@ -36,7 +36,7 @@ public class DiffList extends Page          TableColumn<Difficulty,String> titleCol = new TableColumn<>("Name");          TableColumn<Difficulty,String> validCol = new TableColumn<>("Valid?"); -        titleCol.prefWidthProperty().bind(diffs.widthProperty().multiply(0.4)); +        titleCol.prefWidthProperty().bind(diffs.widthProperty().multiply(0.5));          validCol.prefWidthProperty().bind(diffs.widthProperty().multiply(0.4));          diffs.getColumns().add(titleCol); diff --git a/src/main/java/net/sowgro/npehero/editor/NotesEditor2.java b/src/main/java/net/sowgro/npehero/editor/NotesEditor2.java index f5b63e2..5ba7d88 100644 --- a/src/main/java/net/sowgro/npehero/editor/NotesEditor2.java +++ b/src/main/java/net/sowgro/npehero/editor/NotesEditor2.java @@ -1,5 +1,7 @@  package net.sowgro.npehero.editor; +import javafx.animation.Interpolator; +import javafx.animation.TranslateTransition;  import javafx.beans.binding.DoubleBinding;  import javafx.beans.property.DoubleProperty;  import javafx.beans.property.ListProperty; @@ -38,17 +40,19 @@ public class NotesEditor2 extends Page {      Pane[] lanes;      MediaPlayer m;      Polygon playhead; -    ListProperty<Block> activeNotes = new SimpleListProperty<>(FXCollections.observableArrayList()); +    ListProperty<Block> selectedNotes = new SimpleListProperty<>(FXCollections.observableArrayList());      ListProperty<Note> noteList;      DiffEditor prev;      DoubleProperty newEndTime = new SimpleDoubleProperty(0); +    CheckBox selectMultiple; -    private HBox content = new HBox(); +    private final HBox content = new HBox();      public NotesEditor2(Difficulty diff, DiffEditor prev) {          this.diff = diff;          noteList = diff.notes.deepCopyList();          m = new MediaPlayer(diff.level.song); +        m.volumeProperty().bind(Settings.musicVol);          this.prev = prev;          // Buttons @@ -62,9 +66,10 @@ public class NotesEditor2 extends Page {          actionBox.getChildren().addAll(noteLabel, addNote, delNote, moveNote);          Label selectionLabel = new Label("Selection"); +        selectMultiple       = new CheckBox("Select multiple");          Button selectAll     = new Button("Select All");          Button clearSelect   = new Button("Clear"); -        actionBox.getChildren().addAll(selectionLabel, selectAll, clearSelect); +        actionBox.getChildren().addAll(selectionLabel, selectMultiple, selectAll, clearSelect);          Label playbackLabel     = new Label("Playback");          ToggleButton play       = new ToggleButton("Play"); @@ -73,9 +78,9 @@ public class NotesEditor2 extends Page {          Button setEnd         = new Button("End Here");          actionBox.getChildren().addAll(playbackLabel, play, reset, scrollLock, setEnd); -        delNote.disableProperty().bind(activeNotes.emptyProperty()); -        moveNote.disableProperty().bind(activeNotes.emptyProperty()); -        clearSelect.disableProperty().bind(activeNotes.emptyProperty()); +        delNote.disableProperty().bind(selectedNotes.emptyProperty()); +        moveNote.disableProperty().bind(selectedNotes.emptyProperty()); +        clearSelect.disableProperty().bind(selectedNotes.emptyProperty());          ToggleGroup tg = new ToggleGroup();          addNote.setToggleGroup(tg); @@ -108,11 +113,17 @@ public class NotesEditor2 extends Page {          );          playhead.setFill(Color.WHITE);          playheadLane.getChildren().add(playhead); +        // TODO  //        playhead.setOnMouseDragged(e -> {  //            scroll.get  //            playhead.layoutYProperty().bind(secondToScreenPos());  //        }); +        Block trailBlazer = new Block(Color.BLACK, false, null); +        trailBlazer.layoutYProperty().bind(playhead.translateYProperty().add(scroll.heightProperty().divide(2))); +        trailBlazer.setVisible(false); +        playheadLane.getChildren().add(trailBlazer); +          HBox scrollContent = new HBox();          scrollContent.setAlignment(Pos.CENTER);          scrollContent.setSpacing(10); @@ -125,7 +136,11 @@ public class NotesEditor2 extends Page {          playheadLine.setStartY(0);          playheadLine.setEndY(0);          playheadLine.setStroke(Color.WHITE); -        playheadLine.layoutYProperty().bind(playhead.layoutYProperty()); +        playheadLine.layoutYProperty().bind(playhead.translateYProperty()); +//        playheadLine.layoutYProperty().bind(secondToScreenPos(m.getCurrentTime().toSeconds())); +//        m.currentTimeProperty().addListener((_, _, _) -> { +//            playheadLine.layoutYProperty().bind(secondToScreenPos(m.getCurrentTime().toSeconds())); +//        });          Line endLine = new Line();          endLine.setStartX(0); @@ -141,10 +156,9 @@ public class NotesEditor2 extends Page {          stackPane.getChildren().addAll(scrollContent, contentOverlay);          scroll.setContent(stackPane); -//        scroll.prefWidthProperty().bind(super.prefWidthProperty().multiply(0.35)); -//        scroll.setMinWidth(400);          scroll.prefHeightProperty().bind(content.heightProperty().multiply(0.75)); -        scroll.prefWidthProperty().bind(scroll.prefHeightProperty().multiply(0.70)); +        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)); @@ -176,8 +190,9 @@ public class NotesEditor2 extends Page {              diff.endTime = newEndTime.get();              diff.bpm = 0.0;              try { -                diff.readMetadata(); +                diff.writeMetadata();              } catch (IOException e) { +                e.printStackTrace();                  // TODO              }              Sound.playSfx(Sound.BACKWARD); @@ -236,24 +251,31 @@ public class NotesEditor2 extends Page {          // write notes on key press          content.addEventFilter(KeyEvent.KEY_PRESSED, e -> {              KeyCode k = e.getCode(); -            if (k == Control.LANE0.getKey())           { WriteNote(0); } -            if (k == Control.LANE1.getKey())           { WriteNote(1); } -            if (k == Control.LANE2.getKey())           { WriteNote(2); } -            if (k == Control.LANE3.getKey())           { WriteNote(3); } -            if (k == Control.LANE4.getKey())           { WriteNote(4); } -            if (k == Control.NOTE_DOWN.getKey())       { MoveNoteDown(); } -            if (k == Control.NOTE_UP.getKey())         { MoveNoteUp(); } -            if (k == Control.DELETE_NOTE.getKey())     { delNote.fire(); } -            if (k == Control.CLEAR_SELECTION.getKey()) { clearSelect.fire(); } -            if (k == Control.SCROLL_LOCK.getKey())     { scrollLock.fire(); } -            if (k == Control.PLAY_PAUSE.getKey())      { play.fire(); } -            if (k == Control.SELECT_ALL.getKey())      { selectAll.fire(); } -            e.consume(); +            if (k == Control.LANE0.getKey())           { e.consume(); WriteNote(0); } +            if (k == Control.LANE1.getKey())           { e.consume(); WriteNote(1); } +            if (k == Control.LANE2.getKey())           { e.consume(); WriteNote(2); } +            if (k == Control.LANE3.getKey())           { e.consume(); WriteNote(3); } +            if (k == Control.LANE4.getKey())           { e.consume(); WriteNote(4); } +            if (k == Control.NOTE_DOWN.getKey())       { e.consume(); MoveNoteDown(); } +            if (k == Control.NOTE_UP.getKey())         { e.consume(); MoveNoteUp(); } +            if (k == Control.DELETE_NOTE.getKey())     { e.consume(); delNote.fire(); } +            if (k == Control.CLEAR_SELECTION.getKey()) { e.consume(); clearSelect.fire(); } +            if (k == Control.SCROLL_LOCK.getKey())     { e.consume(); scrollLock.fire(); } +            if (k == Control.PLAY_PAUSE.getKey())      { e.consume(); play.fire(); } +            if (k == Control.SELECT_ALL.getKey())      { e.consume(); selectAll.fire(); } +            if (k == Control.SELECT_MULTIPLE.getKey()) { e.consume(); selectMultiple.fire(); } +        }); +        content.addEventFilter(KeyEvent.KEY_RELEASED, e -> { +            KeyCode k = e.getCode(); +            if (k == Control.SELECT_MULTIPLE.getKey()) { e.consume(); selectMultiple.fire(); }          }); -        m.currentTimeProperty().addListener(_ -> { -            // TODO -            playhead.layoutYProperty().bind(secondToScreenPos(m.getCurrentTime().toSeconds())); +        m.currentTimeProperty().addListener((_ ,oldValue ,newValue) -> { +            var diffr = newValue.toSeconds() - oldValue.toSeconds(); +            TranslateTransition anim = new TranslateTransition(Duration.seconds(0.09), playhead); +            anim.byYProperty().bind(secondToScreenPos(diffr)); +            anim.setInterpolator(Interpolator.LINEAR); +            anim.play();          });          play.setOnAction(_ -> { @@ -271,7 +293,7 @@ public class NotesEditor2 extends Page {              Sound.playSfx(Sound.FORWARD);              if (scrollLock.isSelected()) {                  // vvalue takes in a value between 0 and 1 NOT a pixel value -                scroll.vvalueProperty().bind(playhead.layoutYProperty().subtract(scroll.heightProperty().divide(2)).divide(scrollContent.heightProperty().subtract(scroll.heightProperty()))); +                scroll.vvalueProperty().bind(playhead.translateYProperty().subtract(scroll.heightProperty().divide(2)).divide(scrollContent.heightProperty().subtract(scroll.heightProperty())));              }              else {                  scroll.vvalueProperty().unbind(); @@ -287,25 +309,25 @@ public class NotesEditor2 extends Page {          delNote.setOnAction(_ -> {              Sound.playSfx(Sound.FORWARD); -            activeNotes.forEach(e -> { +            selectedNotes.forEach(e -> {                  noteList.remove(e.note);              }); -            activeNotes.clear(); +            selectedNotes.clear();          });          clearSelect.setOnAction(_ -> {              Sound.playSfx(Sound.FORWARD); -            activeNotes.forEach(e -> e.setFill(e.color)); -            activeNotes.clear(); +//            selectedNotes.forEach(e -> e.setStroke(Color.TRANSPARENT)); +            selectedNotes.clear();          });          selectAll.setOnAction(_ -> {              Sound.playSfx(Sound.FORWARD); -            activeNotes.clear(); +            selectedNotes.clear();              for (Pane lane : lanes) { -                lane.getChildren().forEach(e -> activeNotes.add((Block) e)); +                lane.getChildren().forEach(e -> selectedNotes.add((Block) e));              } -            activeNotes.forEach(e -> e.setFill(Color.WHITE)); +//            selectedNotes.forEach(e -> e.setStroke(Color.WHITE));          });          Pane addHelp = addHelp(); @@ -341,7 +363,7 @@ public class NotesEditor2 extends Page {          setEnd.setOnAction(_ -> {              Sound.playSfx(Sound.FORWARD); -            double tmp = screenPosToSecond(playhead.getLayoutY()); +            double tmp = screenPosToSecond(playhead.getTranslateY());              if (Math.round(tmp*10)/10 == Math.round(m.getTotalDuration().toSeconds() * 10)/10) {                  newEndTime.set(0);              } @@ -350,12 +372,11 @@ public class NotesEditor2 extends Page {              }          }); -        activeNotes.addListener((_, _, _) -> { -            if (activeNotes.isEmpty()) { -                selectionLabel.setText("Selection"); -            } -            else { -                selectionLabel.setText("Selection (" + activeNotes.size() + ")"); +        selectedNotes.addListener((ListChangeListener<? super Block>) (arg) -> { +            selectionLabel.setText("Selection (" + selectedNotes.size() + ")"); +            while (arg.next()) { +                arg.getAddedSubList().forEach(n -> n.setStroke(Color.WHITE)); +                arg.getRemoved().forEach(n -> n.setStroke(Color.TRANSPARENT));              }          });      } @@ -381,21 +402,27 @@ public class NotesEditor2 extends Page {      private Block drawBlock(Note n) {          Color color = diff.level.colors[n.lane]; -        Block b = new Block(color,20, 20, 5, false, n); -        b.heightProperty().bind(scroll.widthProperty().divide(8)); -        b.widthProperty().bind(scroll.widthProperty().divide(8)); -        b.arcHeightProperty().bind(scroll.widthProperty().divide(25)); -        b.arcWidthProperty().bind(scroll.widthProperty().divide(25)); +        Block b = new Block(color, false, n); +        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);          b.strokeWidthProperty().bind(scroll.widthProperty().divide(120));          b.layoutYProperty().bind(secondToScreenPos(n.time.add(0)));          b.setOnMouseClicked(_ -> { -            if (activeNotes.contains(b)) { -                activeNotes.remove(b); -                b.setFill(b.color); +            if (selectedNotes.contains(b)) { +                selectedNotes.remove(b); +//                b.setStroke(Color.TRANSPARENT);              }              else { -                activeNotes.add(b); -                b.setFill(Color.WHITE); +                if (!selectMultiple.isSelected()) { +//                    selectedNotes.forEach(e -> e.setStroke(Color.TRANSPARENT)); +                    selectedNotes.clear(); +                } +                selectedNotes.add(b); +//                b.setStroke(Color.WHITE);              }          });          return b; @@ -429,26 +456,26 @@ public class NotesEditor2 extends Page {      }      private void WriteNote(int col) { -        Note tmp = new Note(screenPosToSecond(playhead.getLayoutY()), col); +        Note tmp = new Note(screenPosToSecond(playhead.getTranslateY()), col);          noteList.add(tmp);      }      private void MoveNoteUp() { -        activeNotes.forEach(n -> n.note.time.setValue(n.note.time.get() - 0.01)); +        selectedNotes.forEach(n -> n.note.time.setValue(n.note.time.get() - 0.01));      }      private void MoveNoteDown() { -        activeNotes.forEach(n -> n.note.time.setValue(n.note.time.get() + 0.01)); +        selectedNotes.forEach(n -> n.note.time.setValue(n.note.time.get() + 0.01));      }      private Pane addHelp() {          Label l1 = new Label("Use the following keys");          HBox hb = new HBox( -                new Target(diff.level.colors[0], 40, 40, 10, Control.LANE0.targetString()), -                new Target(diff.level.colors[1], 40, 40, 10, Control.LANE1.targetString()), -                new Target(diff.level.colors[2], 40, 40, 10, Control.LANE2.targetString()), -                new Target(diff.level.colors[3], 40, 40, 10, Control.LANE3.targetString()), -                new Target(diff.level.colors[4], 40, 40, 10, Control.LANE4.targetString()) +                createTarget(diff.level.colors[0], Control.LANE0), +                createTarget(diff.level.colors[1], Control.LANE1), +                createTarget(diff.level.colors[2], Control.LANE2), +                createTarget(diff.level.colors[3], Control.LANE3), +                createTarget(diff.level.colors[4], Control.LANE4)          );          hb.setSpacing(10);          hb.setAlignment(Pos.CENTER_LEFT); @@ -462,7 +489,12 @@ public class NotesEditor2 extends Page {      private Pane moveHelp() {          Label l1 = new Label("Use the"); -        HBox hb = new HBox(new Target(Color.BLACK, 40, 40, 10, Control.NOTE_UP.targetString()), new Label("and"), new Target(Color.BLACK, 40, 40, 10, Control.NOTE_DOWN.targetString()), new Label("keys")); +        HBox hb = new HBox( +                createTarget(Color.BLACK, Control.NOTE_UP), +                new Label("and"), +                createTarget(Color.BLACK, Control.NOTE_DOWN), +                new Label("keys") +        );          hb.setSpacing(10);          hb.setAlignment(Pos.CENTER_LEFT);          Label l2 = new Label("to move the selected \nnote(s) up and down."); @@ -473,4 +505,14 @@ public class NotesEditor2 extends Page {          ret.setLayoutY(120);          return ret;      } + +    private Target createTarget(Color color, Control control) { +        Target target = new Target(color, control.targetString()); +        target.rect.setWidth(40); +        target.rect.setHeight(40); +        target.rect.setArcHeight(5); +        target.rect.setArcWidth(5); +        target.rect.setStrokeWidth(3); +        return target; +    }  } diff --git a/src/main/java/net/sowgro/npehero/gameplay/Block.java b/src/main/java/net/sowgro/npehero/gameplay/Block.java index 9d68ab6..5d35ccc 100755 --- a/src/main/java/net/sowgro/npehero/gameplay/Block.java +++ b/src/main/java/net/sowgro/npehero/gameplay/Block.java @@ -16,24 +16,20 @@ public class Block extends Rectangle      public Color color;      public Note note; -    public Block(Color color, double width, double height, int cornerRadius, boolean useDropShadow, Note note) +    public Block(Color color, boolean useDropShadow, Note note)      {          this.note = note;          this.color = color;          super.setFill(color); -        super.setWidth(width); -        super.setHeight(height); -        super.setArcHeight(cornerRadius); -        super.setArcWidth(cornerRadius);          if (useDropShadow) {              enableDropShadow();          }      } -    public Block(Color color, double width, double height, int cornerRadius) { -        this(color, width, height, cornerRadius, true, null); +    public Block(Color color, Note note) { +        this(color, true, note);      }      public void enableDropShadow() { diff --git a/src/main/java/net/sowgro/npehero/gameplay/SongPlayer.java b/src/main/java/net/sowgro/npehero/gameplay/SongPlayer.java index 91a3ecc..f3abf91 100755 --- a/src/main/java/net/sowgro/npehero/gameplay/SongPlayer.java +++ b/src/main/java/net/sowgro/npehero/gameplay/SongPlayer.java @@ -60,7 +60,7 @@ public class SongPlayer extends HBox {          // create targets          for (int i = 0; i < lanes.length; i++) {              lanes[i] = new Lane(); -            var tmp = new Target(level.colors[i], 50, 50, 20, Control.lanes[i].targetString()); +            var tmp = new Target(level.colors[i], Control.lanes[i].targetString());              bindTarget(tmp);              lanes[i].target = tmp;          } @@ -79,7 +79,7 @@ public class SongPlayer extends HBox {              }          }));          // schedule the game over screen to show at the end -        timeline.getKeyFrames().add(new KeyFrame(Duration.seconds(songLength + START_DELAY), _ -> { +        timeline.getKeyFrames().add(new KeyFrame(Duration.seconds(songLength + FALL_TIME + START_DELAY), _ -> {              Driver.setMenu(new GameOver(level, diff, prev, scoreCounter.getScore()));              cancel();          })); @@ -125,7 +125,7 @@ public class SongPlayer extends HBox {      public void sendNote(Note note) {          Lane lane = lanes[note.lane]; -        Block block = new Block(lane.target.getColor(), 50, 50, 15); +        Block block = new Block(lane.target.getColor(), note);          block.setCache(true);          block.setCacheHint(CacheHint.SPEED);          block.xProperty().bind(lane.pane.widthProperty().subtract(block.widthProperty()).divide(2)); @@ -136,7 +136,7 @@ public class SongPlayer extends HBox {          TranslateTransition anim = new TranslateTransition(Duration.seconds(FALL_TIME + 0.105));          anim.setInterpolator(Interpolator.LINEAR); -        anim.byYProperty().bind(super.heightProperty().add(block.getHeight()).add(75)); +        anim.byYProperty().bind(lane.pane.heightProperty().add(block.getHeight()).add(75));          anim.setNode(block);          anim.play();          anim.setOnFinished(_ -> { @@ -157,7 +157,7 @@ public class SongPlayer extends HBox {       */      private void bindTarget(Target target) {          bindBlock(target.rect); -//		target.rect.strokeWidthProperty().bind(super.widthProperty().divide(120)); +		target.rect.strokeWidthProperty().bind(super.heightProperty().multiply(4/1080.0));      }      private void bindBlock(Rectangle block) { diff --git a/src/main/java/net/sowgro/npehero/gameplay/Target.java b/src/main/java/net/sowgro/npehero/gameplay/Target.java index 45907d3..9f2b4ea 100755 --- a/src/main/java/net/sowgro/npehero/gameplay/Target.java +++ b/src/main/java/net/sowgro/npehero/gameplay/Target.java @@ -9,37 +9,26 @@ import javafx.scene.text.Text;  public class Target extends StackPane  { -    private Color col; -    private Color fill; -    private Text label; +    private final Color col; +    private final Color fill;      public Rectangle rect = new Rectangle(); -    public Target(Color c, double a, double b, int r, String key) + +    public Target(Color c, String key)      { -        label = new Text(key); +        Text label = new Text(key);          label.getStyleClass().add("t3");          label.scaleXProperty().bind(super.widthProperty().divide(50));          label.scaleYProperty().bind(label.scaleXProperty()); -        super.getChildren().addAll(rect,label); +        super.getChildren().addAll(rect, label);          col = c;          fill = new Color(c.darker().getRed(), c.darker().getGreen(), c.darker().getBlue(), 0.45);          rect.setFill(fill); -        rect.setWidth(a); -        rect.setHeight(b); -        rect.setArcHeight(r); -        rect.setArcWidth(r);          rect.setStroke(col);          rect.setStrokeWidth(4);      } -    public void setColor(Color c) { -        col = c; -        fill = new Color(c.darker().getRed(), c.darker().getGreen(), c.darker().getBlue(), 0.45); -        rect.setFill(fill); -        rect.setStroke(c); -    } -      public Color getFillColor() {          return fill;      } diff --git a/src/main/java/net/sowgro/npehero/gui/LeaderboardView.java b/src/main/java/net/sowgro/npehero/gui/LeaderboardView.java index 9176d76..c22773e 100755 --- a/src/main/java/net/sowgro/npehero/gui/LeaderboardView.java +++ b/src/main/java/net/sowgro/npehero/gui/LeaderboardView.java @@ -16,7 +16,7 @@ import net.sowgro.npehero.main.*;  public class LeaderboardView extends Page  { -    private HBox content = new HBox(); +    private final HBox content = new HBox();      public LeaderboardView(Difficulty diff, Page prev)      { @@ -46,12 +46,12 @@ public class LeaderboardView extends Page          scores.prefWidthProperty().bind(content.prefWidthProperty().multiply(0.30));          scores.prefHeightProperty().bind(content.prefHeightProperty().multiply(0.75)); -        scoreCol.setSortType(SortType.DESCENDING); +        scoreCol.setSortType(SortType.ASCENDING);          scores.getSortOrder().add(scoreCol);          Button exit = new Button();          exit.setText("Back"); -        exit.setOnAction(e -> { +        exit.setOnAction(_ -> {              Sound.playSfx(Sound.BACKWARD);              Driver.setMenu(prev);          }); diff --git a/src/main/java/net/sowgro/npehero/main/Control.java b/src/main/java/net/sowgro/npehero/main/Control.java index 69bf669..bb9710a 100644 --- a/src/main/java/net/sowgro/npehero/main/Control.java +++ b/src/main/java/net/sowgro/npehero/main/Control.java @@ -25,12 +25,13 @@ public enum Control {      PLAY_PAUSE      ("Play / Pause", KeyCode.P),      CLEAR_SELECTION ("Clear Selection", KeyCode.ESCAPE),      SELECT_ALL      ("Select All", KeyCode.S), +    SELECT_MULTIPLE ("Select Multiple (Hold)", KeyCode.CONTROL),      LEGACY_PRINT    ("Print Time", KeyCode.Q),      LEGACY_STOP     ("Stop Edit", KeyCode.ESCAPE);      public static final List<Map.Entry<String, List<Control>>> sections = List.of(                  entry("Gameplay",      List.of(LANE0, LANE1, LANE2, LANE3, LANE4)), -                entry("Editor",        List.of(DELETE_NOTE, NOTE_UP, NOTE_DOWN, SCROLL_LOCK, PLAY_PAUSE, CLEAR_SELECTION, SELECT_ALL)), +                entry("Editor",        List.of(DELETE_NOTE, NOTE_UP, NOTE_DOWN, SCROLL_LOCK, PLAY_PAUSE, CLEAR_SELECTION, SELECT_ALL, SELECT_MULTIPLE)),                  entry("Legacy Editor", List.of(LEGACY_PRINT, LEGACY_STOP))              ); diff --git a/src/main/resources/net/sowgro/npehero/style.css b/src/main/resources/net/sowgro/npehero/style.css index 8fecd98..e4d34f0 100755 --- a/src/main/resources/net/sowgro/npehero/style.css +++ b/src/main/resources/net/sowgro/npehero/style.css @@ -249,7 +249,7 @@ Slider:focused .thumb{      -fx-text-fill: #a8a8a8;  } -CheckBox { +.box CheckBox {      -fx-text-fill: white;  } | 
