internal static PostEffectParameter Parse(BinaryReader reader) { var result = new PostEffectParameter { Name = reader.ReadUInt16PrefixedAsciiString(), Type = reader.ReadUInt16PrefixedAsciiString() }; switch (result.Type) { case "Float": result.Data = reader.ReadSingle(); break; case "Float4": result.Data = reader.ReadVector4(); break; case "Int": result.Data = reader.ReadInt32(); break; case "Texture": result.Data = reader.ReadUInt16PrefixedAsciiString(); break; default: throw new InvalidDataException($"Unknown effect parameter type '{result.Type}' for parameter name '{result.Name}'."); } return(result); }
internal static PostEffect Parse(BinaryReader reader, ushort version) { // v1 (BFME II) was hardcoded to store LookupTable's parameters. // v2 added a more flexible structure, generically storing the effect name and parameters. var result = new PostEffect { Name = reader.ReadUInt16PrefixedAsciiString() }; if (version >= 2) { var numParameters = reader.ReadUInt32(); result.Parameters = new PostEffectParameter[numParameters]; for (var i = 0; i < numParameters; i++) { result.Parameters[i] = PostEffectParameter.Parse(reader); } } else { result.BlendFactor = reader.ReadSingle(); result.LookupImage = reader.ReadUInt16PrefixedAsciiString(); } return(result); }