diff --git a/OpenRA.Mods.Common/Widgets/Logic/Ingame/GameInfoLogic.cs b/OpenRA.Mods.Common/Widgets/Logic/Ingame/GameInfoLogic.cs index 08eae9e622..f8e15c84ac 100644 --- a/OpenRA.Mods.Common/Widgets/Logic/Ingame/GameInfoLogic.cs +++ b/OpenRA.Mods.Common/Widgets/Logic/Ingame/GameInfoLogic.cs @@ -39,7 +39,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic numTabs++; var objectivesTabButton = widget.Get(string.Concat("BUTTON", numTabs.ToString())); objectivesTabButton.GetText = () => "Objectives"; - objectivesTabButton.IsVisible = () => lp != null && numTabs > 1; + objectivesTabButton.IsVisible = () => lp != null && numTabs > 1 && !hasError; objectivesTabButton.OnClick = () => activePanel = IngameInfoPanel.Objectives; objectivesTabButton.IsHighlighted = () => activePanel == IngameInfoPanel.Objectives; @@ -59,7 +59,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic numTabs++; var mapTabButton = widget.Get(string.Concat("BUTTON", numTabs.ToString())); mapTabButton.Text = "Briefing"; - mapTabButton.IsVisible = () => numTabs > 1; + mapTabButton.IsVisible = () => numTabs > 1 && !hasError; mapTabButton.OnClick = () => activePanel = IngameInfoPanel.Map; mapTabButton.IsHighlighted = () => activePanel == IngameInfoPanel.Map; @@ -78,7 +78,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic numTabs++; var debugTabButton = widget.Get(string.Concat("BUTTON", numTabs.ToString())); debugTabButton.Text = "Debug"; - debugTabButton.IsVisible = () => lp != null && world.LobbyInfo.GlobalSettings.AllowCheats && numTabs > 1; + debugTabButton.IsVisible = () => lp != null && world.LobbyInfo.GlobalSettings.AllowCheats && numTabs > 1 && !hasError; debugTabButton.IsDisabled = () => world.IsGameOver; debugTabButton.OnClick = () => activePanel = IngameInfoPanel.Debug; debugTabButton.IsHighlighted = () => activePanel == IngameInfoPanel.Debug; diff --git a/OpenRA.Mods.Common/Widgets/Logic/Ingame/IngameMenuLogic.cs b/OpenRA.Mods.Common/Widgets/Logic/Ingame/IngameMenuLogic.cs index 678af1bf57..376ad36786 100644 --- a/OpenRA.Mods.Common/Widgets/Logic/Ingame/IngameMenuLogic.cs +++ b/OpenRA.Mods.Common/Widgets/Logic/Ingame/IngameMenuLogic.cs @@ -11,6 +11,7 @@ using System; using System.Linq; using OpenRA.Graphics; +using OpenRA.Mods.Common.Scripting; using OpenRA.Mods.Common.Traits; using OpenRA.Traits; using OpenRA.Widgets; @@ -35,6 +36,9 @@ namespace OpenRA.Mods.Common.Widgets.Logic var hideMenu = false; menu.Get("MENU_BUTTONS").IsVisible = () => !hideMenu; + var scriptContext = world.WorldActor.TraitOrDefault(); + var hasError = scriptContext != null && scriptContext.FatalErrorOccurred; + // TODO: Create a mechanism to do things like this cleaner. Also needed for scripted missions Action onQuit = () => { @@ -102,13 +106,12 @@ namespace OpenRA.Mods.Common.Widgets.Logic }; var surrenderButton = menu.Get("SURRENDER"); surrenderButton.IsVisible = () => world.Type == WorldType.Regular; - surrenderButton.IsDisabled = () => (world.LocalPlayer == null || world.LocalPlayer.WinState != WinState.Undefined); + surrenderButton.IsDisabled = () => (world.LocalPlayer == null || world.LocalPlayer.WinState != WinState.Undefined) || hasError; surrenderButton.OnClick = () => { hideMenu = true; ConfirmationDialogs.PromptConfirmAction("Surrender", "Are you sure you want to surrender?", onSurrender, showMenu); }; - surrenderButton.IsDisabled = () => world.LocalPlayer == null || world.LocalPlayer.WinState != WinState.Undefined; var saveMapButton = menu.Get("SAVE_MAP"); saveMapButton.IsVisible = () => world.Type == WorldType.Editor;