static uint Kangaroo(SR1_Reader reader, ref G2AnimSegKeyflagInfo_Type kfInfo) { long oldPos = reader.BaseStream.Position; uint flags = 0; if (kfInfo.stream != 0) { flags = kfInfo.flags & 7; kfInfo.flags >>= 3; kfInfo.bitCount -= 3; if (kfInfo.bitCount < 1) { kfInfo.stream += 4; reader.BaseStream.Position = kfInfo.stream; kfInfo.flags = reader.ReadUInt32(); if (kfInfo.bitCount < 0) { flags |= kfInfo.flags << (kfInfo.bitCount + 3 & 0x1f) & 7; kfInfo.flags >>= (-kfInfo.bitCount & 0x1f); } kfInfo.bitCount += 0x20; } } reader.BaseStream.Position = oldPos; return(flags); }
static void Wombat(SR1_Reader reader, long segKeyKist, int flagBitOffset, ref G2AnimSegKeyflagInfo_Type kfInfo) { long oldPos = reader.BaseStream.Position; kfInfo.stream = segKeyKist + ((flagBitOffset >> 5) << 2); reader.BaseStream.Position = kfInfo.stream; uint flags = reader.ReadUInt32(); kfInfo.bitCount = 0x20 - (flagBitOffset & 0x1f); kfInfo.flags = flags >> (flagBitOffset & 0x1f); reader.BaseStream.Position = oldPos; }
protected static object ReadPrimativeType <T>(SR1_Reader reader) { TypeCode typeCode = Type.GetTypeCode(typeof(T)); switch (typeCode) { case TypeCode.Boolean: return(reader.ReadBoolean()); case TypeCode.Char: return((char)reader.ReadSByte()); case TypeCode.SByte: return(reader.ReadSByte()); case TypeCode.Byte: return(reader.ReadByte()); case TypeCode.Int16: return(reader.ReadInt16()); case TypeCode.UInt16: return(reader.ReadUInt16()); case TypeCode.Int32: return(reader.ReadInt32()); case TypeCode.UInt32: return(reader.ReadUInt32()); case TypeCode.Int64: return(reader.ReadInt64()); case TypeCode.UInt64: return(reader.ReadUInt64()); case TypeCode.Single: return(reader.ReadSingle()); case TypeCode.Double: return(reader.ReadDouble()); default: throw new Exception("Unhandled primative type."); } }
protected override void ReadMembers(SR1_Reader reader, SR1_Structure parent) { Offset = reader.ReadUInt32(); }