aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsowgro <tpoke.ferrari@gmail.com>2024-10-18 00:25:28 -0400
committersowgro <tpoke.ferrari@gmail.com>2024-10-18 00:25:28 -0400
commitb3cc60eba7f1bc646c0cc6356a338fcfeb0ee0f5 (patch)
tree3fa547dce2fc1a3a7a8fa36c6449848960628b54
parent28ade1fce71064db5c95a0d69fe94e3097042e36 (diff)
downloadNPEhero-dev2.tar.gz
NPEhero-dev2.tar.bz2
NPEhero-dev2.zip
Add default color customizationdev2
-rwxr-xr-x.npehero/settings.json2
-rw-r--r--pom.xml4
-rwxr-xr-xsrc/main/java/net/sowgro/npehero/editor/DiffEditor.java1
-rwxr-xr-xsrc/main/java/net/sowgro/npehero/editor/LevelEditor.java47
-rw-r--r--src/main/java/net/sowgro/npehero/editor/NotesEditor2.java39
-rwxr-xr-xsrc/main/java/net/sowgro/npehero/gameplay/Block.java2
-rwxr-xr-xsrc/main/java/net/sowgro/npehero/gameplay/SongPlayer.java7
-rwxr-xr-xsrc/main/java/net/sowgro/npehero/gui/LevelSurround.java9
-rwxr-xr-xsrc/main/java/net/sowgro/npehero/gui/SettingsEditor.java177
-rwxr-xr-xsrc/main/java/net/sowgro/npehero/levelapi/Level.java31
-rwxr-xr-xsrc/main/java/net/sowgro/npehero/main/Settings.java29
11 files changed, 230 insertions, 118 deletions
diff --git a/.npehero/settings.json b/.npehero/settings.json
index 562d704..dc5e7d5 100755
--- a/.npehero/settings.json
+++ b/.npehero/settings.json
@@ -2,5 +2,5 @@
"guiScale": 1.0,
"effectsVol": 1.0,
"musicVol": 1.0,
- "enableMenuMusic": true
+ "enableMenuMusic": false
} \ No newline at end of file
diff --git a/pom.xml b/pom.xml
index b28bdcd..c20fb63 100644
--- a/pom.xml
+++ b/pom.xml
@@ -6,7 +6,7 @@
<groupId>net.sowgro.npehero</groupId>
<artifactId>NPEHero</artifactId>
- <version>2.0-SNAPSHOT</version>
+ <version>2.0.3</version>
<name>NPE Hero</name>
<properties>
@@ -121,7 +121,7 @@
<configuration>
<name>NPE Hero</name>
- <appVersion>2.0.1</appVersion>
+ <appVersion>${project.version}</appVersion>
<vendor>net.sowgro</vendor>
<runtimeImage>target/app</runtimeImage>
<module>net.sowgro.npehero/net.sowgro.npehero.Driver</module>
diff --git a/src/main/java/net/sowgro/npehero/editor/DiffEditor.java b/src/main/java/net/sowgro/npehero/editor/DiffEditor.java
index 0ae8f5f..7d2a8a6 100755
--- a/src/main/java/net/sowgro/npehero/editor/DiffEditor.java
+++ b/src/main/java/net/sowgro/npehero/editor/DiffEditor.java
@@ -132,6 +132,7 @@ public class DiffEditor extends Page
main.getChildren().addAll(optionsScroll);
main.setSpacing(10);
main.maxWidthProperty().bind(content.widthProperty().multiply(0.95));
+ main.maxHeightProperty().bind(content.heightProperty().multiply(0.75));
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 f255705..a4e787a 100755
--- a/src/main/java/net/sowgro/npehero/editor/LevelEditor.java
+++ b/src/main/java/net/sowgro/npehero/editor/LevelEditor.java
@@ -1,12 +1,14 @@
package net.sowgro.npehero.editor;
import java.io.IOException;
+import java.util.Objects;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Node;
import javafx.scene.control.*;
import javafx.scene.layout.*;
+import javafx.scene.paint.Color;
import javafx.stage.FileChooser;
import javafx.stage.FileChooser.ExtensionFilter;
import net.sowgro.npehero.Driver;
@@ -25,6 +27,7 @@ public class LevelEditor extends Page
private final Level level;
private final HBox content = new HBox();
+ private final CheckBox useCustomColors;
record OptionEntry(String label, Node action, ValidIndicator vi) {
OptionEntry(String label, Node action) {
@@ -47,14 +50,17 @@ public class LevelEditor extends Page
descEntry = new TextField(level.desc);
- colorsPickers = new ColorPicker[] {
- new ColorPicker(level.colors[0]),
- new ColorPicker(level.colors[1]),
- new ColorPicker(level.colors[2]),
- new ColorPicker(level.colors[3]),
- new ColorPicker(level.colors[4])
- };
- for (ColorPicker cp : colorsPickers) {
+ useCustomColors = new CheckBox("Use Custom Colors");
+ useCustomColors.setSelected(!hasNull(level.colors));
+
+ colorsPickers = new ColorPicker[5];
+ for (int i = 0; i < colorsPickers.length; i++) {
+ var cp = new ColorPicker(Objects.requireNonNullElse(
+ level.colors[i],
+ Settings.defaultColors[i]
+ ));
+ colorsPickers[i] = cp;
+ cp.disableProperty().bind(useCustomColors.selectedProperty().not());
cp.getStyleClass().add("button");
cp.setMinHeight(60);
cp.setMinWidth(60);
@@ -64,6 +70,9 @@ public class LevelEditor extends Page
colorPickerBox.getChildren().addAll(colorsPickers);
colorPickerBox.setSpacing(10);
+ VBox blockColors = new VBox(useCustomColors, colorPickerBox);
+ blockColors.setSpacing(10);
+
Node songFile = createFileImportBox(
Level.SONG_FILE,
() -> level.song,
@@ -103,7 +112,7 @@ public class LevelEditor extends Page
new OptionEntry("Song File", songFile, songValid),
new OptionEntry("Preview Image", previewImage),
new OptionEntry("Background Image", backgroundImage),
- new OptionEntry("Block Colors", colorPickerBox),
+ new OptionEntry("Block Colors", blockColors),
}
};
HBox options = new HBox();
@@ -111,6 +120,7 @@ public class LevelEditor extends Page
VBox colBox = new VBox();
colBox.setSpacing(10);
colBox.setPrefWidth(400);
+
for (OptionEntry option : col) {
Label label = new Label(option.label);
HBox labelBox = new HBox(label);
@@ -174,11 +184,13 @@ public class LevelEditor extends Page
level.title = titleEntry.getText();
level.artist = artistEntry.getText();
level.desc = descEntry.getText();
- level.colors[0] = colorsPickers[0].getValue();
- level.colors[1] = colorsPickers[1].getValue();
- level.colors[2] = colorsPickers[2].getValue();
- level.colors[3] = colorsPickers[3].getValue();
- level.colors[4] = colorsPickers[4].getValue();
+ for (int i = 0; i < colorsPickers.length; i++) {
+ if (useCustomColors.isSelected()) {
+ level.colors[i] = colorsPickers[i].getValue();
+ } else {
+ level.colors[i] = null;
+ }
+ }
try {
level.writeMetadata();
} catch (IOException e) {
@@ -239,4 +251,11 @@ public class LevelEditor extends Page
b1.setSpacing(10);
return b1;
}
+
+ boolean hasNull(Color[] arr) {
+ for (Color color : arr) {
+ if (color == null) return true;
+ }
+ return false;
+ }
} \ No newline at end of file
diff --git a/src/main/java/net/sowgro/npehero/editor/NotesEditor2.java b/src/main/java/net/sowgro/npehero/editor/NotesEditor2.java
index bd9fd85..4491786 100644
--- a/src/main/java/net/sowgro/npehero/editor/NotesEditor2.java
+++ b/src/main/java/net/sowgro/npehero/editor/NotesEditor2.java
@@ -30,21 +30,23 @@ import net.sowgro.npehero.main.*;
import net.sowgro.npehero.main.Control;
import java.io.IOException;
+import java.util.Objects;
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;
- MediaPlayer m;
- Polygon playhead;
- ListProperty<Block> selectedNotes = new SimpleListProperty<>(FXCollections.observableArrayList());
- ListProperty<Note> noteList;
- DiffEditor prev;
- DoubleProperty newEndTime = new SimpleDoubleProperty(0);
- CheckBox selectMultiple;
+ private final Difficulty diff;
+ private final ScrollPane scroll = new ScrollPane();
+ private final Pane[] lanes;
+ private final MediaPlayer m;
+ private final Polygon playhead;
+ private final ListProperty<Block> selectedNotes = new SimpleListProperty<>(FXCollections.observableArrayList());
+ private final ListProperty<Note> noteList;
+ private final DiffEditor prev;
+ private final DoubleProperty newEndTime = new SimpleDoubleProperty(0);
+ private final CheckBox selectMultiple;
+ private final Color[] colors = new Color[5];
private final HBox content = new HBox();
@@ -54,6 +56,11 @@ public class NotesEditor2 extends Page {
m = new MediaPlayer(diff.level.song);
m.volumeProperty().bind(Settings.musicVol);
this.prev = prev;
+ for (int i = 0; i < colors.length; i++) {
+ colors[i] = Settings.forceDefaultColors
+ ? Settings.defaultColors[i]
+ : Objects.requireNonNullElse(diff.level.colors[i], Settings.defaultColors[i]);
+ }
// Buttons
VBox actionBox = new VBox();
@@ -438,7 +445,7 @@ public class NotesEditor2 extends Page {
}
private Block drawBlock(Note n) {
- Color color = diff.level.colors[n.lane];
+ Color color = colors[n.lane];
Block b = new Block(color, false, n);
// var sizeBind = scroll.widthProperty().divide(8);
// b.heightProperty().bind(sizeBind);
@@ -516,11 +523,11 @@ public class NotesEditor2 extends Page {
private Pane addHelp() {
Label l1 = new Label("Use the following keys");
HBox hb = new HBox(
- 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)
+ createTarget(colors[0], Control.LANE0),
+ createTarget(colors[1], Control.LANE1),
+ createTarget(colors[2], Control.LANE2),
+ createTarget(colors[3], Control.LANE3),
+ createTarget(colors[4], Control.LANE4)
);
hb.setSpacing(10);
hb.setAlignment(Pos.CENTER_LEFT);
diff --git a/src/main/java/net/sowgro/npehero/gameplay/Block.java b/src/main/java/net/sowgro/npehero/gameplay/Block.java
index 5d35ccc..04579fc 100755
--- a/src/main/java/net/sowgro/npehero/gameplay/Block.java
+++ b/src/main/java/net/sowgro/npehero/gameplay/Block.java
@@ -34,7 +34,7 @@ public class Block extends Rectangle
public void enableDropShadow() {
DropShadow dropShadow = new DropShadow();
- dropShadow.setRadius(200.0);
+ dropShadow.setRadius(100.0);
dropShadow.setColor(color);
dropShadow.setBlurType(BlurType.GAUSSIAN);
super.setEffect(dropShadow);
diff --git a/src/main/java/net/sowgro/npehero/gameplay/SongPlayer.java b/src/main/java/net/sowgro/npehero/gameplay/SongPlayer.java
index fb95eb7..fc9269e 100755
--- a/src/main/java/net/sowgro/npehero/gameplay/SongPlayer.java
+++ b/src/main/java/net/sowgro/npehero/gameplay/SongPlayer.java
@@ -1,6 +1,7 @@
package net.sowgro.npehero.gameplay;
import java.util.ArrayList;
+import java.util.Objects;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
@@ -74,7 +75,11 @@ 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], Control.lanes[i].targetString());
+ var tmp = new Target(
+ Settings.forceDefaultColors
+ ? Settings.defaultColors[i]
+ : Objects.requireNonNullElse(level.colors[i], Settings.defaultColors[i]),
+ Control.lanes[i].targetString());
bindTarget(tmp);
lanes[i].target = tmp;
}
diff --git a/src/main/java/net/sowgro/npehero/gui/LevelSurround.java b/src/main/java/net/sowgro/npehero/gui/LevelSurround.java
index e6cc2f4..4b7cc75 100755
--- a/src/main/java/net/sowgro/npehero/gui/LevelSurround.java
+++ b/src/main/java/net/sowgro/npehero/gui/LevelSurround.java
@@ -3,6 +3,7 @@ package net.sowgro.npehero.gui;
import javafx.animation.AnimationTimer;
import javafx.scene.control.Label;
import javafx.scene.layout.*;
+import javafx.scene.paint.Color;
import net.sowgro.npehero.Driver;
import net.sowgro.npehero.gameplay.SongPlayer;
import javafx.geometry.Insets;
@@ -12,6 +13,7 @@ import javafx.scene.text.Text;
import net.sowgro.npehero.levelapi.Difficulty;
import net.sowgro.npehero.gameplay.ScoreController;
import net.sowgro.npehero.main.Page;
+import net.sowgro.npehero.main.Settings;
import net.sowgro.npehero.main.Sound;
public class LevelSurround extends Page
@@ -112,7 +114,12 @@ public class LevelSurround extends Page
var scale = content.prefHeightProperty().divide(720);
game.scaleXProperty().bind(scale);
game.scaleYProperty().bind(scale);
- game.getStyleClass().add("box");
+// game.getStyleClass().add("box");
+// game.setEffect(new BoxBlur());
+// game.setBackground(Color.WHITE);
+ BackgroundFill bgf = new BackgroundFill(Color.rgb(0, 0, 0, Settings.gameOpacity), null, null);
+ game.setBackground(new Background(bgf));
+
BorderPane gameHolder = new BorderPane(game);
gameHolder.maxHeightProperty().bind(content.prefHeightProperty());
diff --git a/src/main/java/net/sowgro/npehero/gui/SettingsEditor.java b/src/main/java/net/sowgro/npehero/gui/SettingsEditor.java
index e89dbc9..c5233b5 100755
--- a/src/main/java/net/sowgro/npehero/gui/SettingsEditor.java
+++ b/src/main/java/net/sowgro/npehero/gui/SettingsEditor.java
@@ -2,62 +2,37 @@ package net.sowgro.npehero.gui;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
+import javafx.scene.Node;
import javafx.scene.control.*;
-import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Pane;
import javafx.scene.layout.VBox;
-import javafx.scene.text.Text;
import net.sowgro.npehero.Driver;
-import net.sowgro.npehero.main.ErrorDisplay;
-import net.sowgro.npehero.main.Page;
-import net.sowgro.npehero.main.Settings;
-import net.sowgro.npehero.main.Sound;
+import net.sowgro.npehero.main.*;
import java.io.IOException;
public class SettingsEditor extends Page
{
private final HBox content = new HBox();
+ private final CheckBox forceDefaultColors;
+ private final Slider gameOpacity;
+ private final ColorPicker[] colorPickers;
+
+ record OptionEntry(String label, Node action) { }
public SettingsEditor()
{
- Text musicText = new Text();
- musicText.setText("Music Volume");
- musicText.getStyleClass().add("t3");
-
- Slider musicSlider = new Slider();
+ Slider musicSlider = new Slider(0.0, 1.0, 0);
musicSlider.valueProperty().bindBidirectional(Settings.musicVol);
- musicSlider.setMin(0.0);
- musicSlider.setMax(1.0);
CheckBox enableMenuMusic = new CheckBox("Enable Menu Music");
enableMenuMusic.selectedProperty().bindBidirectional(Settings.enableMenuMusic);
- VBox musicBox = new VBox();
- musicBox.getChildren().addAll(musicText, musicSlider, enableMenuMusic);
- musicBox.getStyleClass().add("box");
- musicBox.setPadding(new Insets(10));
-
-
- Text SFXText = new Text();
- SFXText.setText("Sound Effects Volume");
- SFXText.getStyleClass().add("t3");
+ VBox musicBox = new VBox(musicSlider, enableMenuMusic);
- Slider SFXSlider = new Slider();
+ Slider SFXSlider = new Slider(0.0, 1.0, 0);
SFXSlider.valueProperty().bindBidirectional(Settings.effectsVol);
- SFXSlider.setMin(0.0);
- SFXSlider.setMax(1.0);
-
- VBox SFXBox = new VBox();
- SFXBox.getChildren().addAll(SFXText, SFXSlider);
- SFXBox.getStyleClass().add("box");
- SFXBox.setPadding(new Insets(10));
-
-
- Text fullText = new Text();
- fullText.setText("Fullscreen mode");
- fullText.getStyleClass().add("t3");
Button fullscreen = new Button();
fullscreen.setText("Toggle (F11)");
@@ -66,15 +41,6 @@ public class SettingsEditor extends Page
Driver.primaryStage.setFullScreen(!Driver.primaryStage.isFullScreen());
});
- VBox fullBox = new VBox();
- fullBox.getChildren().addAll(fullText,fullscreen);
- fullBox.getStyleClass().add("box");
- fullBox.setPadding(new Insets(10));
-
-
- Text controlsLabel = new Text("Key Bindings");
- controlsLabel.getStyleClass().add("t3");
-
Button controlsButton = new Button();
controlsButton.setText("Edit");
controlsButton.setOnAction(_ -> {
@@ -82,13 +48,6 @@ public class SettingsEditor extends Page
Driver.setMenu(new ControlEditor());
});
- VBox controlsBox = new VBox();
- controlsBox.getStyleClass().add("box");
- controlsBox.getChildren().addAll(controlsLabel, controlsButton);
- controlsBox.setPadding(new Insets(10));
-
- Label scaleLabel = new Label("UI Scale");
-
ToggleButton[] scaleOptions = new ToggleButton[4];
for (int i = 0; i < scaleOptions.length; i++) {
var val = i * 0.5 + 0.5;
@@ -107,36 +66,96 @@ public class SettingsEditor extends Page
tg.selectedToggleProperty().addListener((_, _, newt) -> {
Settings.guiScale.set((Double)newt.getUserData());
});
-
HBox scaleSlider = new HBox(scaleOptions);
- VBox scaleBox = new VBox(scaleLabel, scaleSlider);
- scaleBox.getStyleClass().add("box");
- scaleBox.setPadding(new Insets(10));
+ colorPickers = new ColorPicker[] {
+ new ColorPicker(Settings.defaultColors[0]),
+ new ColorPicker(Settings.defaultColors[1]),
+ new ColorPicker(Settings.defaultColors[2]),
+ new ColorPicker(Settings.defaultColors[3]),
+ new ColorPicker(Settings.defaultColors[4])
+ };
+ for (ColorPicker cp : colorPickers) {
+ cp.getStyleClass().add("button");
+ cp.setMinHeight(60);
+ cp.setMinWidth(60);
+ }
+
+ HBox colorPickerBox = new HBox();
+ colorPickerBox.getChildren().addAll(colorPickers);
+ colorPickerBox.setSpacing(10);
+
+ forceDefaultColors = new CheckBox("Force Default Colors");
+ forceDefaultColors.setSelected(Settings.forceDefaultColors);
+
+ Button resetColors = new Button("Reset");
+ resetColors.setOnAction(_ -> {
+ for (int i = 0; i < colorPickers.length; i++) {
+ colorPickers[i].setValue(Settings.DEFAULT_DEFAULT_COLORS[i]);
+ }
+ });
+
+ VBox defaultColors = new VBox(colorPickerBox, forceDefaultColors, resetColors);
+ defaultColors.setSpacing(10);
+
+ gameOpacity = new Slider(0.5, 1.0, 0.75);
+ gameOpacity.setMajorTickUnit(0.25);
+ gameOpacity.setMinorTickCount(1);
+ gameOpacity.setSnapToTicks(true);
+
+ OptionEntry[][] optionEntries = {
+ {
+ new OptionEntry("Music Volume", musicBox),
+ new OptionEntry("Sound Effects Volume", SFXSlider),
+ new OptionEntry("Fullscreen Mode", fullscreen),
+ new OptionEntry("Key Bindings", controlsButton),
+ },
+ {
+ new OptionEntry("GUI Scale", scaleSlider),
+ new OptionEntry("Default Block Colors", defaultColors),
+ new OptionEntry("Game Opacity", gameOpacity)
+ }
+ };
+ HBox options = new HBox();
+ options.setSpacing(10);
+ for (OptionEntry[] col : optionEntries) {
+ VBox colBox = new VBox();
+ colBox.setSpacing(10);
+ colBox.setPrefWidth(420);
+
+ for (OptionEntry option : col) {
+ VBox optionBox = new VBox(new Label(option.label), option.action);
+ optionBox.setPadding(new Insets(10));
+ optionBox.setSpacing(5);
+ optionBox.getStyleClass().add("box");
+ colBox.getChildren().add(optionBox);
+ }
+ options.getChildren().add(colBox);
+ }
+ ScrollPane optionsScroll = new ScrollPane(options);
+ optionsScroll.getStyleClass().remove("scroll-pane");
+ optionsScroll.setFitToWidth(true);
+// optionsScroll.setPrefWidth(450);
+
+ HBox main = new HBox();
+ main.getChildren().addAll(optionsScroll);
+ main.setSpacing(10);
+ main.maxWidthProperty().bind(content.widthProperty().multiply(0.95));
+ main.maxHeightProperty().bind(content.heightProperty().multiply(0.75));
Button exit = new Button();
exit.setText("Back");
- exit.setOnAction(e -> {
- try {
- Settings.save();
- } catch (IOException ex) {
- Driver.setMenu(new ErrorDisplay("Failed to save settings", ex, this));
- }
+ exit.setOnAction(_ -> {
Sound.playSfx(Sound.BACKWARD);
Driver.setMenu(new MainMenu());
});
- BorderPane buttonBox = new BorderPane();
- buttonBox.setLeft(exit);
-
- VBox options = new VBox();
- options.setSpacing(10);
- options.setAlignment(Pos.CENTER);
- options.getChildren().addAll(musicBox,SFXBox,fullBox,controlsBox, scaleBox, buttonBox);
-// options.setPrefWidth(450);
- options.prefHeightProperty().bind(content.prefHeightProperty());
+ VBox centerBox = new VBox();
+ centerBox.getChildren().addAll(main, exit);
+ centerBox.setSpacing(10);
+ centerBox.setAlignment(Pos.CENTER);
- content.getChildren().add(options);
+ content.getChildren().add(centerBox);
content.setAlignment(Pos.CENTER);
}
@@ -144,5 +163,21 @@ public class SettingsEditor extends Page
public Pane getContent() {
return content;
}
+
+ @Override
+ public void onLeave() {
+ Settings.forceDefaultColors = forceDefaultColors.isSelected();
+ Settings.defaultColors[0] = colorPickers[0].getValue();
+ Settings.defaultColors[1] = colorPickers[1].getValue();
+ Settings.defaultColors[2] = colorPickers[2].getValue();
+ Settings.defaultColors[3] = colorPickers[3].getValue();
+ Settings.defaultColors[4] = colorPickers[4].getValue();
+ Settings.gameOpacity = gameOpacity.getValue();
+ try {
+ Settings.save();
+ } catch (IOException ex) {
+ Driver.setMenu(new ErrorDisplay("Failed to save settings", ex, this));
+ }
+ }
}
diff --git a/src/main/java/net/sowgro/npehero/levelapi/Level.java b/src/main/java/net/sowgro/npehero/levelapi/Level.java
index 0e25445..f61c7b8 100755
--- a/src/main/java/net/sowgro/npehero/levelapi/Level.java
+++ b/src/main/java/net/sowgro/npehero/levelapi/Level.java
@@ -13,6 +13,7 @@ import java.nio.file.Files;
import java.nio.file.StandardCopyOption;
import java.util.HashMap;
import java.util.Map;
+import java.util.Objects;
public class Level implements Comparable<Level>{
@@ -25,7 +26,7 @@ public class Level implements Comparable<Level>{
public String title = "Unnamed";
public String artist = "Unknown";
public String desc;
- public Color[] colors = {Color.RED,Color.BLUE,Color.GREEN,Color.PURPLE,Color.YELLOW};
+ public Color[] colors = {null, null, null, null, null};
public Image preview;
public Image background;
public Media song;
@@ -101,11 +102,11 @@ public class Level implements Comparable<Level>{
title = (String) data.getOrDefault("title", title);
artist = (String) data.getOrDefault("artist", artist);
desc = (String) data.getOrDefault("desc", desc);
- colors[0] = Color.web((String) data.getOrDefault("color1", colors[0].toString()));
- colors[1] = Color.web((String) data.getOrDefault("color2", colors[1].toString()));
- colors[2] = Color.web((String) data.getOrDefault("color3", colors[2].toString()));
- colors[3] = Color.web((String) data.getOrDefault("color4", colors[3].toString()));
- colors[4] = Color.web((String) data.getOrDefault("color5", colors[4].toString()));
+ colors[0] = colorGetOrDefault(data, "color1", colors[0]);
+ colors[1] = colorGetOrDefault(data, "color2", colors[1]);
+ colors[2] = colorGetOrDefault(data, "color3", colors[2]);
+ colors[3] = colorGetOrDefault(data, "color4", colors[3]);
+ colors[4] = colorGetOrDefault(data, "color5", colors[4]);
}
/**
@@ -141,11 +142,11 @@ public class Level implements Comparable<Level>{
data.put("title", title);
data.put("artist", artist);
data.put("desc", desc);
- data.put("color1",colors[0].toString());
- data.put("color2",colors[1].toString());
- data.put("color3",colors[2].toString());
- data.put("color4",colors[3].toString());
- data.put("color5",colors[4].toString());
+ data.put("color1",Objects.toString(colors[0]));
+ data.put("color2",Objects.toString(colors[1]));
+ data.put("color3",Objects.toString(colors[2]));
+ data.put("color4",Objects.toString(colors[3]));
+ data.put("color5",Objects.toString(colors[4]));
FileWriter fileWriter = new FileWriter(jsonFile);
jsonParser.toJson(data, fileWriter);
fileWriter.close();
@@ -195,4 +196,12 @@ public class Level implements Comparable<Level>{
public String getFileExtension(File file) {
return file.getName().substring(file.getName().lastIndexOf('.') + 1);
}
+
+ public static Color colorGetOrDefault(Map<String, Object> source, String key, Color defaultValue) {
+ try {
+ return Color.web((String) source.getOrDefault(key, defaultValue));
+ } catch (Exception e) {
+ return null;
+ }
+ }
}
diff --git a/src/main/java/net/sowgro/npehero/main/Settings.java b/src/main/java/net/sowgro/npehero/main/Settings.java
index c79f90f..aa94f54 100755
--- a/src/main/java/net/sowgro/npehero/main/Settings.java
+++ b/src/main/java/net/sowgro/npehero/main/Settings.java
@@ -4,6 +4,7 @@ import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
+import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
@@ -11,14 +12,20 @@ import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import javafx.beans.property.SimpleBooleanProperty;
import javafx.beans.property.SimpleDoubleProperty;
+import javafx.scene.paint.Color;
import net.sowgro.npehero.Driver;
public class Settings
{
+ public static final Color[] DEFAULT_DEFAULT_COLORS = {Color.RED,Color.BLUE,Color.GREEN,Color.PURPLE,Color.YELLOW};
+
public static SimpleDoubleProperty effectsVol = new SimpleDoubleProperty(1);
public static SimpleDoubleProperty musicVol = new SimpleDoubleProperty(1);
public static SimpleBooleanProperty enableMenuMusic = new SimpleBooleanProperty(true);
public static SimpleDoubleProperty guiScale = new SimpleDoubleProperty(1);
+ public static Color[] defaultColors = Arrays.copyOf(DEFAULT_DEFAULT_COLORS, 5);
+ public static boolean forceDefaultColors = false;
+ public static double gameOpacity = 0.0;
private static final Gson jsonParser = new GsonBuilder().serializeNulls().setPrettyPrinting().create();
private static final File jsonFile = new File(Driver.BASE_DIR, "settings.json");
@@ -36,6 +43,13 @@ public class Settings
musicVol.set((Double) data.getOrDefault("musicVol", 1.0));
enableMenuMusic.set((Boolean) data.getOrDefault("enableMenuMusic", true));
guiScale.set((Double) data.getOrDefault("guiScale", 1.0));
+ defaultColors[0] = colorGetOrDefault(data, "colorOverride1", defaultColors[0]);
+ defaultColors[1] = colorGetOrDefault(data, "colorOverride2", defaultColors[1]);
+ defaultColors[2] = colorGetOrDefault(data, "colorOverride3", defaultColors[2]);
+ defaultColors[3] = colorGetOrDefault(data, "colorOverride4", defaultColors[3]);
+ defaultColors[4] = colorGetOrDefault(data, "colorOverride5", defaultColors[4]);
+ forceDefaultColors = (Boolean) data.getOrDefault("enableColorOverride", false);
+ gameOpacity = (Double) data.getOrDefault("gameOpacity", gameOpacity);
}
/**
@@ -47,8 +61,23 @@ public class Settings
data.put("musicVol", musicVol.get());
data.put("enableMenuMusic", enableMenuMusic.get());
data.put("guiScale", guiScale.get());
+ data.put("colorOverride1", defaultColors[0].toString());
+ data.put("colorOverride2", defaultColors[1].toString());
+ data.put("colorOverride3", defaultColors[2].toString());
+ data.put("colorOverride4", defaultColors[3].toString());
+ data.put("colorOverride5", defaultColors[4].toString());
+ data.put("enableColorOverride", forceDefaultColors);
+ data.put("gameOpacity", gameOpacity);
FileWriter fileWriter = new FileWriter(jsonFile);
jsonParser.toJson(data, fileWriter);
fileWriter.close();
}
+
+ public static Color colorGetOrDefault(Map<String, Object> source, String key, Color defaultValue) {
+ try {
+ return Color.web((String) source.getOrDefault(key, defaultValue));
+ } catch (Exception e) {
+ return null;
+ }
+ }
}