diff options
author | sowgro <tpoke.ferrari@gmail.com> | 2024-10-18 00:25:28 -0400 |
---|---|---|
committer | sowgro <tpoke.ferrari@gmail.com> | 2024-10-18 00:25:28 -0400 |
commit | b3cc60eba7f1bc646c0cc6356a338fcfeb0ee0f5 (patch) | |
tree | 3fa547dce2fc1a3a7a8fa36c6449848960628b54 | |
parent | 28ade1fce71064db5c95a0d69fe94e3097042e36 (diff) | |
download | NPEhero-dev2.tar.gz NPEhero-dev2.tar.bz2 NPEhero-dev2.zip |
Add default color customizationdev2
-rwxr-xr-x | .npehero/settings.json | 2 | ||||
-rw-r--r-- | pom.xml | 4 | ||||
-rwxr-xr-x | src/main/java/net/sowgro/npehero/editor/DiffEditor.java | 1 | ||||
-rwxr-xr-x | src/main/java/net/sowgro/npehero/editor/LevelEditor.java | 47 | ||||
-rw-r--r-- | src/main/java/net/sowgro/npehero/editor/NotesEditor2.java | 39 | ||||
-rwxr-xr-x | src/main/java/net/sowgro/npehero/gameplay/Block.java | 2 | ||||
-rwxr-xr-x | src/main/java/net/sowgro/npehero/gameplay/SongPlayer.java | 7 | ||||
-rwxr-xr-x | src/main/java/net/sowgro/npehero/gui/LevelSurround.java | 9 | ||||
-rwxr-xr-x | src/main/java/net/sowgro/npehero/gui/SettingsEditor.java | 177 | ||||
-rwxr-xr-x | src/main/java/net/sowgro/npehero/levelapi/Level.java | 31 | ||||
-rwxr-xr-x | src/main/java/net/sowgro/npehero/main/Settings.java | 29 |
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 @@ -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; + } + } } |