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