diff --git a/OpenRA.Game/Game.cs b/OpenRA.Game/Game.cs index 1b05cd8591..ed516f6cb2 100644 --- a/OpenRA.Game/Game.cs +++ b/OpenRA.Game/Game.cs @@ -46,10 +46,8 @@ namespace OpenRA public static Renderer Renderer; static int2 clientSize; - static string mapName; public static Session LobbyInfo = new Session(); - static bool mapChangePending; - + static void LoadMap(string uid) { var map = modData.PrepareMap(uid); @@ -59,9 +57,6 @@ namespace OpenRA Timer.Time("viewport: {0}"); world = new World(modData.Manifest, map); Timer.Time("world: {0}"); - - Timer.Time("----end LoadMap"); - Debug("Map change {0} -> {1}".F(Game.mapName, mapName)); } public static void MoveViewport(int2 loc) @@ -116,13 +111,6 @@ namespace OpenRA static void Tick() { - if (mapChangePending) - { - mapName = LobbyInfo.GlobalSettings.Map; - mapChangePending = false; - return; - } - if (orderManager.Connection.ConnectionState != lastConnectionState) { lastConnectionState = orderManager.Connection.ConnectionState; @@ -215,9 +203,6 @@ namespace OpenRA Debug("Order lag is now {0} frames.".F(LobbyInfo.GlobalSettings.OrderLatency)); } - if (mapName != LobbyInfo.GlobalSettings.Map) - mapChangePending = true; - LobbyInfoChanged(); } diff --git a/OpenRA.Game/ModData.cs b/OpenRA.Game/ModData.cs index 781ef9cd1d..9cd380ff50 100755 --- a/OpenRA.Game/ModData.cs +++ b/OpenRA.Game/ModData.cs @@ -40,22 +40,27 @@ namespace OpenRA return paths.Select(p => new MapStub(new Folder(p))).ToDictionary(m => m.Uid); } + string cachedTheatre = null; public Map PrepareMap(string uid) { + if (!AvailableMaps.ContainsKey(uid)) + throw new InvalidDataException("Invalid map uid: {0}".F(uid)); + Timer.Time("----PrepareMap"); var map = new Map(AvailableMaps[uid].Package); Timer.Time( "Map: {0}" ); - - if (!AvailableMaps.ContainsKey(uid)) - throw new InvalidDataException("Invalid map uid: {0}".F(uid)); Rules.LoadRules(Manifest, map); Timer.Time( "Rules: {0}" ); - SpriteSheetBuilder.Initialize( Rules.TileSets[map.Tileset] ); - SequenceProvider.Initialize(Manifest.Sequences); - Timer.Time("SSB, SeqProv: {0}"); - + if (map.Theater != cachedTheatre) + { + SpriteSheetBuilder.Initialize( Rules.TileSets[map.Tileset] ); + SequenceProvider.Initialize(Manifest.Sequences); + Timer.Time("SSB, SeqProv: {0}"); + cachedTheatre = map.Theater; + } + Timer.Time("----end PrepareMap"); return map; } }