diff options
Diffstat (limited to 'Plugins/MonoGame.Extended/source/MonoGame.Extended.Content.Pipeline/Tiled/TiledMapTilesetImporter.cs')
-rw-r--r-- | Plugins/MonoGame.Extended/source/MonoGame.Extended.Content.Pipeline/Tiled/TiledMapTilesetImporter.cs | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/Plugins/MonoGame.Extended/source/MonoGame.Extended.Content.Pipeline/Tiled/TiledMapTilesetImporter.cs b/Plugins/MonoGame.Extended/source/MonoGame.Extended.Content.Pipeline/Tiled/TiledMapTilesetImporter.cs new file mode 100644 index 0000000..c848bde --- /dev/null +++ b/Plugins/MonoGame.Extended/source/MonoGame.Extended.Content.Pipeline/Tiled/TiledMapTilesetImporter.cs @@ -0,0 +1,60 @@ +using Microsoft.Xna.Framework.Content.Pipeline; +using System; +using System.IO; +using System.Xml.Serialization; +using MonoGame.Extended.Tiled.Serialization; + +namespace MonoGame.Extended.Content.Pipeline.Tiled +{ + [ContentImporter(".tsx", DefaultProcessor = "TiledMapTilesetProcessor", DisplayName = "Tiled Map Tileset Importer - MonoGame.Extended")] + public class TiledMapTilesetImporter : ContentImporter<TiledMapTilesetContentItem> + { + public override TiledMapTilesetContentItem Import(string filePath, ContentImporterContext context) + { + try + { + if (filePath == null) + throw new ArgumentNullException(nameof(filePath)); + + ContentLogger.Logger = context.Logger; + ContentLogger.Log($"Importing '{filePath}'"); + + var tileset = DeserializeTiledMapTilesetContent(filePath, context); + + ContentLogger.Log($"Imported '{filePath}'"); + + return new TiledMapTilesetContentItem(tileset); + } + catch (Exception e) + { + context.Logger.LogImportantMessage(e.StackTrace); + throw; + } + } + + private TiledMapTilesetContent DeserializeTiledMapTilesetContent(string filePath, ContentImporterContext context) + { + using (var reader = new StreamReader(filePath)) + { + var tilesetSerializer = new XmlSerializer(typeof(TiledMapTilesetContent)); + var tileset = (TiledMapTilesetContent)tilesetSerializer.Deserialize(reader); + + if (tileset.Image is not null) + tileset.Image.Source = context.AddDependencyWithLogging(filePath, tileset.Image.Source); + + foreach (var tile in tileset.Tiles) + { + foreach (var obj in tile.Objects) + { + if (!string.IsNullOrWhiteSpace(obj.TemplateSource)) + obj.TemplateSource = context.AddDependencyWithLogging(filePath, obj.TemplateSource); + } + if (tile.Image is not null) + tile.Image.Source = context.AddDependencyWithLogging(filePath, tile.Image.Source); + } + + return tileset; + } + } + } +} |