diff --git a/OpenRA.Game/Map/MapPreview.cs b/OpenRA.Game/Map/MapPreview.cs index 8a45ca04d8..460d6a9263 100644 --- a/OpenRA.Game/Map/MapPreview.cs +++ b/OpenRA.Game/Map/MapPreview.cs @@ -535,7 +535,7 @@ namespace OpenRA innerData = newData; } - public void Install(string mapRepositoryUrl, Action onSuccess) + public void Install(string mapRepositoryUrl) { if ((Status != MapStatus.DownloadError && Status != MapStatus.DownloadAvailable) || !Game.Settings.Game.AllowDownloading) return; @@ -592,10 +592,7 @@ namespace OpenRA if (p == null) innerData.Status = MapStatus.DownloadError; else - { UpdateFromMapWithoutOwningPackage(p, mapInstallPackage, MapClassification.User, GridType); - Game.RunAfterTick(onSuccess); - } } catch (Exception e) { diff --git a/OpenRA.Mods.Common/Widgets/Logic/Lobby/LobbyLogic.cs b/OpenRA.Mods.Common/Widgets/Logic/Lobby/LobbyLogic.cs index afb7c562d5..c68e305668 100644 --- a/OpenRA.Mods.Common/Widgets/Logic/Lobby/LobbyLogic.cs +++ b/OpenRA.Mods.Common/Widgets/Logic/Lobby/LobbyLogic.cs @@ -104,6 +104,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic bool teamChat; bool updateDiscordStatus = true; bool resetOptionsButtonEnabled; + bool mapAvailable; Dictionary spawnOccupants = []; readonly string chatLineSound; @@ -589,6 +590,13 @@ namespace OpenRA.Mods.Common.Widgets.Logic public override void Tick() { + // Map may have been installed or generated in the background + if (!mapAvailable && map.Status == MapStatus.Available) + { + mapAvailable = true; + orderManager.IssueOrder(Order.Command($"state {Session.ClientState.NotReady}")); + } + if (panel == PanelType.Options && OptionsTabDisabled()) panel = PanelType.Players; @@ -650,7 +658,8 @@ namespace OpenRA.Mods.Common.Widgets.Logic map = modData.MapCache[uid]; // Tell the server that we have the map - if (map.Status == MapStatus.Available) + mapAvailable = map.Status == MapStatus.Available; + if (mapAvailable) orderManager.IssueOrder(Order.Command($"state {Session.ClientState.NotReady}")); // We don't have the map diff --git a/OpenRA.Mods.Common/Widgets/Logic/Lobby/MapPreviewLogic.cs b/OpenRA.Mods.Common/Widgets/Logic/Lobby/MapPreviewLogic.cs index 2121836bcf..649dd4ee0f 100644 --- a/OpenRA.Mods.Common/Widgets/Logic/Lobby/MapPreviewLogic.cs +++ b/OpenRA.Mods.Common/Widgets/Logic/Lobby/MapPreviewLogic.cs @@ -64,7 +64,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic bool mapUpdateAvailable = false; [ObjectCreator.UseCtor] - internal MapPreviewLogic(Widget widget, ModData modData, OrderManager orderManager, Func<(MapPreview Map, Session.MapStatus Status)> getMap, + internal MapPreviewLogic(Widget widget, ModData modData, Func<(MapPreview Map, Session.MapStatus Status)> getMap, Action onMouseDown, Func> getSpawnOccupants, bool mapUpdatesEnabled, Action onMapUpdate, Func> getDisabledSpawnPoints, bool showUnoccupiedSpawnpoints) { @@ -132,15 +132,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic { var button = parent.Get("MAP_INSTALL"); button.IsHighlighted = () => blink; - button.OnClick = () => - { - getMap().Map.Install(mapRepository, () => - { - if (orderManager != null) - Game.RunAfterTick(() => orderManager.IssueOrder(Order.Command($"state {Session.ClientState.NotReady}"))); - }); - }; - + button.OnClick = () => getMap().Map.Install(mapRepository); return parent; } @@ -187,13 +179,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic mapUpdateAvailable = mapUpdatesEnabled && uid != null && map.Uid != uid; if (map.Status == MapStatus.DownloadError) - { - map.Install(mapRepository, () => - { - if (orderManager != null) - Game.RunAfterTick(() => orderManager.IssueOrder(Order.Command($"state {Session.ClientState.NotReady}"))); - }); - } + map.Install(mapRepository); else if (map.Status == MapStatus.Unavailable) modData.MapCache.QueryRemoteMapDetails(mapRepository, [map.Uid]); };