diff --git a/OpenRa.FileFormats/FileSystem.cs b/OpenRa.FileFormats/FileSystem.cs index d8e1259159..686f699c4a 100644 --- a/OpenRa.FileFormats/FileSystem.cs +++ b/OpenRa.FileFormats/FileSystem.cs @@ -1,11 +1,13 @@ using System.Collections.Generic; using System.IO; +using System.Linq; namespace OpenRa.FileFormats { public static class FileSystem { static List mountedFolders = new List(); + static List temporaryMounts = new List(); public static void MountDefault( bool useAftermath ) { @@ -33,6 +35,18 @@ namespace OpenRa.FileFormats mountedFolders.Add(folder); } + public static void MountTemporary(IFolder folder) + { + mountedFolders.Add(folder); + temporaryMounts.Add(folder); + } + + public static void UnmountTemporaryPackages() + { + mountedFolders.RemoveAll(f => temporaryMounts.Contains(f)); + temporaryMounts.Clear(); + } + public static Stream Open(string filename) { foreach( IFolder folder in mountedFolders ) diff --git a/OpenRa.Game/Game.cs b/OpenRa.Game/Game.cs index c8aa8ed418..425d65c1f8 100644 --- a/OpenRa.Game/Game.cs +++ b/OpenRa.Game/Game.cs @@ -56,7 +56,9 @@ namespace OpenRa.Game public static void ChangeMap(string mapName) { SheetBuilder.Initialize(renderer); - + SpriteSheetBuilder.Initialize(); + UnitSheetBuilder.Initialize(); + FileSystem.UnmountTemporaryPackages(); Rules.LoadRules(mapName, usingAftermath); palette = new HardwarePalette(renderer, Rules.Map); diff --git a/OpenRa.Game/GameRules/Rules.cs b/OpenRa.Game/GameRules/Rules.cs index aceda21226..25be1f7693 100755 --- a/OpenRa.Game/GameRules/Rules.cs +++ b/OpenRa.Game/GameRules/Rules.cs @@ -89,7 +89,7 @@ namespace OpenRa.Game TechTree = new TechTree(); Map = new Map( AllRules ); - FileSystem.Mount( new Package( Rules.Map.Theater + ".mix" ) ); + FileSystem.MountTemporary( new Package( Rules.Map.Theater + ".mix" ) ); TileSet = new TileSet( Map.TileSuffix ); } diff --git a/OpenRa.Game/Graphics/SpriteSheetBuilder.cs b/OpenRa.Game/Graphics/SpriteSheetBuilder.cs index 200ab655f1..beb57caea0 100644 --- a/OpenRa.Game/Graphics/SpriteSheetBuilder.cs +++ b/OpenRa.Game/Graphics/SpriteSheetBuilder.cs @@ -5,8 +5,12 @@ namespace OpenRa.Game.Graphics { static class SpriteSheetBuilder { - static Dictionary sprites = - new Dictionary(); + public static void Initialize() + { + sprites = new Dictionary(); + } + + static Dictionary sprites; public static Sprite LoadSprite(string filename, params string[] exts ) { diff --git a/OpenRa.Game/Graphics/UnitSheetBuilder.cs b/OpenRa.Game/Graphics/UnitSheetBuilder.cs index 6e423517c7..fba8d61661 100644 --- a/OpenRa.Game/Graphics/UnitSheetBuilder.cs +++ b/OpenRa.Game/Graphics/UnitSheetBuilder.cs @@ -6,8 +6,14 @@ namespace OpenRa.Game.Graphics { static class UnitSheetBuilder { - public static readonly List sprites = new List(); - static Dictionary> sequences = new Dictionary>(); + public static void Initialize() + { + sprites = new List(); + sequences = new Dictionary>(); + } + + public static List sprites; + static Dictionary> sequences; public static Range GetUnit(string name) {