public static W3dShaderMaterial Parse(BinaryReader reader, uint chunkSize) { var properties = new List <W3dShaderMaterialProperty>(); var finalResult = ParseChunk <W3dShaderMaterial>(reader, chunkSize, (result, header) => { switch (header.ChunkType) { case W3dChunkType.W3D_CHUNK_SHADER_MATERIAL_HEADER: result.Header = W3dShaderMaterialHeader.Parse(reader, header.ChunkSize); break; case W3dChunkType.W3D_CHUNK_SHADER_MATERIAL_PROPERTY: properties.Add(W3dShaderMaterialProperty.Parse(reader, header.ChunkSize)); break; default: throw CreateUnknownChunkException(header); } }); finalResult.Properties = properties; return(finalResult); }
internal static W3dShaderMaterial Parse(BinaryReader reader, W3dParseContext context) { return(ParseChunk(reader, context, header => { var result = new W3dShaderMaterial(); ParseChunks(reader, context.CurrentEndPosition, chunkType => { switch (chunkType) { case W3dChunkType.W3D_CHUNK_SHADER_MATERIAL_HEADER: result.Header = W3dShaderMaterialHeader.Parse(reader, context); break; case W3dChunkType.W3D_CHUNK_SHADER_MATERIAL_PROPERTY: result.Properties.Add(W3dShaderMaterialProperty.Parse(reader, context)); break; default: throw CreateUnknownChunkException(chunkType); } }); return result; })); }
public static W3dShaderMaterialProperty Parse(BinaryReader reader, uint chunkSize) { var result = new W3dShaderMaterialProperty { PropertyType = reader.ReadUInt32AsEnum <W3dShaderMaterialPropertyType>(), PropertyName = reader.ReadFixedLengthString((int)reader.ReadUInt32()) }; var value = new W3dShaderMaterialPropertyValue(); switch (result.PropertyType) { case W3dShaderMaterialPropertyType.Texture: result.StringValue = reader.ReadFixedLengthString((int)reader.ReadUInt32()); break; case W3dShaderMaterialPropertyType.Float: value.Float = reader.ReadSingle(); break; case W3dShaderMaterialPropertyType.Vector2: value.Vector2 = reader.ReadVector2(); break; case W3dShaderMaterialPropertyType.Vector3: value.Vector3 = reader.ReadVector3(); break; case W3dShaderMaterialPropertyType.Color: value.Color = reader.ReadColorRgbaF(); break; case W3dShaderMaterialPropertyType.Int: value.Int = reader.ReadInt32(); break; case W3dShaderMaterialPropertyType.Bool: value.Bool = reader.ReadBooleanChecked(); break; default: throw new InvalidDataException(); } result.Value = value; return(result); }
public static W3dShaderMaterialProperty Parse(BinaryReader reader, uint chunkSize) { var result = new W3dShaderMaterialProperty { PropertyType = reader.ReadUInt32AsEnum <W3dShaderMaterialPropertyType>(), TypeName = reader.ReadFixedLengthString((int)reader.ReadUInt32()) }; switch (result.PropertyType) { case W3dShaderMaterialPropertyType.Texture: result.ItemName = reader.ReadFixedLengthString((int)reader.ReadUInt32()); break; case W3dShaderMaterialPropertyType.Bump: result.ItemScalar1 = reader.ReadSingle(); break; case W3dShaderMaterialPropertyType.Unknown1: result.ItemScalar1 = reader.ReadSingle(); result.ItemScalar2 = reader.ReadSingle(); break; case W3dShaderMaterialPropertyType.Unknown2: result.ItemColorRgb = reader.ReadColorRgbF(); break; case W3dShaderMaterialPropertyType.Colors: result.ItemColorRgba = reader.ReadColorRgbaF(); break; case W3dShaderMaterialPropertyType.Unknown3: result.ItemUint = reader.ReadUInt32(); break; case W3dShaderMaterialPropertyType.Alpha: result.ItemAlpha = reader.ReadByte(); break; default: throw new InvalidDataException(); } return(result); }
internal static W3dShaderMaterialProperty Parse(BinaryReader reader, W3dParseContext context) { return(ParseChunk(reader, context, header => { var result = new W3dShaderMaterialProperty { PropertyType = reader.ReadUInt32AsEnum <W3dShaderMaterialPropertyType>(), PropertyName = reader.ReadFixedLengthString((int)reader.ReadUInt32()) }; var value = new W3dShaderMaterialPropertyValue(); switch (result.PropertyType) { case W3dShaderMaterialPropertyType.Texture: result.StringValue = reader.ReadFixedLengthString((int)reader.ReadUInt32()); break; case W3dShaderMaterialPropertyType.Float: case W3dShaderMaterialPropertyType.Vector2: case W3dShaderMaterialPropertyType.Vector3: case W3dShaderMaterialPropertyType.Vector4: case W3dShaderMaterialPropertyType.Int: case W3dShaderMaterialPropertyType.Bool: value = W3dShaderMaterialPropertyValue.Parse(reader, result.PropertyType); break; default: throw new InvalidDataException(); } result.Value = value; return result; })); }