Пример #1
0
        public void Read(BinaryBlock b)
        {
            _infoMap = new Dictionary <long, ObjectInfo>();

            int entries = b.ReadInt();

            if (_version > 13)
            {
                b.Align(4);
            }

            for (int i = 0; i < entries; i++)
            {
                long pathID;
                if (_version > 13)
                {
                    pathID = b.ReadLong();
                }
                else
                {
                    pathID = b.ReadInt();
                }

                ObjectInfo info = new ObjectInfo(_version);
                info.Read(b);
                _infoMap.Add(pathID, info);
            }
        }
Пример #2
0
        public void Read(BinaryBlock b)
        {
            Offset      = b.ReadUnsignedInt();
            Length      = b.ReadUnsignedInt();
            TypeId      = b.ReadInt();
            ClassId     = b.ReadShort();
            IsDestroyed = b.ReadShort();
            // TODO: the only way I can get this to work, align doesn't!
            if (_version > 13)
            {
                b.ReadInt();
            }

            // sanity check
            Debug.Assert(TypeId == ClassId || (ClassId == 114 && TypeId < 0));
        }
Пример #3
0
        private void ReadGuid(BinaryBlock b)
        {
            bool order = b.BigEndian;

            b.BigEndian = true;
            // TODO: should be BE or not
            Guid        = new Guid(b.ReadInt(), b.ReadShort(), b.ReadShort(), b.ReadBytes(8));
            b.BigEndian = order;
        }
Пример #4
0
 public void Read(BinaryBlock b)
 {
     if (_version > 5)
     {
         AssetPath = b.ReadStringToNull();
     }
     ReadGuid(b);
     RefType  = b.ReadInt();
     FilePath = b.ReadStringToNull();
 }
Пример #5
0
        public void Read(BinaryBlock b)
        {
            int entries = b.ReadInt();

            for (int i = 0; i < entries; i++)
            {
                FileIdentifier fi = new FileIdentifier(_version);
                fi.Read(b);
                _fileIds.Add(fi);
            }
        }
Пример #6
0
        public void Read(BinaryBlock b)
        {
            if (_version > 6)
            {
                _revision  = b.ReadStringToNull();
                Attributes = b.ReadInt();
            }

            if (_version > 13)
            {
                Embedded = b.ReadBoolean();
                int numBaseClasses = b.ReadInt();

                for (int i = 0; i < numBaseClasses; i++)
                {
                    int       classID   = b.ReadInt();
                    BaseClass baseClass = new BaseClass(classID);

                    if (classID < 0)
                    {
                        UnityHash128 scriptID = new UnityHash128(_version);
                        scriptID.Read(b);
                        baseClass.ScriptID = scriptID;
                    }

                    UnityHash128 oldTypeHash = new UnityHash128(_version);
                    oldTypeHash.Read(b);
                    baseClass.OldTypeHash = oldTypeHash;

                    if (Embedded)
                    {
                        AssetTypeNode   node       = new AssetTypeNode();
                        AssetTypeReader nodeReader = new AssetTypeReader(_version);
                        nodeReader.Read(b, node);
                        baseClass.TypeTree = node;
                    }

                    _typeMap.Add(classID, baseClass);
                }
            }
            else
            {
                int numBaseClasses = b.ReadInt();

                for (int i = 0; i < numBaseClasses; i++)
                {
                    int       classID   = b.ReadInt();
                    BaseClass baseClass = new BaseClass(classID);

                    AssetTypeNode   node       = new AssetTypeNode();
                    AssetTypeReader nodeReader = new AssetTypeReader(_version);
                    nodeReader.Read(b, node);
                    baseClass.TypeTree = node;

                    _typeMap.Add(classID, baseClass);
                }
                Embedded = numBaseClasses > 0;

                if (_version > 6)
                {
                    b.ReadInt();                     // padding
                }
            }
        }