Esempio n. 1
0
 protected override void WriteObject(AssetsWriter writer)
 {
     base.WriteBase(writer);
     writer.Write(Name);
     //writer.Write(MeshData);
     writer.WriteArrayOf(SubMeshes, (o, w) => o.Write(w));
     BlendShapeData.Write(writer);
     writer.WriteArrayOf(BindPose, (o, w) => w.Write(o));
     writer.WriteArrayOf(BoneNameHashes, (o, w) => w.Write(o));
     writer.Write(RootBoneNameHash);
     writer.Write(MeshCompression);
     writer.Write(IsReadable);
     writer.Write(KeepVerticies);
     writer.Write(KeepIndicies);
     writer.AlignTo(4);
     writer.Write(IndexFormat);
     writer.WriteArray(IndexBuffer);
     writer.AlignTo(4);
     VertexData.Write(writer);
     CompressedMesh.Write(writer);
     LocalAABB.Write(writer);
     writer.Write(MeshUsageFlags);
     writer.WriteArray(BakedConvexCollisionMesh);
     writer.AlignTo(4);
     writer.WriteArray(BakedTriangleCollisionMesh);
     writer.AlignTo(4);
     writer.Write(MeshMetrics1);
     writer.Write(MeshMetrics2);
     StreamData.Write(writer);
 }
Esempio n. 2
0
 protected override void WriteObject(AssetsWriter writer)
 {
     base.WriteBase(writer);
     writer.Write(Name);
     writer.Write(ForcedFallbackFormat);
     writer.Write(DownscaleFallback);
     writer.AlignTo(4);
     writer.Write(Width);
     writer.Write(Height);
     writer.Write(CompleteImageSize);
     writer.Write((int)TextureFormat);
     writer.Write(MipCount);
     writer.Write(IsReadable);
     writer.Write(StreamingMipmaps);
     writer.AlignTo(4);
     writer.Write(StreamingMipmapsPriority);
     writer.Write(ImageCount);
     writer.Write(TextureDimension);
     TextureSettings.Write(writer);
     writer.Write(LightmapFormat);
     writer.Write(ColorSpace);
     writer.Write(ImageData.Length);
     writer.Write(ImageData);
     writer.AlignTo(4);
     StreamData.Write(writer);
 }
Esempio n. 3
0
 public void Write(AssetsWriter writer)
 {
     writer.Write(NumItems);
     writer.WriteArray(Data);
     writer.AlignTo(4);
     writer.Write(BitSize);
     writer.AlignTo(4);
 }
Esempio n. 4
0
 protected override void WriteObject(AssetsWriter writer)
 {
     base.WriteBase(writer);
     writer.Write(IsEnabled);
     writer.Write(CastShadows);
     writer.Write(ReceiveShadows);
     writer.Write(DynamicOcclude);
     writer.Write(MotionVectors);
     writer.Write(LightProbeUsage);
     writer.Write(ReflectionProbeUsage);
     writer.AlignTo(4);
     writer.Write(RenderingLayerMask);
     if (ObjectInfo.ParentFile.Metadata.VersionGte("2018.3"))
     {
         writer.Write(RendererPriority);
     }
     writer.Write(LightmapIndex);
     writer.Write(LightmapIndexDynamic);
     LightmapTilingOffset.Write(writer);
     LightmapTilingOffsetDynamic.Write(writer);
     writer.WriteArrayOf(Materials, (o, w) => o.Write(w));
     StaticBatchInfo.Write(writer);
     StaticBatchRoot.Write(writer);
     ProbeAnchor.Write(writer);
     LightProbeVolumeOverride.Write(writer);
     writer.Write(SortingLayerID);
     writer.Write(SortingLayer);
     writer.Write(SortingOrder);
     AdditionalVertexStreams.Write(writer);
 }
Esempio n. 5
0
 public void Write(AssetsWriter writer)
 {
     writer.Write(VertexCount);
     writer.WriteArrayOf(Channels, (o, w) => o.Write(w));
     writer.WriteArray(Data);
     writer.AlignTo(4);
 }
Esempio n. 6
0
 public void Write(AssetsWriter writer)
 {
     writer.Write(FirstVertex);
     writer.Write(VertexCount);
     writer.Write(HasNormals);
     writer.Write(HasTangents);
     writer.AlignTo(4);
 }
