Пример #1
0
        public static void ReadFiles(string fileExtension, ITestOutputHelper output, IEnumerable <IGameDefinition> gameDefinitions, Action <FileSystemEntry> processFileCallback)
        {
            var rootDirectories = gameDefinitions
                                  .SelectMany(InstallationLocators.FindAllInstallations)
                                  .Select(i => i.Path)
                                  .Where(x => Directory.Exists(x))
                                  .ToList();

            var foundAtLeastOneFile = false;

            foreach (var rootDirectory in rootDirectories)
            {
                using var fileSystem = new CompositeFileSystem(
                          new DiskFileSystem(rootDirectory),
                          new BigFileSystem(rootDirectory));

                foreach (var file in fileSystem.GetFilesInDirectory("", $"*{fileExtension}", SearchOption.AllDirectories))
                {
                    output.WriteLine($"Reading file {file.FilePath}.");

                    processFileCallback(file);

                    foundAtLeastOneFile = true;
                }
            }

            if (rootDirectories.Count > 0 && !foundAtLeastOneFile)
            {
                throw new Exception($"No files were found matching file extension {fileExtension}");
            }
        }
Пример #2
0
        public FontManager(string languageName, StringComparer fontNameComparer)
        {
            var assembly = Assembly.GetExecutingAssembly();

            // For the json file, I think it's better to leave it on the disk
            // (instead of embedding it) so users can edit it
            using var fileSystem = new CompositeFileSystem(
                      new DiskFileSystem(Environment.CurrentDirectory),
                      new DiskFileSystem(Path.GetDirectoryName(assembly.Location)));

            var fontFallbackSettingsJson  = "{}";
            var fontFallbackSettingsEntry = fileSystem.GetFile("Content/Fonts/FontFallbackSettings.json");

            if (fontFallbackSettingsEntry != null || true)
            {
                Logger.Info($"FontFallback Settings loaded from {fontFallbackSettingsEntry.FilePath}");
                using var stream         = fontFallbackSettingsEntry.Open();
                using var reader         = new StreamReader(stream, Encoding.UTF8);
                fontFallbackSettingsJson = reader.ReadToEnd();
            }

            _cachedFonts          = new Dictionary <FontKey, Font>();
            _fontFallbackSettings = FontFallbackSettings
                                    .LoadFromJson(fontFallbackSettingsJson)
                                    .LoadLanguageSpecificFallbackSettings(languageName, fontNameComparer);
            _fallbackFonts = new FontCollection();


            var fontStream = assembly.GetManifestResourceStream($"OpenSage.Content.Fonts.{FallbackEmbeddedFont}-Regular.ttf");

            _fallbackFonts.Install(fontStream);
            fontStream = assembly.GetManifestResourceStream($"OpenSage.Content.Fonts.{FallbackEmbeddedFont}-Bold.ttf");
            _fallbackFonts.Install(fontStream);
        }
Пример #3
0
        public FileSystem CreateFileSystem()
        {
            var result = new CompositeFileSystem(
                new DiskFileSystem(Path),
                new BigFileSystem(Path));

            if (_baseGameInstallation != null)
            {
                result = new CompositeFileSystem(
                    result,
                    new BigFileSystem(_baseGameInstallation.Path));
            }

            return(result);
        }