From 246a1b9fecd947a351fb8bf10f099bc67781d5ba Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Sat, 26 Apr 2025 13:41:22 +0100 Subject: [PATCH] Move map installed check to LobbyLogic. --- OpenRA.Game/Map/MapPreview.cs | 5 +---- .../Widgets/Logic/Lobby/LobbyLogic.cs | 11 +++++++++- .../Widgets/Logic/Lobby/MapPreviewLogic.cs | 20 +++---------------- 3 files changed, 14 insertions(+), 22 deletions(-) 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]); };