package de.fau.cs.mad.fly.profile; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.files.FileHandle; import com.badlogic.gdx.utils.JsonReader; import com.badlogic.gdx.utils.JsonValue; import de.fau.cs.mad.fly.I18n; /** * Manage read all levels and level group from json files, nothing more. * * * @author Qufang Fan */ public class LevelGroupManager { private static String LEVEL_FOLDER = "levels/"; private LevelGroupManager() { loadLevelGroups(LEVEL_FOLDER); } /** * Comparator for the level groups. */ private Comparator<LevelGroup> levelGroupComparator = new Comparator<LevelGroup>() { @Override public int compare(LevelGroup first, LevelGroup second) { if (first.id < second.id) { return -1; } else if (first.id > second.id) { return 1; } return 0; } }; private static LevelGroupManager instance; public static LevelGroupManager getInstance() { return instance; } /** * Creates the level manager singleton instance. */ public static void createLevelManager() { instance = new LevelGroupManager(); } /** * List of level groups. */ private List<LevelGroup> levelGroups = null; /** * Reads the main folder for the level and opens the sub directories to * create level groups. * * @param folder * The main folder for the levels. */ private void loadLevelGroups(String folder) { if (levelGroups != null) return; levelGroups = new ArrayList<LevelGroup>(); JsonReader reader = new JsonReader(); FileHandle dirHandle = Gdx.files.internal(folder); FileHandle handle = dirHandle.child("groups.json"); if (handle != null) { JsonValue json = reader.parse(handle); JsonValue groups = json.get("groups"); if (groups != null) { for (int i = 0; i < groups.size; i++) { LevelGroup group = new LevelGroup(); JsonValue groupJS = groups.get(i); group.id = groupJS.getInt("id"); group.name = I18n.t(groupJS.getString("name")); group.path = LEVEL_FOLDER + groupJS.getString("path"); levelGroups.add(group); } } } Collections.sort(levelGroups, levelGroupComparator); } /** * Getter) for the level group list. * * @return list of level groups. */ public List<LevelGroup> getLevelGroups() { if (levelGroups == null) { this.loadLevelGroups(LEVEL_FOLDER); } return levelGroups; } public LevelGroup getLevelGroup(int id) { for (LevelGroup group : getLevelGroups()) { if (group.id == id) return group; } return null; } public int getLastGroupID(){ return getLevelGroups().get(getLevelGroups().size()-1).id; } public LevelGroup getLastGroup(){ return getLevelGroups().get(getLevelGroups().size()-1); } }