Beispiel #1
0
 public Field(UnityBinaryReader reader)
 {
     Version     = reader.ReadInt16();
     Depth       = reader.ReadByte();
     IsArray     = reader.ReadBool();
     _typeOffset = reader.ReadInt32();
     _nameOffset = reader.ReadInt32();
     Size        = reader.ReadInt32();
     Index       = reader.ReadInt32();
     Flags       = reader.ReadInt32();
 }
Beispiel #2
0
            public Type_0D(UnityBinaryReader reader, int version, int typeVersion, bool embedded)
            {
                if (reader == null)
                {
                    throw new ArgumentNullException(nameof(reader));
                }
                if (version < 13)
                {
                    throw new ArgumentOutOfRangeException(nameof(version), "this type does not support the given format");
                }
                ClassID = reader.ReadInt32();

                if (version < 16)
                {
                    _unknown = 0;
                }
                else
                {
                    _unknown = reader.ReadByte();
                }

                if (version < 17)
                {
                    ScriptIndex = -1;
                }
                else
                {
                    ScriptIndex = reader.ReadInt16();
                }
                if (ClassID < 0 || ClassID == 114)
                {
                    ScriptID = new Hash128();
                    ScriptID.Read(reader, version);
                }
                PropertiesHash = new Hash128();
                PropertiesHash.Read(reader, version);
                if (embedded)
                {
                    ReadEmbedded(reader, version, typeVersion);
                }
            }
Beispiel #3
0
        public AssetFileInfo(AssetsFile file, UnityBinaryReader reader) : this()
        {
            /* Read basic info */

            if (file.Header.Version < 14)
            {
                Index = reader.ReadUInt32();
            }
            else
            {
                Index = reader.ReadUInt64();
            }

            //v1

            /*
             * DataOffset = reader.ReadUInt32();
             * FileSize = reader.ReadUInt32();
             * FileTypeOrIndex = reader.ReadInt32();
             * InheritedUnityClass = reader.ReadInt16();
             * ScriptIndex = reader.ReadInt16();
             */
            //v2
            DataOffset          = reader.ReadUInt32();
            FileSize            = reader.ReadUInt32();
            FileTypeOrIndex     = reader.ReadInt32();
            InheritedUnityClass = reader.ReadInt16();
            ScriptIndex         = reader.ReadInt16();

            //v3 (first v2)
            Unknown = reader.ReadByte();

            /* Advanced */
            if (file.Header.Version < 16)
            {
                FileType = FileTypeOrIndex;
            }
            else
            {
                if (FileTypeOrIndex < file.TypeTree.Types_0D.Count)
                {
                    var type = file.TypeTree.Types_0D[FileTypeOrIndex];

                    if (type.ScriptIndex == -1)
                    {
                        FileType            = type.ClassID;
                        InheritedUnityClass = type.ClassID;
                        ScriptIndex         = -1;
                    }
                    else
                    {
                        FileType            = -1 - type.ScriptIndex;
                        InheritedUnityClass = type.ClassID;
                        ScriptIndex         = type.ScriptIndex;
                    }
                }
                else
                {
                }
            }
            AbsolutePos = file.Header.DataOffset + DataOffset;

            if (IsKnownUnityType(FileType) || true)
            {
                long pos = reader.Position;
                try
                {
#error fix this, pls
                    reader.Position = AbsolutePos;
                    int length = reader.ReadInt32();
                    if (length > 100 && false)
                    {
                        if (Debugger.IsAttached)
                        {
                            Debugger.Break();
                        }
                    }
                    Name = reader.ReadStringFixed(length);
                }
                finally
                {
                    reader.Position = pos;
                }
            }
        }