/// <summary>
        /// Creates a new <see cref="TiledMapData"/> instance with data from a xml file.
        /// </summary>
        /// <param name="path">Absolute path to file</param>
        /// <returns>A populated <see cref="TiledMapData"/></returns>
        public static TiledMapData Load(string path)
        {
            // Declare a new serializer with our type
            XmlSerializer serializer = new XmlSerializer(typeof(TiledMapData));

            // Open file for reading
            using (FileStream stream = new FileStream(path, FileMode.Open)) {
                // Create reader, set settings and deserialize
                XmlReader reader = XmlReader.Create(stream);
                reader.Settings.IgnoreWhitespace = true;
                TiledMapData result = serializer.Deserialize(reader) as TiledMapData;

                // Check each tileset and read it from file if needed
                int count = 0;
                foreach (TiledTilesetData tileset in result.tilesets)
                {
                    if (Path.GetExtension(tileset.source) != ".tsx")
                    {
                        continue;
                    }

                    result.tilesets[count]          = TiledTilesetData.Load(Path.GetFullPath(path + "\\..\\" + tileset.source));
                    result.tilesets[count].firstgid = tileset.firstgid;
                    result.tilesets[count].source   = tileset.source;
                    count++;
                }

                // Convert csv data of each layer to an array
                foreach (TiledLayerData layer in result.layers)
                {
                    if (layer.data.encoding != "csv")
                    {
                        continue;
                    }

                    string[] tokens = layer.data.text.Split(',');
                    layer.data.gids = Array.ConvertAll(tokens, int.Parse);
                }

                return(result);
            }
        }
        bool DrawMapSelection()
        {
            bool foundFile = false;

            // Try loading mapdata from file
            try {
                // If everything is successful
                target.data = TiledMapData.Load(fullPath);
                EditorGUILayout.HelpBox("Using file: " + fullPath, MessageType.Info);
                foundFile = true;
            } catch (System.Exception) {
                // If the file can't be found
                EditorGUILayout.HelpBox("Can't find file: " + fullPath, MessageType.Error);
            }
            if (GUILayout.Button("Select File"))
            {
                // Lambda expression to avoid (redundant?) functions
                TiledMapSelectorWindow.SelectMap(x => target.relativePath = x);
            }

            return(foundFile);
        }