Ejemplo n.º 1
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
                }
            }
        }