From acea7b2e728787a0d83bbf83c8c1f042d2c32e7e Mon Sep 17 00:00:00 2001 From: chai <215380520@qq.com> Date: Mon, 3 Jun 2024 10:15:45 +0800 Subject: + plugins project --- .../TextureAtlases/TexturePackerJsonImporter.cs | 18 +++++++++ .../TextureAtlases/TexturePackerProcessor.cs | 24 ++++++++++++ .../TextureAtlases/TexturePackerProcessorResult.cs | 9 +++++ .../TextureAtlases/TexturePackerWriter.cs | 45 ++++++++++++++++++++++ 4 files changed, 96 insertions(+) create mode 100644 Plugins/MonoGame.Extended/source/MonoGame.Extended.Content.Pipeline/TextureAtlases/TexturePackerJsonImporter.cs create mode 100644 Plugins/MonoGame.Extended/source/MonoGame.Extended.Content.Pipeline/TextureAtlases/TexturePackerProcessor.cs create mode 100644 Plugins/MonoGame.Extended/source/MonoGame.Extended.Content.Pipeline/TextureAtlases/TexturePackerProcessorResult.cs create mode 100644 Plugins/MonoGame.Extended/source/MonoGame.Extended.Content.Pipeline/TextureAtlases/TexturePackerWriter.cs (limited to 'Plugins/MonoGame.Extended/source/MonoGame.Extended.Content.Pipeline/TextureAtlases') diff --git a/Plugins/MonoGame.Extended/source/MonoGame.Extended.Content.Pipeline/TextureAtlases/TexturePackerJsonImporter.cs b/Plugins/MonoGame.Extended/source/MonoGame.Extended.Content.Pipeline/TextureAtlases/TexturePackerJsonImporter.cs new file mode 100644 index 0000000..a80e654 --- /dev/null +++ b/Plugins/MonoGame.Extended/source/MonoGame.Extended.Content.Pipeline/TextureAtlases/TexturePackerJsonImporter.cs @@ -0,0 +1,18 @@ +using System.IO; +using System.Text.Json; +using Microsoft.Xna.Framework.Content.Pipeline; +using MonoGame.Extended.TextureAtlases; + + +namespace MonoGame.Extended.Content.Pipeline.TextureAtlases +{ + [ContentImporter(".json", DefaultProcessor = "TexturePackerProcessor", DisplayName = "TexturePacker JSON Importer - MonoGame.Extended")] + public class TexturePackerJsonImporter : ContentImporter + { + public override TexturePackerFile Import(string filename, ContentImporterContext context) + { + var json = File.ReadAllText(filename); + return JsonSerializer.Deserialize(json); + } + } +} diff --git a/Plugins/MonoGame.Extended/source/MonoGame.Extended.Content.Pipeline/TextureAtlases/TexturePackerProcessor.cs b/Plugins/MonoGame.Extended/source/MonoGame.Extended.Content.Pipeline/TextureAtlases/TexturePackerProcessor.cs new file mode 100644 index 0000000..1f14ee7 --- /dev/null +++ b/Plugins/MonoGame.Extended/source/MonoGame.Extended.Content.Pipeline/TextureAtlases/TexturePackerProcessor.cs @@ -0,0 +1,24 @@ +using System; +using Microsoft.Xna.Framework.Content.Pipeline; +using MonoGame.Extended.TextureAtlases; + +namespace MonoGame.Extended.Content.Pipeline.TextureAtlases +{ + [ContentProcessor(DisplayName = "TexturePacker Processor - MonoGame.Extended")] + public class TexturePackerProcessor : ContentProcessor + { + public override TexturePackerProcessorResult Process(TexturePackerFile input, ContentProcessorContext context) + { + try + { + var output = new TexturePackerProcessorResult {Data = input}; + return output; + } + catch (Exception ex) + { + context.Logger.LogMessage("Error {0}", ex); + throw; + } + } + } +} \ No newline at end of file diff --git a/Plugins/MonoGame.Extended/source/MonoGame.Extended.Content.Pipeline/TextureAtlases/TexturePackerProcessorResult.cs b/Plugins/MonoGame.Extended/source/MonoGame.Extended.Content.Pipeline/TextureAtlases/TexturePackerProcessorResult.cs new file mode 100644 index 0000000..a996259 --- /dev/null +++ b/Plugins/MonoGame.Extended/source/MonoGame.Extended.Content.Pipeline/TextureAtlases/TexturePackerProcessorResult.cs @@ -0,0 +1,9 @@ +using MonoGame.Extended.TextureAtlases; + +namespace MonoGame.Extended.Content.Pipeline.TextureAtlases +{ + public class TexturePackerProcessorResult + { + public TexturePackerFile Data { get; set; } + } +} \ No newline at end of file diff --git a/Plugins/MonoGame.Extended/source/MonoGame.Extended.Content.Pipeline/TextureAtlases/TexturePackerWriter.cs b/Plugins/MonoGame.Extended/source/MonoGame.Extended.Content.Pipeline/TextureAtlases/TexturePackerWriter.cs new file mode 100644 index 0000000..3fd15ff --- /dev/null +++ b/Plugins/MonoGame.Extended/source/MonoGame.Extended.Content.Pipeline/TextureAtlases/TexturePackerWriter.cs @@ -0,0 +1,45 @@ +using System.Diagnostics; +using System.IO; +using Microsoft.Xna.Framework.Content.Pipeline; +using Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler; + +namespace MonoGame.Extended.Content.Pipeline.TextureAtlases +{ + [ContentTypeWriter] + public class TexturePackerWriter : ContentTypeWriter + { + protected override void Write(ContentWriter writer, TexturePackerProcessorResult result) + { + var data = result.Data; + var metadata = data.Metadata; + + var assetName = Path.GetFileNameWithoutExtension(metadata.Image); + Debug.Assert(assetName != null, "assetName != null"); + + writer.Write(assetName); + writer.Write(data.Regions.Count); + + foreach (var region in data.Regions) + { + var regionName = Path.ChangeExtension(region.Filename, null); + Debug.Assert(regionName != null, "regionName != null"); + + writer.Write(regionName); + writer.Write(region.Frame.X); + writer.Write(region.Frame.Y); + writer.Write(region.Frame.Width); + writer.Write(region.Frame.Height); + } + } + + public override string GetRuntimeType(TargetPlatform targetPlatform) + { + return "MonoGame.Extended.TextureAtlases.TextureAtlas, MonoGame.Extended"; + } + + public override string GetRuntimeReader(TargetPlatform targetPlatform) + { + return "MonoGame.Extended.TextureAtlases.TextureAtlasReader, MonoGame.Extended"; + } + } +} \ No newline at end of file -- cgit v1.1-26-g67d0