diff --git a/OpenRa.FileFormats/FileSystem.cs b/OpenRa.FileFormats/FileSystem.cs index 2c25187fed..7408916860 100644 --- a/OpenRa.FileFormats/FileSystem.cs +++ b/OpenRa.FileFormats/FileSystem.cs @@ -9,38 +9,10 @@ namespace OpenRa.FileFormats public static class FileSystem { static List mountedFolders = new List(); - static List temporaryMounts = new List(); static Cache> allFiles = new Cache>( _ => new List() ); - static Cache> allTemporaryFiles = new Cache>( _ => new List() ); - public static void MountDefaultPackages() - { - FileSystem.Mount(new Folder("./")); - if( FileSystem.Exists( "main.mix" ) ) - FileSystem.Mount( new Package( "main.mix" ) ); - FileSystem.Mount( new Package( "redalert.mix" ) ); - FileSystem.Mount( new Package( "conquer.mix" ) ); - FileSystem.Mount( new Package( "hires.mix" ) ); - FileSystem.Mount( new Package( "general.mix" ) ); - FileSystem.Mount( new Package( "local.mix" ) ); - FileSystem.Mount( new Package( "sounds.mix" ) ); - FileSystem.Mount( new Package( "speech.mix" ) ); - FileSystem.Mount( new Package( "allies.mix" ) ); - FileSystem.Mount( new Package( "russian.mix" ) ); - - FileSystem.Mount( new Package( "temperat.mix" ) ); - FileSystem.Mount( new Package( "snow.mix" ) ); - FileSystem.Mount( new Package( "interior.mix" ) ); - } - - public static void MountAftermathPackages() - { - FileSystem.Mount( new Package( "expand2.mix" ) ); - FileSystem.Mount( new Package( "hires1.mix" ) ); - } - - public static void Mount(IFolder folder) + static void MountInner(IFolder folder) { mountedFolders.Add(folder); @@ -52,28 +24,15 @@ namespace OpenRa.FileFormats } } - public static void MountTemporary(IFolder folder) - { - mountedFolders.Add(folder); - temporaryMounts.Add(folder); - - foreach( var hash in folder.AllFileHashes() ) - { - var l = allTemporaryFiles[hash]; - if( !l.Contains( folder ) ) - l.Add( folder ); - } - } - - public static void MountTemporaryEx(string name) + public static void Mount(string name) { name = name.ToLowerInvariant(); var optional = name.StartsWith("~"); if (optional) name = name.Substring(1); var a = name.EndsWith(".mix") - ? (Action)(() => FileSystem.MountTemporary(new Package(name))) - : () => FileSystem.MountTemporary(new Folder(name)); + ? (Action)(() => FileSystem.MountInner(new Package(name))) + : () => FileSystem.MountInner(new Folder(name)); if (optional) try { a(); } @@ -82,12 +41,10 @@ namespace OpenRa.FileFormats a(); } - public static void UnmountTemporaryPackages() + public static void UnmountAll() { - mountedFolders.RemoveAll(f => temporaryMounts.Contains(f)); - temporaryMounts.Clear(); - - allTemporaryFiles = new Cache>( _ => new List() ); + mountedFolders.Clear(); + allFiles = new Cache>( _ => new List() ); } static Stream GetFromCache( Cache> index, string filename ) @@ -105,8 +62,7 @@ namespace OpenRa.FileFormats { if( filename.IndexOfAny( new char[] { '/', '\\' } ) == -1 ) { - var ret = GetFromCache( allFiles, filename ) - ?? GetFromCache( allTemporaryFiles, filename ); + var ret = GetFromCache( allFiles, filename ); if( ret != null ) return ret; } @@ -127,8 +83,7 @@ namespace OpenRa.FileFormats { foreach( var ext in exts ) { - var s = GetFromCache( allFiles, filename + ext ) - ?? GetFromCache( allTemporaryFiles, filename + ext ); + var s = GetFromCache( allFiles, filename + ext ); if( s != null ) return s; } diff --git a/OpenRa.Game/Game.cs b/OpenRa.Game/Game.cs index e2c3904388..ef20f79fff 100644 --- a/OpenRa.Game/Game.cs +++ b/OpenRa.Game/Game.cs @@ -37,11 +37,11 @@ namespace OpenRa public static void LoadModPackages(Manifest manifest) { - FileSystem.UnmountTemporaryPackages(); + FileSystem.UnmountAll(); Timer.Time("reset: {0}"); - foreach (var dir in manifest.Folders) FileSystem.MountTemporaryEx(dir); - foreach (var pkg in manifest.Packages) FileSystem.MountTemporaryEx(pkg); + foreach (var dir in manifest.Folders) FileSystem.Mount(dir); + foreach (var pkg in manifest.Packages) FileSystem.Mount(pkg); Timer.Time("mount temporary packages: {0}"); } diff --git a/OpenRa.Game/MainWindow.cs b/OpenRa.Game/MainWindow.cs index a91281d69b..e0280bea3b 100755 --- a/OpenRa.Game/MainWindow.cs +++ b/OpenRa.Game/MainWindow.cs @@ -74,11 +74,11 @@ namespace OpenRa { Game.Settings = new UserSettings(); var settingsFile = settings.GetValue("settings", "settings.ini"); - FileSystem.MountTemporary(new Folder("./")); + FileSystem.Mount("./"); if (FileSystem.Exists(settingsFile)) FieldLoader.Load(Game.Settings, new IniFile(FileSystem.Open(settingsFile)).GetSection("Settings")); - FileSystem.UnmountTemporaryPackages(); + FileSystem.UnmountAll(); } internal void Run() diff --git a/SequenceEditor/Program.cs b/SequenceEditor/Program.cs index 1e99d0afec..41937a6e8a 100644 --- a/SequenceEditor/Program.cs +++ b/SequenceEditor/Program.cs @@ -79,8 +79,8 @@ namespace SequenceEditor var mods = args[0].Split(','); var manifest = new Manifest(mods); - foreach (var folder in manifest.Folders) FileSystem.MountTemporaryEx(folder); - foreach (var pkg in manifest.Packages) FileSystem.MountTemporaryEx(pkg); + foreach (var folder in manifest.Folders) FileSystem.Mount(folder); + foreach (var pkg in manifest.Packages) FileSystem.Mount(pkg); XmlFilename = args[1]; Doc = new XmlDocument();