/// <summary> /// Constructs a new instance of the <see cref="SetGraphic" /> class /// with properties loaded in from XML /// </summary> /// <param name="xml">XML to read the properties from</param> public SetGraphic(XmlNode xml) : base(GraphicType.Set, xml) { if (xml == null) { throw new ArgumentNullException(nameof(xml)); } // Create graphics Graphics = new List <BaseGraphic>(); foreach (XmlNode graphicXML in xml.ChildNodes) { // Create the graphic BaseGraphic graphic = null; switch (graphicXML.Attributes["type"].Value) { case "animated": graphic = new AnimatedGraphic(graphicXML); break; case "static": graphic = new StaticGraphic(graphicXML); break; case "scrolling": graphic = new ScrollingGraphic(graphicXML); break; } // Add the graphic Graphics.Add(graphic); } }
/// <summary> /// Constructs a new instance of the <see cref="Level" /> class /// with properties populated from XML /// </summary> /// <param name="file">Full file path</param> /// <param name="xml">XML to read</param> public Level(string file, XmlDocument xml) : this() { if (xml == null) { throw new ArgumentNullException(nameof(xml)); } // Load the file name FileName = file; // Read the info section Name = xml.ChildNodes[0].ChildNodes[0].Attributes["name"].Value; // Read each graphic as a graphic element foreach (XmlNode graphicXML in xml.ChildNodes[0].ChildNodes[1].ChildNodes) { // Create the graphic BaseGraphic graphic = null; switch (graphicXML.Attributes["type"].Value) { case "animated": graphic = new AnimatedGraphic(graphicXML); break; case "static": graphic = new StaticGraphic(graphicXML); break; case "scrolling": graphic = new ScrollingGraphic(graphicXML); break; case "set": graphic = new SetGraphic(graphicXML); break; } // Add the graphic Graphics.Add(graphic); } // Read entity as an entity element foreach (XmlNode entityXML in xml.ChildNodes[0].ChildNodes[2].ChildNodes) { // Read backgrounds directly and move on if (entityXML.Attributes["type"].Value == "background" || entityXML.Attributes["type"].Value == "player" || entityXML.Attributes["type"].Value == "turret") { Ignorables.Add(entityXML.OuterXml); continue; } // Must have a graphic string graphicID = entityXML.Attributes["graphic"].Value; if (String.IsNullOrWhiteSpace(graphicID)) { continue; } // Must have a graphic that exists BaseGraphic graphic = Graphics.FirstOrDefault(g => g.ID == graphicID); if (graphic == null) { continue; } // Create the entity Entity entity = new Entity(entityXML, graphic.GetSize()); // Add the entity Entities.Add(entity); } // Order the entities in the desired order Entities = Entities.OrderBy(e => e.Delay.HasValue ? e.Delay.Value : 0) .ThenBy(e => e.Type).ToList(); }