/**
   * 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;
        }
      }
    }
  }