aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/devmenu/DebugMenu.java (renamed from src/gui/DebugMenu.java)10
-rw-r--r--src/devmenu/DiffEditor.java51
-rw-r--r--src/devmenu/LevelEditor.java77
-rw-r--r--src/devmenu/LevelList.java54
-rw-r--r--src/devmenu/NotesEditor.java50
-rw-r--r--src/gui/Driver.java2
-rw-r--r--src/gui/LevelDetails.java2
-rw-r--r--src/main/Difficulty.java43
-rw-r--r--src/main/Level.java145
-rw-r--r--src/main/LevelController.java90
10 files changed, 426 insertions, 98 deletions
diff --git a/src/gui/DebugMenu.java b/src/devmenu/DebugMenu.java
index 1ee85c0..9b68423 100644
--- a/src/gui/DebugMenu.java
+++ b/src/devmenu/DebugMenu.java
@@ -1,7 +1,9 @@
-package gui;
+package devmenu;
+import gui.Driver;
import javafx.scene.Scene;
import javafx.scene.control.Button;
+import javafx.scene.control.TextField;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
@@ -17,6 +19,10 @@ public class DebugMenu
VBox primaryPane = new VBox();
public DebugMenu()
{
+ Button levelCreator = new Button();
+ levelCreator.setText("LEVEL CREATOR");
+ levelCreator.setOnAction(e -> new LevelList());
+
Button wallpaperTest = new Button();
wallpaperTest.setText("wallpaper trees");
wallpaperTest.setOnAction(e -> Driver.setBackground("assets/trees.png"));
@@ -33,7 +39,7 @@ public class DebugMenu
testVol.setText("print volumes");
testVol.setOnAction(e -> System.out.println("sfx:"+Driver.settingsController.effectsVol+" msc:"+Driver.settingsController.musicVol));
- primaryPane.getChildren().addAll(wallpaperTest,wallpaperTest2,wallpaperTest3,testVol);
+ primaryPane.getChildren().addAll(levelCreator,wallpaperTest,wallpaperTest2,wallpaperTest3,testVol);
Scene primaryScene = new Scene(primaryPane);
primaryStage.setScene(primaryScene);
diff --git a/src/devmenu/DiffEditor.java b/src/devmenu/DiffEditor.java
new file mode 100644
index 0000000..278e3de
--- /dev/null
+++ b/src/devmenu/DiffEditor.java
@@ -0,0 +1,51 @@
+package devmenu;
+
+import javafx.scene.Scene;
+import javafx.scene.control.Button;
+import javafx.scene.control.TextField;
+import javafx.scene.layout.VBox;
+import javafx.scene.text.Text;
+import javafx.stage.Stage;
+import main.Difficulty;
+
+public class DiffEditor
+{
+ public DiffEditor(Difficulty diff)
+ {
+ Text folderNameLabel = new Text("Folder name (ordered alphabetically)");
+ TextField folderName = new TextField(diff.thisDir.getName());
+
+ Text titleLabel = new Text("Title");
+ TextField title = new TextField(diff.title);
+
+ Text bpmLabel = new Text("BPM");
+ TextField bpm = new TextField(diff.bpm+"");
+
+ Text numBeatsLabel = new Text("Number of beats");
+ TextField numBeats = new TextField(diff.numBeats+"");
+
+ Button editNotes = new Button("Edit notes");
+ editNotes.setOnAction(e -> new NotesEditor(diff));
+
+ Button editScores = new Button("Edit leaderboard");
+
+ Button save = new Button("Save");
+ save.setOnAction(e -> {
+ diff.title = title.getText();
+ diff.bpm = Integer.parseInt(bpm.getText());
+ diff.numBeats = Integer.parseInt(numBeats.getText());
+ if(! diff.thisDir.getName().equals(folderName.getText()));
+ {
+ //will rename
+ }
+ diff.writeMetadata();
+ });
+
+ VBox main = new VBox();
+ main.getChildren().addAll(folderNameLabel,folderName,titleLabel,title,bpmLabel,bpm,numBeatsLabel,numBeats,editNotes,editScores,save);
+ Scene scene = new Scene(main);
+ Stage primaryStage = new Stage();
+ primaryStage.setScene(scene);
+ primaryStage.show();
+ }
+} \ No newline at end of file
diff --git a/src/devmenu/LevelEditor.java b/src/devmenu/LevelEditor.java
new file mode 100644
index 0000000..00a21a3
--- /dev/null
+++ b/src/devmenu/LevelEditor.java
@@ -0,0 +1,77 @@
+package devmenu;
+
+import javafx.beans.value.ChangeListener;
+import javafx.beans.value.ObservableValue;
+import javafx.collections.FXCollections;
+import javafx.collections.ObservableList;
+import javafx.scene.Scene;
+import javafx.scene.control.Button;
+import javafx.scene.control.ColorPicker;
+import javafx.scene.control.ListView;
+import javafx.scene.control.TextField;
+import javafx.scene.layout.HBox;
+import javafx.scene.layout.VBox;
+import javafx.scene.text.Text;
+import javafx.stage.Stage;
+import main.Difficulty;
+import main.Level;
+
+public class LevelEditor
+{
+ public LevelEditor(Level level)
+ {
+ Text folderNameLabel = new Text("Folder name");
+ TextField folderName = new TextField(level.thisDir.getName());
+
+ Text titleLabel = new Text("Title");
+ TextField title = new TextField(level.getTitle());
+
+ Text artistLabel = new Text("Artist");
+ TextField artist = new TextField(level.getArtist());
+
+ Text descLabel = new Text("Description");
+ TextField desc = new TextField(level.desc);
+
+ Text colorsLabel = new Text("Colors (Left to right)");
+ ColorPicker c1 = new ColorPicker(level.colors[0]);
+ ColorPicker c2 = new ColorPicker(level.colors[1]);
+ ColorPicker c3 = new ColorPicker(level.colors[2]);
+ ColorPicker c4 = new ColorPicker(level.colors[3]);
+ ColorPicker c5 = new ColorPicker(level.colors[4]);
+
+ ObservableList diffList2 = FXCollections.observableArrayList();
+ diffList2.addAll(level.getDiffList());
+ ListView<Difficulty> diffList = new ListView();
+ diffList.setItems(diffList2);
+ diffList.setOnMouseClicked(e -> new DiffEditor(diffList.getSelectionModel().getSelectedItem()));
+
+ Text diffLabel = new Text("Difficulties");
+
+ TextField newDiff = new TextField("new");
+ Button newDiffButton = new Button("add");
+ newDiffButton.setOnAction(e -> level.addDiff(newDiff.getText()));
+ HBox newDiffBox = new HBox();
+ newDiffBox.getChildren().addAll(newDiff,newDiffButton);
+
+ Button save = new Button("Save");
+ save.setOnAction(e -> {
+ level.setTitle(title.getText());
+ level.setArtist(artist.getText());
+ level.desc = desc.getText();
+ level.colors[0] = c1.getValue();
+ level.colors[1] = c2.getValue();
+ level.colors[2] = c3.getValue();
+ level.colors[3] = c4.getValue();
+ level.colors[4] = c5.getValue();
+ level.writeMetadata();
+ });
+
+ VBox main = new VBox();
+ main.getChildren().addAll(folderNameLabel,folderName,titleLabel,title,artistLabel,artist,descLabel,desc,colorsLabel,c1,c2,c3,c4,c5,diffLabel,diffList,newDiffBox,save);
+
+ Stage primaryStage = new Stage();
+ Scene scene = new Scene(main);
+ primaryStage.setScene(scene);
+ primaryStage.show();
+ }
+} \ No newline at end of file
diff --git a/src/devmenu/LevelList.java b/src/devmenu/LevelList.java
new file mode 100644
index 0000000..e3dec7f
--- /dev/null
+++ b/src/devmenu/LevelList.java
@@ -0,0 +1,54 @@
+package devmenu;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.PrintWriter;
+import java.io.UnsupportedEncodingException;
+
+import gui.Driver;
+import javafx.beans.value.ChangeListener;
+import javafx.beans.value.ObservableValue;
+import javafx.scene.Scene;
+import javafx.scene.control.Button;
+import javafx.scene.control.TableColumn;
+import javafx.scene.control.TableView;
+import javafx.scene.control.TextField;
+import javafx.scene.control.cell.PropertyValueFactory;
+import javafx.scene.layout.HBox;
+import javafx.scene.layout.VBox;
+import javafx.stage.Stage;
+import main.Level;
+
+public class LevelList
+{
+ Stage primaryStage = new Stage();
+ public LevelList()
+ {
+ //sets up table view: requires special getters, setters and constructors to work
+ TableView<Level> levels = new TableView<Level>();
+
+ TableColumn<Level,String> titleCol = new TableColumn<Level,String>("Title");
+ TableColumn<Level,String> artistCol = new TableColumn<Level,String>("Artist");
+
+ levels.getColumns().add(titleCol);
+ levels.getColumns().add(artistCol);
+
+ titleCol.setCellValueFactory(new PropertyValueFactory<Level, String>("title"));
+ artistCol.setCellValueFactory(new PropertyValueFactory<Level, String>("artist"));
+
+ levels.setItems(Driver.levelController.levelList);
+ levels.setOnMouseClicked(e -> new LevelEditor(levels.getSelectionModel().getSelectedItem()));
+
+ TextField newLevel = new TextField("new");
+ Button newLevelButton = new Button("add");
+ newLevelButton.setOnAction(e -> Driver.levelController.addLevel(newLevel.getText()));
+ HBox newLevelBox = new HBox();
+ newLevelBox.getChildren().addAll(newLevel,newLevelButton);
+
+ VBox main = new VBox();
+ main.getChildren().addAll(levels,newLevelBox);
+ Scene scene = new Scene(main);
+ primaryStage.setScene(scene);
+ primaryStage.show();
+ }
+} \ No newline at end of file
diff --git a/src/devmenu/NotesEditor.java b/src/devmenu/NotesEditor.java
new file mode 100644
index 0000000..5f26890
--- /dev/null
+++ b/src/devmenu/NotesEditor.java
@@ -0,0 +1,50 @@
+package devmenu;
+
+import java.io.File;
+
+import gameplay.Timer;
+import javafx.scene.Scene;
+import javafx.scene.control.Button;
+import javafx.scene.layout.HBox;
+import javafx.scene.text.Text;
+import javafx.stage.Stage;
+import main.Difficulty;
+import sound.AudioFilePlayer;
+
+public class NotesEditor
+{
+ Difficulty diff;
+ AudioFilePlayer music;
+ Timer timer;
+ public NotesEditor(Difficulty diff)
+ {
+ this.diff = diff;
+
+ Text timerDisplay = new Text("TIMER");
+
+ Button start = new Button("Start");
+ start.setOnAction(e -> start());
+
+ Button stop = new Button("Stop");
+ stop.setOnAction(e -> stop());
+
+ HBox main = new HBox();
+ main.getChildren().addAll(timerDisplay,start,stop);
+
+ Scene scene = new Scene(main);
+ Stage primaryStage = new Stage();
+ primaryStage.setScene(scene);
+ primaryStage.show();
+ }
+
+ private void start()
+ {
+ music = new AudioFilePlayer(new File(diff.thisDir, "song.wav").toPath().toString());
+ timer = new Timer(diff.bpm);
+ }
+
+ private void stop()
+ {
+
+ }
+} \ No newline at end of file
diff --git a/src/gui/Driver.java b/src/gui/Driver.java
index 68a703a..fdfe323 100644
--- a/src/gui/Driver.java
+++ b/src/gui/Driver.java
@@ -25,6 +25,8 @@ import main.LevelController;
import main.SettingsController;
import org.json.simple.parser.ParseException;
+import devmenu.DebugMenu;
+
public class Driver extends Application
{
diff --git a/src/gui/LevelDetails.java b/src/gui/LevelDetails.java
index c9ab72b..a415d74 100644
--- a/src/gui/LevelDetails.java
+++ b/src/gui/LevelDetails.java
@@ -84,7 +84,7 @@ public class LevelDetails extends VBox
FlowPane diffSelector = new FlowPane();
diffSelector.setAlignment(Pos.CENTER);
ToggleGroup diffToggleGroup = new ToggleGroup(); //allows only one to be selected at a time
- for (Difficulty diff : level.diffList) //adds a button for each diff
+ for (Difficulty diff : level.getDiffList()) //adds a button for each diff
{
RadioButton temp = new RadioButton();
temp.getStyleClass().remove("radio-button"); //makes the buttons not look like a radio button and instead a normal button
diff --git a/src/main/Difficulty.java b/src/main/Difficulty.java
index 8420886..2c74956 100644
--- a/src/main/Difficulty.java
+++ b/src/main/Difficulty.java
@@ -16,6 +16,7 @@ import javafx.collections.ObservableList;
public class Difficulty
{
+ public File thisDir;
public String title;
private ObservableList<LeaderboardEntry> leaderboard = FXCollections.observableArrayList();
public File notes;
@@ -24,8 +25,37 @@ public class Difficulty
public int numBeats;
private File leaderboardFile;
+ public Difficulty(File file)
+ {
+ thisDir = file;
+ readData();
+ }
+
+ public void readData()
+ {
+ for(File cur: thisDir.listFiles()) //iterates through all files/folders in src/assets/levels/LEVEL/DIFFICULTY
+ {
+ if (cur.getName().equals("metadata.json"))
+ {
+ parseMetadata(cur);
+ }
+ if (cur.getName().equals("leaderboard.json"))
+ {
+ parseLeaderboard(cur);
+ }
+ if (cur.getName().equals("notes.txt"))
+ {
+ notes = cur;
+ }
+ if (cur.getName().equals("song.wav"))
+ {
+ song = cur;
+ }
+ }
+ }
+
- public void parseMetadata(File file) throws FileNotFoundException, IOException
+ public void parseMetadata(File file)
{
JSONParser jsonParser = new JSONParser(); //parser to read the file
@@ -46,7 +76,7 @@ public class Difficulty
}
}
- public void parseLeaderboard(File file) throws FileNotFoundException, IOException
+ public void parseLeaderboard(File file)
{
leaderboardFile = file;
JSONParser jsonParser = new JSONParser(); //parser to read the file
@@ -103,4 +133,13 @@ public class Difficulty
{
return leaderboard;
}
+
+ public String toString()
+ {
+ return title;
+ }
+
+ public void writeMetadata() {
+
+ }
}
diff --git a/src/main/Level.java b/src/main/Level.java
index 66fe243..95d6b5d 100644
--- a/src/main/Level.java
+++ b/src/main/Level.java
@@ -12,47 +12,62 @@ import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
+import gui.Driver;
+
public class Level
{
- public Image preview; //optional
+ public File thisDir;
private String title;
private String artist;
- public String desc;
- public ArrayList<Difficulty> diffList = new ArrayList<Difficulty>();
+ private ArrayList<Difficulty> diffList;
+ public Image preview; //optional
+ public String desc;
public Image background; //optional
public Color[] colors;//optional, have default colors
- public Color c1;
- public Color c2;
- public Color c3;
- public Color c4;
- public Color c5;
-
- private JSONObject levelStuff;
- public void setColors(Color... newColors)
+ public Level(File dir)
{
- colors = newColors;
+ thisDir = dir;
+ readData();
}
- public String getTitle()
+ public void readData()
{
- return title;
- }
+ diffList = new ArrayList<Difficulty>();
+ for(File cur: thisDir.listFiles()) //iterates through all files/folders in src/assets/levels/LEVEL
+ {
+ if (cur.isDirectory()) //all subfolders within a level folder are difficulties
+ {
+ Difficulty diff = new Difficulty(cur);
+ diffList.add(diff);
+ }
- public String getArtist()
- {
- return artist;
+ if (cur.getName().equals("preview.png"))
+ {
+ preview = new Image(cur.toURI().toString());
+ }
+
+ if (cur.getName().equals("metadata.json"))
+ {
+ parseMetadata();
+ }
+
+ if (cur.getName().equals("background.png"))
+ {
+ background = new Image(cur.toURI().toString());
+ }
+ }
}
- public void parseMetadata(File file)
+ public void parseMetadata()
{
JSONParser jsonParser = new JSONParser(); //parser to read the file
- try(FileReader reader = new FileReader(file))
+ try(FileReader reader = new FileReader(new File(thisDir, "metadata.json")))
{
Object obj = jsonParser.parse(reader);
-
+ JSONObject levelStuff = new JSONObject();
levelStuff = (JSONObject)(obj); //converts read object to a JSONObject
title = (String)(levelStuff.get("title"));
@@ -63,34 +78,88 @@ public class Level
{
colors = new Color[5];
- c1 = Color.web((String)(levelStuff.get("color1"))); //read in all the custom colors
- c2 = Color.web((String)(levelStuff.get("color2")));
- c3 = Color.web((String)(levelStuff.get("color3")));
- c4 = Color.web((String)(levelStuff.get("color4")));
- c5 = Color.web((String)(levelStuff.get("color5")));
-
- colors[0] = c1;
- colors[1] = c2;
- colors[2] = c3;
- colors[3] = c4;
- colors[4] = c5;
+ colors[0] = Color.web((String)(levelStuff.get("color1"))); //read in all the custom colors
+ colors[1] = Color.web((String)(levelStuff.get("color2")));
+ colors[2] = Color.web((String)(levelStuff.get("color3")));
+ colors[3] = Color.web((String)(levelStuff.get("color4")));
+ colors[4] = Color.web((String)(levelStuff.get("color5")));
}
else
{
colors = new Color[]{Color.RED,Color.BLUE,Color.GREEN,Color.PURPLE,Color.YELLOW};
}
}
- catch (FileNotFoundException e)
+ catch (Exception e)
{
e.printStackTrace();
}
- catch (IOException e)
- {
- e.printStackTrace();
- }
- catch (ParseException e)
+ }
+
+ public void writeMetadata()
+ {
+ FileWriter fileWriter;
+ try
{
+ fileWriter = new FileWriter(new File(thisDir, "metadata.json"));
+ JSONObject obj = new JSONObject();
+ obj.put("title", title);
+ obj.put("artist", artist);
+ obj.put("desc", desc);
+ obj.put("color1",colors[0]);
+ obj.put("color2",colors[1]);
+ obj.put("color3",colors[2]);
+ obj.put("color4",colors[3]);
+ obj.put("color5",colors[4]);
+ obj.writeJSONString(fileWriter);
+ }
+ catch (IOException e) {
e.printStackTrace();
}
}
+
+ public ArrayList<Difficulty> getDiffList()
+ {
+ return diffList;
+ }
+
+ public void addDiff(String text)
+ {
+ File diffDir = new File(thisDir, text);
+ diffDir.mkdirs();
+ File metadataDir = new File(diffDir, "metadata.json");
+ try {
+ metadataDir.createNewFile();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ readData();
+ }
+
+ public void removeDiff(Difficulty diff)
+ {
+ //soon
+ }
+
+ public void renameDiff(Difficulty diff, String newName)
+ {
+ //soon
+ }
+
+ public String getTitle()
+ {
+ return title;
+ }
+
+ public void setTitle(String title) {
+ this.title = title;
+ }
+
+ public String getArtist()
+ {
+ return artist;
+ }
+
+ public void setArtist(String artist) {
+ this.artist = artist;
+ }
}
diff --git a/src/main/LevelController.java b/src/main/LevelController.java
index 3abf810..eff512d 100644
--- a/src/main/LevelController.java
+++ b/src/main/LevelController.java
@@ -5,70 +5,50 @@ import java.io.IOException;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
-import javafx.scene.image.Image;
public class LevelController
{
- public static ObservableList<Level> levelList = FXCollections.observableArrayList();
+ File thisDir = new File("levels");
+ public static ObservableList<Level> levelList;
public LevelController()
{
- for (File curFileInLevels: new File("levels").listFiles()) //iterates through all files/folders in src/assets/levels
+ readData();
+ }
+
+ public void readData()
+ {
+ levelList = FXCollections.observableArrayList();
+ for (File cur: thisDir.listFiles()) //iterates through all files/folders in levels
{
- Level level = new Level();
- for(File curFileInCurLevel: curFileInLevels.listFiles()) //iterates through all files/folders in src/assets/levels/LEVEL
- {
- if (curFileInCurLevel.isDirectory()) //all subfolders within a level folder are difficulties
- {
- Difficulty diff = new Difficulty();
- for(File curFileInCurDiff: curFileInCurLevel.listFiles()) //iterates through all files/folders in src/assets/levels/LEVEL/DIFFICULTY
- {
- if (curFileInCurDiff.getName().equals("metadata.json"))
- {
- try {
- diff.parseMetadata(curFileInCurDiff);
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- if (curFileInCurDiff.getName().equals("leaderboard.json"))
- {
- try {
- diff.parseLeaderboard(curFileInCurDiff);
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- if (curFileInCurDiff.getName().equals("notes.txt"))
- {
- diff.notes = curFileInCurDiff;
- }
- if (curFileInCurDiff.getName().equals("song.wav"))
- {
- diff.song = curFileInCurDiff;
- }
- }
- level.diffList.add(diff);
- }
+ Level level = new Level(cur);
+ levelList.add(level);
+ }
+ }
- if (curFileInCurLevel.getName().equals("preview.png"))
- {
- level.preview = new Image(curFileInCurLevel.toURI().toString());
- }
+ public void addLevel(String text)
+ {
+ File levelDir = new File(thisDir,text);
+ levelDir.mkdirs();
+ File metadataDir = new File(levelDir, "metadata.json");
+ try
+ {
+ metadataDir.createNewFile();
+ }
+ catch (IOException e)
+ {
+ e.printStackTrace();
+ }
+ readData();
+ }
- if (curFileInCurLevel.getName().equals("metadata.json"))
- {
- level.parseMetadata(curFileInCurLevel);
- }
+ public void removeLevel(Level level)
+ {
+ //soon
+ }
- if (curFileInCurLevel.getName().equals("background.png"))
- {
- level.background = new Image(curFileInCurLevel.toURI().toString());
- }
- }
- levelList.add(level);
- }
+ public void renameLevel(Level level, String newName)
+ {
+ //soon
}
} \ No newline at end of file