internal GraphicArchive(int paletteIndex, AssetLoader loader, int[] sizes = null)
: base(loader)
{
State state = State.Get(this);
PaletteAsset palette = state.GetPalette(paletteIndex);
using (BinaryReader reader = loader.Reader) {
byte forceSizeCode = reader.ReadByte();
int forceSize = 0;
if (forceSizeCode == 2)
forceSize = reader.ReadByte();
else if (forceSizeCode != 1)
throw new InvalidDataException();
int count = reader.ReadUInt16();
int[] offsets = reader.ReadArrayInt32(count + 1);
for (int index = 0; index < count; index++) {
int length = offsets[index + 1] - offsets[index];
reader.BaseStream.Position = offsets[index];
int width = -1, height = -1;
if (sizes != null && index * 2 < sizes.Length) {
width = sizes[index * 2 + 0];
height = sizes[index * 2 + 1];
} else if (forceSize != 0)
width = height = forceSize;
new Graphic(this, loader, index, length, width, height, palette);
}
}
}