Esempio n. 1
0
        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
            });
        }
Esempio n. 2
0
        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();
        }
Esempio n. 3
0
 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();
         }
     }
 }
Esempio n. 4
0
        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);
        }