コード例 #1
0
ファイル: Layer.java プロジェクト: GameDevWeek/GDW-2015-SS
  /**
   * 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;
  }
コード例 #2
0
  /**
   * 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;
        }
      }
    }
  }