Esempio n. 1
0
        private void Read(BinaryReader reader)
        {
            long start = reader.BaseStream.Position;

            List <IChunk> chunks    = new List <IChunk>();
            List <string> chunkTags = new List <string>();

            Header = reader.Read <teChunkDataHeader>();
            if (Header.Magic != Magic)
            {
                return;
            }

            while (reader.BaseStream.Position - start < Header.Size)
            {
                ParseChunks(reader, chunks, chunkTags);
            }

            Chunks    = chunks.ToArray();
            ChunkTags = chunkTags.ToArray();
        }
Esempio n. 2
0
        private unsafe void Read(BinaryReader reader)
        {
            long start = reader.BaseStream.Position;

            List <IChunk> chunks    = new List <IChunk>();
            List <string> chunkTags = new List <string>();

            Header = reader.Read <teChunkDataHeader>();
            if (Header.Magic != Magic)
            {
                return;
            }

            long next = reader.BaseStream.Position - start; // rel stream pos

            while (next < Header.Size)
            {
                teChunkDataEntry entry = reader.Read <teChunkDataEntry>();
                next += entry.Size + sizeof(teChunkDataEntry);

                IChunk chunk = Manager.CreateChunkInstance(entry.StringIdentifier, Header.StringIdentifier);
                if (chunk != null)
                {
                    MemoryStream dataStream = new MemoryStream(entry.Size);
                    reader.BaseStream.CopyBytes(dataStream, entry.Size);
                    dataStream.Position = 0;

                    chunk.Parse(dataStream);

                    dataStream.Dispose();
                }

                chunkTags.Add(entry.StringIdentifier);
                chunks.Add(chunk);
                reader.BaseStream.Position = next + start;
            }

            Chunks    = chunks.ToArray();
            ChunkTags = chunkTags.ToArray();
        }