private static Tileset ReadTileset(XmlReader reader, Tileset result) { result.Name = reader.GetAttribute("name"); result.TileWidth = int.Parse(reader.GetAttribute("tilewidth")); result.TileHeight = int.Parse(reader.GetAttribute("tileheight")); int currentTileId = -1; while (reader.Read()) { var name = reader.Name; switch (reader.NodeType) { case XmlNodeType.Element: switch (name) { case "image": result.Image = reader.GetAttribute("source"); break; case "tile": currentTileId = int.Parse(reader.GetAttribute("id")); break; case "property": { TilePropertyList props; if (!result.TileProperties.TryGetValue(currentTileId, out props)) { props = new TilePropertyList(); result.TileProperties[currentTileId] = props; } props[reader.GetAttribute("name")] = reader.GetAttribute("value"); } break; } break; case XmlNodeType.EndElement: break; } } return(result); }