TiledObject.parse constructor

TiledObject.parse(
  1. Parser parser
)

Implementation

factory TiledObject.parse(Parser parser) {
  final x = parser.getDouble('x', defaults: 0);
  final y = parser.getDouble('y', defaults: 0);
  final height = parser.getDouble('height', defaults: 0);
  final width = parser.getDouble('width', defaults: 0);
  final rotation = parser.getDouble('rotation', defaults: 0);
  final visible = parser.getBool('visible', defaults: true);
  final id = parser.getInt('id');
  final gid = parser.getIntOrNull('gid');
  final name = parser.getString('name', defaults: '');

  // Tiled 1.9 and above versions running in compatibilty mode set to
  // "Tiled 1.8" will still write out "Class" property as "type". So try both
  // before using default value.
  final type = parser.getString(
    'class',
    defaults: parser.getString('type', defaults: ''),
  );

  final ellipse = parser.formatSpecificParsing(
    (json) => json.getBool('ellipse'),
    (xml) => xml.getChildren('ellipse').isNotEmpty,
  );
  final point = parser.formatSpecificParsing(
    (json) => json.getBool('point'),
    (xml) => xml.getChildren('point').isNotEmpty,
  );
  final text = parser.getSingleChildOrNullAs('text', Text.parse);
  final template = parser.getSingleChildOrNullAs('template', Template.parse);
  final properties = parser.getProperties();

  final polygon = parsePointList(parser, 'polygon');
  final polyline = parsePointList(parser, 'polyline');

  final rectangle = polyline.isEmpty && polygon.isEmpty && !ellipse && !point;

  return TiledObject(
    id: id,
    name: name,
    type: type,
    gid: gid,
    x: x,
    y: y,
    width: width,
    height: height,
    rotation: rotation,
    ellipse: ellipse,
    point: point,
    rectangle: rectangle,
    template: template,
    text: text,
    visible: visible,
    polygon: polygon,
    polyline: polyline,
    properties: properties,
  );
}