Beispiel #1
0
        //public SpriteObject(IObjectInfo<AssetsObject> objectInfo) : base(objectInfo)
        //{ }

        protected override void Parse(AssetsReader reader)
        {
            base.Parse(reader);
            int startPosition = reader.Position;

            Name          = reader.ReadString();
            UnparsedData1 = reader.ReadBytes(100);
            Texture       = SmartPtr <Texture2DObject> .Read(ObjectInfo.ParentFile, this, reader);

            int readLen = ObjectInfo.DataSize - (reader.Position - startPosition);

            UnparsedData2 = reader.ReadBytes(readLen);
        }
        protected override void Parse(AssetsReader reader)
        {
            base.Parse(reader);
            Name = reader.ReadString();
            ForcedFallbackFormat = reader.ReadInt32();
            DownscaleFallback    = reader.ReadBoolean();
            reader.AlignTo(4);
            Width             = reader.ReadInt32();
            Height            = reader.ReadInt32();
            CompleteImageSize = reader.ReadInt32();
            TextureFormat     = (TextureFormatType)reader.ReadInt32();
            MipCount          = reader.ReadInt32();
            IsReadable        = reader.ReadBoolean();
            StreamingMipmaps  = reader.ReadBoolean();
            reader.AlignTo(4);
            StreamingMipmapsPriority = reader.ReadInt32();
            ImageCount       = reader.ReadInt32();
            TextureDimension = reader.ReadInt32();
            TextureSettings  = new GLTextureSettings(reader);
            LightmapFormat   = reader.ReadInt32();
            ColorSpace       = reader.ReadInt32();
            int imageDataSize = reader.ReadInt32();

            ImageData = reader.ReadBytes(imageDataSize);
            reader.AlignTo(4);
            StreamData = new StreamingInfo(reader);
        }
Beispiel #3
0
        private void ParseDetails(AssetsReader reader)
        {
            var readLength = ObjectInfo.DataSize - (reader.Position - ObjectInfo.DataOffset);

            ScriptParametersData = reader.ReadBytes(readLength);
            reader.AlignTo(4);
        }
Beispiel #4
0
        public override void Parse(AssetsReader reader)
        {
            ParseBase(reader);
            var readLength = ObjectInfo.DataSize - (reader.Position - ObjectInfo.DataOffset);

            ScriptParametersData = reader.ReadBytes(readLength);
            reader.AlignTo(4);
        }
Beispiel #5
0
        protected override void Parse(AssetsReader reader)
        {
            base.Parse(reader);
            int startPosition = reader.Position;

            Name = reader.ReadString();
            int readLen = ObjectInfo.DataSize - (reader.Position - startPosition);

            MeshData = reader.ReadBytes(readLen);
        }
 private void Parse(AssetsReader reader)
 {
     MetadataSize     = reader.ReadBEInt32();
     FileSize         = reader.ReadBEInt32();
     Version          = reader.ReadBEInt32();
     ObjectDataOffset = reader.ReadBEInt32();
     IsBigEndian      = reader.ReadBoolean();
     //padding apparently
     reader.ReadBytes(3);
 }
Beispiel #7
0
        private void ParseDirectory(AssetsReader reader)
        {
            //unknown?
            reader.ReadBytes(16);
            int numBlocks = reader.ReadBEInt32();

            for (int i = 0; i < numBlocks; i++)
            {
                BlockInfos.Add(new BlockInfo(reader));
            }

            int numEntries = reader.ReadBEInt32();

            for (int i = 0; i < numEntries; i++)
            {
                Entries.Add(new DirectoryEntry(reader));
            }
        }
Beispiel #8
0
 private void ParseDetails(AssetsReader reader)
 {
     Data = reader.ReadBytes(ObjectInfo.DataSize);
 }
 public virtual void Parse(AssetsReader reader)
 {
     ParseBase(reader);
     Data = reader.ReadBytes(ObjectInfo.DataSize);
 }
Beispiel #10
0
        private void Parse(AssetsReader reader)
        {
            //basic header stuff
            var signature = reader.ReadCStr();

            if (signature != "UnityFS")
            {
                throw new NotSupportedException("Stream is not UnityFS");
            }
            var fileVersion = reader.ReadBEInt32();

            if (fileVersion != 6)
            {
                throw new NotSupportedException("File version is not supported");
            }
            PlayerVersion = reader.ReadCStr();
            EngineVersion = reader.ReadCStr();
            BundleSize    = reader.ReadBEInt64();

            //header info
            var compressedSize   = reader.ReadBEInt32();
            var decompressedSize = reader.ReadBEInt32();
            var flags            = reader.ReadBEUInt32();

            byte[] infoBytes;
            if (IsDirectoryAtEnd(flags))
            {
                var start = (int)reader.BaseStream.Position;
                reader.Seek((int)reader.BaseStream.Length - compressedSize);
                infoBytes = reader.ReadBytes(compressedSize);
                reader.Seek(start);
            }
            else
            {
                infoBytes = reader.ReadBytes(compressedSize);
            }

            Stream blockInfoStream = null;

            try
            {
                switch (CompressionMode(flags))
                {
                case UnityFSCompressionMode.LZ4:
                case UnityFSCompressionMode.LZ4HC:
                    blockInfoStream = new MemoryStream(LZ4.LZ4Codec.Decode(infoBytes, 0, infoBytes.Length, decompressedSize));
                    break;

                case UnityFSCompressionMode.NoCompression:
                    blockInfoStream = new MemoryStream(infoBytes);
                    break;

                case UnityFSCompressionMode.LZMA:
                    blockInfoStream = new MemoryStream(LZMADecode(infoBytes, decompressedSize));
                    break;
                }

                using (AssetsReader infoReader = new AssetsReader(blockInfoStream, false))
                    ParseDirectory(infoReader);
            }
            finally
            {
                if (blockInfoStream != null)
                {
                    blockInfoStream.Dispose();
                }
            }
            MemoryStream outputStream = new MemoryStream();

            foreach (var blockInfo in BlockInfos)
            {
                byte[] blockData = null;
                switch (blockInfo.CompressionMode)
                {
                case UnityFSCompressionMode.LZ4:
                case UnityFSCompressionMode.LZ4HC:
                    blockData = LZ4.LZ4Codec.Decode(reader.ReadBytes((int)blockInfo.CompressedSize), 0, (int)blockInfo.CompressedSize, (int)blockInfo.UncompressedSize);
                    break;

                case UnityFSCompressionMode.NoCompression:
                    blockData = reader.ReadBytes((int)blockInfo.UncompressedSize);
                    break;

                case UnityFSCompressionMode.LZMA:
                    blockData = LZMADecode(reader.BaseStream, (int)blockInfo.CompressedSize, (int)blockInfo.UncompressedSize);
                    break;
                }

                outputStream.Write(blockData, 0, blockData.Length);
            }
            using (outputStream)
            {
                foreach (var entry in Entries)
                {
                    outputStream.Seek(entry.Offset, SeekOrigin.Begin);
                    entry.Data = outputStream.ReadBytes((int)entry.Size);
                }
            }
        }