Esempio n. 7
0
 protected override void WriteObject(AssetsWriter writer)
 {
     base.WriteBase(writer);
     writer.Write(Name);
     writer.Write(LoadType);
     writer.Write(Channels);
     writer.Write(Frequency);
     writer.Write(BitsPerSample);
     writer.Write(Length);
     writer.Write(IsTrackerFormat);
     writer.Write(Ambisonic);
     writer.AlignTo(4);
     writer.Write(SubsoundIndex);
     writer.Write(PreloadAudioData);
     writer.Write(LoadInBackground);
     writer.Write(Legacy3D);
     writer.AlignTo(4);
     Resource.Write(writer);
     writer.Write(CompressionFormat);
 }
Esempio n. 8
0
 protected override void WriteBase(AssetsWriter writer)
 {
     base.WriteBase(writer);
     writer.Write(Name);
     writer.WriteArrayOf(PreloadTable, (x, y) => x.WritePtr(y));
     writer.WriteArrayOf(Container, (x, y) => x.Write(y));
     MainAsset.Write(writer);
     writer.Write(RuntimeCompatibility);
     writer.Write(AssetBundleName);
     writer.WriteArrayOf(Dependencies, (x, y) => x.WritePtr(y));
     writer.Write(IsStreamedSceneAssetBundle);
     writer.AlignTo(4);
     writer.Write(ExplicitDataLayout);
     writer.Write(PathFlags);
     writer.WriteArrayOf(SceneHashes, (x, y) => x.Write(y));
 }
Esempio n. 9
0
 public void Write(AssetsWriter writer)
 {
     Texture.Write(writer);
     AlphaTexture.Write(writer);
     writer.WriteArrayOf(SubMeshes, (o, w) => o.Write(w));
     writer.WriteArray(IndexBuffer);
     writer.AlignTo(4);
     VertexData.Write(writer);
     writer.WriteArrayOf(BindPose, (o, w) => w.Write(o));
     TextureRect.Write(writer);
     TextureRectOffset.Write(writer);
     AtlasRectOffset.Write(writer);
     writer.Write(SettingsRaw);
     UVTransform.Write(writer);
     writer.Write(DownscaleMultiplier);
 }
Esempio n. 10
0
 public void Write(AssetsWriter writer)
 {
     writer.WriteCString(Version);
     writer.Write(Platform);
     writer.Write(HasTypeTrees);
     writer.Write(Types.Count());
     Types.ForEach(x => x.Write(writer));
     writer.Write(ObjectInfos.Count());
     ObjectInfos.ForEach(x => {
         writer.AlignTo(4);
         x.Write(writer);
     });
     writer.Write(Adds.Count());
     Adds.ForEach(x => x.Write(writer));
     writer.Write(ExternalFiles.Count());
     ExternalFiles.ForEach(x => x.Write(writer));
     writer.WriteCString("");
 }
Esempio n. 11
0
 protected override void WriteBase(AssetsWriter writer)
 {
     base.WriteBase(writer);
     writer.Write(Name);
     Rect.Write(writer);
     Offset.Write(writer);
     Border.Write(writer);
     writer.Write(PixelsToUnits);
     Pivot.Write(writer);
     writer.Write(Extrude);
     writer.Write(IsPolygon);
     writer.AlignTo(4);
     writer.Write(RenderDataKey.First);
     writer.Write(RenderDataKey.Second);
     writer.WriteArrayOf(AtlasTags, (o, w) => w.Write(o));
     SpriteAtlas.Write(writer);
     RenderData.Write(writer);
     writer.WriteArrayOf(PhysicsShape, (o, w) => w.WriteArrayOf(o, (o2, w2) => o2.Write(w2)));
     writer.WriteArrayOf(Bones, (o, w) => o.Write(w));
 }
Esempio n. 12
0
 protected override void WriteObject(AssetsWriter writer)
 {
     base.WriteBase(writer);
     writer.Write(Name);
     Shader.Write(writer);
     writer.Write(ShaderKeywords);
     writer.Write(LightmapFlags);
     writer.Write(EnableInstancingVariants);
     writer.Write(DoubleSidedGI);
     writer.AlignTo(4);
     writer.Write(CustomRenderQueue);
     writer.WriteArrayOf(StringTagMap, (o, w) =>
     {
         w.Write(o.First);
         w.Write(o.Second);
     });
     writer.WriteArrayOf(DisabledShaderPasses, (o, w) =>
     {
         w.Write(o);
     });
     SavedProperties.Write(writer);
 }
