package vooga.towerdefense.model.tiles.factories; import java.util.HashMap; import org.w3c.dom.Element; import util.Location; import util.XMLTool; import vooga.towerdefense.model.GameMap; import vooga.towerdefense.model.Tile; import vooga.towerdefense.model.tiles.VersaTile; import vooga.towerdefense.util.Pixmap; /** * Creates tiles from an XML element handed in to this class by the MapEditor. * * @author Yoshida */ public class XMLTileFactory extends TileFactory { private static final String TILE_IMAGES_CLASS_PATH = "/vooga/towerdefense/images/map/"; private static final String IMGFILE_TAG = "image"; private static final String NAME_TAG = "name"; private static final String WALKABLE_TAG = "walkable"; private static final String BUILDABLE_TAG = "buildable"; private static final String XML_TRUE = "yes"; private String myName; private String myID; private Pixmap myImage; private XMLTool myXMLTool; private HashMap<String, String> myData; /** * The constructor of this class sets the data read from an XML element using the XMLTool. * @param tool XMLTool from utility * @param tileElement XML element containing the tile data * @param id The id of the tile in the XML file map data. */ public XMLTileFactory(XMLTool tool, Element tileElement, String id) { myXMLTool = tool; myID = id; setData(tileElement); } private void setData (Element tileElement) { myData = (HashMap<String, String>) myXMLTool.getChildrenStringMap(tileElement); myName = myData.get(NAME_TAG); myImage = new Pixmap(TILE_IMAGES_CLASS_PATH + myData.get(IMGFILE_TAG)); } @Override public String getName () { return myName; } @Override public Tile createTile (Location center, GameMap map) { VersaTile tile = new VersaTile(myImage, center, map.getTileSize()); tile.setName(myName); tile.setTileBuildable(myData.get(BUILDABLE_TAG).equals(XML_TRUE)); tile.setTileWalkable(myData.get(WALKABLE_TAG).equals(XML_TRUE)); return tile; } @Override public String getTileId () { return myID; } }