aboutsummaryrefslogtreecommitdiff
path: root/src/main/Level.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/Level.java')
-rw-r--r--src/main/Level.java120
1 files changed, 86 insertions, 34 deletions
diff --git a/src/main/Level.java b/src/main/Level.java
index 95d6b5d..cb16489 100644
--- a/src/main/Level.java
+++ b/src/main/Level.java
@@ -2,36 +2,43 @@ package main;
import java.io.File;
import java.util.ArrayList;
+import java.util.Comparator;
import javafx.scene.image.Image;
import javafx.scene.paint.Color;
import java.io.FileWriter;
-import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.StandardCopyOption;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
-import org.json.simple.parser.ParseException;
-
-import gui.Driver;
public class Level
{
public File thisDir;
- private String title;
- private String artist;
+ private String title = "Unnamed";
+ private String artist = "Unknown";
private ArrayList<Difficulty> diffList;
public Image preview; //optional
- public String desc;
+ public String desc = "No description";
public Image background; //optional
- public Color[] colors;//optional, have default colors
-
- public Level(File dir)
+ public Color[] colors = {Color.RED,Color.BLUE,Color.GREEN,Color.PURPLE,Color.YELLOW};//optional, have default colors
+ public File song;
+
+ /**
+ * Creates a new level and gives it a file path
+ * @param newDir: The path of the Level
+ */
+ public Level(File newDir)
{
- thisDir = dir;
- readData();
+ thisDir = newDir;
}
+ /**
+ * Checks for files in the level folder and runs cooresponding actions
+ */
public void readData()
{
diffList = new ArrayList<Difficulty>();
@@ -39,27 +46,32 @@ public class Level
{
if (cur.isDirectory()) //all subfolders within a level folder are difficulties
{
- Difficulty diff = new Difficulty(cur);
+ Difficulty diff = new Difficulty(cur,this);
+ diff.readData();
diffList.add(diff);
}
-
- if (cur.getName().equals("preview.png"))
- {
- preview = new Image(cur.toURI().toString());
- }
-
if (cur.getName().equals("metadata.json"))
{
parseMetadata();
}
-
+ if (cur.getName().equals("preview.png"))
+ {
+ preview = new Image(cur.toURI().toString());
+ }
if (cur.getName().equals("background.png"))
{
background = new Image(cur.toURI().toString());
}
+ if (cur.getName().equals("song.wav"))
+ {
+ song = cur;
+ }
}
}
+ /**
+ * Reads in json metadata and assigns values to variables
+ */
public void parseMetadata()
{
JSONParser jsonParser = new JSONParser(); //parser to read the file
@@ -95,6 +107,9 @@ public class Level
}
}
+ /**
+ * Writes metadata to json file
+ */
public void writeMetadata()
{
FileWriter fileWriter;
@@ -105,44 +120,81 @@ public class Level
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.put("color1",colors[0].toString());
+ obj.put("color2",colors[1].toString());
+ obj.put("color3",colors[2].toString());
+ obj.put("color4",colors[3].toString());
+ obj.put("color5",colors[4].toString());
obj.writeJSONString(fileWriter);
+ fileWriter.flush();
}
catch (IOException e) {
e.printStackTrace();
}
}
- public ArrayList<Difficulty> getDiffList()
- {
- return diffList;
- }
-
+ /**
+ * Adds a difficulty by creating a directory and required files
+ * @param text: the name of the directory and default title
+ */
public void addDiff(String text)
{
File diffDir = new File(thisDir, text);
diffDir.mkdirs();
File metadataDir = new File(diffDir, "metadata.json");
+ File leaderboardDir = new File(diffDir, "leaderboard.json");
+ File notesDir = new File(diffDir, "notes.txt");
try {
metadataDir.createNewFile();
+ leaderboardDir.createNewFile();
+ notesDir.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
+ Difficulty temp = new Difficulty(diffDir,this);
+ temp.title = text;
+ temp.writeMetadata();
+ temp.writeLeaderboard();
readData();
}
- public void removeDiff(Difficulty diff)
+ /**
+ * Removes the difficaulty from the filesystem then reloads the level
+ * @param diff: the difficulty to be removed
+ */
+ public void removeDiff(Difficulty diff)
+ {
+ File hold = diff.thisDir;
+ diffList.remove(diff);
+
+ try {
+ Files.walk(hold.toPath())
+ .sorted(Comparator.reverseOrder())
+ .map(Path::toFile)
+ .forEach(File::delete);
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+ /**
+ * Copies a file into the level directory
+ * @param newFile: the file to be copied
+ * @param name: the new file name
+ */
+ public void addFile(File newFile, String name)
{
- //soon
+ try {
+ Files.copy(newFile.toPath(), new File(thisDir, name).toPath(), StandardCopyOption.REPLACE_EXISTING);
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ readData();
}
- public void renameDiff(Difficulty diff, String newName)
+ public ArrayList<Difficulty> getDiffList()
{
- //soon
+ return diffList;
}
public String getTitle()