public TmxObject(XMLReader xObject) { Id = xObject.AttributeInt("id"); Name = xObject.Attribute("name") ?? string.Empty; X = xObject.AttributeDouble("x"); Y = xObject.AttributeDouble("y"); Width = xObject.AttributeDouble("width"); Height = xObject.AttributeDouble("height"); Type = xObject.Attribute("type") ?? string.Empty; Visible = xObject.AttributeBoolN("visible") ?? true; Rotation = xObject.AttributeDouble("rotation"); // Assess object type and assign appropriate content uint?rawGid = xObject.AttributeUIntN("gid"); if (rawGid != null) { Gid = TmxHelpers.GetGidFlags((uint)rawGid, out HorizontalFlip, out VerticalFlip, out DiagonalFlip); } XMLReader xEllipse = xObject.Element("ellipse"); XMLReader xPolygon = xObject.Element("polygon"); XMLReader xPolyline = xObject.Element("polyline"); if (Gid != null) { ObjectType = TmxObjectType.Image; // In Tiled an image's X,Y coordinates represent the bottom-left corner of the image Y -= Height; } else if (xEllipse != null) { ObjectType = TmxObjectType.Ellipse; } else if (xPolygon != null) { Points = ParsePoints(xPolygon); ObjectType = TmxObjectType.Polygon; } else if (xPolyline != null) { List <Vector2> points = ParsePoints(xPolyline); Lines = new List <LineSegment>(points.Count / 2); for (var i = 0; i < points.Count; i++) { if (i + 1 < points.Count) { Lines.Add(new LineSegment(points[i], points[i + 1])); } } ObjectType = TmxObjectType.Polyline; } else { ObjectType = TmxObjectType.Basic; } XMLReader xText = xObject.Element("text"); if (xText != null) { Text = new TmxText(xText); } Properties = TmxHelpers.GetPropertyDict(xObject.Element("properties")); }
public TmxLayerTile(uint id) { Gid = TmxHelpers.GetGidFlags(id, out HorizontalFlip, out VerticalFlip, out DiagonalFlip); }