diff --git a/FileExtractor/FileExtractor.cs b/FileExtractor/FileExtractor.cs index 12e5017b32..51b8a27fd5 100644 --- a/FileExtractor/FileExtractor.cs +++ b/FileExtractor/FileExtractor.cs @@ -17,10 +17,8 @@ namespace FileExtractor } var mods = args[0].Split(','); - var manifest = new Manifest(mods); - - foreach (var folder in manifest.Folders) FileSystem.Mount(folder); - foreach (var pkg in manifest.Packages) FileSystem.Mount(pkg); + var manifest = new Manifest(mods); + FileSystem.LoadFromManifest( manifest ); try { diff --git a/OpenRA.Editor/Form1.cs b/OpenRA.Editor/Form1.cs index f465ba493c..8f9c7e17df 100644 --- a/OpenRA.Editor/Form1.cs +++ b/OpenRA.Editor/Form1.cs @@ -34,10 +34,7 @@ namespace OpenRA.Editor var manifest = new Manifest(new[] { currentMod }); Game.modData = new ModData( manifest ); - - FileSystem.UnmountAll(); - foreach (var folder in manifest.Folders) FileSystem.Mount(folder); - foreach (var pkg in manifest.Packages) FileSystem.Mount(pkg); + FileSystem.LoadFromManifest( manifest ); Rules.LoadRules(manifest, new Map()); @@ -64,10 +61,7 @@ namespace OpenRA.Editor var manifest = new Manifest(new[] { currentMod }); Game.modData = new ModData( manifest ); - - FileSystem.UnmountAll(); - foreach (var folder in manifest.Folders) FileSystem.Mount(folder); - foreach (var pkg in manifest.Packages) FileSystem.Mount(pkg); + FileSystem.LoadFromManifest( manifest ); // load the map var map = new Map(new Folder(mapname)); @@ -93,10 +87,7 @@ namespace OpenRA.Editor var manifest = new Manifest(new[] { currentMod }); Game.modData = new ModData( manifest ); - - FileSystem.UnmountAll(); - foreach (var folder in manifest.Folders) FileSystem.Mount(folder); - foreach (var pkg in manifest.Packages) FileSystem.Mount(pkg); + FileSystem.LoadFromManifest( manifest ); PrepareMapResources(manifest, map); diff --git a/OpenRA.FileFormats/FileSystem.cs b/OpenRA.FileFormats/FileSystem.cs index 4147b9cedf..cd59b5eee0 100644 --- a/OpenRA.FileFormats/FileSystem.cs +++ b/OpenRA.FileFormats/FileSystem.cs @@ -64,6 +64,13 @@ namespace OpenRA.FileFormats allFiles = new Cache>( _ => new List() ); } + public static void LoadFromManifest( Manifest manifest ) + { + UnmountAll(); + foreach (var dir in manifest.Folders) Mount(dir); + foreach (var pkg in manifest.Packages) Mount(pkg); + } + static Stream GetFromCache( Cache> index, string filename ) { foreach( var folder in index[ PackageEntry.HashFilename( filename ) ] ) diff --git a/OpenRA.Game/Game.cs b/OpenRA.Game/Game.cs index f01efbd4b0..30d002f7cd 100644 --- a/OpenRA.Game/Game.cs +++ b/OpenRA.Game/Game.cs @@ -51,17 +51,6 @@ namespace OpenRA static bool packageChangePending; static bool mapChangePending; - static void LoadModPackages( Manifest manifest ) - { - FileSystem.UnmountAll(); - Timer.Time("reset: {0}"); - - foreach (var dir in manifest.Folders) FileSystem.Mount(dir); - foreach (var pkg in manifest.Packages) FileSystem.Mount(pkg); - - Timer.Time("mount temporary packages: {0}"); - } - public static Dictionary AvailableMaps; // TODO: Do this nicer @@ -81,7 +70,7 @@ namespace OpenRA Timer.Time("manifest: {0}"); modData = new ModData( manifest ); SheetBuilder.Initialize(); - LoadModPackages( manifest ); + FileSystem.LoadFromManifest( manifest ); Timer.Time("load assemblies, packages: {0}"); ChromeProvider.Initialize(manifest.Chrome); packageChangePending = false; @@ -464,7 +453,7 @@ namespace OpenRA modData = new ModData( manifest ); // Load the default mod to access required files - LoadModPackages( manifest ); + FileSystem.LoadFromManifest( manifest ); Renderer.SheetSize = Settings.SheetSize; @@ -548,10 +537,7 @@ namespace OpenRA AppDomain.CurrentDomain.AssemblyResolve += FileSystem.ResolveAssembly; var manifest = new Manifest(mods); modData = new ModData( manifest ); - - FileSystem.UnmountAll(); - foreach (var folder in manifest.Folders) FileSystem.Mount(folder); - foreach (var pkg in manifest.Packages) FileSystem.Mount(pkg); + FileSystem.LoadFromManifest( manifest ); Rules.LoadRules(manifest, new Map()); } diff --git a/SequenceEditor/Program.cs b/SequenceEditor/Program.cs index b97169c29e..1ed0f07581 100644 --- a/SequenceEditor/Program.cs +++ b/SequenceEditor/Program.cs @@ -87,9 +87,7 @@ namespace SequenceEditor var mods = args[0].Split(','); var manifest = new Manifest(mods); - - foreach (var folder in manifest.Folders) FileSystem.Mount(folder); - foreach (var pkg in manifest.Packages) FileSystem.Mount(pkg); + FileSystem.LoadFromManifest( manifest ); XmlFilename = args[1]; Doc = new XmlDocument();