aboutsummaryrefslogtreecommitdiff
path: root/src/main/LevelController.java
blob: 07ea3f868342f814eb97d8cbc4a904b91f30ae18 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
package main;

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.Comparator;

import javafx.collections.FXCollections;
import javafx.collections.ObservableList;

public class LevelController
{
    File thisDir = new File("levels");
    private static ObservableList<Level> levelList;
    private static ObservableList<Level> validLevelList;

    /**
     * Creates a levelController, which holds all the levels
     */
    public LevelController()
    {
        readData();
    }

    /**
     * Reads contents of folder and creates cooresponding levels
     */
    public void readData()
    {
        levelList = FXCollections.observableArrayList();
        validLevelList = FXCollections.observableArrayList();
        for (File cur: thisDir.listFiles()) //iterates through all files/folders in levels
        {
            Level level = new Level(cur);
            level.readData();
            levelList.add(level);
            if (level.isValid())
            {
                validLevelList.add(level);
            }
        }
    }

    /**
     * Adds a level to the list by creating a directory and required files
     * @param text: the name of the directory and default title
     */
    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();
        }
        Level temp = new Level(levelDir);
        temp.setTitle(text);
        temp.writeMetadata();
        readData();
    }

    /**
     * Removes level from the filesystem then reloads this levelController
     * @param level: the level to be removed
     */
    public void removeLevel(Level level)
    {
        File hold = level.thisDir;
        levelList.remove(level);

        try {
            Files.walk(hold.toPath())
            .sorted(Comparator.reverseOrder())
            .map(Path::toFile)
            .forEach(File::delete);
        } catch (IOException e) {
            e.printStackTrace();
        }
        readData();
    }

    public static ObservableList<Level> getLevelList() {
        return levelList;
    }

    public static ObservableList<Level> getValidLevelList() {
        return validLevelList;
    }
}