Use SpriteLoader for frame exporting.

This commit is contained in:
Paul Chote
2014-10-05 14:41:40 +13:00
parent 7207841f8b
commit 2b92ce7edd
8 changed files with 14 additions and 9 deletions

View File

@@ -23,6 +23,7 @@ namespace OpenRA.FileFormats
public Size FrameSize { get; private set; } public Size FrameSize { get; private set; }
public float2 Offset { get; private set; } public float2 Offset { get; private set; }
public byte[] Data { get; set; } public byte[] Data { get; set; }
public bool DisableExportPadding { get { return true; } }
public R8Image(Stream s) public R8Image(Stream s)
{ {

View File

@@ -30,6 +30,7 @@ namespace OpenRA.FileFormats
public Size FrameSize { get { return Size; } } public Size FrameSize { get { return Size; } }
public float2 Offset { get { return float2.Zero; } } public float2 Offset { get { return float2.Zero; } }
public byte[] Data { get; set; } public byte[] Data { get; set; }
public bool DisableExportPadding { get { return false; } }
public Frame(Stream s) public Frame(Stream s)
{ {

View File

@@ -27,6 +27,7 @@ namespace OpenRA.FileFormats
public Size FrameSize { get { return reader.Size; } } public Size FrameSize { get { return reader.Size; } }
public float2 Offset { get { return float2.Zero; } } public float2 Offset { get { return float2.Zero; } }
public byte[] Data { get; set; } public byte[] Data { get; set; }
public bool DisableExportPadding { get { return false; } }
public uint FileOffset; public uint FileOffset;
public Format Format; public Format Format;

View File

@@ -22,6 +22,7 @@ namespace OpenRA.FileFormats
public Size FrameSize { get; private set; } public Size FrameSize { get; private set; }
public float2 Offset { get; private set; } public float2 Offset { get; private set; }
public byte[] Data { get; set; } public byte[] Data { get; set; }
public bool DisableExportPadding { get { return false; } }
public readonly uint FileOffset; public readonly uint FileOffset;
public readonly byte Format; public readonly byte Format;

View File

@@ -20,6 +20,7 @@ namespace OpenRA.FileFormats
public Size FrameSize { get; private set; } public Size FrameSize { get; private set; }
public float2 Offset { get { return float2.Zero; } } public float2 Offset { get { return float2.Zero; } }
public byte[] Data { get; set; } public byte[] Data { get; set; }
public bool DisableExportPadding { get { return false; } }
public TmpTile(byte[] data, Size size) public TmpTile(byte[] data, Size size)
{ {

View File

@@ -21,6 +21,7 @@ namespace OpenRA.FileFormats
public Size FrameSize { get { return Size; } } public Size FrameSize { get { return Size; } }
public float2 Offset { get { return float2.Zero; } } public float2 Offset { get { return float2.Zero; } }
public byte[] Data { get; set; } public byte[] Data { get; set; }
public bool DisableExportPadding { get { return false; } }
public TmpTSTile(Stream s, Size size) public TmpTSTile(Stream s, Size size)
{ {

View File

@@ -20,6 +20,7 @@ namespace OpenRA.Graphics
Size FrameSize { get; } Size FrameSize { get; }
float2 Offset { get; } float2 Offset { get; }
byte[] Data { get; } byte[] Data { get; }
bool DisableExportPadding { get; }
} }
public interface ISpriteSource public interface ISpriteSource

View File

@@ -41,19 +41,17 @@ namespace OpenRA.Mods.Common.UtilityCommands
var palette = new ImmutablePalette(args[2], shadowIndex); var palette = new ImmutablePalette(args[2], shadowIndex);
ISpriteSource source; var frames = new SpriteLoader(new string[0], null)
using (var stream = File.OpenRead(src)) .LoadAllFrames(src);
source = SpriteSource.LoadSpriteSource(stream, src);
// The r8 padding requires external information that we can't access here. var usePadding = !args.Contains("--nopadding");
var usePadding = !(args.Contains("--nopadding") || source is R8Reader);
var count = 0; var count = 0;
var prefix = Path.GetFileNameWithoutExtension(src); var prefix = Path.GetFileNameWithoutExtension(src);
foreach (var frame in source.Frames) foreach (var frame in frames)
{ {
var frameSize = usePadding ? frame.FrameSize : frame.Size; var frameSize = usePadding && !frame.DisableExportPadding ? frame.FrameSize : frame.Size;
var offset = usePadding ? (frame.Offset - 0.5f * new float2(frame.Size - frame.FrameSize)).ToInt2() : int2.Zero; var offset = usePadding && !frame.DisableExportPadding ? (frame.Offset - 0.5f * new float2(frame.Size - frame.FrameSize)).ToInt2() : int2.Zero;
// shp(ts) may define empty frames // shp(ts) may define empty frames
if (frameSize.Width == 0 && frameSize.Height == 0) if (frameSize.Width == 0 && frameSize.Height == 0)
@@ -69,7 +67,7 @@ namespace OpenRA.Mods.Common.UtilityCommands
ImageLockMode.WriteOnly, PixelFormat.Format8bppIndexed); ImageLockMode.WriteOnly, PixelFormat.Format8bppIndexed);
// Clear the frame // Clear the frame
if (usePadding) if (usePadding && !frame.DisableExportPadding)
{ {
var clearRow = new byte[data.Stride]; var clearRow = new byte[data.Stride];
for (var i = 0; i < frameSize.Height; i++) for (var i = 0; i < frameSize.Height; i++)