示例#1
0
        internal static W3dEmitterFrameHeader Parse(BinaryReader reader)
        {
            var result = new W3dEmitterFrameHeader
            {
                KeyframeCount = reader.ReadUInt32(),
                Random        = reader.ReadSingle()
            };

            reader.ReadBytes(2 * sizeof(uint)); // Pad

            return(result);
        }
示例#2
0
        internal static W3dEmitterFrameKeyframes Parse(BinaryReader reader, W3dParseContext context)
        {
            return(ParseChunk(reader, context, header =>
            {
                var result = new W3dEmitterFrameKeyframes
                {
                    Header = W3dEmitterFrameHeader.Parse(reader)
                };

                // Certain enb w3d's break without this check. (example: astro00.w3d)
                if (reader.BaseStream.Position < context.CurrentEndPosition)
                {
                    var remaining = (int)context.CurrentEndPosition - (int)reader.BaseStream.Position;
                    var KeyframeCount = remaining / 8;
                    result.Keyframes = new W3dEmitterFrameKeyframe[KeyframeCount];
                    for (var i = 0; i < result.Keyframes.Length; i++)
                    {
                        result.Keyframes[i] = W3dEmitterFrameKeyframe.Parse(reader);
                    }
                }

                return result;
            }));
        }