package de.samdev.colorrunner.game.world.map; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.utils.Array; import com.badlogic.gdx.utils.XmlReader; import com.badlogic.gdx.utils.XmlReader.Element; import de.samdev.colorrunner.game.world.CRGameWorld; import de.samdev.colorrunner.game.world.entities.StaticEntity; import de.samdev.colorrunner.game.world.entities.gameentities.floor.DownStateFloorTileEntity; import de.samdev.colorrunner.game.world.entities.gameentities.floor.LeftStateFloorTileEntity; import de.samdev.colorrunner.game.world.entities.gameentities.floor.NoStateFloorTileEntity; import de.samdev.colorrunner.game.world.entities.gameentities.floor.RightStateFloorTileEntity; import de.samdev.colorrunner.game.world.entities.gameentities.floor.UpStateFloorTileEntity; public class CRTiledMap { public final static int GID_EMPTY_1 = 0; public final static int GID_EMPTY_2 = 1; public final static int GID_MID = 13; public final static int GID_UP = 8; public final static int GID_RIGHT = 14; public final static int GID_DOWN = 18; public final static int GID_LEFT = 12; public int width; public int height; public int[][] map; public String name; public static CRTiledMap load(String name, String inputXmlString) { CRTiledMap result = new CRTiledMap(); XmlReader reader = new XmlReader(); Element root = reader.parse(inputXmlString); Element elemLayer = root.getChildByName("layer"); Element elemData = elemLayer.getChildByName("data"); Array tiles = elemData.getChildrenByName("tile"); int width = elemLayer.getInt("width"); int height = elemLayer.getInt("height"); result.map = new int[width][height]; result.width = width; result.height = height; result.name = name; for (int i = 0; i < tiles.size; i++) { result.map[i % width][i / width] = tiles.get(i).getInt("gid"); } return result; } public int getWidth() { return width; } public int getHeight() { return height; } public int getGID(int x, int y) { return map[x][y]; } public static StaticEntity CreateTile(CRGameWorld world, int id, float px, float py) { switch (id) { case CRTiledMap.GID_EMPTY_1: case CRTiledMap.GID_EMPTY_2: return null; case CRTiledMap.GID_UP: return new UpStateFloorTileEntity(world, px, py); case CRTiledMap.GID_RIGHT: return new RightStateFloorTileEntity(world, px, py); case CRTiledMap.GID_DOWN: return new DownStateFloorTileEntity(world, px, py); case CRTiledMap.GID_LEFT: return new LeftStateFloorTileEntity(world, px, py); case CRTiledMap.GID_MID: return new NoStateFloorTileEntity(world, px, py); default: Gdx.app.error("MapLoad", "Unknown GID: " + id); return null; } } }