internal static void Write(ContentWriter writer, LayerContent content) { if (content is GridLayerContent) { GridLayerContent gridLayer = content as GridLayerContent; writer.Write("g"); writer.Write(gridLayer.Name); if (gridLayer.RectangleData != null && gridLayer.RectangleData.Count > 0) { writer.Write(gridLayer.RectangleData.Count); foreach (Rectangle rect in gridLayer.RectangleData) { writer.Write(rect.X); writer.Write(rect.Y); writer.Write(rect.Width); writer.Write(rect.Height); } } else if (!string.IsNullOrEmpty(gridLayer.RawData)) { writer.Write(gridLayer.RawData); } } else if (content is TileLayerContent) { TileLayerContent tileLayer = content as TileLayerContent; writer.Write("t"); writer.Write(tileLayer.Name); writer.Write(tileLayer.TileHeight); writer.Write(tileLayer.TileWidth); writer.Write(tileLayer.Tilesets.Count); if (tileLayer.Tilesets.Count > 0) { foreach (string tileset in tileLayer.Tilesets) { writer.Write(tileset); } } writer.Write(tileLayer.Tiles.Count); if (tileLayer.Tiles.Count > 0) { foreach (TileContent tile in tileLayer.Tiles) { writer.Write(tile.Height); writer.Write(tile.Position); writer.Write(tile.SourceIndex); writer.Write(tile.TextureOffset); writer.Write(tile.TilesetName); writer.Write(tile.Width); } } } else if (content is ObjectLayerContent) { ObjectLayerContent objLayer = content as ObjectLayerContent; writer.Write("o"); writer.Write(objLayer.Name); writer.Write(objLayer.Objects.Count); if (objLayer.Objects.Count > 0) { foreach (ObjectContent obj in objLayer.Objects) { writer.Write(obj.Name); writer.Write(obj.Origin); writer.Write(obj.Position); writer.Write(obj.Rotation); writer.Write(obj.Width); writer.Write(obj.Height); writer.Write(obj.Source.X); writer.Write(obj.Source.Y); writer.Write(obj.Source.Width); writer.Write(obj.Source.Height); writer.Write(obj.IsTiled); writer.WriteExternalReference(obj.TextureReference); writer.Write(obj.Values.Count); if (obj.Values.Count > 0) { foreach (ValueContent valueContent in obj.Values) { ValueContentWriter.Write(writer, valueContent); } } writer.Write(obj.Nodes.Count); if (obj.Nodes.Count > 0) { foreach (OgmoXNAPipelineExtensions.ContentItems.NodeContent nodeContent in obj.Nodes) { writer.Write(nodeContent.Position); } } } } } }
public LevelContent(ProjectContent project, XmlDocument document) { this.Project = project; XmlNode levelNode = document["level"]; // Level values/attributes foreach (ValueTemplateContent value in project.Values) { XmlNode attribute = null; if ((attribute = levelNode.Attributes[value.Name]) != null) { if (value is BooleanValueTemplateContent) this.Values.Add(new BooleanValueContent(value.Name, bool.Parse(attribute.Value))); else if (value is IntegerValueTemplateContent) this.Values.Add(new IntegerValueContent(value.Name, int.Parse(attribute.Value, CultureInfo.InvariantCulture))); else if (value is NumberValueTemplateContent) this.Values.Add(new NumberValueContent(value.Name, float.Parse(attribute.Value, CultureInfo.InvariantCulture))); else if (value is StringValueTemplateContent) this.Values.Add(new StringValueContent(value.Name, attribute.Value)); } } // Height this.Height = int.Parse(levelNode.SelectSingleNode("height").InnerText, CultureInfo.InvariantCulture); // Width this.Width = int.Parse(levelNode.SelectSingleNode("width").InnerText, CultureInfo.InvariantCulture); // Layers // Here we'll construct an XPath query of all possible layer names so we can just extract the nodes all // at once. string[] layerNames = (from x in project.LayerSettings select x.Name).ToArray<string>(); string layerXPath = string.Join("|", layerNames); foreach (XmlNode layerNode in levelNode.SelectNodes(layerXPath)) { // Attempt to extract the settings for this layer. LayerSettingsContent[] s = (from x in project.LayerSettings where x.Name.Equals(layerNode.Name) select x).ToArray<LayerSettingsContent>(); if (!(s.Length > 0)) continue; LayerSettingsContent layerSettings = s[0]; // We have a grid layer. if (layerSettings is GridLayerSettingsContent) { GridLayerSettingsContent settings = layerSettings as GridLayerSettingsContent; GridLayerContent gridLayer = new GridLayerContent(layerNode, this, settings); if (gridLayer != null) this.Layers.Add(gridLayer); } else if (layerSettings is TileLayerSettingsContent) { TileLayerSettingsContent settings = layerSettings as TileLayerSettingsContent; TileLayerContent tileLayer = new TileLayerContent(layerNode, this, settings); if (tileLayer != null) this.Layers.Add(tileLayer); } else if (layerSettings is ObjectLayerSettingsContent) { ObjectLayerContent objectLayer = new ObjectLayerContent(layerNode, this); if(objectLayer != null) this.Layers.Add(objectLayer); } } }