private ConversionContext InitConversionContext(IFileLoadInfo loadInfo, Presentation ppPresentation) { var nextId = 1; var world = AmFactory.Create <World>(); var scene = AmFactory.Create <Scene>(); scene.Name = "Scene"; scene.BackgroundColor = Color4.White; world.Scenes.Add(scene); var rootNode = commonNodeFactory.WorldRoot(true); scene.Root = rootNode; rootNode.Id = nextId++; var floorNode = commonNodeFactory.StoryNode(); floorNode.Id = nextId++; floorNode.Name = "Slides"; rootNode.ChildNodes.Add(floorNode); return(new ConversionContext { NextId = nextId, LoadInfo = loadInfo, PpPresentation = ppPresentation, World = world, SlideNodes = floorNode.ChildNodes }); }
public void Load(IFileLoadInfo loadInfo) { var ppApp = new Application(); var ppPresentation = ppApp.Presentations.Open(loadInfo.FilePath, MsoTriState.msoTrue, MsoTriState.msoTrue, MsoTriState.msoFalse); var context = InitConversionContext(loadInfo, ppPresentation); foreach (Slide slide in ppPresentation.Slides) { LoadSlideNode(context, slide); } var sceneRoot = context.World.Scenes.First().Root; var cStoryRoot = sceneRoot.GetComponent <StoryServiceRootComponent>(); foreach (var nodePair in context.SlideNodes.SequentialPairs()) { cStoryRoot.Edges.Add(Tuples.SameTypePair(nodePair.First.Id, nodePair.Second.Id)); } var cStory = sceneRoot.GetComponent <IStoryComponent>(); cStory.ShowAux1 = false; cStory.ShowAux2 = false; loadInfo.OnLoadedWorld(context.World); ppPresentation.Close(); }
public void Load(IFileLoadInfo loadInfo) { using (var archive = new ZipArchive(loadInfo.FileSystem.OpenRead(loadInfo.FilePath), ZipArchiveMode.Read, false, Encoding.UTF8)) { var metadata = LoadMetadata(archive); var typeAliases = LoadTypeAliases(archive, metadata); var assets = LoadAssets(archive, metadata, typeAliases, loadInfo); var generatedResources = LoadGeneratedResources(archive, metadata, typeAliases); if (metadata.IncludesReadOnlyWorld && (loadInfo.PreferReadOnly || !metadata.IncludesEditingWorld)) { var world = LoadWorld(archive, "readOnlyWorld.json", metadata, typeAliases, assets, generatedResources); loadInfo.OnLoadedReadOnlyWorld(world); } else if (metadata.IncludesEditingWorld) { var world = LoadWorld(archive, "world.json", metadata, typeAliases, assets, generatedResources); loadInfo.OnLoadedWorld(world); } else { loadInfo.OnLoadedNoWorld(); } } }
private IDictionary <string, IAsset> LoadAssets(ZipArchive archive, SaveLoadMetadata metadata, IReadOnlyDictionary <string, Type> typeAliases, IFileLoadInfo loadInfo) { AssetSaveLoadInfo[] assetInfos; var assetInfoEntry = archive.GetEntry("assetInfos.json") ?? throw new Exception("assetInfo.json not found."); using (var reader = trwFactory.JsonReader(assetInfoEntry.Open())) using (var convertedReader = converterContainer.ConvertAssetInfoReader(reader, metadata.Version, converterContainer.CurrentVersion)) using (var context = saveLoadFactory.AssetsInfoReadContext(convertedReader, typeAliases)) assetInfos = context.Read <AssetSaveLoadInfo[]>(); var assets = new Dictionary <string, IAsset>(); var zipFileSystem = new ZipFileSystem(archive); var actualFileSystem = new ActualFileSystem(); foreach (var assetInfo in assetInfos) { var assetLoadInfo = new AssetLoadInfo { AssetName = assetInfo.AssetName, StorageType = assetInfo.StorageType, ReferencePath = assetInfo.ReferencePath }; switch (assetInfo.StorageType) { case AssetStorageType.CopyLocal: assetLoadInfo.FileSystem = zipFileSystem; assetLoadInfo.LoadPath = assetInfo.LocalCopyPath; break; case AssetStorageType.ReferenceOriginal: assetLoadInfo.FileSystem = actualFileSystem; assetLoadInfo.LoadPath = assetInfo.ReferencePath; break; default: throw new ArgumentOutOfRangeException(); } var asset = loadInfo.OnFoundAsset(assetLoadInfo); assets.Add(asset.Name, asset); } return(assets); }