/** * Load all tiles from the layer * * @param element the layer element * @return an array containing all tile information of this layer * @throws IOException * @throws Exception */ private TileInfo[][] loadTiles(TmxLayer element) throws IOException, Exception { List<Integer> ids = element.getData().getIds(); int id = 0; TileInfo[][] result = new TileInfo[width][height]; for (int y = 0; y < height; y++) { for (int x = 0; x < width; x++) { int tileId = ids.get(id++); if (tileId == 0) { result[x][y] = null; } else { TileSet set = map.findTileSet(tileId); if (set != null) { result[x][y] = new TileInfo( set.getIndex(), tileId - set.getFirstGID(), tileId, set.getTileProperties(tileId)); } else { result[x][y] = new TileInfo(0, 0, tileId, null); } } } } return result; }
/** * Create a new layer object * * @param node The xml node storing the information we need */ LayerObject(TiledMap map, TmxObject node, PolyMode polyMode) { this.node = node; properties = node.getProperties(); if (node.getPolygon() != null) { primitive = Primitive.POLYGON; } else if (node.getPolyline() != null) { primitive = Primitive.POLYLINE; } else if (node.getGid() != null) { primitive = Primitive.TILE; } else if (node.getWidth() == null || node.getHeight() == null) { primitive = Primitive.POINT; } else { primitive = Primitive.RECT; } x = (int) node.getX(); y = (int) node.getY(); width = (node.getWidth() == null) ? 0 : node.getWidth().intValue(); height = (node.getHeight() == null) ? 0 : node.getHeight().intValue(); if (primitive == Primitive.POLYGON || primitive == Primitive.POLYLINE) { TmxPointList pointsNode = node.getPolygon(); if (pointsNode == null) { pointsNode = node.getPolyline(); } String[] numbers = pointsNode.getPoints().split("[\\s,]"); points = new ArrayList(); lowestX = 0; lowestY = 0; for (int i = 0; i < numbers.length; i += 2) { int px = Integer.parseInt(numbers[i]); int py = Integer.parseInt(numbers[i + 1]); points.add(new Point(px, py)); if (px < lowestX) { lowestX = px; } if (py < lowestY) { lowestY = py; } } if (polyMode == PolyMode.RELATIVE_TO_TOPLEFT && (lowestX < 0 || lowestY < 0)) { for (Point p : points) { p.x += -lowestX; p.y += -lowestY; } x -= -lowestX; y -= -lowestY; } else if (polyMode == PolyMode.ABSOLUTE) { int dx = (int) node.getX(); int dy = (int) node.getY(); for (Point p : points) { p.x += dx; p.y += dy; } x = 0; y = 0; } lowestX += node.getX(); lowestY += node.getY(); } else { points = null; lowestX = (int) node.getX(); lowestY = (int) node.getY(); if (primitive == Primitive.TILE) { TileSet set = map.findTileSet(node.getGid()); if (set != null) { width = set.getTileWidth(); height = set.getTileHeight(); if (properties == null) { properties = new SafeProperties(); } properties.setDefaults(set.getTileProperties(node.getGid())); lowestY -= height; } } } }