diff --git a/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj b/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj index f2aeefea5f..1e2f11951a 100644 --- a/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj +++ b/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj @@ -485,6 +485,7 @@ + diff --git a/OpenRA.Mods.RA/Widgets/Logic/ConnectionLogic.cs b/OpenRA.Mods.RA/Widgets/Logic/ConnectionLogic.cs index 255d05ea61..89b4c91bae 100644 --- a/OpenRA.Mods.RA/Widgets/Logic/ConnectionLogic.cs +++ b/OpenRA.Mods.RA/Widgets/Logic/ConnectionLogic.cs @@ -88,7 +88,10 @@ namespace OpenRA.Mods.RA.Widgets.Logic var abortButton = panel.Get("ABORT_BUTTON"); var retryButton = panel.Get("RETRY_BUTTON"); + abortButton.Visible = onAbort != null; abortButton.OnClick = () => { Ui.CloseWindow(); onAbort(); }; + + retryButton.Visible = onRetry != null; retryButton.OnClick = () => { var password = passwordField != null && passwordField.IsVisible() ? passwordField.Text : orderManager.Password; diff --git a/OpenRA.Mods.RA/Widgets/Logic/DisconnectWatcherLogic.cs b/OpenRA.Mods.RA/Widgets/Logic/DisconnectWatcherLogic.cs new file mode 100644 index 0000000000..dc780ee678 --- /dev/null +++ b/OpenRA.Mods.RA/Widgets/Logic/DisconnectWatcherLogic.cs @@ -0,0 +1,41 @@ +#region Copyright & License Information +/* + * Copyright 2007-2014 The OpenRA Developers (see AUTHORS) + * This file is part of OpenRA, which is free software. It is made + * available to you under the terms of the GNU General Public License + * as published by the Free Software Foundation. For more information, + * see COPYING. + */ +#endregion + +using OpenRA.Network; +using OpenRA.Widgets; + +namespace OpenRA.Mods.RA.Widgets.Logic +{ + public class DisconnectWatcherLogic + { + [ObjectCreator.UseCtor] + public DisconnectWatcherLogic(Widget widget, OrderManager orderManager) + { + var disconnected = false; + widget.Get("DISCONNECT_WATCHER").OnTick = () => + { + if (!disconnected && orderManager.Connection.ConnectionState == ConnectionState.NotConnected) + { + Game.RunAfterTick(() => + { + Ui.OpenWindow("CONNECTIONFAILED_PANEL", new WidgetArgs() + { + { "orderManager", orderManager }, + { "onAbort", null }, + { "onRetry", null } + }); + }); + + disconnected = true; + } + }; + } + } +} diff --git a/mods/cnc/chrome/ingame.yaml b/mods/cnc/chrome/ingame.yaml index fa94cd273f..3e6182850b 100644 --- a/mods/cnc/chrome/ingame.yaml +++ b/mods/cnc/chrome/ingame.yaml @@ -1,6 +1,8 @@ Container@INGAME_ROOT: Logic:CncIngameChromeLogic Children: + LogicTicker@DISCONNECT_WATCHER: + Logic:DisconnectWatcherLogic Timer@GAME_TIMER: X: WINDOW_RIGHT/2 Y: 0 diff --git a/mods/d2k/chrome/ingame.yaml b/mods/d2k/chrome/ingame.yaml index d7a96bad48..177cce6a79 100644 --- a/mods/d2k/chrome/ingame.yaml +++ b/mods/d2k/chrome/ingame.yaml @@ -1,6 +1,8 @@ Container@INGAME_ROOT: Logic:IngameChromeLogic Children: + LogicTicker@DISCONNECT_WATCHER: + Logic:DisconnectWatcherLogic WorldInteractionController@INTERACTION_CONTROLLER: X:0 Y:0 diff --git a/mods/ra/chrome/ingame.yaml b/mods/ra/chrome/ingame.yaml index 233cb833ea..2700640889 100644 --- a/mods/ra/chrome/ingame.yaml +++ b/mods/ra/chrome/ingame.yaml @@ -1,6 +1,8 @@ Container@INGAME_ROOT: Logic:IngameChromeLogic Children: + LogicTicker@DISCONNECT_WATCHER: + Logic:DisconnectWatcherLogic WorldInteractionController@INTERACTION_CONTROLLER: X:0 Y:0