Ejemplo n.º 1
0
        public static W3dTimeCodedBitChannel Parse(BinaryReader reader)
        {
            var startPosition = reader.BaseStream.Position;

            var result = new W3dTimeCodedBitChannel
            {
                NumTimeCodes = reader.ReadUInt32(),
                Pivot        = reader.ReadUInt16(),
                ChannelType  = (W3dBitChannelType)reader.ReadByte(),
                DefaultValue = reader.ReadBooleanChecked()
            };

            var data = new W3dTimeCodedBitDatum[result.NumTimeCodes];

            for (var i = 0; i < result.NumTimeCodes; i++)
            {
                var timecode = reader.ReadUInt32();

                // TODO: Verify this guess.
                var value = false;
                if ((timecode >> 31) == 1)
                {
                    value = true;

                    timecode &= ~(1 << 31);
                }

                data[i] = new W3dTimeCodedBitDatum
                {
                    TimeCode = timecode,
                    Value    = value
                };
            }

            result.Data = data;

            return(result);
        }
Ejemplo n.º 2
0
        internal static W3dTimeCodedBitChannel Parse(BinaryReader reader, W3dParseContext context)
        {
            return(ParseChunk(reader, context, header =>
            {
                var result = new W3dTimeCodedBitChannel
                {
                    NumTimeCodes = reader.ReadUInt32(),
                    Pivot = reader.ReadUInt16(),
                    ChannelType = reader.ReadByteAsEnum <W3dBitChannelType>(),
                    DefaultValue = reader.ReadBooleanChecked()
                };

                var data = new W3dTimeCodedBitDatum[result.NumTimeCodes];

                for (var i = 0; i < result.NumTimeCodes; i++)
                {
                    data[i] = W3dTimeCodedBitDatum.Parse(reader);
                }

                result.Data = data;

                return result;
            }));
        }