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"));
        }