diff --git a/OpenRA.Mods.Common/Widgets/Logic/Lobby/LobbyLogic.cs b/OpenRA.Mods.Common/Widgets/Logic/Lobby/LobbyLogic.cs index 8f2faecb9a..cdbefa99aa 100644 --- a/OpenRA.Mods.Common/Widgets/Logic/Lobby/LobbyLogic.cs +++ b/OpenRA.Mods.Common/Widgets/Logic/Lobby/LobbyLogic.cs @@ -134,6 +134,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic { "onMouseDown", (Action)((preview, mapPreview, mi) => LobbyUtils.SelectSpawnPoint(orderManager, preview, mapPreview, mi)) }, { "getSpawnOccupants", (Func>)(mapPreview => LobbyUtils.GetSpawnOccupants(orderManager.LobbyInfo, mapPreview)) }, + { "showUnoccupiedSpawnpoints", true }, }); UpdateCurrentMap(); diff --git a/OpenRA.Mods.Common/Widgets/Logic/Lobby/MapPreviewLogic.cs b/OpenRA.Mods.Common/Widgets/Logic/Lobby/MapPreviewLogic.cs index 942695d8f1..8a5b621696 100644 --- a/OpenRA.Mods.Common/Widgets/Logic/Lobby/MapPreviewLogic.cs +++ b/OpenRA.Mods.Common/Widgets/Logic/Lobby/MapPreviewLogic.cs @@ -25,7 +25,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic [ObjectCreator.UseCtor] internal MapPreviewLogic(Widget widget, ModData modData, OrderManager orderManager, Func getMap, - Action onMouseDown, Func> getSpawnOccupants) + Action onMouseDown, Func> getSpawnOccupants, bool showUnoccupiedSpawnpoints) { var mapRepository = modData.Manifest.Get().MapRepository; @@ -38,7 +38,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic return map.Status == MapStatus.Available && (!map.RulesLoaded || !map.InvalidCustomRules); }; - SetupWidgets(available, getMap, onMouseDown, getSpawnOccupants); + SetupWidgets(available, getMap, onMouseDown, getSpawnOccupants, showUnoccupiedSpawnpoints); } var invalid = widget.GetOrNull("MAP_INVALID"); @@ -50,14 +50,14 @@ namespace OpenRA.Mods.Common.Widgets.Logic return map.Status == MapStatus.Available && map.InvalidCustomRules; }; - SetupWidgets(invalid, getMap, onMouseDown, getSpawnOccupants); + SetupWidgets(invalid, getMap, onMouseDown, getSpawnOccupants, showUnoccupiedSpawnpoints); } var download = widget.GetOrNull("MAP_DOWNLOADABLE"); if (download != null) { download.IsVisible = () => getMap().Status == MapStatus.DownloadAvailable; - SetupWidgets(download, getMap, onMouseDown, getSpawnOccupants); + SetupWidgets(download, getMap, onMouseDown, getSpawnOccupants, showUnoccupiedSpawnpoints); var install = download.GetOrNull("MAP_INSTALL"); if (install != null) @@ -86,7 +86,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic return map.Status != MapStatus.Available && map.Status != MapStatus.DownloadAvailable; }; - SetupWidgets(progress, getMap, onMouseDown, getSpawnOccupants); + SetupWidgets(progress, getMap, onMouseDown, getSpawnOccupants, showUnoccupiedSpawnpoints); var statusSearching = progress.GetOrNull("MAP_STATUS_SEARCHING"); if (statusSearching != null) @@ -172,12 +172,13 @@ namespace OpenRA.Mods.Common.Widgets.Logic } void SetupWidgets(Widget parent, Func getMap, - Action onMouseDown, Func> getSpawnOccupants) + Action onMouseDown, Func> getSpawnOccupants, bool showUnoccupiedSpawnpoints) { var preview = parent.Get("MAP_PREVIEW"); preview.Preview = () => getMap(); preview.OnMouseDown = mi => onMouseDown(preview, getMap(), mi); preview.SpawnOccupants = () => getSpawnOccupants(getMap()); + preview.ShowUnoccupiedSpawnpoints = showUnoccupiedSpawnpoints; var titleLabel = parent.GetOrNull("MAP_TITLE"); if (titleLabel != null) diff --git a/OpenRA.Mods.Common/Widgets/Logic/Lobby/SpawnSelectorTooltipLogic.cs b/OpenRA.Mods.Common/Widgets/Logic/Lobby/SpawnSelectorTooltipLogic.cs index 15f9da181b..362302f20f 100644 --- a/OpenRA.Mods.Common/Widgets/Logic/Lobby/SpawnSelectorTooltipLogic.cs +++ b/OpenRA.Mods.Common/Widgets/Logic/Lobby/SpawnSelectorTooltipLogic.cs @@ -18,9 +18,10 @@ namespace OpenRA.Mods.Common.Widgets.Logic public class SpawnSelectorTooltipLogic : ChromeLogic { [ObjectCreator.UseCtor] - public SpawnSelectorTooltipLogic(Widget widget, TooltipContainerWidget tooltipContainer, MapPreviewWidget preview) + public SpawnSelectorTooltipLogic(Widget widget, TooltipContainerWidget tooltipContainer, MapPreviewWidget preview, bool showUnoccupiedSpawnpoints) { - widget.IsVisible = () => preview.TooltipSpawnIndex != -1; + bool showTooltip = true; + widget.IsVisible = () => preview.TooltipSpawnIndex != -1 && showTooltip; var label = widget.Get("LABEL"); var flag = widget.Get("FLAG"); var team = widget.Get("TEAM"); @@ -39,11 +40,18 @@ namespace OpenRA.Mods.Common.Widgets.Logic tooltipContainer.BeforeRender = () => { + showTooltip = true; var occupant = preview.SpawnOccupants().Values.FirstOrDefault(c => c.SpawnPoint == preview.TooltipSpawnIndex); var teamWidth = 0; if (occupant == null) { + if (!showUnoccupiedSpawnpoints) + { + showTooltip = false; + return; + } + labelText = "Available spawn"; playerFaction = null; playerTeam = 0; diff --git a/OpenRA.Mods.Common/Widgets/Logic/ReplayBrowserLogic.cs b/OpenRA.Mods.Common/Widgets/Logic/ReplayBrowserLogic.cs index 8c003d2635..19e5b93b8a 100644 --- a/OpenRA.Mods.Common/Widgets/Logic/ReplayBrowserLogic.cs +++ b/OpenRA.Mods.Common/Widgets/Logic/ReplayBrowserLogic.cs @@ -81,6 +81,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic { "onMouseDown", (Action)((preview, mapPreview, mi) => { }) }, { "getSpawnOccupants", (Func>)(mapPreview => LobbyUtils.GetSpawnOccupants(selectedReplay.GameInfo.Players, mapPreview)) }, + { "showUnoccupiedSpawnpoints", false }, }); var replayDuration = new CachedTransform(r => diff --git a/OpenRA.Mods.Common/Widgets/MapPreviewWidget.cs b/OpenRA.Mods.Common/Widgets/MapPreviewWidget.cs index a5539cbf2f..54fb1f2d69 100644 --- a/OpenRA.Mods.Common/Widgets/MapPreviewWidget.cs +++ b/OpenRA.Mods.Common/Widgets/MapPreviewWidget.cs @@ -67,6 +67,7 @@ namespace OpenRA.Mods.Common.Widgets public Func> SpawnOccupants = () => new Dictionary(); public Action OnMouseDown = _ => { }; public int TooltipSpawnIndex = -1; + public bool ShowUnoccupiedSpawnpoints = true; Rectangle mapRect; float previewScale = 0; @@ -122,7 +123,11 @@ namespace OpenRA.Mods.Common.Widgets public override void MouseEntered() { if (TooltipContainer != null) - tooltipContainer.Value.SetTooltip(TooltipTemplate, new WidgetArgs() { { "preview", this } }); + tooltipContainer.Value.SetTooltip(TooltipTemplate, new WidgetArgs() + { + { "preview", this }, + { "showUnoccupiedSpawnpoints", ShowUnoccupiedSpawnpoints } + }); } public override void MouseExited()