2
0
Fork 0
You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

60 lines
1.8 KiB
C#

using Aseprite.Chunks;
using System.IO;
namespace Aseprite
{
public enum ChunkType : ushort
{
OldPalette = 0x0004,
OldPalette2 = 0x0011,
Layer = 0x2004,
Cel = 0x2005,
CelExtra = 0x2006,
Mask = 0x2016, // DEPRECATED
Path = 0x2017, // NEVER USED
FrameTags = 0x2018,
Palette = 0x2019,
UserData = 0x2020
}
public class Chunk
{
public const int HEADER_SIZE = 6;
protected Frame Frame = null;
public uint Length { get; private set; }
public ChunkType ChunkType { get; private set; }
public Chunk(uint length, ChunkType type)
{
Length = length;
ChunkType = type;
}
public static Chunk ReadChunk(Frame frame, BinaryReader reader)
{
uint length = reader.ReadUInt32();
ChunkType type = (ChunkType)reader.ReadUInt16();
switch (type)
{
case ChunkType.Cel:
return CelChunk.ReadCelChunk(length, reader, frame);
case ChunkType.CelExtra:
return new CelExtraChunk(length, reader) { Frame = frame };
case ChunkType.Layer:
return new LayerChunk(length, reader) { Frame = frame };
case ChunkType.FrameTags:
return new FrameTagsChunk(length, reader) { Frame = frame };
case ChunkType.Palette:
return new PaletteChunk(length, reader) { Frame = frame };
case ChunkType.OldPalette:
return new OldPaletteChunk(length, reader) { Frame = frame };
}
reader.BaseStream.Position += length - Chunk.HEADER_SIZE;
return null;
}
}
}