From 1b88d24cfa99e77c3e36a56249c3c1b3da433173 Mon Sep 17 00:00:00 2001 From: Pavel Penev Date: Fri, 9 Oct 2015 13:55:08 +0300 Subject: [PATCH] Unstatic GlobalFileSystem and rename it to FileSystem Add a ModFiles field on ModData and move all access to the file system to go through that. --- OpenRA.Game/FileSystem/BagFile.cs | 10 +- OpenRA.Game/FileSystem/BigFile.cs | 2 +- OpenRA.Game/FileSystem/D2kSoundResources.cs | 2 +- .../{GlobalFileSystem.cs => FileSystem.cs} | 102 +++++++++--------- .../FileSystem/InstallShieldCABExtractor.cs | 7 +- .../FileSystem/InstallShieldPackage.cs | 2 +- OpenRA.Game/FileSystem/MixFile.cs | 8 +- OpenRA.Game/FileSystem/Pak.cs | 2 +- OpenRA.Game/Game.cs | 9 +- OpenRA.Game/GameRules/MusicInfo.cs | 5 +- OpenRA.Game/Graphics/ChromeProvider.cs | 5 +- OpenRA.Game/Graphics/CursorProvider.cs | 5 +- OpenRA.Game/Graphics/Sheet.cs | 6 +- OpenRA.Game/Graphics/SpriteLoader.cs | 3 +- OpenRA.Game/Graphics/VoxelLoader.cs | 5 +- OpenRA.Game/Map/Map.cs | 4 +- OpenRA.Game/MiniYaml.cs | 7 -- OpenRA.Game/ModData.cs | 11 +- OpenRA.Game/OpenRA.Game.csproj | 3 +- OpenRA.Game/Scripting/ScriptContext.cs | 7 +- OpenRA.Game/Sound/Sound.cs | 9 +- OpenRA.Mods.Cnc/CncLoadScreen.cs | 5 +- OpenRA.Mods.Common/InstallUtils.cs | 7 +- .../LoadScreens/BlankLoadScreen.cs | 2 - .../LoadScreens/LogoStripeLoadScreen.cs | 5 +- .../LoadScreens/ModChooserLoadScreen.cs | 9 +- .../Scripting/Global/MediaGlobal.cs | 5 +- .../Traits/World/PaletteFromCurrentTileset.cs | 3 +- .../Traits/World/PaletteFromFile.cs | 3 +- .../World/PlayerPaletteFromCurrentTileset.cs | 3 +- .../UtilityCommands/CheckCodeStyle.cs | 3 + .../UtilityCommands/CheckSequenceSprites.cs | 3 +- .../UtilityCommands/ExtractFilesCommand.cs | 4 +- .../UtilityCommands/FixClassicTilesets.cs | 5 +- .../UtilityCommands/GenerateMinimapCommand.cs | 5 +- .../UtilityCommands/LegacyMapImporter.cs | 5 +- .../UtilityCommands/RemapShpCommand.cs | 5 +- .../Widgets/Logic/AssetBrowserLogic.cs | 6 +- .../Widgets/Logic/CreditsLogic.cs | 3 +- .../Widgets/Logic/MissionBrowserLogic.cs | 7 +- OpenRA.Mods.Common/Widgets/VqaPlayerWidget.cs | 3 +- .../Traits/World/FogPaletteFromR8.cs | 3 +- OpenRA.Mods.D2k/Traits/World/PaletteFromR8.cs | 3 +- .../UtilityCommands/LegacyTilesetImporter.cs | 9 +- OpenRA.Platforms.Default/Shader.cs | 3 +- OpenRA.Utility/Program.cs | 3 +- 46 files changed, 154 insertions(+), 172 deletions(-) rename OpenRA.Game/FileSystem/{GlobalFileSystem.cs => FileSystem.cs} (83%) diff --git a/OpenRA.Game/FileSystem/BagFile.cs b/OpenRA.Game/FileSystem/BagFile.cs index 812e5359fe..481851a21c 100644 --- a/OpenRA.Game/FileSystem/BagFile.cs +++ b/OpenRA.Game/FileSystem/BagFile.cs @@ -39,14 +39,14 @@ namespace OpenRA.FileSystem // Build the index and dispose the stream, it is no longer needed after this List entries; - using (var indexStream = GlobalFileSystem.Open(indexFilename)) + using (var indexStream = Game.ModData.ModFiles.Open(indexFilename)) entries = new IdxReader(indexStream).Entries; index = entries.ToDictionaryWithConflictLog(x => x.Hash, "{0} (bag format)".F(filename), null, x => "(offs={0}, len={1})".F(x.Offset, x.Length)); - s = GlobalFileSystem.Open(filename); + s = Game.ModData.ModFiles.Open(filename); } public int Priority { get { return 1000 + bagFilePriority; } } @@ -159,9 +159,9 @@ namespace OpenRA.FileSystem public IEnumerable AllFileNames() { var lookup = new Dictionary(); - if (GlobalFileSystem.Exists("global mix database.dat")) + if (Game.ModData.ModFiles.Exists("global mix database.dat")) { - var db = new XccGlobalDatabase(GlobalFileSystem.Open("global mix database.dat")); + var db = new XccGlobalDatabase(Game.ModData.ModFiles.Open("global mix database.dat")); foreach (var e in db.Entries) { var hash = IdxEntry.HashFilename(e, PackageHashType.CRC32); @@ -175,7 +175,7 @@ namespace OpenRA.FileSystem public void Write(Dictionary contents) { - GlobalFileSystem.Unmount(this); + Game.ModData.ModFiles.Unmount(this); throw new NotImplementedException("Updating bag files unsupported"); } diff --git a/OpenRA.Game/FileSystem/BigFile.cs b/OpenRA.Game/FileSystem/BigFile.cs index 50e3069a4c..5bb01e2cc6 100644 --- a/OpenRA.Game/FileSystem/BigFile.cs +++ b/OpenRA.Game/FileSystem/BigFile.cs @@ -27,7 +27,7 @@ namespace OpenRA.FileSystem Name = filename; Priority = priority; - s = GlobalFileSystem.Open(filename); + s = Game.ModData.ModFiles.Open(filename); try { if (s.ReadASCII(4) != "BIGF") diff --git a/OpenRA.Game/FileSystem/D2kSoundResources.cs b/OpenRA.Game/FileSystem/D2kSoundResources.cs index ca21c4f5a5..7ffc27c0e0 100644 --- a/OpenRA.Game/FileSystem/D2kSoundResources.cs +++ b/OpenRA.Game/FileSystem/D2kSoundResources.cs @@ -29,7 +29,7 @@ namespace OpenRA.FileSystem this.filename = filename; this.priority = priority; - s = GlobalFileSystem.Open(filename); + s = Game.ModData.ModFiles.Open(filename); try { filenames = new List(); diff --git a/OpenRA.Game/FileSystem/GlobalFileSystem.cs b/OpenRA.Game/FileSystem/FileSystem.cs similarity index 83% rename from OpenRA.Game/FileSystem/GlobalFileSystem.cs rename to OpenRA.Game/FileSystem/FileSystem.cs index 255e7e1bb3..a239eed881 100644 --- a/OpenRA.Game/FileSystem/GlobalFileSystem.cs +++ b/OpenRA.Game/FileSystem/FileSystem.cs @@ -17,34 +17,16 @@ using OpenRA.Primitives; namespace OpenRA.FileSystem { - public static class GlobalFileSystem + public class FileSystem { - public static List MountedFolders = new List(); - static Cache> classicHashIndex = new Cache>(_ => new List()); - static Cache> crcHashIndex = new Cache>(_ => new List()); + public readonly List FolderPaths = new List(); + public readonly List MountedFolders = new List(); - public static List FolderPaths = new List(); + static readonly Dictionary AssemblyCache = new Dictionary(); - static void MountInner(IFolder folder) - { - MountedFolders.Add(folder); - - foreach (var hash in folder.ClassicHashes()) - { - var l = classicHashIndex[hash]; - if (!l.Contains(folder)) - l.Add(folder); - } - - foreach (var hash in folder.CrcHashes()) - { - var l = crcHashIndex[hash]; - if (!l.Contains(folder)) - l.Add(folder); - } - } - - static int order = 0; + int order; + Cache> crcHashIndex = new Cache>(_ => new List()); + Cache> classicHashIndex = new Cache>(_ => new List()); public static IFolder CreatePackage(string filename, int order, Dictionary content) { @@ -99,7 +81,13 @@ namespace OpenRA.FileSystem return new Folder(filename, order); } - public static void Mount(string name, string annotation = null) + public void Mount(IFolder mount) + { + if (!MountedFolders.Contains(mount)) + MountedFolders.Add(mount); + } + + public void Mount(string name, string annotation = null) { var optional = name.StartsWith("~"); if (optional) @@ -117,7 +105,34 @@ namespace OpenRA.FileSystem a(); } - public static void UnmountAll() + void MountInner(IFolder folder) + { + MountedFolders.Add(folder); + + foreach (var hash in folder.ClassicHashes()) + { + var folderList = classicHashIndex[hash]; + if (!folderList.Contains(folder)) + folderList.Add(folder); + } + + foreach (var hash in folder.CrcHashes()) + { + var folderList = crcHashIndex[hash]; + if (!folderList.Contains(folder)) + folderList.Add(folder); + } + } + + public bool Unmount(IFolder mount) + { + if (MountedFolders.Contains(mount)) + mount.Dispose(); + + return MountedFolders.RemoveAll(f => f == mount) > 0; + } + + public void UnmountAll() { foreach (var folder in MountedFolders) folder.Dispose(); @@ -128,20 +143,7 @@ namespace OpenRA.FileSystem crcHashIndex = new Cache>(_ => new List()); } - public static bool Unmount(IFolder mount) - { - if (MountedFolders.Contains(mount)) - mount.Dispose(); - - return MountedFolders.RemoveAll(f => f == mount) > 0; - } - - public static void Mount(IFolder mount) - { - if (!MountedFolders.Contains(mount)) MountedFolders.Add(mount); - } - - public static void LoadFromManifest(Manifest manifest) + public void LoadFromManifest(Manifest manifest) { UnmountAll(); foreach (var dir in manifest.Folders) @@ -151,7 +153,7 @@ namespace OpenRA.FileSystem Mount(pkg.Key, pkg.Value); } - static Stream GetFromCache(PackageHashType type, string filename) + Stream GetFromCache(PackageHashType type, string filename) { var index = type == PackageHashType.CRC32 ? crcHashIndex : classicHashIndex; var folder = index[PackageEntry.HashFilename(filename, type)] @@ -164,7 +166,7 @@ namespace OpenRA.FileSystem return null; } - public static Stream Open(string filename) + public Stream Open(string filename) { Stream s; if (!TryOpen(filename, out s)) @@ -173,7 +175,7 @@ namespace OpenRA.FileSystem return s; } - public static bool TryOpen(string name, out Stream s) + public bool TryOpen(string name, out Stream s) { var filename = name; var foldername = string.Empty; @@ -217,7 +219,7 @@ namespace OpenRA.FileSystem return false; } - public static bool Exists(string name) + public bool Exists(string name) { var explicitFolder = name.Contains(':') && !Directory.Exists(Path.GetDirectoryName(name)); if (explicitFolder) @@ -231,8 +233,6 @@ namespace OpenRA.FileSystem return MountedFolders.Any(f => f.Exists(name)); } - static Dictionary assemblyCache = new Dictionary(); - public static Assembly ResolveAssembly(object sender, ResolveEventArgs e) { foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies()) @@ -243,15 +243,15 @@ namespace OpenRA.FileSystem var filename = frags[0] + ".dll"; Assembly a; - if (assemblyCache.TryGetValue(filename, out a)) + if (AssemblyCache.TryGetValue(filename, out a)) return a; - if (Exists(filename)) - using (var s = Open(filename)) + if (Game.ModData.ModFiles.Exists(filename)) + using (var s = Game.ModData.ModFiles.Open(filename)) { var buf = s.ReadBytes((int)s.Length); a = Assembly.Load(buf); - assemblyCache.Add(filename, a); + AssemblyCache.Add(filename, a); return a; } diff --git a/OpenRA.Game/FileSystem/InstallShieldCABExtractor.cs b/OpenRA.Game/FileSystem/InstallShieldCABExtractor.cs index 93356786b7..c76e23f6e5 100644 --- a/OpenRA.Game/FileSystem/InstallShieldCABExtractor.cs +++ b/OpenRA.Game/FileSystem/InstallShieldCABExtractor.cs @@ -14,11 +14,10 @@ using System.IO; using System.Linq; using System.Text.RegularExpressions; using ICSharpCode.SharpZipLib.Zip.Compression; -using ICSharpCode.SharpZipLib.Zip.Compression.Streams; namespace OpenRA.FileSystem { - public class InstallShieldCABExtractor : IDisposable, IFolder + public class InstallShieldCABExtractor : IFolder { const uint FileSplit = 0x1; const uint FileObfuscated = 0x2; @@ -277,7 +276,7 @@ namespace OpenRA.FileSystem cabFile.Dispose(); ++volumeNumber; - cabFile = GlobalFileSystem.Open("{0}{1}.cab".F(commonName, volumeNumber)); + cabFile = Game.ModData.ModFiles.Open("{0}{1}.cab".F(commonName, volumeNumber)); if (cabFile.ReadUInt32() != 0x28635349) throw new InvalidDataException("Not an Installshield CAB package"); @@ -341,7 +340,7 @@ namespace OpenRA.FileSystem var fileGroupOffsets = new List(); this.priority = priority; - hdrFile = GlobalFileSystem.Open(hdrFilename); + hdrFile = Game.ModData.ModFiles.Open(hdrFilename); // Strips archive number AND file extension commonName = Regex.Replace(hdrFilename, @"\d*\.[^\.]*$", ""); diff --git a/OpenRA.Game/FileSystem/InstallShieldPackage.cs b/OpenRA.Game/FileSystem/InstallShieldPackage.cs index c5c5350077..227a55f375 100644 --- a/OpenRA.Game/FileSystem/InstallShieldPackage.cs +++ b/OpenRA.Game/FileSystem/InstallShieldPackage.cs @@ -31,7 +31,7 @@ namespace OpenRA.FileSystem filenames = new List(); - s = GlobalFileSystem.Open(filename); + s = Game.ModData.ModFiles.Open(filename); try { // Parse package header diff --git a/OpenRA.Game/FileSystem/MixFile.cs b/OpenRA.Game/FileSystem/MixFile.cs index 31d8c9341e..6c53ef4680 100644 --- a/OpenRA.Game/FileSystem/MixFile.cs +++ b/OpenRA.Game/FileSystem/MixFile.cs @@ -57,7 +57,7 @@ namespace OpenRA.FileSystem this.priority = priority; this.type = type; - s = GlobalFileSystem.Open(filename); + s = Game.ModData.ModFiles.Open(filename); try { // Detect format type @@ -223,9 +223,9 @@ namespace OpenRA.FileSystem } } - if (GlobalFileSystem.Exists("global mix database.dat")) + if (Game.ModData.ModFiles.Exists("global mix database.dat")) { - var db = new XccGlobalDatabase(GlobalFileSystem.Open("global mix database.dat")); + var db = new XccGlobalDatabase(Game.ModData.ModFiles.Open("global mix database.dat")); foreach (var e in db.Entries) { var hash = PackageEntry.HashFilename(e, type); @@ -249,7 +249,7 @@ namespace OpenRA.FileSystem { // Cannot modify existing mixfile - rename existing file and // create a new one with original content plus modifications - GlobalFileSystem.Unmount(this); + Game.ModData.ModFiles.Unmount(this); // TODO: Add existing data to the contents list if (index.Count > 0) diff --git a/OpenRA.Game/FileSystem/Pak.cs b/OpenRA.Game/FileSystem/Pak.cs index eb15e1dab0..1793b297f6 100644 --- a/OpenRA.Game/FileSystem/Pak.cs +++ b/OpenRA.Game/FileSystem/Pak.cs @@ -34,7 +34,7 @@ namespace OpenRA.FileSystem this.priority = priority; index = new Dictionary(); - stream = GlobalFileSystem.Open(filename); + stream = Game.ModData.ModFiles.Open(filename); try { index = new Dictionary(); diff --git a/OpenRA.Game/Game.cs b/OpenRA.Game/Game.cs index 76eee3235b..82168de84b 100644 --- a/OpenRA.Game/Game.cs +++ b/OpenRA.Game/Game.cs @@ -17,7 +17,6 @@ using System.Linq; using System.Net; using System.Threading; using OpenRA.Chat; -using OpenRA.FileSystem; using OpenRA.Graphics; using OpenRA.Network; using OpenRA.Primitives; @@ -196,7 +195,7 @@ namespace OpenRA { Console.WriteLine("Platform is {0}", Platform.CurrentPlatform); - AppDomain.CurrentDomain.AssemblyResolve += GlobalFileSystem.ResolveAssembly; + AppDomain.CurrentDomain.AssemblyResolve += FileSystem.FileSystem.ResolveAssembly; InitializeSettings(args); @@ -219,7 +218,7 @@ namespace OpenRA GeoIP.Initialize(); - GlobalFileSystem.Mount(Platform.GameDir); // Needed to access shaders + ModData.ModFiles.Mount(Platform.GameDir); // Needed to access shaders var renderers = new[] { Settings.Graphics.Renderer, "Default", null }; foreach (var r in renderers) { @@ -280,7 +279,11 @@ namespace OpenRA OrderManager.Dispose(); if (ModData != null) + { + ModData.ModFiles.UnmountAll(); ModData.Dispose(); + } + ModData = null; // Fall back to default if the mod doesn't exist or has missing prerequisites. diff --git a/OpenRA.Game/GameRules/MusicInfo.cs b/OpenRA.Game/GameRules/MusicInfo.cs index dd91bed550..3cce2d9804 100644 --- a/OpenRA.Game/GameRules/MusicInfo.cs +++ b/OpenRA.Game/GameRules/MusicInfo.cs @@ -9,7 +9,6 @@ #endregion using OpenRA.FileFormats; -using OpenRA.FileSystem; namespace OpenRA.GameRules { @@ -36,11 +35,11 @@ namespace OpenRA.GameRules public void Load() { - if (!GlobalFileSystem.Exists(Filename)) + if (!Game.ModData.ModFiles.Exists(Filename)) return; Exists = true; - using (var s = GlobalFileSystem.Open(Filename)) + using (var s = Game.ModData.ModFiles.Open(Filename)) { if (Filename.ToLowerInvariant().EndsWith("wav")) Length = (int)WavLoader.WaveLength(s); diff --git a/OpenRA.Game/Graphics/ChromeProvider.cs b/OpenRA.Game/Graphics/ChromeProvider.cs index 89148a3b28..7a4490a24c 100644 --- a/OpenRA.Game/Graphics/ChromeProvider.cs +++ b/OpenRA.Game/Graphics/ChromeProvider.cs @@ -9,6 +9,7 @@ #endregion using System.Collections.Generic; +using System.IO; using System.Linq; namespace OpenRA.Graphics @@ -110,7 +111,9 @@ namespace OpenRA.Graphics sheet = cachedSheets[mi.Src]; else { - sheet = new Sheet(SheetType.BGRA, mi.Src); + using (var stream = Game.ModData.ModFiles.Open(mi.Src)) + sheet = new Sheet(SheetType.BGRA, stream); + cachedSheets.Add(mi.Src, sheet); } diff --git a/OpenRA.Game/Graphics/CursorProvider.cs b/OpenRA.Game/Graphics/CursorProvider.cs index 2267d70170..5352054ec3 100644 --- a/OpenRA.Game/Graphics/CursorProvider.cs +++ b/OpenRA.Game/Graphics/CursorProvider.cs @@ -10,10 +10,7 @@ using System; using System.Collections.Generic; -using System.Drawing; using System.Linq; -using OpenRA.FileSystem; -using OpenRA.Primitives; namespace OpenRA.Graphics { @@ -42,7 +39,7 @@ namespace OpenRA.Graphics var palettes = new Dictionary(); foreach (var p in nodesDict["Palettes"].Nodes) - palettes.Add(p.Key, new ImmutablePalette(GlobalFileSystem.Open(p.Value.Value), shadowIndex)); + palettes.Add(p.Key, new ImmutablePalette(modData.ModFiles.Open(p.Value.Value), shadowIndex)); Palettes = palettes.AsReadOnly(); diff --git a/OpenRA.Game/Graphics/Sheet.cs b/OpenRA.Game/Graphics/Sheet.cs index aaee749448..73f9a2b89a 100644 --- a/OpenRA.Game/Graphics/Sheet.cs +++ b/OpenRA.Game/Graphics/Sheet.cs @@ -11,8 +11,9 @@ using System; using System.Drawing; using System.Drawing.Imaging; +using System.IO; +using System.Runtime.CompilerServices; using System.Runtime.InteropServices; -using OpenRA.FileSystem; namespace OpenRA.Graphics { @@ -47,9 +48,8 @@ namespace OpenRA.Graphics Size = texture.Size; } - public Sheet(SheetType type, string filename) + public Sheet(SheetType type, Stream stream) { - using (var stream = GlobalFileSystem.Open(filename)) using (var bitmap = (Bitmap)Image.FromStream(stream)) { Size = bitmap.Size; diff --git a/OpenRA.Game/Graphics/SpriteLoader.cs b/OpenRA.Game/Graphics/SpriteLoader.cs index 220844ef8f..57abfdc7de 100644 --- a/OpenRA.Game/Graphics/SpriteLoader.cs +++ b/OpenRA.Game/Graphics/SpriteLoader.cs @@ -11,7 +11,6 @@ using System.Drawing; using System.IO; using System.Linq; -using OpenRA.FileSystem; using OpenRA.Primitives; namespace OpenRA.Graphics @@ -66,7 +65,7 @@ namespace OpenRA.Graphics public static ISpriteFrame[] GetFrames(string filename, ISpriteLoader[] loaders) { - using (var stream = GlobalFileSystem.Open(filename)) + using (var stream = Game.ModData.ModFiles.Open(filename)) { ISpriteFrame[] frames; foreach (var loader in loaders) diff --git a/OpenRA.Game/Graphics/VoxelLoader.cs b/OpenRA.Game/Graphics/VoxelLoader.cs index afac3ab8e3..64630e54a2 100644 --- a/OpenRA.Game/Graphics/VoxelLoader.cs +++ b/OpenRA.Game/Graphics/VoxelLoader.cs @@ -13,7 +13,6 @@ using System.Collections.Generic; using System.Drawing; using System.Linq; using OpenRA.FileFormats; -using OpenRA.FileSystem; using OpenRA.Primitives; namespace OpenRA.Graphics @@ -217,9 +216,9 @@ namespace OpenRA.Graphics { VxlReader vxl; HvaReader hva; - using (var s = GlobalFileSystem.Open(files.First + ".vxl")) + using (var s = Game.ModData.ModFiles.Open(files.First + ".vxl")) vxl = new VxlReader(s); - using (var s = GlobalFileSystem.Open(files.Second + ".hva")) + using (var s = Game.ModData.ModFiles.Open(files.Second + ".hva")) hva = new HvaReader(s, files.Second + ".hva"); return new Voxel(this, vxl, hva); } diff --git a/OpenRA.Game/Map/Map.cs b/OpenRA.Game/Map/Map.cs index 517e62f24b..94b43faf63 100644 --- a/OpenRA.Game/Map/Map.cs +++ b/OpenRA.Game/Map/Map.cs @@ -317,7 +317,7 @@ namespace OpenRA public Map(string path) { Path = path; - Container = GlobalFileSystem.OpenPackage(path, null, int.MaxValue); + Container = FileSystem.FileSystem.OpenPackage(path, null, int.MaxValue); AssertExists("map.yaml"); AssertExists("map.bin"); @@ -650,7 +650,7 @@ namespace OpenRA Path = toPath; // Create a new map package - Container = GlobalFileSystem.CreatePackage(Path, int.MaxValue, entries); + Container = FileSystem.FileSystem.CreatePackage(Path, int.MaxValue, entries); } // Update existing package diff --git a/OpenRA.Game/MiniYaml.cs b/OpenRA.Game/MiniYaml.cs index 4fbaf94feb..ed7034ed53 100644 --- a/OpenRA.Game/MiniYaml.cs +++ b/OpenRA.Game/MiniYaml.cs @@ -12,7 +12,6 @@ using System; using System.Collections.Generic; using System.IO; using System.Linq; -using OpenRA.FileSystem; namespace OpenRA { @@ -230,12 +229,6 @@ namespace OpenRA return ret; } - public static List FromFileInPackage(string path) - { - using (var stream = GlobalFileSystem.Open(path)) - return FromLines(stream.ReadAllLines(), path); - } - public static Dictionary DictFromFile(string path) { return FromFile(path).ToDictionary(x => x.Key, x => x.Value); diff --git a/OpenRA.Game/ModData.cs b/OpenRA.Game/ModData.cs index bfd345619e..8553119475 100644 --- a/OpenRA.Game/ModData.cs +++ b/OpenRA.Game/ModData.cs @@ -13,9 +13,9 @@ using System.Collections.Generic; using System.IO; using System.Linq; using System.Reflection; -using OpenRA.FileSystem; using OpenRA.Graphics; using OpenRA.Widgets; +using FS = OpenRA.FileSystem.FileSystem; namespace OpenRA { @@ -31,8 +31,9 @@ namespace OpenRA public ILoadScreen LoadScreen { get; private set; } public VoxelLoader VoxelLoader { get; private set; } public CursorProvider CursorProvider { get; private set; } + public FS ModFiles = new FS(); - Lazy defaultRules; + readonly Lazy defaultRules; public Ruleset DefaultRules { get { return defaultRules.Value; } } public ModData(string mod, bool useLoadScreen = false) @@ -95,7 +96,7 @@ namespace OpenRA public void MountFiles() { - GlobalFileSystem.LoadFromManifest(Manifest); + ModFiles.LoadFromManifest(Manifest); } public void InitializeLoaders() @@ -166,10 +167,10 @@ namespace OpenRA // Reinitialize all our assets InitializeLoaders(); - GlobalFileSystem.LoadFromManifest(Manifest); + ModFiles.LoadFromManifest(Manifest); // Mount map package so custom assets can be used. TODO: check priority. - GlobalFileSystem.Mount(GlobalFileSystem.OpenPackage(map.Path, null, int.MaxValue)); + ModFiles.Mount(FS.OpenPackage(map.Path, null, int.MaxValue)); using (new Support.PerfTimer("Map.PreloadRules")) map.PreloadRules(); diff --git a/OpenRA.Game/OpenRA.Game.csproj b/OpenRA.Game/OpenRA.Game.csproj index 830dbf0b39..cf05c487b1 100644 --- a/OpenRA.Game/OpenRA.Game.csproj +++ b/OpenRA.Game/OpenRA.Game.csproj @@ -95,6 +95,7 @@ + @@ -321,7 +322,7 @@ - + diff --git a/OpenRA.Game/Scripting/ScriptContext.cs b/OpenRA.Game/Scripting/ScriptContext.cs index f869fb2820..9e274d5423 100644 --- a/OpenRA.Game/Scripting/ScriptContext.cs +++ b/OpenRA.Game/Scripting/ScriptContext.cs @@ -11,12 +11,9 @@ using System; using System.Collections.Generic; using System.Diagnostics; -using System.Drawing; -using System.IO; using System.Linq; using System.Reflection; using Eluant; -using OpenRA.FileSystem; using OpenRA.Graphics; using OpenRA.Primitives; using OpenRA.Support; @@ -133,7 +130,7 @@ namespace OpenRA.Scripting .ToArray(); runtime.Globals["GameDir"] = Platform.GameDir; - runtime.DoBuffer(GlobalFileSystem.Open(Platform.ResolvePath(".", "lua", "scriptwrapper.lua")).ReadAllText(), "scriptwrapper.lua").Dispose(); + runtime.DoBuffer(Game.ModData.ModFiles.Open(Platform.ResolvePath(".", "lua", "scriptwrapper.lua")).ReadAllText(), "scriptwrapper.lua").Dispose(); tick = (LuaFunction)runtime.Globals["Tick"]; // Register globals @@ -172,7 +169,7 @@ namespace OpenRA.Scripting using (var loadScript = (LuaFunction)runtime.Globals["ExecuteSandboxedScript"]) { foreach (var s in scripts) - loadScript.Call(s, GlobalFileSystem.Open(s).ReadAllText()).Dispose(); + loadScript.Call(s, Game.ModData.ModFiles.Open(s).ReadAllText()).Dispose(); } } diff --git a/OpenRA.Game/Sound/Sound.cs b/OpenRA.Game/Sound/Sound.cs index 2127cc1046..b6beb531bd 100644 --- a/OpenRA.Game/Sound/Sound.cs +++ b/OpenRA.Game/Sound/Sound.cs @@ -9,14 +9,11 @@ #endregion using System; -using System.Collections.Generic; using System.Linq; using System.Reflection; using OpenRA.FileFormats; -using OpenRA.FileSystem; using OpenRA.GameRules; using OpenRA.Primitives; -using OpenRA.Traits; namespace OpenRA { @@ -48,17 +45,17 @@ namespace OpenRA ISoundSource LoadSound(string filename) { - if (!GlobalFileSystem.Exists(filename)) + if (!Game.ModData.ModFiles.Exists(filename)) { Log.Write("sound", "LoadSound, file does not exist: {0}", filename); return null; } if (filename.ToLowerInvariant().EndsWith("wav")) - using (var s = GlobalFileSystem.Open(filename)) + using (var s = Game.ModData.ModFiles.Open(filename)) return LoadWave(new WavLoader(s)); - using (var s = GlobalFileSystem.Open(filename)) + using (var s = Game.ModData.ModFiles.Open(filename)) return LoadSoundRaw(AudLoader.LoadSound(s), 1, 16, 22050); } diff --git a/OpenRA.Mods.Cnc/CncLoadScreen.cs b/OpenRA.Mods.Cnc/CncLoadScreen.cs index 2d75becf2e..aedc046d1f 100644 --- a/OpenRA.Mods.Cnc/CncLoadScreen.cs +++ b/OpenRA.Mods.Cnc/CncLoadScreen.cs @@ -11,6 +11,7 @@ using System.Collections.Generic; using System.Diagnostics; using System.Drawing; +using System.IO; using OpenRA.Graphics; using OpenRA.Mods.Common.LoadScreens; using OpenRA.Widgets; @@ -41,7 +42,9 @@ namespace OpenRA.Mods.Cnc r = Game.Renderer; if (r == null) return; - sheet = new Sheet(SheetType.BGRA, Platform.ResolvePath(loadInfo["Image"])); + using (var stream = File.OpenRead(Platform.ResolvePath(loadInfo["Image"]))) + sheet = new Sheet(SheetType.BGRA, stream); + var res = r.Resolution; bounds = new Rectangle(0, 0, res.Width, res.Height); diff --git a/OpenRA.Mods.Common/InstallUtils.cs b/OpenRA.Mods.Common/InstallUtils.cs index 98e471ff0c..4489c41500 100644 --- a/OpenRA.Mods.Common/InstallUtils.cs +++ b/OpenRA.Mods.Common/InstallUtils.cs @@ -14,7 +14,6 @@ using System.IO; using System.Linq; using ICSharpCode.SharpZipLib; using ICSharpCode.SharpZipLib.Zip; -using OpenRA.FileSystem; namespace OpenRA.Mods.Common { @@ -46,9 +45,9 @@ namespace OpenRA.Mods.Common Directory.CreateDirectory(destPath); Log.Write("debug", "Mounting {0}".F(srcPath)); - GlobalFileSystem.Mount(srcPath); + Game.ModData.ModFiles.Mount(srcPath); Log.Write("debug", "Mounting {0}".F(package)); - GlobalFileSystem.Mount(package, annotation); + Game.ModData.ModFiles.Mount(package, annotation); foreach (var directory in filesByDirectory) { @@ -71,7 +70,7 @@ namespace OpenRA.Mods.Common Directory.CreateDirectory(containingDir); - using (var sourceStream = GlobalFileSystem.Open(file)) + using (var sourceStream = Game.ModData.ModFiles.Open(file)) using (var destStream = File.Create(dest)) { Log.Write("debug", "Extracting {0} to {1}".F(file, dest)); diff --git a/OpenRA.Mods.Common/LoadScreens/BlankLoadScreen.cs b/OpenRA.Mods.Common/LoadScreens/BlankLoadScreen.cs index 2ffed1422e..1408a50686 100644 --- a/OpenRA.Mods.Common/LoadScreens/BlankLoadScreen.cs +++ b/OpenRA.Mods.Common/LoadScreens/BlankLoadScreen.cs @@ -8,12 +8,10 @@ */ #endregion -using System; using System.Collections.Generic; using System.IO; using System.Linq; using OpenRA.FileFormats; -using OpenRA.FileSystem; using OpenRA.Mods.Common.Widgets.Logic; using OpenRA.Widgets; diff --git a/OpenRA.Mods.Common/LoadScreens/LogoStripeLoadScreen.cs b/OpenRA.Mods.Common/LoadScreens/LogoStripeLoadScreen.cs index ebfc11a7a2..150f9b65b2 100644 --- a/OpenRA.Mods.Common/LoadScreens/LogoStripeLoadScreen.cs +++ b/OpenRA.Mods.Common/LoadScreens/LogoStripeLoadScreen.cs @@ -11,6 +11,7 @@ using System.Collections.Generic; using System.Diagnostics; using System.Drawing; +using System.IO; using OpenRA.Graphics; using OpenRA.Widgets; @@ -40,7 +41,9 @@ namespace OpenRA.Mods.Common.LoadScreens if (info.ContainsKey("Image")) { - sheet = new Sheet(SheetType.BGRA, Platform.ResolvePath(info["Image"])); + using (var stream = File.OpenRead(Platform.ResolvePath(info["Image"]))) + sheet = new Sheet(SheetType.BGRA, stream); + logo = new Sprite(sheet, new Rectangle(0, 0, 256, 256), TextureChannel.Alpha); stripe = new Sprite(sheet, new Rectangle(256, 0, 256, 256), TextureChannel.Alpha); stripeRect = new Rectangle(0, r.Resolution.Height / 2 - 128, r.Resolution.Width, 256); diff --git a/OpenRA.Mods.Common/LoadScreens/ModChooserLoadScreen.cs b/OpenRA.Mods.Common/LoadScreens/ModChooserLoadScreen.cs index 13f5f24d7d..ae2287651a 100644 --- a/OpenRA.Mods.Common/LoadScreens/ModChooserLoadScreen.cs +++ b/OpenRA.Mods.Common/LoadScreens/ModChooserLoadScreen.cs @@ -10,6 +10,7 @@ using System.Collections.Generic; using System.Drawing; +using System.IO; using OpenRA.Graphics; using OpenRA.Widgets; @@ -22,10 +23,14 @@ namespace OpenRA.Mods.Common.LoadScreens public void Init(Manifest m, Dictionary info) { - var sheet = new Sheet(SheetType.BGRA, info["Image"]); var res = Game.Renderer.Resolution; bounds = new Rectangle(0, 0, res.Width, res.Height); - sprite = new Sprite(sheet, new Rectangle(0, 0, 1024, 480), TextureChannel.Alpha); + + using (var stream = File.OpenRead(info["Image"])) + { + var sheet = new Sheet(SheetType.BGRA, stream); + sprite = new Sprite(sheet, new Rectangle(0, 0, 1024, 480), TextureChannel.Alpha); + } } public void Display() diff --git a/OpenRA.Mods.Common/Scripting/Global/MediaGlobal.cs b/OpenRA.Mods.Common/Scripting/Global/MediaGlobal.cs index b147a48987..f680774eea 100644 --- a/OpenRA.Mods.Common/Scripting/Global/MediaGlobal.cs +++ b/OpenRA.Mods.Common/Scripting/Global/MediaGlobal.cs @@ -14,7 +14,6 @@ using System.IO; using Eluant; using OpenRA.Effects; using OpenRA.FileFormats; -using OpenRA.FileSystem; using OpenRA.GameRules; using OpenRA.Graphics; using OpenRA.Mods.Common.Effects; @@ -165,10 +164,10 @@ namespace OpenRA.Mods.Common.Scripting else onCompleteRadar = () => { }; - Stream s = null; + Stream s; try { - s = GlobalFileSystem.Open(movie); + s = Game.ModData.ModFiles.Open(movie); } catch (FileNotFoundException e) { diff --git a/OpenRA.Mods.Common/Traits/World/PaletteFromCurrentTileset.cs b/OpenRA.Mods.Common/Traits/World/PaletteFromCurrentTileset.cs index c0997e4ed3..ede922fefe 100644 --- a/OpenRA.Mods.Common/Traits/World/PaletteFromCurrentTileset.cs +++ b/OpenRA.Mods.Common/Traits/World/PaletteFromCurrentTileset.cs @@ -9,7 +9,6 @@ #endregion using System.Collections.Generic; -using OpenRA.FileSystem; using OpenRA.Graphics; using OpenRA.Traits; @@ -43,7 +42,7 @@ namespace OpenRA.Mods.Common.Traits public void LoadPalettes(WorldRenderer wr) { - wr.AddPalette(info.Name, new ImmutablePalette(GlobalFileSystem.Open(world.TileSet.Palette), info.ShadowIndex), info.AllowModifiers); + wr.AddPalette(info.Name, new ImmutablePalette(Game.ModData.ModFiles.Open(world.TileSet.Palette), info.ShadowIndex), info.AllowModifiers); } public IEnumerable PaletteNames { get { yield return info.Name; } } diff --git a/OpenRA.Mods.Common/Traits/World/PaletteFromFile.cs b/OpenRA.Mods.Common/Traits/World/PaletteFromFile.cs index 1cb85da799..152f029a37 100644 --- a/OpenRA.Mods.Common/Traits/World/PaletteFromFile.cs +++ b/OpenRA.Mods.Common/Traits/World/PaletteFromFile.cs @@ -9,7 +9,6 @@ #endregion using System.Collections.Generic; -using OpenRA.FileSystem; using OpenRA.Graphics; using OpenRA.Traits; @@ -49,7 +48,7 @@ namespace OpenRA.Mods.Common.Traits public void LoadPalettes(WorldRenderer wr) { if (info.Tileset == null || info.Tileset.ToLowerInvariant() == world.Map.Tileset.ToLowerInvariant()) - wr.AddPalette(info.Name, new ImmutablePalette(GlobalFileSystem.Open(info.Filename), info.ShadowIndex), info.AllowModifiers); + wr.AddPalette(info.Name, new ImmutablePalette(Game.ModData.ModFiles.Open(info.Filename), info.ShadowIndex), info.AllowModifiers); } public IEnumerable PaletteNames diff --git a/OpenRA.Mods.Common/Traits/World/PlayerPaletteFromCurrentTileset.cs b/OpenRA.Mods.Common/Traits/World/PlayerPaletteFromCurrentTileset.cs index 9ec1253ff3..4e3dbdc6d9 100644 --- a/OpenRA.Mods.Common/Traits/World/PlayerPaletteFromCurrentTileset.cs +++ b/OpenRA.Mods.Common/Traits/World/PlayerPaletteFromCurrentTileset.cs @@ -8,7 +8,6 @@ */ #endregion -using OpenRA.FileSystem; using OpenRA.Graphics; using OpenRA.Traits; @@ -41,7 +40,7 @@ namespace OpenRA.Mods.Common.Traits public void LoadPalettes(WorldRenderer wr) { var filename = world.TileSet.PlayerPalette ?? world.TileSet.Palette; - wr.AddPalette(info.Name, new ImmutablePalette(GlobalFileSystem.Open(filename), info.ShadowIndex), info.AllowModifiers); + wr.AddPalette(info.Name, new ImmutablePalette(Game.ModData.ModFiles.Open(filename), info.ShadowIndex), info.AllowModifiers); } } } diff --git a/OpenRA.Mods.Common/UtilityCommands/CheckCodeStyle.cs b/OpenRA.Mods.Common/UtilityCommands/CheckCodeStyle.cs index 3fc54bf4ad..38be383b50 100644 --- a/OpenRA.Mods.Common/UtilityCommands/CheckCodeStyle.cs +++ b/OpenRA.Mods.Common/UtilityCommands/CheckCodeStyle.cs @@ -30,6 +30,9 @@ namespace OpenRA.Mods.Common.UtilityCommands var relativePath = args[1]; var projectPath = Path.GetFullPath(relativePath); + // HACK: The engine code assumes that Game.modData is set. + Game.ModData = modData; + var console = new StyleCopConsole(null, false, null, null, true); var project = new CodeProject(0, projectPath, new Configuration(null)); foreach (var filePath in Directory.GetFiles(projectPath, "*.cs", SearchOption.AllDirectories)) diff --git a/OpenRA.Mods.Common/UtilityCommands/CheckSequenceSprites.cs b/OpenRA.Mods.Common/UtilityCommands/CheckSequenceSprites.cs index 11671cd10f..9968528f99 100644 --- a/OpenRA.Mods.Common/UtilityCommands/CheckSequenceSprites.cs +++ b/OpenRA.Mods.Common/UtilityCommands/CheckSequenceSprites.cs @@ -10,7 +10,6 @@ using System; using System.Linq; -using OpenRA.FileSystem; using OpenRA.Graphics; namespace OpenRA.Mods.Common.UtilityCommands @@ -29,7 +28,7 @@ namespace OpenRA.Mods.Common.UtilityCommands { // HACK: The engine code assumes that Game.modData is set. Game.ModData = modData; - GlobalFileSystem.LoadFromManifest(Game.ModData.Manifest); + Game.ModData.ModFiles.LoadFromManifest(Game.ModData.Manifest); Game.ModData.SpriteSequenceLoader.OnMissingSpriteError = s => Console.WriteLine("\t" + s); foreach (var t in Game.ModData.Manifest.TileSets) diff --git a/OpenRA.Mods.Common/UtilityCommands/ExtractFilesCommand.cs b/OpenRA.Mods.Common/UtilityCommands/ExtractFilesCommand.cs index cffb2b02e8..6445c202fb 100644 --- a/OpenRA.Mods.Common/UtilityCommands/ExtractFilesCommand.cs +++ b/OpenRA.Mods.Common/UtilityCommands/ExtractFilesCommand.cs @@ -28,11 +28,11 @@ namespace OpenRA.Mods.Common.UtilityCommands public void Run(ModData modData, string[] args) { var files = args.Skip(1); - GlobalFileSystem.LoadFromManifest(modData.Manifest); + modData.ModFiles.LoadFromManifest(modData.Manifest); foreach (var f in files) { - var src = GlobalFileSystem.Open(f); + var src = modData.ModFiles.Open(f); if (src == null) throw new InvalidOperationException("File not found: {0}".F(f)); var data = src.ReadAllBytes(); diff --git a/OpenRA.Mods.Common/UtilityCommands/FixClassicTilesets.cs b/OpenRA.Mods.Common/UtilityCommands/FixClassicTilesets.cs index e5357839c0..44b8066c3d 100644 --- a/OpenRA.Mods.Common/UtilityCommands/FixClassicTilesets.cs +++ b/OpenRA.Mods.Common/UtilityCommands/FixClassicTilesets.cs @@ -13,7 +13,6 @@ using System.Drawing; using System.IO; using System.Linq; using System.Reflection; -using OpenRA.FileSystem; using OpenRA.Graphics; namespace OpenRA.Mods.Common.UtilityCommands @@ -32,7 +31,7 @@ namespace OpenRA.Mods.Common.UtilityCommands { // HACK: The engine code assumes that Game.modData is set. Game.ModData = modData; - GlobalFileSystem.LoadFromManifest(Game.ModData.Manifest); + modData.ModFiles.LoadFromManifest(Game.ModData.Manifest); var imageField = typeof(TerrainTemplateInfo).GetField("Image"); var pickAnyField = typeof(TerrainTemplateInfo).GetField("PickAny"); @@ -56,7 +55,7 @@ namespace OpenRA.Mods.Common.UtilityCommands foreach (var ext in exts) { Stream s; - if (GlobalFileSystem.TryOpen(template.Images[0] + ext, out s)) + if (modData.ModFiles.TryOpen(template.Images[0] + ext, out s)) s.Dispose(); else continue; diff --git a/OpenRA.Mods.Common/UtilityCommands/GenerateMinimapCommand.cs b/OpenRA.Mods.Common/UtilityCommands/GenerateMinimapCommand.cs index 344b329bd2..181fe1523d 100644 --- a/OpenRA.Mods.Common/UtilityCommands/GenerateMinimapCommand.cs +++ b/OpenRA.Mods.Common/UtilityCommands/GenerateMinimapCommand.cs @@ -10,7 +10,6 @@ using System; using System.IO; -using OpenRA.FileSystem; using OpenRA.Graphics; namespace OpenRA.Mods.Common.UtilityCommands @@ -30,9 +29,9 @@ namespace OpenRA.Mods.Common.UtilityCommands Game.ModData = modData; var map = new Map(args[1]); - GlobalFileSystem.UnmountAll(); + modData.ModFiles.UnmountAll(); foreach (var dir in Game.ModData.Manifest.Folders) - GlobalFileSystem.Mount(dir); + modData.ModFiles.Mount(dir); var minimap = Minimap.RenderMapPreview(map.Rules.TileSets[map.Tileset], map, true); diff --git a/OpenRA.Mods.Common/UtilityCommands/LegacyMapImporter.cs b/OpenRA.Mods.Common/UtilityCommands/LegacyMapImporter.cs index 96c878e68c..4fd92de815 100644 --- a/OpenRA.Mods.Common/UtilityCommands/LegacyMapImporter.cs +++ b/OpenRA.Mods.Common/UtilityCommands/LegacyMapImporter.cs @@ -14,7 +14,6 @@ using System.IO; using System.Linq; using System.Text; using OpenRA.FileFormats; -using OpenRA.FileSystem; using OpenRA.Graphics; using OpenRA.Mods.Common.Traits; using OpenRA.Primitives; @@ -130,7 +129,7 @@ namespace OpenRA.Mods.Common.UtilityCommands public void ConvertIniMap(string iniFile) { - using (var stream = GlobalFileSystem.Open(iniFile)) + using (var stream = Game.ModData.ModFiles.Open(iniFile)) { var file = new IniFile(stream); var basic = file.GetSection("Basic"); @@ -162,7 +161,7 @@ namespace OpenRA.Mods.Common.UtilityCommands else { // CnC - using (var s = GlobalFileSystem.Open(iniFile.Substring(0, iniFile.Length - 4) + ".bin")) + using (var s = Game.ModData.ModFiles.Open(iniFile.Substring(0, iniFile.Length - 4) + ".bin")) UnpackCncTileData(s); ReadCncOverlay(file); ReadCncTrees(file); diff --git a/OpenRA.Mods.Common/UtilityCommands/RemapShpCommand.cs b/OpenRA.Mods.Common/UtilityCommands/RemapShpCommand.cs index e4fb9f6b2a..a12860e199 100644 --- a/OpenRA.Mods.Common/UtilityCommands/RemapShpCommand.cs +++ b/OpenRA.Mods.Common/UtilityCommands/RemapShpCommand.cs @@ -13,7 +13,6 @@ using System.Collections.Generic; using System.Drawing; using System.IO; using System.Linq; -using OpenRA.FileSystem; using OpenRA.Graphics; using OpenRA.Mods.Common.SpriteLoaders; using OpenRA.Traits; @@ -41,14 +40,14 @@ namespace OpenRA.Mods.Common.UtilityCommands var srcMod = args[1].Split(':')[0]; Game.ModData = new ModData(srcMod); - GlobalFileSystem.LoadFromManifest(Game.ModData.Manifest); + Game.ModData.ModFiles.LoadFromManifest(Game.ModData.Manifest); var srcRules = Game.ModData.RulesetCache.Load(); var srcPaletteInfo = srcRules.Actors["player"].TraitInfo(); var srcRemapIndex = srcPaletteInfo.RemapIndex; var destMod = args[2].Split(':')[0]; Game.ModData = new ModData(destMod); - GlobalFileSystem.LoadFromManifest(Game.ModData.Manifest); + Game.ModData.ModFiles.LoadFromManifest(Game.ModData.Manifest); var destRules = Game.ModData.RulesetCache.Load(); var destPaletteInfo = destRules.Actors["player"].TraitInfo(); var destRemapIndex = destPaletteInfo.RemapIndex; diff --git a/OpenRA.Mods.Common/Widgets/Logic/AssetBrowserLogic.cs b/OpenRA.Mods.Common/Widgets/Logic/AssetBrowserLogic.cs index 8b27509659..95653fc16c 100644 --- a/OpenRA.Mods.Common/Widgets/Logic/AssetBrowserLogic.cs +++ b/OpenRA.Mods.Common/Widgets/Logic/AssetBrowserLogic.cs @@ -50,7 +50,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic this.world = world; panel = widget; - assetSource = GlobalFileSystem.MountedFolders.First(); + assetSource = Game.ModData.ModFiles.MountedFolders.First(); var ticker = panel.GetOrNull("ANIMATION_TICKER"); if (ticker != null) @@ -306,7 +306,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic if (string.IsNullOrEmpty(filename)) return false; - if (!GlobalFileSystem.Exists(filename)) + if (!Game.ModData.ModFiles.Exists(filename)) return false; if (Path.GetExtension(filename.ToLowerInvariant()) == ".vqa") @@ -345,7 +345,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic // TODO: Re-enable "All Packages" once list generation is done in a background thread // var sources = new[] { (IFolder)null }.Concat(GlobalFileSystem.MountedFolders); - var sources = GlobalFileSystem.MountedFolders; + var sources = Game.ModData.ModFiles.MountedFolders; dropdown.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 280, sources, setupItem); return true; } diff --git a/OpenRA.Mods.Common/Widgets/Logic/CreditsLogic.cs b/OpenRA.Mods.Common/Widgets/Logic/CreditsLogic.cs index a4054334e8..a65305d7e2 100644 --- a/OpenRA.Mods.Common/Widgets/Logic/CreditsLogic.cs +++ b/OpenRA.Mods.Common/Widgets/Logic/CreditsLogic.cs @@ -10,7 +10,6 @@ #endregion using System; -using OpenRA.FileSystem; using OpenRA.Widgets; namespace OpenRA.Mods.Common.Widgets.Logic @@ -32,7 +31,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic var template = scrollPanel.Get("CREDITS_TEMPLATE"); scrollPanel.RemoveChildren(); - var lines = GlobalFileSystem.Open("AUTHORS").ReadAllLines(); + var lines = Game.ModData.ModFiles.Open("AUTHORS").ReadAllLines(); foreach (var l in lines) { // Improve the formatting diff --git a/OpenRA.Mods.Common/Widgets/Logic/MissionBrowserLogic.cs b/OpenRA.Mods.Common/Widgets/Logic/MissionBrowserLogic.cs index ec1fba73ee..329eeaaa88 100644 --- a/OpenRA.Mods.Common/Widgets/Logic/MissionBrowserLogic.cs +++ b/OpenRA.Mods.Common/Widgets/Logic/MissionBrowserLogic.cs @@ -14,7 +14,6 @@ using System.IO; using System.Linq; using System.Net; using System.Threading; -using OpenRA.FileSystem; using OpenRA.Graphics; using OpenRA.Network; using OpenRA.Widgets; @@ -171,11 +170,11 @@ namespace OpenRA.Mods.Common.Widgets.Logic var briefingVideo = selectedMapPreview.Map.Videos.Briefing; var briefingVideoVisible = briefingVideo != null; - var briefingVideoDisabled = !(briefingVideoVisible && GlobalFileSystem.Exists(briefingVideo)); + var briefingVideoDisabled = !(briefingVideoVisible && Game.ModData.ModFiles.Exists(briefingVideo)); var infoVideo = selectedMapPreview.Map.Videos.BackgroundInfo; var infoVideoVisible = infoVideo != null; - var infoVideoDisabled = !(infoVideoVisible && GlobalFileSystem.Exists(infoVideo)); + var infoVideoDisabled = !(infoVideoVisible && Game.ModData.ModFiles.Exists(infoVideo)); startBriefingVideoButton.IsVisible = () => briefingVideoVisible && playingVideo != PlayingVideo.Briefing; startBriefingVideoButton.IsDisabled = () => briefingVideoDisabled || playingVideo != PlayingVideo.None; @@ -295,7 +294,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic return; var gameStartVideo = selectedMapPreview.Map.Videos.GameStart; - if (gameStartVideo != null && GlobalFileSystem.Exists(gameStartVideo)) + if (gameStartVideo != null && Game.ModData.ModFiles.Exists(gameStartVideo)) { var fsPlayer = fullscreenVideoPlayer.Get("PLAYER"); fullscreenVideoPlayer.Visible = true; diff --git a/OpenRA.Mods.Common/Widgets/VqaPlayerWidget.cs b/OpenRA.Mods.Common/Widgets/VqaPlayerWidget.cs index c54fc289ee..ecb51c118e 100644 --- a/OpenRA.Mods.Common/Widgets/VqaPlayerWidget.cs +++ b/OpenRA.Mods.Common/Widgets/VqaPlayerWidget.cs @@ -11,7 +11,6 @@ using System; using System.Drawing; using OpenRA.FileFormats; -using OpenRA.FileSystem; using OpenRA.Graphics; using OpenRA.Widgets; @@ -50,7 +49,7 @@ namespace OpenRA.Mods.Common.Widgets { if (filename == cachedVideo) return; - var video = new VqaReader(GlobalFileSystem.Open(filename)); + var video = new VqaReader(Game.ModData.ModFiles.Open(filename)); cachedVideo = filename; Open(video); diff --git a/OpenRA.Mods.D2k/Traits/World/FogPaletteFromR8.cs b/OpenRA.Mods.D2k/Traits/World/FogPaletteFromR8.cs index 91d7e19c2a..e5c3ddae44 100644 --- a/OpenRA.Mods.D2k/Traits/World/FogPaletteFromR8.cs +++ b/OpenRA.Mods.D2k/Traits/World/FogPaletteFromR8.cs @@ -10,7 +10,6 @@ using System.Collections.Generic; using System.IO; -using OpenRA.FileSystem; using OpenRA.Graphics; using OpenRA.Mods.Common.Traits; using OpenRA.Traits; @@ -44,7 +43,7 @@ namespace OpenRA.Mods.D2k.Traits public void LoadPalettes(WorldRenderer wr) { var colors = new uint[Palette.Size]; - using (var s = GlobalFileSystem.Open(info.Filename)) + using (var s = Game.ModData.ModFiles.Open(info.Filename)) { s.Seek(info.Offset, SeekOrigin.Begin); diff --git a/OpenRA.Mods.D2k/Traits/World/PaletteFromR8.cs b/OpenRA.Mods.D2k/Traits/World/PaletteFromR8.cs index bb757ee323..4eb8488168 100644 --- a/OpenRA.Mods.D2k/Traits/World/PaletteFromR8.cs +++ b/OpenRA.Mods.D2k/Traits/World/PaletteFromR8.cs @@ -10,7 +10,6 @@ using System.Collections.Generic; using System.IO; -using OpenRA.FileSystem; using OpenRA.Graphics; using OpenRA.Mods.Common.Traits; using OpenRA.Traits; @@ -44,7 +43,7 @@ namespace OpenRA.Mods.D2k.Traits public void LoadPalettes(WorldRenderer wr) { var colors = new uint[Palette.Size]; - using (var s = GlobalFileSystem.Open(info.Filename)) + using (var s = Game.ModData.ModFiles.Open(info.Filename)) { s.Seek(info.Offset, SeekOrigin.Begin); diff --git a/OpenRA.Mods.TS/UtilityCommands/LegacyTilesetImporter.cs b/OpenRA.Mods.TS/UtilityCommands/LegacyTilesetImporter.cs index 33c816a532..de4722fc82 100644 --- a/OpenRA.Mods.TS/UtilityCommands/LegacyTilesetImporter.cs +++ b/OpenRA.Mods.TS/UtilityCommands/LegacyTilesetImporter.cs @@ -12,7 +12,6 @@ using System; using System.Collections.Generic; using System.IO; using OpenRA.FileFormats; -using OpenRA.FileSystem; namespace OpenRA.Mods.TS.UtilityCommands { @@ -31,7 +30,7 @@ namespace OpenRA.Mods.TS.UtilityCommands // HACK: The engine code assumes that Game.modData is set. Game.ModData = modData; - GlobalFileSystem.LoadFromManifest(Game.ModData.Manifest); + Game.ModData.ModFiles.LoadFromManifest(Game.ModData.Manifest); var file = new IniFile(File.Open(args[1], FileMode.Open)); var extension = args[2]; @@ -73,10 +72,10 @@ namespace OpenRA.Mods.TS.UtilityCommands for (var i = 1; i <= sectionCount; i++, templateIndex++) { var templateFilename = "{0}{1:D2}.{2}".F(sectionFilename, i, extension); - if (!GlobalFileSystem.Exists(templateFilename)) + if (!Game.ModData.ModFiles.Exists(templateFilename)) continue; - using (var s = GlobalFileSystem.Open(templateFilename)) + using (var s = Game.ModData.ModFiles.Open(templateFilename)) { Console.WriteLine("\tTemplate@{0}:", templateIndex); Console.WriteLine("\t\tCategory: {0}", sectionCategory); @@ -88,7 +87,7 @@ namespace OpenRA.Mods.TS.UtilityCommands for (var v = 'a'; v <= 'z'; v++) { var variant = "{0}{1:D2}{2}.{3}".F(sectionFilename, i, v, extension); - if (GlobalFileSystem.Exists(variant)) + if (Game.ModData.ModFiles.Exists(variant)) images.Add(variant); } diff --git a/OpenRA.Platforms.Default/Shader.cs b/OpenRA.Platforms.Default/Shader.cs index 06e15247fb..87b5ae33b5 100644 --- a/OpenRA.Platforms.Default/Shader.cs +++ b/OpenRA.Platforms.Default/Shader.cs @@ -12,7 +12,6 @@ using System; using System.Collections.Generic; using System.IO; using System.Text; -using OpenRA.FileSystem; using OpenTK.Graphics.OpenGL; namespace OpenRA.Platforms.Default @@ -28,7 +27,7 @@ namespace OpenRA.Platforms.Default string ext = type == ShaderType.VertexShader ? "vert" : "frag"; string filename = "glsl{0}{1}.{2}".F(Path.DirectorySeparatorChar, name, ext); string code; - using (var file = new StreamReader(GlobalFileSystem.Open(filename))) + using (var file = new StreamReader(Game.ModData.ModFiles.Open(filename))) code = file.ReadToEnd(); var shader = GL.CreateShader(type); diff --git a/OpenRA.Utility/Program.cs b/OpenRA.Utility/Program.cs index c32662ab75..9c9cf976ab 100644 --- a/OpenRA.Utility/Program.cs +++ b/OpenRA.Utility/Program.cs @@ -11,7 +11,6 @@ using System; using System.Collections.Generic; using System.Linq; -using OpenRA.FileSystem; namespace OpenRA.Utility { @@ -35,7 +34,7 @@ namespace OpenRA.Utility return; } - AppDomain.CurrentDomain.AssemblyResolve += GlobalFileSystem.ResolveAssembly; + AppDomain.CurrentDomain.AssemblyResolve += FileSystem.FileSystem.ResolveAssembly; Log.AddChannel("perf", null); Log.AddChannel("debug", null);