package vooga.towerdefense.gameeditor.gameloader.xmlloaders; import java.util.ArrayList; import java.util.List; import java.util.Map; import org.w3c.dom.Element; import util.XMLTool; import vooga.towerdefense.action.Action; import vooga.towerdefense.model.GameMap; import vooga.towerdefense.model.GameModel; import vooga.towerdefense.model.Player; import vooga.towerdefense.model.levels.Level; import vooga.towerdefense.model.rules.Rule; /** * This class is responsible for loading Level objects * from an XML file. * * @author Erick Gonzalez */ public class LevelsXMLLoader { private static final String LEVELS_TAG = "levels"; private static final String ACTIONS_TAG = "actions"; private static final String RULES_TAG = "rules"; private XMLTool myXMLTool; /** * * @param xmlTool an XMLTool containing the xml document */ public LevelsXMLLoader(XMLTool xmlTool) { myXMLTool = xmlTool; } /** * Loads a list of level objects. * * @param model a game model * @param gameMap a game map * @param player a player object * @return a list of level objects */ public List<Level> loadLevels(GameModel model, GameMap gameMap, Player player) { // TODO: Levels element needs to be passed in here Element levelsElement = myXMLTool.getElement(LEVELS_TAG); List<Level> levels = new ArrayList<Level>(); List<Element> subElements = myXMLTool.getChildrenList(levelsElement); for (Element subElement : subElements) { levels.add(loadLevel(subElement, model, gameMap, player)); } return levels; } private Level loadLevel(Element levelElement, GameModel model, GameMap gameMap, Player player) { RulesXMLLoader rulesLoader = new RulesXMLLoader(myXMLTool); ActionXMLLoader actionLoader = new ActionXMLLoader(myXMLTool); Map<String, Element> subElements = myXMLTool.getChildrenElementMap(levelElement); List<Rule> rules = rulesLoader.getRules(model, subElements.get(RULES_TAG)); List<Action> actions = actionLoader.loadActions(subElements.get(ACTIONS_TAG), gameMap, player); return new Level(actions, rules); } }