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); }
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; })); }