internal static W3dCollection Parse(BinaryReader reader, W3dParseContext context) { return(ParseChunk(reader, context, header => { var result = new W3dCollection(); ParseChunks(reader, context.CurrentEndPosition, chunkType => { switch (chunkType) { case W3dChunkType.W3D_CHUNK_COLLECTION_HEADER: result.Header = W3dCollectionHeader.Parse(reader, context); break; case W3dChunkType.W3D_CHUNK_COLLECTION_OBJ_NAME: result.ObjName = W3dCollectionObjName.Parse(reader, context); break; case W3dChunkType.W3D_CHUNK_PLACEHOLDER: result.Placeholder = W3dCollectionPlaceholder.Parse(reader, context); break; case W3dChunkType.W3D_CHUNK_TRANSFORM_NODE: result.TransformNode = W3dCollectionTransformNode.Parse(reader, context); break; default: throw CreateUnknownChunkException(chunkType); } }); return result; })); }
internal static W3dCollectionPlaceholder Parse(BinaryReader reader, W3dParseContext context) { return(ParseChunk(reader, context, header => { var result = new W3dCollectionPlaceholder { TransformA = reader.ReadVector3(), TransformB = reader.ReadVector3(), TransformC = reader.ReadVector3(), TransformD = reader.ReadVector3(), Name = reader.ReadFixedLengthString(W3dConstants.NameLength), UnknownBytes = reader.ReadBytes((int)context.CurrentEndPosition - (int)reader.BaseStream.Position) }; // TODO: Determine W3dCollectionPlaceholder UnknownBytes return result; })); }