mirror of
https://github.com/AlexMacocian/MonoGame.Extended.git
synced 2026-07-21 01:39:32 +00:00
very nearly fully working json content reader
This commit is contained in:
@@ -75,6 +75,7 @@
|
||||
#begin Animations/zombie-atlas.json
|
||||
/importer:JsonContentImporter
|
||||
/processor:JsonContentProcessor
|
||||
/processorParam:ContentType=TextureAtlas
|
||||
/build:Animations/zombie-atlas.json
|
||||
|
||||
#begin Fonts/impact-32.fnt
|
||||
|
||||
@@ -1,11 +1,13 @@
|
||||
using System;
|
||||
using System.Linq;
|
||||
using Microsoft.Xna.Framework;
|
||||
using Microsoft.Xna.Framework.Content;
|
||||
using Microsoft.Xna.Framework.Graphics;
|
||||
using Microsoft.Xna.Framework.Input;
|
||||
using MonoGame.Extended;
|
||||
using MonoGame.Extended.Animations;
|
||||
using MonoGame.Extended.Animations.SpriteSheets;
|
||||
using MonoGame.Extended.Serialization;
|
||||
using MonoGame.Extended.Sprites;
|
||||
using MonoGame.Extended.TextureAtlases;
|
||||
|
||||
@@ -23,6 +25,8 @@ namespace Features.Demos
|
||||
|
||||
public AnimationsDemo(GameMain game) : base(game)
|
||||
{
|
||||
ContentTypeReaderManager.AddTypeCreator("TextureAtlas", () => new TextureAtlasJsonContentTypeReader());
|
||||
ContentTypeReaderManager.AddTypeCreator("Default", () => new JsonContentTypeReader<TexturePackerFile>());
|
||||
}
|
||||
|
||||
protected override void Initialize()
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using System;
|
||||
using System.ComponentModel;
|
||||
using Microsoft.Xna.Framework.Content.Pipeline;
|
||||
|
||||
namespace MonoGame.Extended.Content.Pipeline.Json
|
||||
@@ -6,11 +7,18 @@ namespace MonoGame.Extended.Content.Pipeline.Json
|
||||
[ContentProcessor(DisplayName = "JSON Processor - MonoGame.Extended")]
|
||||
public class JsonContentProcessor : ContentProcessor<ContentImporterResult<string>, JsonContentProcessorResult>
|
||||
{
|
||||
[DefaultValue(typeof(Type), "System.Object")]
|
||||
public string ContentType { get; set; }
|
||||
|
||||
public override JsonContentProcessorResult Process(ContentImporterResult<string> input, ContentProcessorContext context)
|
||||
{
|
||||
try
|
||||
{
|
||||
var output = new JsonContentProcessorResult { Json = input.Data };
|
||||
var output = new JsonContentProcessorResult
|
||||
{
|
||||
ContentType = ContentType,
|
||||
Json = input.Data
|
||||
};
|
||||
return output;
|
||||
}
|
||||
catch (Exception ex)
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
{
|
||||
public class JsonContentProcessorResult
|
||||
{
|
||||
public string ContentType { get; set; }
|
||||
public string Json { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -1,29 +1,27 @@
|
||||
using Microsoft.Xna.Framework.Content.Pipeline;
|
||||
using Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler;
|
||||
using MonoGame.Extended.Sprites;
|
||||
|
||||
namespace MonoGame.Extended.Content.Pipeline.Json
|
||||
{
|
||||
[ContentTypeWriter]
|
||||
public class JsonContentTypeWriter : ContentTypeWriter<JsonContentProcessorResult>
|
||||
{
|
||||
private string _runtimeType;
|
||||
|
||||
protected override void Write(ContentWriter writer, JsonContentProcessorResult result)
|
||||
{
|
||||
_runtimeType = result.ContentType;
|
||||
writer.Write(result.Json);
|
||||
}
|
||||
|
||||
public override string GetRuntimeReader(TargetPlatform targetPlatform)
|
||||
{
|
||||
return "MonoGame.Extended.Serialization.JsonContentTypeReader, MonoGame.Extended";
|
||||
return _runtimeType;// "MonoGame.Extended.Serialization.JsonContentTypeReader, MonoGame.Extended";
|
||||
}
|
||||
|
||||
public override string GetRuntimeType(TargetPlatform targetPlatform)
|
||||
{
|
||||
var type = typeof(Sprite);
|
||||
var readerType = type.Namespace + ".JsonContentTypeReader, " + type.AssemblyQualifiedName;
|
||||
return "GetRuntimeType";
|
||||
|
||||
//return typeof(object).AssemblyQualifiedName;// "MonoGame.Extended.Serialization.JsonContentTypeReader, MonoGame.Extended";
|
||||
return _runtimeType;// "MonoGame.Extended.Serialization.JsonContentTypeReader, MonoGame.Extended";
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -8,19 +8,9 @@ using Newtonsoft.Json;
|
||||
|
||||
namespace MonoGame.Extended.Serialization
|
||||
{
|
||||
public class JsonContentTypeReader : ContentTypeReader
|
||||
public class JsonContentTypeReader<T> : ContentTypeReader<T>
|
||||
{
|
||||
//protected override object Read(ContentReader input, object existingInstance)
|
||||
//{
|
||||
// var json = input.ReadString();
|
||||
// return null;
|
||||
//}
|
||||
|
||||
public JsonContentTypeReader() : base(typeof(TextureAtlas))
|
||||
{
|
||||
}
|
||||
|
||||
protected override object Read(ContentReader reader, object existingInstance)
|
||||
protected override T Read(ContentReader reader, T existingInstance)
|
||||
{
|
||||
var json = reader.ReadString();
|
||||
|
||||
@@ -28,32 +18,104 @@ namespace MonoGame.Extended.Serialization
|
||||
using (var jsonReader = new JsonTextReader(stringReader))
|
||||
{
|
||||
var serializer = new JsonSerializer();
|
||||
var texturePackerFile = serializer.Deserialize<TexturePackerFile>(jsonReader);
|
||||
|
||||
|
||||
var assetName = reader.GetRelativeAssetName(texturePackerFile.Metadata.Image);
|
||||
var texture = reader.ContentManager.Load<Texture2D>(assetName);
|
||||
var atlas = new TextureAtlas(assetName, texture);
|
||||
|
||||
var regionCount = texturePackerFile.Regions.Count;
|
||||
|
||||
for (var i = 0; i < regionCount; i++)
|
||||
{
|
||||
atlas.CreateRegion(
|
||||
ContentReaderExtensions.RemoveExtension(texturePackerFile.Regions[i].Filename),
|
||||
texturePackerFile.Regions[i].Frame.X,
|
||||
texturePackerFile.Regions[i].Frame.Y,
|
||||
texturePackerFile.Regions[i].Frame.Width,
|
||||
texturePackerFile.Regions[i].Frame.Height);
|
||||
}
|
||||
|
||||
return atlas;
|
||||
|
||||
|
||||
|
||||
|
||||
return texturePackerFile;
|
||||
return serializer.Deserialize<T>(jsonReader);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class TextureAtlasJsonContentTypeReader : JsonContentTypeReader<TextureAtlas>
|
||||
{
|
||||
private TexturePackerFile Load(ContentReader reader)
|
||||
{
|
||||
var json = reader.ReadString();
|
||||
|
||||
using (var stringReader = new StringReader(json))
|
||||
using (var jsonReader = new JsonTextReader(stringReader))
|
||||
{
|
||||
var serializer = new JsonSerializer();
|
||||
return serializer.Deserialize<TexturePackerFile>(jsonReader);
|
||||
}
|
||||
}
|
||||
|
||||
protected override TextureAtlas Read(ContentReader reader, TextureAtlas existingInstance)
|
||||
{
|
||||
var texturePackerFile = Load(reader);
|
||||
var assetName = reader.GetRelativeAssetName(texturePackerFile.Metadata.Image);
|
||||
var texture = reader.ContentManager.Load<Texture2D>(assetName);
|
||||
var atlas = new TextureAtlas(assetName, texture);
|
||||
|
||||
var regionCount = texturePackerFile.Regions.Count;
|
||||
|
||||
for (var i = 0; i < regionCount; i++)
|
||||
{
|
||||
atlas.CreateRegion(
|
||||
ContentReaderExtensions.RemoveExtension(texturePackerFile.Regions[i].Filename),
|
||||
texturePackerFile.Regions[i].Frame.X,
|
||||
texturePackerFile.Regions[i].Frame.Y,
|
||||
texturePackerFile.Regions[i].Frame.Width,
|
||||
texturePackerFile.Regions[i].Frame.Height);
|
||||
}
|
||||
|
||||
return atlas;
|
||||
}
|
||||
}
|
||||
|
||||
//public abstract class JsonContentTypeReader<TInput, TOutput> : ContentTypeReader<TOutput>
|
||||
//{
|
||||
// protected abstract TOutput OnDeserialize(ContentReader reader, TInput texturePackerFile);
|
||||
|
||||
// protected override TOutput Read(ContentReader reader, TOutput existingInstance)
|
||||
// {
|
||||
// var json = reader.ReadString();
|
||||
|
||||
// using (var stringReader = new StringReader(json))
|
||||
// using (var jsonReader = new JsonTextReader(stringReader))
|
||||
// {
|
||||
// var serializer = new JsonSerializer();
|
||||
// var input = serializer.Deserialize<TInput>(jsonReader);
|
||||
// return OnDeserialize(reader, input);
|
||||
// }
|
||||
// }
|
||||
//}
|
||||
|
||||
//public class JsonContentTypeReader : ContentTypeReader
|
||||
//{
|
||||
// public JsonContentTypeReader(string blah) : base(typeof(object))
|
||||
// {
|
||||
// }
|
||||
|
||||
// protected override void Initialize(ContentTypeReaderManager manager)
|
||||
// {
|
||||
// base.Initialize(manager);
|
||||
// }
|
||||
|
||||
// protected override object Read(ContentReader input, object existingInstance)
|
||||
// {
|
||||
// return null;
|
||||
// }
|
||||
//}
|
||||
|
||||
//public class TexturePackerJsonContentTypeReader : JsonContentTypeReader<TexturePackerFile, TextureAtlas>
|
||||
//{
|
||||
// protected override TextureAtlas OnDeserialize(ContentReader reader, TexturePackerFile texturePackerFile)
|
||||
// {
|
||||
// var assetName = reader.GetRelativeAssetName(texturePackerFile.Metadata.Image);
|
||||
// var texture = reader.ContentManager.Load<Texture2D>(assetName);
|
||||
// var atlas = new TextureAtlas(assetName, texture);
|
||||
|
||||
// var regionCount = texturePackerFile.Regions.Count;
|
||||
|
||||
// for (var i = 0; i < regionCount; i++)
|
||||
// {
|
||||
// atlas.CreateRegion(
|
||||
// ContentReaderExtensions.RemoveExtension(texturePackerFile.Regions[i].Filename),
|
||||
// texturePackerFile.Regions[i].Frame.X,
|
||||
// texturePackerFile.Regions[i].Frame.Y,
|
||||
// texturePackerFile.Regions[i].Frame.Width,
|
||||
// texturePackerFile.Regions[i].Frame.Height);
|
||||
// }
|
||||
|
||||
// return atlas;
|
||||
// }
|
||||
//}
|
||||
}
|
||||
Reference in New Issue
Block a user