ColorRunner/core/src/de/samdev/colorrunner/game/world/map/CRTiledMap.java

98 lines
2.7 KiB
Java

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<Element> 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;
}
}
}