void Read(FileReader reader) { Textures = new List <TextureEntry>(); ConversionInfos = new List <ConversionInfo>(); reader.ReadSignature(4, MAGIC); Version = reader.ReadUInt16(); ushort numTextures = reader.ReadUInt16(); uint textureDataOffset = reader.ReadUInt32(); uint hashArrayOffset = reader.ReadUInt32(); uint conversionInfoOffset = reader.ReadUInt32(); reader.Position = 0x20; for (int i = 0; i < numTextures; i++) { TextureEntry entry = new TextureEntry(); entry.Read(reader); Textures.Add(entry); } reader.SeekBegin(conversionInfoOffset); for (int i = 0; i < numTextures; i++) { ConversionInfos.Add(reader.ReadStruct <ConversionInfo>()); } for (int i = 0; i < numTextures; i++) { reader.SeekBegin(textureDataOffset + Textures[i].DataOffset); Textures[i].ImageData = reader.ReadBytes((int)Textures[i].ImageSize); } }
public static Entry ReadPackageEntry(MemoryStream chunk, out ReadStatus readStatus) { int entryType = chunk.ReadByte(); readStatus = ReadStatus.OK; switch (entryType) { case BINK_ATLAS_CODE: return(BinkAtlasEntry.Read(chunk)); case INCLUDE_PACKAGE_CODE: return(IncludePackageEntry.Read(chunk)); case ATLAS_CODE: return(AtlasEntry.Read(chunk, false)); case BINK_CODE: return(BinkEntry.Read(chunk)); case TEXTURE_CODE: return(TextureEntry.Read(chunk)); case SPINE_CODE: return(SpineEntry.Read(chunk)); case TEXTURE_3D_CODE: return(Texture3DEntry.Read(chunk)); case END_CHUNK_CODE: readStatus = ReadStatus.EndOfChunk; return(null); case (int)byte.MaxValue: case -1: readStatus = ReadStatus.EndOfFile; return(null); default: throw new PackageReadException(string.Format(ERR_UNKNOWN_PACKAGE_entryType, entryType)); } }