summaryrefslogtreecommitdiff
path: root/Plugins/MonoGame.Extended/source/MonoGame.Extended.Content.Pipeline/Tiled/TiledMapObjectTemplateImporter.cs
blob: eeddcaac8821483ddb539c76769ddb64da55e13c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
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(".tx", DefaultProcessor = "TiledMapObjectTemplateProcessor", DisplayName = "Tiled Map Object Template Importer - MonoGame.Extended")]
	public class TiledMapObjectTemplateImporter : ContentImporter<TiledMapObjectTemplateContent>
	{
		public override TiledMapObjectTemplateContent Import(string filePath, ContentImporterContext context)
		{
			try
			{
				if (filePath == null)
					throw new ArgumentNullException(nameof(filePath));

				ContentLogger.Logger = context.Logger;
				ContentLogger.Log($"Importing '{filePath}'");

				var template = DeserializeTileMapObjectTemplateContent(filePath, context);

				ContentLogger.Log($"Imported '{filePath}'");

				return template;
			}
			catch (Exception e)
			{
				context.Logger.LogImportantMessage(e.StackTrace);
				return null;
			}
		}

		private static TiledMapObjectTemplateContent DeserializeTileMapObjectTemplateContent(string filePath, ContentImporterContext context)
		{
			using (var reader = new StreamReader(filePath))
			{
				var templateSerializer = new XmlSerializer(typeof(TiledMapObjectTemplateContent));
				var template = (TiledMapObjectTemplateContent)templateSerializer.Deserialize(reader);

				if (!string.IsNullOrWhiteSpace(template.Tileset?.Source))
				{
                    template.Tileset.Source = Path.Combine(Path.GetDirectoryName(filePath), template.Tileset.Source);
                    ContentLogger.Log($"Adding dependency '{template.Tileset.Source}'");
					// We depend on this tileset.
					context.AddDependency(template.Tileset.Source);
				}

				return template;
			}
		}
	}
}