public Map Load(Stream stream) { XmlTextReader xmlReader = new XmlTextReader(stream); xmlReader.WhitespaceHandling = WhitespaceHandling.None; XmlHelper xmlHelper = new XmlHelper(xmlReader); xmlHelper.AdvanceDeclaration(); xmlHelper.AdvanceStartElement("map"); string orientation = xmlHelper.GetAttribute("orientation"); if (orientation != "orthogonal") throw new Exception("Only orthogonal Tiled maps are supported."); int mapWidth = xmlHelper.GetIntAttribute("width"); int mapHeight = xmlHelper.GetIntAttribute("height"); int tileWidth = xmlHelper.GetIntAttribute("tilewidth"); int tileHeight = xmlHelper.GetIntAttribute("tileheight"); Map map = new Map(); while (true) { XmlNodeType xmlNodeType = xmlHelper.AdvanceNode(); if (xmlNodeType == XmlNodeType.EndElement) break; if (xmlReader.Name == "properties") LoadProperties(xmlHelper, map); else if (xmlReader.Name == "tileset") LoadTileSet(xmlHelper, map); else if (xmlReader.Name == "layer") LoadLayer(xmlHelper, map); else xmlHelper.SkipToEndElement(xmlReader.Name); } // try to obtain map description via custom property if (map.Properties.ContainsKey("@Description")) map.Description = map.Properties["@Description"]; return map; }