Beispiel #1
0
        private void StoreInPackages(Stream s, string file, string packPath, AssetPackageType type)
        {
            int firstPack = FindAssetPackWithSpace();


            Console.WriteLine("Adding file: " + file + " To pack: " + (firstPack + 1));

            AssetPointer ap = new AssetPointer
            {
                PackageId   = firstPack,
                Offset      = (int)Packs[firstPack].BytesWritten,
                PackageSize = AssetPacker.PackSize,
                Length      = (int)s.Length,
                Path        = packPath,
                PackageType = type
            };

            IndexList.Add(ap);


            int packid    = firstPack;
            int bytesLeft = ap.Length;

            do
            {
                int write = bytesLeft;
                if (write > Packs[packid].SpaceLeft)
                {
                    write = Packs[packid].SpaceLeft;
                }

                byte[] b = new byte[write];
                s.Read(b, 0, write);
                Packs[packid].Write(b, 0, b.Length);
                bytesLeft -= write;
                if (bytesLeft != 0)
                {
                    packid = FindAssetPackWithSpace();
                }
            } while (bytesLeft != 0);

            s.Close();
        }
Beispiel #2
0
        protected Stream ReadSplittedFile(AssetPointer ptr)
        {
            List <byte> ret             = new List <byte>();
            int         bytesRead       = ptr.Offset;
            int         readEndPosition = ptr.Offset + ptr.Length;

            for (int i = 0; i < ManifestFilepaths.Length; i++)
            {
                Stream str = GetResourceStream(i);
                if (i == 0)
                {
                    int readLength = ptr.PackageSize - ptr.Offset;
                    str.Position = ptr.Offset;
                    byte[] rbuf = new byte[ptr.PackageSize - ptr.Offset];
                    str.Read(rbuf, 0, rbuf.Length);
                    ret.AddRange(rbuf);
                    bytesRead += readLength;
                }
                else
                {
                    int readLength = readEndPosition - bytesRead;
                    if (readLength > ptr.PackageSize)
                    {
                        readLength = ptr.PackageSize;
                    }

                    byte[] rbuf = new byte[readLength];
                    str.Read(rbuf, 0, readLength);
                    ret.AddRange(rbuf);
                    bytesRead += readLength;
                }

                str.Close();
            }

            return(new MemoryStream(ret.ToArray()));
        }
Beispiel #3
0
 public PackedAssemblyFile(bool compression, string[] manifestFilepaths, Assembly assembly, AssetPointer ptr) :
     base(compression, manifestFilepaths,
          assembly)
 {
     _ptr = ptr;
 }
Beispiel #4
0
 public IoPackedAssemblyFile(bool compressed, string[] packFilepaths, AssetPointer ptr) : base(compressed,
                                                                                               packFilepaths, null)
 {
     _ptr = ptr;
 }