internal static W3dAnimation Parse(BinaryReader reader, W3dParseContext context) { return(ParseChunk(reader, context, header => { var result = new W3dAnimation(); ParseChunks(reader, context.CurrentEndPosition, chunkType => { switch (chunkType) { case W3dChunkType.W3D_CHUNK_ANIMATION_HEADER: result.Header = W3dAnimationHeader.Parse(reader, context); break; case W3dChunkType.W3D_CHUNK_ANIMATION_CHANNEL: result.Channels.Add(W3dAnimationChannel.Parse(reader, context)); break; case W3dChunkType.W3D_CHUNK_BIT_CHANNEL: result.Channels.Add(W3dBitChannel.Parse(reader, context)); break; default: throw CreateUnknownChunkException(chunkType); } }); return result; })); }
public static W3dAnimation Parse(BinaryReader reader, uint chunkSize) { var channels = new List <W3dAnimationChannel>(); var bitChannels = new List <W3dBitChannel>(); var finalResult = ParseChunk <W3dAnimation>(reader, chunkSize, (result, header) => { switch (header.ChunkType) { case W3dChunkType.W3D_CHUNK_ANIMATION_HEADER: result.Header = W3dAnimationHeader.Parse(reader); break; case W3dChunkType.W3D_CHUNK_ANIMATION_CHANNEL: channels.Add(W3dAnimationChannel.Parse(reader, header.ChunkSize)); break; case W3dChunkType.W3D_CHUNK_BIT_CHANNEL: bitChannels.Add(W3dBitChannel.Parse(reader, header.ChunkSize)); break; default: throw CreateUnknownChunkException(header); } }); finalResult.Channels = channels; finalResult.BitChannels = bitChannels; return(finalResult); }