diff options
-rw-r--r-- | src/devmenu/DebugMenu.java (renamed from src/gui/DebugMenu.java) | 10 | ||||
-rw-r--r-- | src/devmenu/DiffEditor.java | 51 | ||||
-rw-r--r-- | src/devmenu/LevelEditor.java | 77 | ||||
-rw-r--r-- | src/devmenu/LevelList.java | 54 | ||||
-rw-r--r-- | src/devmenu/NotesEditor.java | 50 | ||||
-rw-r--r-- | src/gui/Driver.java | 2 | ||||
-rw-r--r-- | src/gui/LevelDetails.java | 2 | ||||
-rw-r--r-- | src/main/Difficulty.java | 43 | ||||
-rw-r--r-- | src/main/Level.java | 145 | ||||
-rw-r--r-- | src/main/LevelController.java | 90 |
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 |