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(); }
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())); }
public PackedAssemblyFile(bool compression, string[] manifestFilepaths, Assembly assembly, AssetPointer ptr) : base(compression, manifestFilepaths, assembly) { _ptr = ptr; }
public IoPackedAssemblyFile(bool compressed, string[] packFilepaths, AssetPointer ptr) : base(compressed, packFilepaths, null) { _ptr = ptr; }