diff options
Diffstat (limited to 'Plugins/MonoGame.Extended/source/MonoGame.Extended.Content.Pipeline/Animations')
6 files changed, 142 insertions, 0 deletions
diff --git a/Plugins/MonoGame.Extended/source/MonoGame.Extended.Content.Pipeline/Animations/AstridAnimatorAnimation.cs b/Plugins/MonoGame.Extended/source/MonoGame.Extended.Content.Pipeline/Animations/AstridAnimatorAnimation.cs new file mode 100644 index 0000000..14638d4 --- /dev/null +++ b/Plugins/MonoGame.Extended/source/MonoGame.Extended.Content.Pipeline/Animations/AstridAnimatorAnimation.cs @@ -0,0 +1,24 @@ +using System.Collections.Generic; + +namespace MonoGame.Extended.Content.Pipeline.Animations +{ + public class AstridAnimatorAnimation + { + public string Name { get; set; } + public int FramesPerSecond { get; set; } + public List<string> Frames { get; set; } + public bool IsLooping { get; set; } + public bool IsReversed { get; set; } + public bool IsPingPong { get; set; } + + public AstridAnimatorAnimation(string name, int framesPerSecond) + { + Name = name; + FramesPerSecond = framesPerSecond; + Frames = new List<string>(); + IsLooping = true; + IsReversed = false; + IsPingPong = false; + } + } +}
\ No newline at end of file diff --git a/Plugins/MonoGame.Extended/source/MonoGame.Extended.Content.Pipeline/Animations/AstridAnimatorFile.cs b/Plugins/MonoGame.Extended/source/MonoGame.Extended.Content.Pipeline/Animations/AstridAnimatorFile.cs new file mode 100644 index 0000000..765f2f2 --- /dev/null +++ b/Plugins/MonoGame.Extended/source/MonoGame.Extended.Content.Pipeline/Animations/AstridAnimatorFile.cs @@ -0,0 +1,15 @@ +using System.Collections.Generic; + +namespace MonoGame.Extended.Content.Pipeline.Animations +{ + public class AstridAnimatorFile + { + public string TextureAtlas { get; set; } + public List<AstridAnimatorAnimation> Animations { get; set; } + + public AstridAnimatorFile() + { + Animations = new List<AstridAnimatorAnimation>(); + } + } +}
\ No newline at end of file diff --git a/Plugins/MonoGame.Extended/source/MonoGame.Extended.Content.Pipeline/Animations/AstridAnimatorImporter.cs b/Plugins/MonoGame.Extended/source/MonoGame.Extended.Content.Pipeline/Animations/AstridAnimatorImporter.cs new file mode 100644 index 0000000..855a0d3 --- /dev/null +++ b/Plugins/MonoGame.Extended/source/MonoGame.Extended.Content.Pipeline/Animations/AstridAnimatorImporter.cs @@ -0,0 +1,18 @@ +using System.IO; +using System.Text.Json; +using Microsoft.Xna.Framework.Content.Pipeline; + +namespace MonoGame.Extended.Content.Pipeline.Animations +{ + [ContentImporter(".aa", DefaultProcessor = "AstridAnimatorProcessor", + DisplayName = "Astrid Animator Importer - MonoGame.Extended")] + public class AstridAnimatorImporter : ContentImporter<ContentImporterResult<AstridAnimatorFile>> + { + public override ContentImporterResult<AstridAnimatorFile> Import(string filename, ContentImporterContext context) + { + var json = File.ReadAllText(filename); + var data = JsonSerializer.Deserialize<AstridAnimatorFile>(json); + return new ContentImporterResult<AstridAnimatorFile>(filename, data); + } + } +} diff --git a/Plugins/MonoGame.Extended/source/MonoGame.Extended.Content.Pipeline/Animations/AstridAnimatorProcessor.cs b/Plugins/MonoGame.Extended/source/MonoGame.Extended.Content.Pipeline/Animations/AstridAnimatorProcessor.cs new file mode 100644 index 0000000..e22d65b --- /dev/null +++ b/Plugins/MonoGame.Extended/source/MonoGame.Extended.Content.Pipeline/Animations/AstridAnimatorProcessor.cs @@ -0,0 +1,24 @@ +using System.IO; +using System.Linq; +using Microsoft.Xna.Framework.Content.Pipeline; + +namespace MonoGame.Extended.Content.Pipeline.Animations +{ + [ContentProcessor(DisplayName = "Astrid Animator Processor - MonoGame.Extended")] + public class AstridAnimatorProcessor : + ContentProcessor<ContentImporterResult<AstridAnimatorFile>, AstridAnimatorProcessorResult> + { + public override AstridAnimatorProcessorResult Process(ContentImporterResult<AstridAnimatorFile> input, + ContentProcessorContext context) + { + var data = input.Data; + var directory = Path.GetDirectoryName(input.FilePath); + var frames = data.Animations + .SelectMany(i => i.Frames) + .OrderBy(f => f) + .Distinct(); + + return new AstridAnimatorProcessorResult(directory, data, frames); + } + } +}
\ No newline at end of file diff --git a/Plugins/MonoGame.Extended/source/MonoGame.Extended.Content.Pipeline/Animations/AstridAnimatorProcessorResult.cs b/Plugins/MonoGame.Extended/source/MonoGame.Extended.Content.Pipeline/Animations/AstridAnimatorProcessorResult.cs new file mode 100644 index 0000000..de92ec3 --- /dev/null +++ b/Plugins/MonoGame.Extended/source/MonoGame.Extended.Content.Pipeline/Animations/AstridAnimatorProcessorResult.cs @@ -0,0 +1,21 @@ +using System.Collections.Generic; +using System.IO; + +namespace MonoGame.Extended.Content.Pipeline.Animations +{ + public class AstridAnimatorProcessorResult + { + public string TextureAtlasAssetName { get; private set; } + public string Directory { get; private set; } + public AstridAnimatorFile Data { get; private set; } + public List<string> Frames { get; private set; } + + public AstridAnimatorProcessorResult(string directory, AstridAnimatorFile data, IEnumerable<string> frames) + { + Directory = directory; + Data = data; + Frames = new List<string>(frames); + TextureAtlasAssetName = Path.GetFileNameWithoutExtension(data.TextureAtlas); + } + } +}
\ No newline at end of file diff --git a/Plugins/MonoGame.Extended/source/MonoGame.Extended.Content.Pipeline/Animations/AstridAnimatorWriter.cs b/Plugins/MonoGame.Extended/source/MonoGame.Extended.Content.Pipeline/Animations/AstridAnimatorWriter.cs new file mode 100644 index 0000000..6f56f3f --- /dev/null +++ b/Plugins/MonoGame.Extended/source/MonoGame.Extended.Content.Pipeline/Animations/AstridAnimatorWriter.cs @@ -0,0 +1,40 @@ +using Microsoft.Xna.Framework.Content.Pipeline; +using Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler; + +namespace MonoGame.Extended.Content.Pipeline.Animations +{ + [ContentTypeWriter] + public class AstridAnimatorWriter : ContentTypeWriter<AstridAnimatorProcessorResult> + { + public override string GetRuntimeReader(TargetPlatform targetPlatform) + { + return "MonoGame.Extended.Animations.SpriteSheets.SpriteSheetAnimationFactoryReader, MonoGame.Extended.Animations"; + } + + protected override void Write(ContentWriter writer, AstridAnimatorProcessorResult input) + { + var data = input.Data; + + writer.Write(input.TextureAtlasAssetName); + writer.Write(input.Frames.Count); + + foreach (var frame in input.Frames) + writer.Write(frame); + + writer.Write(data.Animations.Count); + + foreach (var animation in data.Animations) + { + writer.Write(animation.Name); + writer.Write(animation.FramesPerSecond); + writer.Write(animation.IsLooping); + writer.Write(animation.IsReversed); + writer.Write(animation.IsPingPong); + writer.Write(animation.Frames.Count); + + foreach (var frame in animation.Frames) + writer.Write(input.Frames.IndexOf(frame)); + } + } + } +}
\ No newline at end of file |