Ejemplo n.º 1
0
        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);
            }
        }
Ejemplo n.º 2
0
        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));
            }
        }