private void SaveAssets(ZipArchive archive, IFileSaveInfo saveInfo, Dictionary <string, IAsset> assets, IDictionary <Type, string> typeAliases) { var assetInfos = assets.Values.Select(x => { var localCopyPath = x.StorageType == AssetStorageType.CopyLocal ? Path.Combine("Assets", x.Name, x.AssetCachePath) : null; return(new AssetSaveLoadInfo(x, localCopyPath)); }).ToArray(); var assetInfoEntry = archive.CreateEntry("assetInfos.json"); using (var writer = trwFactory.JsonWriter(assetInfoEntry.Open())) using (var context = saveLoadFactory.AssetsInfoWriteContext(writer)) { context.TypeAliases = typeAliases; context.Write(assetInfos); } foreach (var asset in assets.Values) { foreach (var localFilePath in saveInfo.GetAssetLocalFiles(asset)) { var fileEntry = archive.CreateEntry(Path.Combine("Assets", asset.Name, localFilePath)); using (var writeStream = fileEntry.Open()) using (var readStream = saveInfo.ReadAssetFile(asset, localFilePath)) readStream.CopyTo(writeStream); } } }
private void SaveMetadata(ZipArchive archive, IFileSaveInfo saveInfo) { var metaEntry = archive.CreateEntry("meta.json"); using (var writer = trwFactory.JsonWriter(metaEntry.Open())) using (var context = saveLoadFactory.MetaWriteContext(writer)) context.Write(new SaveLoadMetadata { Version = converterContainer.CurrentVersion, IncludesEditingWorld = saveInfo.IncludeEditingWorld, IncludesReadOnlyWorld = saveInfo.IncludeReadOnlyWorld }); }
public void Save(IFileSaveInfo saveInfo) { using (var archive = new ZipArchive(saveInfo.FileSystem.OpenWriteNew(saveInfo.FilePath), ZipArchiveMode.Create, false, Encoding.UTF8)) { SaveMetadata(archive, saveInfo); var assets = new Dictionary <string, IAsset>(); var generatedResources = new List <GeneratedResourceSource>(); var typeAliases = new Dictionary <Type, string>(); if (saveInfo.IncludeEditingWorld) { SaveWorld(archive, saveInfo.World, "world.json", typeAliases, assets, generatedResources); } if (saveInfo.IncludeReadOnlyWorld) { SaveWorld(archive, saveInfo.ReadOnlyWorld, "readOnlyWorld.json", typeAliases, assets, generatedResources); } SaveAssets(archive, saveInfo, assets, typeAliases); SaveGeneratedResources(archive, generatedResources, typeAliases); SaveTypeAliases(archive, typeAliases); } }