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); }
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); }
public void Write(AssetsWriter writer) { writer.Write(NumItems); writer.WriteArray(Data); writer.AlignTo(4); writer.Write(BitSize); writer.AlignTo(4); }
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); }
public void Write(AssetsWriter writer) { writer.Write(VertexCount); writer.WriteArrayOf(Channels, (o, w) => o.Write(w)); writer.WriteArray(Data); writer.AlignTo(4); }
public void Write(AssetsWriter writer) { writer.Write(FirstVertex); writer.Write(VertexCount); writer.Write(HasNormals); writer.Write(HasTangents); writer.AlignTo(4); }
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); }
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)); }
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); }
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(""); }
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)); }
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); }
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); }
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); } }
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(); } }
public void WritePtr(AssetsWriter writer) { writer.Write(FileID); writer.AlignTo(4); writer.Write(Target.ObjectID); }
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); }
public override void Write(AssetsWriter writer) { WriteBase(writer); writer.Write(ScriptParametersData); writer.AlignTo(4); }