Esempio n. 13
0
        public void Write(Stream outputStream)
        {
            MemoryStream objectsMS = new MemoryStream();
            MemoryStream metaMS    = new MemoryStream();

            using (AssetsWriter writer = new AssetsWriter(objectsMS))
            {
                int ctr = 0;
                foreach (var obj in Metadata.ObjectInfos.Select(x => x.Object))
                {
                    ctr++;
                    obj.ObjectInfo.DataOffset = (int)objectsMS.Position;
                    obj.Write(writer);
                    writer.Flush();
                    var origSize = obj.ObjectInfo.DataSize;
                    obj.ObjectInfo.DataSize = (int)(objectsMS.Position - obj.ObjectInfo.DataOffset);
                    writer.AlignTo(8);
                }
            }
            using (AssetsWriter writer = new AssetsWriter(metaMS))
            {
                Metadata.Write(writer);
            }

            Header.FileSize         = Header.HeaderSize + (int)objectsMS.Length + (int)metaMS.Length;
            Header.ObjectDataOffset = Header.HeaderSize + (int)metaMS.Length;

            int diff      = 0;
            int alignment = 16; //or 32, I don't know which

            //data has to be at least 4096 inward from the start of the file
            if (Header.ObjectDataOffset < 4096)
            {
                diff = 4096 - Header.ObjectDataOffset;
            }
            else
            {
                diff = alignment - (Header.ObjectDataOffset % alignment);
                if (diff == alignment)
                {
                    diff = 0;
                }
            }


            if (diff > 0)
            {
                Header.ObjectDataOffset += diff;
                Header.FileSize         += diff;
            }

            Header.MetadataSize = (int)metaMS.Length;
            objectsMS.Seek(0, SeekOrigin.Begin);
            metaMS.Seek(0, SeekOrigin.Begin);



            using (AssetsWriter writer = new AssetsWriter(outputStream))
            {
                Header.Write(writer);
            }
            metaMS.CopyTo(outputStream);


            if (diff > 0)
            {
                outputStream.Write(new byte[diff], 0, diff);
            }

            objectsMS.CopyTo(outputStream);
        }
Esempio n. 14
0
        public void Write()
        {
            MemoryStream objectsMS = new MemoryStream();
            MemoryStream metaMS    = new MemoryStream();

            using (AssetsWriter writer = new AssetsWriter(objectsMS))
            {
                int ctr = 0;
                foreach (var obj in Metadata.ObjectInfos)
                {
                    ctr++;
                    obj.DataOffset = (int)objectsMS.Position;
                    obj.GetObjectForWrite().Write(writer);
                    writer.Flush();
                    var origSize = obj.DataSize;
                    obj.DataSize = (int)(objectsMS.Position - obj.DataOffset);
                    writer.AlignTo(8);
                }
            }
            using (AssetsWriter writer = new AssetsWriter(metaMS))
            {
                Metadata.Write(writer);
            }

            Header.FileSize         = Header.HeaderSize + (int)objectsMS.Length + (int)metaMS.Length;
            Header.ObjectDataOffset = Header.HeaderSize + (int)metaMS.Length;

            int diff;
            int alignment = 16; //or 32, I don't know which

            //data has to be at least 4096 inward from the start of the file
            if (Header.ObjectDataOffset < 4096)
            {
                diff = 4096 - Header.ObjectDataOffset;
            }
            else
            {
                diff = alignment - (Header.ObjectDataOffset % alignment);
                if (diff == alignment)
                {
                    diff = 0;
                }
            }

            if (diff > 0)
            {
                Header.ObjectDataOffset += diff;
                Header.FileSize         += diff;
            }

            Header.MetadataSize = (int)metaMS.Length;
            objectsMS.Seek(0, SeekOrigin.Begin);
            metaMS.Seek(0, SeekOrigin.Begin);
            try
            {
                CloseBaseStream();

                FileProvider.DeleteFiles(AssetsRootPath + AssetsFilename + ".split*");

                using (MemoryStream outputStream = new MemoryStream())
                {
                    using (AssetsWriter writer = new AssetsWriter(outputStream))
                    {
                        Header.Write(writer);
                    }
                    metaMS.CopyTo(outputStream);


                    if (diff > 0)
                    {
                        outputStream.Write(new byte[diff], 0, diff);
                    }

                    objectsMS.CopyTo(outputStream);

                    outputStream.Seek(0, SeekOrigin.Begin);
                    FileProvider.Write(AssetsRootPath + AssetsFilename, outputStream.ToArray(), true, true);
                }

                _hasChanges = false;
                FileProvider.Save();
                OpenBaseStream();
            }
            catch (Exception ex)
            {
                throw new Exception("CRITICAL: writing and reopening the file failed, the file is possibly destroyed and this object is in an unknown state.", ex);
            }
        }
