Exemplo n.º 1
0
        public List <Entry> LoadObjects()
        {
            var dir = new List <Entry>();

            using (var stream = new BundleStream(m_file, m_segments))
            {
                foreach (BundleEntry bundle in m_bundles)
                {
                    if (bundle.Name.HasAnyOfExtensions(".resource", ".resS"))
                    {
                        continue;
                    }
                    using (var asset_stream = new StreamRegion(stream, bundle.Offset, bundle.Size, true))
                        using (var reader = new AssetReader(asset_stream, bundle.Name))
                        {
                            var asset = new Asset();
                            asset.Load(reader);
                            var object_dir = ParseAsset(stream, bundle, asset);
                            dir.AddRange(object_dir);
                        }
                }
                if (0 == dir.Count)
                {
                    dir.AddRange(m_bundles);
                }
            }
            return(dir);
        }
Exemplo n.º 2
0
        public override IImageDecoder OpenImage(ArcFile arc, Entry entry)
        {
            var aent = entry as AssetEntry;

            if (null == aent || aent.AssetObject.Type != "Texture2D")
            {
                return(base.OpenImage(arc, entry));
            }
            var    uarc  = (UnityBundle)arc;
            var    obj   = aent.AssetObject;
            Stream input = new BundleStream(uarc.File, uarc.Segments);

            input = new StreamRegion(input, obj.Offset, obj.Size);
            var reader = new AssetReader(input, entry.Name);

            reader.SetupReaders(obj.Asset);
            return(new Texture2DDecoder(reader));
        }
Exemplo n.º 3
0
        public override IImageDecoder OpenImage(ArcFile arc, Entry entry)
        {
            var aent = entry as AssetEntry;

            if (null == aent || aent.AssetObject.TypeName != "Texture2D")
            {
                return(base.OpenImage(arc, entry));
            }
            var uarc    = (UnityBundle)arc;
            var obj     = aent.AssetObject;
            var bundles = new BundleStream(uarc.File, uarc.Segments);
            var input   = new StreamRegion(bundles, obj.Offset, obj.Size);
            var reader  = new AssetReader(input, entry.Name);

            reader.SetupReaders(obj.Asset);
            Texture2D tex  = null;
            var       type = obj.Type;

            if (type != null && type.Children.Any(t => t.Type == "StreamingInfo"))
            {
                var fields = obj.Deserialize(reader);
                tex = new Texture2D();
                tex.Import(fields);
                var info = fields["m_StreamData"] as StreamingInfo;
                if (info != null)
                {
                    var bundle = uarc.Bundles.FirstOrDefault(b => VFS.IsPathEqualsToFileName(info.Path, b.Name));
                    if (bundle != null)
                    {
                        tex.m_DataLength = (int)info.Size;
                        input            = new StreamRegion(bundles, bundle.Offset + info.Offset, info.Size);
                        reader           = new AssetReader(input, entry.Name);
                    }
                }
            }
            if (null == tex)
            {
                tex = new Texture2D();
                tex.Load(reader);
            }
            return(new Texture2DDecoder(tex, reader));
        }
Exemplo n.º 4
0
        public override Stream OpenEntry(ArcFile arc, Entry entry)
        {
            var    uarc  = (UnityBundle)arc;
            Stream input = new BundleStream(uarc.File, uarc.Segments);

            input = new StreamRegion(input, entry.Offset, entry.Size);
            var aent = entry as AssetEntry;

            if (null == aent || !aent.IsEncrypted)
            {
                return(input);
            }
            using (input)
            {
                var data = new byte[entry.Size];
                input.Read(data, 0, data.Length);
                DecryptAsset(data);
                return(new BinMemoryStream(data));
            }
        }