Exemple #1
0
        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);
                }
            }
        }
Exemple #2
0
        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
                    });
        }
Exemple #3
0
 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);
     }
 }