Exemple #1
0
        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);
        }
Exemple #2
0
        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);
        }