Esempio n. 15
0
        public void Write()
        {
            try
            {
                using (Stream objectsMS = GetTempStream())
                {
                    using (Stream metaMS = GetTempStream())
                    {
                        using (AssetsWriter writer = new AssetsWriter(objectsMS))
                        {
                            int ctr = 0;
                            foreach (var obj in Metadata.ObjectInfos)
                            {
                                ctr++;
                                var offset = (int)objectsMS.Position;
                                obj.GetObjectForWrite().Write(writer);
                                writer.Flush();
                                obj.DataOffset = offset;
                                var origSize = obj.DataSize;
                                obj.DataSize = (int)(objectsMS.Position - obj.DataOffset);
                                writer.AlignTo(8);
                            }
                        }
                        using (AssetsWriter writer = new AssetsWriter(metaMS))
                        {
                            Metadata.Write(writer);
                        }

                        Header.FileSize         = Header.HeaderSize + (int)objectsMS.Length + (int)metaMS.Length;
                        Header.ObjectDataOffset = Header.HeaderSize + (int)metaMS.Length;

                        int diff;
                        int alignment = 16; //or 32, I don't know which
                                            //data has to be at least 4096 inward from the start of the file
                        if (Header.ObjectDataOffset < 4096)
                        {
                            diff = 4096 - Header.ObjectDataOffset;
                        }
                        else
                        {
                            diff = alignment - (Header.ObjectDataOffset % alignment);
                            if (diff == alignment)
                            {
                                diff = 0;
                            }
                        }

                        if (diff > 0)
                        {
                            Header.ObjectDataOffset += diff;
                            Header.FileSize         += diff;
                        }

                        Header.MetadataSize = (int)metaMS.Length;
                        objectsMS.Seek(0, SeekOrigin.Begin);
                        metaMS.Seek(0, SeekOrigin.Begin);
                        lock (this)
                        {
                            try
                            {
                                CloseBaseStream();


                                FileProvider.DeleteFiles(AssetsRootPath.CombineFwdSlash(AssetsFilename + ".split*"));

                                using (Stream outputStream = GetTempStream())
                                {
                                    using (AssetsWriter writer = new AssetsWriter(outputStream))
                                    {
                                        Header.Write(writer);
                                    }
                                    metaMS.CopyTo(outputStream);


                                    if (diff > 0)
                                    {
                                        outputStream.Write(new byte[diff], 0, diff);
                                    }

                                    objectsMS.CopyTo(outputStream);

                                    outputStream.Seek(0, SeekOrigin.Begin);
                                    if (FileWasSplit)
                                    {
                                        int    splitCtr = 0;
                                        byte[] buffer   = new byte[1024 * 1024];
                                        do
                                        {
                                            Stream outFile = FileProvider.GetWriteStream($"{AssetsRootPath.CombineFwdSlash(AssetsFilename)}.split{splitCtr}");
                                            var    readLen = (int)(outputStream.Length - outputStream.Position);
                                            if (readLen < buffer.Length)
                                            {
                                                outputStream.Read(buffer, 0, readLen);
                                                outFile.Write(buffer, 0, readLen);
                                                break;
                                            }
                                            outputStream.Read(buffer, 0, buffer.Length);
                                            outFile.Write(buffer, 0, buffer.Length);
                                            splitCtr++;
                                        } while (true);
                                    }
                                    else
                                    {
                                        Stream writeStream = FileProvider.GetWriteStream(AssetsRootPath.CombineFwdSlash(AssetsFilename));
                                        outputStream.CopyTo(writeStream);
                                    }
                                }
                                FileProvider.Save();
                                _hasChanges = false;
                                foreach (var ptr in _knownPointers.Where(x => x.Owner.ObjectInfo.ParentFile == this && x.IsNew))
                                {
                                    ptr.IsNew = false;
                                }
                                OpenBaseStream();
                            }
                            catch (Exception ex)
                            {
                                throw new Exception("CRITICAL: writing and reopening the file failed, the file is possibly destroyed and this object is in an unknown state.", ex);
                            }
                        }
                    }
                }
            }
            finally
            {
                CleanupTempFiles();
            }
        }
Esempio n. 16
0
 public void WritePtr(AssetsWriter writer)
 {
     writer.Write(FileID);
     writer.AlignTo(4);
     writer.Write(Target.ObjectID);
 }
Esempio n. 17
0
 public void Write(AssetsWriter writer)
 {
     writer.Write(FileID);
     writer.AlignTo(4);
     writer.Write(PathID);
 }
 protected override void WriteObject(AssetsWriter writer)
 {
     WriteBase(writer);
     writer.Write(ScriptParametersData);
     writer.AlignTo(4);
 }
Esempio n. 19
0
 public override void Write(AssetsWriter writer)
 {
     WriteBase(writer);
     writer.Write(ScriptParametersData);
     writer.AlignTo(4);
 }