aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/net
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/net')
-rwxr-xr-xsrc/main/java/net/sowgro/npehero/editor/DiffEditor.java12
-rwxr-xr-xsrc/main/java/net/sowgro/npehero/editor/LevelEditor.java11
-rw-r--r--src/main/java/net/sowgro/npehero/editor/NotesEditor2.java92
-rwxr-xr-xsrc/main/java/net/sowgro/npehero/gameplay/ScoreController.java112
-rwxr-xr-xsrc/main/java/net/sowgro/npehero/gameplay/SongPlayer.java9
-rwxr-xr-xsrc/main/java/net/sowgro/npehero/gui/GameOver.java17
-rwxr-xr-xsrc/main/java/net/sowgro/npehero/gui/LevelSurround.java15
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);