Exemple #1
0
        private SaveLoadMetadata LoadMetadata(ZipArchive archive)
        {
            var metaEntry = archive.GetEntry("meta.json") ?? throw new Exception("meta.json not found.");

            using (var reader = trwFactory.JsonReader(metaEntry.Open()))
                using (var context = saveLoadFactory.MetaReadContext(reader))
                    return(context.Read <SaveLoadMetadata>());
        }
Exemple #2
0
        private T LoadConfig <T>() where T : class, IConfig, new()
        {
            var handlerContainer = serializationNecessities.GetTrwHandlerContainer(ConfigSerializationNecessitiesProvider.SerializationType);
            var options          = new TrwSerializationOptions
            {
                ExplicitTypes = TrwSerializationExplicitTypes.Never
            };

            using (var fileStream = fileStorage.FileSystem.OpenRead(GetFileName <T>()))
                using (var trwReader = trwFactory.JsonReader(fileStream))
                    using (var context = new TrwSerializationReadContext(trwReader, handlerContainer, null, options))
                        return(context.Read <T>());
        }
Exemple #3
0
        public bool TryLoad(IReadOnlyFileSystem fileSystem, string path, out ISkybox skybox, out string[] imageFileRelativePaths, out ErrorInfo error)
        {
            dynamic mainFile;

            using (var reader = trwFactory.JsonReader(fileSystem.OpenRead(path)))
                mainFile = reader.ReadAsDynamic();
            imageFileRelativePaths = new string[]
            {
                mainFile.Right,
                mainFile.Left,
                mainFile.Top,
                mainFile.Bottom,
                mainFile.Back,
                mainFile.Front
            };
            var folderPath = Path.Combine(Path.GetDirectoryName(path));
            var images     = new IImage[6];

            for (var i = 0; i < 6; i++)
            {
                var relPath = imageFileRelativePaths[i];
                using (var stream = fileSystem.OpenRead(Path.Combine(folderPath, relPath)))
                    if (!imageLoader.TryLoad(stream, out images[i], out error))
                    {
                        skybox = null;
                        return(false);
                    }
            }

            var width = images[0].Size.Width;

            if (images.Any(x => x.Size != new IntSize2(width, width)))
            {
                error  = new ErrorInfo("Skybox images are not of equal size");
                skybox = null;
                return(false);
            }
            skybox = new Skybox(ResourceVolatility.Immutable, width, images);
            return(true);
        }