Changed 9p and tatlas' to use a separately loaded texture.

This commit is contained in:
2019-03-20 19:28:16 -05:00
parent 4add103f94
commit e3535f5662
30 changed files with 184 additions and 169 deletions

View File

@@ -1,25 +1,18 @@
using Microsoft.Xna.Framework.Content.Pipeline;
using Microsoft.Xna.Framework.Content.Pipeline.Graphics;
using Microsoft.Xna.Framework.Content.Pipeline.Processors;
using Newtonsoft.Json;
using RecrownedAthenaeum.Data;
using System.IO;
namespace RecrownedAthenaeum.Pipeline.TextureAtlas
{
[ContentImporter(".tatlas", DisplayName = "Texture Atlas Importer", DefaultProcessor = "TextureAtlasProcessor")]
internal class TextureAtlasImporter : ContentImporter<TextureAtlasImporter.Package>
[ContentImporter(".tatlas", DisplayName = "Texture Atlas Importer - RecrownedAthenaeum", DefaultProcessor = "TextureAtlasProcessor")]
internal class TextureAtlasImporter : ContentImporter<TextureAtlasData>
{
public override Package Import(string filename, ContentImporterContext context)
public override TextureAtlasData Import(string filename, ContentImporterContext context)
{
Package package;
package.textureAtlasData = JsonConvert.DeserializeObject<TextureAtlasData>(File.ReadAllText(filename));
package.textureBytes = File.ReadAllBytes(package.textureAtlasData.textureName);
return package;
}
internal struct Package
{
internal TextureAtlasData textureAtlasData;
internal byte[] textureBytes;
return JsonConvert.DeserializeObject<TextureAtlasData>(File.ReadAllText(filename));
}
}
}

View File

@@ -1,24 +1,21 @@
using Microsoft.Xna.Framework.Content.Pipeline;
using Microsoft.Xna.Framework.Content.Pipeline.Graphics;
using Microsoft.Xna.Framework.Content.Pipeline.Processors;
using Newtonsoft.Json;
using RecrownedAthenaeum.Data;
using System.IO;
using System.Text;
namespace RecrownedAthenaeum.Pipeline.TextureAtlas
{
[ContentProcessor(DisplayName = "Texture Atlas - RecrownedAthenaeum")]
class TextureAtlasProcessor : ContentProcessor<TextureAtlasImporter.Package, TextureAtlasProcessor.Package>
class TextureAtlasProcessor : ContentProcessor<TextureAtlasData, TextureAtlasData>
{
public override Package Process(TextureAtlasImporter.Package input, ContentProcessorContext context)
public override TextureAtlasData Process(TextureAtlasData input, ContentProcessorContext context)
{
Package package;
package.textureBytes = input.textureBytes;
package.textureAtlasDataBytes = Encoding.ASCII.GetBytes(JsonConvert.SerializeObject(input.textureAtlasData));
return package;
}
internal struct Package
{
public byte[] textureBytes;
public byte[] textureAtlasDataBytes;
if (context.SourceIdentity.SourceFilename == input.textureName) throw new InvalidContentException("Texture atlas data and texture file for the atlas can't have the same name.");
context.AddDependency(input.textureName);
return input;
}
}
}

View File

@@ -1,22 +1,41 @@
using Microsoft.Xna.Framework.Content.Pipeline;
using Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler;
using Newtonsoft.Json;
using RecrownedAthenaeum.Data;
using System.IO;
namespace RecrownedAthenaeum.Pipeline.TextureAtlas
{
[ContentTypeWriter]
class TextureAtlasWriter : ContentTypeWriter<TextureAtlasProcessor.Package>
class TextureAtlasWriter : ContentTypeWriter<TextureAtlasData>
{
public override string GetRuntimeReader(TargetPlatform targetPlatform)
{
return "RecrownedAthenaeum.ContentReaders.TextureAtlasDataReader, RecrownedAthenaeum";
}
protected override void Write(ContentWriter output, TextureAtlasProcessor.Package value)
protected override void Write(ContentWriter output, TextureAtlasData value)
{
output.Write(value.textureBytes.Length);
output.Write(value.textureBytes);
output.Write(value.textureAtlasDataBytes.Length);
output.Write(value.textureAtlasDataBytes);
output.Write(Path.GetFileNameWithoutExtension(value.textureName));
output.Write(value.regions.Length);
for (int i = 0; i < value.regions.Length; i++)
{
output.Write(value.regions[i].name);
output.Write(value.regions[i].bounds.X);
output.Write(value.regions[i].bounds.Y);
output.Write(value.regions[i].bounds.Width);
output.Write(value.regions[i].bounds.Height);
bool hasNPatch = value.regions[i].ninePatchData != null;
output.Write(hasNPatch);
if (hasNPatch)
{
output.Write(value.regions[i].ninePatchData.left);
output.Write(value.regions[i].ninePatchData.right);
output.Write(value.regions[i].ninePatchData.bottom);
output.Write(value.regions[i].ninePatchData.top);
}
}
}
}
}